open-index/open-npm huggingface dataset:
npm package: @lexmin0412/prettier-config-standard
Description: 前端项目的通用基础 prettier 配置
Author: lexmin0412
Latest version: 2.0.0

# @lexmin0412/prettier-config-standard

[English](https://github.com/lexmin0412/youtils-prettier-config-standard/blob/main/README.md) | [中文](https://github.com/lexmin0412/youtils-prettier-config-standard/blob/main/README.zh-cn.md)

Universal and common prettier configuration for your frontend projects.

## Install

```bash
pnpm add @lexmin0412/prettier-config-standard -D
```

## Usage

Add `.prettierrc.js` in you project's root directory:

```js
module.exports = {
	...require('@lexmin0412/prettier-config-standard'),
}
```

## Override

```js
module.exports = {
	...require('@lexmin0412/prettier-config-standard'),
	semi: true
}
```

set `semi` to `true` after require `@lexmin0412/prettier-config-standard` will override standard configurations.

## Default Configuration

there are some configuration items defined:

```json
{
	"printWidth": 100,
	"useTabs": true,
	"tabWidth": 2,
	"semi": false,
	"singleQuote": true,
	"quoteProps": "as-needed",
	"jsxSingleQuote": false,
	"trailingComma": "all",
	"bracketSpacing": true,
	"bracketSameLine": false,
	"arrowParens": "avoid",
	"proseWrap": "never",
	"htmlWhitespaceSensitivity": "css",
	"vueIndentScriptAndStyle": false,
	"endOfLine": "lf",
	"embeddedLanguageFormatting": "auto",
	"singleAttributePerLine": true
}
```

Click [Here](https://prettier.io/docs) to get more details about Prettier.
npm package: @lexmin0412/taro-ui-vue
Description: UI KIT for Taro/vue
Author: psaren
Latest version: 2.0.0-beta.2

## 项目背景 
`tarojs` 已经开始支持 `vue` 去写 taro 应用了，由于缺少相关的 ui 库，因此决定 按照 taro-ui 重写成 `vue` 组件。
形成了 `taro-ui-vue` 这个库。

## 相关链接
[Taro Ui Vue 使用文档](http://taro-ui-vue.fontend.com/)  
[Taro](https://github.com/NervJS/taro)  
[Taro Ui](https://github.com/NervJS/taro-ui)

## 使用注意
Taro Ui Vue 提供的是源文件，源文件部分代码使用 `ts` 编写，需要项目支持 ts。
如果是用 `taro init` 命令创建，则需在使用时选择 `ts` 。
npm package: @lexmin0412/tpc
Description: a typescript project creator
Author: lexmin0412
Latest version: 2.4.0

# TPC

![version](https://img.shields.io/npm/v/@lexmin0412/tpc) 
![downloads-month](https://img.shields.io/npm/dm/@lexmin0412/tpc)

[English](./README.md) | 中文

TypeScript 项目创建工具，类似于 `npm init`，但是用于 TS 库的初始化。

全局安装 tpc：

```sh
npm i -g @lexmin0412/tpc
```

从现在开始，每当你想要创建一个新的 TypeScript 项目时，只需在工作目录运行：

```sh
npm init -y
tpc init
```

**它实际上做了什么？** 嗯，不多！它将：

1. 安装开发依赖项：[TypeScript](https://github.com/Microsoft/TypeScript)、[ts-node](https://www.npmjs.com/package/ts-node) 和 [rimraf](https://github.com/isaacs/rimraf)（用于跨平台的 `rm -rf`）。
2. 创建 npm 脚本，使用 TS 编译器构建您的项目并使用 `ts-node` 运行它。构建文件也将在您的 `package.json` 中正确声明，并添加到 `.gitignore` 中。
3. 创建一个具有合理默认值的简约 `tsconfig.json` 文件：ES6，并将以下标志设置为真：`alwaysStrict`、`strictNullChecks`、`noImplicitAny`。

## 脚本

* `npm run build` - 构建您的项目
* `npm run ts` - 使用 `ts-node` 运行您的项目

## 项目结构

* `src/` - 您的源文件，必须包含 `index.ts` 文件。
* `test/` - 您的测试文件
* `es/` - 使用 ES 模块的 ES6 产物
* `lib/` - 使用 CommonJS（npm）模块的 ES5 产物。此目录还包含 `*.d.ts` 声明文件。

## 动机

> 几乎每个 JavaScript 库都应该用 TypeScript 编写。

该项目旨在提供创建 npm 库（以及可能的任何其他 JS 项目）所需的一切，使用现代 TypeScript 编译器。这样您就可以使用现代的 ES6 功能和静态类型，而无需任何成本。

同时，它试图不强迫您使用只是一种有倾向性的工具。**它不包括** 一个 lint 工具、像 Jest 这样的测试库或一些重型 TS 配置。一切都保持尽可能的最小化。

## 许可证

MIT

## 更多

这个项目受到 [michowski/ts-init](https://github.com/michowski/ts-init) 的启发。
npm package: @lexnede/nopeai
Description: Tiny, dependency-free permission engine for AI agents.
Latest version: 0.1.0

# nopeai for TypeScript

`nopeai` is a tiny, dependency-free permission engine for AI agents.

## Install

```bash
npm install @lexnede/nopeai
```

## Usage

```ts
import { PermissionDeniedError, createPermissionEngine } from "@lexnede/nopeai";

const engine = createPermissionEngine([
  {
    role: "agent",
    action: "call_tool",
    resource_type: "tool",
    resource_id: "search",
    effect: "allow",
  },
]);

const agent = { id: "agent_1", roles: ["agent"] };
const tool = { type: "tool", id: "search" };

console.log(engine.can(agent, "call_tool", tool)); // true

try {
  engine.authorize(agent, "call_tool", { type: "tool", id: "email" });
} catch (error) {
  if (error instanceof PermissionDeniedError) {
    console.log(error.decision.reason);
  }
}
```

## Included Examples

```ts
import { examples, sampleAgents, sampleResources } from "@lexnede/nopeai";

console.log(
  examples.tools.can(sampleAgents.agent, "call_tool", sampleResources.searchTool)
); // true

console.log(
  examples.tenant.can(sampleAgents.finance, "read", sampleResources.invoice)
); // true
```
npm package: @lexogrine/steam-path-finder
Description: Steam Path & Games Finder
Author: Lexogrine
Latest version: 1.0.1

# steam-path-finder

### Lightweight Steam Path Finder

This is a library to find the Steam installation path and read the `libraryfolders.vdf` file to get the paths and basic info of installed Steam applications.

### Supports:
 - Windows (by registry)
 - Linux (most package managers, flatpack, snap)
 - FreeBSD 
 - macOS (default path)

### Installation
```bash
npm install steam-path-finder
```

### Usage
```typescript
import { findSteamRootPath, getSteamInstallation } from 'steam-path-finder';

const steamPath = await findSteamRootPath();
console.log(`Steam is installed at: ${steamPath}`);
const installation = await getSteamInstallation();
const installedApps = installation.getAppIds();
console.log('Installed Steam Apps:', installedApps);
const CS2Info = installation.getAppInfo('730');
console.log(`CS2 is installed at: ${CS2Info?.path}`);
```

### API
- `findSteamRootPath(): Promise<string | undefined>` - Returns a promise that resolves to the Steam installation path or `undefined` if not found.
- `getSteamInstallation(): Promise<SteamInstallation | { error: string }>` - Returns a promise that resolves to an instance of `SteamInstallation` which can be used to get library paths and installed apps, or an error object.
- `SteamInstallation.getLibraryPaths(): string[]` - Returns an array of all Steam library paths.
- `SteamInstallation.getAppIds(): string[]` - Returns an array of installed app IDs.
- `SteamInstallation.getInstallationPath(appId: string): string | undefined` - Returns the installation path for a specific app ID or `undefined` if not installed.
- `SteamInstallation.getAppInfo(appId: string): AppInfo | undefined` - Returns detailed information about a specific app ID or `undefined` if not installed.


### License
This project is licensed under the MIT License.


### About 
**Lexogrine** is a premier [**Node.js development company**](https://lexogrine.com/technologies/nodejs-development) and AI software development house, delivering high-end AI, web, and mobile design services to a global clientele. In addition to bespoke development, Lexogrine provides a suite of innovative applications, such as [LHM.gg](https://lhm.gg), designed to transform professional collaboration and streamline industry-specific workflows.

We specialize in cutting-edge AI development, complemented by robust web, mobile, and cloud solutions. Our core tech stack includes TypeScript, Python, LLMs, React, React Native, Node.js, Prisma, Medusa, PyTorch, AWS, and Google Cloud Platform.

With a proven track record spanning over 5 years, Lexogrine has successfully delivered hundreds of projects, empowering businesses and enterprises worldwide with scalable, future-proof technology.
npm package: @lexogrine/vdf-parser
Description: Plain Text VDF Parser
Author: Lexogrine
Latest version: 1.0.1

# vdf-parser

### Lightweight plain text VDF Parser

### Installation
```bash
npm install @lexogrine/vdf-parser
```

### Usage
```typescript
import { parseVdf } from '@lexogrine/vdf-parser';
import * as fs from 'fs';

const file = fs.readFileSync('appmanifest_730.acf', 'utf-8');

const result = parseVdf(file);
if (result.success) {
    console.log('Parsed VDF Object:', result.content);
} else {
    console.error('Error parsing VDF:', result.error);
}
```

### API
- `parseVdf(vdfContent: string): { success: true, content: VDFObject } | { success: false, error: string }` - Parses VDF content and returns a JavaScript object representation or an error.
- `VDFObject` - Type representing the structure of the parsed VDF data.

### License
This project is licensed under the MIT License.

### About
**Lexogrine** is a [**Node.js development company**](https://lexogrine.com/technologies/nodejs-development) and AI agent development house, delivering high-end AI, web, and mobile design services to a global clientele. In addition to bespoke development, Lexogrine provides a suite of innovative applications, such as [LHM.gg](https://lhm.gg), designed to transform professional collaboration and streamline industry-specific workflows.

We specialize in advanced AI development, supported by robust web, mobile, and cloud engineering. Our core technology stack relies on TypeScript, Python, LLMs, React, React Native, Node.js, Prisma, Medusa, PyTorch, AWS, and Google Cloud Platform.

Backed by over 5 years of experience, Lexogrine has delivered hundreds of successful projects, empowering global enterprises with scalable, future-ready technology.

### Maintainers
This project is used by [steam-path-finder](https://www.npmjs.com/package/@lexogrine/steam-path-finder) and is maintained by [Lexogrine](https://lexogrine.com) ([LHM.gg](https://lhm.gg)).
npm package: @lexotrion/image-js
Description: Image processing and manipulation in JavaScript
Author: Aleksei S. Popov
Latest version: 1.0.2

# image-js

  [![NPM version][npm-image]][npm-url]
  [![build status][travis-image]][travis-url]
  [![Test coverage][codecov-image]][codecov-url]
  [![npm download][download-image]][download-url]

Image processing and manipulation in JavaScript.

## [API Documentation](https://image-js.github.io/image-js/)

## Installation

`$ npm install image-js`

## Features

### Supported image formats

The following formats can be loaded by image-js:
* PNG (8 or 16 bits, color or greyscale, with or without alpha)
* JPEG
* TIFF (8 or 16 bits, greyscale)

The following formats can be saved by image-js:
* PNG (8 or 16 bits)
* JPEG
* BMP (black and white)

### Native support for various bit depths and image kinds

image-js was developed to be used in scientific applications where we often
have to work on images that have more that 8 bits per channel.  
Unlike many other libraries, if a 16-bit greyscale PNG is decoded, the resulting image has only one 16-bit channel and no pixel information is lost.

image-js can work with images that have 1 (binary), 8, 16 or 32 bits per channel.  
It can accept an arbitrary amount of color channels (usually 1 or 3) and can handle an additional alpha component.

### Basic image manipulation

image-js can be used to do simple image manipulations such as:
* Resize
* Crop
* Rotate
* Convert to greyscale
* Invert colors
* Gaussian blur
* Extract individual channels (red, green or blue)
* And more...

### Statistics

image-js implements a number of functions to get statistics about an image:
* Histogram
* Max, min, median value
* And more ...

### Advanced features for computer vision

* Image thresholding (otsu, triangle, ...)
* Regions of interest
* Convolution with custom kernel
* Sobel filter
* Morphological transformations (open, close, erode, ...)

## Development

Contributions to code or documentation are welcome! Here are a few tips on how to
setup a development environment for image-js.

### Canvas-prebuilt

The `canvas` native addon library is required for all tests to pass.
Canvas-prebuilt is a drop-in replacement for canvas that does not require any compiling. 
No need to install native dependencies.

## License

  [MIT](./LICENSE)

[npm-image]: https://img.shields.io/npm/v/image-js.svg?style=flat-square
[npm-url]: https://www.npmjs.com/package/image-js
[travis-image]: https://img.shields.io/travis/image-js/image-js/master.svg?style=flat-square
[travis-url]: https://travis-ci.org/image-js/image-js
[codecov-image]: https://img.shields.io/codecov/c/github/image-js/image-js.svg?style=flat-square
[codecov-url]: https://codecov.io/gh/image-js/image-js
[download-image]: https://img.shields.io/npm/dm/image-js.svg?style=flat-square
[download-url]: https://www.npmjs.com/package/image-js
npm package: @lexoyo/npm-deploy-trusted-publisher
Description: A minimal TypeScript package ready to publish on npm
Author: Silex Labs
Latest version: 1.0.9

# @silexlabs/my-package

A minimal TypeScript package ready to publish on npm with OIDC authentication.

## Features

- TypeScript support with declaration files
- Automated publishing via GitHub Actions
- OIDC authentication (no npm tokens needed)
- Automatic npm tag management (latest/next)
- Provenance attestation enabled

## Prerequisites

Before publishing, configure npm Trusted Publisher:

1. Go to [npmjs.com](https://www.npmjs.com) and log in
2. Navigate to your package (create it first if needed, or it will be created on first publish)
3. Go to Settings > Publishing access
4. Click "Add provider" under "Trusted Publishers"
5. Fill in:
   - **Provider**: GitHub Actions
   - **Repository**: `your-username/your-repo`
   - **Workflow**: `publish.yml`
   - **Environment**: (leave empty)

## Installation

```bash
npm install
```

## Build

```bash
npm run build
```

## Testing the Publication Workflow

### 1. Initialize Git Repository

```bash
git init
git add .
git commit -m "Initial commit"
```

### 2. Create GitHub Repository

Create a new repository on GitHub (must match the one configured in npm Trusted Publisher).

```bash
git remote add origin https://github.com/your-username/your-repo.git
git push -u origin main
```

### 3. Create and Push a Tag

For a stable release (will be tagged as `latest` on npm):

```bash
git tag v1.0.0
git push origin v1.0.0
```

For a pre-release (will be tagged as `next` on npm):

```bash
git tag v1.0.0-beta.1
git push origin v1.0.0-beta.1
```

### 4. Monitor the Workflow

1. Go to your GitHub repository
2. Click on "Actions" tab
3. Watch the "Publish to npm" workflow run
4. Once completed, check your package on npmjs.com

## Version Tag Management

The workflow automatically determines the npm dist-tag:

- **latest**: For stable versions (e.g., `v1.0.0`, `v2.1.3`)
- **next**: For pre-releases containing: `alpha`, `beta`, `rc`, or `next` (e.g., `v1.0.0-beta.1`, `v2.0.0-rc.1`)

## Usage (After Publishing)

```typescript
import { greet } from '@silexlabs/my-package';

console.log(greet('World')); // "Hello, World!"
```

## Development

1. Make your changes in `src/`
2. Build: `npm run build`
3. Test locally
4. Commit and push
5. Create a tag and push to trigger publication

## License

MIT
npm package: @lexplano/etar-client
Description: Client for https://www.e-tar.lt/ subscriptions
Author: MB H6.LT
Latest version: 0.7.2

# etar-client
Client for https://www.e-tar.lt/ subscriptions

Docs: https://www.e-tar.lt/resources/files/TAR_duomenu_mainu_taisykles.pdf
ASiC+e: http://www.etsi.org/deliver/etsi_ts/102900_102999/102918/01.03.01_60/ts_102918v010301p.pdf
XAdES: http://www.etsi.org/deliver/etsi_ts%5C101900_101999%5C101903%5C01.04.02_60%5Cts_101903v010402p.pdf
npm package: @lexplano/tais-client
Description: A collection of scripts for http://www3.lrs.lt/dokpaieska/forma_l.htm (TAIS) handling
Author: MB H6.LT
Latest version: 0.5.0

# tais-client

A collection of scripts for http://www3.lrs.lt/dokpaieska/forma_l.htm (TAIS) handling
npm package: @lexq/client
Description: Reserved — official package is @lexq/cli
Latest version: 0.0.1

# @lexq/client

This package name is reserved by [LexQ](https://lexq.io).

**Official CLI & MCP package → [`@lexq/cli`](https://www.npmjs.com/package/@lexq/cli)**
```bash
npm install -g @lexq/cli
```
npm package: @lexq/sdk
Description: Reserved — official package is @lexq/cli
Latest version: 0.0.1

# @lexq/sdk

This package name is reserved by [LexQ](https://lexq.io).

**Official CLI & MCP package → [`@lexq/cli`](https://www.npmjs.com/package/@lexq/cli)**
```bash
npm install -g @lexq/cli
```
npm package: @lexriver/async
Description: Async methods
Author: LexRiver
Latest version: 3.0.1

# Async

This package provides `Async.waitMsAsync`, `Async.waitForFunctionToReturnTrueAsync` functions and `Lock` class to synchronize flow.

## Install

`npm install @lexriver/async`

## Import

```typescript
import {Async, Lock} from '@lexriver/async'
```

## Methods


### Async.waitMsAsync(millisecondsToWait: number)

Wait for some milliseconds by setTimeout wrapped in Promise

```typescript
await Async.waitMsAsync(500) // wait 500 milliseconds
```

<br/>
<br/>

### Async.waitForFunctionToReturnTrueAsync(functionToReturnTrue: () => boolean, msStep: number = 50, maxMsToWait: number = 0)

Wait for function to return true or throw error

__Parameters__
* `functionToReturnTrue: () => boolean` - function that will be executed on each step
* `msStep?: number` - pause between each steps in milliseconds, default value is 50
* `maxMsToWait?: number` - maximum milliseconds to wait for all steps. Use 0 to wait forever. default values is 0.

```typescript
// waiting for function getTheAnswer() to return 42 checking every 100ms for 1 second total
await Async.waitForFunctionToReturnTrueAsync(() => getTheAnswer() === 42, 100, 1000)
```

<br/>
<br/>

### Lock

Use `Lock` to synchronize async functions flow. So one function will wait for other function to release the lock.

```typescript

async function functionWithLock1Async(lock:Lock){
    console.log('(1) start')
    await lock.lockAndExecuteAsync(async () => {
        console.log('(1) function with lock begin...')
        await Async.waitMsAsync(1000) // just wait
        console.log('(1) function with lock end')
    })
    console.log('(1) finish')
}

async function functionWithLock2Async(lock:Lock){
    console.log('(2) start')
    await lock.lockAndExecuteAsync(async () => {
        console.log('(2) function with lock begin...')
        await Async.waitMsAsync(1500) // just wait
        console.log('(2) function with lock end')
    })
    console.log('(2) finish')
}

async function startAsync(){
    const lock = new Lock()

    void functionWithLock1Async(lock) // no await
    void functionWithLock2Async(lock) // no await

    await Async.waitMsAsync(3000)

})
```
npm package: @lexriver/json-map
Description: Use object as a key for Map
Author: LexRiver
Latest version: 2.0.1

# json-map

This package provides class JsonMap<K,V> which has interface similar to Map<K,V> but keys could be Objects.

## Install

`npm install @lexriver/json-map`

## Import

```typescript
import { JsonMap } from '@lexriver/json-map'
```

## Usage

```typescript
    // create new map with key type {name:string, age:number} and number as a value
    let valueByPerson = new JsonMap<{name:string, age:number}, number>()
    valueByPerson.set({name:'John', age: 10}, 100)
    valueByPerson.set({name:'Smith', age: 20}, 200)

    valueByPerson.get({name:'John', age: 10}) // 100
    valueByPerson.get({name:'John', age: 20}) // undefined
    valueByPerson.get({name:'Smith', age: 20}) // 200
    valueByPerson.get({name:'smith', age: 20}) // undefined

```
<br/>

## Methods

### constructor

```typescript
    let myMap = new JsonMap<K, V>()
```

K and V could be of any type including Object

<br/>

### iterate

```typescript
    const myMap = new JsonMap<Object, number>()
    
    for(const [key,value] of myMap){
        // ...
    }

    // or...
    for(const [key,value] of myMap.entiries()){
        // ...
    }

    // or...
    myMap.forEach((key:Object, value:number) => {
        // ...
    })

```


<br/>


### get(key:K):V|undefined

Get value by key. Returns `undefined` if key not found.

```typescript
    myMap.get({name:'John', age:10})
```

<br/>


### set(key:K, value:V):JsonMap<K,V>

Create or update value for key.

```typescript
    myMap.set({name:'John', age:10}, 100)
```

<br/>


### has(key:K):boolean

Check if map has a key.

```typescript
    myMap.has({name:'John', age:10})
```

<br/>


### delete(key:K):boolean

Delete one item by key.

```typescript
    myMap.delete({name:'John', age:10})
```

<br/>


### clear():void

Remove all items from map.

```typescript
    myMap.clear()
```

<br/>


### size:number

Get count of items in map.

```typescript
    myMap.size
```

<br/>



### keys():IterableIterator<K>

Get all keys in map.

```typescript
    for(const key of myMap.keys()){
        //...
    }
```

<br/>


### values():IterableIterator<V>

Get all values in map.

```typescript
    for(const value of myMap.values()){
        // ...
    }
```

<br/>


### toArray():[K,V][]

Get map as array.

```typescript
    myMap.toArray()
```

<br/>


### initFromArray(initValue:Iterable<readonly [K,V]>|readonly [K,V][])

 Fill map with keys and values from array.

 ```typescript
    myMap.initFromArray(mySavedArray)
 ```

<br/>



### toJsonString(pretty:boolean=false):string

Get map as json string.

```typescript
    myMap.toJsonString(true)
```

<br/>


### initFromJsonString(jsonString:string):JsonMap<K,V>

Fill map with keys and values from json string.
 
 ```typescript
    myMap.initFromJsonString(mySavedJsonString)
 ```
npm package: @lexriver/json-pack
Description: Pack json object to string by compressing keys
Author: LexRiver
Latest version: 2.0.0

# json-pack

Pack json object or array to string by recursively compressing keys only.

## Install

`npm install @lexriver/json-pack`

## Import

```typescript
import {JsonPack} from '@lexriver/json-pack'
```

## Usage

```typescript

    const original = [
        {firstName:'John', lastName:'Smith'},
        {firstName:'Anders', lastName: 'Hejlsberg'}
    ]
    const packedString = JsonPack.pack(original)
    console.log('packedString=', packedString) // JsonPack:{"keys":[["firstName","0"],["lastName","1"]],"data":[{"0":"John","1":"Smith"},{"0":"Anders","1":"Hejlsberg"}]}

    const unpacked = JsonPack.unpack(packedString)
    console.log('unpacked=', unpacked)

```
<br/>

## Methods

### JsonPack.pack(o):string

Pack json object to string. The only argument `o` must be of type `Object` or `Array`.
Only same keys for object are compressed, not the values.

Returns string.


<br/>


### JsonPack.unpack(packedString:string)

Unpack string to object or array.

<br/>
npm package: @lexriver/string-methods
Description: Few methods for working with strings
Author: LexRiver
Latest version: 2.0.0

# StringMethods

Few methods for working with strings

## Install

```
npm install @lexriver/string-methods
```

## Import

``` typescript
import {StringMethods} from '@lexriver/string-methods'
import {StringMethods, LocaleSettings} from '@lexriver/string-methods'
```

## Methods

### `StringMethods.isDigits(x:string):boolean`

Checks if string contains only digits: 0123456790

``` typescript
StringMethods.isDigits('345') // true
```

<br/>

### `StringMethods.isValidEmail(x:any):boolean`

Simple check if string contains some text before @ and at least one dot and text after dot after @

``` typescript
StringMethods.isValidEmail('test@me.pls') // true
```

<br/>

### `StringMethods.getSimpleHash(value:string):number`

Get simple fast hash of a string
https://stackoverflow.com/questions/6122571/simple-non-secure-hash-function-for-javascript

``` typescript
StringMethods.getSimpleHash('test') === StringMethods.getSimpleHash('test') // true
StringMethods.getSimpleHash('test') === StringMethods.getSimpleHash('tset') // false
```

<br/>

### `StringMethods.formatPluralNumber(p)`

Get a nice string for plural number.

Arguments

```typescript
    StringMethods.formatPluralNumber(p:{
        number: number,
         settings: { // StringMethods.LocaleSettings type
            locale?:string, 
            ifZero:(x:number)=>any, 
            ifOne:(x:number)=>any,
            ifFew:(x:number)=>any,
            ifMany:(x:number)=>any
        }
    }
```

Example

```typescript
    let settings:StringMethods.LocaleSettings = {
        locale:'ru',
        ifZero:(x) => `товары не найдены`,
        ifOne:(x) => `${x} товар`,
        ifFew:(x) => `${x} товара`,
        ifMany:(x) => `${x} товаров`
   }

   StringMethods.formatPluralNumber({ number: 33, settings })) // 33 товара

```
npm package: @lexriver/type-event
Description: Typed event class for typescript
Author: LexRiver
Latest version: 3.0.2

# TypeEvent

Typed event class for typescript

## Install

```
npm install @lexriver/type-event
```

<br/>

## Import
```typescript
import {TypeEvent} from '@lexriver/type-event'
```

<br/>

## Usage

```typescript
// creating new event
const e = new TypeEvent<(a:number, b:number)=>void>()

let sum = 0

// subscribing to event
e.subscribe((a,b) => {
    console.log('event is triggered!', 'a=', a, 'b=', b)
    sum = a + b
})

// triggering event
await e.trigger(100,200)

console.log(sum) // 300
```

<br/>
<br/>

## Unsubscibe from event

There are two ways to unsubscribe from event.

First way is to return special object ```{unsubscribe:true}```

```typescript
const e = new TypeEvent()
e.subscribe(() => {
    if(someCondition()){
        return {unsubscribe: true}
    }
})
```

Second way is to use ```.unsubscribe(handler)``` method on event

```typescript
const e = new TypeEvent<()=>void>()
let counter = 0
const eventHandler = () => {
    console.log('event is triggered')
    counter++
}
e.subscribe(eventHandler)
e.trigger()

e.unsubscribe(eventHandler)
e.trigger()

console.log(counter) // 1

```

<br/>
<br/>

## Subscribe once

```typescript
const e = new TypeEvent()
let counter = 0
e.once(() => {
    counter++
})
e.trigger()
e.trigger()
console.log(counter) // 1
```

<br/>
<br/>

## Count of subscribers

Use ```.countOfSubscribers``` and ```.countOfOnceSubscribers``` properties to get some stats for the event.

```typescript
const e = new TypeEvent()
e.once(() => {

})
e.once(() => {

})
e.subscribe(() => {

})

console.log(e.countOfSubscribers) // 1
console.log(e.countOfOnceSubscribers) // 2
```

<br/>
<br/>

## Unsubscribe all

Unsubscribe all handlers from event

```typescript
const e = new TypeEvent()
e.subscribe(() => 0)
e.subscribe(() => 1)
e.once(() => 2)
e.unsubscribeAll()
e.countOfSubscribers // 0
e.countofOnceSubscribers // 0
```
npm package: @lexsus/node-red-contrib-hdlbus
Description: Fork of hdlbus implementation by mrgadget, which fixes validator's errors
Latest version: 1.2.3

# node-red-contrib-hdlbus
Node-Red implementation of HDL BusPro (SmartBus) protocol http://hdlautomation.com. 
Forked from [node-red-contrib-hdlbus](https://github.com/mrgadget/node-red-contrib-hdlbus) and with fixed validators.
npm package: @lexsus/smart-bus
Description: Node.js implementation of HDL SmartBus protocol [Fork of smart-bus]
Author: @bennuttall
Latest version: 0.5.5

## SmartBus Fork

Node.js implementation of HDL SmartBus protocol http://hdlautomation.com. 
Forked from [Linax2015's repo](https://github.com/Linax2015/smart-bus.git) just to make it uploaded to npmjs.
npm package: @lextomato/platzom
Description: traductor de idioma platzom
Author: Jhojany Uzcategui
Latest version: 0.1.0

# platzom

Platzom es un idioma inventado para el [Curso de Fundamentos de JavaScript](https://platzi.com/js) de [Platzi](https://platzi.com), el mejor lugar de educación online

## Descripción del idioma

- Si la palabra termina con "ar", se le quitan esas dos letras
- Si la palabra inicia con Z, se le añade "pe" al final
- Si la palabra traducida tiene 10 o más letras, se debe partir en dos por la mitad y unir con un guión medio
- Por último, si la palabra original es un palíndromo, ninguna regla anterior cuenta y se devuelve la misma palabra pero intercalando letras mayúsculas y minúsculas

## Instalación

```
npm install platzom
```

## Curso

```
import platzon from 'platzom'

platzom("Programar") // Program
platzom("Zorro") // Zorrope
platzom("Zarpar") // Zarppe
platzom("abecedario") // abece-dario
platzom("sometemos") // SoMeTeMoS
```

## Créditos
- [Sacha Lifszyc](https://twitter.com/@slifszyc)

## Licencia

[MIT] (https://opensource.org/licenses/MIT)
npm package: @lexxsoft/usei18n
Description: ```shell npm i @lexxsoft/usei18n ```
Author: Aleksey Komov
Latest version: 0.1.1

# Installation

```shell
npm i @lexxsoft/usei18n
```

# Using

```js
import {createApp} from 'vue'
import App from './App.vue'
import {i18n} from '@lexxsoft/usei18n'

const app = createApp(App)
app.use(i18n, {translationUrl: '/api/translations'})
app.mount('#app')
```

In component
```js
import {useI18n} from "@lexxsoft/usei18n";

const $t = useI18n().t
console.log($t('passwords.reset'))
```