open-index/open-npm huggingface dataset:
npm package: @nestlib/mikro-orm
Description: LSK.js – nest mikro-orm – helpers for mutex in Nest.js projects
Author: Igor Suvorov
Latest version: 4.21.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: @nestlib/mutex
Description: LSK.js – nest mutex – helpers for mutex in Nest.js projects
Author: Igor Suvorov
Latest version: 4.21.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: @nestlib/notify
Description: LSK.js – nest notify sender – use telegram, slack or emails
Author: Igor Suvorov
Latest version: 4.33.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: @nestlib/rabbitmq
Description: LSK.js – nest rabbitmq – helpers for rabbitmq in Nest.js projects
Author: Igor Suvorov
Latest version: 4.25.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: @nestlib/redis
Description: LSK.js – nest rabbitmq – helpers for rabbitmq in Nest.js projects
Author: Igor Suvorov
Latest version: 4.24.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: @nestlib/upload
Description: LSK.js – nest mutex – helpers for mutex in Nest.js projects
Author: Igor Suvorov
Latest version: 4.36.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: @nestlib/utils
Description: LSK.js – nest utils – helpers and utils for Nest.js projects
Author: Igor Suvorov
Latest version: 4.38.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: @nestling.dev/linnet
Description: Get a bird's-eye view of the line counts
Author: Fumiaki Kinoshita
Latest version: 0.0.2

# linnet

Get a bird's-eye view of line counts in your codebase. linnet recursively scans directories, counts lines per file, and renders a colour-coded tree so you can spot oversized or deeply-nested files at a glance.

## Installation

```bash
bun link
```

## Usage

```bash
linnet [options] [paths...]
```

When no paths are given, the current working directory is used.

### Options

| Flag | Description |
|------|-------------|
| `-e, --exact` | Show exact line counts instead of ballpark approximations |
| `-v, --verbose` | Show all files, not just notable ones |
| `-a, --all` | Include all files, not just git-tracked source files |

### Default filters

By default linnet applies two filters so the output focuses on source code:

1. **Git-tracked only** — only files listed by `git ls-files` are counted. If the directory is not inside a git repository, all non-ignored files are included as a fallback.
2. **Source files only** — files with known non-source extensions (images, videos, audio, fonts, documents, archives, compiled objects, etc.) are skipped.

Pass `--all` to disable both filters and include every non-ignored file.

### Ballpark vs exact mode

By default linnet displays **ballpark** counts (`200+`, `500+`, `1k+`, `2k+`, …) and collapses groups of small files to keep the output concise. Pass `--exact` to see precise numbers.

### Notable files

In normal (non-verbose) mode, only **notable** files are shown — those with **500 or more lines** or a **max indentation level of 16+**. Files matching ignore patterns (tests, stories, specs) are also hidden. Use `--verbose` to disable this filter.

## Configuration

Place a `linnet.jsonc` or `linnet.json` in your project (searched upward to the git root):

```jsonc
{
  // Show files with this many lines or more (default: 500)
  "notableLines": 500,
  // Show files with this indent depth or more (default: 16)
  "notableIndent": 16,
  // Regex patterns for files to exclude from the notable filter
  "ignorePatterns": ["\\.stories\\.[jt]sx?$", "\\.test\\.[jt]sx?$", "\\.spec\\.[jt]sx?$"],
  // In ballpark mode, collapse files below this line count (default: 200)
  "collapseBelow": 200,
  // Collapse only when there are more than this many small files (default: 5)
  "collapseThreshold": 5
}
```


## License

MIT
npm package: @nestling/config
Description: Config Module for NestJS
Author: Rob Halff
Latest version: 1.3.2

# Config module for NestJS

Module makes use of [objenv](https://github.com/rhalff/objenv) to automatically process environment variables.

Usage:
```typescript
import { Module } from '@nestjs/common'
import { ConfigModule, ConfigService } from '@nestling/config'
import { environment } from '../environments/environment'

export interface IMyConfig {
  host: string
  port: number
  ...etc
}

@Module({
  imports: [
    ConfigModule.forRoot<IMyConfig>(environment, {
      prefix: process.env.OBJENV_PREFIX
    })
  ]
})
export class ApplicationModule {}

```
npm package: @nestling/cors
Description: Cors Helpers for NestJS
Author: Rob Halff
Latest version: 1.0.2

# Cors helpers for NestJS

Helpers:
 - whitelist(list, corsConfig = {})

## Setup

```typescript
import { NestFactory } from '@nestjs/core'
import { whitelist } from '@nestling/cors'
import { ApplicationModule } from './app/app.module'
import { INestApplication } from '@nestjs/common/interfaces/nest-application.interface'
import { environment } from './environments/environment'

const app: Promise<INestApplication> = NestFactory.create(ApplicationModule)

app.then(instance => {
  instance.enableCors(whitelist(environment.whitelist, {}))
  ...
})
```
npm package: @nestling/errors
Description: Error Handling for NestJS
Author: Rob Halff
Latest version: 1.5.1

# Nestling errors module

This module tries to make it easier to handle errors and send back meaningful information to the client.

It consist of a way to define your own messages for common errors and also intercept third party errors
and normalize them into a common response.

## Application level error messages

As a convention you can suffix your files with `.errors.ts` and keep the errors close to where they are used.

**users.errors.ts**
```typescript
import { HttpStatus } from '@nestjs/common'
import { IErrorMessages } from '../errors/ErrorMessage'

// Optional: to typecheck interpolation vars
export interface UserEmailAlreadyExistError {
  email: string
}

export const userErrors: IErrorMessages = {
  type: 'user',
  errors: [
    {
      code: 'credentialsInvalid',
      statusCode: HttpStatus.BAD_REQUEST,
      message: 'Invalid Credentials.'
    },
    {
      code: 'emailAlreadyExist',
      statusCode: HttpStatus.BAD_REQUEST,
      message: 'Email {email} already exist.'
    }
    ...etc
  ]
}
```
In order to use the error messages they must be registered first:
```typescript
ErrorMessage.addErrorMessages(userErrors)
```

The error messages can be used like this:
```typescript
import { ErrorMessage } from '@nestling/errors'

throw new ErrorMessage('user:credentialsInvalid')

throw new ErrorMessage<UserEmailAlreadyExist>('user:emailAlreadyExists', {
  email: 'some@test.com'
})
```


## Setup

In able to filter for errors the exception filter must be added to the app's components:
```typescript
import { HttpExceptionFilter } from '@nestling/errors'

@Module({
  components: [
    HttpExceptionFilter
  ]
})
export class ApplicationModule implements NestModule {
  configure (consumer: MiddlewaresConsumer): void {
  }
}

```
The filter will intercept *all* exceptions thrown, if an unknown exception is encountered a 500 error will be returned.

## Adding extra error handlers

To register a new error handler use:
```typescript
import ValidationError = require('ajv')
import { HttpStatus } from '@nestjs/common'
import { IErrorMessage } from '../../ErrorMessage'

export const validationErrorHandler = {
  type: ValidationError,
  handler: (exception): IErrorMessage => {
    return {
      code: `validation:${exception.errors[0].keyword}`,
      message: exception.errors[0].message,
      statusCode: HttpStatus.BAD_REQUEST
    }
  }
}

HttpExceptionFilter.addExceptionHandler(validationErrorHandler)
```
The `type` will be used to do an instance of check, the handler normalizes the error message into a common format.

### Error Response Handler

To override the default response handler use:
```typescript
HttpExceptionFilter.setErrorResponseHandler((error, response) => {
  response.setHeader(`x-error-code`, error.code)
  response.setHeader(`x-error-message`, error.message)
  response.setHeader(`x-error-statusCode`, error.statusCode)
  response
    .status(error.statusCode)
    .json(error)

  console.error(error)
})
```
npm package: @nestling/jsonwebtoken
Description: JsonWebToken Module for NestJS
Author: Rob Halff
Latest version: 1.3.2

# JsonWebToken Guard & Middleware for NestJS

Depends on `@nestling/context`, `@nestling/errors` and `@nestling/config`

Used to get decoded json webtoken information into the context.

Things like revoked tokens are expected to be handled by an api gateway.

## Config

```typescript
{
  jwt: {
    secret: 'some_secret',
    header?: 'authorization',
    contextKey?: 'jwt'
  } 
}
```

## Guard Usage

```typescript
@UseGuards(JsonWebtokenGuard)
```

## Middleware Usage 

```typescript
export class UserModule {
  configure(consumer: MiddlewaresConsumer) {
    consumer.apply(JsonWebTokenMiddleware).forRoutes(
      { path: '/user/list', method: RequestMethod.GET },
      { path: '/user', method: RequestMethod.PUT },
      { path: '/user/:_id', method: RequestMethod.GET },
      { path: '/user/password', method: RequestMethod.POST }
    )
  }
}
```
npm package: @nestling/logger
Description: Logger for NestJS
Author: Rob Halff
Latest version: 1.3.2

# Nestling logger module

Simple logger wrapper

Usage:

```typescript
import { LoggerModule } from '@nestling/logger'

@Module({
  imports: [
    LoggerModule.forRoot({
      name: environment.client.id
    }),
    ...
  ]
})
export class ApplicationModule {}
```
npm package: @nestling/messages
Description: Generic Message Handling
Author: Rob Halff
Latest version: 1.2.1

# Nestling messages

As a convention you can suffix your files with `.messages.ts` and keep the response messages close to where they are used.

**user.messages.ts**
```typescript
import { HttpStatus } from '@nestjs/common'
import { IResponseMessages } from './ResponseMessage'

export const userMessages: IResponseMessages = {
  type: 'user',
  messages: [
    {
      code: 'sendEmailSuccess',
      statusCode: HttpStatus.OK,
      message: 'Email was send succesfully.'
    }
    ...etc
  ]
}
```
In order to use the response messages they must be registered first:

**user.module.ts**
```typescript
ResponseMessage.addResponseMessages(userMessages)
```

The response messages can be used like this:

**user.controller.ts**
```typescript
import { ResponseMessage } from '@nestling/messages'

@Controller('user')
export class UserController {

  @Post('/lost_password')
  @Bind(Body())
  async lostPassword(
    body: LostPassword,
    @Response() response
  ) {
     ...
     
     return new ResponseMessage('user:sendEmailSuccess')
  }
```

## Client Side Receiving

In able to validate response messages, the same lib can be used on the client side:


```typescript

ResponseMessage.addResponseMessages(userMessages)

const receiveEmailSuccessMessage = ResponseMessage.receiver('user:sendEmailSuccess')

// will throw a ResponseMessageError if the response code does not match the expectation.
const payload = receiveEmailSuccessMessage(response)

// Direct usage receive()
ResponseMessage.receive('user:sendEmailSuccess', response)

```
npm package: @nestling/redis
Description: Redis provider for NestJS
Author: Rob Halff
Latest version: 1.1.1

# Redis Token Provider for NestJS 

Provides a named token `RedisToken`

Depends on both `@nestling/logger` and `@nestling/config`

The config service may provide:
```
redis: {
  port?: 6379,
  host?: 'localhost'
}
```
npm package: @nestling/validator
Description: Validator module for NestJS
Author: Rob Halff
Latest version: 1.4.6

# Validator Service for NestJS 

Usage:

```typescript
import * as path from 'path'
import { Module } from '@nest/common'
import { ValidatorModule, loadSchemas } from '@nestling/validator'
import { mongoDbKeywords } from '@nestling/validator-keywords-mongodb'

const schemaDir = path.resolve(__dirname, '../../schemas')

const schemas = loadSchemas(schemaDir)
// augment schemas with custom keywords for validation

@Module({
  imports: [
    ValidatorModule.forRoot({
      schemas,
      keywords: {
        ...mongoDbKeywords
      }
    }),
    ...
  ]
})
export class ApplicationModule {}
```

```typescript
await this.validatorService.validate('login', user)
```
npm package: @nesto-software/db-migrate-mongodb
Description: Mongodb driver for db-migrate. This is a fork which updated the mongo dependencies in order to support replica sets with srv records.
Author: Tobias Gurtzick
Latest version: 1.5.0

[![Build Status](https://travis-ci.org/db-migrate/mongodb.svg?branch=master)](https://travis-ci.org/db-migrate/mongodb)
[![Dependency Status](https://david-dm.org/db-migrate/mongodb.svg)](https://david-dm.org/db-migrate/mongodb)
[![devDependency Status](https://david-dm.org/db-migrate/mongodb/dev-status.svg)](https://david-dm.org/db-migrate/mongodb#info=devDependencies)


# mongodb
mongodb driver for db-migrate