open-index/open-npm huggingface dataset:
npm package: @guanghechen/helper-cipher
Description: Utility functions for cipher contents.
Author: guanghechen
Latest version: 5.0.7

<header>
  <h1 align="center">
    <a href="https://github.com/guanghechen/node-scaffolds/tree/@guanghechen/helper-cipher@5.0.7/packages/helper-cipher#readme">@guanghechen/helper-cipher</a>
  </h1>
  <div align="center">
    <a href="https://www.npmjs.com/package/@guanghechen/helper-cipher">
      <img
        alt="Npm Version"
        src="https://img.shields.io/npm/v/@guanghechen/helper-cipher.svg"
      />
    </a>
    <a href="https://www.npmjs.com/package/@guanghechen/helper-cipher">
      <img
        alt="Npm Download"
        src="https://img.shields.io/npm/dm/@guanghechen/helper-cipher.svg"
      />
    </a>
    <a href="https://www.npmjs.com/package/@guanghechen/helper-cipher">
      <img
        alt="Npm License"
        src="https://img.shields.io/npm/l/@guanghechen/helper-cipher.svg"
      />
    </a>
    <a href="#install">
      <img
        alt="Module Formats: cjs"
        src="https://img.shields.io/badge/module_formats-cjs-green.svg"
      />
    </a>
    <a href="https://github.com/nodejs/node">
      <img
        alt="Node.js Version"
        src="https://img.shields.io/node/v/@guanghechen/helper-cipher"
      />
    </a>
    <a href="https://github.com/facebook/jest">
      <img
        alt="Tested with Jest"
        src="https://img.shields.io/badge/tested_with-jest-9c465e.svg"
      />
    </a>
    <a href="https://github.com/prettier/prettier">
      <img
        alt="Code Style: prettier"
        src="https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square"
      />
    </a>
  </div>
</header>
<br/>

Utility functions for cipher contents.


## Install

* npm

  ```bash
  npm install --save @guanghechen/helper-cipher
  ```

* yarn

  ```bash
  yarn add @guanghechen/helper-cipher
  ```

## Usage

* `AesCipher` / `AesCipherFactory`

  ```typescript
  import { AesGcmCipherFactory } from '@guanghechen/helper-cipher'

  const cipherFactory = new AesGcmCipherFactory()
  const secret = cipherFactory.createRandomSecret()
  cipherFactory.initFromSecret(secret)
  const cipher = cipherFactory.cipher()

  // encrypt
  const originalContent = fs.readFileSync(sourceFilepath)
  const { cryptBytes, authTag } = cipher.encrypt(originalContent)

  // decrypt
  const plainBytes: Buffer = cipher.decrypt(cryptBytes, { authTag })
  ```



### Overview

Name                  | Description
:--------------------:|:----------------------------:
`AesGcmCipher`        | A ICipher implementation with AES-256-GCM algorithm.
`AesGcmCipherFactory` |


[homepage]: https://github.com/guanghechen/node-scaffolds/tree/@guanghechen/helper-cipher@5.0.7/packages/helper-cipher#readme
npm package: @guanghechen/helper-config
Description: Utilities for read / write config files.
Author: guanghechen
Latest version: 5.0.10

<header>
  <h1 align="center">
    <a href="https://github.com/guanghechen/node-scaffolds/tree/@guanghechen/helper-config@5.0.10/packages/helper-config#readme">@guanghechen/helper-config</a>
  </h1>
  <div align="center">
    <a href="https://www.npmjs.com/package/@guanghechen/helper-config">
      <img
        alt="Npm Version"
        src="https://img.shields.io/npm/v/@guanghechen/helper-config.svg"
      />
    </a>
    <a href="https://www.npmjs.com/package/@guanghechen/helper-config">
      <img
        alt="Npm Download"
        src="https://img.shields.io/npm/dm/@guanghechen/helper-config.svg"
      />
    </a>
    <a href="https://www.npmjs.com/package/@guanghechen/helper-config">
      <img
        alt="Npm License"
        src="https://img.shields.io/npm/l/@guanghechen/helper-config.svg"
      />
    </a>
    <a href="https://github.com/nodejs/node">
      <img
        alt="Node.js Version"
        src="https://img.shields.io/node/v/@guanghechen/helper-config"
      />
    </a>
    <a href="https://github.com/facebook/jest">
      <img
        alt="Tested with Jest"
        src="https://img.shields.io/badge/tested_with-jest-9c465e.svg"
      />
    </a>
    <a href="https://github.com/prettier/prettier">
      <img
        alt="Code Style: prettier"
        src="https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square"
      />
    </a>
  </div>
</header>
<br/>


Utilities for read / write config files.

## Install

* npm

  ```bash
  npm install --save-dev @guanghechen/helper-config
  ```

* yarn

  ```bash
  yarn add --dev @guanghechen/helper-config
  ```

## Usage

Name                    | Description
:----------------------:|:----------------------------------------------------------------
`PlainJsonConfigKeeper` |
`JsonConfigKeeper`      |


[homepage]: https://github.com/guanghechen/node-scaffolds/tree/@guanghechen/helper-config@5.0.10/packages/helper-config#readme
npm package: @guanghechen/helper-file
Description: File helper
Author: guanghechen
Latest version: 5.0.7

<header>
  <h1 align="center">
    <a href="https://github.com/guanghechen/node-scaffolds/tree/@guanghechen/helper-file@5.0.7/packages/helper-file#readme">@guanghechen/helper-file</a>
  </h1>
  <div align="center">
    <a href="https://www.npmjs.com/package/@guanghechen/helper-file">
      <img
        alt="Npm Version"
        src="https://img.shields.io/npm/v/@guanghechen/helper-file.svg"
      />
    </a>
    <a href="https://www.npmjs.com/package/@guanghechen/helper-file">
      <img
        alt="Npm Download"
        src="https://img.shields.io/npm/dm/@guanghechen/helper-file.svg"
      />
    </a>
    <a href="https://www.npmjs.com/package/@guanghechen/helper-file">
      <img
        alt="Npm License"
        src="https://img.shields.io/npm/l/@guanghechen/helper-file.svg"
      />
    </a>
    <a href="#install">
      <img
        alt="Module Formats: cjs"
        src="https://img.shields.io/badge/module_formats-cjs-green.svg"
      />
    </a>
    <a href="https://github.com/nodejs/node">
      <img
        alt="Node.js Version"
        src="https://img.shields.io/node/v/@guanghechen/helper-file"
      />
    </a>
    <a href="https://github.com/facebook/jest">
      <img
        alt="Tested with Jest"
        src="https://img.shields.io/badge/tested_with-jest-9c465e.svg"
      />
    </a>
    <a href="https://github.com/prettier/prettier">
      <img
        alt="Code Style: prettier"
        src="https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square"
      />
    </a>
  </div>
</header>
<br/>

A collection of utility functions for handling files, such as split big file or
merge multiple small files.


## Install

* npm

  ```bash
  npm install --save @guanghechen/helper-file
  ```

* yarn

  ```bash
  yarn add @guanghechen/helper-file
  ```

## Usage

* `BigFileHelper` (inspired by [split-file][])

  ```typescript
  import { bigFileHelper, calcFilePartItemsBySize } from '@guanghechen/helper-file'

  async function splitFile(filepath: string): Promise<string[]> {
    const parts = calcFilePartItemsBySize(filepath, 1024 * 1024 * 80) // 80MB per chunk 
    const partFilepaths: string[] = await bigFileHelper.split(filepath, parts)
    return partFilepaths
  }

  splitFile('big-file.txt')
  ```

### Overview

Name                                | Description
:----------------------------------:|:----------------------------:
`BigFileHelper`                     | A utility class for split / merging big files
`bigFileHelper`                     | Default instance of `BigFleHelper`
`calcFilePartItemsBySize`           | Generate file part items by part size
`calcFilePartItemsByCount`          | Generate file part items by total of parts
`calcFilePartNames`                 | Generate file part names (suffix)


[homepage]: https://github.com/guanghechen/node-scaffolds/tree/@guanghechen/helper-file@5.0.7/packages/helper-file#readme
[split-file]: https://github.com/tomvlk/node-split-file
npm package: @guanghechen/helper-fs
Description: Provide some enhanced methods base on `node:fs`.
Author: guanghechen
Latest version: 6.0.0-alpha.7

<header>
  <h1 align="center">
    <a href="https://github.com/guanghechen/node-scaffolds/tree/@guanghechen/helper-fs@6.0.0-alpha.7/packages/helper-fs#readme">@guanghechen/helper-fs</a>
  </h1>
  <div align="center">
    <a href="https://www.npmjs.com/package/@guanghechen/helper-fs">
      <img
        alt="Npm Version"
        src="https://img.shields.io/npm/v/@guanghechen/helper-fs.svg"
      />
    </a>
    <a href="https://www.npmjs.com/package/@guanghechen/helper-fs">
      <img
        alt="Npm Download"
        src="https://img.shields.io/npm/dm/@guanghechen/helper-fs.svg"
      />
    </a>
    <a href="https://www.npmjs.com/package/@guanghechen/helper-fs">
      <img
        alt="Npm License"
        src="https://img.shields.io/npm/l/@guanghechen/helper-fs.svg"
      />
    </a>
    <a href="https://github.com/nodejs/node">
      <img
        alt="Node.js Version"
        src="https://img.shields.io/node/v/@guanghechen/helper-fs"
      />
    </a>
    <a href="https://github.com/facebook/jest">
      <img
        alt="Tested with Jest"
        src="https://img.shields.io/badge/tested_with-jest-9c465e.svg"
      />
    </a>
    <a href="https://github.com/prettier/prettier">
      <img
        alt="Code Style: prettier"
        src="https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square"
      />
    </a>
  </div>
</header>
<br/>

Provide some enhanced methods base on `node:fs`.

## Install

* npm

  ```bash
  npm install --save @guanghechen/helper-fs
  ```

* yarn

  ```bash
  yarn add @guanghechen/helper-fs
  ```

## Usage

Name                                | Description
:----------------------------------:|:----------------------------------------------------------------
`collectAllFiles`                   | (async) Collect all files under the given directory
`collectAllFilesSync`               | Collect all files under the given directory (synchronizing)
`emptyDir`                          | (async) Remove all files under the given directory path.
`ensureCriticalFilepathExistsSync`  | Ensure critical filepath exists
`isDirectorySync`                   | Check whether if the dirpath is a directory path
`isFileSync`                        | Check whether if the filepath is a file path
`isNonExistentOrEmpty`              | Check whether if the dirPath is a non-existent path or empty folder
`mkdirsIfNotExists`                 | Create a path of directories
`writeFile`                         | Same as the writeFile method provided in `node:fs/promises`, except that it will ensure that the parent path exists.


[homepage]: https://github.com/guanghechen/node-scaffolds/tree/@guanghechen/helper-fs@6.0.0-alpha.7/packages/helper-fs#readme
npm package: @guanghechen/helper-func
Description: Helpful utility funcs.
Author: guanghechen
Latest version: 6.0.0-alpha.1

<header>
  <h1 align="center">
    <a href="https://github.com/guanghechen/node-scaffolds/tree/@guanghechen/helper-func@6.0.0-alpha.1/packages/helper-func#readme">@guanghechen/helper-func</a>
  </h1>
  <div align="center">
    <a href="https://www.npmjs.com/package/@guanghechen/helper-func">
      <img
        alt="Npm Version"
        src="https://img.shields.io/npm/v/@guanghechen/helper-func.svg"
      />
    </a>
    <a href="https://www.npmjs.com/package/@guanghechen/helper-func">
      <img
        alt="Npm Download"
        src="https://img.shields.io/npm/dm/@guanghechen/helper-func.svg"
      />
    </a>
    <a href="https://www.npmjs.com/package/@guanghechen/helper-func">
      <img
        alt="Npm License"
        src="https://img.shields.io/npm/l/@guanghechen/helper-func.svg"
      />
    </a>
    <a href="https://github.com/nodejs/node">
      <img
        alt="Node.js Version"
        src="https://img.shields.io/node/v/@guanghechen/helper-func"
      />
    </a>
    <a href="https://github.com/facebook/jest">
      <img
        alt="Tested with Jest"
        src="https://img.shields.io/badge/tested_with-jest-9c465e.svg"
      />
    </a>
    <a href="https://github.com/prettier/prettier">
      <img
        alt="Code Style: prettier"
        src="https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square"
      />
    </a>
  </div>
</header>
<br/>

Helpful utility funcs.


## Install

* npm

  ```bash
  npm install --save-dev @guanghechen/helper-func
  ```

* yarn

  ```bash
  yarn add --dev @guanghechen/helper-func
  ```

## Usage

Name                | Description
:------------------:|:----------------------------------------------------------------
`delay`             | Waiting a given million seconds.
`falsy`             | Always return `false`.
`filterIterable`    | `.filter` method for Iterable structure.
`identity`          | Return the input data directly.
`iterable2map`      | Create a map from list.
`mapIterable`       | `.map` method for Iterable structure.
`noop`              | Do nothing.
`parseBytesString`  | Parse texts like 1M, 1Mb, 1G to the number of bytes.
`truthy`            | Always return `true`.

[homepage]: https://github.com/guanghechen/node-scaffolds/tree/@guanghechen/helper-func@6.0.0-alpha.1/packages/helper-func#readme
npm package: @guanghechen/helper-git
Description: Utility functions for executing git commands.
Author: guanghechen
Latest version: 6.0.0-alpha.7

<header>
  <h1 align="center">
    <a href="https://github.com/guanghechen/node-scaffolds/tree/@guanghechen/helper-git@6.0.0-alpha.7/packages/helper-git#readme">@guanghechen/helper-git</a>
  </h1>
  <div align="center">
    <a href="https://www.npmjs.com/package/@guanghechen/helper-git">
      <img
        alt="Npm Version"
        src="https://img.shields.io/npm/v/@guanghechen/helper-git.svg"
      />
    </a>
    <a href="https://www.npmjs.com/package/@guanghechen/helper-git">
      <img
        alt="Npm Download"
        src="https://img.shields.io/npm/dm/@guanghechen/helper-git.svg"
      />
    </a>
    <a href="https://www.npmjs.com/package/@guanghechen/helper-git">
      <img
        alt="Npm License"
        src="https://img.shields.io/npm/l/@guanghechen/helper-git.svg"
      />
    </a>
    <a href="#install">
      <img
        alt="Module Formats: cjs"
        src="https://img.shields.io/badge/module_formats-cjs-green.svg"
      />
    </a>
    <a href="https://github.com/nodejs/node">
      <img
        alt="Node.js Version"
        src="https://img.shields.io/node/v/@guanghechen/helper-git"
      />
    </a>
    <a href="https://github.com/facebook/jest">
      <img
        alt="Eslint Version"
        src="https://img.shields.io/npm/dependency-version/@guanghechen/helper-git/peer/jest"
      />
    </a>
    <a href="https://github.com/facebook/jest">
      <img
        alt="Tested with Jest"
        src="https://img.shields.io/badge/tested_with-jest-9c465e.svg"
      />
    </a>
    <a href="https://github.com/prettier/prettier">
      <img
        alt="Code Style: prettier"
        src="https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square"
      />
    </a>
  </div>
</header>
<br/>


Utility functions for executing git commands.

## Install

* npm

  ```bash
  npm install --save-dev @guanghechen/helper-git
  ```

* yarn

  ```bash
  yarn add --dev @guanghechen/helper-git
  ```


## Related


[homepage]: https://github.com/guanghechen/node-scaffolds/tree/@guanghechen/helper-git@6.0.0-alpha.7/packages/helper-git#readme
npm package: @guanghechen/helper-git-cipher
Description: Utility functions for encrypt / decrypt git repo.
Author: guanghechen
Latest version: 6.0.0-alpha.18

<header>
  <h1 align="center">
    <a href="https://github.com/guanghechen/node-scaffolds/tree/@guanghechen/helper-git-cipher@6.0.0-alpha.18/packages/helper-git-cipher#readme">@guanghechen/helper-git-cipher</a>
  </h1>
  <div align="center">
    <a href="https://www.npmjs.com/package/@guanghechen/helper-git-cipher">
      <img
        alt="Npm Version"
        src="https://img.shields.io/npm/v/@guanghechen/helper-git-cipher.svg"
      />
    </a>
    <a href="https://www.npmjs.com/package/@guanghechen/helper-git-cipher">
      <img
        alt="Npm Download"
        src="https://img.shields.io/npm/dm/@guanghechen/helper-git-cipher.svg"
      />
    </a>
    <a href="https://www.npmjs.com/package/@guanghechen/helper-git-cipher">
      <img
        alt="Npm License"
        src="https://img.shields.io/npm/l/@guanghechen/helper-git-cipher.svg"
      />
    </a>
    <a href="#install">
      <img
        alt="Module Formats: cjs"
        src="https://img.shields.io/badge/module_formats-cjs-green.svg"
      />
    </a>
    <a href="https://github.com/nodejs/node">
      <img
        alt="Node.js Version"
        src="https://img.shields.io/node/v/@guanghechen/helper-git-cipher"
      />
    </a>
    <a href="https://github.com/facebook/jest">
      <img
        alt="Eslint Version"
        src="https://img.shields.io/npm/dependency-version/@guanghechen/helper-git-cipher/peer/jest"
      />
    </a>
    <a href="https://github.com/facebook/jest">
      <img
        alt="Tested with Jest"
        src="https://img.shields.io/badge/tested_with-jest-9c465e.svg"
      />
    </a>
    <a href="https://github.com/prettier/prettier">
      <img
        alt="Code Style: prettier"
        src="https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square"
      />
    </a>
  </div>
</header>
<br/>


Utility functions for encrypt / decrypt git repo.

## Install

* npm

  ```bash
  npm install --save-dev @guanghechen/helper-git-cipher
  ```

* yarn

  ```bash
  yarn add --dev @guanghechen/helper-git-cipher
  ```


## Related


[homepage]: https://github.com/guanghechen/node-scaffolds/tree/@guanghechen/helper-git-cipher@6.0.0-alpha.18/packages/helper-git-cipher#readme
npm package: @guanghechen/helper-mac
Description: Utility functions for calculating Message Authentication Code.
Author: guanghechen
Latest version: 5.0.9

<header>
  <h1 align="center">
    <a href="https://github.com/guanghechen/node-scaffolds/tree/@guanghechen/helper-mac@5.0.9/packages/helper-mac#readme">@guanghechen/helper-mac</a>
  </h1>
  <div align="center">
    <a href="https://www.npmjs.com/package/@guanghechen/helper-mac">
      <img
        alt="Npm Version"
        src="https://img.shields.io/npm/v/@guanghechen/helper-mac.svg"
      />
    </a>
    <a href="https://www.npmjs.com/package/@guanghechen/helper-mac">
      <img
        alt="Npm Download"
        src="https://img.shields.io/npm/dm/@guanghechen/helper-mac.svg"
      />
    </a>
    <a href="https://www.npmjs.com/package/@guanghechen/helper-mac">
      <img
        alt="Npm License"
        src="https://img.shields.io/npm/l/@guanghechen/helper-mac.svg"
      />
    </a>
    <a href="#install">
      <img
        alt="Module Formats: cjs"
        src="https://img.shields.io/badge/module_formats-cjs-green.svg"
      />
    </a>
    <a href="https://github.com/nodejs/node">
      <img
        alt="Node.js Version"
        src="https://img.shields.io/node/v/@guanghechen/helper-mac"
      />
    </a>
    <a href="https://github.com/facebook/jest">
      <img
        alt="Tested with Jest"
        src="https://img.shields.io/badge/tested_with-jest-9c465e.svg"
      />
    </a>
    <a href="https://github.com/prettier/prettier">
      <img
        alt="Code Style: prettier"
        src="https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square"
      />
    </a>
  </div>
</header>
<br/>

Utility functions for calculating Message Authentication Code.


## Install

* npm

  ```bash
  npm install --save @guanghechen/helper-mac
  ```

* yarn

  ```bash
  yarn add @guanghechen/helper-mac
  ```


### Overview

Name                  | Description
:--------------------:|:----------------------------:
`calcMac`             | Calc mac (Message Authentication Code).
`calcMacFromFile`     | Calc mac (Message Authentication Code) from fle.


[homepage]: https://github.com/guanghechen/node-scaffolds/tree/@guanghechen/helper-mac@5.0.9/packages/helper-mac#readme
npm package: @guanghechen/helper-path
Description: Utilities to handle url path and file path.
Author: guanghechen
Latest version: 5.0.9

<header>
  <h1 align="center">
    <a href="https://github.com/guanghechen/node-scaffolds/tree/@guanghechen/helper-path@5.0.9/packages/helper-path#readme">@guanghechen/helper-path</a>
  </h1>
  <div align="center">
    <a href="https://www.npmjs.com/package/@guanghechen/helper-path">
      <img
        alt="Npm Version"
        src="https://img.shields.io/npm/v/@guanghechen/helper-path.svg"
      />
    </a>
    <a href="https://www.npmjs.com/package/@guanghechen/helper-path">
      <img
        alt="Npm Download"
        src="https://img.shields.io/npm/dm/@guanghechen/helper-path.svg"
      />
    </a>
    <a href="https://www.npmjs.com/package/@guanghechen/helper-path">
      <img
        alt="Npm License"
        src="https://img.shields.io/npm/l/@guanghechen/helper-path.svg"
      />
    </a>
    <a href="https://github.com/nodejs/node">
      <img
        alt="Node.js Version"
        src="https://img.shields.io/node/v/@guanghechen/helper-path"
      />
    </a>
    <a href="https://github.com/facebook/jest">
      <img
        alt="Tested with Jest"
        src="https://img.shields.io/badge/tested_with-jest-9c465e.svg"
      />
    </a>
    <a href="https://github.com/prettier/prettier">
      <img
        alt="Code Style: prettier"
        src="https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square"
      />
    </a>
  </div>
</header>
<br/>

Utilities to handle url path and file path.


## Install

* npm

  ```bash
  npm install --save @guanghechen/helper-path
  ```

* yarn

  ```bash
  yarn add @guanghechen/helper-path
  ```

## Usage

Name                    | Description
:----------------------:|:----------------------------------------------------------------
`FilepathResolver`      | Resolve relative / absolute path under the given rootDir.
`absoluteOfWorkspace`   | Calc absolute filepath of p under the workspace.
`findNearestFilepath`   | Find a nearest file matched the predicate from the given directory.
`locateNearestFilepath` | Locate a nearest target file path from the given directory.
`normalizeUrlPath`      | Normalize url path.
`relativeOfWorkspace`   | Calc relative filepath to workspace.


[homepage]: https://github.com/guanghechen/node-scaffolds/tree/@guanghechen/helper-path@5.0.9/packages/helper-path#readme
npm package: @guanghechen/helper-storage
Description: Utilities for read / write content
Author: guanghechen
Latest version: 5.0.9

<header>
  <h1 align="center">
    <a href="https://github.com/guanghechen/node-scaffolds/tree/@guanghechen/helper-storage@5.0.9/packages/helper-storage#readme">@guanghechen/helper-storage</a>
  </h1>
  <div align="center">
    <a href="https://www.npmjs.com/package/@guanghechen/helper-storage">
      <img
        alt="Npm Version"
        src="https://img.shields.io/npm/v/@guanghechen/helper-storage.svg"
      />
    </a>
    <a href="https://www.npmjs.com/package/@guanghechen/helper-storage">
      <img
        alt="Npm Download"
        src="https://img.shields.io/npm/dm/@guanghechen/helper-storage.svg"
      />
    </a>
    <a href="https://www.npmjs.com/package/@guanghechen/helper-storage">
      <img
        alt="Npm License"
        src="https://img.shields.io/npm/l/@guanghechen/helper-storage.svg"
      />
    </a>
    <a href="https://github.com/nodejs/node">
      <img
        alt="Node.js Version"
        src="https://img.shields.io/node/v/@guanghechen/helper-storage"
      />
    </a>
    <a href="https://github.com/facebook/jest">
      <img
        alt="Tested with Jest"
        src="https://img.shields.io/badge/tested_with-jest-9c465e.svg"
      />
    </a>
    <a href="https://github.com/prettier/prettier">
      <img
        alt="Code Style: prettier"
        src="https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square"
      />
    </a>
  </div>
</header>
<br/>


Utilities for read / write content.

## Install

* npm

  ```bash
  npm install --save-dev @guanghechen/helper-storage
  ```

* yarn

  ```bash
  yarn add --dev @guanghechen/helper-storage
  ```

## Usage

Name                    | Description
:----------------------:|:----------------------------------------------------------------



[homepage]: https://github.com/guanghechen/node-scaffolds/tree/@guanghechen/helper-storage@5.0.9/packages/helper-storage#readme
npm package: @guanghechen/kit-copilot
Description: AI API proxy server routing through GitHub Copilot
Latest version: 0.6.17

# @guanghechen/kit-copilot

GitHub Copilot proxy server for `Claude`, `Codex`, and `Gemini` compatible endpoints.

## Environment Model

`kit-copilot` follows a strict environment flow:

1. CLI entry passes `process.env` to `@guanghechen/commander/node`.
2. Commander merges user envs with preset envs into `ctx.envs`.
3. Runtime logic consumes `ctx.envs` only.

There is no runtime fallback from business logic to global `process.env` for critical keys such as:

- `KIT_COPILOT_GITHUB_TOKEN`
- `COPILOT_CODEX_EXPERIMENTAL_HEADERS_ENABLED`
- `COPILOT_CODEX_BETA_FEATURES_ALLOWLIST`
- `COPILOT_OPENAI_BETA_ALLOWLIST`

## Preset File (`preset.json`)

Config root:

- `$XDG_CONFIG_HOME/kit/copilot` when `XDG_CONFIG_HOME` is set
- `~/.config/kit/copilot` otherwise

Default preset file:

- `<config-root>/preset.json`

Commander loads preset data from `preset.json` (`preset.file`) and merges selected profile into `ctx.envs`.
If `<config-root>/preset.json` does not exist, command runs without preset envs.

Example `preset.json`:

```json
{
  "version": 1,
  "defaults": { "profile": "default" },
  "profiles": {
    "default": {
      "envFile": ".env.local"
    }
  }
}
```

## Token Persistence

`kit-copilot auth` persists `KIT_COPILOT_GITHUB_TOKEN` to preset env storage.

- Persist target resolution: `variant.envFile` > `profile.envFile` > `<config-root>/.env.local`
- Persist target path is resolved from commander public preset metadata (`meta.file/profile/variant`) and preset profile `envFile`
- `GH_COPILOT_TOKEN` is not persisted

Note: persist target is selected from the active preset profile/variant; default fallback is `<config-root>/.env.local` when no `envFile` is configured or path resolution fails.

## Examples

```bash
kit-copilot auth
kit-copilot start --port=4141
```

With preset env file:

```dotenv
KIT_COPILOT_GITHUB_TOKEN=ghu_xxx
# Optional: allow forwarding high-risk Codex beta/experimental headers
COPILOT_CODEX_EXPERIMENTAL_HEADERS_ENABLED=true
COPILOT_CODEX_BETA_FEATURES_ALLOWLIST=feature_a
COPILOT_OPENAI_BETA_ALLOWLIST=responses_websockets=2026-02-06
```

## Realtime Voice (Codex)

`kit-copilot` supports Codex Realtime voice input via WebSocket handoff events.

Supported WS paths:

- `/api/codex`
- `/api/codex/realtime`
- `/api/codex/v1/realtime`

Path matching is exact by design:

- Trailing slash variants like `/api/codex/` and `/api/codex/realtime/` are rejected.

STT runtime envs (required):

- `KIT_STT_AZURE_API_KEY`
- `KIT_STT_AZURE_API_ENDPOINT`

Audio buffering policy:

- Flush is triggered by either idle debounce (`600ms`) or max segment duration (`4000ms`).
- Per-connection pending input audio has a hard cap of `20MB`; overflow emits `error` with `input_audio_buffer_overflow` and drops pending buffered audio.
- `input_audio_buffer.append.audio` must be canonical RFC4648 base64 (decode+re-encode must exactly match input).

Example:

```bash
KIT_STT_AZURE_API_KEY=... \
KIT_STT_AZURE_API_ENDPOINT=https://<resource>.openai.azure.com \
OPENAI_BASE_URL=http://127.0.0.1:4141/api/codex \
codex
```
npm package: @guanghechen/kit-image
Description: Prompt-driven image generation and editing CLI
Latest version: 0.1.5

# @guanghechen/kit-image

Prompt-driven image generation and editing CLI.

## Commands

- `kit-image healthcheck`
- `kit-image gen`
- `kit-image edit`
- `kit-image batch`
- `kit-image completion`

## Schema

- 本仓库路径：`packages/image/schema/batch.schema.json`
- 线上 `$id`：`https://guanghechen.github.io/kit/schemas/image/batch.schema.json`

## Batch Preset

`kit-image batch` 默认使用 `preset.json` 中的 `batch` profile。

最小示例：

```json
{
  "$schema": "https://cdn.jsdelivr.net/npm/@guanghechen/commander@latest/lib/schema/preset.config.schema.json",
  "version": 1,
  "defaults": { "profile": "gen" },
  "profiles": {
    "gen": {
      "opts": {
        "provider": "azure",
        "model": "gpt-image-1-5"
      }
    },
    "batch": {
      "opts": {},
      "defaultVariant": "local",
      "variants": {
        "local": {}
      }
    }
  }
}
```
npm package: @guanghechen/kit-profile
Description: Render shell environment variables from profile config
Latest version: 0.5.14

# @guanghechen/kit-profile

从 profile 配置渲染 shell 环境变量脚本。

命令会先将脚本写入系统剪切板，再输出脚本文本；不会直接修改父 shell 环境。

## 使用方式

通过 `kit` 聚合命令：

```bash
kit profile --shell fish --profile agent:prod | source
kit profile --fish --profile agent:prod | source
eval "$(kit profile --shell bash --profile agent:prod)"
eval "$(kit profile --bash --profile agent:prod)"
kit profile --shell pwsh --profile agent:prod | Invoke-Expression
kit profile --pwsh --profile agent:prod | Invoke-Expression
```

通过独立命令：

```bash
kit-profile --shell fish --profile agent:prod | source
kit-profile --fish --profile agent:prod | source
```

## 参数

- `--profile <name[:variant]>`: 必填，profile 选择器。
- `--shell <fish|bash|pwsh>`: 可选，目标 shell。
- `--fish`: 可选，`--shell fish` 的简写。
- `--bash`: 可选，`--shell bash` 的简写。
- `--pwsh`: 可选，`--shell pwsh` 的简写。
- `--set <key:value...>`: 可选，模板变量（variadic，可重复，后者覆盖前者）。
- `--allow-env <key...>`: 可选，显式放行默认拦截的危险 env key。

约束：

- `name` 不允许包含 `:`、`/`、`\`，且不能为 `.` 或 `..`。
- `variant` 不允许为空，且不允许包含 `:`。

说明：

- 不支持 `--config` 参数。
- `--shell` 与 `--fish/--bash/--pwsh` 至少需要提供一个。
- `--fish/--bash/--pwsh` 同时只能出现一个。
- 若剪切板写入失败，命令直接报错并退出。

## 配置路径

根据 `<name>` 自动查找以下配置文件：

1. `$XDG_CONFIG_HOME/kit/profile/<name>.profile.json`（若设置）
2. `~/.config/kit/profile/<name>.profile.json`（默认）

## 配置结构

```json
{
  "name": "agent",
  "envs": {
    "ANTHROPIC_BASE_URL": "http://localhost:${port}/api/claude"
  },
  "vars": {
    "port": 4747
  },
  "variants": {
    "prod": {
      "envs": {
        "NODE_ENV": "production"
      },
      "vars": {
        "port": 4747
      }
    }
  }
}
```

模板优先级：`--set` > `variant.vars` > `profile.vars`。

显式指定 variant 时，最终 env：`{ ...profile.envs, ...variant.envs }`。

输出脚本中的 env 按 key 名字典序排序。

## JSON Schema

- 本仓库路径：`packages/profile/schema/profile.schema.json`
- 发布后路径：`lib/schema/profile.schema.json`
- 线上 `$id`：`https://guanghechen.github.io/kit/schemas/profile/profile.schema.json`

生成命令：`pnpm -C packages/profile run schema:config`

## 安全策略

- 禁止危险对象键：`__proto__`、`constructor`、`prototype`。
- 默认拦截危险 env key：`BASH_ENV`、`ENV`、`PROMPT_COMMAND`。
- 如确有需要，可通过 `--allow-env` 显式放行。
npm package: @guanghechen/knuth-shuffle
Description: Knuth shuffle
Author: guanghechen
Latest version: 1.0.1
Deprecated: use @algorithm.ts/knuth-shuffle instead

<header>
  <h1 align="center">
    <a href="https://github.com/guanghechen/algorithm.ts/tree/main/packages/knuth-shuffle#readme">@guanghechen/knuth-shuffle</a>
  </h1>
  <div align="center">
    <a href="https://www.npmjs.com/package/@guanghechen/knuth-shuffle">
      <img
        alt="Npm Version"
        src="https://img.shields.io/npm/v/@guanghechen/knuth-shuffle.svg"
      />
    </a>
    <a href="https://www.npmjs.com/package/@guanghechen/knuth-shuffle">
      <img
        alt="Npm Download"
        src="https://img.shields.io/npm/dm/@guanghechen/knuth-shuffle.svg"
      />
    </a>
    <a href="https://www.npmjs.com/package/@guanghechen/knuth-shuffle">
      <img
        alt="Npm License"
        src="https://img.shields.io/npm/l/@guanghechen/knuth-shuffle.svg"
      />
    </a>
    <a href="#install">
      <img
        alt="Module Formats: cjs"
        src="https://img.shields.io/badge/module_formats-cjs-green.svg"
      />
    </a>
    <a href="https://github.com/nodejs/node">
      <img
        alt="Node.js Version"
        src="https://img.shields.io/node/v/@guanghechen/knuth-shuffle"
      />
    </a>
    <a href="https://github.com/facebook/jest">
      <img
        alt="Tested with Jest"
        src="https://img.shields.io/badge/tested_with-jest-9c465e.svg"
      />
    </a>
    <a href="https://github.com/prettier/prettier">
      <img
        alt="Code Style: prettier"
        src="https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square"
      />
    </a>
  </div>
</header>
<br/>


A typescript implementation of the **Knuth-Shuffle** algorithm.

Knuth-Shuffle is a shuffle algorithm, which can complete the shuffle in $O(N)$
time complexity on the basis of only using a constant level of extra space.

If you are interested in this algorithm, you can check [here][knuth-shuffle].


## Install

* npm

  ```bash
  npm install --save @guanghechen/knuth-shuffle
  ```

* yarn

  ```bash
  yarn add @guanghechen/knuth-shuffle
  ```

## Usage

* Shuffle nums.

  ```typescript
  import knuthShuffle from '@guanghechen/knuth-shuffle'

  knuthShuffle([1, 2, 3, 4, 5])
  ```

* Shuffle complex data nodes.

  ```typescript
  import knuthShuffle from '@guanghechen/knuth-shuffle'

  interface Node {
    name: string
    email: string
    age: number
  }

  const nodes: Node[] = [/*... omit ...*/]
  knuthShuffle(nodes)
  ```

## Related

* [洗牌问题和 knuth-shuffle 算法][knuth-shuffle]


[homepage]: https://github.com/guanghechen/algorithm.ts/tree/main/packages/knuth-shuffle#readme
[knuth-shuffle]: https://me.guanghechen.com/post/algorithm/shuffle/#heading-knuth-shuffle
npm package: @guanghechen/locate-helper
Description: Utils for locate nearest filepath matched the given pattern
Author: guanghechen
Latest version: 1.9.8

<header>
  <h1 align="center">
    <a href="https://github.com/guanghechen/node-scaffolds/tree/main/packages/locate-helper#readme">@guanghechen/locate-helper</a>
  </h1>
  <div align="center">
    <a href="https://www.npmjs.com/package/@guanghechen/locate-helper">
      <img
        alt="Npm Version"
        src="https://img.shields.io/npm/v/@guanghechen/locate-helper.svg"
      />
    </a>
    <a href="https://www.npmjs.com/package/@guanghechen/locate-helper">
      <img
        alt="Npm Download"
        src="https://img.shields.io/npm/dm/@guanghechen/locate-helper.svg"
      />
    </a>
    <a href="https://www.npmjs.com/package/@guanghechen/locate-helper">
      <img
        alt="Npm License"
        src="https://img.shields.io/npm/l/@guanghechen/locate-helper.svg"
      />
    </a>
    <a href="https://github.com/nodejs/node">
      <img
        alt="Node.js Version"
        src="https://img.shields.io/node/v/@guanghechen/locate-helper"
      />
    </a>
    <a href="https://github.com/facebook/jest">
      <img
        alt="Tested with Jest"
        src="https://img.shields.io/badge/tested_with-jest-9c465e.svg"
      />
    </a>
    <a href="https://github.com/prettier/prettier">
      <img
        alt="Code Style: prettier"
        src="https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square"
      />
    </a>
  </div>
</header>
<br/>


Utils for locate nearest filepath matched the given pattern.

## Install

* npm

  ```bash
  npm install --save @guanghechen/locate-helper
  ```

* yarn

  ```bash
  yarn add @guanghechen/locate-helper
  ```

## Usage

### `locateNearestFilepath`

```typescript
export function locateNearestFilepath(
  currentDir: string,
  filenames: string[],
): string | null
```

Locate a nearest filepath from the given `currentDir` which name included
in the give `filenames`.

  * `currentDir`: The starting directory of the locating.

  * `filenames`: The file name list of the file to be searched, the first existed filepath in the list will be returned as the result.

### `findNearestFilepath`

```typescript
export function findNearestFilepath(
  currentDir: string,
  testFilepath: (filepath: string) => boolean,
): string | null
```

Find a nearest filepath from the give `currentDir`which matched the give
tester `testFilepath`.

  * `currentDir`: The starting directory of the searching.

  * `testFilepath`: Test if a given filepath is an expected one.

### `locateLatestPackageJson`

```typescript
export function locateLatestPackageJson(currentDir: string): string | null
```

Find the latest `package.json` under the give `currentDir` or its ancestor path.

  * `currentDir`: The starting directory of the locating.

[homepage]: https://github.com/guanghechen/node-scaffolds/tree/main/packages/locate-helper#readme
npm package: @guanghechen/monitor
Description: Monitor
Author: guanghechen
Latest version: 2.0.0

<header>
  <h1 align="center">
    <a href="https://github.com/guanghechen/sora/tree/@guanghechen/monitor@2.0.0/packages/monitor#readme">@guanghechen/monitor</a>
  </h1>
  <div align="center">
    <a href="https://www.npmjs.com/package/@guanghechen/monitor">
      <img
        alt="Npm Version"
        src="https://img.shields.io/npm/v/@guanghechen/monitor.svg"
      />
    </a>
    <a href="https://www.npmjs.com/package/@guanghechen/monitor">
      <img
        alt="Npm Download"
        src="https://img.shields.io/npm/dm/@guanghechen/monitor.svg"
      />
    </a>
    <a href="https://www.npmjs.com/package/@guanghechen/monitor">
      <img
        alt="Npm License"
        src="https://img.shields.io/npm/l/@guanghechen/monitor.svg"
      />
    </a>
    <a href="#install">
      <img
        alt="Module Formats: cjs, esm"
        src="https://img.shields.io/badge/module_formats-cjs%2C%20esm-green.svg"
      />
    </a>
    <a href="https://github.com/nodejs/node">
      <img
        alt="Node.js Version"
        src="https://img.shields.io/node/v/@guanghechen/monitor"
      />
    </a>
    <a href="https://github.com/facebook/jest">
      <img
        alt="Tested with Jest"
        src="https://img.shields.io/badge/tested_with-jest-9c465e.svg"
      />
    </a>
    <a href="https://github.com/prettier/prettier">
      <img
        alt="Code Style: prettier"
        src="https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square"
      />
    </a>
  </div>
</header>
<br/>

Event monitoring and subscription management with disposable pattern support.

## Install

- npm

  ```bash
  npm install --save @guanghechen/monitor
  ```

- yarn

  ```bash
  yarn add @guanghechen/monitor
  ```

## Usage

[homepage]:
  https://github.com/guanghechen/sora/tree/@guanghechen/monitor@2.0.0/packages/monitor#readme
npm package: @guanghechen/path.types
Description: types of @guanghechen/path
Author: guanghechen
Latest version: 2.0.0

<header>
  <h1 align="center">
    <a href="https://github.com/guanghechen/sora/tree/@guanghechen/path.types@2.0.0/packages/path.types#readme">@guanghechen/path.types</a>
  </h1>
  <div align="center">
    <a href="https://www.npmjs.com/package/@guanghechen/path.types">
      <img
        alt="Npm Version"
        src="https://img.shields.io/npm/v/@guanghechen/path.types.svg"
      />
    </a>
    <a href="https://www.npmjs.com/package/@guanghechen/path.types">
      <img
        alt="Npm Download"
        src="https://img.shields.io/npm/dm/@guanghechen/path.types.svg"
      />
    </a>
    <a href="https://www.npmjs.com/package/@guanghechen/path.types">
      <img
        alt="Npm License"
        src="https://img.shields.io/npm/l/@guanghechen/path.types.svg"
      />
    </a>
    <a href="#install">
      <img
        alt="Module Formats: cjs, esm"
        src="https://img.shields.io/badge/module_formats-cjs%2C%20esm-green.svg"
      />
    </a>
    <a href="https://github.com/nodejs/node">
      <img
        alt="Node.js Version"
        src="https://img.shields.io/node/v/@guanghechen/path.types"
      />
    </a>
    <a href="https://github.com/facebook/jest">
      <img
        alt="Tested with Jest"
        src="https://img.shields.io/badge/tested_with-jest-9c465e.svg"
      />
    </a>
    <a href="https://github.com/prettier/prettier">
      <img
        alt="Code Style: prettier"
        src="https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square"
      />
    </a>
  </div>
</header>
<br/>

TypeScript type definitions for @guanghechen/path.

## Install

- npm

  ```bash
  npm install --save @guanghechen/path.types
  ```

- yarn

  ```bash
  yarn add @guanghechen/path.types
  ```

## Usage

[homepage]:
  https://github.com/guanghechen/sora/tree/@guanghechen/path.types@2.0.0/packages/path.types#readme
npm package: @guanghechen/react-hooks
Description: Some custom react hooks.
Author: guanghechen
Latest version: 3.0.15

<header>
  <h1 align="center">
    <a href="https://github.com/guanghechen/react-kit/tree/@guanghechen/react-hooks@3.0.14/packages/react-hooks#readme">@guanghechen/react-hooks</a>
  </h1>
  <div align="center">
    <a href="https://www.npmjs.com/package/@guanghechen/react-hooks">
      <img
        alt="Npm Version"
        src="https://img.shields.io/npm/v/@guanghechen/react-hooks.svg"
      />
    </a>
    <a href="https://www.npmjs.com/package/@guanghechen/react-hooks">
      <img
        alt="Npm Download"
        src="https://img.shields.io/npm/dm/@guanghechen/react-hooks.svg"
      />
    </a>
    <a href="https://www.npmjs.com/package/@guanghechen/react-hooks">
      <img
        alt="Npm License"
        src="https://img.shields.io/npm/l/@guanghechen/react-hooks.svg"
      />
    </a>
    <a href="#install">
      <img
        alt="Module Formats: cjs, esm"
        src="https://img.shields.io/badge/module_formats-cjs%2C%20esm-green.svg"
      />
    </a>
    <a href="https://github.com/nodejs/node">
      <img
        alt="Node.js Version"
        src="https://img.shields.io/node/v/@guanghechen/react-hooks"
      />
    </a>
    <a href="https://github.com/vitest-dev/vitest">
      <img
        alt="Tested with Vitest"
        src="https://img.shields.io/badge/tested_with-vitest-6E9F18.svg"
      />
    </a>
    <a href="https://github.com/prettier/prettier">
      <img
        alt="Code Style: prettier"
        src="https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square"
      />
    </a>
  </div>
</header>
<br/>


`@guanghechen/react-hooks` provides some common custom react hooks.

## Install

* npm

  ```bash
  npm install --save @guanghechen/react-hooks
  ```

* pnpm

  ```bash
  pnpm add @guanghechen/react-hooks
  ```

## Usage

Name                      | Description
:------------------------:|:---------------------------------------------:
`useDeepCompareCallback`  | Deep compare version of `React.useCallback`
`useDeepCompareEffect`    | Deep compare version of `React.useEffect`
`useDeepCompareMemo`      | Deep compare version of `React.useMemo`
`useEventCallback`        | Create event handler with an always-stable function identity.
`useInterval`             | Execute callback interval in react function components
`usePreviousState`        | Use previous state


## Related

* [Custom React Hooks | 光和尘](https://me.guanghechen.com/post/web/react/hooks/custom/)


[homepage]: https://github.com/guanghechen/react-kit/tree/@guanghechen/react-hooks@3.0.14/packages/react-hooks#readme
npm package: @guanghechen/site-api
Description: site api
Author: lemon-clown
Latest version: 1.0.0-alpha.2

<header>
  <h1 align="center">
    <a href="https://github.com/guanghechen/yozora/tree/main/packages/site-api#readme">@guanghechen/site-api</a>
  </h1>
  <div align="center">
    <a href="https://www.npmjs.com/package/@guanghechen/site-api">
      <img
        alt="Npm Version"
        src="https://img.shields.io/npm/v/@guanghechen/site-api.svg"
      />
    </a>
    <a href="https://www.npmjs.com/package/@guanghechen/site-api">
      <img
        alt="Npm Download"
        src="https://img.shields.io/npm/dm/@guanghechen/site-api.svg"
      />
    </a>
    <a href="https://www.npmjs.com/package/@guanghechen/site-api">
      <img
        alt="Npm License"
        src="https://img.shields.io/npm/l/@guanghechen/site-api.svg"
      />
    </a>
    <a href="#install">
      <img
        alt="Module formats: cjs, esm"
        src="https://img.shields.io/badge/module_formats-cjs%2C%20esm-green.svg"
      />
    </a>
    <a href="https://github.com/nodejs/node">
      <img
        alt="Node.js Version"
        src="https://img.shields.io/node/v/@guanghechen/site-api"
      />
    </a>
    <a href="https://github.com/facebook/jest">
      <img
        alt="Tested with Jest"
        src="https://img.shields.io/badge/tested_with-jest-9c465e.svg"
      />
    </a>
    <a href="https://github.com/prettier/prettier">
      <img
        alt="Code Style: prettier"
        src="https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square"
      />
    </a>
  </div>
</header>
<br/>

## Install

* npm

  ```bash
  npm install --save @guanghechen/site-api
  ```

* yarn

  ```bash
  yarn add @guanghechen/site-api
  ```

## Usage
npm package: @guanghechen/template-ts-package
Description: Templates for creating simple typescript project
Author: guanghechen
Latest version: 1.9.8

<header>
  <h1 align="center">
    <a href="https://github.com/guanghechen/node-scaffolds/tree/main/packages/template-ts-package#readme">@guanghechen/template-ts-package</a>
  </h1>
  <div align="center">
    <a href="https://www.npmjs.com/package/@guanghechen/template-ts-package">
      <img
        alt="Npm Version"
        src="https://img.shields.io/npm/v/@guanghechen/template-ts-package.svg"
      />
    </a>
    <a href="https://www.npmjs.com/package/@guanghechen/template-ts-package">
      <img
        alt="Npm Download"
        src="https://img.shields.io/npm/dm/@guanghechen/template-ts-package.svg"
      />
    </a>
    <a href="https://www.npmjs.com/package/@guanghechen/template-ts-package">
      <img
        alt="Npm License"
        src="https://img.shields.io/npm/l/@guanghechen/template-ts-package.svg"
      />
    </a>
    <a href="https://github.com/nodejs/node">
      <img
        alt="Node.js Version"
        src="https://img.shields.io/node/v/@guanghechen/template-ts-package"
      />
    </a>
    <a href="https://github.com/prettier/prettier">
      <img
        alt="Code Style: prettier"
        src="https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square"
      />
    </a>
  </div>
</header>
<br/>


Templates powered by [plop][] for creating simple typescript project.

## Install

* npm

  ```bash
  npm install -g @guanghechen/template-ts-package
  ```

* yarn

  ```bash
  yarn global add @guanghechen/template-ts-package
  ```

## Usage

* Used in command line

  ```shell
  ghc-ts-package [package-name]
  ```


## Related

* [@guanghechen/template-tsx-package][]


[homepage]: https://github.com/guanghechen/node-scaffolds/tree/main/packages/template-ts-package#readme
[@guanghechen/template-ts-package]: https://www.npmjs.com/package/@guanghechen/template-ts-package
[@guanghechen/template-tsx-package]: https://www.npmjs.com/package/@guanghechen/template-tsx-package
[plop]: https://github.com/plopjs/plop