├── .github
├── issue_template.md
└── workflows
│ └── node.yml
├── .gitignore
├── LICENSE
├── README.md
├── data.json
├── lerna.json
├── logo.svg
├── package-lock.json
├── package.json
└── packages
└── issues-to-data
├── .gitignore
├── README.md
├── dist
└── index.js
├── package-lock.json
├── package.json
├── src
├── index.ts
└── utils.ts
└── tsconfig.json
/.github/issue_template.md:
--------------------------------------------------------------------------------
1 |
2 | 在👆 Title 处填写包名,并补充下面信息:
3 |
4 | ```json
5 | {
6 | "repoUrl": "项目 github 地址",
7 | "description": "包描述"
8 | }
9 | ```
10 |
--------------------------------------------------------------------------------
/.github/workflows/node.yml:
--------------------------------------------------------------------------------
1 | name: Node CI
2 |
3 | on:
4 | issues:
5 | types: [closed]
6 |
7 | jobs:
8 | build:
9 | runs-on: ubuntu-latest
10 |
11 | steps:
12 | - uses: actions/checkout@v2
13 | - name: Use Node.js 12.x
14 | uses: actions/setup-node@v1
15 | with:
16 | node-version: 12.x
17 | - name: run build
18 | run: node packages/issues-to-data/dist/index.js
19 | env:
20 | ACCESS_TOKEN: ${{secrets.ACCESS_TOKEN}}
21 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Dependency directory
2 | node_modules
3 |
4 | # Rest pulled from https://github.com/github/gitignore/blob/master/Node.gitignore
5 | # Logs
6 | logs
7 | *.log
8 | npm-debug.log*
9 | yarn-debug.log*
10 | yarn-error.log*
11 | lerna-debug.log*
12 |
13 | # Diagnostic reports (https://nodejs.org/api/report.html)
14 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
15 |
16 | # Runtime data
17 | pids
18 | *.pid
19 | *.seed
20 | *.pid.lock
21 |
22 | # Directory for instrumented libs generated by jscoverage/JSCover
23 | lib-cov
24 |
25 | # Coverage directory used by tools like istanbul
26 | coverage
27 | *.lcov
28 |
29 | # nyc test coverage
30 | .nyc_output
31 |
32 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
33 | .grunt
34 |
35 | # Bower dependency directory (https://bower.io/)
36 | bower_components
37 |
38 | # node-waf configuration
39 | .lock-wscript
40 |
41 | # Compiled binary addons (https://nodejs.org/api/addons.html)
42 | build/Release
43 |
44 | # Dependency directories
45 | jspm_packages/
46 |
47 | # TypeScript v1 declaration files
48 | typings/
49 |
50 | # TypeScript cache
51 | *.tsbuildinfo
52 |
53 | # Optional npm cache directory
54 | .npm
55 |
56 | # Optional eslint cache
57 | .eslintcache
58 |
59 | # Optional REPL history
60 | .node_repl_history
61 |
62 | # Output of 'npm pack'
63 | *.tgz
64 |
65 | # Yarn Integrity file
66 | .yarn-integrity
67 |
68 | # dotenv environment variables file
69 | .env
70 | .env.test
71 |
72 | # parcel-bundler cache (https://parceljs.org/)
73 | .cache
74 |
75 | # next.js build output
76 | .next
77 |
78 | # nuxt.js build output
79 | .nuxt
80 |
81 | # vuepress build output
82 | .vuepress/dist
83 |
84 | # Serverless directories
85 | .serverless/
86 |
87 | # FuseBox cache
88 | .fusebox/
89 |
90 | # DynamoDB Local files
91 | .dynamodb/
92 |
93 | # OS metadata
94 | .DS_Store
95 | Thumbs.db
96 |
97 | # Ignore built ts files
98 | __tests__/runner/*
99 | lib/**/*
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 ZERO
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | ### AI
11 |
12 | - [brain.js](https://github.com/BrainJS/brain.js) - 基于模型训练的神经网络 JS 库,支持浏览器和 Node
13 | - [tfjs](https://github.com/tensorflow/tfjs) - TensorFlow JS 版本
14 |
15 | ### AST
16 |
17 | - [gogocode](https://github.com/thx/gogocode) - AST 处理工具(阿里妈妈)
18 |
19 | ### Build tools
20 |
21 | - [pkg](https://github.com/vercel/pkg) - 将 Node.js 项目打包成可执行文件
22 | - [gulp](https://github.com/gulpjs/gulp) - 基于流(stream)的自动化构建工具
23 | - [parcel](https://github.com/parcel-bundler/parcel) - 开箱即用、零配置的打包器
24 | - [rollup](https://github.com/rollup/rollup) - Next-generation ES2015 module bundler
25 | - [webpack](https://github.com/webpack/webpack) - 静态模块打包工具
26 | - [@vercel/ncc](https://github.com/vercel/ncc) - 将 Node.js 项目编译为单个文件
27 |
28 | ### Command-line apps
29 |
30 | - [eslint-nibble](https://github.com/IanVS/eslint-nibble) - 一个能够快速预览 ESLint 错误并生成错误报告的 CLI 工具
31 | - [release-it](https://github.com/release-it/release-it) - 用于自动化版本控制和包发布的 Node CLI 工具
32 | - [depcheck](https://github.com/depcheck/depcheck) - 检查项目中未使用的依赖
33 | - [npm-check-updates](https://github.com/raineorshine/npm-check-updates) - 查找、更新 package.json 中的依赖包
34 | - [npm-run-all](https://github.com/mysticatea/npm-run-all) - 可以并行运行多个 npm 脚本
35 | - [auto-install](https://github.com/siddharthkp/auto-install) - 在编码时自动安装依赖
36 | - [wifi-password-cli](https://github.com/kevva/wifi-password-cli) - 获取当前 wifi 密码
37 | - [fkill-cli](https://github.com/sindresorhus/fkill-cli) - 杀死进程,交互式,跨平台
38 | - [node-bcat](https://github.com/kessler/node-bcat) - 将日志实时输出到浏览器
39 | - [live-server](https://github.com/tapio/live-server) - 具有 livereload 功能的开发 HTTP 服务器
40 | - [http-server](https://github.com/http-party/http-server) - 一个简单的零配置命令行 http 服务器
41 | - [david](https://github.com/alanshaw/david) - 检测 npm 依赖是否过时
42 | - [is-online](https://github.com/sindresorhus/is-online) - 检查互联网连接是否建立
43 | - [pageres](https://github.com/sindresorhus/pageres) - 捕获各种分辨率的网站屏幕截图
44 | - [speed-test](https://github.com/sindresorhus/speed-test) - 使用 speedtest.net 测试网速和ping
45 | - [trash](https://github.com/sindresorhus/trash) - 将文件移动到回收站,`rm` 的安全替代方法
46 | - [gh-home](https://github.com/sindresorhus/gh-home) - 打开给定或当前仓库的GitHub页面
47 | - [npm-name](https://github.com/sindresorhus/npm-name) - 检查软件包或组织名称在npm上是否可用
48 | - [np](https://github.com/sindresorhus/np) - A better `npm publish`
49 | - [gh](https://github.com/cli/cli) - GitHub的官方命令行工具
50 |
51 | ### Command-line utilities
52 |
53 | - [nanocolors](https://github.com/ai/nanocolors) - 比 `chalk` 执行速度快 2 倍、`node_modules` 体积小 5 倍的命令行着色工具
54 | - [import-local](https://github.com/sindresorhus/import-local) - 允许全局安装的 CLI工具 使用自身的本地安装版本
55 | - [text-table](https://github.com/substack/text-table) - 将终端中的内容以无边框表格的形式输出(文本对齐)
56 | - [table](https://github.com/gajus/table) - 将数据格式化为表格
57 | - [node-progress](https://github.com/visionmedia/node-progress) - 进度条
58 | - [cli-highlight](https://github.com/felixfbecker/cli-highlight) - 命令行终端语法高亮
59 | - [boxen](https://github.com/sindresorhus/boxen) - Create boxes in the terminal
60 | - [global-modules](https://github.com/jonschlinkert/global-modules) - 返回全局 node_modules 目录
61 | - [preferred-pm](https://github.com/zkochan/packages/tree/master/preferred-pm) - 返回项目的首选包管理器
62 | - [npm-check](https://github.com/dylang/npm-check) - 检查过时,不正确和未使用的依赖项。
63 | - [validate-npm-package-name](https://github.com/npm/validate-npm-package-name) - 检查包名是否符合 npm 规范
64 | - [fast-levenshtein](https://github.com/hiddentao/fast-levenshtein) - Levenshtein 算法,指两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。
65 | - [update-notifier](https://github.com/yeoman/update-notifier) - Update notifications for your CLI app
66 | - [commander](https://github.com/tj/commander.js) - 完整的 node.js 命令行解决方案
67 | - [color](https://github.com/Qix-/color) - Javascript 颜色转换和操作库
68 | - [update-check](https://github.com/vercel/update-check) - 检查模块是否有更新
69 | - [minimist](https://github.com/substack/minimist) - 标准命令行参数解析工具
70 | - [figlet](https://github.com/patorjk/figlet.js) - 将普通终端文本转换为大字母,如 logo
71 | - [clear](https://github.com/bahamas10/node-clear) - 清空终端屏幕
72 | - [figures](https://github.com/sindresorhus/figures) - 在 windows 或其他终端显示 Unicode 符号
73 | - [ansi-escapes](https://github.com/sindresorhus/ansi-escapes) - 用于 ANSI 码转义
74 | - [log-symbols](https://github.com/sindresorhus/log-symbols) - 为 log 添加彩色符号(info、success、warning、error)
75 | - [conf](https://github.com/sindresorhus/conf) - 轻松设置配置信息
76 | - [listr](https://github.com/samverschueren/listr) - Terminal 任务列表
77 | - [ink](https://github.com/vadimdemedes/ink) - 使用 React 写命令行应用
78 | - [log-update](https://github.com/sindresorhus/log-update) - 在 Terminal 渲染进度条或动画
79 | - [ ora](https://github.com/sindresorhus/ora) - Terminal spinner
80 | - [yargs](https://github.com/yargs/yargs) - 命令行参数解析工具
81 | - [enquirer](https://github.com/enquirer/enquirer) - 用于创建交互式 CLI 提示
82 | - [chalk](https://github.com/chalk/chalk) - 在 Terminal 设置字符串颜色
83 |
84 | ### Compiler
85 |
86 | - [esbuild](https://github.com/evanw/esbuild) - 一个非常快的 JavaScript 打包器和压缩器(Go)
87 | - [swc](https://github.com/swc-project/swc) - Super fast javascript / typescript compiler
88 |
89 | ### CSS
90 |
91 | - [tailwindcss](https://github.com/tailwindlabs/tailwindcss) - 一个用于快速 UI 开发的实用工具集 CSS 框架
92 |
93 | ### Database
94 |
95 | - [prisma](https://github.com/prisma/prisma) - Next-generation Node.js and TypeScript ORM
96 | - [mysql](https://github.com/mysqljs/mysql) - MySQL client
97 | - [mongoose](https://github.com/Automattic/mongoose) - 全能的 MongoDB ORM 库
98 | - [sequelize](https://github.com/sequelize/sequelize) - 一款支持 mysql, sqlite3, pg, msssql 的多功能 ORM 库
99 |
100 | ### Date
101 |
102 | - [dateformat](https://github.com/felixge/node-dateformat) - 日期格式化
103 | - [dayjs](https://github.com/iamkun/dayjs) - 一个轻量的日期库,具有和 Moment.js 兼容的API
104 | - [date-fns](https://github.com/date-fns/date-fns) - 日期工具类库,提供了最全面、最简单和一致的工具集
105 | - [Luxon](https://github.com/moment/luxon) - 一个用于在JS中处理日期和时间的库
106 |
107 | ### Debug
108 |
109 | - [ndb](https://github.com/GoogleChromeLabs/ndb) - 由 Chrome DevTools 支持的 Node.js 调试工具
110 | - [spy-debugger](https://github.com/wuchangming/spy-debugger) - 页面远程调试 & 抓包工具
111 | - [vconsole](https://github.com/Tencent/vConsole) - 微信小程序推出的调试工具,直接内嵌在页面内,支持控制台、网络、系统信息
112 | - [node-inspector](https://github.com/node-inspector/node-inspector) - Node debugger 和 Devtools 结合的调试工具
113 | - [debug](https://github.com/visionmedia/debug) - 最好用的 debug 日志辅助工具
114 |
115 | ### Documentation
116 |
117 | - [esdoc](https://github.com/esdoc/esdoc) - JavaScript 的文档生成器
118 | - [documentation](https://github.com/documentationjs/documentation) - API文档生成器,支持 ES6+
119 |
120 | ### Electron
121 |
122 | - [electron-store](https://github.com/sindresorhus/electron-store) - 用来保存 Electron 应用程序或模块的简单持久性数据
123 |
124 | ### Email
125 |
126 | - [mjml](https://github.com/mjmlio/mjml) - 一个标识语言,用来减少编写响应式邮件的复杂度
127 | - [email-templates](https://github.com/forwardemail/email-templates) - 电子邮件模板
128 | - [emailjs](https://github.com/eleith/emailjs) - 发送电子邮件(smtp 协议)
129 | - [nodemailer](https://github.com/nodemailer/nodemailer) - 快速轻松发送电子邮件
130 |
131 | ### Filesystem
132 |
133 | - [jsonfile](https://github.com/jprichardson/node-jsonfile) - 轻松读取/写入JSON文件
134 | - [tmp](https://github.com/raszi/node-tmp) - 创建临时文件或目录
135 | - [nsfw](https://github.com/Axosoft/nsfw) - 一个简单文件监听库
136 | - [mkdirp](https://github.com/isaacs/node-mkdirp) - 递归创建目录
137 | - [tempy](https://github.com/sindresorhus/tempy) - 获取随机的临时文件或目录路径
138 | - [move-file](https://github.com/sindresorhus/move-file) - 移动文件
139 | - [pkg-dir](https://github.com/sindresorhus/pkg-dir) - 查找 npm 或 Node.js 包的根目录
140 | - [istextorbinary](https://github.com/bevry/istextorbinary) - 检查文件是文本文件还是二进制文件
141 | - [filenamify](https://github.com/sindresorhus/filenamify) - 将字符串转换为有效的安全文件名
142 | - [write-json-file](https://github.com/sindresorhus/write-json-file) - Stringify and write JSON to a file atomically
143 | - [load-json-file](https://github.com/sindresorhus/load-json-file) - Read and parse a JSON file
144 | - [proper-lockfile](https://github.com/moxystudio/node-proper-lockfile) - 进程间或机器间文件锁🔐
145 | - [find-up](https://github.com/sindresorhus/find-up) - 遍历父目录查找文件
146 | - [chokidar](https://github.com/paulmillr/chokidar) - 监听文件变化
147 | - [fs-extra](https://github.com/jprichardson/node-fs-extra) - 基于 `fs` 的扩展
148 | - [make-dir](https://github.com/sindresorhus/make-dir) - 递归创建目录
149 | - [rimraf](https://github.com/isaacs/rimraf) - 递归删除文件
150 | - [cpy](https://github.com/sindresorhus/cpy) - Copy files
151 | - [fast-glob](https://github.com/mrmlnc/fast-glob) - 快速的 Node.js 匹配库
152 | - [globby](https://github.com/sindresorhus/globby) - 基于 `fast-glob` 并提供了扩展
153 | - [del](https://github.com/sindresorhus/del) - 删除文件和目录,基于 `rimraf` 和 `glob `
154 | - [resolve-cwd](https://github.com/sindresorhus/resolve-cwd) - 从当前工作目录解析模块的路径
155 | - [clipboardy](https://github.com/sindresorhus/clipboardy) - 访问系统剪切板(copy/paste)
156 | - [micromatch](https://github.com/micromatch/micromatch) - 高度优化的通配符和全局匹配库,minimatch 和 multimatch 的替代品
157 |
158 | ### Git
159 |
160 | - [simple-git](https://github.com/steveukx/git-js) - 一个轻量级的接口,用于在任何 node.js 应用程序中运行 git 命令。
161 | - [nodegit](https://github.com/nodegit/nodegit) - 是 [libgit2](https://libgit2.org/) 的 Node.js 绑定版本
162 | - [@gitgraph/node](https://github.com/nicoespeon/gitgraph.js) - 在 Terminal 绘制 git 流程图(支持浏览器、React)
163 |
164 | ### HTTP
165 |
166 | - [http-server](https://github.com/http-party/http-server) - 静态文件服务器命令行工具,无需配置,一条命令开启 http 服务
167 | - [spdy](https://github.com/spdy-http2/node-spdy) - SPDY/HTTP2 服务器,兼容 Express
168 | - [anyproxy](https://github.com/alibaba/anyproxy) - 可供插件配置的HTTP/HTTPS代理服务器
169 | - [request-promise](https://github.com/request/request-promise) - request 模块的 promise 版本
170 | - [request](https://github.com/request/request) - 简单易用的 HTTP 请求库
171 | - [serve](https://github.com/vercel/serve) - 为静态文件或单页面应用提供服务
172 | - [node-fetch](https://github.com/node-fetch/node-fetch) - `window.fetch` for Node.js
173 | - [superagent](https://github.com/visionmedia/superagent) - 轻量的 HTTP 请求库
174 | - [http-proxy](https://github.com/http-party/node-http-proxy) - 支持 websocket 的 HTTP 代理库
175 | - [download](https://github.com/kevva/download) - 下载并解压文件
176 | - [axios](https://github.com/axios/axios) - 基于 Promise 的 HTTP 客户端(也可在浏览器中使用)
177 | - [gh-got](https://github.com/sindresorhus/gh-got) - 基于 got 的 GitHub API 封装
178 | - [got](https://github.com/sindresorhus/got) - 人性化且功能强大的 HTTP 请求库
179 | - [urllib](https://github.com/node-modules/urllib) - 处理复杂场景下的 HTTP 请求
180 |
181 | ### Image
182 |
183 | - [probe-image-size](https://github.com/nodeca/probe-image-size) - 无需完全下载即可获取图像格式和大小
184 | - [jimp](https://github.com/oliver-moran/jimp) - 完全用 JavaScrip t编写图像处理库
185 | - [lwip](https://github.com/EyalAr/lwip) - 轻量级图像处理器
186 | - [gm](https://github.com/aheckmann/gm) - GraphicsMagick and ImageMagick for node
187 | - [image-type](https://github.com/sindresorhus/image-type) - 检测图像类型 Buffer/Uint8Array
188 | - [qrcode](https://github.com/soldair/node-qrcode) - 二维码和条形码生成器
189 | - [sharp](https://github.com/lovell/sharp) - 高性能 node.js 图像处理库,使用 libvips 库来实现
190 |
191 | ### Linter & Formatter
192 |
193 | - [textlint](https://github.com/textlint/textlint) - Text 和 Markdown 校验和格式化
194 | - [prettier](https://github.com/prettier/prettier) - ❤支持多种语言的代码格式化程序
195 | - [eslint](https://github.com/eslint/eslint) - 插件化并且可配置的 JavaScript 语法规则和代码风格的检查工具
196 | - [standard](https://github.com/standard/standard) - JavaScript 代码规范,自带 linter & 代码自动修正
197 |
198 | ### Logger
199 |
200 | - [consola](https://github.com/nuxt-contrib/consola) - Console Logger for Node.js and Browser
201 | - [signale](https://github.com/klaussinani/signale) - Console logger
202 | - [bunyan](https://github.com/trentm/node-bunyan) - Node.js 日志库
203 | - [log4js](https://github.com/log4js-node/log4js-node) - 优质的 Node.js 日志库
204 | - [pino](https://github.com/pinojs/pino) - 轻量的 node.js 日志库
205 | - [winston](https://github.com/winstonjs/winston) - 支持多传输、简单通用的日志库
206 |
207 | ### Low/No/Pro Code
208 |
209 | - [awesome_nodejs](https://github.com/taowen/awesome-lowcode) - 低代码平台们
210 | - [react-sortablejs](https://github.com/SortableJS/react-sortablejs) - 基于 SortableJS 的 React 官方提供的拖拽库
211 | - [react-beautiful-dnd](https://github.com/atlassian/react-beautiful-dnd) - 基于 React.js 技术的列表拖拽库
212 | - [brick-design](https://github.com/brick-design/brick-design) - 一个可视化页面搭建 example
213 | - [react-jsonschema-form](https://github.com/rjsf-team/react-jsonschema-form) - 通过 [JSON Schema](http://json-schema.org/) 构建表单
214 | - [json-schema-org](https://github.com/json-schema-org) - JSON Schema 规范
215 | - [amis](https://github.com/baidu/amis) - 百度低代码框架,通过 JSON 配置就能生成各种后台页面
216 | - [react-dnd](https://github.com/react-dnd/react-dnd) - React 实现的拖放功能
217 | - [formily](https://github.com/alibaba/formily) - 阿里巴巴统一前端表单解决方案
218 | - [bpmn-js](https://github.com/bpmn-io) - 使用 Web 建模工具可以很方便的构建 BPMN 图表
219 | - [json-rules-engine](https://github.com/CacheControl/json-rules-engine) - JSON 规则引擎
220 | - [grapesjs](https://github.com/artf/grapesjs) - 一个免费开源的 Web 模板编辑器,用于无编码构建模板的工具
221 | - [rete](https://github.com/retejs/rete) - 可视化流程编排工具
222 |
223 | ### Markdown
224 |
225 | - [markdown-it](https://github.com/markdown-it/markdown-it) - Markdown parser
226 | - [remark](https://github.com/remarkjs/remark) - markdown 处理器(generate, compile, check, lint)
227 | - [mark-twain](https://github.com/benjycui/mark-twain) - 将 Markdown 解析为 JavaScript 对象
228 | - [marked-terminal](https://github.com/mikaelbr/marked-terminal) - 将 markdown 渲染到 terminal
229 | - [marked](https://github.com/markedjs/marked) - Markdown 解析器和编译器
230 |
231 | ### Network
232 |
233 | - [portfinder](https://github.com/http-party/node-portfinder) - 自动获取可用端口
234 | - [getmac](https://github.com/bevry/getmac) - 获取或校验 MAC 地址
235 | - [ipify](https://github.com/sindresorhus/ipify) - 获取公网 IP
236 | - [get-port](https://github.com/sindresorhus/get-port) - 获取一个可用的端口
237 | - [address](https://github.com/node-modules/address) - 获取 IP 和 MAC 地址
238 | - [public-ip](https://github.com/sindresorhus/public-ip) - 获取公网 IP 地址
239 |
240 | ### Node.js management
241 |
242 | - [nodeenv](https://github.com/ekalinin/nodeenv) - Node.js 隔离环境(沙盒)构建器
243 | - [n](https://github.com/tj/n) - node 版本管理器
244 | - [nvm](https://github.com/nvm-sh/nvm) - node 版本管理器
245 |
246 | ### Other
247 |
248 | - [webtorrent](https://github.com/webtorrent/webtorrent) - 用于 Node.js 和浏览器的BT种子视频下载与播放工具
249 |
250 | ### Process management
251 |
252 | - [supervisor](https://github.com/petruisfan/node-supervisor) - 监听文件变化并自动重启
253 | - [nodemon](https://github.com/remy/nodemon) - 监视 node.js 应用程序中的任何更改并自动重启服务器
254 | - [pm2](https://github.com/Unitech/pm2) - 内置负载均衡的 node 进程管理器
255 |
256 | ### Testing
257 |
258 | - [faker.js ](https://github.com/marak/Faker.js/) - 浏览器和 Node.js 生成大量虚假数据
259 | - [msw](https://github.com/mswjs/msw) - 用于浏览器和 Node.js 的 REST/GraphQL API模拟库。
260 | - [json-server](https://github.com/typicode/json-server) - 指定 json 文件作为 api 的数据源,模拟服务端接口数据
261 | - [chai](https://github.com/chaijs/chai) - Chai 是一个针对 Node.js 和浏览器的行为驱动测试和测试驱动测试的诊断库,可与任何 JavaScript 测试框架集成。
262 | - [puppeteer](https://github.com/puppeteer/puppeteer) - Headless Chrome Node.js API
263 | - [codecov](https://github.com/codecov/codecov-node) - 一款测试覆盖率检测软件包
264 | - [mockjs](https://github.com/nuysoft/Mock) - 浏览器和 Node 均可用,支持自定义 schema 和随机数据
265 | - [nock](https://github.com/nock/nock) - Node.js Mock 库
266 |
267 | ### TypeScript
268 |
269 | - [ts-node](https://github.com/TypeStrong/ts-node) - 提供了 TypeScript 的运行环境
270 |
271 |
--------------------------------------------------------------------------------
/data.json:
--------------------------------------------------------------------------------
1 | {"AI":[{"title":"brain.js","repoUrl":"https://github.com/BrainJS/brain.js","description":"基于模型训练的神经网络 JS 库,支持浏览器和 Node"},{"title":"tfjs","repoUrl":"https://github.com/tensorflow/tfjs","description":"TensorFlow JS 版本"}],"AST":[{"title":"gogocode","repoUrl":"https://github.com/thx/gogocode","description":"AST 处理工具(阿里妈妈)"}],"Build tools":[{"title":"pkg","repoUrl":"https://github.com/vercel/pkg","description":"将 Node.js 项目打包成可执行文件"},{"title":"gulp","repoUrl":"https://github.com/gulpjs/gulp","description":"基于流(stream)的自动化构建工具"},{"title":"parcel","repoUrl":"https://github.com/parcel-bundler/parcel","description":"开箱即用、零配置的打包器"},{"title":"rollup","repoUrl":"https://github.com/rollup/rollup","description":"Next-generation ES2015 module bundler"},{"title":"webpack","repoUrl":"https://github.com/webpack/webpack","description":"静态模块打包工具"},{"title":"@vercel/ncc","repoUrl":"https://github.com/vercel/ncc","description":"将 Node.js 项目编译为单个文件"}],"Command-line apps":[{"title":"eslint-nibble","repoUrl":"https://github.com/IanVS/eslint-nibble","description":"一个能够快速预览 ESLint 错误并生成错误报告的 CLI 工具"},{"title":"release-it","repoUrl":"https://github.com/release-it/release-it","description":"用于自动化版本控制和包发布的 Node CLI 工具"},{"title":"depcheck","repoUrl":"https://github.com/depcheck/depcheck","description":"检查项目中未使用的依赖"},{"title":"npm-check-updates","repoUrl":"https://github.com/raineorshine/npm-check-updates","description":"查找、更新 package.json 中的依赖包"},{"title":"npm-run-all","repoUrl":"https://github.com/mysticatea/npm-run-all","description":"可以并行运行多个 npm 脚本"},{"title":"auto-install","repoUrl":"https://github.com/siddharthkp/auto-install","description":"在编码时自动安装依赖"},{"title":"wifi-password-cli","repoUrl":"https://github.com/kevva/wifi-password-cli","description":"获取当前 wifi 密码"},{"title":"fkill-cli","repoUrl":"https://github.com/sindresorhus/fkill-cli","description":"杀死进程,交互式,跨平台"},{"title":"node-bcat","repoUrl":"https://github.com/kessler/node-bcat","description":"将日志实时输出到浏览器"},{"title":"live-server","repoUrl":"https://github.com/tapio/live-server","description":"具有 livereload 功能的开发 HTTP 服务器"},{"title":"http-server","repoUrl":"https://github.com/http-party/http-server","description":"一个简单的零配置命令行 http 服务器"},{"title":"david","repoUrl":"https://github.com/alanshaw/david","description":"检测 npm 依赖是否过时"},{"title":"is-online","repoUrl":"https://github.com/sindresorhus/is-online","description":"检查互联网连接是否建立"},{"title":"pageres","repoUrl":"https://github.com/sindresorhus/pageres","description":"捕获各种分辨率的网站屏幕截图"},{"title":"speed-test","repoUrl":"https://github.com/sindresorhus/speed-test","description":"使用 speedtest.net 测试网速和ping"},{"title":"trash","repoUrl":"https://github.com/sindresorhus/trash","description":"将文件移动到回收站,`rm` 的安全替代方法"},{"title":"gh-home","repoUrl":"https://github.com/sindresorhus/gh-home","description":"打开给定或当前仓库的GitHub页面"},{"title":"npm-name","repoUrl":"https://github.com/sindresorhus/npm-name","description":"检查软件包或组织名称在npm上是否可用"},{"title":"np","repoUrl":"https://github.com/sindresorhus/np","description":"A better `npm publish`"},{"title":"gh","repoUrl":"https://github.com/cli/cli","description":"GitHub的官方命令行工具"}],"Command-line utilities":[{"title":"nanocolors","repoUrl":"https://github.com/ai/nanocolors","description":"比 `chalk` 执行速度快 2 倍、`node_modules` 体积小 5 倍的命令行着色工具"},{"title":"import-local","repoUrl":"https://github.com/sindresorhus/import-local","description":"允许全局安装的 CLI工具 使用自身的本地安装版本"},{"title":"text-table","repoUrl":"https://github.com/substack/text-table","description":"将终端中的内容以无边框表格的形式输出(文本对齐)"},{"title":"table","repoUrl":"https://github.com/gajus/table","description":"将数据格式化为表格"},{"title":"node-progress","repoUrl":"https://github.com/visionmedia/node-progress","description":"进度条"},{"title":"cli-highlight","repoUrl":"https://github.com/felixfbecker/cli-highlight","description":"命令行终端语法高亮"},{"title":"boxen","repoUrl":"https://github.com/sindresorhus/boxen","description":"Create boxes in the terminal"},{"title":"global-modules","repoUrl":"https://github.com/jonschlinkert/global-modules","description":"返回全局 node_modules 目录"},{"title":"preferred-pm","repoUrl":"https://github.com/zkochan/packages/tree/master/preferred-pm","description":"返回项目的首选包管理器"},{"title":"npm-check","repoUrl":"https://github.com/dylang/npm-check","description":"检查过时,不正确和未使用的依赖项。"},{"title":"validate-npm-package-name","repoUrl":"https://github.com/npm/validate-npm-package-name","description":"检查包名是否符合 npm 规范"},{"title":"fast-levenshtein","repoUrl":"https://github.com/hiddentao/fast-levenshtein","description":"Levenshtein 算法,指两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。"},{"title":"update-notifier","repoUrl":"https://github.com/yeoman/update-notifier","description":"Update notifications for your CLI app"},{"title":"commander","repoUrl":"https://github.com/tj/commander.js","description":"完整的 node.js 命令行解决方案"},{"title":"color","repoUrl":"https://github.com/Qix-/color","description":"Javascript 颜色转换和操作库"},{"title":"update-check","repoUrl":"https://github.com/vercel/update-check","description":"检查模块是否有更新"},{"title":"minimist","repoUrl":"https://github.com/substack/minimist","description":"标准命令行参数解析工具"},{"title":"figlet","repoUrl":"https://github.com/patorjk/figlet.js","description":"将普通终端文本转换为大字母,如 logo"},{"title":"clear","repoUrl":"https://github.com/bahamas10/node-clear","description":"清空终端屏幕"},{"title":"figures","repoUrl":"https://github.com/sindresorhus/figures","description":"在 windows 或其他终端显示 Unicode 符号"},{"title":"ansi-escapes","repoUrl":"https://github.com/sindresorhus/ansi-escapes","description":"用于 ANSI 码转义"},{"title":"log-symbols","repoUrl":"https://github.com/sindresorhus/log-symbols","description":"为 log 添加彩色符号(info、success、warning、error)"},{"title":"conf","repoUrl":"https://github.com/sindresorhus/conf","description":"轻松设置配置信息"},{"title":"listr","repoUrl":"https://github.com/samverschueren/listr","description":"Terminal 任务列表"},{"title":"ink","repoUrl":"https://github.com/vadimdemedes/ink","description":"使用 React 写命令行应用"},{"title":"log-update","repoUrl":"https://github.com/sindresorhus/log-update","description":"在 Terminal 渲染进度条或动画"},{"title":" ora","repoUrl":"https://github.com/sindresorhus/ora","description":"Terminal spinner"},{"title":"yargs","repoUrl":"https://github.com/yargs/yargs","description":"命令行参数解析工具"},{"title":"enquirer","repoUrl":"https://github.com/enquirer/enquirer","description":"用于创建交互式 CLI 提示"},{"title":"chalk","repoUrl":"https://github.com/chalk/chalk","description":"在 Terminal 设置字符串颜色"}],"Compiler":[{"title":"esbuild","repoUrl":"https://github.com/evanw/esbuild","description":"一个非常快的 JavaScript 打包器和压缩器(Go)"},{"title":"swc","repoUrl":"https://github.com/swc-project/swc","description":"Super fast javascript / typescript compiler"}],"CSS":[{"title":"tailwindcss","repoUrl":"https://github.com/tailwindlabs/tailwindcss","description":"一个用于快速 UI 开发的实用工具集 CSS 框架"}],"Database":[{"title":"prisma","repoUrl":"https://github.com/prisma/prisma","description":"Next-generation Node.js and TypeScript ORM"},{"title":"mysql","repoUrl":"https://github.com/mysqljs/mysql","description":"MySQL client"},{"title":"mongoose","repoUrl":"https://github.com/Automattic/mongoose","description":"全能的 MongoDB ORM 库"},{"title":"sequelize","repoUrl":"https://github.com/sequelize/sequelize","description":"一款支持 mysql, sqlite3, pg, msssql 的多功能 ORM 库"}],"Date":[{"title":"dateformat","repoUrl":"https://github.com/felixge/node-dateformat","description":"日期格式化"},{"title":"dayjs","repoUrl":"https://github.com/iamkun/dayjs","description":"一个轻量的日期库,具有和 Moment.js 兼容的API"},{"title":"date-fns","repoUrl":"https://github.com/date-fns/date-fns","description":"日期工具类库,提供了最全面、最简单和一致的工具集"},{"title":"Luxon","repoUrl":"https://github.com/moment/luxon","description":"一个用于在JS中处理日期和时间的库"}],"Debug":[{"title":"ndb","repoUrl":"https://github.com/GoogleChromeLabs/ndb","description":"由 Chrome DevTools 支持的 Node.js 调试工具"},{"title":"spy-debugger","repoUrl":"https://github.com/wuchangming/spy-debugger","description":"页面远程调试 & 抓包工具"},{"title":"vconsole","repoUrl":"https://github.com/Tencent/vConsole","description":"微信小程序推出的调试工具,直接内嵌在页面内,支持控制台、网络、系统信息"},{"title":"node-inspector","repoUrl":"https://github.com/node-inspector/node-inspector","description":"Node debugger 和 Devtools 结合的调试工具"},{"title":"debug","repoUrl":"https://github.com/visionmedia/debug","description":"最好用的 debug 日志辅助工具"}],"Documentation":[{"title":"esdoc","repoUrl":"https://github.com/esdoc/esdoc","description":"JavaScript 的文档生成器"},{"title":"documentation","repoUrl":"https://github.com/documentationjs/documentation","description":"API文档生成器,支持 ES6+"}],"Electron":[{"title":"electron-store","repoUrl":"https://github.com/sindresorhus/electron-store","description":"用来保存 Electron 应用程序或模块的简单持久性数据"}],"Email":[{"title":"mjml","repoUrl":"https://github.com/mjmlio/mjml","description":"一个标识语言,用来减少编写响应式邮件的复杂度"},{"title":"email-templates","repoUrl":"https://github.com/forwardemail/email-templates","description":"电子邮件模板"},{"title":"emailjs","repoUrl":"https://github.com/eleith/emailjs","description":"发送电子邮件(smtp 协议)"},{"title":"nodemailer","repoUrl":"https://github.com/nodemailer/nodemailer","description":"快速轻松发送电子邮件"}],"Filesystem":[{"title":"jsonfile","repoUrl":"https://github.com/jprichardson/node-jsonfile","description":"轻松读取/写入JSON文件"},{"title":"tmp","repoUrl":"https://github.com/raszi/node-tmp","description":"创建临时文件或目录"},{"title":"nsfw","repoUrl":"https://github.com/Axosoft/nsfw","description":"一个简单文件监听库"},{"title":"mkdirp","repoUrl":"https://github.com/isaacs/node-mkdirp","description":"递归创建目录"},{"title":"tempy","repoUrl":"https://github.com/sindresorhus/tempy","description":"获取随机的临时文件或目录路径"},{"title":"move-file","repoUrl":"https://github.com/sindresorhus/move-file","description":"移动文件"},{"title":"pkg-dir","repoUrl":"https://github.com/sindresorhus/pkg-dir","description":"查找 npm 或 Node.js 包的根目录"},{"title":"istextorbinary","repoUrl":"https://github.com/bevry/istextorbinary","description":"检查文件是文本文件还是二进制文件"},{"title":"filenamify","repoUrl":"https://github.com/sindresorhus/filenamify","description":"将字符串转换为有效的安全文件名"},{"title":"write-json-file","repoUrl":"https://github.com/sindresorhus/write-json-file","description":"Stringify and write JSON to a file atomically"},{"title":"load-json-file","repoUrl":"https://github.com/sindresorhus/load-json-file","description":"Read and parse a JSON file"},{"title":"proper-lockfile","repoUrl":"https://github.com/moxystudio/node-proper-lockfile","description":"进程间或机器间文件锁🔐"},{"title":"find-up","repoUrl":"https://github.com/sindresorhus/find-up","description":"遍历父目录查找文件"},{"title":"chokidar","repoUrl":"https://github.com/paulmillr/chokidar","description":"监听文件变化"},{"title":"fs-extra","repoUrl":"https://github.com/jprichardson/node-fs-extra","description":"基于 `fs` 的扩展"},{"title":"make-dir","repoUrl":"https://github.com/sindresorhus/make-dir","description":"递归创建目录"},{"title":"rimraf","repoUrl":"https://github.com/isaacs/rimraf","description":"递归删除文件"},{"title":"cpy","repoUrl":"https://github.com/sindresorhus/cpy","description":"Copy files"},{"title":"fast-glob","repoUrl":"https://github.com/mrmlnc/fast-glob","description":"快速的 Node.js 匹配库"},{"title":"globby","repoUrl":"https://github.com/sindresorhus/globby","description":"基于 `fast-glob` 并提供了扩展"},{"title":"del","repoUrl":"https://github.com/sindresorhus/del","description":"删除文件和目录,基于 `rimraf` 和 `glob `"},{"title":"resolve-cwd","repoUrl":"https://github.com/sindresorhus/resolve-cwd","description":"从当前工作目录解析模块的路径"},{"title":"clipboardy","repoUrl":"https://github.com/sindresorhus/clipboardy","description":"访问系统剪切板(copy/paste)"},{"title":"micromatch","repoUrl":"https://github.com/micromatch/micromatch","description":"高度优化的通配符和全局匹配库,minimatch 和 multimatch 的替代品"}],"Git":[{"title":"simple-git","repoUrl":"https://github.com/steveukx/git-js","description":"一个轻量级的接口,用于在任何 node.js 应用程序中运行 git 命令。"},{"title":"nodegit","repoUrl":"https://github.com/nodegit/nodegit","description":"是 [libgit2](https://libgit2.org/) 的 Node.js 绑定版本"},{"title":"@gitgraph/node","repoUrl":"https://github.com/nicoespeon/gitgraph.js","description":"在 Terminal 绘制 git 流程图(支持浏览器、React)"}],"HTTP":[{"title":"http-server","repoUrl":"https://github.com/http-party/http-server","description":"静态文件服务器命令行工具,无需配置,一条命令开启 http 服务"},{"title":"spdy","repoUrl":"https://github.com/spdy-http2/node-spdy","description":"SPDY/HTTP2 服务器,兼容 Express"},{"title":"anyproxy","repoUrl":"https://github.com/alibaba/anyproxy","description":"可供插件配置的HTTP/HTTPS代理服务器"},{"title":"request-promise","repoUrl":"https://github.com/request/request-promise","description":"request 模块的 promise 版本"},{"title":"request","repoUrl":"https://github.com/request/request","description":"简单易用的 HTTP 请求库"},{"title":"serve","repoUrl":"https://github.com/vercel/serve","description":"为静态文件或单页面应用提供服务"},{"title":"node-fetch","repoUrl":"https://github.com/node-fetch/node-fetch","description":"`window.fetch` for Node.js"},{"title":"superagent","repoUrl":"https://github.com/visionmedia/superagent","description":"轻量的 HTTP 请求库"},{"title":"http-proxy","repoUrl":"https://github.com/http-party/node-http-proxy","description":"支持 websocket 的 HTTP 代理库"},{"title":"download","repoUrl":"https://github.com/kevva/download","description":"下载并解压文件"},{"title":"axios","repoUrl":"https://github.com/axios/axios","description":"基于 Promise 的 HTTP 客户端(也可在浏览器中使用)"},{"title":"gh-got","repoUrl":"https://github.com/sindresorhus/gh-got","description":"基于 got 的 GitHub API 封装"},{"title":"got","repoUrl":"https://github.com/sindresorhus/got","description":"人性化且功能强大的 HTTP 请求库"},{"title":"urllib","repoUrl":"https://github.com/node-modules/urllib","description":"处理复杂场景下的 HTTP 请求"}],"Image":[{"title":"probe-image-size","repoUrl":"https://github.com/nodeca/probe-image-size","description":"无需完全下载即可获取图像格式和大小"},{"title":"jimp","repoUrl":"https://github.com/oliver-moran/jimp","description":"完全用 JavaScrip t编写图像处理库"},{"title":"lwip","repoUrl":"https://github.com/EyalAr/lwip","description":"轻量级图像处理器"},{"title":"gm","repoUrl":"https://github.com/aheckmann/gm","description":"GraphicsMagick and ImageMagick for node"},{"title":"image-type","repoUrl":"https://github.com/sindresorhus/image-type","description":"检测图像类型 Buffer/Uint8Array"},{"title":"qrcode","repoUrl":"https://github.com/soldair/node-qrcode","description":"二维码和条形码生成器"},{"title":"sharp","repoUrl":"https://github.com/lovell/sharp","description":"高性能 node.js 图像处理库,使用 libvips 库来实现"}],"Linter & Formatter":[{"title":"textlint","repoUrl":"https://github.com/textlint/textlint","description":"Text 和 Markdown 校验和格式化"},{"title":"prettier","repoUrl":"https://github.com/prettier/prettier","description":"❤支持多种语言的代码格式化程序"},{"title":"eslint","repoUrl":"https://github.com/eslint/eslint","description":"插件化并且可配置的 JavaScript 语法规则和代码风格的检查工具"},{"title":"standard","repoUrl":"https://github.com/standard/standard","description":"JavaScript 代码规范,自带 linter & 代码自动修正"}],"Logger":[{"title":"consola","repoUrl":"https://github.com/nuxt-contrib/consola","description":"Console Logger for Node.js and Browser"},{"title":"signale","repoUrl":"https://github.com/klaussinani/signale","description":"Console logger"},{"title":"bunyan","repoUrl":"https://github.com/trentm/node-bunyan","description":"Node.js 日志库"},{"title":"log4js","repoUrl":"https://github.com/log4js-node/log4js-node","description":"优质的 Node.js 日志库"},{"title":"pino","repoUrl":"https://github.com/pinojs/pino","description":"轻量的 node.js 日志库"},{"title":"winston","repoUrl":"https://github.com/winstonjs/winston","description":"支持多传输、简单通用的日志库"}],"Low/No/Pro Code":[{"title":"awesome_nodejs","repoUrl":"https://github.com/taowen/awesome-lowcode","description":"低代码平台们"},{"title":"react-sortablejs","repoUrl":"https://github.com/SortableJS/react-sortablejs","description":"基于 SortableJS 的 React 官方提供的拖拽库"},{"title":"react-beautiful-dnd","repoUrl":"https://github.com/atlassian/react-beautiful-dnd","description":"基于 React.js 技术的列表拖拽库"},{"title":"brick-design","repoUrl":"https://github.com/brick-design/brick-design","description":"一个可视化页面搭建 example"},{"title":"react-jsonschema-form","repoUrl":"https://github.com/rjsf-team/react-jsonschema-form","description":"通过 [JSON Schema](http://json-schema.org/) 构建表单"},{"title":"json-schema-org","repoUrl":"https://github.com/json-schema-org","description":"JSON Schema 规范"},{"title":"amis","repoUrl":"https://github.com/baidu/amis","description":"百度低代码框架,通过 JSON 配置就能生成各种后台页面"},{"title":"react-dnd","repoUrl":"https://github.com/react-dnd/react-dnd","description":"React 实现的拖放功能"},{"title":"formily","repoUrl":"https://github.com/alibaba/formily","description":"阿里巴巴统一前端表单解决方案"},{"title":"bpmn-js","repoUrl":"https://github.com/bpmn-io","description":"使用 Web 建模工具可以很方便的构建 BPMN 图表"},{"title":"json-rules-engine","repoUrl":"https://github.com/CacheControl/json-rules-engine","description":"JSON 规则引擎"},{"title":"grapesjs","repoUrl":"https://github.com/artf/grapesjs","description":"一个免费开源的 Web 模板编辑器,用于无编码构建模板的工具"},{"title":"rete","repoUrl":"https://github.com/retejs/rete","description":"可视化流程编排工具"}],"Markdown":[{"title":"markdown-it","repoUrl":"https://github.com/markdown-it/markdown-it","description":"Markdown parser"},{"title":"remark","repoUrl":"https://github.com/remarkjs/remark","description":"markdown 处理器(generate, compile, check, lint)"},{"title":"mark-twain","repoUrl":"https://github.com/benjycui/mark-twain","description":"将 Markdown 解析为 JavaScript 对象"},{"title":"marked-terminal","repoUrl":"https://github.com/mikaelbr/marked-terminal","description":"将 markdown 渲染到 terminal"},{"title":"marked","repoUrl":"https://github.com/markedjs/marked","description":"Markdown 解析器和编译器"}],"Network":[{"title":"portfinder","repoUrl":"https://github.com/http-party/node-portfinder","description":"自动获取可用端口"},{"title":"getmac","repoUrl":"https://github.com/bevry/getmac","description":"获取或校验 MAC 地址"},{"title":"ipify","repoUrl":"https://github.com/sindresorhus/ipify","description":"获取公网 IP"},{"title":"get-port","repoUrl":"https://github.com/sindresorhus/get-port","description":"获取一个可用的端口"},{"title":"address","repoUrl":"https://github.com/node-modules/address","description":"获取 IP 和 MAC 地址"},{"title":"public-ip","repoUrl":"https://github.com/sindresorhus/public-ip","description":"获取公网 IP 地址"}],"Node.js management":[{"title":"nodeenv","repoUrl":"https://github.com/ekalinin/nodeenv","description":"Node.js 隔离环境(沙盒)构建器"},{"title":"n","repoUrl":"https://github.com/tj/n","description":"node 版本管理器"},{"title":"nvm","repoUrl":"https://github.com/nvm-sh/nvm","description":"node 版本管理器"}],"Other":[{"title":"webtorrent","repoUrl":"https://github.com/webtorrent/webtorrent","description":"用于 Node.js 和浏览器的BT种子视频下载与播放工具"}],"Process management":[{"title":"supervisor","repoUrl":"https://github.com/petruisfan/node-supervisor","description":"监听文件变化并自动重启"},{"title":"nodemon","repoUrl":"https://github.com/remy/nodemon","description":"监视 node.js 应用程序中的任何更改并自动重启服务器"},{"title":"pm2","repoUrl":"https://github.com/Unitech/pm2","description":"内置负载均衡的 node 进程管理器"}],"Testing":[{"title":"faker.js ","repoUrl":"https://github.com/marak/Faker.js/","description":"浏览器和 Node.js 生成大量虚假数据"},{"title":"msw","repoUrl":"https://github.com/mswjs/msw","description":"用于浏览器和 Node.js 的 REST/GraphQL API模拟库。"},{"title":"json-server","repoUrl":"https://github.com/typicode/json-server","description":"指定 json 文件作为 api 的数据源,模拟服务端接口数据"},{"title":"chai","repoUrl":"https://github.com/chaijs/chai","description":"Chai 是一个针对 Node.js 和浏览器的行为驱动测试和测试驱动测试的诊断库,可与任何 JavaScript 测试框架集成。"},{"title":"puppeteer","repoUrl":"https://github.com/puppeteer/puppeteer","description":"Headless Chrome Node.js API"},{"title":"codecov","repoUrl":"https://github.com/codecov/codecov-node","description":"一款测试覆盖率检测软件包"},{"title":"mockjs","repoUrl":"https://github.com/nuysoft/Mock","description":"浏览器和 Node 均可用,支持自定义 schema 和随机数据"},{"title":"nock","repoUrl":"https://github.com/nock/nock","description":"Node.js Mock 库"}],"TypeScript":[{"title":"ts-node","repoUrl":"https://github.com/TypeStrong/ts-node","description":"提供了 TypeScript 的运行环境"}]}
--------------------------------------------------------------------------------
/lerna.json:
--------------------------------------------------------------------------------
1 | {
2 | "packages": [
3 | "packages/*"
4 | ],
5 | "version": "0.0.0"
6 | }
7 |
--------------------------------------------------------------------------------
/logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "awesome-nodejs",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@octokit/auth-token": {
8 | "version": "2.4.2",
9 | "resolved": "http://bnpm.byted.org/@octokit/auth-token/download/@octokit/auth-token-2.4.2.tgz",
10 | "integrity": "sha1-ENCul5sQD6a3L6Do5j4n5tDb/4o=",
11 | "dev": true,
12 | "requires": {
13 | "@octokit/types": "^5.0.0"
14 | }
15 | },
16 | "@octokit/core": {
17 | "version": "3.1.2",
18 | "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.1.2.tgz",
19 | "integrity": "sha512-AInOFULmwOa7+NFi9F8DlDkm5qtZVmDQayi7TUgChE3yeIGPq0Y+6cAEXPexQ3Ea+uZy66hKEazR7DJyU+4wfw==",
20 | "dev": true,
21 | "requires": {
22 | "@octokit/auth-token": "^2.4.0",
23 | "@octokit/graphql": "^4.3.1",
24 | "@octokit/request": "^5.4.0",
25 | "@octokit/types": "^5.0.0",
26 | "before-after-hook": "^2.1.0",
27 | "universal-user-agent": "^6.0.0"
28 | },
29 | "dependencies": {
30 | "universal-user-agent": {
31 | "version": "6.0.0",
32 | "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
33 | "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==",
34 | "dev": true
35 | }
36 | }
37 | },
38 | "@octokit/endpoint": {
39 | "version": "6.0.6",
40 | "resolved": "http://bnpm.byted.org/@octokit/endpoint/download/@octokit/endpoint-6.0.6.tgz",
41 | "integrity": "sha1-TwnytGiXa0RHQqHVBp9vpFgm2Zk=",
42 | "dev": true,
43 | "requires": {
44 | "@octokit/types": "^5.0.0",
45 | "is-plain-object": "^5.0.0",
46 | "universal-user-agent": "^6.0.0"
47 | },
48 | "dependencies": {
49 | "is-plain-object": {
50 | "version": "5.0.0",
51 | "resolved": "http://bnpm.byted.org/is-plain-object/download/is-plain-object-5.0.0.tgz",
52 | "integrity": "sha1-RCf1CrNCnpAl6n1S6QQ6nvQVk0Q=",
53 | "dev": true
54 | },
55 | "universal-user-agent": {
56 | "version": "6.0.0",
57 | "resolved": "http://bnpm.byted.org/universal-user-agent/download/universal-user-agent-6.0.0.tgz",
58 | "integrity": "sha1-M4H4UDslHA2c0hvB3pOeyd9UgO4=",
59 | "dev": true
60 | }
61 | }
62 | },
63 | "@octokit/graphql": {
64 | "version": "4.5.6",
65 | "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.5.6.tgz",
66 | "integrity": "sha512-Rry+unqKTa3svswT2ZAuqenpLrzJd+JTv89LTeVa5UM/5OX8o4KTkPL7/1ABq4f/ZkELb0XEK/2IEoYwykcLXg==",
67 | "dev": true,
68 | "requires": {
69 | "@octokit/request": "^5.3.0",
70 | "@octokit/types": "^5.0.0",
71 | "universal-user-agent": "^6.0.0"
72 | },
73 | "dependencies": {
74 | "universal-user-agent": {
75 | "version": "6.0.0",
76 | "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
77 | "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==",
78 | "dev": true
79 | }
80 | }
81 | },
82 | "@octokit/request": {
83 | "version": "5.4.9",
84 | "resolved": "http://bnpm.byted.org/@octokit/request/download/@octokit/request-5.4.9.tgz",
85 | "integrity": "sha1-CkbxG4I1GzQW0xVyYa2bFVjEM2U=",
86 | "dev": true,
87 | "requires": {
88 | "@octokit/endpoint": "^6.0.1",
89 | "@octokit/request-error": "^2.0.0",
90 | "@octokit/types": "^5.0.0",
91 | "deprecation": "^2.0.0",
92 | "is-plain-object": "^5.0.0",
93 | "node-fetch": "^2.6.1",
94 | "once": "^1.4.0",
95 | "universal-user-agent": "^6.0.0"
96 | },
97 | "dependencies": {
98 | "@octokit/request-error": {
99 | "version": "2.0.2",
100 | "resolved": "http://bnpm.byted.org/@octokit/request-error/download/@octokit/request-error-2.0.2.tgz",
101 | "integrity": "sha1-Dna4P12P3aHbmQJ+pfYXwua6ntA=",
102 | "dev": true,
103 | "requires": {
104 | "@octokit/types": "^5.0.1",
105 | "deprecation": "^2.0.0",
106 | "once": "^1.4.0"
107 | }
108 | },
109 | "is-plain-object": {
110 | "version": "5.0.0",
111 | "resolved": "http://bnpm.byted.org/is-plain-object/download/is-plain-object-5.0.0.tgz",
112 | "integrity": "sha1-RCf1CrNCnpAl6n1S6QQ6nvQVk0Q=",
113 | "dev": true
114 | },
115 | "universal-user-agent": {
116 | "version": "6.0.0",
117 | "resolved": "http://bnpm.byted.org/universal-user-agent/download/universal-user-agent-6.0.0.tgz",
118 | "integrity": "sha1-M4H4UDslHA2c0hvB3pOeyd9UgO4=",
119 | "dev": true
120 | }
121 | }
122 | },
123 | "@octokit/types": {
124 | "version": "5.5.0",
125 | "resolved": "http://bnpm.byted.org/@octokit/types/download/@octokit/types-5.5.0.tgz",
126 | "integrity": "sha1-5fBujbISRsoQKqKERM2xOuF6E5s=",
127 | "dev": true,
128 | "requires": {
129 | "@types/node": ">= 8"
130 | }
131 | },
132 | "@types/node": {
133 | "version": "14.11.2",
134 | "resolved": "http://bnpm.byted.org/@types/node/download/@types/node-14.11.2.tgz",
135 | "integrity": "sha1-LeHtZnBDk4faHJ9UmireKwp5klY=",
136 | "dev": true
137 | },
138 | "before-after-hook": {
139 | "version": "2.1.0",
140 | "resolved": "http://bnpm.byted.org/before-after-hook/download/before-after-hook-2.1.0.tgz",
141 | "integrity": "sha1-tsA0h/ROJCAN0wyl5qGXnF0vtjU=",
142 | "dev": true
143 | },
144 | "deprecation": {
145 | "version": "2.3.1",
146 | "resolved": "http://bnpm.byted.org/deprecation/download/deprecation-2.3.1.tgz",
147 | "integrity": "sha1-Y2jL20Cr8zc7UlrIfkomDDpwCRk=",
148 | "dev": true
149 | },
150 | "node-fetch": {
151 | "version": "2.6.1",
152 | "resolved": "http://bnpm.byted.org/node-fetch/download/node-fetch-2.6.1.tgz",
153 | "integrity": "sha1-BFvTI2Mfdu0uK1VXM5RBa2OaAFI=",
154 | "dev": true
155 | },
156 | "once": {
157 | "version": "1.4.0",
158 | "resolved": "http://bnpm.byted.org/once/download/once-1.4.0.tgz",
159 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
160 | "dev": true,
161 | "requires": {
162 | "wrappy": "1"
163 | }
164 | },
165 | "wrappy": {
166 | "version": "1.0.2",
167 | "resolved": "http://bnpm.byted.org/wrappy/download/wrappy-1.0.2.tgz",
168 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
169 | "dev": true
170 | }
171 | }
172 | }
173 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "root",
3 | "private": true,
4 | "devDependencies": {
5 | "lerna": "^3.22.1"
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/packages/issues-to-data/.gitignore:
--------------------------------------------------------------------------------
1 | # Dependency directory
2 | node_modules
3 |
4 | # Rest pulled from https://github.com/github/gitignore/blob/master/Node.gitignore
5 | # Logs
6 | logs
7 | *.log
8 | npm-debug.log*
9 | yarn-debug.log*
10 | yarn-error.log*
11 | lerna-debug.log*
12 |
13 | # Diagnostic reports (https://nodejs.org/api/report.html)
14 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
15 |
16 | # Runtime data
17 | pids
18 | *.pid
19 | *.seed
20 | *.pid.lock
21 |
22 | # Directory for instrumented libs generated by jscoverage/JSCover
23 | lib-cov
24 |
25 | # Coverage directory used by tools like istanbul
26 | coverage
27 | *.lcov
28 |
29 | # nyc test coverage
30 | .nyc_output
31 |
32 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
33 | .grunt
34 |
35 | # Bower dependency directory (https://bower.io/)
36 | bower_components
37 |
38 | # node-waf configuration
39 | .lock-wscript
40 |
41 | # Compiled binary addons (https://nodejs.org/api/addons.html)
42 | build/Release
43 |
44 | # Dependency directories
45 | jspm_packages/
46 |
47 | # TypeScript v1 declaration files
48 | typings/
49 |
50 | # TypeScript cache
51 | *.tsbuildinfo
52 |
53 | # Optional npm cache directory
54 | .npm
55 |
56 | # Optional eslint cache
57 | .eslintcache
58 |
59 | # Optional REPL history
60 | .node_repl_history
61 |
62 | # Output of 'npm pack'
63 | *.tgz
64 |
65 | # Yarn Integrity file
66 | .yarn-integrity
67 |
68 | # dotenv environment variables file
69 | .env
70 | .env.test
71 |
72 | # parcel-bundler cache (https://parceljs.org/)
73 | .cache
74 |
75 | # next.js build output
76 | .next
77 |
78 | # nuxt.js build output
79 | .nuxt
80 |
81 | # vuepress build output
82 | .vuepress/dist
83 |
84 | # Serverless directories
85 | .serverless/
86 |
87 | # FuseBox cache
88 | .fusebox/
89 |
90 | # DynamoDB Local files
91 | .dynamodb/
92 |
93 | # OS metadata
94 | .DS_Store
95 | Thumbs.db
96 |
97 | # Ignore built ts files
98 | __tests__/runner/*
99 | lib/**/*
--------------------------------------------------------------------------------
/packages/issues-to-data/README.md:
--------------------------------------------------------------------------------
1 | # `issues-to-data`
2 |
3 | > TODO: description
4 |
5 | ## Usage
6 |
7 | ```
8 | const issuesToData = require('issues-to-data');
9 |
10 | // TODO: DEMONSTRATE API
11 | ```
12 |
--------------------------------------------------------------------------------
/packages/issues-to-data/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "issues-to-data",
3 | "version": "0.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@octokit/auth-token": {
8 | "version": "2.4.2",
9 | "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.2.tgz",
10 | "integrity": "sha512-jE/lE/IKIz2v1+/P0u4fJqv0kYwXOTujKemJMFr6FeopsxlIK3+wKDCJGnysg81XID5TgZQbIfuJ5J0lnTiuyQ==",
11 | "dev": true,
12 | "requires": {
13 | "@octokit/types": "^5.0.0"
14 | }
15 | },
16 | "@octokit/core": {
17 | "version": "3.1.2",
18 | "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.1.2.tgz",
19 | "integrity": "sha512-AInOFULmwOa7+NFi9F8DlDkm5qtZVmDQayi7TUgChE3yeIGPq0Y+6cAEXPexQ3Ea+uZy66hKEazR7DJyU+4wfw==",
20 | "dev": true,
21 | "requires": {
22 | "@octokit/auth-token": "^2.4.0",
23 | "@octokit/graphql": "^4.3.1",
24 | "@octokit/request": "^5.4.0",
25 | "@octokit/types": "^5.0.0",
26 | "before-after-hook": "^2.1.0",
27 | "universal-user-agent": "^6.0.0"
28 | }
29 | },
30 | "@octokit/endpoint": {
31 | "version": "6.0.8",
32 | "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.8.tgz",
33 | "integrity": "sha512-MuRrgv+bM4Q+e9uEvxAB/Kf+Sj0O2JAOBA131uo1o6lgdq1iS8ejKwtqHgdfY91V3rN9R/hdGKFiQYMzVzVBEQ==",
34 | "dev": true,
35 | "requires": {
36 | "@octokit/types": "^5.0.0",
37 | "is-plain-object": "^5.0.0",
38 | "universal-user-agent": "^6.0.0"
39 | }
40 | },
41 | "@octokit/graphql": {
42 | "version": "4.5.6",
43 | "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.5.6.tgz",
44 | "integrity": "sha512-Rry+unqKTa3svswT2ZAuqenpLrzJd+JTv89LTeVa5UM/5OX8o4KTkPL7/1ABq4f/ZkELb0XEK/2IEoYwykcLXg==",
45 | "dev": true,
46 | "requires": {
47 | "@octokit/request": "^5.3.0",
48 | "@octokit/types": "^5.0.0",
49 | "universal-user-agent": "^6.0.0"
50 | }
51 | },
52 | "@octokit/request": {
53 | "version": "5.4.9",
54 | "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.4.9.tgz",
55 | "integrity": "sha512-CzwVvRyimIM1h2n9pLVYfTDmX9m+KHSgCpqPsY8F1NdEK8IaWqXhSBXsdjOBFZSpEcxNEeg4p0UO9cQ8EnOCLA==",
56 | "dev": true,
57 | "requires": {
58 | "@octokit/endpoint": "^6.0.1",
59 | "@octokit/request-error": "^2.0.0",
60 | "@octokit/types": "^5.0.0",
61 | "deprecation": "^2.0.0",
62 | "is-plain-object": "^5.0.0",
63 | "node-fetch": "^2.6.1",
64 | "once": "^1.4.0",
65 | "universal-user-agent": "^6.0.0"
66 | }
67 | },
68 | "@octokit/request-error": {
69 | "version": "2.0.2",
70 | "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.0.2.tgz",
71 | "integrity": "sha512-2BrmnvVSV1MXQvEkrb9zwzP0wXFNbPJij922kYBTLIlIafukrGOb+ABBT2+c6wZiuyWDH1K1zmjGQ0toN/wMWw==",
72 | "dev": true,
73 | "requires": {
74 | "@octokit/types": "^5.0.1",
75 | "deprecation": "^2.0.0",
76 | "once": "^1.4.0"
77 | }
78 | },
79 | "@octokit/types": {
80 | "version": "5.5.0",
81 | "resolved": "https://registry.npmjs.org/@octokit/types/-/types-5.5.0.tgz",
82 | "integrity": "sha512-UZ1pErDue6bZNjYOotCNveTXArOMZQFG6hKJfOnGnulVCMcVVi7YIIuuR4WfBhjo7zgpmzn/BkPDnUXtNx+PcQ==",
83 | "dev": true,
84 | "requires": {
85 | "@types/node": ">= 8"
86 | }
87 | },
88 | "@types/node": {
89 | "version": "14.11.10",
90 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.10.tgz",
91 | "integrity": "sha512-yV1nWZPlMFpoXyoknm4S56y2nlTAuFYaJuQtYRAOU7xA/FJ9RY0Xm7QOkaYMMmr8ESdHIuUb6oQgR/0+2NqlyA==",
92 | "dev": true
93 | },
94 | "@types/prettier": {
95 | "version": "2.1.5",
96 | "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.1.5.tgz",
97 | "integrity": "sha512-UEyp8LwZ4Dg30kVU2Q3amHHyTn1jEdhCIE59ANed76GaT1Vp76DD3ZWSAxgCrw6wJ0TqeoBpqmfUHiUDPs//HQ==",
98 | "dev": true
99 | },
100 | "@vercel/ncc": {
101 | "version": "0.24.1",
102 | "resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.24.1.tgz",
103 | "integrity": "sha512-r9m7brz2hNmq5TF3sxrK4qR/FhXn44XIMglQUir4sT7Sh5GOaYXlMYikHFwJStf8rmQGTlvOoBXt4yHVonRG8A==",
104 | "dev": true
105 | },
106 | "before-after-hook": {
107 | "version": "2.1.0",
108 | "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.1.0.tgz",
109 | "integrity": "sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A==",
110 | "dev": true
111 | },
112 | "deprecation": {
113 | "version": "2.3.1",
114 | "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
115 | "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==",
116 | "dev": true
117 | },
118 | "is-plain-object": {
119 | "version": "5.0.0",
120 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
121 | "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
122 | "dev": true
123 | },
124 | "node-fetch": {
125 | "version": "2.6.1",
126 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
127 | "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==",
128 | "dev": true
129 | },
130 | "once": {
131 | "version": "1.4.0",
132 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
133 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
134 | "dev": true,
135 | "requires": {
136 | "wrappy": "1"
137 | }
138 | },
139 | "prettier": {
140 | "version": "2.1.2",
141 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.2.tgz",
142 | "integrity": "sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==",
143 | "dev": true
144 | },
145 | "resolve-cwd": {
146 | "version": "3.0.0",
147 | "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
148 | "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
149 | "dev": true,
150 | "requires": {
151 | "resolve-from": "^5.0.0"
152 | }
153 | },
154 | "resolve-from": {
155 | "version": "5.0.0",
156 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
157 | "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
158 | "dev": true
159 | },
160 | "typescript": {
161 | "version": "4.0.3",
162 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.3.tgz",
163 | "integrity": "sha512-tEu6DGxGgRJPb/mVPIZ48e69xCn2yRmCgYmDugAVwmJ6o+0u1RI18eO7E7WBTLYLaEVVOhwQmcdhQHweux/WPg==",
164 | "dev": true
165 | },
166 | "universal-user-agent": {
167 | "version": "6.0.0",
168 | "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
169 | "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==",
170 | "dev": true
171 | },
172 | "wrappy": {
173 | "version": "1.0.2",
174 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
175 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
176 | "dev": true
177 | }
178 | }
179 | }
180 |
--------------------------------------------------------------------------------
/packages/issues-to-data/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "issues-to-data",
3 | "version": "0.0.0",
4 | "description": "Generate json and markdown files for issues",
5 | "author": "lishuaishuai ",
6 | "homepage": "https://github.com/zerolab-fe/awesome-nodejs#readme",
7 | "license": "ISC",
8 | "main": "lib/index.js",
9 | "files": [
10 | "lib"
11 | ],
12 | "repository": {
13 | "type": "git",
14 | "url": "git+https://github.com/zerolab-fe/awesome-nodejs.git"
15 | },
16 | "scripts": {
17 | "test": "echo \"Error: run tests from root\" && exit 1",
18 | "start": "tsc --watch",
19 | "build": "rm -rf lib dist && tsc",
20 | "package": "ncc build -m",
21 | "all": "npm run build && npm run package"
22 | },
23 | "bugs": {
24 | "url": "https://github.com/zerolab-fe/awesome-nodejs/issues"
25 | },
26 | "devDependencies": {
27 | "@octokit/core": "^3.1.2",
28 | "@types/prettier": "^2.1.5",
29 | "@vercel/ncc": "^0.24.1",
30 | "prettier": "^2.1.2",
31 | "resolve-cwd": "^3.0.0",
32 | "typescript": "^4.0.3"
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/packages/issues-to-data/src/index.ts:
--------------------------------------------------------------------------------
1 | import { get, generateJson, generateMarkdown, push, Data, DataItem } from './utils';
2 |
3 | async function getLabels(): Promise {
4 | console.log('getLabels start...');
5 | const { code, data } = await get('/labels');
6 | if (code !== 200) {
7 | return [];
8 | }
9 |
10 | const lables: string[] = data.map(({ name }: { name: string }) => name);
11 | console.log('getLabels end...');
12 |
13 | return lables;
14 | }
15 |
16 | async function getIssues(labels: string): Promise {
17 | console.log(`label ${labels} start...`);
18 |
19 | const { code, data } = await get('/issues', { labels, state: 'closed' });
20 | if (code !== 200) {
21 | return [];
22 | }
23 |
24 | const issues: DataItem[] = data.map(({ title, body }: { title: string; body: string }) => {
25 | const reg = /```json([\s\S]*)```/;
26 | const jsonStr = reg.exec(body)?.[1] ?? '';
27 | const { repoUrl, description } = JSON.parse(jsonStr);
28 |
29 | return {
30 | title,
31 | repoUrl,
32 | description,
33 | };
34 | });
35 | console.log(`label ${labels} end...`);
36 |
37 | return issues;
38 | }
39 |
40 | async function main() {
41 | const data: Data = {};
42 | try {
43 | const labels = await getLabels();
44 |
45 | for (let i = 0; i < labels.length; i++) {
46 | const element = labels[i];
47 | const issueArr = await getIssues(element);
48 | if (!issueArr.length) {
49 | continue;
50 | }
51 | data[element] = issueArr;
52 | }
53 | } catch (error) {
54 | console.log(error);
55 | process.exit(1)
56 | }
57 |
58 | await generateJson(data);
59 | generateMarkdown(data);
60 | push();
61 | }
62 |
63 | main();
64 |
--------------------------------------------------------------------------------
/packages/issues-to-data/src/utils.ts:
--------------------------------------------------------------------------------
1 | import fs from 'fs';
2 | import { execSync } from 'child_process';
3 | import resolveCwd from 'resolve-cwd';
4 | import { Octokit } from '@octokit/core';
5 | // import { format } from 'prettier';
6 |
7 | export interface DataItem {
8 | title: string;
9 | repoUrl: string;
10 | description: string;
11 | }
12 |
13 | export interface Data {
14 | [key: string]: DataItem[];
15 | }
16 |
17 | const octokit = new Octokit({
18 | auth: process.env.ACCESS_TOKEN,
19 | baseUrl: 'https://api.github.com/repos/zerolab-fe/awesome-nodejs',
20 | });
21 |
22 | /**
23 | * get 请求
24 | * @param url string
25 | * @param _data object
26 | */
27 | export async function get(url: string, _data = {}) {
28 | const { status, data } = await octokit.request(url, _data);
29 |
30 | if (status !== 200) {
31 | return { code: status, data: [], msg: 'error' };
32 | }
33 |
34 | return { code: status, data, msg: 'success' };
35 | }
36 |
37 | /**
38 | * 生成 json
39 | * @param data object
40 | */
41 | export async function generateJson(data: Data): Promise {
42 | console.log('generate json start...');
43 | const filePath = resolveCwd.silent('./data.json');
44 | if (filePath) {
45 | fs.writeFileSync(filePath, JSON.stringify(data));
46 | }
47 | console.log('generate json end...');
48 | }
49 |
50 | export function push() {
51 | const REPOSITORY_PATH = `https://x-access-token:${process.env.ACCESS_TOKEN}@github.com/zerolab-fe/awesome-nodejs.git`;
52 |
53 | execSync('git init');
54 | execSync('git config user.name "li-shuaishuai"');
55 | execSync('git config user.email "lishuaishuai.it@gmail.com"');
56 | execSync(`git fetch ${REPOSITORY_PATH}`);
57 | execSync('git add data.json README.md');
58 | execSync(`git commit -m "github-actions: ${new Date().getTime()}"`);
59 | execSync('git push origin master');
60 | }
61 |
62 | export async function generateMarkdown(data: Data): Promise {
63 | let markdown = `
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 | `;
73 |
74 | for (const [key, v] of Object.entries(data)) {
75 | markdown += `### ${key}\r\n\r\n`;
76 |
77 | const itemArr = v.map(({ title, repoUrl, description }) => `- [${title}](${repoUrl}) - ${description}`);
78 |
79 | markdown += `${itemArr.join('\r\n')}\r\n\r\n`;
80 | }
81 |
82 | // markdown = format(markdown, { parser: 'markdown' });
83 |
84 | const filePath = resolveCwd.silent('./README.md');
85 | if (filePath) {
86 | fs.writeFileSync(filePath, markdown);
87 | }
88 | }
89 |
--------------------------------------------------------------------------------
/packages/issues-to-data/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | /* Visit https://aka.ms/tsconfig.json to read more about this file */
4 |
5 | /* Basic Options */
6 | // "incremental": true, /* Enable incremental compilation */
7 | "target": "ES2017", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
8 | "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
9 | // "lib": [], /* Specify library files to be included in the compilation. */
10 | // "allowJs": true, /* Allow javascript files to be compiled. */
11 | // "checkJs": true, /* Report errors in .js files. */
12 | // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
13 | // "declaration": true, /* Generates corresponding '.d.ts' file. */
14 | // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
15 | // "sourceMap": true, /* Generates corresponding '.map' file. */
16 | // "outFile": "./", /* Concatenate and emit output to single file. */
17 | "outDir": "./lib", /* Redirect output structure to the directory. */
18 | "rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
19 | // "composite": true, /* Enable project compilation */
20 | // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */
21 | // "removeComments": true, /* Do not emit comments to output. */
22 | // "noEmit": true, /* Do not emit outputs. */
23 | // "importHelpers": true, /* Import emit helpers from 'tslib'. */
24 | // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
25 | // "isolatedModfules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
26 |
27 | /* Strict Type-Checking Options */
28 | "strict": true, /* Enable all strict type-checking options. */
29 | // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
30 | // "strictNullChecks": true, /* Enable strict null checks. */
31 | // "strictFunctionTypes": true, /* Enable strict checking of function types. */
32 | // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
33 | // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */
34 | // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */
35 | // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */
36 |
37 | /* Additional Checks */
38 | // "noUnusedLocals": true, /* Report errors on unused locals. */
39 | // "noUnusedParameters": true, /* Report errors on unused parameters. */
40 | "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
41 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
42 |
43 | /* Module Resolution Options */
44 | "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
45 | // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */
46 | // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
47 | // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
48 | // "typeRoots": [], /* List of folders to include type definitions from. */
49 | // "types": [], /* Type declaration files to be included in compilation. */
50 | // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
51 | "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
52 | // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */
53 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
54 |
55 | /* Source Map Options */
56 | // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
57 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
58 | // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */
59 | // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
60 |
61 | /* Experimental Options */
62 | "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
63 | // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
64 |
65 | /* Advanced Options */
66 | "skipLibCheck": true, /* Skip type checking of declaration files. */
67 | "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */
68 | },
69 | "exclude": ["node_modules", "lib", "dist"]
70 | }
71 |
--------------------------------------------------------------------------------