open-index/open-npm huggingface dataset:
npm package: @feng3d/three
Description: 使用feng3d的设计来包装three.js。
Author: feng
Latest version: 0.0.1

# feng3d-three
使用feng3d的设计来包装three.js。

## 缘由
经过10年以上对流行的Web3D引擎的研究与自研引擎，积累了feng3d，与three.js等引擎相比最缺乏的是成熟度与社区。

本人有自信在有充足的资源的情况下能够把feng3d做好，甚至超越市面上流行的Web3D引擎。
但为保守起见，心头有萌生另一想法，基于three.js的基础上结合feng3d的独特优势来打造一个中间版本。

## three.js中独特性
1. 摄像机与灯光有独特的`lookAt` @see https://github.com/mrdoob/three.js/blob/r149/src/core/Object3D.js#L284
npm package: @feng3d/watcher
Description: 对象属性监听器
Author: feng
Latest version: 0.8.14

# @feng3d/watcher

用于监听对象属性的变化以及同步两个对象的属性值。

源码：https://gitee.com/feng3d/watcher

文档：https://feng3d.com/watcher

## 网站

https://feng3d.com/watcher

## 安装
```
npm install @feng3d/watcher
```

## 示例

### 监听对象属性的变化
```
const { watcher } = require('@feng3d/watcher');

const o = { a: 1 };
let out = '';
const f = (_h, _p, _o) => { out += 'f'; };
const f1 = (_h, _p, _o) => { out += 'f1'; };
watcher.watch(o, 'a', f);
watcher.watch(o, 'a', f1);
o.a = 2;
watcher.unwatch(o, 'a', f);
o.a = 3;
console.assert(out === 'ff1f1', out);
```

### 绑定两个对象的指定属性，保存两个属性值同步。
```
const { watcher } = require('@feng3d/watcher');

const o1 = { a: 1 };
const o2 = { a: 1 };

watcher.bind(o1, 'a', o2, 'a');

o1.a = 2;
console.assert(o1.a == o2.a && o2.a === 2);

o2.a = 5;
console.assert(o1.a == o2.a && o1.a === 5);
```

### 监听对象属性链值变化
```
const { watcher } = require('@feng3d/watcher');

const o = { a: { b: { c: 1 } } };
let out = '';
const f = (_h, _p, _o) => { out += 'f'; };
const f1 = (_h, _p, _o) => { out += 'f1'; };
watcher.watchchain(o, 'a.b.c', f);
watcher.watchchain(o, 'a.b.c', f1);
o.a.b.c = 2;
watcher.unwatchchain(o, 'a.b.c', f);
o.a.b.c = 3;
console.assert(out === 'ff1f1', out);
//
out = '';
watcher.unwatchchain(o, 'a.b.c', f1);
o.a.b.c = 4;
console.assert(out === '', out);
//
out = '';
watcher.watchchain(o, 'a.b.c', f);
o.a.b.c = 4;
o.a.b.c = 5;
console.assert(out === 'f', out);
//
out = '';
o.a = { b: { c: 1 } };
o.a.b.c = 3;
console.assert(out === 'ff', `out:${out}`);
//
out = '';
watcher.unwatchchain(o, 'a.b.c', f);
o.a.b.c = 4;
console.assert(out === '', `out:${out}`);
//
out = '';
watcher.watchchain(o, 'a.b.c', f);
o.a = null;
o.a = { b: { c: 1 } };
o.a.b.c = 5;
console.assert(out === 'fff', out);
```
### 监听对象多个属性变化
```
// 变换
const transform = {
    position: { x: 0, y: 0, z: 0 },
    angle: { x: 0, y: 0, z: 0 },
    scale: { x: 1, y: 1, z: 1 },
};

let changeCount = 0;

// 变化回调
function onChanged(_newValue: any, _oldValue: any, _host: any, _property: string)
{
    changeCount++;
}

// 监听变化
watcher.watchobject(transform, { position: { x: 0, y: 0, z: 0 }, angle: { x: 0, y: 0, z: 0 }, scale: { x: 0, y: 0, z: 0 } }, onChanged);
//
changeCount = 0;
transform.position.x = Math.random();
equal(changeCount, 1); // 触发改变一次

changeCount = 0;
transform.position.x = transform.position.x + 0;
equal(changeCount, 0); // 赋予相同的值不会触发改变

changeCount = 0;
transform.position = { x: Math.random(), y: Math.random(), z: Math.random() };
equal(changeCount, 3); // x、y、z均改变

changeCount = 0;
transform.position = { x: transform.position.x, y: transform.position.y, z: transform.position.z };
equal(changeCount, 0); // x、y、z均未改变

// 移除监听变化
watcher.unwatchobject(transform, { position: { x: 0, y: 0, z: 0 }, angle: { x: 0, y: 0, z: 0 }, scale: { x: 0, y: 0, z: 0 } }, onChanged);

changeCount = 0;
transform.position = { x: Math.random(), y: Math.random(), z: Math.random() };
equal(changeCount, 0); // 无法监听到x、y、z改变
```
npm package: @fengcch/n8n-nodes-302ai-chat
Description: n8n community node for interacting with the 302.ai chat completion API
Author: 302.AI
Latest version: 1.2.2

# @fengcch/n8n-nodes-302ai-chat

[![NPM Version](https://img.shields.io/npm/v/@fengcch/n8n-nodes-302ai-chat?style=flat-square)](https://www.npmjs.com/package/@fengcch/n8n-nodes-302ai-chat)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square)](https://opensource.org/licenses/MIT)
[![N8N Compatibility](https://img.shields.io/badge/N8N-v1.x-blueviolet?style=flat-square)](https://n8n.io)

This is an n8n community node for [302.AI](https://302.ai/) AI service integration.

## Prerequisites

You need to have a valid API key from [302.AI](https://302.ai/) to use this node.

## Installation

1.  Go to **Settings > Community Nodes** in your n8n instance.
2.  Select **Install** and enter `@fengcch/n8n-nodes-302ai-chat` in the search box.
3.  Click **Install** to add the node to your n8n instance.

## Configuration

1.  In your n8n workflow, add the "302.AI" node.
2.  In the "Credentials" section, click on **Create New**.
3.  Give your credential a name.
4.  Enter your API key from `302.AI` into the **API Key** field.
5.  Click **Save** to create the credential.

## Usage

### Chat Operation

1.  **Model Name or ID**: Select from available 302.ai models
2.  **System Prompt**: (Optional) Provide context for the AI
3.  **Message**: Your input message
4.  **Additional Fields**: Temperature, max tokens, etc.

### Multimodal Support
- Supports both text and image inputs in chat conversations
- Compatible with vision-capable models for image understanding
- **Image URL**: Optional field to include images in your conversation
- **Supported formats**: HTTP/HTTPS image URLs or base64 encoded images
- **Use cases**: Image analysis, visual question answering, content understanding from images

## Output

- **Standard response**: `json.response` contains the model's reply
- **Error handling**: `json.error` for any API issues

## Examples

### Basic Chat Example
```json
{
  "model": "gpt-3.5-turbo",
  "message": "Hello, how can AI help with automation?",
  "temperature": 0.7
}
```

### Pseudo-stream Mode

- Enable the **Pseudo-stream Mode** toggle (below Image URL) when the target model only supports streaming responses, for example Qwen3.
- The node consumes the full stream and still returns a single JSON result so you can read the reply from `json.response`.
- If the service emits `reasoning_content`, it is exposed as `json.reasoning` for easier debugging.

### Multimodal Example (Text + Image)
```json
{
  "model": "gpt-5",
  "message": "What do you see in this image?",
  "imageUrl": "https://example.com/image.jpg",
  "temperature": 0.5
}
```

### Response Example
```json
{
  "response": "AI can help with automation in many ways, including data processing, decision making, content generation, and workflow optimization..."
}
```

## License

[MIT](LICENSE)
npm package: @fengcch/openclaw-wechat-access-plugin
Description: OpenClaw WeChat access plugin with terminal-first login and binding flow.
Author: fengcch
Latest version: 0.1.1

# @fengcch/openclaw-wechat-access-plugin

一个给 OpenClaw 用的微信接入插件。

它做的事情很直接：

- 安装到 OpenClaw 插件系统
- 终端二维码扫码登录，全自动轮询完成
- 获取 jwt_token 和 channel_token，gateway 启动时自动刷新
- 自动设备绑定
- 通过 WebSocket 接收微信消息，调用 agent 并回复

## 安装

推荐直接通过 OpenClaw 安装：

```bash
openclaw plugins install @fengcch/openclaw-wechat-access-plugin
```

启用渠道：

```bash
openclaw config set channels.openclaw-wechat-access-plugin.enabled true
```

然后重启 OpenClaw / Gateway。

## 登录

安装后可以直接用 OpenClaw 命令触发登录。

**推荐：终端二维码方案**（自动轮询，无需浏览器）：

```bash
openclaw wechat-access login
```

终端会直接渲染二维码，用微信扫码并确认后自动完成登录、token 获取和设备绑定。

**备用：浏览器方案**（终端二维码方案不稳定时使用）：

```bash
openclaw wechat-access login-browser
```

清除登录态：

```bash
openclaw wechat-access logout
```

查看插件状态建议：

```bash
openclaw wechat-access status
openclaw status
```

## 用户需要做什么

整个流程里，用户只需要：

1. 用微信扫描终端显示的二维码，并在手机上确认登录
2. 如提示需要绑定，用控制端微信打开绑定链接

完成后，终端会提示你重启 OpenClaw。

## Token 刷新机制

登录后 jwt_token 会保存到 `~/.openclaw/wechat-access-auth.json`。每次 gateway 启动时，插件会用 jwt_token 自动刷新 channel_token，无需重新扫码。

## 成功标志

完成安装和绑定后：

- `openclaw status` 里这个渠道不再只是 `SETUP`
- 控制端微信发消息时，OpenClaw 能回复

## 常见问题

- 没装上：重新执行 `openclaw plugins install @fengcch/openclaw-wechat-access-plugin`
- 没弹登录：手动执行 `openclaw wechat-access login`
- 终端二维码不好用：改用 `openclaw wechat-access login-browser`
- 绑定后还是离线：先重启 OpenClaw，再测试一次
- WebSocket 1006 断连：执行 `openclaw wechat-access login` 重新登录获取新 token

## 免责声明

本项目基于第三方客户端行为和接口链路做兼容实现，不是官方 SDK，也不是官方授权集成。

- 更适合学习、研究、个人测试和兼容性验证
- 上游接口变更后，扫码、绑定、消息收发都可能失效
- 使用本项目带来的账号、服务、合规等风险需自行承担
npm package: @fengdi-spore/hookify
Description: 函数hook化，参数进行统一处理，类似react hook方式，并提供useParameters方法
Latest version: 1.0.1

# hookify


函数hook化，参数进行统一处理，类似react hook方式，并提供useParameters方法


```
let hookify = require('@fengdi-spore/hookify');



let lambda = async (a, b)=>{

    // a, b 为处理后的参数

    // let params = useParameters(); //可以获取完整的参数

    return a + b;
};



let param = {
    foo:{
        a: 4,
        b: 3
    }
};



(async()=>{

    let ret = await hookify(lambda, p=>[p.foo.a, p.foo.b])( param );

    console.log(ret);

})();


```
npm package: @fenge/eslint-config
Description: A super strict eslint config for linting js/ts/package.json.
Author: hellozmj@qq.com
Latest version: 0.8.1

# @fenge/eslint-config

[![](https://img.shields.io/npm/l/@fenge/eslint-config.svg)](https://github.com/zanminkian/fenge/blob/main/LICENSE)
[![](https://img.shields.io/npm/v/@fenge/eslint-config.svg)](https://www.npmjs.com/package/@fenge/eslint-config)
[![](https://img.shields.io/npm/dm/@fenge/eslint-config.svg)](https://www.npmjs.com/package/@fenge/eslint-config)
[![](https://packagephobia.com/badge?p=@fenge/eslint-config)](https://packagephobia.com/result?p=@fenge/eslint-config)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://makeapullrequest.com)

A strict eslint config preset containing a comprehensive set of rules for linting `js` / `ts` / `package.json` files.

## Feature

- Lint `js` / `mjs` / `cjs` / `jsx` / `ts` / `mts` / `cts` / `tsx` / `package.json` / `html` files only.
- Strict. More than 400+ rules.
- Highly customizable by omitting unwanted.
- Type safe. TypeScript friendly.
- Pure JavaScript project friendly.
- React friendly.
- NestJS friendly.
- Have no stylistic opinions. Prettier friendly.
- Respect `.gitignore`.
- [ESLint Flat config](https://eslint.org/docs/latest/use/configure/configuration-files-new), compose easily!
- Modern. ESM first.
- One-line of config.

## Usage

Install it in the root of js / ts project.

```sh
npm i -D eslint @fenge/eslint-config
```

Config `eslint.config.js`. If you are in `CommonJS`, config `eslint.config.mjs`.

```js
export { default } from "@fenge/eslint-config";
```

Config `package.json`

```json
{
  "scripts": {
    "lint": "eslint .",
    "lint:fix": "eslint . --fix"
  }
}
```

## Advanced Usage

### Config Builder

You can use `Builder` class to customize for selecting or omitting some rules.

```ts
// @ts-check
import { Builder } from "@fenge/eslint-config";

export default new Builder()
  .enableHtml()
  .enablePackageJson({
    pick: ["packagejson/top-types"], // only these rules will work for package.json files
  })
  .enableJavaScript({
    omit: ["no-var"], // these rules will not work for js files
  })
  .enableTypeScript()
  // apply additional rules or override the built-in rules for ts files
  .append({
    name: "strictest",
    files: ["**/*.{ts,cts,mts,tsx}"],
    rules: {
      "@typescript-eslint/no-explicit-any": "error",
      "@typescript-eslint/consistent-type-assertions": [
        "error",
        { assertionStyle: "never" },
      ],
      "@typescript-eslint/no-non-null-assertion": "error",
    },
  })
  .toConfig();
```

> Tips: By adding a `// @ts-check` at the top of the config file, you will get code hinting in VSCode/WebStorm. It will highly improve your development experience.

## License

MIT
npm package: @fenge/prettier-config
Description: An elegant prettier shareable config.
Author: hellozmj@qq.com
Latest version: 0.4.0

# @fenge/prettier-config

[![](https://img.shields.io/npm/l/@fenge/prettier-config.svg)](https://github.com/zanminkian/fenge/blob/main/LICENSE)
[![](https://img.shields.io/npm/v/@fenge/prettier-config.svg)](https://www.npmjs.com/package/@fenge/prettier-config)
[![](https://img.shields.io/npm/dm/@fenge/prettier-config.svg)](https://www.npmjs.com/package/@fenge/prettier-config)
[![](https://packagephobia.com/badge?p=@fenge/prettier-config)](https://packagephobia.com/result?p=@fenge/prettier-config)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://makeapullrequest.com)

An elegant prettier shareable config.

## Features

- Sort ESM import statements (powered by [@ianvs/prettier-plugin-sort-imports](https://www.npmjs.com/package/@ianvs/prettier-plugin-sort-imports)).
- Sort `package.json` (powered by [prettier-plugin-packagejson](https://www.npmjs.com/package/prettier-plugin-packagejson)).
- Sort Tailwind CSS classes (powered by [prettier-plugin-tailwindcss](https://www.npmjs.com/package/prettier-plugin-tailwindcss)).
- Elegant. One-line of config.
- Compatible with default prettier config `{}`. Only introduced some plugins.

## Usage

Install

```sh
npm i -D prettier @fenge/prettier-config
```

Config `prettier.config.js`

```js
export { default } from "@fenge/prettier-config";
```

Customize

```js
import config from "@fenge/prettier-config";

export default {
  ...config,
  // Add your own configs below
  semi: true,
  singleQuote: true,
};
```

Config `package.json`

```json
{
  "scripts": {
    "format": "prettier -c .",
    "format:write": "prettier -c -w ."
  }
}
```

## License

MIT
npm package: @fenge/tsconfig
Description: A strict sharable tsconfig preset.
Author: hellozmj@qq.com
Latest version: 0.11.0

# @fenge/tsconfig

A strict sharable tsconfig preset.

[![](https://img.shields.io/npm/l/@fenge/tsconfig.svg)](https://github.com/zanminkian/fenge/blob/main/LICENSE)
[![](https://img.shields.io/npm/v/@fenge/tsconfig.svg)](https://www.npmjs.com/package/@fenge/tsconfig)
[![](https://img.shields.io/npm/dm/@fenge/tsconfig.svg)](https://www.npmjs.com/package/@fenge/tsconfig)
[![](https://packagephobia.com/badge?p=@fenge/tsconfig)](https://packagephobia.com/result?p=@fenge/tsconfig)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://makeapullrequest.com)

## Feature

- The best practice about `tsconfig.json`.
- Strictest.
- One-line of tsconfig.
- Support `ESM` and `CommonJS`.
- Support FE (eg: [React](https://github.com/facebook/react)) & BE (eg: [Nest](https://github.com/nestjs/nest)) project.

## Usage

### Install

```sh
npm i @fenge/tsconfig -D
```

For node project, you may need to install `@types/node` additionally.

```sh
npm i @types/node -D
```

For frontend project (like React), you may need to install `@types/web` additionally.

```sh
npm i @types/web -D
```

### Config `tsconfig.json`

```json
{
  "extends": "@fenge/tsconfig"
}
```

## Best Practices

Here are the best practices if you are using this package.

### For polyrepo

```
├── src
│   └── index.ts
├── test
│   └── index.test.ts
├── package.json
├── tsconfig.build.json
└── tsconfig.json
```

#### tsconfig.json

```json
{
  "extends": "@fenge/tsconfig"
}
```

#### tsconfig.build.json

For Node.js app:

```json
{
  "extends": ["./tsconfig.json", "@fenge/tsconfig/node"],
  "include": ["src"],
  "exclude": ["**/*.test.ts"]
}
```

For Web app:

```json
{
  "extends": ["./tsconfig.json", "@fenge/tsconfig/web"],
  "include": ["src"],
  "exclude": ["**/*.test.ts"]
}
```

### For monorepo

You don't need `tsconfig.build.json`.

```
├── apps
│   ├── app1
│   │   ├── src
│   │   │   └── main.ts
│   │   ├── test
│   │   │   └── main.test.ts
│   │   ├── package.json
│   │   └── tsconfig.json
│   └── app2
│       ├── src
│       │   └── main.ts
│       ├── test
│       │   └── main.test.ts
│       ├── package.json
│       └── tsconfig.json
├── package.json
└── tsconfig.json
```

#### tsconfig.json in the root of project

```json
{
  "extends": "@fenge/tsconfig"
}
```

#### tsconfig.json in each app

For Node.js app:

```json
{
  "extends": ["../../tsconfig.json", "@fenge/tsconfig/node"]
}
```

For Web app:

```json
{
  "extends": ["../../tsconfig.json", "@fenge/tsconfig/web"]
}
```

## Commands

After installing `@fenge/tsconfig`, you can run `npx tsconfig init` command to generate a `tsconfig.json` file. Run `npx tsconfig -h` for all commands details:

```txt
Usage: tsconfig [options] [command]

Options:
  -h, --help      display help for command

Commands:
  init [options]  init a tsconfig file
  diff [options]  show differences between recommended tsconfig and current project tsconfig
  help [command]  display help for command
```

## License

MIT
npm package: @fenge/types
Description: A type replacement for enhancing TypeScript built-in apis.
Author: hellozmj@qq.com
Latest version: 0.6.0

# @fenge/types

[![](https://img.shields.io/npm/l/@fenge/types.svg)](https://github.com/zanminkian/fenge/blob/main/LICENSE)
[![](https://img.shields.io/npm/v/@fenge/types.svg)](https://www.npmjs.com/package/@fenge/types)
[![](https://img.shields.io/npm/dm/@fenge/types.svg)](https://www.npmjs.com/package/@fenge/types)
[![](https://packagephobia.com/badge?p=@fenge/types)](https://packagephobia.com/result?p=@fenge/types)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://makeapullrequest.com)

A type replacement for enhancing TypeScript built-in apis.

## What is it

TypeScript supports replacing built-in definitions by installing a lib to `node_modules`, since [v4.5](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-5.html#supporting-lib-from-node_modules). TypeScript built-in definitions have a large number of `any`, which are not type-safe enough.

This is a library that provides stricter type definitions for enhancing TypeScript built-in apis.

## Features

Here are all features and differences between the built-in definitions and this library.

**Without this library:**

- 🚨 `JSON.parse` returns `any`.
- 🚨 `Array.isArray` returns `any[]`.
- 🚨 `new Map()` generates `Map<any, any>`.
- 🚨 `new Promise()` can reject a non `Error` variable.
- 🚨 `Promise.reject` accepts `any` as a reason.
- 🚨 `Promise.prototype.catch` accepts `(reason: any) => void | PromiseLike<void>`.
- 🚨 `Promise.prototype.then` accepts `(reason: any) => void | PromiseLike<void>` for the second parameter.

**With this library:**

- 👍 `JSON.parse` returns `unknown`.
- 👍 `Array.isArray` returns `unknown[]`.
- 👍 `new Map()` generates `Map<unknown, unknown>`.
- 👍 `new Promise()` must reject an `Error` variable.
- 👍 `Promise.reject` accepts `Error` as a reason.
- 👍 `Promise.prototype.catch` accepts `(reason: unknown) => void | PromiseLike<void>`.
- 👍 `Promise.prototype.then` accepts `(reason: unknown) => void | PromiseLike<void>` for the second parameter.

## Usage

Firstly, if you have install `@types/node`, make sure its version >= `18.0.0`.

Then, add this library to `devDependencies` field in `package.json` file. You can replace the version of `0.4.0` with the expected version.

```json
{
  "devDependencies": {
    "@typescript/lib-es2020": "npm:@fenge/types@0.4.0"
  }
}
```

Finally, run `npm install` or `yarn install` or `pnpm install`.

After that, writing TypeScript code will be more type-safe. Example:

```ts
const foo = JSON.parse('{"bar": 1}'); // The `foo` is `unknown` type now.
console.log(foo.baz + 1); // error: 'foo' is of type 'unknown'.
```

## License

MIT
npm package: @fengguotao/npm-commponents-test
Description: A Vue commponents test
Author: Fenguotao
Latest version: 1.0.0

# npm-commponents-test

> A Vue commponents test

## Build Setup

``` bash
# install dependencies
npm install

# serve with hot reload at localhost:8080
npm run dev

# build for production with minification
npm run build
```

For detailed explanation on how things work, consult the [docs for vue-loader](http://vuejs.github.io/vue-loader).
#npm login
#fengguotao
#npmFgt880523
#fengguotao126@126.com
#npm publish --access public
#npm publish
#mkdir storage && cd storage
#npm init
#npm init --scope=@fengguotao -y
#npm publish --access public
npm package: @fenghan/prettier-config
Description: Prettier configuration for better.
Author: Feng Han
Latest version: 1.0.7

# <em><b>Prettier Config</b></em>

[![npm version](https://img.shields.io/npm/v/@fenghan/prettier-config?style=flat-square)](https://www.npmjs.com/package/@fenghan/prettier-config)

Prettier configuration for my projects.

## Installation

This package is distributed via [npm](https://www.npmjs.com/package/@fenghan/prettier-config). It requires [prettier](https://github.com/prettier/prettier).

If using **npm 5+**, use this shortcut:

```sh
npx install-peerdeps -D @fenghan/prettier-config
```

Or install each package by yourself:

```sh
npm install -D @fenghan/prettier-config prettier
# or
yarn add -D @fenghan/prettier-config prettier
```

## Usage

You can just reference it in your `package.json` file:

```json
{
  "prettier": "@fenghan/prettier-config"
}
```

If you need to overwrite some properties from this configuration, import this in your `.prettierrc.js` file and export the modifications:

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

Then you can setup the [Prettier CLI](https://prettier.io/docs/en/cli.html) in your `package.json` file:

```json
{
  "format": "prettier --write ."
}
```
npm package: @fenghan/stylelint-config
Description: Stylelint config for styles.
Author: fenghan
Latest version: 1.0.7

# <em><b>ESlint Config for JavaScript</b></em>

[![npm version](https://img.shields.io/npm/v/@fenghan/stylelint-config?style=flat-square)](https://www.npmjs.com/package/@fenghan/stylelint-config)

[Stylelint](https://stylelint.io/) configuration for styles.

## Installation

This package is distributed via [npm](https://www.npmjs.com/package/@fenghan/stylelint-config). It requires [stylelint](https://github.com/stylelint/stylelint).

If using **npm 5+**, use this shortcut:

```sh
npx install-peerdeps -D @fenghan/stylelint-config
```

Or install each package by yourself:

```sh
npm install -D @fenghan/stylelint-config stylelint
# or
yarn add -D @fenghan/stylelint-config stylelint
```

## Usage

Add the extends to your `.stylelintrc.js`:

```js
module.exports = {
  extends: '@fenghan/stylelint-config',
  rules: {
    // your overrides
  },
}
```

## What's Inside?

This configuration contains the following cool packages.

| Package                                                                                          | Description                                                                                           |
| ------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------- |
| [stylelint-config-standard](https://github.com/stylelint/stylelint-config-standard)              | The standard shareable config for stylelint.                                                          |
| [stylelint-scss](https://github.com/kristerkari/stylelint-scss)                                  | A collection of SCSS specific linting rules for stylelint.                                            |
| [stylelint-order](https://github.com/hudochenkov/stylelint-order)                                | A plugin pack of order-related linting rules for stylelint.                                           |
| [stylelint-config-rational-order](https://github.com/constverum/stylelint-config-rational-order) | Stylelint config that sorts related property declarations by grouping together in the rational order. |
npm package: @fengkx/tree-sitter-beancount
Description: a tree-sitter parser for the beancount syntax
Author: Brian Ryall
Latest version: 0.0.1

# tree-sitter-beancount
a [tree-sitter](https://github.com/tree-sitter/tree-sitter) parser for the [beancount](https://github.com/beancount/beancount) syntax

## Reference
[Beancount syntax](https://beancount.github.io/docs/beancount_language_syntax.html)
[tree-sitter](https://tree-sitter.github.io)
npm package: @fengkx/tsconfig
Description: Shared TypeScript cofniguration
Author: fengkx
Latest version: 2.0.0

# tsconfig
Shared tsconfig for quick bootstrap and references

## Usage

```
npm i -D @fengkx/tsconfig
```

```jsonc filename=tsconfig.json
{
    "extends": "@fengkx/tsconfig"
}
``````
npm package: @fengkx/zstd-napi
Description: zstd by napi-rs
Latest version: 0.1.0

# `zstd-napi`

![https://github.com/napi-rs/package-template/actions](https://github.com/napi-rs/package-template/workflows/CI/badge.svg)

> zstd-rs(async_compression) binding for Node.js

## Install this test package

```
pnpm add @fengkx/zstd-napi
yarn add @fengkx/zstd-napi
npm i @fengkx/zstd-napi
```

## Support matrix

### Operating Systems

|                  | node12 | node14 | node16 |
| ---------------- | ------ | ------ | ------ |
| Windows x64      | ✓      | ✓      | ✓      |
| Windows x32      | ✓      | ✓      | ✓      |
| Windows arm64    | ✓      | ✓      | ✓      |
| macOS x64        | ✓      | ✓      | ✓      |
| macOS arm64      | ✓      | ✓      | ✓      |
| Linux x64 gnu    | ✓      | ✓      | ✓      |
| Linux x64 musl   | ✓      | ✓      | ✓      |
| Linux arm gnu    | ✓      | ✓      | ✓      |
| Linux arm64 gnu  | ✓      | ✓      | ✓      |
| Linux arm64 musl | ✓      | ✓      | ✓      |
| Android arm64    | ✓      | ✓      | ✓      |
| Android armv7    | ✓      | ✓      | ✓      |
| FreeBSD x64      | ✓      | ✓      | ✓      |

# API

```typescript
export function compress(input: string | Buffer): Promise<Buffer>
export function decompress(input: string | Buffer): Promise<Buffer>
```

# Performance

```
Running "compress" suite...
Progress: 100%

  Native zstd:
    793 ops/s, ±3.07%   | fastest

  Node.js gzip:
    13 ops/s, ±0.81%    | slowest, 98.36% slower

  Node.js deflate:
    20 ops/s, ±10.36%    | 97.48% slower

Finished 3 cases!
  Fastest: Native zstd
  Slowest: Node.js gzip
Running "decompress" suite...
Progress: 100%

  Native zstd:
    1 071 ops/s, ±2.37%   | fastest

  Node.js gzip:
    402 ops/s, ±2.89%     | 62.46% slower

  Node.js deflate:
    394 ops/s, ±2.23%     | slowest, 63.21% slower

Finished 3 cases!
  Fastest: Native zstd
  Slowest: Node.js deflate
Done in 36.14s.
```
npm package: @fengkx/zstd-napi-linux-arm-gnueabihf
Description: zstd by napi-rs
Latest version: 0.1.0

# `@fengkx/zstd-napi-linux-arm-gnueabihf`

This is the **armv7-unknown-linux-gnueabihf** binary for `@fengkx/zstd-napi`