open-index/open-npm huggingface dataset:
npm package: @lskjs/libs
Description: Libs starter kit
Author: Igor Suvorov
Latest version: 1.0.0

# Lsk.js v4 Manifesto

## Principles

- Focus on performance 
- TypeScript only
- ESM first
- Minimal dependencies
- CI deploy with semver
- 100% Test coverage with benchmarks
- Easy understnading DX (developer experience)
- Basic docs for all packages

## Tech stack
- TypeScript - tsup (esbuild)
- ESM - tsm?
- Namespaces - PNPM
- Test - UVU
- Test coverage - C8
- CI - GitHub actions
- Semver - NX or ... ???????
- CLI - Yargs
- Deployment - 

## Not used
- No JS & Babel
- No LERNA
- NO MAGIC!


## TODO

- [ ] Add uvu in `lsk run test`
- [ ] Fix `lsk run test:watch`
- [ ] Add `lsk run test:coverage` in `lsk run test`
- [ ] Add more test for test coverage
- [ ] Move cli-utils to separate packages
- [ ] Think about publishing and semver
- [ ] Make rsync & copy commands
- [ ] Add `lsk create` with templates
- [ ] Change `@lskjs/log` to `pino`, `lsk log`` to pino-pretty
- [ ] Rewrite `lsk run` commands to Yargs commands

## Notes for future docs


```json
  "eslintConfig": {
    "extends": "@lskjs/eslint-config",
    "settings": {
      "import/resolver": {
        "typescript": {
          "project": [
            "tsconfig.json",
            "apps/*/tsconfig.json"
          ]
        }
      }
    }
  },
```
npm package: @lskjs/lodash
Description: LSK.js – utils – helpers and functions
Author: Igor Suvorov
Latest version: 3.18.0

# LSK.js – utils

> @lskjs/utils – LSK.js – utils – helpers and functions

[![LSK logo](https://badgen.net/badge/icon/MADE%20BY%20LSK?icon=zeit\&label\&color=red\&labelColor=red)](https://github.com/lskjs)
[![NPM version](https://badgen.net/npm/v/@lskjs/utils)](https://www.npmjs.com/package/@lskjs/utils)
[![NPM downloads](https://badgen.net/npm/dt/@lskjs/utils)](https://www.npmjs.com/package/@lskjs/utils)
[![NPM Dependency count](https://badgen.net/bundlephobia/dependency-count/@lskjs/utils)](https://bundlephobia.com/result?p=@lskjs/utils)
[![Have TypeScript types](https://badgen.net/npm/types/@lskjs/utils)](https://www.npmjs.com/package/@lskjs/utils)
[![Have tree shaking](https://badgen.net/bundlephobia/tree-shaking/@lskjs/utils)](https://bundlephobia.com/result?p=@lskjs/utils)
[![NPM Package size](https://badgen.net/bundlephobia/minzip/@lskjs/utils)](https://bundlephobia.com/result?p=@lskjs/utils)
[![Package size](https://badgen.net//github/license/lskjs/lskjs)](https://github.com/lskjs/lskjs/blob/master/LICENSE)
[![Ask us in Telegram](https://img.shields.io/badge/Ask%20us%20in-Telegram-brightblue.svg)](https://t.me/lskjschat)

<!-- template file="scripts/templates/preview.md" start -->

<!-- template end -->

***

<!-- # 📒 Table of contents  -->

# Table of contents

*   [⌨️ Install](#️-install)
*   [📖 License](#-license)
*   [👥 Contributors](#-contributors)
*   [👏 Contributing](#-contributing)
*   [📮 Any questions? Always welcome :)](#-any-questions-always-welcome-)

# ⌨️ Install

```sh
# yarn
yarn i @lskjs/utils 

# npm
npm i @lskjs/utils 
```

***

# 📖 License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details

# 👥 Contributors

<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->

<!-- prettier-ignore-start -->

<!-- markdownlint-disable -->

<table>
  <tr>
    <td align="center"><a href="https://isuvorov.com"><img src="https://avatars2.githubusercontent.com/u/1056977?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Igor Suvorov</b></sub></a><br /><a href="lskjs/lskjs///commits?author=isuvorov" title="Code">💻</a> <a href="#design-isuvorov" title="Design">🎨</a> <a href="#ideas-isuvorov" title="Ideas, Planning, & Feedback">🤔</a></td>
  </tr>
</table>
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->

# 👏 Contributing

1.  Fork it (<https://github.com/yourname/yourproject/fork>)
2.  Create your feature branch (`git checkout -b features/fooBar`)
3.  Commit your changes (`git commit -am 'feat(image): Add some fooBar'`)
4.  Push to the branch (`git push origin feature/fooBar`)
5.  Create a new Pull Request

# 📮 Any questions? Always welcome :)

*   [Email](mailto:hi@isuvorov.com)
*   [LSK.news – Telegram channel](https://t.me/lskjs)
*   [Спроси нас в телеграме ;)](https://t.me/lskjschat)
npm package: @lskjs/markdown
Description: React component to render markdown
Author: Espen Hovlandsdal
Latest version: 2.75.0

# LSK.js – worker

> @lskjs/worker – LSK module for worker.

[![LSK logo](https://badgen.net/badge/icon/MADE%20BY%20LSK?icon=zeit\&label\&color=red\&labelColor=red)](https://github.com/lskjs)
[![NPM version](https://badgen.net/npm/v/@lskjs/worker)](https://www.npmjs.com/package/@lskjs/worker)
[![NPM downloads](https://badgen.net/npm/dt/@lskjs/worker)](https://www.npmjs.com/package/@lskjs/worker)
[![NPM Dependency count](https://badgen.net/bundlephobia/dependency-count/@lskjs/worker)](https://bundlephobia.com/result?p=@lskjs/worker)
[![Have TypeScript types](https://badgen.net/npm/types/@lskjs/worker)](https://www.npmjs.com/package/@lskjs/worker)
[![Have tree shaking](https://badgen.net/bundlephobia/tree-shaking/@lskjs/worker)](https://bundlephobia.com/result?p=@lskjs/worker)
[![NPM Package size](https://badgen.net/bundlephobia/minzip/@lskjs/worker)](https://bundlephobia.com/result?p=@lskjs/worker)
[![Package size](https://badgen.net//github/license/lskjs/lskjs)](https://github.com/lskjs/lskjs/blob/master/LICENSE)
[![Ask us in Telegram](https://img.shields.io/badge/Ask%20us%20in-Telegram-brightblue.svg)](https://t.me/lskjschat)

<!-- template file="scripts/templates/preview.md" start -->

<!-- template end -->

***

<!-- # 📒 Table of contents  -->

# Table of contents

*   [⌨️ Install](#️-install)
*   [📖 License](#-license)
*   [👥 Contributors](#-contributors)
*   [👏 Contributing](#-contributing)
*   [📮 Any questions? Always welcome :)](#-any-questions-always-welcome-)

# ⌨️ Install

```sh
# yarn
yarn i @lskjs/worker @lskjs/rabbit bluebird lodash

# npm
npm i @lskjs/worker @lskjs/rabbit bluebird lodash
```

***

# 📖 License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details

# 👥 Contributors

<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->

<!-- prettier-ignore-start -->

<!-- markdownlint-disable -->

<table>
  <tr>
    <td align="center"><a href="https://isuvorov.com"><img src="https://avatars2.githubusercontent.com/u/1056977?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Igor Suvorov</b></sub></a><br /><a href="lskjs/lskjs///commits?author=isuvorov" title="Code">💻</a> <a href="#design-isuvorov" title="Design">🎨</a> <a href="#ideas-isuvorov" title="Ideas, Planning, & Feedback">🤔</a></td>
  </tr>
</table>
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->

# 👏 Contributing

1.  Fork it (<https://github.com/yourname/yourproject/fork>)
2.  Create your feature branch (`git checkout -b features/fooBar`)
3.  Commit your changes (`git commit -am 'feat(image): Add some fooBar'`)
4.  Push to the branch (`git push origin feature/fooBar`)
5.  Create a new Pull Request

# 📮 Any questions? Always welcome :)

*   [Email](mailto:hi@isuvorov.com)
*   [LSK.news – Telegram channel](https://t.me/lskjs)
*   [Спроси нас в телеграме ;)](https://t.me/lskjschat)
npm package: @lskjs/mutex
Description: LSK.js – mutex – async mutex
Author: Igor Suvorov
Latest version: 3.18.0

# LSK.js – mutex

> @lskjs/mutex – Async mutex

[![LSK logo](https://badgen.net/badge/icon/MADE%20BY%20LSK?icon=zeit\&label\&color=red\&labelColor=red)](https://github.com/lskjs)
[![NPM version](https://badgen.net/npm/v/@lskjs/mutex)](https://www.npmjs.com/package/@lskjs/mutex)
[![NPM downloads](https://badgen.net/npm/dt/@lskjs/mutex)](https://www.npmjs.com/package/@lskjs/mutex)
[![NPM Dependency count](https://badgen.net/bundlephobia/dependency-count/@lskjs/mutex)](https://bundlephobia.com/result?p=@lskjs/mutex)
[![Have TypeScript types](https://badgen.net/npm/types/@lskjs/mutex)](https://www.npmjs.com/package/@lskjs/mutex)
[![Have tree shaking](https://badgen.net/bundlephobia/tree-shaking/@lskjs/mutex)](https://bundlephobia.com/result?p=@lskjs/mutex)
[![NPM Package size](https://badgen.net/bundlephobia/minzip/@lskjs/mutex)](https://bundlephobia.com/result?p=@lskjs/mutex)
[![Package size](https://badgen.net//github/license/lskjs/lskjs)](https://github.com/lskjs/lskjs/blob/master/LICENSE)
[![Ask us in Telegram](https://img.shields.io/badge/Ask%20us%20in-Telegram-brightblue.svg)](https://t.me/lskjschat)

<!-- template file="scripts/templates/preview.md" start -->

<!-- template end -->

***

<!-- # 📒 Table of contents  -->

# Table of contents

*   [⌨️ Install](#️-install)
*   [📖 License](#-license)
*   [👥 Contributors](#-contributors)
*   [👏 Contributing](#-contributing)
*   [📮 Any questions? Always welcome :)](#-any-questions-always-welcome-)

# ⌨️ Install

```sh
# yarn
yarn i @lskjs/mutex 

# npm
npm i @lskjs/mutex 
```

***

# 📖 License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details

# 👥 Contributors

<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->

<!-- prettier-ignore-start -->

<!-- markdownlint-disable -->

<table>
  <tr>
    <td align="center"><a href="https://isuvorov.com"><img src="https://avatars2.githubusercontent.com/u/1056977?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Igor Suvorov</b></sub></a><br /><a href="lskjs/lskjs///commits?author=isuvorov" title="Code">💻</a> <a href="#design-isuvorov" title="Design">🎨</a> <a href="#ideas-isuvorov" title="Ideas, Planning, & Feedback">🤔</a></td>
  </tr>
</table>
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->

# 👏 Contributing

1.  Fork it (<https://github.com/yourname/yourproject/fork>)
2.  Create your feature branch (`git checkout -b features/fooBar`)
3.  Commit your changes (`git commit -am 'feat(image): Add some fooBar'`)
4.  Push to the branch (`git push origin feature/fooBar`)
5.  Create a new Pull Request

# 📮 Any questions? Always welcome :)

*   [Email](mailto:hi@isuvorov.com)
*   [LSK.news – Telegram channel](https://t.me/lskjs)
*   [Спроси нас в телеграме ;)](https://t.me/lskjschat)
npm package: @lskjs/nest-auth
Description: LSK.js – nest auth – helpers for auth in Nest.js projects
Author: Igor Suvorov
Latest version: 3.18.0

# LSK.js – utils

> @lskjs/utils – LSK.js – utils – helpers and functions

[![LSK logo](https://badgen.net/badge/icon/MADE%20BY%20LSK?icon=zeit\&label\&color=red\&labelColor=red)](https://github.com/lskjs)
[![NPM version](https://badgen.net/npm/v/@lskjs/utils)](https://www.npmjs.com/package/@lskjs/utils)
[![NPM downloads](https://badgen.net/npm/dt/@lskjs/utils)](https://www.npmjs.com/package/@lskjs/utils)
[![NPM Dependency count](https://badgen.net/bundlephobia/dependency-count/@lskjs/utils)](https://bundlephobia.com/result?p=@lskjs/utils)
[![Have TypeScript types](https://badgen.net/npm/types/@lskjs/utils)](https://www.npmjs.com/package/@lskjs/utils)
[![Have tree shaking](https://badgen.net/bundlephobia/tree-shaking/@lskjs/utils)](https://bundlephobia.com/result?p=@lskjs/utils)
[![NPM Package size](https://badgen.net/bundlephobia/minzip/@lskjs/utils)](https://bundlephobia.com/result?p=@lskjs/utils)
[![Package size](https://badgen.net//github/license/lskjs/lskjs)](https://github.com/lskjs/lskjs/blob/master/LICENSE)
[![Ask us in Telegram](https://img.shields.io/badge/Ask%20us%20in-Telegram-brightblue.svg)](https://t.me/lskjschat)

<!-- template file="scripts/templates/preview.md" start -->

<!-- template end -->

***

<!-- # 📒 Table of contents  -->

# Table of contents

*   [⌨️ Install](#️-install)
*   [📖 License](#-license)
*   [👥 Contributors](#-contributors)
*   [👏 Contributing](#-contributing)
*   [📮 Any questions? Always welcome :)](#-any-questions-always-welcome-)

# ⌨️ Install

```sh
# yarn
yarn i @lskjs/utils 

# npm
npm i @lskjs/utils 
```

***

# 📖 License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details

# 👥 Contributors

<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->

<!-- prettier-ignore-start -->

<!-- markdownlint-disable -->

<table>
  <tr>
    <td align="center"><a href="https://isuvorov.com"><img src="https://avatars2.githubusercontent.com/u/1056977?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Igor Suvorov</b></sub></a><br /><a href="lskjs/lskjs///commits?author=isuvorov" title="Code">💻</a> <a href="#design-isuvorov" title="Design">🎨</a> <a href="#ideas-isuvorov" title="Ideas, Planning, & Feedback">🤔</a></td>
  </tr>
</table>
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->

# 👏 Contributing

1.  Fork it (<https://github.com/yourname/yourproject/fork>)
2.  Create your feature branch (`git checkout -b features/fooBar`)
3.  Commit your changes (`git commit -am 'feat(image): Add some fooBar'`)
4.  Push to the branch (`git push origin feature/fooBar`)
5.  Create a new Pull Request

# 📮 Any questions? Always welcome :)

*   [Email](mailto:hi@isuvorov.com)
*   [LSK.news – Telegram channel](https://t.me/lskjs)
*   [Спроси нас в телеграме ;)](https://t.me/lskjschat)
npm package: @lskjs/nest-cache
Description: LSK.js – nest cache – helpers for cache in Nest.js projects
Author: Igor Suvorov
Latest version: 3.19.0

# LSK.js – utils

> @lskjs/utils – LSK.js – utils – helpers and functions

[![LSK logo](https://badgen.net/badge/icon/MADE%20BY%20LSK?icon=zeit\&label\&color=red\&labelColor=red)](https://github.com/lskjs)
[![NPM version](https://badgen.net/npm/v/@lskjs/utils)](https://www.npmjs.com/package/@lskjs/utils)
[![NPM downloads](https://badgen.net/npm/dt/@lskjs/utils)](https://www.npmjs.com/package/@lskjs/utils)
[![NPM Dependency count](https://badgen.net/bundlephobia/dependency-count/@lskjs/utils)](https://bundlephobia.com/result?p=@lskjs/utils)
[![Have TypeScript types](https://badgen.net/npm/types/@lskjs/utils)](https://www.npmjs.com/package/@lskjs/utils)
[![Have tree shaking](https://badgen.net/bundlephobia/tree-shaking/@lskjs/utils)](https://bundlephobia.com/result?p=@lskjs/utils)
[![NPM Package size](https://badgen.net/bundlephobia/minzip/@lskjs/utils)](https://bundlephobia.com/result?p=@lskjs/utils)
[![Package size](https://badgen.net//github/license/lskjs/lskjs)](https://github.com/lskjs/lskjs/blob/master/LICENSE)
[![Ask us in Telegram](https://img.shields.io/badge/Ask%20us%20in-Telegram-brightblue.svg)](https://t.me/lskjschat)

<!-- template file="scripts/templates/preview.md" start -->

<!-- template end -->

***

<!-- # 📒 Table of contents  -->

# Table of contents

*   [⌨️ Install](#️-install)
*   [📖 License](#-license)
*   [👥 Contributors](#-contributors)
*   [👏 Contributing](#-contributing)
*   [📮 Any questions? Always welcome :)](#-any-questions-always-welcome-)

# ⌨️ Install

```sh
# yarn
yarn i @lskjs/utils 

# npm
npm i @lskjs/utils 
```

***

# 📖 License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details

# 👥 Contributors

<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->

<!-- prettier-ignore-start -->

<!-- markdownlint-disable -->

<table>
  <tr>
    <td align="center"><a href="https://isuvorov.com"><img src="https://avatars2.githubusercontent.com/u/1056977?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Igor Suvorov</b></sub></a><br /><a href="lskjs/lskjs///commits?author=isuvorov" title="Code">💻</a> <a href="#design-isuvorov" title="Design">🎨</a> <a href="#ideas-isuvorov" title="Ideas, Planning, & Feedback">🤔</a></td>
  </tr>
</table>
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->

# 👏 Contributing

1.  Fork it (<https://github.com/yourname/yourproject/fork>)
2.  Create your feature branch (`git checkout -b features/fooBar`)
3.  Commit your changes (`git commit -am 'feat(image): Add some fooBar'`)
4.  Push to the branch (`git push origin feature/fooBar`)
5.  Create a new Pull Request

# 📮 Any questions? Always welcome :)

*   [Email](mailto:hi@isuvorov.com)
*   [LSK.news – Telegram channel](https://t.me/lskjs)
*   [Спроси нас в телеграме ;)](https://t.me/lskjschat)
npm package: @lskjs/nest-config
Description: LSK.js – nest config – helpers for config in Nest.js projects
Author: Igor Suvorov
Latest version: 3.18.0

# LSK.js – utils

> @lskjs/utils – LSK.js – utils – helpers and functions

[![LSK logo](https://badgen.net/badge/icon/MADE%20BY%20LSK?icon=zeit\&label\&color=red\&labelColor=red)](https://github.com/lskjs)
[![NPM version](https://badgen.net/npm/v/@lskjs/utils)](https://www.npmjs.com/package/@lskjs/utils)
[![NPM downloads](https://badgen.net/npm/dt/@lskjs/utils)](https://www.npmjs.com/package/@lskjs/utils)
[![NPM Dependency count](https://badgen.net/bundlephobia/dependency-count/@lskjs/utils)](https://bundlephobia.com/result?p=@lskjs/utils)
[![Have TypeScript types](https://badgen.net/npm/types/@lskjs/utils)](https://www.npmjs.com/package/@lskjs/utils)
[![Have tree shaking](https://badgen.net/bundlephobia/tree-shaking/@lskjs/utils)](https://bundlephobia.com/result?p=@lskjs/utils)
[![NPM Package size](https://badgen.net/bundlephobia/minzip/@lskjs/utils)](https://bundlephobia.com/result?p=@lskjs/utils)
[![Package size](https://badgen.net//github/license/lskjs/lskjs)](https://github.com/lskjs/lskjs/blob/master/LICENSE)
[![Ask us in Telegram](https://img.shields.io/badge/Ask%20us%20in-Telegram-brightblue.svg)](https://t.me/lskjschat)

<!-- template file="scripts/templates/preview.md" start -->

<!-- template end -->

***

<!-- # 📒 Table of contents  -->

# Table of contents

*   [⌨️ Install](#️-install)
*   [📖 License](#-license)
*   [👥 Contributors](#-contributors)
*   [👏 Contributing](#-contributing)
*   [📮 Any questions? Always welcome :)](#-any-questions-always-welcome-)

# ⌨️ Install

```sh
# yarn
yarn i @lskjs/utils 

# npm
npm i @lskjs/utils 
```

***

# 📖 License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details

# 👥 Contributors

<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->

<!-- prettier-ignore-start -->

<!-- markdownlint-disable -->

<table>
  <tr>
    <td align="center"><a href="https://isuvorov.com"><img src="https://avatars2.githubusercontent.com/u/1056977?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Igor Suvorov</b></sub></a><br /><a href="lskjs/lskjs///commits?author=isuvorov" title="Code">💻</a> <a href="#design-isuvorov" title="Design">🎨</a> <a href="#ideas-isuvorov" title="Ideas, Planning, & Feedback">🤔</a></td>
  </tr>
</table>
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->

# 👏 Contributing

1.  Fork it (<https://github.com/yourname/yourproject/fork>)
2.  Create your feature branch (`git checkout -b features/fooBar`)
3.  Commit your changes (`git commit -am 'feat(image): Add some fooBar'`)
4.  Push to the branch (`git push origin feature/fooBar`)
5.  Create a new Pull Request

# 📮 Any questions? Always welcome :)

*   [Email](mailto:hi@isuvorov.com)
*   [LSK.news – Telegram channel](https://t.me/lskjs)
*   [Спроси нас в телеграме ;)](https://t.me/lskjschat)
npm package: @lskjs/nest-mutex
Description: LSK.js – nest mutex – helpers for mutex in Nest.js projects
Author: Igor Suvorov
Latest version: 3.18.0

# LSK.js – utils

> @lskjs/utils – LSK.js – utils – helpers and functions

[![LSK logo](https://badgen.net/badge/icon/MADE%20BY%20LSK?icon=zeit\&label\&color=red\&labelColor=red)](https://github.com/lskjs)
[![NPM version](https://badgen.net/npm/v/@lskjs/utils)](https://www.npmjs.com/package/@lskjs/utils)
[![NPM downloads](https://badgen.net/npm/dt/@lskjs/utils)](https://www.npmjs.com/package/@lskjs/utils)
[![NPM Dependency count](https://badgen.net/bundlephobia/dependency-count/@lskjs/utils)](https://bundlephobia.com/result?p=@lskjs/utils)
[![Have TypeScript types](https://badgen.net/npm/types/@lskjs/utils)](https://www.npmjs.com/package/@lskjs/utils)
[![Have tree shaking](https://badgen.net/bundlephobia/tree-shaking/@lskjs/utils)](https://bundlephobia.com/result?p=@lskjs/utils)
[![NPM Package size](https://badgen.net/bundlephobia/minzip/@lskjs/utils)](https://bundlephobia.com/result?p=@lskjs/utils)
[![Package size](https://badgen.net//github/license/lskjs/lskjs)](https://github.com/lskjs/lskjs/blob/master/LICENSE)
[![Ask us in Telegram](https://img.shields.io/badge/Ask%20us%20in-Telegram-brightblue.svg)](https://t.me/lskjschat)

<!-- template file="scripts/templates/preview.md" start -->

<!-- template end -->

***

<!-- # 📒 Table of contents  -->

# Table of contents

*   [⌨️ Install](#️-install)
*   [📖 License](#-license)
*   [👥 Contributors](#-contributors)
*   [👏 Contributing](#-contributing)
*   [📮 Any questions? Always welcome :)](#-any-questions-always-welcome-)

# ⌨️ Install

```sh
# yarn
yarn i @lskjs/utils 

# npm
npm i @lskjs/utils 
```

***

# 📖 License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details

# 👥 Contributors

<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->

<!-- prettier-ignore-start -->

<!-- markdownlint-disable -->

<table>
  <tr>
    <td align="center"><a href="https://isuvorov.com"><img src="https://avatars2.githubusercontent.com/u/1056977?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Igor Suvorov</b></sub></a><br /><a href="lskjs/lskjs///commits?author=isuvorov" title="Code">💻</a> <a href="#design-isuvorov" title="Design">🎨</a> <a href="#ideas-isuvorov" title="Ideas, Planning, & Feedback">🤔</a></td>
  </tr>
</table>
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->

# 👏 Contributing

1.  Fork it (<https://github.com/yourname/yourproject/fork>)
2.  Create your feature branch (`git checkout -b features/fooBar`)
3.  Commit your changes (`git commit -am 'feat(image): Add some fooBar'`)
4.  Push to the branch (`git push origin feature/fooBar`)
5.  Create a new Pull Request

# 📮 Any questions? Always welcome :)

*   [Email](mailto:hi@isuvorov.com)
*   [LSK.news – Telegram channel](https://t.me/lskjs)
*   [Спроси нас в телеграме ;)](https://t.me/lskjschat)
npm package: @lskjs/nest-rabbitmq
Description: LSK.js – nest rabbitmq – helpers for rabbitmq in Nest.js projects
Author: Igor Suvorov
Latest version: 3.18.0

# LSK.js – utils

> @lskjs/utils – LSK.js – utils – helpers and functions

[![LSK logo](https://badgen.net/badge/icon/MADE%20BY%20LSK?icon=zeit\&label\&color=red\&labelColor=red)](https://github.com/lskjs)
[![NPM version](https://badgen.net/npm/v/@lskjs/utils)](https://www.npmjs.com/package/@lskjs/utils)
[![NPM downloads](https://badgen.net/npm/dt/@lskjs/utils)](https://www.npmjs.com/package/@lskjs/utils)
[![NPM Dependency count](https://badgen.net/bundlephobia/dependency-count/@lskjs/utils)](https://bundlephobia.com/result?p=@lskjs/utils)
[![Have TypeScript types](https://badgen.net/npm/types/@lskjs/utils)](https://www.npmjs.com/package/@lskjs/utils)
[![Have tree shaking](https://badgen.net/bundlephobia/tree-shaking/@lskjs/utils)](https://bundlephobia.com/result?p=@lskjs/utils)
[![NPM Package size](https://badgen.net/bundlephobia/minzip/@lskjs/utils)](https://bundlephobia.com/result?p=@lskjs/utils)
[![Package size](https://badgen.net//github/license/lskjs/lskjs)](https://github.com/lskjs/lskjs/blob/master/LICENSE)
[![Ask us in Telegram](https://img.shields.io/badge/Ask%20us%20in-Telegram-brightblue.svg)](https://t.me/lskjschat)

<!-- template file="scripts/templates/preview.md" start -->

<!-- template end -->

***

<!-- # 📒 Table of contents  -->

# Table of contents

*   [⌨️ Install](#️-install)
*   [📖 License](#-license)
*   [👥 Contributors](#-contributors)
*   [👏 Contributing](#-contributing)
*   [📮 Any questions? Always welcome :)](#-any-questions-always-welcome-)

# ⌨️ Install

```sh
# yarn
yarn i @lskjs/utils 

# npm
npm i @lskjs/utils 
```

***

# 📖 License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details

# 👥 Contributors

<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->

<!-- prettier-ignore-start -->

<!-- markdownlint-disable -->

<table>
  <tr>
    <td align="center"><a href="https://isuvorov.com"><img src="https://avatars2.githubusercontent.com/u/1056977?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Igor Suvorov</b></sub></a><br /><a href="lskjs/lskjs///commits?author=isuvorov" title="Code">💻</a> <a href="#design-isuvorov" title="Design">🎨</a> <a href="#ideas-isuvorov" title="Ideas, Planning, & Feedback">🤔</a></td>
  </tr>
</table>
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->

# 👏 Contributing

1.  Fork it (<https://github.com/yourname/yourproject/fork>)
2.  Create your feature branch (`git checkout -b features/fooBar`)
3.  Commit your changes (`git commit -am 'feat(image): Add some fooBar'`)
4.  Push to the branch (`git push origin feature/fooBar`)
5.  Create a new Pull Request

# 📮 Any questions? Always welcome :)

*   [Email](mailto:hi@isuvorov.com)
*   [LSK.news – Telegram channel](https://t.me/lskjs)
*   [Спроси нас в телеграме ;)](https://t.me/lskjschat)
npm package: @lskjs/nest-utils
Description: LSK.js – nest utils – helpers and utils for Nest.js projects
Author: Igor Suvorov
Latest version: 3.18.0

# LSK.js – utils

> @lskjs/utils – LSK.js – utils – helpers and functions

[![LSK logo](https://badgen.net/badge/icon/MADE%20BY%20LSK?icon=zeit\&label\&color=red\&labelColor=red)](https://github.com/lskjs)
[![NPM version](https://badgen.net/npm/v/@lskjs/utils)](https://www.npmjs.com/package/@lskjs/utils)
[![NPM downloads](https://badgen.net/npm/dt/@lskjs/utils)](https://www.npmjs.com/package/@lskjs/utils)
[![NPM Dependency count](https://badgen.net/bundlephobia/dependency-count/@lskjs/utils)](https://bundlephobia.com/result?p=@lskjs/utils)
[![Have TypeScript types](https://badgen.net/npm/types/@lskjs/utils)](https://www.npmjs.com/package/@lskjs/utils)
[![Have tree shaking](https://badgen.net/bundlephobia/tree-shaking/@lskjs/utils)](https://bundlephobia.com/result?p=@lskjs/utils)
[![NPM Package size](https://badgen.net/bundlephobia/minzip/@lskjs/utils)](https://bundlephobia.com/result?p=@lskjs/utils)
[![Package size](https://badgen.net//github/license/lskjs/lskjs)](https://github.com/lskjs/lskjs/blob/master/LICENSE)
[![Ask us in Telegram](https://img.shields.io/badge/Ask%20us%20in-Telegram-brightblue.svg)](https://t.me/lskjschat)

<!-- template file="scripts/templates/preview.md" start -->

<!-- template end -->

***

<!-- # 📒 Table of contents  -->

# Table of contents

*   [⌨️ Install](#️-install)
*   [📖 License](#-license)
*   [👥 Contributors](#-contributors)
*   [👏 Contributing](#-contributing)
*   [📮 Any questions? Always welcome :)](#-any-questions-always-welcome-)

# ⌨️ Install

```sh
# yarn
yarn i @lskjs/utils 

# npm
npm i @lskjs/utils 
```

***

# 📖 License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details

# 👥 Contributors

<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->

<!-- prettier-ignore-start -->

<!-- markdownlint-disable -->

<table>
  <tr>
    <td align="center"><a href="https://isuvorov.com"><img src="https://avatars2.githubusercontent.com/u/1056977?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Igor Suvorov</b></sub></a><br /><a href="lskjs/lskjs///commits?author=isuvorov" title="Code">💻</a> <a href="#design-isuvorov" title="Design">🎨</a> <a href="#ideas-isuvorov" title="Ideas, Planning, & Feedback">🤔</a></td>
  </tr>
</table>
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->

# 👏 Contributing

1.  Fork it (<https://github.com/yourname/yourproject/fork>)
2.  Create your feature branch (`git checkout -b features/fooBar`)
3.  Commit your changes (`git commit -am 'feat(image): Add some fooBar'`)
4.  Push to the branch (`git push origin feature/fooBar`)
5.  Create a new Pull Request

# 📮 Any questions? Always welcome :)

*   [Email](mailto:hi@isuvorov.com)
*   [LSK.news – Telegram channel](https://t.me/lskjs)
*   [Спроси нас в телеграме ;)](https://t.me/lskjschat)
npm package: @lskjs/react-joyride
Description: Create walkthroughs and guided tours for your apps
Author: Gil Barbara
Latest version: 2.0.0

# React Joyride

[![](https://badge.fury.io/js/react-joyride.svg)](https://www.npmjs.com/package/react-joyride) [![](https://travis-ci.org/gilbarbara/react-joyride.svg)](https://travis-ci.org/gilbarbara/react-joyride) [![](https://api.codeclimate.com/v1/badges/43ecb5536910133429bd/maintainability)](https://codeclimate.com/github/gilbarbara/react-joyride/maintainability) [![](https://api.codeclimate.com/v1/badges/43ecb5536910133429bd/test_coverage)](https://codeclimate.com/github/gilbarbara/react-joyride/test_coverage)

[![Joyride example image](http://gilbarbara.github.io/react-joyride/media/example.png)](http://gilbarbara.github.io/react-joyride/)

Create a tour for your app!  
Use it to showcase your app for new users! Or explain functionality of complex features!  

#### View the demo [here](https://2zpjporp4p.codesandbox.io/)

You can edit the demo [here](https://codesandbox.io/s/2zpjporp4p)

>  If you are looking for the documentation for the old 1.x version, go [here](https://github.com/gilbarbara/react-joyride/tree/v1.11.4)

## Setup

```bash
npm i react-joyride@next
```

## Getting Started

Just set a `steps` array to the Joyride component and you're good to go!

You can use your own component for the tooltip body or beacon, if you want.

```js
import Joyride from 'react-joyride';

export class App extends React.Component {
  state = {
    run: false,
    steps: [
      {
        target: '.my-first-step',
        content: 'This if my awesome feature!',
        placement: 'bottom',
      },
      {
        target: '.my-other-step',
        content: 'This if my awesome feature!',
        placement: 'bottom',
      },
      ...
    ]
  };

  componentDidMount() {
    this.setState({ run: true });
  }

  callback = (data) => {
    const { action, index, type } = data;
  };

  render () {
    const { steps, run } = this.state;

    return (
      <div className="app">
        <Joyride
          steps={steps}
          run={run}
          callback={this.callback}
          ...
        />
        ...
      </div>
    );
  }
}
```

## Documentation

[Props](docs/props.md)

[Step](docs/step.md)

[Styling](docs/styling.md)

[Callback](docs/callback.md)

[Constants](docs/constants.md)

[Migration from 1.x](docs/migration.md)

This library uses [react-floater](https://github.com/gilbarbara/react-floater) and [popper.js](https://github.com/FezVrasta/popper.js) for positioning and styling.
npm package: @lskjs/stringify
Description: LSK stringify.
Author: Igor Suvorov
Latest version: 3.19.0

# LSK.js – getspreadsheet

> @lskjs/getspreadsheet – LSK getspreadsheet.

[![LSK logo](https://badgen.net/badge/icon/MADE%20BY%20LSK?icon=zeit\&label\&color=red\&labelColor=red)](https://github.com/lskjs)
[![NPM version](https://badgen.net/npm/v/@lskjs/getspreadsheet)](https://www.npmjs.com/package/@lskjs/getspreadsheet)
[![NPM downloads](https://badgen.net/npm/dt/@lskjs/getspreadsheet)](https://www.npmjs.com/package/@lskjs/getspreadsheet)
[![NPM Dependency count](https://badgen.net/bundlephobia/dependency-count/@lskjs/getspreadsheet)](https://bundlephobia.com/result?p=@lskjs/getspreadsheet)
[![Have TypeScript types](https://badgen.net/npm/types/@lskjs/getspreadsheet)](https://www.npmjs.com/package/@lskjs/getspreadsheet)
[![Have tree shaking](https://badgen.net/bundlephobia/tree-shaking/@lskjs/getspreadsheet)](https://bundlephobia.com/result?p=@lskjs/getspreadsheet)
[![NPM Package size](https://badgen.net/bundlephobia/minzip/@lskjs/getspreadsheet)](https://bundlephobia.com/result?p=@lskjs/getspreadsheet)
[![Package size](https://badgen.net//github/license/lskjs/lskjs)](https://github.com/lskjs/lskjs/blob/master/LICENSE)
[![Ask us in Telegram](https://img.shields.io/badge/Ask%20us%20in-Telegram-brightblue.svg)](https://t.me/lskjschat)

<!-- template file="scripts/templates/preview.md" start -->

<!-- template end -->

***

<!-- # 📒 Table of contents  -->

# Table of contents

*   [⌨️ Install](#️-install)
*   [📖 License](#-license)
*   [👥 Contributors](#-contributors)
*   [👏 Contributing](#-contributing)
*   [📮 Any questions? Always welcome :)](#-any-questions-always-welcome-)

# ⌨️ Install

```sh
# yarn
yarn i @lskjs/getspreadsheet bluebird lodash

# npm
npm i @lskjs/getspreadsheet bluebird lodash
```

***

# 📖 License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details

# 👥 Contributors

<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->

<!-- prettier-ignore-start -->

<!-- markdownlint-disable -->

<table>
  <tr>
    <td align="center"><a href="https://isuvorov.com"><img src="https://avatars2.githubusercontent.com/u/1056977?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Igor Suvorov</b></sub></a><br /><a href="lskjs/lskjs///commits?author=isuvorov" title="Code">💻</a> <a href="#design-isuvorov" title="Design">🎨</a> <a href="#ideas-isuvorov" title="Ideas, Planning, & Feedback">🤔</a></td>
  </tr>
</table>
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->

# 👏 Contributing

1.  Fork it (<https://github.com/yourname/yourproject/fork>)
2.  Create your feature branch (`git checkout -b features/fooBar`)
3.  Commit your changes (`git commit -am 'feat(image): Add some fooBar'`)
4.  Push to the branch (`git push origin feature/fooBar`)
5.  Create a new Pull Request

# 📮 Any questions? Always welcome :)

*   [Email](mailto:hi@isuvorov.com)
*   [LSK.news – Telegram channel](https://t.me/lskjs)
*   [Спроси нас в телеграме ;)](https://t.me/lskjschat)
npm package: @lskjs/telegraf
Description: LSK.js – telegraf - wrapper for Telegraf/Telegram
Author: Igor Suvorov
Latest version: 3.22.2

# LSK.js – utils

> @lskjs/utils – LSK.js – utils – helpers and functions

[![LSK logo](https://badgen.net/badge/icon/MADE%20BY%20LSK?icon=zeit\&label\&color=red\&labelColor=red)](https://github.com/lskjs)
[![NPM version](https://badgen.net/npm/v/@lskjs/utils)](https://www.npmjs.com/package/@lskjs/utils)
[![NPM downloads](https://badgen.net/npm/dt/@lskjs/utils)](https://www.npmjs.com/package/@lskjs/utils)
[![NPM Dependency count](https://badgen.net/bundlephobia/dependency-count/@lskjs/utils)](https://bundlephobia.com/result?p=@lskjs/utils)
[![Have TypeScript types](https://badgen.net/npm/types/@lskjs/utils)](https://www.npmjs.com/package/@lskjs/utils)
[![Have tree shaking](https://badgen.net/bundlephobia/tree-shaking/@lskjs/utils)](https://bundlephobia.com/result?p=@lskjs/utils)
[![NPM Package size](https://badgen.net/bundlephobia/minzip/@lskjs/utils)](https://bundlephobia.com/result?p=@lskjs/utils)
[![Package size](https://badgen.net//github/license/lskjs/lskjs)](https://github.com/lskjs/lskjs/blob/master/LICENSE)
[![Ask us in Telegram](https://img.shields.io/badge/Ask%20us%20in-Telegram-brightblue.svg)](https://t.me/lskjschat)

<!-- template file="scripts/templates/preview.md" start -->

<!-- template end -->

***

<!-- # 📒 Table of contents  -->

# Table of contents

*   [⌨️ Install](#️-install)
*   [📖 License](#-license)
*   [👥 Contributors](#-contributors)
*   [👏 Contributing](#-contributing)
*   [📮 Any questions? Always welcome :)](#-any-questions-always-welcome-)

# ⌨️ Install

```sh
# yarn
yarn i @lskjs/utils 

# npm
npm i @lskjs/utils 
```

***

# 📖 License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details

# 👥 Contributors

<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->

<!-- prettier-ignore-start -->

<!-- markdownlint-disable -->

<table>
  <tr>
    <td align="center"><a href="https://isuvorov.com"><img src="https://avatars2.githubusercontent.com/u/1056977?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Igor Suvorov</b></sub></a><br /><a href="lskjs/lskjs///commits?author=isuvorov" title="Code">💻</a> <a href="#design-isuvorov" title="Design">🎨</a> <a href="#ideas-isuvorov" title="Ideas, Planning, & Feedback">🤔</a></td>
  </tr>
</table>
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->

# 👏 Contributing

1.  Fork it (<https://github.com/yourname/yourproject/fork>)
2.  Create your feature branch (`git checkout -b features/fooBar`)
3.  Commit your changes (`git commit -am 'feat(image): Add some fooBar'`)
4.  Push to the branch (`git push origin feature/fooBar`)
5.  Create a new Pull Request

# 📮 Any questions? Always welcome :)

*   [Email](mailto:hi@isuvorov.com)
*   [LSK.news – Telegram channel](https://t.me/lskjs)
*   [Спроси нас в телеграме ;)](https://t.me/lskjschat)
npm package: @lskjs/theme
Description: LSK ux subrepo: theme
Author: Igor Suvorov
Latest version: 2.8.0

# LSK ux subrepo: @lskjs/theme

- Цвета и шрифты можно глобально использовать с помощью пропсов
- 1 раз выбиранная палитра цветов и можно использовать её на всех подобных проектах, не надо придумывать каждый раз и подбирать дизайн
- Eсли захочешь её заменить, все цвета с помощью переменных меняются в 1 файле

Чтобы подключить и использовать нашу тему из пакета @lskjs/theme во всем проекте:

## Default 

1. `npm i @lskjs/theme`
2. Прокинуть тему в начальную точку приложения ( Layout, App, Uapp )
```jsx
export default class Uapp extends BaseUapp {
  theme = theme
```
или
 ```jsx
<ThemeProvider theme={theme}>

</ThemeProvider>
```
2. Использование в Styled Components
```jsx
import getTheme from '@lskjs/theme/getTheme';

getTheme(props.theme, 'colors.primary')
```

## Custom

Если нужно переопределить стандартную тему, необходимо дополнительно:

Добавить в проект файл theme.js , в котором:

```js
import theme from '@lskjs/theme';

export default {
  ...theme,
  colors: {
    ...theme.colors,

  },
};


export default {
  ...theme,
  colors: {
    ...theme.colors,
    primary: '#333333',
    secondary: '#f39c12',
    lightGrey: '#f1f1f1',
    greyText: '#b5b5b5',
    darkBackground: '#1a1a1a',
    ...
  },
  fonts: {
    ...theme.fonts,
    fontFamily: ... ,
    fontFamily2: ... ,
  }
  whiteSpace: 'pre-line',
};
```
npm package: @lskjs/utils2
Description: LSK.js – utils – helpers and functions
Author: Igor Suvorov
Latest version: 3.8.1

# LSK.js – utils

> @lskjs/utils – LSK.js – utils – helpers and functions

[![LSK logo](https://badgen.net/badge/icon/MADE%20BY%20LSK?icon=zeit\&label\&color=red\&labelColor=red)](https://github.com/lskjs)
[![NPM version](https://badgen.net/npm/v/@lskjs/utils)](https://www.npmjs.com/package/@lskjs/utils)
[![NPM downloads](https://badgen.net/npm/dt/@lskjs/utils)](https://www.npmjs.com/package/@lskjs/utils)
[![NPM Dependency count](https://badgen.net/bundlephobia/dependency-count/@lskjs/utils)](https://bundlephobia.com/result?p=@lskjs/utils)
[![Have TypeScript types](https://badgen.net/npm/types/@lskjs/utils)](https://www.npmjs.com/package/@lskjs/utils)
[![Have tree shaking](https://badgen.net/bundlephobia/tree-shaking/@lskjs/utils)](https://bundlephobia.com/result?p=@lskjs/utils)
[![NPM Package size](https://badgen.net/bundlephobia/minzip/@lskjs/utils)](https://bundlephobia.com/result?p=@lskjs/utils)
[![Package size](https://badgen.net//github/license/lskjs/lskjs)](https://github.com/lskjs/lskjs/blob/master/LICENSE)
[![Ask us in Telegram](https://img.shields.io/badge/Ask%20us%20in-Telegram-brightblue.svg)](https://t.me/lskjschat)

<!-- template file="scripts/templates/preview.md" start -->

<!-- template end -->

***

<!-- # 📒 Table of contents  -->

# Table of contents

*   [⌨️ Install](#️-install)
*   [📖 License](#-license)
*   [👥 Contributors](#-contributors)
*   [👏 Contributing](#-contributing)
*   [📮 Any questions? Always welcome :)](#-any-questions-always-welcome-)

# ⌨️ Install

```sh
# yarn
yarn i @lskjs/utils 

# npm
npm i @lskjs/utils 
```

***

# 📖 License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details

# 👥 Contributors

<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->

<!-- prettier-ignore-start -->

<!-- markdownlint-disable -->

<table>
  <tr>
    <td align="center"><a href="https://isuvorov.com"><img src="https://avatars2.githubusercontent.com/u/1056977?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Igor Suvorov</b></sub></a><br /><a href="lskjs/lskjs///commits?author=isuvorov" title="Code">💻</a> <a href="#design-isuvorov" title="Design">🎨</a> <a href="#ideas-isuvorov" title="Ideas, Planning, & Feedback">🤔</a></td>
  </tr>
</table>
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->

# 👏 Contributing

1.  Fork it (<https://github.com/yourname/yourproject/fork>)
2.  Create your feature branch (`git checkout -b features/fooBar`)
3.  Commit your changes (`git commit -am 'feat(image): Add some fooBar'`)
4.  Push to the branch (`git push origin feature/fooBar`)
5.  Create a new Pull Request

# 📮 Any questions? Always welcome :)

*   [Email](mailto:hi@isuvorov.com)
*   [LSK.news – Telegram channel](https://t.me/lskjs)
*   [Спроси нас в телеграме ;)](https://t.me/lskjschat)
npm package: @lsky/choose-port
Description: > Get an available port.
Author: lsky-walt
Latest version: 0.0.4

# choose-port
> Get an available port.

## Install

```shell
$ npm i @lsky/choose-port
```

or

```shell
$ yarn add @lsky/choose-port
```


## Use
```javascript
const choosePort = require("@lsky/choose-port")

choosePort().then(port => {
  console.log(port)
}).catch(err => {
  console.error(err)
})
```


## Environment

only use in **Node**.
npm package: @lsky/magic-loader
Description: ### index.html ```html <!DOCTYPE html> <html lang="en">
Author: lsky-walt
Latest version: 0.0.1

# Magic-Loader

### index.html
```html
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>react</title>
  <meta name="viewport"
    content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
</head>

<body>
  <div id="app">
    <!-- for loader replace -->
    {{HTML}}
    </div>
</body>

</html>
```

### webpack.config.js

```javascript

const HtmlWebPackPlugin = require("html-webpack-plugin")

...
new HtmlWebPackPlugin({
  template: `!!@lsky/magic-loader!${path.resolve(
    __dirname,
    "../index.html"
  )}`,
  filename: path.resolve(__dirname, "../dist/index.html"),
})
...
```


### entry.js
```javascript
import React from "react"
import ReactDOM from "react-dom"
import { renderToString } from "react-dom/server"
import App from "./app"

if (typeof global.document !== "undefined") {
  ReactDOM.render(<App />, document.getElementById("app"))
}

// must be app
export const app = () => {
  const html = renderToString(<App></App>)
  return html
}

```

### *Attention*

**No chunk**

**No externals**
npm package: @lsky/preset-data
Description: > 在编译期，在项目中，预设数据。
Author: lsky-walt
Latest version: 0.0.1

# @lsky/preset-data

> 在编译期，在项目中，预设数据。

## 使用方法

### 安装

```shell
$ yarn add @lsky/preset-data
```

### 添加 `loader`

> 在`babel-loader`处增加`PresetDataLoader`

```javascript
{
  test: /\.(js|jsx)$/,
  exclude: /node_modules/,
  use: [
    "babel-loader",
    {
      loader: "@lsky/preset-data/loader",
    },
  ],
},
```

### 添加 `plugin`

```javascript
const PresetDataPlugin = require("@lsky/preset-data/plugin")
plugins: [
  new PresetDataPlugin([
    {
      name: "jobs", // 必须参数
      // -------
      // fetch 请求参数请参照 axios 配置
      url: "http://localhost:8030/test",  // required
      method: "get",
      //-------
      cb: (data) => {
        // axios response data
        // must return data
        return data.data
      },
    },
  ]),
  new HtmlWebPackPlugin({
    template: path.resolve(__dirname, "../index.ejs"),
    filename: path.resolve(__dirname, "../dist/index.html"),
  }),
],
```

#### `PresetDataPlugin` 使用说明

```typescript
interface Option extends axios.AxiosRequestConfig {
  name: string;
  cb?: (responseData: any) => data:any;
  raw?: any;
}
new PresetDataPlugin(options: (Option | Option[]))
```

| Name | Type     | Default | Description                                                   |
| :--- | :------- | :------ | :------------------------------------------------------------ |
| name | string   | null    | 预设数据名称，用于项目中取值。注意，该字段必填。              |
| cb   | function | null    | 处理数据                                                      |
| raw  | any      | null    | 如设置了 raw，将不通过 request 获取数据。注意，该优先级较高。 |

### 项目中使用预设数据

```javascript
import presetDataFunc from "@lsky/preset-data"

console.log(presetDataFunc("jobs")) // 参数是 plugin 的 name
console.log(presetDataFunc())
```
npm package: @lslightly/ratmon
Description: Rational monitor plugins for opencode - reducing cognitive debt in AI-human collaboration
Author: Lslightly
Latest version: 0.1.0

# ratmon

**Rational Monitor** - Customizing AI-human interaction to reduce cognitive debt

## Mission

ratmon (rational monitor) is a collection of opencode plugins designed to promote rational thinking in AI-assisted development. Our goal is to help users avoid over-reliance on AI and maintain active cognitive engagement.

## Philosophy

> Reading can inform you, but thinking, writing, and practice are the necessary paths to human capability improvement.

Modern AI tools are powerful, but excessive dependency creates **cognitive debt** and **technical debt**. ratmon intervenes at strategic moments in conversations to:

- Prompt users to think critically instead of passively receiving answers
- Encourage summarization and internalization of learned concepts
- Foster deeper understanding through active reflection

## Plugins

### summarize-by-yourself

After a threshold of conversation rounds, this plugin prompts the AI to ask **you** (the user) to summarize what you've learned, rather than the AI providing immediate answers.

**How it works:**
1. Tracks conversation rounds in a session
2. After N rounds (default: 2), intercepts the flow
3. Prompts the AI to ask you to summarize or reflect on the discussion
4. Skips the next monitoring round to allow natural conversation

**Example prompt triggered:**
> "The round monitor noticed we've discussed N rounds. Please ask me to summarize the previous content (not you summarizing, but the user - me - summarizing, such as what was learned. Or you can ask questions to help me better internalize the repository)."

## Installation

```bash
# Install dependencies
npm install

# Build the project
npm run build

# Typecheck (no emit)
npm run typecheck
```

## Usage

1. Build the project: `npm run build`
2. Configure opencode to load plugins from the `dist/` directory
3. Plugins will automatically activate in your opencode sessions

## Project Structure

```
ratmon/
├── src/
│   ├── index.ts                    # Main export
│   └── summarize-by-yourself.ts    # Cognitive debt monitor plugin
├── dist/                           # Compiled output (gitignored)
├── package.json
├── tsconfig.json
├── README.md
└── AGENTS.md
```

## Adding New Plugins

1. Create a new `.ts` file in `src/`
2. Implement the `Plugin` interface from `@opencode-ai/plugin`
3. Export from `src/index.ts`
4. Build: `npm run build`

## Development

```bash
# Install dependencies
npm install

# Build
npm run build

# Typecheck without emitting
npm run typecheck
```

## License

MIT License - see [LICENSE](LICENSE) for details.
npm package: @lsmoura/classnames
Description: classname helper
Author: Sergio Moura
Latest version: 1.0.0

classnames
==========

## Installing

```sh
yarn add @lsmoura/classnames
```

```js
import classNames from '@lsmoura/classnames';
console.log(classNames('monkey', 'patch')); // will output 'monkey patch'
```

## Usage

The function can take any number or arguments with types 'string', 'number',
'arrays' and 'objects'. Falsy elements will be ignored. Objects with keys points
to truthy values will be included on the result.

You can pass any kind of nested arrays into the function.

```js
classNames('monkey', 'patch'); // 'monkey patch'
classNames(['monkey', 'patch']); // 'monkey patch'
classNames('monkey', ['patch', 'boo']); // 'monkey patch boo'
classNames('monkey', null, ['patch', 0, 'boo']); // 'monkey patch boo'
classNames('monkey', ['patch'], { boo: true, bar: false }); // 'monkey patch boo'
```