├── .prettierignore ├── templates └── typescript │ ├── .prettierignore │ ├── .eslintignore │ ├── .npmrc │ ├── .gitignore │ ├── config │ ├── plugin.js │ ├── envconfig.js │ ├── locale │ │ ├── zh-CN.json │ │ └── en-US.json │ └── config.default.js │ ├── .prettierrc.js │ ├── app │ ├── router.ts │ ├── service │ │ └── demo.ts │ └── controller │ │ └── demo.ts │ ├── .vscode │ ├── settings.json │ └── launch.json │ ├── .eslintrc.js │ ├── tsconfig.json │ ├── .eslintRules.js │ └── package.json ├── .eslintignore ├── .gitignore ├── src ├── command │ ├── version.js │ ├── index.js │ ├── run.js │ └── init.js ├── util.js └── checkUpdate.js ├── .prettierrc.js ├── bin └── index.js ├── .vscode └── settings.json ├── .eslintrc.js ├── tsconfig.json ├── .eslintRules.js ├── package.json ├── README.md └── yarn.lock /.prettierignore: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /templates/typescript/.prettierignore: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | **/*.d.ts 2 | node_modules/ -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | logs/ 3 | run/ 4 | typings/ -------------------------------------------------------------------------------- /templates/typescript/.eslintignore: -------------------------------------------------------------------------------- 1 | **/*.d.ts 2 | node_modules/ -------------------------------------------------------------------------------- /templates/typescript/.npmrc: -------------------------------------------------------------------------------- 1 | # registry = "http://*.*.*.*:90000/" -------------------------------------------------------------------------------- /templates/typescript/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | logs/ 3 | run/ 4 | typings/ -------------------------------------------------------------------------------- /templates/typescript/config/plugin.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | /*exports.bffSdk = { 4 | enable: true, 5 | package: 'bff-sdk', 6 | };*/ 7 | -------------------------------------------------------------------------------- /templates/typescript/config/envconfig.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | /* 运维配置信息 */ 4 | module.exports = { 5 | urlCrmHost: 'https://*.*.com', 6 | urlApiHost: 'https://*.*.com', 7 | }; 8 | -------------------------------------------------------------------------------- /src/command/version.js: -------------------------------------------------------------------------------- 1 | const pkg = require('../../package.json'); 2 | exports.register = function (program) { 3 | program.version(pkg.version, '-v', '--version'); 4 | return program; 5 | }; 6 | -------------------------------------------------------------------------------- /templates/typescript/config/locale/zh-CN.json: -------------------------------------------------------------------------------- 1 | { 2 | "demo - hello": "你好", 3 | "demo - Hello {0}! My name is {1}.": "你好{0},我是{1}!", 4 | "demo - %s is %s years old.": "%s有%s岁了。", 5 | "demo - {v1} and {v2}": "{v1} 和 {v2}", 6 | "====请在此行上面添加新值====": "" 7 | } 8 | -------------------------------------------------------------------------------- /templates/typescript/config/locale/en-US.json: -------------------------------------------------------------------------------- 1 | { 2 | "demo - hello": "hello", 3 | "demo - Hello {0}! My name is {1}.": "Hello {0}! My name is {1}.", 4 | "demo - %s is %s years old.": "%s is %s years old.", 5 | "demo - {v1} and {v2}": "{v1} and {v2}", 6 | "====请在此行上面添加新值====": "" 7 | } 8 | -------------------------------------------------------------------------------- /src/command/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | const commandList = [ 3 | require('./init'), // init create bff-service 4 | require('./version'), // get version 5 | require('./run'), // run bff-service 6 | ]; 7 | exports.register = (program) => { 8 | commandList.forEach((command) => { 9 | command.register(program); 10 | }); 11 | }; 12 | -------------------------------------------------------------------------------- /.prettierrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | printWidth: 120, //一行的字符数,如果超过会进行换行,默认为80 3 | trailingComma: 'es5', //结尾使用逗号 4 | useTabs: false, //是否使用tab进行缩进,默认为false,表示用空格进行缩进 5 | tabWidth: 2, //一个tab代表几个空格数 6 | semi: true, //结尾必须有分号 7 | singleQuote: true, //单引号 8 | bracketSpacing: true, //对象大括号之间是否有空格,默认为true,效果:{ foo: bar } 9 | }; 10 | -------------------------------------------------------------------------------- /bin/index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | 'use strict'; 4 | require = require('esm')(module /*, options*/); 5 | const checkUpdate = require('../src/checkUpdate'); 6 | // checkUpdate(); 7 | 8 | const commands = require('../src/command/index'); 9 | const program = require('commander'); 10 | commands.register(program); 11 | 12 | program.parse(process.argv); 13 | -------------------------------------------------------------------------------- /templates/typescript/.prettierrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | printWidth: 120, //一行的字符数,如果超过会进行换行,默认为80 3 | trailingComma: 'es5', //结尾使用逗号 4 | useTabs: false, //是否使用tab进行缩进,默认为false,表示用空格进行缩进 5 | tabWidth: 2, //一个tab代表几个空格数 6 | semi: true, //结尾必须有分号 7 | singleQuote: true, //单引号 8 | bracketSpacing: true, //对象大括号之间是否有空格,默认为true,效果:{ foo: bar } 9 | }; 10 | -------------------------------------------------------------------------------- /src/util.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | const fs = require('fs'); 3 | const { promisify } = require('util'); 4 | const access = promisify(fs.access); 5 | exports.fsExists = async function (target) { 6 | let isExist = false; 7 | try { 8 | await access(target, fs.constants.R_OK); 9 | isExist = true; 10 | } catch (error) { 11 | isExist = false; 12 | } 13 | return isExist; 14 | }; 15 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | // 此模式不能使用skipFiles特性,暂时关闭,需要调试其他进程时请在本地打开 3 | // "debug.node.autoAttach": "on", 4 | "editor.formatOnSave": true, 5 | "debug.openDebug": "openOnFirstSessionStart", 6 | "editor.codeActionsOnSave": { 7 | "source.fixAll.eslint": true 8 | }, 9 | "[javascript]": { 10 | "editor.formatOnSave": false 11 | }, 12 | "[typescript]": { 13 | "editor.formatOnSave": false 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /templates/typescript/app/router.ts: -------------------------------------------------------------------------------- 1 | import { Application } from 'egg'; 2 | 3 | export default (app: Application) => { 4 | const { router, controller } = app; 5 | 6 | // router.get(`/{{{urlPrefix}}}/demo/demo1`, controller.demo.demo1); 7 | // router.get(`/{{{urlPrefix}}}/demo/demo2`, controller.demo.demo2); 8 | router.get(`/demo/demo1`, controller.demo.demo1); 9 | router.get(`/demo/demo2`, controller.demo.demo2); 10 | }; 11 | -------------------------------------------------------------------------------- /templates/typescript/app/service/demo.ts: -------------------------------------------------------------------------------- 1 | import { Service } from 'egg'; 2 | 3 | export default class DemoService extends Service { 4 | async demo1() { 5 | return 'hello word'; 6 | } 7 | 8 | async demo2({ apikey }) { 9 | const { ctx } = this; 10 | const metadata = await ctx.bffsdk.fetch('/metadata/v2.0/', { 11 | apiName: '获取元数据信息', 12 | }); 13 | return { 14 | metadata, 15 | }; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /templates/typescript/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | // 此模式不能使用skipFiles特性,暂时关闭,需要调试其他进程时请在本地打开 3 | // "debug.node.autoAttach": "on", 4 | "editor.formatOnSave": true, 5 | "debug.openDebug": "openOnFirstSessionStart", 6 | "editor.codeActionsOnSave": { 7 | "source.fixAll.eslint": true 8 | }, 9 | "[javascript]": { 10 | "editor.formatOnSave": false 11 | }, 12 | "[typescript]": { 13 | "editor.formatOnSave": false 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /templates/typescript/config/config.default.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const envconfig = require('./envconfig'); 4 | 5 | module.exports = (appInfo) => { 6 | const config = {}; 7 | config.keys = appInfo.name + '_{{configKeys}}'; 8 | 9 | //----环境级配置---- 10 | config.envconfig = envconfig; 11 | 12 | //----应用级配置---- 13 | /*config.middleware = ['bffSdk']; 14 | config.bffSdk = { 15 | builtinApi: { 16 | prefix: '/{{urlPrefix}}', 17 | }, 18 | };*/ 19 | 20 | return config; 21 | }; 22 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | parser: '@typescript-eslint/parser', // 解析器 3 | extends: [ 4 | './.eslintRules.js', 5 | 'plugin:prettier/recommended', 6 | 'prettier', // 优先 prettier 中的样式规范 7 | ], // 继承的规则 8 | plugins: ['@typescript-eslint'], // 插件 9 | env: { 10 | es6: true, 11 | node: true, 12 | mocha: true, 13 | }, 14 | parserOptions: { 15 | parser: '@typescript-eslint/parser', // 解析 .ts 文件 16 | ecmaVersion: 2019, 17 | sourceType: 'module', 18 | ecmaFeatures: { 19 | modules: true, 20 | }, 21 | }, 22 | rules: {}, // 规则 23 | }; 24 | -------------------------------------------------------------------------------- /templates/typescript/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | parser: '@typescript-eslint/parser', // 解析器 3 | extends: [ 4 | './.eslintRules.js', 5 | 'plugin:prettier/recommended', 6 | 'prettier', // 优先 prettier 中的样式规范 7 | ], // 继承的规则 8 | plugins: ['@typescript-eslint'], // 插件 9 | env: { 10 | es6: true, 11 | node: true, 12 | mocha: true, 13 | }, 14 | parserOptions: { 15 | parser: '@typescript-eslint/parser', // 解析 .ts 文件 16 | ecmaVersion: 2019, 17 | sourceType: 'module', 18 | ecmaFeatures: { 19 | modules: true, 20 | }, 21 | }, 22 | rules: {}, // 规则 23 | }; 24 | -------------------------------------------------------------------------------- /templates/typescript/app/controller/demo.ts: -------------------------------------------------------------------------------- 1 | import { Controller } from 'egg'; 2 | 3 | export default class DemoController extends Controller { 4 | async demo1() { 5 | const r = await this.service.demo.demo1(); 6 | this.ctx.body = { 7 | status: 200, 8 | data: { 9 | r, 10 | }, 11 | }; 12 | } 13 | 14 | async demo2() { 15 | const { ctx } = this; 16 | const { apikey } = ctx.query; 17 | const r = await this.service.demo.demo2({ apikey }); 18 | // TODO 未进行ctx.body 返回,给出 demo1 的例子,这里正常应该返回到response中间件去统一处理 19 | this.ctx.body = { 20 | status: 200, 21 | data: { 22 | r, 23 | }, 24 | }; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /templates/typescript/.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // 使用 IntelliSense 了解相关属性。 3 | // 悬停以查看现有属性的描述。 4 | // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "Debug", 9 | "type": "node", 10 | "request": "launch", 11 | "cwd": "${workspaceRoot}", 12 | "runtimeExecutable": "yarn", 13 | "runtimeArgs": ["debug"], 14 | "env": { 15 | "NODE_TLS_REJECT_UNAUTHORIZED": "0" 16 | }, 17 | "console": "integratedTerminal", 18 | "restart": true, 19 | "autoAttachChildProcesses": true, 20 | "protocol": "auto", 21 | "port": 9999, 22 | "skipFiles": ["/**", "**/node_modules/**"] 23 | } 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compileOnSave": true, 3 | "compilerOptions": { 4 | "target": "es2017", 5 | "module": "commonjs", 6 | "strict": true, 7 | "noImplicitAny": false, 8 | "experimentalDecorators": true, 9 | "emitDecoratorMetadata": true, 10 | "charset": "utf8", 11 | "allowJs": false, 12 | "pretty": true, 13 | "noEmitOnError": false, 14 | "noUnusedLocals": false, 15 | "noUnusedParameters": false, 16 | "allowUnreachableCode": false, 17 | "allowUnusedLabels": true, 18 | "strictPropertyInitialization": false, 19 | "noFallthroughCasesInSwitch": true, 20 | "skipLibCheck": true, 21 | "skipDefaultLibCheck": true, 22 | "inlineSourceMap": true, 23 | "importHelpers": true 24 | }, 25 | "exclude": [ 26 | "node_modules" 27 | ] 28 | } -------------------------------------------------------------------------------- /templates/typescript/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compileOnSave": true, 3 | "compilerOptions": { 4 | "target": "es2017", 5 | "module": "commonjs", 6 | "strict": true, 7 | "noImplicitAny": false, 8 | "experimentalDecorators": true, 9 | "emitDecoratorMetadata": true, 10 | "charset": "utf8", 11 | "allowJs": false, 12 | "pretty": true, 13 | "noEmitOnError": false, 14 | "noUnusedLocals": false, 15 | "noUnusedParameters": false, 16 | "allowUnreachableCode": false, 17 | "allowUnusedLabels": true, 18 | "strictPropertyInitialization": false, 19 | "noFallthroughCasesInSwitch": true, 20 | "skipLibCheck": true, 21 | "skipDefaultLibCheck": true, 22 | "inlineSourceMap": true, 23 | "importHelpers": true 24 | }, 25 | "exclude": ["node_modules"] 26 | } 27 | -------------------------------------------------------------------------------- /.eslintRules.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | rules: { 3 | 'no-undef': 2, // 禁用未声明的变量 4 | 'no-shadow': 0, // 禁止影子变量(ts需要禁用这个基本规则,否则会出现误报) 5 | "@typescript-eslint/no-shadow": 2, // 禁止变量声明与外层作用域的变量同名 6 | //'no-use-before-define': 2, // 不允许在变量定义之前使用它们 7 | 'no-ex-assign': 2, // 禁止对 catch 子句的参数重新赋值 8 | 'no-unmodified-loop-condition': 2, // 禁用一成不变的循环条件 9 | 'no-redeclare': 2, // 禁止多次声明同一变量 10 | 'init-declarations': 0, // 要求或禁止 var 声明中的初始化 11 | 'no-shadow-restricted-names': 2, // 禁止将标识符定义为受限的名字 12 | 'no-new-require': 2, // 禁止调用 require 时使用 new 操作符 13 | 'no-const-assign': 2, // 禁止修改 const 声明的变量 14 | //'no-useless-constructor': 2, // 禁用不必要的构造函数 15 | //'new-cap': 2, //构造函数首字母大写 16 | 'comma-style': [2, 'last'], // 控制逗号在行尾出现还是在行首出现 17 | '@typescript-eslint/adjacent-overload-signatures': 2, // 要求成员重载是连续的 18 | } 19 | } -------------------------------------------------------------------------------- /templates/typescript/.eslintRules.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | rules: { 3 | 'no-undef': 2, // 禁用未声明的变量 4 | 'no-shadow': 0, // 禁止影子变量(ts需要禁用这个基本规则,否则会出现误报) 5 | "@typescript-eslint/no-shadow": 2, // 禁止变量声明与外层作用域的变量同名 6 | //'no-use-before-define': 2, // 不允许在变量定义之前使用它们 7 | 'no-ex-assign': 2, // 禁止对 catch 子句的参数重新赋值 8 | 'no-unmodified-loop-condition': 2, // 禁用一成不变的循环条件 9 | 'no-redeclare': 2, // 禁止多次声明同一变量 10 | 'init-declarations': 0, // 要求或禁止 var 声明中的初始化 11 | 'no-shadow-restricted-names': 2, // 禁止将标识符定义为受限的名字 12 | 'no-new-require': 2, // 禁止调用 require 时使用 new 操作符 13 | 'no-const-assign': 2, // 禁止修改 const 声明的变量 14 | //'no-useless-constructor': 2, // 禁用不必要的构造函数 15 | //'new-cap': 2, //构造函数首字母大写 16 | 'comma-style': [2, 'last'], // 控制逗号在行尾出现还是在行首出现 17 | '@typescript-eslint/adjacent-overload-signatures': 2, // 要求成员重载是连续的 18 | } 19 | } -------------------------------------------------------------------------------- /src/command/run.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | const inquirer = require('inquirer'); 3 | const chalk = require('chalk'); 4 | const defaultEnv = 'debug'; 5 | exports.register = (program) => { 6 | program 7 | .command('run') 8 | .alias('r') 9 | .description('Start run bff-service') 10 | .action(() => { 11 | const questions = [ 12 | { 13 | type: 'list', 14 | message: 'Please choose which service environment to use?', 15 | name: 'state', 16 | choices: ['debug', 'dev'], 17 | filter: function (val) { 18 | return val.toLowerCase(); 19 | }, 20 | defaultEnv: defaultEnv, 21 | when: (res) => Boolean(res.conf), 22 | }, 23 | ]; 24 | console.log(chalk.green('🐨🐨🐨 ' + 'starting run bff-service...')); 25 | const answers = inquirer.prompt(questions); 26 | runService(answers); 27 | }); 28 | return program; 29 | }; 30 | 31 | async function runService(answers) {} 32 | -------------------------------------------------------------------------------- /src/checkUpdate.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | const pjson = require('../package.json'); 3 | const shell = require('shelljs'); 4 | const semver = require('semver'); 5 | const chalk = require('chalk'); 6 | 7 | module.exports = function () { 8 | const localVersion = pjson.version; 9 | const packageName = pjson.name; 10 | const remoteVersionStr = shell.exec( 11 | `npm info ${packageName}@latest version --registry=https://www.npmjs.com/package/create-bff-service-cli`, 12 | { 13 | silent: true, 14 | } 15 | ).stdout; 16 | if (typeof remoteVersionStr == null) { 17 | console.log(chalk.red('Failed to get the corresponding module version')); 18 | // process exit 19 | process.exit(0); 20 | } 21 | const remoteVersion = semver.clean(remoteVersionStr); 22 | 23 | if (localVersion != remoteVersion) { 24 | console.log(`Latest version is [${remoteVersion}],Please execute the upgrade command:`); 25 | console.log(); 26 | console.log('npm i -g create-bff-service-cli --registry=https://www.npmjs.com/package/create-bff-service-cli'); 27 | console.log(); 28 | // process exit 29 | process.exit(0); 30 | } 31 | }; 32 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "create-bff-service-cli", 3 | "version": "1.0.4", 4 | "description": "快速搭建一个基于 egg 的,规范的 bff-service", 5 | "main": "index.js", 6 | "bin": { 7 | "create-bff-service": "bin/index.js" 8 | }, 9 | "scripts": { 10 | "test": "echo \"Error: no test specified\" && exit 1" 11 | }, 12 | "keywords": [ 13 | "cli", 14 | "bff", 15 | "bff-service", 16 | "egg", 17 | "create-bff-service", 18 | "BFF", 19 | "bff-cli" 20 | ], 21 | "author": "koala", 22 | "license": "ISC", 23 | "dependencies": { 24 | "chalk": "^4.1.0", 25 | "commander": "^7.2.0", 26 | "esm": "^3.2.25", 27 | "execa": "^5.1.1", 28 | "inquirer": "^8.0.0", 29 | "listr": "^0.14.3", 30 | "minimist": "^1.2.5", 31 | "ncp": "^2.0.0", 32 | "pkg-install": "^1.0.0", 33 | "semver": "^7.3.5", 34 | "shelljs": "^0.8.4" 35 | }, 36 | "devDependencies": { 37 | "@typescript-eslint/eslint-plugin": "^4.23.0", 38 | "@typescript-eslint/parser": "^4.23.0", 39 | "eslint": "^7.9.0", 40 | "eslint-config-prettier": "^6.11.0", 41 | "eslint-plugin-prettier": "^3.1.4", 42 | "prettier": "^2.1.2" 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /templates/typescript/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bff-service", 3 | "version": "0.0.0", 4 | "description": "descriptionValue", 5 | "author": "small_koala", 6 | "license": "ISC", 7 | "private": true, 8 | "egg": { 9 | "typescript": true, 10 | "declarations": true 11 | }, 12 | "dependencies": { 13 | "egg": "^2.29.4", 14 | "egg-bin": "^4.15.0", 15 | "egg-scripts": "^2.13.0", 16 | "async": "^3.2.0", 17 | "egg-router-group": "^1.1.0", 18 | "lodash": "^4.17.20" 19 | }, 20 | "devDependencies": { 21 | "@types/mocha": "^8.0.3", 22 | "@types/node": "^14.11.1", 23 | "@typescript-eslint/eslint-plugin": "^4.1.1", 24 | "@typescript-eslint/parser": "^4.1.1", 25 | "autod": "^3.1.0", 26 | "autod-egg": "^1.1.0", 27 | "egg-ci": "^1.18.0", 28 | "egg-mock": "^4.0.1", 29 | "eslint": "^7.9.0", 30 | "eslint-config-prettier": "^6.11.0", 31 | "eslint-plugin-prettier": "^3.1.4", 32 | "mocha": "^8.1.3", 33 | "prettier": "^2.1.2", 34 | "typescript": "^4.0.2" 35 | }, 36 | "engines": { 37 | "node": ">=8.9.0" 38 | }, 39 | "scripts": { 40 | "start": "npm run ts-compile && egg-scripts start --port=portValue --title=bff-service --env=prod --daemon", 41 | "stop": "egg-scripts stop --title=bff-service", 42 | "debug": "egg-bin debug -r egg-ts-helper/register --port=portValue", 43 | "clean": "ets clean", 44 | "ts-compile": "ets && npx tsc -p tsconfig.json", 45 | "lint": "eslint . --ext .ts,.js", 46 | "test": "echo \"Error: no test specified\" && exit 1" 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## create-bff-service-cli 2 | 3 | ## 介绍 4 | 5 | **快速搭建一个基于 `egg`框架 的 `bff-service` `cli`工具。** 6 | 7 | - 服务模版多种语言可选模 `typescript/javascript` (建议选择 `typescript`,目前只添加了`typescript` 模版) 8 | - 模版内容支持根据交互动态配置,具体可配置内容请看下文参数说明 9 | - 服务模版编码规范已完善,已添加 `eslint`、`prettier`、`tsconfig` 配置等,并且支持自动保存校验,`.vscode` 中 `settings.json` 已配置 。 10 | - 提供了基本项目结构 `router`、`controller`、`service`、`config` 配置等,可直接测试`template`中提供的基础接口。 11 | 12 | ## 快速开始 13 | 14 | ### 使用前的准备工作 15 | 16 | 1. 安装 `node.js` 17 | 18 | `node.js`安装可以官网下载安装,https://nodejs.org/ 19 | 20 | 也可以使用 `nvs`安装,方便切换版本,https://github.com/jasongin/nvs 21 | 22 | 2. 安装 `yarn` 23 | ``` 24 | > npm install -g yarn 25 | ``` 26 | 3. 安装 `nrm` 27 | `nrm` 作用是修改 `npm` 的镜像源 28 | 安装 `nrm` 29 | ```shell 30 | > npm install -g nrm 31 | ``` 32 | 设置 `npm` 源为私服地址: 33 | ```shell 34 | > nrm add me http://*.*.*.*:78900 35 | > nrm use me 36 | ``` 37 | 4. 建议 IDE 38 | `vscode` 39 | 40 | 5. `vscode`必装插件 41 | `ESLint` 42 | 43 | `Prettier - Code formatter` 44 | 45 | 通过这两个插件,配合项目中的规则配置文件,可以使团队中的代码格式化规则一致 46 | 47 | ### 安装 create-bff-service-cli 48 | 49 | ```shell 50 | > npm install -g create-bff-service-cli 51 | ``` 52 | 53 | 安装之后就可以使用 `cli` 命令: `create-bff-service` 54 | 55 | ### cli 执行命令说明 56 | 57 | #### 在命令行执行命令 58 | 59 | ```shell 60 | create-bff-service init 61 | ``` 62 | 63 | 然后会出现交互提示,按照交互提示输入各项参数。 64 | 65 | ##### 参数项说明 66 | 67 | 1. 服务名称 `serviceName`: 服务的英文名称,例如: xxx-bff-service 68 | 2. 作者 `author`: 作者的英文名称,例如:xiaoming 69 | 3. 服务端口号 `port`: 找运维申请的服务端口号,例如:7001 70 | 4. 版本号 `version`: 服务的版本号,例如:0.0.1 71 | 5. 介绍 `description`: 服务的介绍 例如:某业务线的 BFF 服务 72 | 6. 模版 `template`: 选择模版 例如:选择 typescript 模版 73 | 7. 项目版本管理 `git`: 选择是否 git 初始化项目 例如: yes git 初始化项目 74 | 8. 项目依赖安装 `install`: 选择是否安装依赖 例如: yes install 所有依赖 75 | 76 | ##### 使用调试模式启动 `cli` 创建的 `bff-service` 77 | 78 | ```shell 79 | > yarn debug 80 | ``` 81 | 82 | ##### 模版接口测试 83 | 84 | 85 | 接口访问测试:调用 `demo/demo1` 路由,获取服务返回数据。 86 | 87 | ```shell 88 | curl http://127.0.0.1:7890/demo/demo1 89 | 90 | // 返回结果 91 | {"status":200,"data":{"r":"hello word"}} 92 | ``` 93 | 94 | ##### 模版代码保存自动格式化配置 95 | 该功能正常使用前提需要安装前文提到的 `vscode` 插件 -------------------------------------------------------------------------------- /src/command/init.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const inquirer = require('inquirer'); 4 | const chalk = require('chalk'); 5 | const path = require('path'); 6 | const { fsExists } = require('../util'); 7 | const { projectInstall } = require('pkg-install'); 8 | const execa = require('execa'); 9 | const listr = require('listr'); 10 | const ncp = require('ncp'); 11 | const { promisify } = require('util'); 12 | const copy = promisify(ncp); 13 | const fs = require('fs'); 14 | const defaultTemplate = 'typescript'; 15 | const defaultPort = 7001; 16 | 17 | exports.register = (program) => { 18 | program 19 | .command('init') 20 | .alias('i') 21 | .description('Init a new bff-service') 22 | .option('-y, --yes', 'ignore inquire,use default template') 23 | .action((name, options, command) => { 24 | /*if (options.y || option.yes) { 25 | // use defaultTemplate 26 | return { 27 | ...options, 28 | template: options.template || defaultTemplate, 29 | }; 30 | }*/ 31 | let questions = [ 32 | /*{ 33 | name: 'conf', 34 | type: 'confirm', 35 | message: chalk.green('Do you want to create a new bff service?'), 36 | when: (res) => Boolean(res.conf), 37 | },*/ 38 | { 39 | type: 'input', 40 | name: 'serviceName', 41 | message: chalk.green('Please enter service name'), 42 | validate: async (val) => { 43 | return !!val 44 | }, 45 | }, 46 | { 47 | type:'list', 48 | message:function(answers){ 49 | return chalk.red(`❗️ Directory ${answers.serviceName} already exists! Are you sure you want to continue?`); 50 | }, 51 | choices:['continue','cancel'], 52 | name:'serviceNameConfirm', 53 | when:async function(answers){ 54 | const targetFolder = path.join(process.cwd(), answers.serviceName); 55 | return fsExists(targetFolder); 56 | }, 57 | filter: (val) => { 58 | if (val == 'cancel') { 59 | process.exit(0); 60 | } 61 | }, 62 | }, 63 | { 64 | type: 'input', 65 | name: 'author', 66 | message: chalk.green('Please enter the author'), 67 | }, 68 | { 69 | type: 'input', 70 | message: chalk.green('Please enter the port number'), 71 | name: 'port', 72 | validate: (val) => { 73 | if (Number.parseInt(val) <= 1000) { 74 | return chalk.red(`The port number must be greater than 1000`); 75 | } 76 | return true; 77 | }, 78 | default: defaultPort, 79 | }, 80 | { 81 | type: 'input', 82 | name: 'version', 83 | message: chalk.green('Please enter the version number'), 84 | }, 85 | { 86 | type: 'input', 87 | name: 'description', 88 | message: chalk.green('Please enter the service description'), 89 | }, 90 | { 91 | type: 'list', 92 | message: chalk.green('Please choose which project template to use?'), 93 | name: 'template', 94 | choices: ['typescript','javascript'], 95 | filter: function (val) { 96 | return val.toLowerCase(); 97 | }, 98 | }, 99 | { 100 | type: 'confirm', 101 | name: 'git', 102 | message: chalk.green('Initialize a git repository?'), 103 | }, 104 | { 105 | type: 'confirm', 106 | name: 'install', 107 | message: chalk.green('Whether to install dependencies?'), 108 | }, 109 | ]; 110 | console.log(chalk.green('🐨🐨🐨 ' + 'Welcome to create-bff-service cli,easy to build bff-service~🎉🎉🎉')); 111 | inquirer.prompt(questions).then((answers) => { 112 | generatorProject(answers); 113 | }); 114 | }); 115 | }; 116 | 117 | async function generatorProject(answers) { 118 | const targetDirectory = path.join(process.cwd(), answers.template); 119 | // template whether isExists 120 | const currentFileUrl = import.meta.url; 121 | const templateDirectory = path.resolve( 122 | new URL(currentFileUrl).pathname, 123 | `../../../templates/`, 124 | answers.template.toLowerCase() 125 | ); 126 | answers.targetDirectory = targetDirectory; 127 | answers.templateDirectory = templateDirectory; 128 | const isfsExists = await fsExists(templateDirectory); 129 | if (!isfsExists) { 130 | console.error('template not exists', chalk.red.bold('ERROR')); 131 | process.exit(1); 132 | } 133 | const tasks = [ 134 | { 135 | title: 'Copy project template', 136 | task: async (ctx) => { 137 | const templateTargetDirectory = await copyTemplate(answers); 138 | ctx.templateTargetDirectory = templateTargetDirectory; 139 | }, 140 | }, 141 | { 142 | title: 'Initialize git', 143 | task: (ctx) => initGit(ctx.templateTargetDirectory), 144 | enabled: () => answers.git, 145 | }, 146 | { 147 | title: 'Install dependencies', 148 | task: (ctx) => initInstall(ctx.templateTargetDirectory), 149 | enabled: () => answers.install, 150 | }, 151 | ]; 152 | const listrInstance = new listr(tasks); 153 | await listrInstance.run(); 154 | console.log(chalk.green.bold('bff-service init completed')); 155 | process.exit(0); 156 | } 157 | 158 | async function initGit(targetFolder) { 159 | try { 160 | // Whether to install git 161 | const gitInstallResult = await execa('git', ['--version'], { 162 | cwd: targetFolder, 163 | }); 164 | // exeaca return 165 | /* 166 | { 167 | command: 'git --version', 168 | escapedCommand: 'git --version', 169 | exitCode: 0, 170 | stdout: 'git version 2.18.0', 171 | stderr: '', 172 | all: undefined, 173 | failed: false, 174 | timedOut: false, 175 | isCanceled: false, 176 | killed: false 177 | } 178 | */ 179 | console.log(chalk.green('🐨🐨🐨 ' + 'Welcome to create-bff-service cli,easy to build bff-service~🎉🎉🎉')); 180 | if (gitInstallResult.failed) { 181 | return Promise.reject(new Error('Please install git ')); 182 | } 183 | // git init 184 | const result = await execa('git', ['init'], { 185 | cwd: targetFolder, 186 | }); 187 | if (result.failed) { 188 | return Promise.reject(new Error('Failed to initialize git')); 189 | } 190 | } catch (error) { 191 | console.log('Failed to initialize git', chalk.red.bold('ERROR')); 192 | return Promise.reject(new Error('Failed to initialize git')); 193 | } 194 | return; 195 | } 196 | 197 | async function initInstall(targetFolder) { 198 | // Check if yarn or NPM is installed 199 | // Be aware of the NRM source your company uses 200 | const { stdout } = await projectInstall({ 201 | prefer: 'yarn', 202 | cwd: targetFolder, 203 | }); 204 | console.log(chalk.green(`install 完成,进程信息 ${stdout}`)) 205 | } 206 | 207 | async function copyTemplate(answers) { 208 | const targetDirectory = path.join(process.cwd(), answers.serviceName); 209 | let isExist = await fsExists(targetDirectory); 210 | if (isExist) { 211 | console.log(chalk.red(`❗️Directory [${answers.serviceName}]already exists`)); 212 | return; 213 | } 214 | const source = answers.templateDirectory; 215 | const target = targetDirectory; 216 | // copy template --> target 217 | await copy(source, target, { 218 | clobber: false, 219 | }); 220 | await revisePackageJson(answers, target); 221 | return target; 222 | } 223 | 224 | /** 225 | * replace package.json 226 | * @param {*} answer 227 | * @param {*} templatePath 228 | */ 229 | async function revisePackageJson(answers, targetDirectory) { 230 | // read package.json 231 | const data = fs.readFileSync(`${targetDirectory}/package.json`); 232 | const { port = defaultPort, serviceName, author, version, description } = answers; 233 | let packageJson = data.toString(); 234 | packageJson = serviceName ? packageJson.replace(/bff-service/g, serviceName.trim()) : packageJson; 235 | packageJson = author ? packageJson.replace(/small_koala/g, author.trim()) : packageJson; 236 | packageJson = version ? packageJson.replace(/0.0.0/g, version.trim()) : packageJson; 237 | packageJson = port ? packageJson.replace(/portValue/g, port) : packageJson; 238 | packageJson = description ? packageJson.replace(/descriptionValue/g, description.trim()) : packageJson; 239 | // 写入文件 240 | await fs.writeFileSync(`${targetDirectory}/package.json`,packageJson) 241 | } 242 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@7.12.11": 6 | "integrity" "sha1-9K1DWqJj25NbjxDyxVLSP7cWpj8=" 7 | "resolved" "https://registry.nlark.com/@babel/code-frame/download/@babel/code-frame-7.12.11.tgz" 8 | "version" "7.12.11" 9 | dependencies: 10 | "@babel/highlight" "^7.10.4" 11 | 12 | "@babel/helper-validator-identifier@^7.14.5": 13 | "integrity" "sha1-0PDid8US4Mk4J3+qhaOWjJpEwOg=" 14 | "resolved" "https://registry.nlark.com/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.14.5.tgz" 15 | "version" "7.14.5" 16 | 17 | "@babel/highlight@^7.10.4": 18 | "integrity" "sha1-aGGlLwOWZAUAH2qlNKAaJNmejNk=" 19 | "resolved" "https://registry.nlark.com/@babel/highlight/download/@babel/highlight-7.14.5.tgz" 20 | "version" "7.14.5" 21 | dependencies: 22 | "@babel/helper-validator-identifier" "^7.14.5" 23 | "chalk" "^2.0.0" 24 | "js-tokens" "^4.0.0" 25 | 26 | "@eslint/eslintrc@^0.4.2": 27 | "integrity" "sha1-9j0O8G9cDFfXbEq19j04NcUbAXk=" 28 | "resolved" "https://registry.nlark.com/@eslint/eslintrc/download/@eslint/eslintrc-0.4.2.tgz" 29 | "version" "0.4.2" 30 | dependencies: 31 | "ajv" "^6.12.4" 32 | "debug" "^4.1.1" 33 | "espree" "^7.3.0" 34 | "globals" "^13.9.0" 35 | "ignore" "^4.0.6" 36 | "import-fresh" "^3.2.1" 37 | "js-yaml" "^3.13.1" 38 | "minimatch" "^3.0.4" 39 | "strip-json-comments" "^3.1.1" 40 | 41 | "@nodelib/fs.scandir@2.1.5": 42 | "integrity" "sha1-dhnC6yGyVIP20WdUi0z9WnSIw9U=" 43 | "resolved" "https://registry.nlark.com/@nodelib/fs.scandir/download/@nodelib/fs.scandir-2.1.5.tgz?cache=0&sync_timestamp=1622792706054&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40nodelib%2Ffs.scandir%2Fdownload%2F%40nodelib%2Ffs.scandir-2.1.5.tgz" 44 | "version" "2.1.5" 45 | dependencies: 46 | "@nodelib/fs.stat" "2.0.5" 47 | "run-parallel" "^1.1.9" 48 | 49 | "@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": 50 | "integrity" "sha1-W9Jir5Tp0lvR5xsF3u1Eh2oiLos=" 51 | "resolved" "https://registry.nlark.com/@nodelib/fs.stat/download/@nodelib/fs.stat-2.0.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40nodelib%2Ffs.stat%2Fdownload%2F%40nodelib%2Ffs.stat-2.0.5.tgz" 52 | "version" "2.0.5" 53 | 54 | "@nodelib/fs.walk@^1.2.3": 55 | "integrity" "sha1-lMI9sY7kZT4Smr0m+wb4cKyeHuI=" 56 | "resolved" "https://registry.nlark.com/@nodelib/fs.walk/download/@nodelib/fs.walk-1.2.7.tgz" 57 | "version" "1.2.7" 58 | dependencies: 59 | "@nodelib/fs.scandir" "2.1.5" 60 | "fastq" "^1.6.0" 61 | 62 | "@samverschueren/stream-to-observable@^0.3.0": 63 | "integrity" "sha1-ohEXsZ7pvnDDeewYd1N+8uHGMwE=" 64 | "resolved" "https://registry.npm.taobao.org/@samverschueren/stream-to-observable/download/@samverschueren/stream-to-observable-0.3.1.tgz" 65 | "version" "0.3.1" 66 | dependencies: 67 | "any-observable" "^0.3.0" 68 | 69 | "@types/execa@^0.9.0": 70 | "integrity" "sha1-mwJdJ1XxfoC+r5Now/TzGdiw+5M=" 71 | "resolved" "https://registry.npm.taobao.org/@types/execa/download/@types/execa-0.9.0.tgz" 72 | "version" "0.9.0" 73 | dependencies: 74 | "@types/node" "*" 75 | 76 | "@types/json-schema@^7.0.7": 77 | "integrity" "sha1-mKmTUWyFnrDVxMjwmDF6nqaNua0=" 78 | "resolved" "https://registry.nlark.com/@types/json-schema/download/@types/json-schema-7.0.7.tgz" 79 | "version" "7.0.7" 80 | 81 | "@types/node@*", "@types/node@^11.9.4": 82 | "integrity" "sha1-We1g57DVaQWmVCkujXMnUDTrYoM=" 83 | "resolved" "https://registry.nlark.com/@types/node/download/@types/node-11.15.54.tgz" 84 | "version" "11.15.54" 85 | 86 | "@typescript-eslint/eslint-plugin@^4.23.0": 87 | "integrity" "sha1-GmbwOyZIRDh7633IXh8dQDvRgD8=" 88 | "resolved" "https://registry.nlark.com/@typescript-eslint/eslint-plugin/download/@typescript-eslint/eslint-plugin-4.28.0.tgz" 89 | "version" "4.28.0" 90 | dependencies: 91 | "@typescript-eslint/experimental-utils" "4.28.0" 92 | "@typescript-eslint/scope-manager" "4.28.0" 93 | "debug" "^4.3.1" 94 | "functional-red-black-tree" "^1.0.1" 95 | "regexpp" "^3.1.0" 96 | "semver" "^7.3.5" 97 | "tsutils" "^3.21.0" 98 | 99 | "@typescript-eslint/experimental-utils@4.28.0": 100 | "integrity" "sha1-ExZ+2ZEyBoS9wjWIE1rmIRWzDuA=" 101 | "resolved" "https://registry.nlark.com/@typescript-eslint/experimental-utils/download/@typescript-eslint/experimental-utils-4.28.0.tgz?cache=0&sync_timestamp=1624295801726&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40typescript-eslint%2Fexperimental-utils%2Fdownload%2F%40typescript-eslint%2Fexperimental-utils-4.28.0.tgz" 102 | "version" "4.28.0" 103 | dependencies: 104 | "@types/json-schema" "^7.0.7" 105 | "@typescript-eslint/scope-manager" "4.28.0" 106 | "@typescript-eslint/types" "4.28.0" 107 | "@typescript-eslint/typescript-estree" "4.28.0" 108 | "eslint-scope" "^5.1.1" 109 | "eslint-utils" "^3.0.0" 110 | 111 | "@typescript-eslint/parser@^4.23.0": 112 | "integrity" "sha1-JATBZ1GihhbvOrq3fI5R1oChLKo=" 113 | "resolved" "https://registry.nlark.com/@typescript-eslint/parser/download/@typescript-eslint/parser-4.28.0.tgz" 114 | "version" "4.28.0" 115 | dependencies: 116 | "@typescript-eslint/scope-manager" "4.28.0" 117 | "@typescript-eslint/types" "4.28.0" 118 | "@typescript-eslint/typescript-estree" "4.28.0" 119 | "debug" "^4.3.1" 120 | 121 | "@typescript-eslint/scope-manager@4.28.0": 122 | "integrity" "sha1-ajAJ0qtkow/IoeJXoaMgBn82oM4=" 123 | "resolved" "https://registry.nlark.com/@typescript-eslint/scope-manager/download/@typescript-eslint/scope-manager-4.28.0.tgz?cache=0&sync_timestamp=1624296329538&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40typescript-eslint%2Fscope-manager%2Fdownload%2F%40typescript-eslint%2Fscope-manager-4.28.0.tgz" 124 | "version" "4.28.0" 125 | dependencies: 126 | "@typescript-eslint/types" "4.28.0" 127 | "@typescript-eslint/visitor-keys" "4.28.0" 128 | 129 | "@typescript-eslint/types@4.28.0": 130 | "integrity" "sha1-ozUE4c56xR/DkDX1/m8VB51Nr7A=" 131 | "resolved" "https://registry.nlark.com/@typescript-eslint/types/download/@typescript-eslint/types-4.28.0.tgz" 132 | "version" "4.28.0" 133 | 134 | "@typescript-eslint/typescript-estree@4.28.0": 135 | "integrity" "sha1-5m1OWqLt5m/sivQ0iY/mGvEMcc8=" 136 | "resolved" "https://registry.nlark.com/@typescript-eslint/typescript-estree/download/@typescript-eslint/typescript-estree-4.28.0.tgz" 137 | "version" "4.28.0" 138 | dependencies: 139 | "@typescript-eslint/types" "4.28.0" 140 | "@typescript-eslint/visitor-keys" "4.28.0" 141 | "debug" "^4.3.1" 142 | "globby" "^11.0.3" 143 | "is-glob" "^4.0.1" 144 | "semver" "^7.3.5" 145 | "tsutils" "^3.21.0" 146 | 147 | "@typescript-eslint/visitor-keys@4.28.0": 148 | "integrity" "sha1-JVxnyWbsKUEEFpppOdlvkciolDQ=" 149 | "resolved" "https://registry.nlark.com/@typescript-eslint/visitor-keys/download/@typescript-eslint/visitor-keys-4.28.0.tgz" 150 | "version" "4.28.0" 151 | dependencies: 152 | "@typescript-eslint/types" "4.28.0" 153 | "eslint-visitor-keys" "^2.0.0" 154 | 155 | "acorn-jsx@^5.3.1": 156 | "integrity" "sha1-/IZh4Rt6wVOcR9v+oucrOvNNJns=" 157 | "resolved" "https://registry.npm.taobao.org/acorn-jsx/download/acorn-jsx-5.3.1.tgz" 158 | "version" "5.3.1" 159 | 160 | "acorn@^7.4.0": 161 | "integrity" "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=" 162 | "resolved" "https://registry.nlark.com/acorn/download/acorn-7.4.1.tgz?cache=0&sync_timestamp=1623419734224&other_urls=https%3A%2F%2Fregistry.nlark.com%2Facorn%2Fdownload%2Facorn-7.4.1.tgz" 163 | "version" "7.4.1" 164 | 165 | "ajv@^6.10.0", "ajv@^6.12.4": 166 | "integrity" "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=" 167 | "resolved" "https://registry.nlark.com/ajv/download/ajv-6.12.6.tgz" 168 | "version" "6.12.6" 169 | dependencies: 170 | "fast-deep-equal" "^3.1.1" 171 | "fast-json-stable-stringify" "^2.0.0" 172 | "json-schema-traverse" "^0.4.1" 173 | "uri-js" "^4.2.2" 174 | 175 | "ajv@^8.0.1": 176 | "integrity" "sha1-YMxF2cRqR32A2SxIB22XLDQuVyA=" 177 | "resolved" "https://registry.nlark.com/ajv/download/ajv-8.6.0.tgz" 178 | "version" "8.6.0" 179 | dependencies: 180 | "fast-deep-equal" "^3.1.1" 181 | "json-schema-traverse" "^1.0.0" 182 | "require-from-string" "^2.0.2" 183 | "uri-js" "^4.2.2" 184 | 185 | "ansi-colors@^4.1.1": 186 | "integrity" "sha1-y7muJWv3UK8eqzRPIpqif+lLo0g=" 187 | "resolved" "https://registry.npm.taobao.org/ansi-colors/download/ansi-colors-4.1.1.tgz" 188 | "version" "4.1.1" 189 | 190 | "ansi-escapes@^3.0.0": 191 | "integrity" "sha1-h4C5j/nb9WOBUtHx/lwde0RCl2s=" 192 | "resolved" "https://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-3.2.0.tgz" 193 | "version" "3.2.0" 194 | 195 | "ansi-escapes@^4.2.1": 196 | "integrity" "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==" 197 | "resolved" "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz" 198 | "version" "4.3.1" 199 | dependencies: 200 | "type-fest" "^0.11.0" 201 | 202 | "ansi-regex@^2.0.0": 203 | "integrity" "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" 204 | "resolved" "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz" 205 | "version" "2.1.1" 206 | 207 | "ansi-regex@^3.0.0": 208 | "integrity" "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" 209 | "resolved" "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz" 210 | "version" "3.0.0" 211 | 212 | "ansi-regex@^5.0.0": 213 | "integrity" "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" 214 | "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz" 215 | "version" "5.0.0" 216 | 217 | "ansi-styles@^2.2.1": 218 | "integrity" "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" 219 | "resolved" "https://registry.nlark.com/ansi-styles/download/ansi-styles-2.2.1.tgz" 220 | "version" "2.2.1" 221 | 222 | "ansi-styles@^3.2.1": 223 | "integrity" "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=" 224 | "resolved" "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz" 225 | "version" "3.2.1" 226 | dependencies: 227 | "color-convert" "^1.9.0" 228 | 229 | "ansi-styles@^4.0.0", "ansi-styles@^4.1.0": 230 | "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" 231 | "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" 232 | "version" "4.3.0" 233 | dependencies: 234 | "color-convert" "^2.0.1" 235 | 236 | "any-observable@^0.3.0": 237 | "integrity" "sha1-r5M0deWAamfQ198JDdXovvZdEZs=" 238 | "resolved" "https://registry.npm.taobao.org/any-observable/download/any-observable-0.3.0.tgz" 239 | "version" "0.3.0" 240 | 241 | "argparse@^1.0.7": 242 | "integrity" "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=" 243 | "resolved" "https://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz" 244 | "version" "1.0.10" 245 | dependencies: 246 | "sprintf-js" "~1.0.2" 247 | 248 | "array-union@^2.1.0": 249 | "integrity" "sha1-t5hCCtvrHego2ErNii4j0+/oXo0=" 250 | "resolved" "https://registry.npm.taobao.org/array-union/download/array-union-2.1.0.tgz" 251 | "version" "2.1.0" 252 | 253 | "astral-regex@^2.0.0": 254 | "integrity" "sha1-SDFDxWeu7UeFdZwIZXhtx319LjE=" 255 | "resolved" "https://registry.npm.taobao.org/astral-regex/download/astral-regex-2.0.0.tgz" 256 | "version" "2.0.0" 257 | 258 | "balanced-match@^1.0.0": 259 | "integrity" "sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4=" 260 | "resolved" "http://172.16.20.17:32100/balanced-match/-/balanced-match-1.0.2.tgz" 261 | "version" "1.0.2" 262 | 263 | "brace-expansion@^1.1.7": 264 | "integrity" "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=" 265 | "resolved" "http://172.16.20.17:32100/brace-expansion/-/brace-expansion-1.1.11.tgz" 266 | "version" "1.1.11" 267 | dependencies: 268 | "balanced-match" "^1.0.0" 269 | "concat-map" "0.0.1" 270 | 271 | "braces@^3.0.1": 272 | "integrity" "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=" 273 | "resolved" "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz" 274 | "version" "3.0.2" 275 | dependencies: 276 | "fill-range" "^7.0.1" 277 | 278 | "callsites@^3.0.0": 279 | "integrity" "sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M=" 280 | "resolved" "https://registry.npm.taobao.org/callsites/download/callsites-3.1.0.tgz" 281 | "version" "3.1.0" 282 | 283 | "chalk@^1.0.0": 284 | "integrity" "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=" 285 | "resolved" "https://registry.nlark.com/chalk/download/chalk-1.1.3.tgz" 286 | "version" "1.1.3" 287 | dependencies: 288 | "ansi-styles" "^2.2.1" 289 | "escape-string-regexp" "^1.0.2" 290 | "has-ansi" "^2.0.0" 291 | "strip-ansi" "^3.0.0" 292 | "supports-color" "^2.0.0" 293 | 294 | "chalk@^1.1.3": 295 | "integrity" "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=" 296 | "resolved" "https://registry.nlark.com/chalk/download/chalk-1.1.3.tgz" 297 | "version" "1.1.3" 298 | dependencies: 299 | "ansi-styles" "^2.2.1" 300 | "escape-string-regexp" "^1.0.2" 301 | "has-ansi" "^2.0.0" 302 | "strip-ansi" "^3.0.0" 303 | "supports-color" "^2.0.0" 304 | 305 | "chalk@^2.0.0": 306 | "integrity" "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=" 307 | "resolved" "https://registry.nlark.com/chalk/download/chalk-2.4.2.tgz" 308 | "version" "2.4.2" 309 | dependencies: 310 | "ansi-styles" "^3.2.1" 311 | "escape-string-regexp" "^1.0.5" 312 | "supports-color" "^5.3.0" 313 | 314 | "chalk@^2.4.1": 315 | "integrity" "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=" 316 | "resolved" "https://registry.nlark.com/chalk/download/chalk-2.4.2.tgz" 317 | "version" "2.4.2" 318 | dependencies: 319 | "ansi-styles" "^3.2.1" 320 | "escape-string-regexp" "^1.0.5" 321 | "supports-color" "^5.3.0" 322 | 323 | "chalk@^4.0.0", "chalk@^4.1.0": 324 | "integrity" "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==" 325 | "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz" 326 | "version" "4.1.0" 327 | dependencies: 328 | "ansi-styles" "^4.1.0" 329 | "supports-color" "^7.1.0" 330 | 331 | "chardet@^0.7.0": 332 | "integrity" "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" 333 | "resolved" "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" 334 | "version" "0.7.0" 335 | 336 | "cli-cursor@^2.0.0": 337 | "integrity" "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=" 338 | "resolved" "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-2.1.0.tgz" 339 | "version" "2.1.0" 340 | dependencies: 341 | "restore-cursor" "^2.0.0" 342 | 343 | "cli-cursor@^2.1.0": 344 | "integrity" "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=" 345 | "resolved" "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-2.1.0.tgz" 346 | "version" "2.1.0" 347 | dependencies: 348 | "restore-cursor" "^2.0.0" 349 | 350 | "cli-cursor@^3.1.0": 351 | "integrity" "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==" 352 | "resolved" "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" 353 | "version" "3.1.0" 354 | dependencies: 355 | "restore-cursor" "^3.1.0" 356 | 357 | "cli-truncate@^0.2.1": 358 | "integrity" "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=" 359 | "resolved" "https://registry.npm.taobao.org/cli-truncate/download/cli-truncate-0.2.1.tgz" 360 | "version" "0.2.1" 361 | dependencies: 362 | "slice-ansi" "0.0.4" 363 | "string-width" "^1.0.1" 364 | 365 | "cli-width@^3.0.0": 366 | "integrity" "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" 367 | "resolved" "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" 368 | "version" "3.0.0" 369 | 370 | "code-point-at@^1.0.0": 371 | "integrity" "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" 372 | "resolved" "https://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz" 373 | "version" "1.1.0" 374 | 375 | "color-convert@^1.9.0": 376 | "integrity" "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=" 377 | "resolved" "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz" 378 | "version" "1.9.3" 379 | dependencies: 380 | "color-name" "1.1.3" 381 | 382 | "color-convert@^2.0.1": 383 | "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" 384 | "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" 385 | "version" "2.0.1" 386 | dependencies: 387 | "color-name" "~1.1.4" 388 | 389 | "color-name@~1.1.4": 390 | "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 391 | "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" 392 | "version" "1.1.4" 393 | 394 | "color-name@1.1.3": 395 | "integrity" "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 396 | "resolved" "https://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz" 397 | "version" "1.1.3" 398 | 399 | "commander@^7.2.0": 400 | "integrity" "sha1-o2y1fQtQHOEI5NIFWaFQo5HZerc=" 401 | "resolved" "https://registry.nlark.com/commander/download/commander-7.2.0.tgz" 402 | "version" "7.2.0" 403 | 404 | "concat-map@0.0.1": 405 | "integrity" "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 406 | "resolved" "http://172.16.20.17:32100/concat-map/-/concat-map-0.0.1.tgz" 407 | "version" "0.0.1" 408 | 409 | "cross-spawn@^6.0.0": 410 | "integrity" "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=" 411 | "resolved" "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz" 412 | "version" "6.0.5" 413 | dependencies: 414 | "nice-try" "^1.0.4" 415 | "path-key" "^2.0.1" 416 | "semver" "^5.5.0" 417 | "shebang-command" "^1.2.0" 418 | "which" "^1.2.9" 419 | 420 | "cross-spawn@^7.0.2", "cross-spawn@^7.0.3": 421 | "integrity" "sha1-9zqFudXUHQRVUcF34ogtSshXKKY=" 422 | "resolved" "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-7.0.3.tgz" 423 | "version" "7.0.3" 424 | dependencies: 425 | "path-key" "^3.1.0" 426 | "shebang-command" "^2.0.0" 427 | "which" "^2.0.1" 428 | 429 | "date-fns@^1.27.2": 430 | "integrity" "sha1-LnG/CxGRU9u0zE6I2epaz7UNwFw=" 431 | "resolved" "https://registry.nlark.com/date-fns/download/date-fns-1.30.1.tgz" 432 | "version" "1.30.1" 433 | 434 | "debug@^4.0.1", "debug@^4.1.1", "debug@^4.3.1": 435 | "integrity" "sha1-8NIpxQXgxtjEmsVT0bE9wYP2su4=" 436 | "resolved" "https://registry.npm.taobao.org/debug/download/debug-4.3.1.tgz?cache=0&sync_timestamp=1607566551397&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.3.1.tgz" 437 | "version" "4.3.1" 438 | dependencies: 439 | "ms" "2.1.2" 440 | 441 | "deep-is@^0.1.3": 442 | "integrity" "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" 443 | "resolved" "https://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz" 444 | "version" "0.1.3" 445 | 446 | "dir-glob@^3.0.1": 447 | "integrity" "sha1-Vtv3PZkqSpO6FYT0U0Bj/S5BcX8=" 448 | "resolved" "https://registry.npm.taobao.org/dir-glob/download/dir-glob-3.0.1.tgz" 449 | "version" "3.0.1" 450 | dependencies: 451 | "path-type" "^4.0.0" 452 | 453 | "doctrine@^3.0.0": 454 | "integrity" "sha1-rd6+rXKmV023g2OdyHoSF3OXOWE=" 455 | "resolved" "https://registry.npm.taobao.org/doctrine/download/doctrine-3.0.0.tgz" 456 | "version" "3.0.0" 457 | dependencies: 458 | "esutils" "^2.0.2" 459 | 460 | "elegant-spinner@^1.0.1": 461 | "integrity" "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=" 462 | "resolved" "https://registry.npm.taobao.org/elegant-spinner/download/elegant-spinner-1.0.1.tgz" 463 | "version" "1.0.1" 464 | 465 | "emoji-regex@^8.0.0": 466 | "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 467 | "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" 468 | "version" "8.0.0" 469 | 470 | "end-of-stream@^1.1.0": 471 | "integrity" "sha1-WuZKX0UFe682JuwU2gyl5LJDHrA=" 472 | "resolved" "https://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.4.tgz" 473 | "version" "1.4.4" 474 | dependencies: 475 | "once" "^1.4.0" 476 | 477 | "enquirer@^2.3.5": 478 | "integrity" "sha1-Kn/l3WNKHkElqXXsmU/1RW3Dc00=" 479 | "resolved" "https://registry.npm.taobao.org/enquirer/download/enquirer-2.3.6.tgz?cache=0&sync_timestamp=1593693195602&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fenquirer%2Fdownload%2Fenquirer-2.3.6.tgz" 480 | "version" "2.3.6" 481 | dependencies: 482 | "ansi-colors" "^4.1.1" 483 | 484 | "escape-string-regexp@^1.0.2", "escape-string-regexp@^1.0.5": 485 | "integrity" "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 486 | "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" 487 | "version" "1.0.5" 488 | 489 | "escape-string-regexp@^4.0.0": 490 | "integrity" "sha1-FLqDpdNz49MR5a/KKc9b+tllvzQ=" 491 | "resolved" "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-4.0.0.tgz?cache=0&sync_timestamp=1618677355234&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescape-string-regexp%2Fdownload%2Fescape-string-regexp-4.0.0.tgz" 492 | "version" "4.0.0" 493 | 494 | "eslint-config-prettier@^6.11.0": 495 | "integrity" "sha1-f5P2y31FqS8VN6cOzAY2bhrG/tk=" 496 | "resolved" "https://registry.nlark.com/eslint-config-prettier/download/eslint-config-prettier-6.15.0.tgz?cache=0&sync_timestamp=1619270596373&other_urls=https%3A%2F%2Fregistry.nlark.com%2Feslint-config-prettier%2Fdownload%2Feslint-config-prettier-6.15.0.tgz" 497 | "version" "6.15.0" 498 | dependencies: 499 | "get-stdin" "^6.0.0" 500 | 501 | "eslint-plugin-prettier@^3.1.4": 502 | "integrity" "sha1-zbrTvx29Kxd+mCVzf+Y7R2oI8Mc=" 503 | "resolved" "https://registry.npm.taobao.org/eslint-plugin-prettier/download/eslint-plugin-prettier-3.4.0.tgz" 504 | "version" "3.4.0" 505 | dependencies: 506 | "prettier-linter-helpers" "^1.0.0" 507 | 508 | "eslint-scope@^5.1.1": 509 | "integrity" "sha1-54blmmbLkrP2wfsNUIqrF0hI9Iw=" 510 | "resolved" "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-5.1.1.tgz?cache=0&sync_timestamp=1599933677754&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-5.1.1.tgz" 511 | "version" "5.1.1" 512 | dependencies: 513 | "esrecurse" "^4.3.0" 514 | "estraverse" "^4.1.1" 515 | 516 | "eslint-utils@^2.1.0": 517 | "integrity" "sha1-0t5eA0JOcH3BDHQGjd7a5wh0Gyc=" 518 | "resolved" "https://registry.nlark.com/eslint-utils/download/eslint-utils-2.1.0.tgz" 519 | "version" "2.1.0" 520 | dependencies: 521 | "eslint-visitor-keys" "^1.1.0" 522 | 523 | "eslint-utils@^3.0.0": 524 | "integrity" "sha1-iuuvrOc0W7M1WdsKHxOh0tSMNnI=" 525 | "resolved" "https://registry.nlark.com/eslint-utils/download/eslint-utils-3.0.0.tgz" 526 | "version" "3.0.0" 527 | dependencies: 528 | "eslint-visitor-keys" "^2.0.0" 529 | 530 | "eslint-visitor-keys@^1.1.0": 531 | "integrity" "sha1-MOvR73wv3/AcOk8VEESvJfqwUj4=" 532 | "resolved" "https://registry.nlark.com/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz" 533 | "version" "1.3.0" 534 | 535 | "eslint-visitor-keys@^1.3.0": 536 | "integrity" "sha1-MOvR73wv3/AcOk8VEESvJfqwUj4=" 537 | "resolved" "https://registry.nlark.com/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz" 538 | "version" "1.3.0" 539 | 540 | "eslint-visitor-keys@^2.0.0": 541 | "integrity" "sha1-9lMoJZMFknOSyTjtROsKXJsr0wM=" 542 | "resolved" "https://registry.nlark.com/eslint-visitor-keys/download/eslint-visitor-keys-2.1.0.tgz" 543 | "version" "2.1.0" 544 | 545 | "eslint@^7.9.0": 546 | "integrity" "sha1-7ip2SPLnKUheTQvWOD7B3qvIs8A=" 547 | "resolved" "https://registry.nlark.com/eslint/download/eslint-7.29.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Feslint%2Fdownload%2Feslint-7.29.0.tgz" 548 | "version" "7.29.0" 549 | dependencies: 550 | "@babel/code-frame" "7.12.11" 551 | "@eslint/eslintrc" "^0.4.2" 552 | "ajv" "^6.10.0" 553 | "chalk" "^4.0.0" 554 | "cross-spawn" "^7.0.2" 555 | "debug" "^4.0.1" 556 | "doctrine" "^3.0.0" 557 | "enquirer" "^2.3.5" 558 | "escape-string-regexp" "^4.0.0" 559 | "eslint-scope" "^5.1.1" 560 | "eslint-utils" "^2.1.0" 561 | "eslint-visitor-keys" "^2.0.0" 562 | "espree" "^7.3.1" 563 | "esquery" "^1.4.0" 564 | "esutils" "^2.0.2" 565 | "fast-deep-equal" "^3.1.3" 566 | "file-entry-cache" "^6.0.1" 567 | "functional-red-black-tree" "^1.0.1" 568 | "glob-parent" "^5.1.2" 569 | "globals" "^13.6.0" 570 | "ignore" "^4.0.6" 571 | "import-fresh" "^3.0.0" 572 | "imurmurhash" "^0.1.4" 573 | "is-glob" "^4.0.0" 574 | "js-yaml" "^3.13.1" 575 | "json-stable-stringify-without-jsonify" "^1.0.1" 576 | "levn" "^0.4.1" 577 | "lodash.merge" "^4.6.2" 578 | "minimatch" "^3.0.4" 579 | "natural-compare" "^1.4.0" 580 | "optionator" "^0.9.1" 581 | "progress" "^2.0.0" 582 | "regexpp" "^3.1.0" 583 | "semver" "^7.2.1" 584 | "strip-ansi" "^6.0.0" 585 | "strip-json-comments" "^3.1.0" 586 | "table" "^6.0.9" 587 | "text-table" "^0.2.0" 588 | "v8-compile-cache" "^2.0.3" 589 | 590 | "esm@^3.2.25": 591 | "integrity" "sha1-NCwYwp1WFXaIulzjH4Qx+7eVzBA=" 592 | "resolved" "https://registry.npm.taobao.org/esm/download/esm-3.2.25.tgz" 593 | "version" "3.2.25" 594 | 595 | "espree@^7.3.0", "espree@^7.3.1": 596 | "integrity" "sha1-8t8zC3Usb1UBn4vYm3ZgA5wbu7Y=" 597 | "resolved" "https://registry.nlark.com/espree/download/espree-7.3.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fespree%2Fdownload%2Fespree-7.3.1.tgz" 598 | "version" "7.3.1" 599 | dependencies: 600 | "acorn" "^7.4.0" 601 | "acorn-jsx" "^5.3.1" 602 | "eslint-visitor-keys" "^1.3.0" 603 | 604 | "esprima@^4.0.0": 605 | "integrity" "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=" 606 | "resolved" "https://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz" 607 | "version" "4.0.1" 608 | 609 | "esquery@^1.4.0": 610 | "integrity" "sha1-IUj/w4uC6McFff7UhCWz5h8PJKU=" 611 | "resolved" "https://registry.npm.taobao.org/esquery/download/esquery-1.4.0.tgz" 612 | "version" "1.4.0" 613 | dependencies: 614 | "estraverse" "^5.1.0" 615 | 616 | "esrecurse@^4.3.0": 617 | "integrity" "sha1-eteWTWeauyi+5yzsY3WLHF0smSE=" 618 | "resolved" "https://registry.npm.taobao.org/esrecurse/download/esrecurse-4.3.0.tgz" 619 | "version" "4.3.0" 620 | dependencies: 621 | "estraverse" "^5.2.0" 622 | 623 | "estraverse@^4.1.1": 624 | "integrity" "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0=" 625 | "resolved" "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz" 626 | "version" "4.3.0" 627 | 628 | "estraverse@^5.1.0": 629 | "integrity" "sha1-MH30JUfmzHMk088DwVXVzbjFOIA=" 630 | "resolved" "https://registry.npm.taobao.org/estraverse/download/estraverse-5.2.0.tgz" 631 | "version" "5.2.0" 632 | 633 | "estraverse@^5.2.0": 634 | "integrity" "sha1-MH30JUfmzHMk088DwVXVzbjFOIA=" 635 | "resolved" "https://registry.npm.taobao.org/estraverse/download/estraverse-5.2.0.tgz" 636 | "version" "5.2.0" 637 | 638 | "esutils@^2.0.2": 639 | "integrity" "sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q=" 640 | "resolved" "https://registry.npm.taobao.org/esutils/download/esutils-2.0.3.tgz" 641 | "version" "2.0.3" 642 | 643 | "execa@^1.0.0": 644 | "integrity" "sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg=" 645 | "resolved" "https://registry.nlark.com/execa/download/execa-1.0.0.tgz?cache=0&sync_timestamp=1622825859616&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fexeca%2Fdownload%2Fexeca-1.0.0.tgz" 646 | "version" "1.0.0" 647 | dependencies: 648 | "cross-spawn" "^6.0.0" 649 | "get-stream" "^4.0.0" 650 | "is-stream" "^1.1.0" 651 | "npm-run-path" "^2.0.0" 652 | "p-finally" "^1.0.0" 653 | "signal-exit" "^3.0.0" 654 | "strip-eof" "^1.0.0" 655 | 656 | "execa@^5.1.1": 657 | "integrity" "sha1-+ArZy/Qpj3vR1MlVXCHpN0HEEd0=" 658 | "resolved" "https://registry.nlark.com/execa/download/execa-5.1.1.tgz?cache=0&sync_timestamp=1622825859616&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fexeca%2Fdownload%2Fexeca-5.1.1.tgz" 659 | "version" "5.1.1" 660 | dependencies: 661 | "cross-spawn" "^7.0.3" 662 | "get-stream" "^6.0.0" 663 | "human-signals" "^2.1.0" 664 | "is-stream" "^2.0.0" 665 | "merge-stream" "^2.0.0" 666 | "npm-run-path" "^4.0.1" 667 | "onetime" "^5.1.2" 668 | "signal-exit" "^3.0.3" 669 | "strip-final-newline" "^2.0.0" 670 | 671 | "external-editor@^3.0.3": 672 | "integrity" "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==" 673 | "resolved" "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" 674 | "version" "3.1.0" 675 | dependencies: 676 | "chardet" "^0.7.0" 677 | "iconv-lite" "^0.4.24" 678 | "tmp" "^0.0.33" 679 | 680 | "fast-deep-equal@^3.1.1", "fast-deep-equal@^3.1.3": 681 | "integrity" "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=" 682 | "resolved" "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz" 683 | "version" "3.1.3" 684 | 685 | "fast-diff@^1.1.2": 686 | "integrity" "sha1-c+4RmC2Gyq95WYKNUZz+kn+sXwM=" 687 | "resolved" "https://registry.npm.taobao.org/fast-diff/download/fast-diff-1.2.0.tgz" 688 | "version" "1.2.0" 689 | 690 | "fast-glob@^3.1.1": 691 | "integrity" "sha1-eTmvKmVt55pPGQGQPuityqfLlmE=" 692 | "resolved" "https://registry.npm.taobao.org/fast-glob/download/fast-glob-3.2.5.tgz?cache=0&sync_timestamp=1610876576133&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-glob%2Fdownload%2Ffast-glob-3.2.5.tgz" 693 | "version" "3.2.5" 694 | dependencies: 695 | "@nodelib/fs.stat" "^2.0.2" 696 | "@nodelib/fs.walk" "^1.2.3" 697 | "glob-parent" "^5.1.0" 698 | "merge2" "^1.3.0" 699 | "micromatch" "^4.0.2" 700 | "picomatch" "^2.2.1" 701 | 702 | "fast-json-stable-stringify@^2.0.0": 703 | "integrity" "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM=" 704 | "resolved" "https://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz?cache=0&sync_timestamp=1576340291001&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-json-stable-stringify%2Fdownload%2Ffast-json-stable-stringify-2.1.0.tgz" 705 | "version" "2.1.0" 706 | 707 | "fast-levenshtein@^2.0.6": 708 | "integrity" "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" 709 | "resolved" "https://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz" 710 | "version" "2.0.6" 711 | 712 | "fastq@^1.6.0": 713 | "integrity" "sha1-u5+5VaBxMKkY62PB9RYcwypdCFg=" 714 | "resolved" "https://registry.npm.taobao.org/fastq/download/fastq-1.11.0.tgz?cache=0&sync_timestamp=1614183553351&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffastq%2Fdownload%2Ffastq-1.11.0.tgz" 715 | "version" "1.11.0" 716 | dependencies: 717 | "reusify" "^1.0.4" 718 | 719 | "figures@^1.7.0": 720 | "integrity" "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=" 721 | "resolved" "https://registry.nlark.com/figures/download/figures-1.7.0.tgz" 722 | "version" "1.7.0" 723 | dependencies: 724 | "escape-string-regexp" "^1.0.5" 725 | "object-assign" "^4.1.0" 726 | 727 | "figures@^2.0.0": 728 | "integrity" "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=" 729 | "resolved" "https://registry.nlark.com/figures/download/figures-2.0.0.tgz" 730 | "version" "2.0.0" 731 | dependencies: 732 | "escape-string-regexp" "^1.0.5" 733 | 734 | "figures@^3.0.0": 735 | "integrity" "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==" 736 | "resolved" "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" 737 | "version" "3.2.0" 738 | dependencies: 739 | "escape-string-regexp" "^1.0.5" 740 | 741 | "file-entry-cache@^6.0.1": 742 | "integrity" "sha1-IRst2WWcsDlLBz5zI6w8kz1SICc=" 743 | "resolved" "https://registry.npm.taobao.org/file-entry-cache/download/file-entry-cache-6.0.1.tgz?cache=0&sync_timestamp=1613794272556&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-entry-cache%2Fdownload%2Ffile-entry-cache-6.0.1.tgz" 744 | "version" "6.0.1" 745 | dependencies: 746 | "flat-cache" "^3.0.4" 747 | 748 | "fill-range@^7.0.1": 749 | "integrity" "sha1-GRmmp8df44ssfHflGYU12prN2kA=" 750 | "resolved" "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz" 751 | "version" "7.0.1" 752 | dependencies: 753 | "to-regex-range" "^5.0.1" 754 | 755 | "flat-cache@^3.0.4": 756 | "integrity" "sha1-YbAzgwKy/p+Vfcwy/CqH8cMEixE=" 757 | "resolved" "https://registry.npm.taobao.org/flat-cache/download/flat-cache-3.0.4.tgz?cache=0&sync_timestamp=1604831886493&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fflat-cache%2Fdownload%2Fflat-cache-3.0.4.tgz" 758 | "version" "3.0.4" 759 | dependencies: 760 | "flatted" "^3.1.0" 761 | "rimraf" "^3.0.2" 762 | 763 | "flatted@^3.1.0": 764 | "integrity" "sha1-xLSJ6ACW2d8d/JfHmHGup8YXxGk=" 765 | "resolved" "https://registry.npm.taobao.org/flatted/download/flatted-3.1.1.tgz?cache=0&sync_timestamp=1611059488477&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fflatted%2Fdownload%2Fflatted-3.1.1.tgz" 766 | "version" "3.1.1" 767 | 768 | "fs.realpath@^1.0.0": 769 | "integrity" "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 770 | "resolved" "http://172.16.20.17:32100/fs.realpath/-/fs.realpath-1.0.0.tgz" 771 | "version" "1.0.0" 772 | 773 | "function-bind@^1.1.1": 774 | "integrity" "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=" 775 | "resolved" "http://172.16.20.17:32100/function-bind/-/function-bind-1.1.1.tgz" 776 | "version" "1.1.1" 777 | 778 | "functional-red-black-tree@^1.0.1": 779 | "integrity" "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" 780 | "resolved" "https://registry.npm.taobao.org/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffunctional-red-black-tree%2Fdownload%2Ffunctional-red-black-tree-1.0.1.tgz" 781 | "version" "1.0.1" 782 | 783 | "get-stdin@^6.0.0": 784 | "integrity" "sha1-ngm/cSs2CrkiXoEgSPcf3pyJZXs=" 785 | "resolved" "https://registry.npm.taobao.org/get-stdin/download/get-stdin-6.0.0.tgz" 786 | "version" "6.0.0" 787 | 788 | "get-stream@^4.0.0": 789 | "integrity" "sha1-wbJVV189wh1Zv8ec09K0axw6VLU=" 790 | "resolved" "https://registry.npm.taobao.org/get-stream/download/get-stream-4.1.0.tgz?cache=0&sync_timestamp=1618462652134&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-4.1.0.tgz" 791 | "version" "4.1.0" 792 | dependencies: 793 | "pump" "^3.0.0" 794 | 795 | "get-stream@^6.0.0": 796 | "integrity" "sha1-omLY7vZ6ztV8KFKtYWdSakPL97c=" 797 | "resolved" "https://registry.npm.taobao.org/get-stream/download/get-stream-6.0.1.tgz?cache=0&sync_timestamp=1618462652134&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-6.0.1.tgz" 798 | "version" "6.0.1" 799 | 800 | "glob-parent@^5.1.0", "glob-parent@^5.1.2": 801 | "integrity" "sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=" 802 | "resolved" "https://registry.nlark.com/glob-parent/download/glob-parent-5.1.2.tgz?cache=0&sync_timestamp=1620073303944&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob-parent%2Fdownload%2Fglob-parent-5.1.2.tgz" 803 | "version" "5.1.2" 804 | dependencies: 805 | "is-glob" "^4.0.1" 806 | 807 | "glob@^7.0.0", "glob@^7.1.3": 808 | "integrity" "sha1-Oxk+kjPwHULQs/eClLvutBj5SpA=" 809 | "resolved" "http://172.16.20.17:32100/glob/-/glob-7.1.7.tgz" 810 | "version" "7.1.7" 811 | dependencies: 812 | "fs.realpath" "^1.0.0" 813 | "inflight" "^1.0.4" 814 | "inherits" "2" 815 | "minimatch" "^3.0.4" 816 | "once" "^1.3.0" 817 | "path-is-absolute" "^1.0.0" 818 | 819 | "globals@^13.6.0", "globals@^13.9.0": 820 | "integrity" "sha1-S/K/Y1szShc/sdr3xeayGOzcBss=" 821 | "resolved" "https://registry.nlark.com/globals/download/globals-13.9.0.tgz" 822 | "version" "13.9.0" 823 | dependencies: 824 | "type-fest" "^0.20.2" 825 | 826 | "globby@^11.0.3": 827 | "integrity" "sha1-LLr/d8Lypi5x6bKBOme5ejowAaU=" 828 | "resolved" "https://registry.nlark.com/globby/download/globby-11.0.4.tgz" 829 | "version" "11.0.4" 830 | dependencies: 831 | "array-union" "^2.1.0" 832 | "dir-glob" "^3.0.1" 833 | "fast-glob" "^3.1.1" 834 | "ignore" "^5.1.4" 835 | "merge2" "^1.3.0" 836 | "slash" "^3.0.0" 837 | 838 | "has-ansi@^2.0.0": 839 | "integrity" "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=" 840 | "resolved" "https://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz?cache=0&sync_timestamp=1618558151426&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-ansi%2Fdownload%2Fhas-ansi-2.0.0.tgz" 841 | "version" "2.0.0" 842 | dependencies: 843 | "ansi-regex" "^2.0.0" 844 | 845 | "has-flag@^3.0.0": 846 | "integrity" "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" 847 | "resolved" "https://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz" 848 | "version" "3.0.0" 849 | 850 | "has-flag@^4.0.0": 851 | "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" 852 | "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" 853 | "version" "4.0.0" 854 | 855 | "has@^1.0.3": 856 | "integrity" "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=" 857 | "resolved" "http://172.16.20.17:32100/has/-/has-1.0.3.tgz" 858 | "version" "1.0.3" 859 | dependencies: 860 | "function-bind" "^1.1.1" 861 | 862 | "human-signals@^2.1.0": 863 | "integrity" "sha1-3JH8ukLk0G5Kuu0zs+ejwC9RTqA=" 864 | "resolved" "https://registry.nlark.com/human-signals/download/human-signals-2.1.0.tgz" 865 | "version" "2.1.0" 866 | 867 | "iconv-lite@^0.4.24": 868 | "integrity" "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==" 869 | "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" 870 | "version" "0.4.24" 871 | dependencies: 872 | "safer-buffer" ">= 2.1.2 < 3" 873 | 874 | "ignore@^4.0.6": 875 | "integrity" "sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw=" 876 | "resolved" "https://registry.npm.taobao.org/ignore/download/ignore-4.0.6.tgz?cache=0&sync_timestamp=1590809380232&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-4.0.6.tgz" 877 | "version" "4.0.6" 878 | 879 | "ignore@^5.1.4": 880 | "integrity" "sha1-8VCotQo0KJsz4i9YiavU2AFvDlc=" 881 | "resolved" "https://registry.npm.taobao.org/ignore/download/ignore-5.1.8.tgz?cache=0&sync_timestamp=1590809380232&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-5.1.8.tgz" 882 | "version" "5.1.8" 883 | 884 | "import-fresh@^3.0.0", "import-fresh@^3.2.1": 885 | "integrity" "sha1-NxYsJfy566oublPVtNiM4X2eDCs=" 886 | "resolved" "https://registry.npm.taobao.org/import-fresh/download/import-fresh-3.3.0.tgz?cache=0&sync_timestamp=1608469532269&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fimport-fresh%2Fdownload%2Fimport-fresh-3.3.0.tgz" 887 | "version" "3.3.0" 888 | dependencies: 889 | "parent-module" "^1.0.0" 890 | "resolve-from" "^4.0.0" 891 | 892 | "imurmurhash@^0.1.4": 893 | "integrity" "sha1-khi5srkoojixPcT7a21XbyMUU+o=" 894 | "resolved" "https://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz" 895 | "version" "0.1.4" 896 | 897 | "indent-string@^3.0.0": 898 | "integrity" "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=" 899 | "resolved" "https://registry.npm.taobao.org/indent-string/download/indent-string-3.2.0.tgz?cache=0&sync_timestamp=1618679442183&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Findent-string%2Fdownload%2Findent-string-3.2.0.tgz" 900 | "version" "3.2.0" 901 | 902 | "inflight@^1.0.4": 903 | "integrity" "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=" 904 | "resolved" "http://172.16.20.17:32100/inflight/-/inflight-1.0.6.tgz" 905 | "version" "1.0.6" 906 | dependencies: 907 | "once" "^1.3.0" 908 | "wrappy" "1" 909 | 910 | "inherits@2": 911 | "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 912 | "resolved" "http://172.16.20.17:32100/inherits/-/inherits-2.0.4.tgz" 913 | "version" "2.0.4" 914 | 915 | "inquirer@^8.0.0": 916 | "integrity" "sha512-ON8pEJPPCdyjxj+cxsYRe6XfCJepTxANdNnTebsTuQgXpRyZRRT9t4dJwjRubgmvn20CLSEnozRUayXyM9VTXA==" 917 | "resolved" "https://registry.npmjs.org/inquirer/-/inquirer-8.0.0.tgz" 918 | "version" "8.0.0" 919 | dependencies: 920 | "ansi-escapes" "^4.2.1" 921 | "chalk" "^4.1.0" 922 | "cli-cursor" "^3.1.0" 923 | "cli-width" "^3.0.0" 924 | "external-editor" "^3.0.3" 925 | "figures" "^3.0.0" 926 | "lodash" "^4.17.21" 927 | "mute-stream" "0.0.8" 928 | "run-async" "^2.4.0" 929 | "rxjs" "^6.6.6" 930 | "string-width" "^4.1.0" 931 | "strip-ansi" "^6.0.0" 932 | "through" "^2.3.6" 933 | 934 | "interpret@^1.0.0": 935 | "integrity" "sha1-Zlq4vE2iendKQFhOgS4+D6RbGh4=" 936 | "resolved" "http://172.16.20.17:32100/interpret/-/interpret-1.4.0.tgz" 937 | "version" "1.4.0" 938 | 939 | "is-core-module@^2.2.0": 940 | "integrity" "sha1-jp/I4VAnsBFBgCbpjw5vTYYwXME=" 941 | "resolved" "http://172.16.20.17:32100/is-core-module/-/is-core-module-2.4.0.tgz" 942 | "version" "2.4.0" 943 | dependencies: 944 | "has" "^1.0.3" 945 | 946 | "is-extglob@^2.1.1": 947 | "integrity" "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" 948 | "resolved" "https://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz" 949 | "version" "2.1.1" 950 | 951 | "is-fullwidth-code-point@^1.0.0": 952 | "integrity" "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=" 953 | "resolved" "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz" 954 | "version" "1.0.0" 955 | dependencies: 956 | "number-is-nan" "^1.0.0" 957 | 958 | "is-fullwidth-code-point@^2.0.0": 959 | "integrity" "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" 960 | "resolved" "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz" 961 | "version" "2.0.0" 962 | 963 | "is-fullwidth-code-point@^3.0.0": 964 | "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" 965 | "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" 966 | "version" "3.0.0" 967 | 968 | "is-glob@^4.0.0", "is-glob@^4.0.1": 969 | "integrity" "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=" 970 | "resolved" "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz" 971 | "version" "4.0.1" 972 | dependencies: 973 | "is-extglob" "^2.1.1" 974 | 975 | "is-number@^7.0.0": 976 | "integrity" "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=" 977 | "resolved" "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz" 978 | "version" "7.0.0" 979 | 980 | "is-observable@^1.1.0": 981 | "integrity" "sha1-s+mGyPRN6VCGfKtUA/WjRlAFl14=" 982 | "resolved" "https://registry.npm.taobao.org/is-observable/download/is-observable-1.1.0.tgz" 983 | "version" "1.1.0" 984 | dependencies: 985 | "symbol-observable" "^1.1.0" 986 | 987 | "is-promise@^2.1.0": 988 | "integrity" "sha1-OauVnMv5p3TPB597QMeib3YxNfE=" 989 | "resolved" "https://registry.npm.taobao.org/is-promise/download/is-promise-2.2.2.tgz" 990 | "version" "2.2.2" 991 | 992 | "is-stream@^1.1.0": 993 | "integrity" "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" 994 | "resolved" "https://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz" 995 | "version" "1.1.0" 996 | 997 | "is-stream@^2.0.0": 998 | "integrity" "sha1-venDJoDW+uBBKdasnZIc54FfeOM=" 999 | "resolved" "https://registry.npm.taobao.org/is-stream/download/is-stream-2.0.0.tgz" 1000 | "version" "2.0.0" 1001 | 1002 | "isexe@^2.0.0": 1003 | "integrity" "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" 1004 | "resolved" "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz" 1005 | "version" "2.0.0" 1006 | 1007 | "js-tokens@^4.0.0": 1008 | "integrity" "sha1-GSA/tZmR35jjoocFDUZHzerzJJk=" 1009 | "resolved" "https://registry.nlark.com/js-tokens/download/js-tokens-4.0.0.tgz?cache=0&sync_timestamp=1619345098261&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjs-tokens%2Fdownload%2Fjs-tokens-4.0.0.tgz" 1010 | "version" "4.0.0" 1011 | 1012 | "js-yaml@^3.13.1": 1013 | "integrity" "sha1-2ugS/bOCX6MGYJqHFzg8UMNqBTc=" 1014 | "resolved" "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.14.1.tgz?cache=0&sync_timestamp=1618435151523&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-yaml%2Fdownload%2Fjs-yaml-3.14.1.tgz" 1015 | "version" "3.14.1" 1016 | dependencies: 1017 | "argparse" "^1.0.7" 1018 | "esprima" "^4.0.0" 1019 | 1020 | "json-schema-traverse@^0.4.1": 1021 | "integrity" "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=" 1022 | "resolved" "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz" 1023 | "version" "0.4.1" 1024 | 1025 | "json-schema-traverse@^1.0.0": 1026 | "integrity" "sha1-rnvLNlard6c7pcSb9lTzjmtoYOI=" 1027 | "resolved" "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-1.0.0.tgz" 1028 | "version" "1.0.0" 1029 | 1030 | "json-stable-stringify-without-jsonify@^1.0.1": 1031 | "integrity" "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" 1032 | "resolved" "https://registry.npm.taobao.org/json-stable-stringify-without-jsonify/download/json-stable-stringify-without-jsonify-1.0.1.tgz" 1033 | "version" "1.0.1" 1034 | 1035 | "levn@^0.4.1": 1036 | "integrity" "sha1-rkViwAdHO5MqYgDUAyaN0v/8at4=" 1037 | "resolved" "https://registry.npm.taobao.org/levn/download/levn-0.4.1.tgz" 1038 | "version" "0.4.1" 1039 | dependencies: 1040 | "prelude-ls" "^1.2.1" 1041 | "type-check" "~0.4.0" 1042 | 1043 | "listr-silent-renderer@^1.1.1": 1044 | "integrity" "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=" 1045 | "resolved" "https://registry.npm.taobao.org/listr-silent-renderer/download/listr-silent-renderer-1.1.1.tgz" 1046 | "version" "1.1.1" 1047 | 1048 | "listr-update-renderer@^0.5.0": 1049 | "integrity" "sha1-Tqg2hUinuK7LfgbYyVy0WuLt5qI=" 1050 | "resolved" "https://registry.npm.taobao.org/listr-update-renderer/download/listr-update-renderer-0.5.0.tgz" 1051 | "version" "0.5.0" 1052 | dependencies: 1053 | "chalk" "^1.1.3" 1054 | "cli-truncate" "^0.2.1" 1055 | "elegant-spinner" "^1.0.1" 1056 | "figures" "^1.7.0" 1057 | "indent-string" "^3.0.0" 1058 | "log-symbols" "^1.0.2" 1059 | "log-update" "^2.3.0" 1060 | "strip-ansi" "^3.0.1" 1061 | 1062 | "listr-verbose-renderer@^0.5.0": 1063 | "integrity" "sha1-8RMhZ1NepMEmEQK58o2sfLoeA9s=" 1064 | "resolved" "https://registry.npm.taobao.org/listr-verbose-renderer/download/listr-verbose-renderer-0.5.0.tgz" 1065 | "version" "0.5.0" 1066 | dependencies: 1067 | "chalk" "^2.4.1" 1068 | "cli-cursor" "^2.1.0" 1069 | "date-fns" "^1.27.2" 1070 | "figures" "^2.0.0" 1071 | 1072 | "listr@^0.14.3": 1073 | "integrity" "sha1-L+qQlgTkNL5GTFC926DUlpKPpYY=" 1074 | "resolved" "https://registry.npm.taobao.org/listr/download/listr-0.14.3.tgz" 1075 | "version" "0.14.3" 1076 | dependencies: 1077 | "@samverschueren/stream-to-observable" "^0.3.0" 1078 | "is-observable" "^1.1.0" 1079 | "is-promise" "^2.1.0" 1080 | "is-stream" "^1.1.0" 1081 | "listr-silent-renderer" "^1.1.1" 1082 | "listr-update-renderer" "^0.5.0" 1083 | "listr-verbose-renderer" "^0.5.0" 1084 | "p-map" "^2.0.0" 1085 | "rxjs" "^6.3.3" 1086 | 1087 | "lodash.clonedeep@^4.5.0": 1088 | "integrity" "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" 1089 | "resolved" "https://registry.npm.taobao.org/lodash.clonedeep/download/lodash.clonedeep-4.5.0.tgz" 1090 | "version" "4.5.0" 1091 | 1092 | "lodash.merge@^4.6.2": 1093 | "integrity" "sha1-VYqlO0O2YeGSWgr9+japoQhf5Xo=" 1094 | "resolved" "https://registry.nlark.com/lodash.merge/download/lodash.merge-4.6.2.tgz" 1095 | "version" "4.6.2" 1096 | 1097 | "lodash.truncate@^4.4.2": 1098 | "integrity" "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=" 1099 | "resolved" "https://registry.npm.taobao.org/lodash.truncate/download/lodash.truncate-4.4.2.tgz" 1100 | "version" "4.4.2" 1101 | 1102 | "lodash@^4.17.21": 1103 | "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 1104 | "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" 1105 | "version" "4.17.21" 1106 | 1107 | "log-symbols@^1.0.2": 1108 | "integrity" "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=" 1109 | "resolved" "https://registry.npm.taobao.org/log-symbols/download/log-symbols-1.0.2.tgz?cache=0&sync_timestamp=1618723146520&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flog-symbols%2Fdownload%2Flog-symbols-1.0.2.tgz" 1110 | "version" "1.0.2" 1111 | dependencies: 1112 | "chalk" "^1.0.0" 1113 | 1114 | "log-update@^2.3.0": 1115 | "integrity" "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=" 1116 | "resolved" "https://registry.npm.taobao.org/log-update/download/log-update-2.3.0.tgz" 1117 | "version" "2.3.0" 1118 | dependencies: 1119 | "ansi-escapes" "^3.0.0" 1120 | "cli-cursor" "^2.0.0" 1121 | "wrap-ansi" "^3.0.1" 1122 | 1123 | "lru-cache@^6.0.0": 1124 | "integrity" "sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ=" 1125 | "resolved" "http://172.16.20.17:32100/lru-cache/-/lru-cache-6.0.0.tgz" 1126 | "version" "6.0.0" 1127 | dependencies: 1128 | "yallist" "^4.0.0" 1129 | 1130 | "merge-stream@^2.0.0": 1131 | "integrity" "sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A=" 1132 | "resolved" "https://registry.npm.taobao.org/merge-stream/download/merge-stream-2.0.0.tgz" 1133 | "version" "2.0.0" 1134 | 1135 | "merge2@^1.3.0": 1136 | "integrity" "sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4=" 1137 | "resolved" "https://registry.npm.taobao.org/merge2/download/merge2-1.4.1.tgz" 1138 | "version" "1.4.1" 1139 | 1140 | "micromatch@^4.0.2": 1141 | "integrity" "sha1-iW1Rnf6dsl/OlM63pQCRm/iB6/k=" 1142 | "resolved" "https://registry.npm.taobao.org/micromatch/download/micromatch-4.0.4.tgz?cache=0&sync_timestamp=1618054841521&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-4.0.4.tgz" 1143 | "version" "4.0.4" 1144 | dependencies: 1145 | "braces" "^3.0.1" 1146 | "picomatch" "^2.2.3" 1147 | 1148 | "mimic-fn@^1.0.0": 1149 | "integrity" "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=" 1150 | "resolved" "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.2.0.tgz?cache=0&sync_timestamp=1617823674050&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmimic-fn%2Fdownload%2Fmimic-fn-1.2.0.tgz" 1151 | "version" "1.2.0" 1152 | 1153 | "mimic-fn@^2.1.0": 1154 | "integrity" "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" 1155 | "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" 1156 | "version" "2.1.0" 1157 | 1158 | "minimatch@^3.0.4": 1159 | "integrity" "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=" 1160 | "resolved" "http://172.16.20.17:32100/minimatch/-/minimatch-3.0.4.tgz" 1161 | "version" "3.0.4" 1162 | dependencies: 1163 | "brace-expansion" "^1.1.7" 1164 | 1165 | "minimist@^1.2.5": 1166 | "integrity" "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" 1167 | "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz" 1168 | "version" "1.2.5" 1169 | 1170 | "ms@2.1.2": 1171 | "integrity" "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=" 1172 | "resolved" "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz?cache=0&sync_timestamp=1607433856030&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz" 1173 | "version" "2.1.2" 1174 | 1175 | "mute-stream@0.0.8": 1176 | "integrity" "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" 1177 | "resolved" "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" 1178 | "version" "0.0.8" 1179 | 1180 | "natural-compare@^1.4.0": 1181 | "integrity" "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" 1182 | "resolved" "https://registry.npm.taobao.org/natural-compare/download/natural-compare-1.4.0.tgz" 1183 | "version" "1.4.0" 1184 | 1185 | "ncp@^2.0.0": 1186 | "integrity" "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=" 1187 | "resolved" "https://registry.npm.taobao.org/ncp/download/ncp-2.0.0.tgz" 1188 | "version" "2.0.0" 1189 | 1190 | "nice-try@^1.0.4": 1191 | "integrity" "sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=" 1192 | "resolved" "https://registry.npm.taobao.org/nice-try/download/nice-try-1.0.5.tgz?cache=0&sync_timestamp=1614510039289&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnice-try%2Fdownload%2Fnice-try-1.0.5.tgz" 1193 | "version" "1.0.5" 1194 | 1195 | "npm-run-path@^2.0.0": 1196 | "integrity" "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=" 1197 | "resolved" "https://registry.nlark.com/npm-run-path/download/npm-run-path-2.0.2.tgz" 1198 | "version" "2.0.2" 1199 | dependencies: 1200 | "path-key" "^2.0.0" 1201 | 1202 | "npm-run-path@^4.0.1": 1203 | "integrity" "sha1-t+zR5e1T2o43pV4cImnguX7XSOo=" 1204 | "resolved" "https://registry.nlark.com/npm-run-path/download/npm-run-path-4.0.1.tgz" 1205 | "version" "4.0.1" 1206 | dependencies: 1207 | "path-key" "^3.0.0" 1208 | 1209 | "number-is-nan@^1.0.0": 1210 | "integrity" "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" 1211 | "resolved" "https://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz" 1212 | "version" "1.0.1" 1213 | 1214 | "object-assign@^4.1.0": 1215 | "integrity" "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 1216 | "resolved" "https://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz" 1217 | "version" "4.1.1" 1218 | 1219 | "once@^1.3.0", "once@^1.3.1", "once@^1.4.0": 1220 | "integrity" "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=" 1221 | "resolved" "http://172.16.20.17:32100/once/-/once-1.4.0.tgz" 1222 | "version" "1.4.0" 1223 | dependencies: 1224 | "wrappy" "1" 1225 | 1226 | "onetime@^2.0.0": 1227 | "integrity" "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=" 1228 | "resolved" "https://registry.npm.taobao.org/onetime/download/onetime-2.0.1.tgz?cache=0&sync_timestamp=1617889786861&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fonetime%2Fdownload%2Fonetime-2.0.1.tgz" 1229 | "version" "2.0.1" 1230 | dependencies: 1231 | "mimic-fn" "^1.0.0" 1232 | 1233 | "onetime@^5.1.0", "onetime@^5.1.2": 1234 | "integrity" "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==" 1235 | "resolved" "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" 1236 | "version" "5.1.2" 1237 | dependencies: 1238 | "mimic-fn" "^2.1.0" 1239 | 1240 | "optionator@^0.9.1": 1241 | "integrity" "sha1-TyNqY3Pa4FZqbUPhMmZ09QwpFJk=" 1242 | "resolved" "https://registry.npm.taobao.org/optionator/download/optionator-0.9.1.tgz" 1243 | "version" "0.9.1" 1244 | dependencies: 1245 | "deep-is" "^0.1.3" 1246 | "fast-levenshtein" "^2.0.6" 1247 | "levn" "^0.4.1" 1248 | "prelude-ls" "^1.2.1" 1249 | "type-check" "^0.4.0" 1250 | "word-wrap" "^1.2.3" 1251 | 1252 | "os-tmpdir@~1.0.2": 1253 | "integrity" "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" 1254 | "resolved" "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" 1255 | "version" "1.0.2" 1256 | 1257 | "p-finally@^1.0.0": 1258 | "integrity" "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" 1259 | "resolved" "https://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz" 1260 | "version" "1.0.0" 1261 | 1262 | "p-map@^2.0.0": 1263 | "integrity" "sha1-MQko/u+cnsxltosXaTAYpmXOoXU=" 1264 | "resolved" "https://registry.nlark.com/p-map/download/p-map-2.1.0.tgz" 1265 | "version" "2.1.0" 1266 | 1267 | "parent-module@^1.0.0": 1268 | "integrity" "sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI=" 1269 | "resolved" "https://registry.npm.taobao.org/parent-module/download/parent-module-1.0.1.tgz" 1270 | "version" "1.0.1" 1271 | dependencies: 1272 | "callsites" "^3.0.0" 1273 | 1274 | "path-is-absolute@^1.0.0": 1275 | "integrity" "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 1276 | "resolved" "http://172.16.20.17:32100/path-is-absolute/-/path-is-absolute-1.0.1.tgz" 1277 | "version" "1.0.1" 1278 | 1279 | "path-key@^2.0.0", "path-key@^2.0.1": 1280 | "integrity" "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" 1281 | "resolved" "https://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz?cache=0&sync_timestamp=1617971691339&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-2.0.1.tgz" 1282 | "version" "2.0.1" 1283 | 1284 | "path-key@^3.0.0", "path-key@^3.1.0": 1285 | "integrity" "sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=" 1286 | "resolved" "https://registry.npm.taobao.org/path-key/download/path-key-3.1.1.tgz?cache=0&sync_timestamp=1617971691339&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-3.1.1.tgz" 1287 | "version" "3.1.1" 1288 | 1289 | "path-parse@^1.0.6": 1290 | "integrity" "sha1-+8EUtgykKzDZ2vWFjkvWi77bZzU=" 1291 | "resolved" "http://172.16.20.17:32100/path-parse/-/path-parse-1.0.7.tgz" 1292 | "version" "1.0.7" 1293 | 1294 | "path-type@^4.0.0": 1295 | "integrity" "sha1-hO0BwKe6OAr+CdkKjBgNzZ0DBDs=" 1296 | "resolved" "https://registry.npm.taobao.org/path-type/download/path-type-4.0.0.tgz?cache=0&sync_timestamp=1611751975099&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-type%2Fdownload%2Fpath-type-4.0.0.tgz" 1297 | "version" "4.0.0" 1298 | 1299 | "picomatch@^2.2.1", "picomatch@^2.2.3": 1300 | "integrity" "sha1-8fBh3o9qS/AiiS4tEoI0+5gwKXI=" 1301 | "resolved" "https://registry.nlark.com/picomatch/download/picomatch-2.3.0.tgz" 1302 | "version" "2.3.0" 1303 | 1304 | "pkg-install@^1.0.0": 1305 | "integrity" "sha1-oMLmThTRcz1nBXFInDA2BVJwY/4=" 1306 | "resolved" "https://registry.nlark.com/pkg-install/download/pkg-install-1.0.0.tgz" 1307 | "version" "1.0.0" 1308 | dependencies: 1309 | "@types/execa" "^0.9.0" 1310 | "@types/node" "^11.9.4" 1311 | "execa" "^1.0.0" 1312 | 1313 | "prelude-ls@^1.2.1": 1314 | "integrity" "sha1-3rxkidem5rDnYRiIzsiAM30xY5Y=" 1315 | "resolved" "https://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.2.1.tgz" 1316 | "version" "1.2.1" 1317 | 1318 | "prettier-linter-helpers@^1.0.0": 1319 | "integrity" "sha1-0j1B/hN1ZG3i0BBNNFSjAIgCz3s=" 1320 | "resolved" "https://registry.npm.taobao.org/prettier-linter-helpers/download/prettier-linter-helpers-1.0.0.tgz" 1321 | "version" "1.0.0" 1322 | dependencies: 1323 | "fast-diff" "^1.1.2" 1324 | 1325 | "prettier@^2.1.2": 1326 | "integrity" "sha1-dpA8P4xESbyaxZes76JNxa1MvqY=" 1327 | "resolved" "https://registry.nlark.com/prettier/download/prettier-2.3.1.tgz?cache=0&sync_timestamp=1622888610164&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fprettier%2Fdownload%2Fprettier-2.3.1.tgz" 1328 | "version" "2.3.1" 1329 | 1330 | "progress@^2.0.0": 1331 | "integrity" "sha1-foz42PW48jnBvGi+tOt4Vn1XLvg=" 1332 | "resolved" "https://registry.npm.taobao.org/progress/download/progress-2.0.3.tgz" 1333 | "version" "2.0.3" 1334 | 1335 | "pump@^3.0.0": 1336 | "integrity" "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=" 1337 | "resolved" "https://registry.npm.taobao.org/pump/download/pump-3.0.0.tgz" 1338 | "version" "3.0.0" 1339 | dependencies: 1340 | "end-of-stream" "^1.1.0" 1341 | "once" "^1.3.1" 1342 | 1343 | "punycode@^2.1.0": 1344 | "integrity" "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=" 1345 | "resolved" "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz" 1346 | "version" "2.1.1" 1347 | 1348 | "queue-microtask@^1.2.2": 1349 | "integrity" "sha1-SSkii7xyTfrEPg77BYyve2z7YkM=" 1350 | "resolved" "https://registry.npm.taobao.org/queue-microtask/download/queue-microtask-1.2.3.tgz?cache=0&sync_timestamp=1616391583732&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fqueue-microtask%2Fdownload%2Fqueue-microtask-1.2.3.tgz" 1351 | "version" "1.2.3" 1352 | 1353 | "rechoir@^0.6.2": 1354 | "integrity" "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=" 1355 | "resolved" "http://172.16.20.17:32100/rechoir/-/rechoir-0.6.2.tgz" 1356 | "version" "0.6.2" 1357 | dependencies: 1358 | "resolve" "^1.1.6" 1359 | 1360 | "regexpp@^3.1.0": 1361 | "integrity" "sha1-BCWido2PI7rXDKS5BGH6LxIT4bI=" 1362 | "resolved" "https://registry.nlark.com/regexpp/download/regexpp-3.2.0.tgz" 1363 | "version" "3.2.0" 1364 | 1365 | "require-from-string@^2.0.2": 1366 | "integrity" "sha1-iaf92TgmEmcxjq/hT5wy5ZjDaQk=" 1367 | "resolved" "https://registry.npm.taobao.org/require-from-string/download/require-from-string-2.0.2.tgz" 1368 | "version" "2.0.2" 1369 | 1370 | "resolve-from@^4.0.0": 1371 | "integrity" "sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY=" 1372 | "resolved" "https://registry.npm.taobao.org/resolve-from/download/resolve-from-4.0.0.tgz" 1373 | "version" "4.0.0" 1374 | 1375 | "resolve@^1.1.6": 1376 | "integrity" "sha1-YpoBP7P3B1XW8LeTXMHCxTeLGXU=" 1377 | "resolved" "http://172.16.20.17:32100/resolve/-/resolve-1.20.0.tgz" 1378 | "version" "1.20.0" 1379 | dependencies: 1380 | "is-core-module" "^2.2.0" 1381 | "path-parse" "^1.0.6" 1382 | 1383 | "restore-cursor@^2.0.0": 1384 | "integrity" "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=" 1385 | "resolved" "https://registry.npm.taobao.org/restore-cursor/download/restore-cursor-2.0.0.tgz" 1386 | "version" "2.0.0" 1387 | dependencies: 1388 | "onetime" "^2.0.0" 1389 | "signal-exit" "^3.0.2" 1390 | 1391 | "restore-cursor@^3.1.0": 1392 | "integrity" "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==" 1393 | "resolved" "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" 1394 | "version" "3.1.0" 1395 | dependencies: 1396 | "onetime" "^5.1.0" 1397 | "signal-exit" "^3.0.2" 1398 | 1399 | "reusify@^1.0.4": 1400 | "integrity" "sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY=" 1401 | "resolved" "https://registry.npm.taobao.org/reusify/download/reusify-1.0.4.tgz" 1402 | "version" "1.0.4" 1403 | 1404 | "rimraf@^3.0.2": 1405 | "integrity" "sha1-8aVAK6YiCtUswSgrrBrjqkn9Bho=" 1406 | "resolved" "https://registry.npm.taobao.org/rimraf/download/rimraf-3.0.2.tgz" 1407 | "version" "3.0.2" 1408 | dependencies: 1409 | "glob" "^7.1.3" 1410 | 1411 | "run-async@^2.4.0": 1412 | "integrity" "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" 1413 | "resolved" "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" 1414 | "version" "2.4.1" 1415 | 1416 | "run-parallel@^1.1.9": 1417 | "integrity" "sha1-ZtE2jae9+SHrnZW9GpIp5/IaQ+4=" 1418 | "resolved" "https://registry.npm.taobao.org/run-parallel/download/run-parallel-1.2.0.tgz?cache=0&sync_timestamp=1612926037406&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frun-parallel%2Fdownload%2Frun-parallel-1.2.0.tgz" 1419 | "version" "1.2.0" 1420 | dependencies: 1421 | "queue-microtask" "^1.2.2" 1422 | 1423 | "rxjs@^6.3.3", "rxjs@^6.6.6": 1424 | "integrity" "sha512-/oTwee4N4iWzAMAL9xdGKjkEHmIwupR3oXbQjCKywF1BeFohswF3vZdogbmEF6pZkOsXTzWkrZszrWpQTByYVg==" 1425 | "resolved" "https://registry.npmjs.org/rxjs/-/rxjs-6.6.6.tgz" 1426 | "version" "6.6.6" 1427 | dependencies: 1428 | "tslib" "^1.9.0" 1429 | 1430 | "safer-buffer@>= 2.1.2 < 3": 1431 | "integrity" "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1432 | "resolved" "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" 1433 | "version" "2.1.2" 1434 | 1435 | "semver@^5.5.0": 1436 | "integrity" "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=" 1437 | "resolved" "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1616463550093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz" 1438 | "version" "5.7.1" 1439 | 1440 | "semver@^7.2.1", "semver@^7.3.5": 1441 | "integrity" "sha1-C2Ich5NI2JmOSw5L6Us/EuYBjvc=" 1442 | "resolved" "http://172.16.20.17:32100/semver/-/semver-7.3.5.tgz" 1443 | "version" "7.3.5" 1444 | dependencies: 1445 | "lru-cache" "^6.0.0" 1446 | 1447 | "shebang-command@^1.2.0": 1448 | "integrity" "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=" 1449 | "resolved" "https://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz" 1450 | "version" "1.2.0" 1451 | dependencies: 1452 | "shebang-regex" "^1.0.0" 1453 | 1454 | "shebang-command@^2.0.0": 1455 | "integrity" "sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=" 1456 | "resolved" "https://registry.npm.taobao.org/shebang-command/download/shebang-command-2.0.0.tgz" 1457 | "version" "2.0.0" 1458 | dependencies: 1459 | "shebang-regex" "^3.0.0" 1460 | 1461 | "shebang-regex@^1.0.0": 1462 | "integrity" "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" 1463 | "resolved" "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz" 1464 | "version" "1.0.0" 1465 | 1466 | "shebang-regex@^3.0.0": 1467 | "integrity" "sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI=" 1468 | "resolved" "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-3.0.0.tgz" 1469 | "version" "3.0.0" 1470 | 1471 | "shelljs@^0.8.4": 1472 | "integrity" "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==" 1473 | "resolved" "http://172.16.20.17:32100/shelljs/-/shelljs-0.8.4.tgz" 1474 | "version" "0.8.4" 1475 | dependencies: 1476 | "glob" "^7.0.0" 1477 | "interpret" "^1.0.0" 1478 | "rechoir" "^0.6.2" 1479 | 1480 | "signal-exit@^3.0.0", "signal-exit@^3.0.2", "signal-exit@^3.0.3": 1481 | "integrity" "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" 1482 | "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz" 1483 | "version" "3.0.3" 1484 | 1485 | "slash@^3.0.0": 1486 | "integrity" "sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ=" 1487 | "resolved" "https://registry.npm.taobao.org/slash/download/slash-3.0.0.tgz" 1488 | "version" "3.0.0" 1489 | 1490 | "slice-ansi@^4.0.0": 1491 | "integrity" "sha1-UA6N0P1VsFgVCGJVsxla3ypF/ms=" 1492 | "resolved" "https://registry.npm.taobao.org/slice-ansi/download/slice-ansi-4.0.0.tgz" 1493 | "version" "4.0.0" 1494 | dependencies: 1495 | "ansi-styles" "^4.0.0" 1496 | "astral-regex" "^2.0.0" 1497 | "is-fullwidth-code-point" "^3.0.0" 1498 | 1499 | "slice-ansi@0.0.4": 1500 | "integrity" "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=" 1501 | "resolved" "https://registry.npm.taobao.org/slice-ansi/download/slice-ansi-0.0.4.tgz" 1502 | "version" "0.0.4" 1503 | 1504 | "sprintf-js@~1.0.2": 1505 | "integrity" "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" 1506 | "resolved" "https://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz" 1507 | "version" "1.0.3" 1508 | 1509 | "string-width@^1.0.1": 1510 | "integrity" "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=" 1511 | "resolved" "https://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz" 1512 | "version" "1.0.2" 1513 | dependencies: 1514 | "code-point-at" "^1.0.0" 1515 | "is-fullwidth-code-point" "^1.0.0" 1516 | "strip-ansi" "^3.0.0" 1517 | 1518 | "string-width@^2.1.1": 1519 | "integrity" "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=" 1520 | "resolved" "https://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz" 1521 | "version" "2.1.1" 1522 | dependencies: 1523 | "is-fullwidth-code-point" "^2.0.0" 1524 | "strip-ansi" "^4.0.0" 1525 | 1526 | "string-width@^4.1.0", "string-width@^4.2.0": 1527 | "integrity" "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==" 1528 | "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz" 1529 | "version" "4.2.2" 1530 | dependencies: 1531 | "emoji-regex" "^8.0.0" 1532 | "is-fullwidth-code-point" "^3.0.0" 1533 | "strip-ansi" "^6.0.0" 1534 | 1535 | "strip-ansi@^3.0.0", "strip-ansi@^3.0.1": 1536 | "integrity" "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=" 1537 | "resolved" "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1618553320591&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz" 1538 | "version" "3.0.1" 1539 | dependencies: 1540 | "ansi-regex" "^2.0.0" 1541 | 1542 | "strip-ansi@^4.0.0": 1543 | "integrity" "sha1-qEeQIusaw2iocTibY1JixQXuNo8=" 1544 | "resolved" "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz?cache=0&sync_timestamp=1618553320591&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-4.0.0.tgz" 1545 | "version" "4.0.0" 1546 | dependencies: 1547 | "ansi-regex" "^3.0.0" 1548 | 1549 | "strip-ansi@^6.0.0": 1550 | "integrity" "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==" 1551 | "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz" 1552 | "version" "6.0.0" 1553 | dependencies: 1554 | "ansi-regex" "^5.0.0" 1555 | 1556 | "strip-eof@^1.0.0": 1557 | "integrity" "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" 1558 | "resolved" "https://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz" 1559 | "version" "1.0.0" 1560 | 1561 | "strip-final-newline@^2.0.0": 1562 | "integrity" "sha1-ibhS+y/L6Tb29LMYevsKEsGrWK0=" 1563 | "resolved" "https://registry.nlark.com/strip-final-newline/download/strip-final-newline-2.0.0.tgz" 1564 | "version" "2.0.0" 1565 | 1566 | "strip-json-comments@^3.1.0", "strip-json-comments@^3.1.1": 1567 | "integrity" "sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY=" 1568 | "resolved" "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-3.1.1.tgz" 1569 | "version" "3.1.1" 1570 | 1571 | "supports-color@^2.0.0": 1572 | "integrity" "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" 1573 | "resolved" "https://registry.nlark.com/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1622293670728&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz" 1574 | "version" "2.0.0" 1575 | 1576 | "supports-color@^5.3.0": 1577 | "integrity" "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=" 1578 | "resolved" "https://registry.nlark.com/supports-color/download/supports-color-5.5.0.tgz?cache=0&sync_timestamp=1622293670728&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz" 1579 | "version" "5.5.0" 1580 | dependencies: 1581 | "has-flag" "^3.0.0" 1582 | 1583 | "supports-color@^7.1.0": 1584 | "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" 1585 | "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" 1586 | "version" "7.2.0" 1587 | dependencies: 1588 | "has-flag" "^4.0.0" 1589 | 1590 | "symbol-observable@^1.1.0": 1591 | "integrity" "sha1-wiaIrtTqs83C3+rLtWFmBWCgCAQ=" 1592 | "resolved" "https://registry.npm.taobao.org/symbol-observable/download/symbol-observable-1.2.0.tgz?cache=0&sync_timestamp=1618452041830&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsymbol-observable%2Fdownload%2Fsymbol-observable-1.2.0.tgz" 1593 | "version" "1.2.0" 1594 | 1595 | "table@^6.0.9": 1596 | "integrity" "sha1-7gVZK3FDgxqMlPPO5qrkwczvM+I=" 1597 | "resolved" "https://registry.nlark.com/table/download/table-6.7.1.tgz?cache=0&sync_timestamp=1620957183690&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftable%2Fdownload%2Ftable-6.7.1.tgz" 1598 | "version" "6.7.1" 1599 | dependencies: 1600 | "ajv" "^8.0.1" 1601 | "lodash.clonedeep" "^4.5.0" 1602 | "lodash.truncate" "^4.4.2" 1603 | "slice-ansi" "^4.0.0" 1604 | "string-width" "^4.2.0" 1605 | "strip-ansi" "^6.0.0" 1606 | 1607 | "text-table@^0.2.0": 1608 | "integrity" "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" 1609 | "resolved" "https://registry.npm.taobao.org/text-table/download/text-table-0.2.0.tgz" 1610 | "version" "0.2.0" 1611 | 1612 | "through@^2.3.6": 1613 | "integrity" "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" 1614 | "resolved" "https://registry.npmjs.org/through/-/through-2.3.8.tgz" 1615 | "version" "2.3.8" 1616 | 1617 | "tmp@^0.0.33": 1618 | "integrity" "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==" 1619 | "resolved" "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" 1620 | "version" "0.0.33" 1621 | dependencies: 1622 | "os-tmpdir" "~1.0.2" 1623 | 1624 | "to-regex-range@^5.0.1": 1625 | "integrity" "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=" 1626 | "resolved" "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz" 1627 | "version" "5.0.1" 1628 | dependencies: 1629 | "is-number" "^7.0.0" 1630 | 1631 | "tslib@^1.8.1", "tslib@^1.9.0": 1632 | "integrity" "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" 1633 | "resolved" "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" 1634 | "version" "1.14.1" 1635 | 1636 | "tsutils@^3.21.0": 1637 | "integrity" "sha1-tIcX05TOpsHglpg+7Vjp1hcVtiM=" 1638 | "resolved" "https://registry.npm.taobao.org/tsutils/download/tsutils-3.21.0.tgz?cache=0&sync_timestamp=1615138637708&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftsutils%2Fdownload%2Ftsutils-3.21.0.tgz" 1639 | "version" "3.21.0" 1640 | dependencies: 1641 | "tslib" "^1.8.1" 1642 | 1643 | "type-check@^0.4.0", "type-check@~0.4.0": 1644 | "integrity" "sha1-B7ggO/pwVsBlcFDjzNLDdzC6uPE=" 1645 | "resolved" "https://registry.npm.taobao.org/type-check/download/type-check-0.4.0.tgz" 1646 | "version" "0.4.0" 1647 | dependencies: 1648 | "prelude-ls" "^1.2.1" 1649 | 1650 | "type-fest@^0.11.0": 1651 | "integrity" "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" 1652 | "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz" 1653 | "version" "0.11.0" 1654 | 1655 | "type-fest@^0.20.2": 1656 | "integrity" "sha1-G/IH9LKPkVg2ZstfvTJ4hzAc1fQ=" 1657 | "resolved" "https://registry.nlark.com/type-fest/download/type-fest-0.20.2.tgz?cache=0&sync_timestamp=1623872834436&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftype-fest%2Fdownload%2Ftype-fest-0.20.2.tgz" 1658 | "version" "0.20.2" 1659 | 1660 | "uri-js@^4.2.2": 1661 | "integrity" "sha1-mxpSWVIlhZ5V9mnZKPiMbFfyp34=" 1662 | "resolved" "https://registry.npm.taobao.org/uri-js/download/uri-js-4.4.1.tgz?cache=0&sync_timestamp=1610240086113&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furi-js%2Fdownload%2Furi-js-4.4.1.tgz" 1663 | "version" "4.4.1" 1664 | dependencies: 1665 | "punycode" "^2.1.0" 1666 | 1667 | "v8-compile-cache@^2.0.3": 1668 | "integrity" "sha1-LeGWGMZtwkfc+2+ZM4A12CRaLO4=" 1669 | "resolved" "https://registry.npm.taobao.org/v8-compile-cache/download/v8-compile-cache-2.3.0.tgz?cache=0&sync_timestamp=1614993639567&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fv8-compile-cache%2Fdownload%2Fv8-compile-cache-2.3.0.tgz" 1670 | "version" "2.3.0" 1671 | 1672 | "which@^1.2.9": 1673 | "integrity" "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=" 1674 | "resolved" "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-1.3.1.tgz" 1675 | "version" "1.3.1" 1676 | dependencies: 1677 | "isexe" "^2.0.0" 1678 | 1679 | "which@^2.0.1": 1680 | "integrity" "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=" 1681 | "resolved" "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-2.0.2.tgz" 1682 | "version" "2.0.2" 1683 | dependencies: 1684 | "isexe" "^2.0.0" 1685 | 1686 | "word-wrap@^1.2.3": 1687 | "integrity" "sha1-YQY29rH3A4kb00dxzLF/uTtHB5w=" 1688 | "resolved" "https://registry.npm.taobao.org/word-wrap/download/word-wrap-1.2.3.tgz" 1689 | "version" "1.2.3" 1690 | 1691 | "wrap-ansi@^3.0.1": 1692 | "integrity" "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=" 1693 | "resolved" "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-3.0.1.tgz?cache=0&sync_timestamp=1618558913931&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-3.0.1.tgz" 1694 | "version" "3.0.1" 1695 | dependencies: 1696 | "string-width" "^2.1.1" 1697 | "strip-ansi" "^4.0.0" 1698 | 1699 | "wrappy@1": 1700 | "integrity" "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 1701 | "resolved" "http://172.16.20.17:32100/wrappy/-/wrappy-1.0.2.tgz" 1702 | "version" "1.0.2" 1703 | 1704 | "yallist@^4.0.0": 1705 | "integrity" "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" 1706 | "resolved" "http://172.16.20.17:32100/yallist/-/yallist-4.0.0.tgz" 1707 | "version" "4.0.0" 1708 | --------------------------------------------------------------------------------