open-index/open-npm huggingface dataset:
npm package: @feiyuwang/skills-installer
Description: Interactive installer for LearnItHard AI agent skills
Author: LearnItHard
Latest version: 1.0.0

# LearnItHard Skills Installer

Interactive CLI tool to install and manage LearnItHard skills for Claude Code, OpenCode, Codex, and Cursor.

## Usage

### One-line install (no need to clone)

```bash
npx @learnithard/skills-installer
```

This will:
1. Auto-detect your installed AI agents
2. Show interactive menu
3. Install selected skills to all detected agents

## Features

- 🔍 **Auto-detect** Claude Code, OpenCode, Codex, Cursor
- 📦 **Install** specific skills or full pack
- 🗑️ **Uninstall** skills
- 🔄 **Update** all skills
- 📋 **List** available skills

## Available Skills

| Skill | Description |
|-------|-------------|
| `mineru-converter` | Document conversion using MinerU API |
| `skills-manager` | CLI tool to manage AI agent skills |

## How it works

1. Detects which AI agents you have installed
2. Clones the Skills-building repo to temp
3. Copies skill files to each agent's skills directory:
   - Claude Code: `~/.claude/skills/`
   - OpenCode: `~/.config/opencode/skill/`
   - Codex: `~/.codex/skills/`
   - Cursor: `~/.cursor/skills/`

## Development

```bash
# Clone repo
git clone https://github.com/LearnItHard/Skills-building.git
cd Skills-building/npm-installer

# Install dependencies
npm install

# Run locally
npm start
```

## Publishing to npm

```bash
# Login to npm
npm login

# Publish (must bump version first)
npm version patch
npm publish --access public
```

## License

MIT
npm package: @feizheng/archiver-webpack-plugin
Description: Archiver webpack plugin.
Author: afei
Latest version: 1.0.0

# archiver-webpack-plugin
> Archiver webpack plugin.

## installation
```shell
npm install -D @feizheng/archiver-webpack-plugin
```

## usage
```js
import ArchiverWebpackPlugin from 'archiver-webpack-plugin';

// plugins:
plugiins:[
  new ArchiverWebapckPlugin({
    transform: function (inValue) {
      return 'app/' + inValue;
    },
    output: function (inPath, inExt) {
      return inPath.replace('dist', 'dist/app') + inExt;
    }
  })
]
```

## options
| Name          | Type     | Default                                            | Description                          |
|:--------------|:---------|:---------------------------------------------------|:-------------------------------------|
| format        | String   | tar                                                | archiver format options              |
| formatOptions | Object   | { gzip: true, zlib: { level: 9 } }                 | archiver options                     |
| transform     | Function | function (inValue) { return inValue}               | `replace` to transform package path. |
| output        | Function | function (inPath, inExt) { return inPath + inExt } | `replace` to output package path.    |
| ext           | String   | .tar.gz                                            | Package extention                    |


## resources
- https://github.com/Seldszar/archiver-webpack-plugin
- https://archiverjs.com/docs/#quick-start
npm package: @feizheng/check-modules
Description: Check node modules or log to user.
Author: afei
Latest version: 1.0.4

<p align="center">
  <a href="https://github.com/afeiship/check-modules">
    <img width="880" src="https://tva1.sinaimg.cn/large/006tNbRwly1ga6lp3ot8vj30oy078jsg.jpg">
  </a>
</p>

# check-modules
> Check node modules or log to user.

## installation
```shell
npm install -S @feizheng/check-modules
```

## usage
```js
var checkModules = require('check-modules');

var res = checkModules(['gulp','react','react-dom','@feizheng/react-ant-tree']);

// true
// false with warning
```
npm package: @feizheng/dns-prefetch-webpack-plugin
Description: Dns prefetch webpack plugin.
Author: feizheng
Latest version: 1.0.0

# dns-prefetch-webpack-plugin
> Dns prefetch webpack plugin.

## installation
```bash
npm install @feizheng/dns-prefetch-webpack-plugin
```

## usage
```js
new DnsPrefetchWebpackPlugin({
  items:[
    '//www.baidu.com',
    '//img0.baidu.com',
    '//img1.baidu.com'
  ]
})
```
npm package: @feizheng/generator-react-app
Description: Yeoman generator for react app.
Author: afeiship
Latest version: 1.0.2

<p align="center">
  <a href="https://github.com/afeiship/generator-react-app">
    <img width="880" src="http://ww3.sinaimg.cn/large/006tNc79gy1g5m6d2dfwvj31rb0egwmb.jpg">
  </a>
</p>

# generator-react-app
> Yeoman generator for react app.

## installation
```bash
npm install -g yeoman
npm install -g @feizheng/generator-react-app
```

## usage
+ component/module/module-multi/service:
```bash
yo @feizheng/react-app:view
yo @feizheng/react-app:service
yo @feizheng/react-app:mixin
```

## user your own alias
+ alias in mac/linux
+ https://superuser.com/questions/49170/create-an-alias-in-windows-xp

## todo
- [x] Add boilerplate project
- [x] Add .yo-rc.json file for preference
npm package: @feizheng/git-info
Description: Get git infomation.
Author: afei
Latest version: 1.0.0

# git-info
> Get git infomation.


## usage:
```js
var branch = require('@feizheng/git-info').branch;

//exec('git branch | grep \\\*')
//branch();
```

## get current brach:
```bash
# git rev-parse --abbrev-ref HEAD
# git branch | grep '*'
```

## resources:
+ https://github.com/pirelenito/git-revision-webpack-plugin
npm package: @feizheng/github-assistant
Description: Github assistant.
Author: afeiship
Latest version: 1.0.1

# github-assistant
> Github assistant.

## installation
```shell
npm i @feizheng/github-assistant
```

## usage
```js
// @require  https://cdn.jsdelivr.net/npm/@feizheng/github-assistant@1.0.0/dist/index.js
```
npm package: @feizheng/glob-copy
Description: Copy based on globby.
Author: afei
Latest version: 1.0.2

# glob-copy
> Copy based on globby.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```shell
npm install -S @feizheng/glob-copy
```

## usage
```js
import globCopy from '@feizheng/glob-copy';

// code goes here
globCopy.sync([ "*.js", 'dist','!.md' ], 'dist');
```

## resources
- https://github.com/akre54/glob-copy

## license
Code released under [the MIT license](./LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@feizheng/glob-copy
[version-url]: https://npmjs.org/package/@feizheng/glob-copy

[license-image]: https://img.shields.io/npm/l/@feizheng/glob-copy
[license-url]: https://github.com/afeiship/glob-copy/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@feizheng/glob-copy
[size-url]: https://github.com/afeiship/glob-copy/blob/master/dist/glob-copy.min.js

[download-image]: https://img.shields.io/npm/dm/@feizheng/glob-copy
[download-url]: https://www.npmjs.com/package/@feizheng/glob-copy
npm package: @feizheng/glob-rename
Description: Rename based on globby.
Author: afei
Latest version: 1.0.1

# glob-rename
> Rename based on globby.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```shell
npm install -S @feizheng/glob-rename
```

## usage
```js
import globRename from '@feizheng/glob-rename';

globRename.sync(['**/*.js'], 'dist', (path)=>{
  path.ext = path.ext.replace('js', 'jsx');
})
```

## license
Code released under [the MIT license](./LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@feizheng/glob-rename
[version-url]: https://npmjs.org/package/@feizheng/glob-rename

[license-image]: https://img.shields.io/npm/l/@feizheng/glob-rename
[license-url]: https://github.com/afeiship/glob-rename/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@feizheng/glob-rename
[size-url]: https://github.com/afeiship/glob-rename/blob/master/dist/glob-rename.min.js

[download-image]: https://img.shields.io/npm/dm/@feizheng/glob-rename
[download-url]: https://www.npmjs.com/package/@feizheng/glob-rename
npm package: @feizheng/gm-assistant
Description: Tampermonkey assistant.
Author: afeiship
Latest version: 1.0.1

<p align="center">
  <img src="https://tva1.sinaimg.cn/large/007S8ZIlgy1ggl0vbsvh5j312g0i2wh2.jpg" width="400">
</p>

# gm-assistant
> Tampermonkey assistant.

## installation
<img width="800" src="https://tva1.sinaimg.cn/large/007S8ZIlgy1ggl0ds8tvej30xp0u0n1d.jpg" />

## features
- [x] 微信110屏蔽的网页下面方便自动打开

## steps
1. 安装 [tampermonkey](https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en-US)
2. 打开 `tampermokey` 的管理面板(Dashboard)
3. 实用工具(tools)
4. Install from URL:
5. 用这个： https://raw.githubusercontent.com/afeiship/gm-assistant/master/dist/install.js
npm package: @feizheng/html-banner-webpack-plugin
Description: Adds a banner to the top of each generated html.
Author: feizheng
Latest version: 1.2.0

<p align="center">
  <img width="400" src="https://tva1.sinaimg.cn/large/006tNc79gy1g21fgm8dz8j30gi0b6mz4.jpg"/>
</p>

---

# html-banner-webpack-plugin
> Adds a banner to the top of each generated html.

## installation
```bash
npm install -D @feizheng/html-banner-webpack-plugin
```

## usage
```js
import HtmlBannerWebpackPlugin from 'html-banner-webpack-plugin';

// ....
plutins:[
  new HtmlBannerWebpackPlugin({
    banner:[
      'NAME: editor-frontend',
      'VERSION: v1.1.5-alpha.6',
      'BUILD_TIME: 4/12/2019, 11:01:20 PM'
    ]
  })
]
// ...
```
npm package: @feizheng/i18n-online-translator
Description: I18n-scanner + online translate.
Author: afei
Latest version: 1.2.1

# i18n-online-translator
> I18n-scanner + online translate.

## installation
```shell
npm install -S @feizheng/i18n-online-translator
```

## options
| api        | type     | default                                 | description                    |
| ---------- | -------- | --------------------------------------- | ------------------------------ |
| context    | String   | ${appRoot}                              | The base path for input/output |
| input      | String   | /assets/locale/original.json            | Original file path             |
| ouput      | String   | /assets/locale/dist                     | Translated folder path         |
| tab        | Number   | 2                                       | JSON format tab                |
| from       | String   | zh                                      | From which language            |
| lang      | Object   | { en: 'en', zh: 'zh_CN', cht: 'zh_TW' } | Translate to languages         |
| filter     | Function | ({ data, config})=>{ return data;}      | Filter the result              |
| apiOptions | Object   | { appid:null, secret:null}              | Baidu fanyi opitons            |

## usage
```js
const i18nOnlineTranslator = require('@feizheng/i18n-online-translator');

i18nOnlineTranslator({
  input: './examples/basic/assets/org.json',
  output: './examples/basic/assets/dist'
});
```

## results
```conf
.
├── assets
│   ├── dist
│   │   ├── en.json
│   │   ├── zh_CN.json
│   │   └── zh_TW.json
│   └── org.json
└── index.js
```
npm package: @feizheng/i18next-online-scanner
Description: I18n-scanner + online translate.
Author: afei
Latest version: 1.2.0

# i18next-online-scanner
> I18n-scanner + online translate.

## installation
```shell
npm install -S @feizheng/i18next-online-scanner
```

## options
| api        | type     | default                                 | description                    |
| ---------- | -------- | --------------------------------------- | ------------------------------ |
| context    | String   | ${appRoot}                              | The base path for input/output |
| input      | String   | /assets/locale/original.json            | Original file path             |
| ouput      | String   | /assets/locale/dist                     | Translated folder path         |
| tab        | Number   | 2                                       | JSON format tab                |
| from       | String   | zh                                      | From which language            |
| langs      | Object   | { en: 'en', zh: 'zh_CN', cht: 'zh_TW' } | Translate to languages         |
| filter     | Function | ({ data, config})=>{ return data;}      | Filter the result              |
| apiOptions | Object   | { appid:null, secret:null}              | Baidu fanyi opitons            |

## usage
```js
const i18nextOnlineScanner = require('@feizheng/i18next-online-scanner');

i18nextOnlineScanner({
  input: './examples/basic/assets/org.json',
  output: './examples/basic/assets/dist'
});
```

## results
```conf
.
├── assets
│   ├── dist
│   │   ├── en.json
│   │   ├── zh_CN.json
│   │   └── zh_TW.json
│   └── org.json
└── index.js
```
npm package: @feizheng/json-server-multiple
Description: Multiple apis support for json server.
Author: feizheng
Latest version: 1.0.1

# json-server-multiple
> Multiple apis support for json server.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]


## installation
```bash
npm i -S @feizheng/json-server-multiple
```

## usage
```javascript
// config.js
import path from 'path';
export const MOUNT_POINT = '/api/v1/';
export const DB_JSON =  path.join(__dirname, './database/db.json');
export const STRINGIFY_INDENT = 2;
export const APIS = path.join(__dirname, './apis');


// app.js
import JsonServer from 'json-server';
import JsonServerMultiple from 'json-server-multiple';

import {
  MOUNT_POINT,
  DB_JSON,
  APIS
} from './config';


// create multiple apis
JsonServerMultiple.create(DB_JSON, APIS);
const server = JsonServer.create();
const router = JsonServer.router(DB_JSON);
const middlewares = JsonServer.defaults();

server.use(middlewares);
server.use(router);
server.use(MOUNT_POINT, router);


server.listen(3001, () => {
  console.log('JSON Server is running')
});

```

## resouces
+　https://github.com/Marak/faker.js


## license
Code released under [the MIT license](https://github.com/afeiship/json-server-multiple/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@feizheng/json-server-multiple
[version-url]: https://npmjs.org/package/@feizheng/json-server-multiple

[license-image]: https://img.shields.io/npm/l/@feizheng/json-server-multiple
[license-url]: https://github.com/afeiship/json-server-multiple/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@feizheng/json-server-multiple
[size-url]: https://github.com/afeiship/json-server-multiple/blob/master/dist/json-server-multiple.min.js

[download-image]: https://img.shields.io/npm/dm/@feizheng/json-server-multiple
[download-url]: https://www.npmjs.com/package/@feizheng/json-server-multiple
npm package: @feizheng/mixin-decorator
Description: A decorator for mixins that doesn&#39;t overwrite existing methods.
Author: feizheng
Latest version: 2.0.2

# mixin-decorator
> A decorator for mixins that doesn&#39;t overwrite existing methods.

## installation
```shell
npm install @feizheng/mixin-decorator --save
```

## usage
- npm install
```javascript
import mixin from '@feizheng/mixin-decorator';

class A{
  static VERSION= '1.0';
  testA(){
    console.log('AAA')
  }
}


class B{
  static NAME ='BBB=NAME';
  testB(){
    console.log('BBB')
  }
}

@mixin(A,B)
class MyClass(){
  static VERSION = '2.0';
  sayHi(){
    console.log('hi');
  }
}

let my =new MyClass();

MyClass.VERSION; //2.0
MyClass.NAME; //BBB=NAME

my.testA(); //AAA
my.testB(); //BBB
```

## support str import for `webpack` project:
```js
//OLD:
module: {
    rules: [
      {
        test: /\.(js|jsx)$/,
        use: ['babel-loader'],
        exclude: /node_modules/,
      },
      //...
    ]
}

//NEW:
module: {
    rules: [
      {
        test: /\.(js|jsx)$/,
        use: ['babel-loader'],
        include: [
          resolve(__dirname, "../src"),
          resolve(__dirname, "../node_modules/mixin-decorator")
        ]
      },
      //...
    ]
}
```

## webpack resolve:(DO NOT USE .babelrc's resolve)
```js
import {resolve, join} from 'path';


resolve: {
  extensions: ['.js', '.json', '.scss', '.css'],
  alias:{
    mixins: resolve(__dirname, '../src/components/mixins')
  }
}
```

## todo list
- [x] add @mixin(['on-chnage',obj ]) for plain object
- [ ] NOT_SUPPORT add @mixin(['on-chnage',':node-module' ]) in npm
- [ ] add unit test

## resources
- https://github.com/webpack/webpack/issues/2031
- https://github.com/mbasso/react-decoration
- https://github.com/jayphelps/core-decorators
npm package: @feizheng/next-absolute-package
Description: Get root path package.json.
Author: afei
Latest version: 1.0.6

# next-absolute-package
> Get root path package.json.

## installation
```bash
npm install -S @feizheng/next-absolute-package
```

## usage
```js
import '@feizheng/next-absolute-package';

nx.absolutePackage(); // { ...the whole package.json ... }
nx.absolutePackage('publishConfig.registry'); // https://registry.npmjs.org/
```
npm package: @feizheng/next-abstract-configuration
Description: Abstract configuration.
Author: afei
Latest version: 1.2.4

# next-abstract-configuration
> Abstract configuration.

## installation
```bash
npm install -S @feizheng/next-abstract-configuration
```

## apis
| api    | params       | description              |
| ------ | ------------ | ------------------------ |
| get    | path         | Get value from path      |
| gets   | -            | Get all values.          |
| set    | (path,value) | Set value by path.       |
| sets   | object       | Set multi value by path. |
| update | ojbect       | Set value and save.      |
| save   | -            | Save to path.            |


## usage
```js
import NxAbstractConfiguration from '@feizheng/next-abstract-configuration';

// code goes here:
const conf = new NxAbstractConfiguration();
conf.set('name','@feizheng/next-abstract-configuration');
conf.get('scirpts.build','gulp');
conf.sets({ name: 'fei', age: 100});
conf.gets();
```

## implements
- https://github.com/afeiship/next-json-configuration
- https://github.com/afeiship/next-yaml-configuration
npm package: @feizheng/next-abstract-storage
Description: An abstract storage based on next.
Author: afei
Latest version: 2.1.0

# next-abstract-storage
> An abstract storage based on next.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```bash
npm install -S @feizheng/next-abstract-storage
```

## apis
| api   | args        | description              |
| ----- | ----------- | ------------------------ |
| get   | key         | Get value by key.        |
| gets  | [key1,key2] | Get values by keys.      |
| set   | key,value   | Set key/value.           |
| sets  | obj         | Set multiple key/values. |
| del   | key         | Delete value by key.     |
| dels  | [key1,key2] | Delete multiple values.  |
| clear | -           | Clear the store.         |

## implementation:
- [next-local-storage](https://github.com/afeiship/next-local-storage)
- [next-session-storage](https://github.com/afeiship/next-session-storage)
- [next-weapp-storage](https://github.com/afeiship/next-weapp-storage)

## usage
```js
var _local = new nx.AbstractStorage({
  engine: localStorage,
  prefix: 'my'
});
_local.set('test1', 'test1Value');
_local.sets({
  fei: 'test',
  age: 108,
  items: [
    {
      son: 'feifei',
      age: 0
    }
  ]
});

document.querySelector('#all').innerHTML = JSON.stringify(
  _local.gets(),
  null,
  2
);

document.querySelector('#somekeys').innerHTML = JSON.stringify(
  _local.gets(['fei', 'age']),
  null,
  2
);

document.querySelector('#btn2').onclick = function() {
  _local.empty();
  document.querySelector('#cleard').innerHTML = 'ALL HAS EMPTY!';
};

console.log(_local.get('test1'));
console.log(_local.gets());
console.log(_local.gets(['fei', 'age']));
```

## resources
- https://www.npmjs.com/package/jest-localstorage-mock
- https://stackoverflow.com/questions/11485420/how-to-mock-localstorage-in-javascript-unit-tests

## license
Code released under [the MIT license](https://github.com/afeiship/next-abstract-storage/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@feizheng/next-abstract-storage
[version-url]: https://npmjs.org/package/@feizheng/next-abstract-storage

[license-image]: https://img.shields.io/npm/l/@feizheng/next-abstract-storage
[license-url]: https://github.com/afeiship/next-abstract-storage/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@feizheng/next-abstract-storage
[size-url]: https://github.com/afeiship/next-abstract-storage/blob/master/dist/next-abstract-storage.min.js

[download-image]: https://img.shields.io/npm/dm/@feizheng/next-abstract-storage
[download-url]: https://www.npmjs.com/package/@feizheng/next-abstract-storage
npm package: @feizheng/next-active-value
Description: Get active element value.
Author: afei
Latest version: 1.0.0

# next-active-value
> Get active element value.

## installation
```bash
npm install -S @feizheng/next-active-value
```

## usage
```js
import '@feizheng/next-active-value';

//DOCS here!
```
npm package: @feizheng/next-alert
Description: Alert for debug detect platform.
Author: afei
Latest version: 1.0.1

# next-alert
> Alert for debug detect platform.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```bash
npm install -S @feizheng/next-alert
```

## usage
```js
import '@feizheng/next-alert';

nx.alert(1,2,3);
nx.alert({ github: 'afeiship', sayHi: 'hello' }, { slogan: 'Are you ok?' });
```

## license
Code released under [the MIT license](https://github.com/afeiship/next-alert/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@feizheng/next-alert
[version-url]: https://npmjs.org/package/@feizheng/next-alert

[license-image]: https://img.shields.io/npm/l/@feizheng/next-alert
[license-url]: https://github.com/afeiship/next-alert/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@feizheng/next-alert
[size-url]: https://github.com/afeiship/next-alert/blob/master/dist/next-alert.min.js

[download-image]: https://img.shields.io/npm/dm/@feizheng/next-alert
[download-url]: https://www.npmjs.com/package/@feizheng/next-alert
npm package: @feizheng/next-ant-column
Description: Ant table coumn for next.
Author: afei
Latest version: 1.0.0

# next-ant-column
> Ant table coumn for next.

## installation
```bash
npm install -S @feizheng/next-ant-column
```

## usage
```js
import '@feizheng/next-ant-column';

get fields() {
  return [
    nx.antColumn('ID', 'id'),
    nx.antColumn('用户名', 'username'),
  ]
}
```
npm package: @feizheng/next-aop
Description: Aop for next.
Author: afei
Latest version: 1.0.0

# next-aop
> Aop for next.

## installation
```bash
npm install -S @feizheng/next-aop
```

## usage
```js
import '@feizheng/next-aop';

console.log = nx.aop(console.log, {
  before: function (oldConsole) {
    oldConsole('=--before--=');
  },
  after: function (oldConsole) {
    oldConsole('=--after--=');
  },
});

// test：
console.log('---abc---');

// =--before--=
// ---abc---
// =--after--=
```
npm package: @feizheng/next-array-replace
Description: Multiple replace for array.
Author: afei
Latest version: 1.0.2

# next-array-replace
> Multiple replace for array.

## installation
```bash
npm install -S @feizheng/next-array-replace
```

## usage
```js
import '@feizheng/next-array-replace';

const arr= [
  [/a/g,'A'],
  ['hello','world']
];
const str = 'aaa-bbb-1234 hello Fei!';
const res = nx.arrayReplace( str, arr);

// AAA-bbb-1234 world Fei!
```
npm package: @feizheng/next-arrayify
Description: Simpliy to array.
Author: afei
Latest version: 1.0.0

# next-arrayify
> Simpliy to array.

## installation
```bash
npm install -S @feizheng/next-arrayify
```

## usage
```js
import '@feizheng/next-arrayify';

nx.arrayify(null);      //[]
nx.arrayify(undefined); //[]
nx.arrayify([1,2,3])    //[1,2,3]
```
npm package: @feizheng/next-async-queue
Description: Async queue for next.
Author: afei
Latest version: 1.0.2

# next-async-queue
> Async queue for next.

## installation
```bash
npm install -S @feizheng/next-async-queue
```

## apis
| api    | params    | description                           |
| ------ | --------- | ------------------------------------- |
| run    | items     | Run a list of async functions         |
| repeat | fn, count | Get a repeat functions                |
| wrap   | [fn,fn]   | Wrap an list of functions to runnable |

## status
| status | name | code | description                   |
| ------ | ---- | ---- | ----------------------------- |
| LOAD   | load | 1    | Status when task is running   |
| DONE   | done | 0    | Status when all task has done |

## usage
```js
import NxAsyncQueue from '@feizheng/next-async-queue';

var fn1 = function(next){
  setTimeout(function(){
    console.log(123,'1s');
    next({ result: 1});
  },1000);
};

var fn2 = function(next){
  setTimeout(function(){
    console.log(456,'2s');
    next({ result: 2});
  },1000);
};

var fn3 = function(next){
  setTimeout(function(){
    console.log(789,'3s');
    next({ result: 3});
  },1000);
};

NxAsyncQueue.run(fn1, fn2, fn3).then((res) => {
  console.log(res);
});

// results:
// 123 1s
// 456 2s
// 789 3s
// [ { result: 1 }, { result: 2 }, { result: 3 } ]
```
npm package: @feizheng/next-audio-manager
Description: Audio manager.
Author: afei
Latest version: 1.0.6

# next-audio-manager
> Audio manager.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```bash
npm install -S @feizheng/next-audio-manager
```

## apis
| api      | params | description                   |
| -------- | ------ | ----------------------------- |
| create   | -      | Create one/multiple instance. |
| method   | -      | Call context method.          |
| property | -      | Call context property.        |

## usage
```js
import NxAudioManager from '@feizheng/next-audio-manager';

// ======= multiple =======
NxAudioManager.create([
  { key: 'k1', src: 'https://file-examples.com/wp-content/uploads/2017/11/file_example_MP3_700KB.mp3' },
  { key: 'k2', src: 'https://kolber.github.io/audiojs/demos/mp3/juicy.mp3' }
]);

// stop all audios:
NxAudioManager.method('play');



// ======= single =======
const audio = NxAudioManager.create({ 
  standalone: true,
  src: 'https://file-examples.com/wp-content/uploads/2017/11/file_example_MP3_700KB.mp3' 
});

audio.method('play');
```

## license
Code released under [the MIT license](https://github.com/afeiship/next-audio-manager/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@feizheng/next-audio-manager
[version-url]: https://npmjs.org/package/@feizheng/next-audio-manager

[license-image]: https://img.shields.io/npm/l/@feizheng/next-audio-manager
[license-url]: https://github.com/afeiship/next-audio-manager/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@feizheng/next-audio-manager
[size-url]: https://github.com/afeiship/next-audio-manager/blob/master/dist/next-audio-manager.min.js

[download-image]: https://img.shields.io/npm/dm/@feizheng/next-audio-manager
[download-url]: https://www.npmjs.com/package/@feizheng/next-audio-manager
npm package: @feizheng/next-axios
Description: Axios common features based on next toolkit.
Author: afei
Latest version: 3.0.0

# next-axios
> Axios common features based on next toolkit.

## install
```bash
npm install -S @feizheng/next-axios
```

## apis
| api | params | description   |
|-----|--------|---------------|
| get | -      | desc balabala |

## usage
```js
import NxAxios from '@feizheng/next-axios';

// code goes here:
```

## react-native: info.plist
```xml
<!-- Networking config -->
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>localhost</key>
        <dict>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>
```

## resources:
- https://github.com/mzabriskie/axios
- http://codeheaven.io/how-to-use-axios-as-your-http-client/
- https://github.com/kriskowal/q
- https://github.com/ohhoney1/notes/issues/3
- https://medium.com/@selvaganesh93/how-to-clean-up-subscriptions-in-react-components-using-abortcontroller-72335f19b6f7

## todos:
- [ ] next-axios transformParam: when get/post/ and different API name
- [ ] transformParam: remove nx.param default
- [ ] response/request Class for input/output data wrapper.
- [ ] cacnel request

## fetch cancel/abort
<img width="500" src="http://ww1.sinaimg.cn/large/006tNc79ly1g59wi17khgj312w0sygp9.jpg" />
npm package: @feizheng/next-baidu-fanyi
Description: Baidu fangyi api wrapper.
Author: afei
Latest version: 1.2.2

# next-baidu-fanyi
> Baidu fangyi api wrapper.

## installation
```bash
npm install -S @feizheng/next-baidu-fanyi
```

## apis
| api       | params | description     |
| --------- | ------ | --------------- |
| translate | -      | Get translation |


## options
| name   | default | description         |
| ------ | ------- | ------------------- |
| delay  | 1000    | Call fn duration.   |
| from   | zh      | from which language |
| to     | en      | to which language   |
| appid  | -       | -                   |
| secret | -       | -                   |
| q      | -       | keywords            |

## usage
```js
import NxBaiduFanyi from '@feizheng/next-baidu-fanyi';

// code goes here:
NxBaiduFanyi.translate({ q: '苹果', from:'zh', to:'en' }).then((res) => {
  /*
  // res:
  {
    from: 'zh',
    to: 'en',
    trans_result: [{ src: '苹果', dst: 'Apple' }]
  }
  */
});
```

## resources
- https://api.fanyi.baidu.com/doc/21
npm package: @feizheng/next-baidu-pan-url-key
Description: Get baidu pan url and key.
Author: afei
Latest version: 1.0.1

# next-baidu-pan-url-key
> Get baidu pan url and key.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```bash
npm install -S @feizheng/next-baidu-pan-url-key
```

## usage
```js
import '@feizheng/next-baidu-pan-url-key';

var str1 = "链接:https://pan.baidu.com/s/1zNVdo1cpsYYbWM7YTb0EvQ  密码:mdxe";
var str2 = "链接: https://pan.baidu.com/s/1W0VYRMHcHA4IKK2Cd8a2VA 提取码: t2nu";


nx.baiduPanUrlKey(str1);
nx.baiduPanUrlKey(str2;

// results
{ url: 'https://pan.baidu.com/s/1W0VYRMHcHA4IKK2Cd8a2VA', key: 't2nu' }
{ url: 'https://pan.baidu.com/s/1zNVdo1cpsYYbWM7YTb0EvQ', key: 'mdxe' }
```

## license
Code released under [the MIT license](https://github.com/afeiship/next-baidu-pan-url-key/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@feizheng/next-baidu-pan-url-key
[version-url]: https://npmjs.org/package/@feizheng/next-baidu-pan-url-key

[license-image]: https://img.shields.io/npm/l/@feizheng/next-baidu-pan-url-key
[license-url]: https://github.com/afeiship/next-baidu-pan-url-key/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@feizheng/next-baidu-pan-url-key
[size-url]: https://github.com/afeiship/next-baidu-pan-url-key/blob/master/dist/next-baidu-pan-url-key.min.js

[download-image]: https://img.shields.io/npm/dw/@feizheng/next-baidu-pan-url-key
[download-url]: https://www.npmjs.com/package/@feizheng/next-baidu-pan-url-key
npm package: @feizheng/next-blob2base64
Description: Blob to base64.
Author: afei
Latest version: 1.0.0

# next-blob2base64
> Blob to base64.

## installation
```bash
npm install -S @feizheng/next-blob2base64
```

## usage
```js
import '@feizheng/next-blob2base64';

//DOCS here!
```
npm package: @feizheng/next-chunk
Description: Creates an array of elements split into groups the length of size.
Author: afei
Latest version: 1.0.0

# next-chunk
> Creates an array of elements split into groups the length of size.

## installation
```bash
npm install -S @feizheng/next-chunk
```

## apis
| api      | type              | description         |
| -------- | ----------------- | ------------------- |
| nx.chunk | (inArray,inChunk) | Create split chunks |

## usage
```js
import '@feizheng/next-chunk';

const arr = [1,2,3,4,5,6,7,8];
const res = nx.chunk(arr, 3);

/*
  [ 
    [ 1, 2, 3 ], 
    [ 4, 5, 6 ], 
    [ 7, 8 ] 
  ]
*/
```
npm package: @feizheng/next-classify
Description: Converts string to camelized class name First letter is always upper case.
Author: afei
Latest version: 1.0.0

# next-classify
> Converts string to camelized class name First letter is always upper case.

## installation
```bash
npm install -S @feizheng/next-classify
```

## usage
```js
var str1 = 'font-size';
var str2 = 'fontSize';
var str3 = '_font-size';
var str4 = '_font_size';
var str5 = '_font-size';

nx.classify(str1);
// FontSize 

```
npm package: @feizheng/next-compact
Description: Returns a copy of the array/object with all falsy values removed.
Author: afei
Latest version: 1.0.0

# next-compact
> Returns a copy of the array/object with all falsy values removed.

## installation
```bash
npm install -S @feizheng/next-compact
```

## usage
```js
import '@feizheng/next-compact';

var arr1 = [0, 1, false, 2, '', 3];
var obj = {
  name: 'fei',
  age: 0,
  test: 12,
  ni: null,
  tes2: undefined
};

var result1 = nx.compact(arr);
var result2 = nx.compact(obj);
// [1, 2, 3]
// { name: 'fei', test: 12 }
```
npm package: @feizheng/next-compose
Description: Compose for next.
Author: afei
Latest version: 1.0.0

# next-compose
> Compose for next.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```bash
npm install -S @feizheng/next-compose
```

## usage
```js
import '@feizheng/next-compose';

const fn1 = function (inStr) {
  return inStr.toUpperCase();
};

const fn2 = function (inStr) {
  return ['{', inStr, '}'].join('');
};

const fn3 = function (inStr){
  return '@' + inStr;
}

const cp = nx.compose(fn1, fn2, fn3);
const cp2 = nx.compose(fn3, fn2, fn1);

const rs = cp('afei');
// @{AFEI}

const rs2 = cp2('afei');
// {@AFEI}
```

## license
Code released under [the MIT license](https://github.com/afeiship/next-compose/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@feizheng/next-compose
[version-url]: https://npmjs.org/package/@feizheng/next-compose

[license-image]: https://img.shields.io/npm/l/@feizheng/next-compose
[license-url]: https://github.com/afeiship/next-compose/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@feizheng/next-compose
[size-url]: https://github.com/afeiship/next-compose/blob/master/dist/next-compose.min.js

[download-image]: https://img.shields.io/npm/dw/@feizheng/next-compose
[download-url]: https://www.npmjs.com/package/@feizheng/next-compose
npm package: @feizheng/next-configuration
Description: Json configuration for next.
Author: afei
Latest version: 1.0.0

# next-configuration
> Json configuration for next.

## installation
```bash
npm install -S @feizheng/next-configuration
```

## apis
| api | params | description   |
|-----|--------|---------------|
| get | -      | desc balabala |

## usage
```js
import NxConfiguration from '@feizheng/next-configuration';

// code goes here:
```
npm package: @feizheng/next-const-adjective
Description: A lot of adjective.
Author: afei
Latest version: 1.0.0

# next-const-adjective
> A lot of adjective.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```bash
npm install -S @feizheng/next-const-adjective
```

## usage
```js
import '@feizheng/next-const-adjective';

const adjs = nx.onstAdjective;  // ['xxx','yy'];
```

## license
Code released under [the MIT license](https://github.com/afeiship/next-const-adjective/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@feizheng/next-const-adjective
[version-url]: https://npmjs.org/package/@feizheng/next-const-adjective

[license-image]: https://img.shields.io/npm/l/@feizheng/next-const-adjective
[license-url]: https://github.com/afeiship/next-const-adjective/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@feizheng/next-const-adjective
[size-url]: https://github.com/afeiship/next-const-adjective/blob/master/dist/next-const-adjective.min.js

[download-image]: https://img.shields.io/npm/dm/@feizheng/next-const-adjective
[download-url]: https://www.npmjs.com/package/@feizheng/next-const-adjective
npm package: @feizheng/next-const-noun
Description: A lots of noun.
Author: afei
Latest version: 1.0.0

# next-const-noun
> A lots of noun.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```bash
npm install -S @feizheng/next-const-noun
```

## usage
```js
import '@feizheng/next-const-noun';

//DOCS here!
```

## license
Code released under [the MIT license](https://github.com/afeiship/next-const-noun/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@feizheng/next-const-noun
[version-url]: https://npmjs.org/package/@feizheng/next-const-noun

[license-image]: https://img.shields.io/npm/l/@feizheng/next-const-noun
[license-url]: https://github.com/afeiship/next-const-noun/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@feizheng/next-const-noun
[size-url]: https://github.com/afeiship/next-const-noun/blob/master/dist/next-const-noun.min.js

[download-image]: https://img.shields.io/npm/dm/@feizheng/next-const-noun
[download-url]: https://www.npmjs.com/package/@feizheng/next-const-noun
npm package: @feizheng/next-content-type
Description: Content type for next.
Author: afei
Latest version: 1.1.4

# next-content-type
> Content type for next.

## installation
```bash
npm install -S @feizheng/next-content-type
```

## usage
```js
import '@feizheng/next-content-type';

nx.contentType('urlencoded'); 
// application/x-www-form-urlencoded

nx.contentType('multipart'); 
// multipart/form-data

nx.contentType('json'); 
// application/json;charset=utf-8

nx.contentType('plain'); 
// text/plain

nx.contentType('raw'); 
nx.contentType('unsupported'); 
// application/x-www-form-urlencoded
```
npm package: @feizheng/next-cookie
Description: A simple, lightweight JavaScript API for handling browser cookies for next.
Author: afei
Latest version: 1.0.3

# next-cookie
> A simple, lightweight JavaScript API for handling browser cookies for next.

## installation
```bash
npm install -S @feizheng/next-cookie
```


## apis
| api   | params                  | description                                       |
| ----- | ----------------------- | ------------------------------------------------- |
| get   | inKey                   | get single key cookey                             |
| gets  | -                       | get all key cookey                                |
| set   | inKey,inValue,inOptions | set cookie with options({ path:'/', expires: ''}) |
| sets  | inObject,inOptions      | set cookie with object;                           |
| del   | inKey                   | del the key                                       |
| dels  | inArray                 | del keys                                          |
| clear | -                       | del all cookies                                   |

## usage
```js
import NxCookie from '@feizheng/next-cookie';

// code goes here:
NxCookie.get
NxCookie.gets
NxCookie.set
NxCookie.sets
NxCookie.del
NxCookie.dels
NxCookie.clear
```

## resources
- https://github.com/js-cookie/js-cookie
- http://www.w3school.com.cn/js/js_cookies.asp
- https://stackoverflow.com/que
npm package: @feizheng/next-data-transform
Description: Data transform for next.
Author: afei
Latest version: 1.1.2

# next-data-transform
> Data transform for next.

## installation
```bash
npm install -S @feizheng/next-data-transform
```

## apis
| api        | params | description                       |
| ---------- | ------ | --------------------------------- |
| json       | -      | application/json;charset=utf-8    |
| urlencoded | -      | application/x-www-form-urlencoded |
| multipart  | -      | multipart/form-data               |

## usage
```js
import NxDataTransform from '@feizheng/next-data-transform';

// code goes here:
```
npm package: @feizheng/next-date
Description: Enhanced date for next.
Author: afei
Latest version: 1.1.3

# next-date
> Enhanced date for next.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```bash
npm install -S @feizheng/next-date
```

## apis
| api            | params | description           |
| -------------- | ------ | --------------------- |
| now            | -      | Get timestamp.        |
| create         | -      | Create data instance. |
| compare        | -      | Compare data.         |
| format         | -      | Format date.          |
| timezoneOffset | -      | Get timezone offset.  |

## usage
```js
import NxDate from '@feizheng/next-date';

//1. Timestamp:
NxDate.now();

//2. Get date instance:
NxDate.create() 
NxDate.create('2018-07-01 16:29:49');

//3. Compare:
NxDate.compare('2018-07-01 16:30:14','2018-07-01 16:30:19')
// -1 | 0 | 1

//4. format:
NxDate.format(inTarget,'yyyy-mm-dd HH:MM:ss');

// 5. timezone offset
NxDate.timezoneOffset();
```

## resources
- https://github.com/felixge/node-dateformat

## license
Code released under [the MIT license](https://github.com/afeiship/next-date/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@feizheng/next-date
[version-url]: https://npmjs.org/package/@feizheng/next-date

[license-image]: https://img.shields.io/npm/l/@feizheng/next-date
[license-url]: https://github.com/afeiship/next-date/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@feizheng/next-date
[size-url]: https://github.com/afeiship/next-date/blob/master/dist/next-date.min.js

[download-image]: https://img.shields.io/npm/dm/@feizheng/next-date
[download-url]: https://www.npmjs.com/package/@feizheng/next-date
npm package: @feizheng/next-day-of-year
Description: Javascript calculate the day of the year (1 - 366).
Author: afei
Latest version: 1.0.0

# next-day-of-year
> Javascript calculate the day of the year (1 - 366).

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```bash
npm install -S @feizheng/next-day-of-year
```

## usage
```js
import '@feizheng/next-day-of-year';

const day1 = new Date('2020-01-01');  // 1
const day2 = new Date('2020-02-01');  // 32
```

## resources
- https://stackoverflow.com/questions/8619879/javascript-calculate-the-day-of-the-year-1-366

## license
Code released under [the MIT license](https://github.com/afeiship/next-day-of-year/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@feizheng/next-day-of-year
[version-url]: https://npmjs.org/package/@feizheng/next-day-of-year

[license-image]: https://img.shields.io/npm/l/@feizheng/next-day-of-year
[license-url]: https://github.com/afeiship/next-day-of-year/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@feizheng/next-day-of-year
[size-url]: https://github.com/afeiship/next-day-of-year/blob/master/dist/next-day-of-year.min.js

[download-image]: https://img.shields.io/npm/dm/@feizheng/next-day-of-year
[download-url]: https://www.npmjs.com/package/@feizheng/next-day-of-year
npm package: @feizheng/next-dd-promisfy
Description: Promisfy for dingtalk.
Author: afei
Latest version: 1.0.4

# next-dd-promisfy
> Promisfy for dingtalk.

## installation
```bash
npm install -S @feizheng/next-dd-promisfy
```

## usage
```js
import '@feizheng/next-dd-promisfy';

const getPhoneInfo = nx.ddPromisfy(dd.device.base.getPhoneInfo, { context: dd.device.base });

// call the promisfy function
getPhoneInfo()
  .then(res=>{
    console.log(res);
  }).catch(err=>{
    console.log(err);
  });
```

## resources
- http://bluebirdjs.com/docs/api/promise.promisify.html
npm package: @feizheng/next-dd-promisfy-all
Description: Promisifies the entire object for next.
Author: afei
Latest version: 1.0.0

# next-dd-promisfy-all
> Promisifies the entire object for next.

## installation
```bash
npm install -S @feizheng/next-dd-promisfy-all
```

## usage
```js
import '@feizheng/next-dd-promisfy-all';

//DOCS here!
```

## resources
- http://bluebirdjs.com/docs/api/promise.promisifyall.html
npm package: @feizheng/next-deep-assign
Description: Deep assign for next.
Author: afei
Latest version: 1.2.3

# next-deep-assign
> Deep assign for next.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```bash
npm install -S @feizheng/next-deep-assign
```

## usage
```js
import '@feizheng/next-deep-assign';

const obj1 = {
  lineHeight: 26,
  left: 'center',
  style: {
    items: ['a'],
    fontSize: 24,
    fill: '#333',
    fontWeight: 500
  }
};

const obj2 = {
  lineHeight: 100,
  left: null,
  style: {
    items: [1, 2, 3],
    fontFamily: 'Arial'
  }
};

const result = nx.deepAssign(obj1, obj2);

// result
{
  lineHeight: 100,
  left: null,
  style: {
    items: [1, 2, 3],
    fontSize: 24,
    fill: '#333',
    fontWeight: 500,
    fontFamily: 'Arial'
  }
}
```

## license
Code released under [the MIT license](https://github.com/afeiship/next-deep-assign/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@feizheng/next-deep-assign
[version-url]: https://npmjs.org/package/@feizheng/next-deep-assign

[license-image]: https://img.shields.io/npm/l/@feizheng/next-deep-assign
[license-url]: https://github.com/afeiship/next-deep-assign/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@feizheng/next-deep-assign
[size-url]: https://github.com/afeiship/next-deep-assign/blob/master/dist/next-deep-assign.min.js

[download-image]: https://img.shields.io/npm/dm/@feizheng/next-deep-assign
[download-url]: https://www.npmjs.com/package/@feizheng/next-deep-assign
npm package: @feizheng/next-deep-clone
Description: A fastest deep clone implement.
Author: afei
Latest version: 1.0.3

# next-deep-clone
> A fastest deep clone implement.

## installation
```bash
npm install -S @feizheng/next-deep-clone
```

## usage
```js
import '@feizheng/next-deep-clone';

//DOCS here!
```
npm package: @feizheng/next-deep-each
Description: Deep each for next.
Author: afei
Latest version: 1.0.4

# next-deep-each
> Deep each for next.

[![version][version-image]][version-url]
[![license][license-image]][license-url]
[![size][size-image]][size-url]
[![download][download-image]][download-url]

## installation
```bash
npm install -S @feizheng/next-deep-each
```

## usage
```js
import '@feizheng/next-deep-each';

const obj = {
  name: 'deep-each',
  items: [
    {
      name: 'each',
      type: 'any'
    },
    {
      name: 'forEach',
      type: 'array'
    },
    {
      name: 'forIn',
      type: 'object'
    }
  ],
  other: {
    a: {
      b: 1,
      c: {
        d: 2,
        e: 4,
        g: {
          g1: 1,
          g2: 123
        }
      }
    }
  }
};

// main
nx.deepEach(obj, (key, value) => {
  console.log(key,value);
});
```

## resources
- https://github.com/afeiship/next-is-circular

## license
Code released under [the MIT license](https://github.com/afeiship/next-deep-each/blob/master/LICENSE.txt).

[version-image]: https://img.shields.io/npm/v/@feizheng/next-deep-each
[version-url]: https://npmjs.org/package/@feizheng/next-deep-each

[license-image]: https://img.shields.io/npm/l/@feizheng/next-deep-each
[license-url]: https://github.com/afeiship/next-deep-each/blob/master/LICENSE.txt

[size-image]: https://img.shields.io/bundlephobia/minzip/@feizheng/next-deep-each
[size-url]: https://github.com/afeiship/next-deep-each/blob/master/dist/next-deep-each.min.js

[download-image]: https://img.shields.io/npm/dm/@feizheng/next-deep-each
[download-url]: https://www.npmjs.com/package/@feizheng/next-deep-each