├── .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 | GitHub Actions Build Status 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 | 3 | logo 2 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /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 | GitHub Actions Build Status 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 | --------------------------------------------------------------------------------