diff --git a/docs/config-detail.md b/docs/config-detail.md index c5e4f083d522..0208d3ed25d2 100644 --- a/docs/config-detail.md +++ b/docs/config-detail.md @@ -16,36 +16,49 @@ title: 编译配置详情 ## plugins -`plugins` 用来设置编译过程插件,插件机制基于 实现,目前暴露了两个钩子 `beforeBuild` 和 `afterBuild` +> 自 2.2 开始,Taro 引入了插件化机制,允许开发者通过编写插件的方式来为 Taro 拓展更多功能或者为自身业务定制个性化功能 -其中,`beforeBuild` 将在整体编译前触发,可以获取到编译的相关配置,同时也能进行修改 +`plugins` 用来配置 Taro 插件。 -`afterBuild` 将在 webpack 编译完后执行,可以获取到编译后的结果 - -具体使用方式如下: - -首先定义一个插件 +`plugins` 字段取值为一个数组,配置方式如下: ```js -class BuildPlugin { - apply (builder) { - builder.hooks.beforeBuild.tap('BuildPlugin', (config) => { - console.log(config) - }) - - builder.hooks.afterBuild.tap('BuildPlugin', (stats) => { - console.log(stats) - }) - } +const config = { + plugins: [ + // 引入 npm 安装的插件 + '@tarojs/plugin-mock', + // 引入 npm 安装的插件,并传入插件参数 + ['@tarojs/plugin-mock', { + mocks: { + '/api/user/1': { + name: 'judy', + desc: 'Mental guy' + } + } + }], + // 从本地绝对路径引入插件,同样如果需要传入参数也是如上 + '/absulute/path/plugin/filename', + ] } ``` -接下来在 `plugins` 字段中进行配置 +## presets + +如果你有一系列插件需要配置,而他们通常是组合起来完成特定的事儿,那你可以通过**插件集** `presets` 来进行配置。 + +配置[编译配置](./config-detail.md)中的 `presets` 字段,如下。 ```js -{ - plugins: [ - new BuildPlugin() +const config = { + presets: [ + // 引入 npm 安装的插件集 + '@tarojs/preset-sth', + // 引入 npm 安装的插件集,并传入插件参数 + ['@tarojs/plugin-sth', { + arg0: 'xxx' + }], + // 从本地绝对路径引入插件集,同样如果需要传入参数也是如上 + '/absulute/path/preset/filename', ] } ``` diff --git a/docs/plugin.md b/docs/plugin.md new file mode 100644 index 000000000000..ecd478c316b0 --- /dev/null +++ b/docs/plugin.md @@ -0,0 +1,443 @@ +--- +title: 插件功能 +--- + +> 自 2.2 开始,Taro 引入了插件化机制,允许开发者通过编写插件的方式来为 Taro 拓展更多功能或者为自身业务定制个性化功能 + +## 官方插件 + +Taro 提供了一些官方插件 + +- [@tarojs/plugin-mock](https://github.com/NervJS/taro-plugin-mock),一个简易的数据 mock 插件 + +## 如何引入插件 + +你可以从 npm 或者本地中引入插件,引入方式主要通过 [编译配置](./config-detail.md)中的 `plugins` 和 `presets`,使用如下 + +### plugins + +插件在 Taro 中,一般通过[编译配置](./config-detail.md)中的 `plugins` 字段进行引入。 + +`plugins` 字段取值为一个数组,配置方式如下: + +```js +const config = { + plugins: [ + // 引入 npm 安装的插件 + '@tarojs/plugin-mock', + // 引入 npm 安装的插件,并传入插件参数 + ['@tarojs/plugin-mock', { + mocks: { + '/api/user/1': { + name: 'judy', + desc: 'Mental guy' + } + } + }], + // 从本地绝对路径引入插件,同样如果需要传入参数也是如上 + '/absulute/path/plugin/filename', + ] +} +``` + +### presets + +如果你有一系列插件需要配置,而他们通常是组合起来完成特定的事儿,那你可以通过**插件集** `presets` 来进行配置。 + +配置[编译配置](./config-detail.md)中的 `presets` 字段,如下。 + +```js +const config = { + presets: [ + // 引入 npm 安装的插件集 + '@tarojs/preset-sth', + // 引入 npm 安装的插件集,并传入插件参数 + ['@tarojs/plugin-sth', { + arg0: 'xxx' + }], + // 从本地绝对路径引入插件集,同样如果需要传入参数也是如上 + '/absulute/path/preset/filename', + ] +} +``` + +在了解完如何引入插件之后,我们来学习一下如何编写一个插件。 + +## 如何编写一个插件 + +一个 Taro 的插件都具有固定的代码结构,通常由一个函数组成,示例如下: + +```typescript +export default (ctx, options) => { + // plugin 主体 + ctx.onBuildStart(() => { + console.log('编译开始!') + }) + ctx.onBuildFinish(() => { + console.log('编译结束!') + }) +} +``` + +插件函数可以接受两个参数: + +- ctx:插件当前的运行环境信息,包含插件相关的 API、当前运行参数、辅助方法等等 +- options:为插件调用时传入的参数 + +在插件主体代码部分可以按照自己的需求编写相应代码,通常你可以实现以下功能。 + +### Typings + +建议使用 typescript 来编写插件,这样你就会获得很棒的智能提示,使用方式如下: + +```typescript +import { IPluginContext } from '@tarojs/service' +export default (ctx: IPluginContext, pluginOpts) => { + // 接下来使用 ctx 的时候就能获得智能提示了 + ctx.onBuildStart(() => { + console.log('编译开始!') + }) +} +``` + +### 主要功能 + +#### 命令行扩展 + +你可以通过编写插件来为 Taro 拓展命令行的命令,在之前版本的 Taro 中,命令行的命令是固定的,如果你要进行扩展,那你得直接修改 Taro 源码,而如今借助插件功能,你可以任意拓展 Taro 的命令行。 + +这个功能主要通过 `ctx.registerCommand` API 来进行实现,例如,增加一个上传的命令,将编译后的代码上传到服务器: + +```typescript +export default (ctx) => { + ctx.registerCommand({ + // 命令名 + name: 'upload', + // 执行 taro upload --help 时输出的 options 信息 + optionsMap: { + '--remote': '服务器地址' + }, + // 执行 taro upload --help 时输出的使用例子的信息 + synopsisList: [ + 'taro upload --remote xxx.xxx.xxx.xxx' + ], + async fn () { + const { remote } = ctx.runOpts + await uploadDist() + } + }) +} +``` + +将这个插件配置到中项目之后,就可以通过 `taro upload --remote xxx.xxx.xxx.xxx` 命令将编译后代码上传到目标服务器。 + +#### 编译过程扩展 + +同时你也可以通过插件对代码编译过程进行拓展。 + +正如前面所述,针对编译过程,有 `onBuildStart`、`onBuildFinish` 两个钩子来分别表示编译开始,编译结束,而除此之外也有更多 API 来对编译过程进行修改,如下: + +- `ctx.onBuildStart(() => viod)`,编译开始,接收一个回调函数 +- `ctx.modifyWebpackChain(args: { chain: any }) => void)`,编译中修改 webpack 配置,在这个钩子中,你可以对 webpackChain 作出想要的调整,等同于配置 [`webpackChain`](./config-detail.md#miniwebpackchain) +- `ctx.modifyBuildAssets(args: { assets: any }) => void)`,修改编译后的结果 +- `ctx.modifyMiniConfigs(args: { configMap: any }) => void)`,修改编译过程中的 app、页面、组件的配置 +- `ctx.onBuildFinish(() => viod)`,编译结束,接收一个回调函数 + +#### 编译平台拓展 + +你也可以通过插件功能对编译平台进行拓展。 + +使用 API `ctx.registerPlatform`,Taro 中内置的平台支持都是通过这个 API 来进行实现。 + +> 注意:这是未完工的功能,需要依赖代码编译器 `@tarojs/transform-wx` 的改造完成 + +## API + +通过以上内容,我们已经大致知道 Taro 插件可以实现哪些特性并且可以编写一个简单的 Taro 插件了,但是,为了能够编写更加复杂且标准的插件,我们需要了解 Taro 插件机制中的具体 API 用法。 + +### 插件环境变量 + +#### ctx.paths + +包含当前执行命令的相关路径,所有的路径如下(并不是所有命令都会拥有以下所有路径): + +- `ctx.paths.appPath`,当前命令执行的目录,如果是 `build` 命令则为当前项目路径 +- `ctx.paths.configPath`,当前项目配置目录,如果 `init` 命令,则没有此路径 +- `ctx.paths.sourcePath`,当前项目源码路径 +- `ctx.paths.outputPath`,当前项目输出代码路径 +- `ctx.paths.nodeModulesPath`,当前项目所用的 node_modules 路径 + +#### ctx.runOpts + +获取当前执行命令所带的参数,例如命令 `taro upload --remote xxx.xxx.xxx.xxx`,则 `ctx.runOpts` 值为: + +```js +{ + _: ['upload'], + options: { + remote: 'xxx.xxx.xxx.xxx' + }, + isHelp: false +} +``` + +#### ctx.helper + +为包 `@tarojs/helper` 的快捷使用方式,包含其所有 API。 + +#### ctx.initialConfig + +获取项目配置。 + +#### ctx.plugins + +获取当前所有挂载的插件。 + +### 插件方法 + +Taro 的插件架构基于 [Tapable](https://github.com/webpack/tapable)。 + +#### ctx.register(hook: IHook) + +注册一个可供其他插件调用的钩子,接收一个参数,即 Hook 对象。 + +一个Hook 对象类型如下: + +```typescript +interface IHook { + // Hook 名字,也会作为 Hook 标识 + name: string + // Hook 所处的 plugin id,不需要指定,Hook 挂载的时候会自动识别 + plugin: string + // Hook 回调 + fn: Function + before?: string + stage?: number +} +``` + +通过 `ctx.register` 注册过的钩子需要通过方法 `ctx.applyPlugins` 进行触发。 + +我们约定,按照传入的 Hook 对象的 `name` 来区分 Hook 类型,主要为以下三类: + +- 事件类型 Hook,Hook name 以 `on` 开头,如 `onStart`,这种类型的 Hook 只管触发而不关心 Hook 回调 fn 的值,Hook 的回调 fn 接收一个参数 `opts` ,为触发钩子时传入的参数 +- 修改类型 Hook,Hook name 以 `modify` 开头,如 `modifyBuildAssets`,这种类型的 Hook 触发后会返回做出某项修改后的值,Hook 的回调 fn 接收两个参数 `opts` 和 `arg` ,分别为触发钩子时传入的参数和上一个回调执行的结果 +- 添加类型 Hook,Hook name 以 `add` 开头,如 `addConfig`,这种类型 Hook 会将所有回调的结果组合成数组最终返回,Hook 的回调 fn 接收两个参数 `opts` 和 `arg` ,分别为触发钩子时传入的参数和上一个回调执行的结果 + +如果 Hook 对象的 `name` 不属于以上三类,则该 Hook 表现情况类似事件类型 Hook。 + +钩子回调可以是异步也可以是同步,同一个 Hook 标识下一系列回调会借助 Tapable 的 AsyncSeriesWaterfallHook 组织为异步串行任务依次执行。 + +#### ctx.registerMethod(arg: string | { name: string, fn?: Function }, fn?: Function) + +向 `ctx` 上挂载一个方法可供其他插件直接调用。 + +主要调用方式: + +```typescript + +ctx.registerMethod('methodName') +ctx.registerMethod('methodName', () => { + // callback +}) +ctx.registerMethod({ + name: 'methodName' +}) +ctx.registerMethod({ + name: 'methodName', + fn: () => { + // callback + } +}) +``` + +其中方法名必须指定,而对于回调函数则存在两种情况。 + +##### 指定回调函数 + +则直接往 `ctx` 上进行挂载方法,调用时 `ctx.methodName` 即执行 `registerMethod` 上指定的回调函数。 + +##### 不指定回调函数 + +则相当于注册了一个 `methodName` 钩子,与 `ctx.register` 注册钩子一样需要通过方法 `ctx.applyPlugins` 进行触发,而具体要执行的钩子回调则通过 `ctx.methodName` 进行指定,可以指定多个要执行的回调,最后会按照注册顺序依次执行。 + +内置的编译过程中的 API 如 `ctx.onBuildStart` 等均是通过这种方式注册。 + +#### ctx.registerCommand(hook: ICommand) + +注册一个自定义命令。 + +```typescript +interface ICommand { + // 命令别名 + alias?: string, + // 执行 taro --help 时输出的 options 信息 + optionsMap?: { + [key: string]: string + }, + // 执行 taro --help 时输出的使用例子的信息 + synopsisList?: string[] +} +``` + +使用方式: + +```typescript +ctx.registerCommand({ + name: 'create', + fn () { + const { + type, + name, + description + } = ctx.runOpts + const { chalk } = ctx.helper + const { appPath } = ctx.paths + if (typeof name !== 'string') { + return console.log(chalk.red('请输入需要创建的页面名称')) + } + if (type === 'page') { + const Page = require('../../create/page').default + const page = new Page({ + pageName: name, + projectDir: appPath, + description + }) + + page.create() + } + } +}) +``` + +#### ctx.registerPlatform(hook: IPlatform) + +注册一个编译平台。 + +```typescript +interface IFileType { + templ: string + style: string + script: string + config: string +} +interface IPlatform extends IHook { + // 编译后文件类型 + fileType: IFileType + // 编译时使用的配置参数名 + useConfigName: String +} +``` + +使用方式: + +```typescript +ctx.registerPlatform({ + name: 'alipay', + useConfigName: 'mini', + async fn ({ config }) { + const { appPath, nodeModulesPath, outputPath } = ctx.paths + const { npm, emptyDirectory } = ctx.helper + emptyDirectory(outputPath) + + // 准备 miniRunner 参数 + const miniRunnerOpts = { + ...config, + nodeModulesPath, + buildAdapter: config.platform, + isBuildPlugin: false, + globalObject: 'my', + fileType: { + templ: '.axml', + style: '.acss', + config: '.json', + script: '.js' + }, + isUseComponentBuildPage: false + } + + ctx.modifyMiniConfigs(({ configMap }) => { + const replaceKeyMap = { + navigationBarTitleText: 'defaultTitle', + navigationBarBackgroundColor: 'titleBarColor', + enablePullDownRefresh: 'pullRefresh', + list: 'items', + text: 'name', + iconPath: 'icon', + selectedIconPath: 'activeIcon', + color: 'textColor' + } + Object.keys(configMap).forEach(key => { + const item = configMap[key] + if (item.content) { + recursiveReplaceObjectKeys(item.content, replaceKeyMap) + } + }) + }) + + // build with webpack + const miniRunner = await npm.getNpmPkg('@tarojs/mini-runner', appPath) + await miniRunner(appPath, miniRunnerOpts) + } +}) +``` + +#### ctx.applyPlugins(args: string | { name: string, initialVal?: any, opts?: any }) + +触发注册的钩子。 + +传入的钩子名为 `ctx.register` 和 `ctx.registerMethod` 指定的名字。 + +这里值得注意的是如果是**修改类型**和**添加类型**的钩子,则拥有返回结果,否则不用关心其返回结果。 + +使用方式: + +```typescript +ctx.applyPlugins('onStart') + +const assets = await ctx.applyPlugins({ + name: 'modifyBuildAssets', + initialVal: assets, + opts: { + assets + } +}) +``` + +#### ctx.addPluginOptsSchema(schema: Function) + +为插件入参添加校验,接受一个函数类型参数,函数入参为 joi 对象,返回值为 joi schema。 + +使用方式: + +```typescript +ctx.addPluginOptsSchema(joi => { + return joi.object().keys({ + mocks: joi.object().pattern( + joi.string(), joi.object() + ), + port: joi.number(), + host: joi.string() + }) +}) +``` + +#### ctx.writeFileToDist({ filePath: string, content: string }) + +向编译结果目录中写入文件,参数: + +- filePath: 文件放入编译结果目录下的路径 +- content: 文件内容 + +#### ctx.generateFrameworkInfo({ platform: string }) + +生成编译信息文件 .frameworkinfo,参数: + +- platform: 平台名 + +#### ctx.generateProjectConfig({ srcConfigName: string, distConfigName: string }) + +根据当前项目配置,生成最终项目配置,参数: + +- srcConfigName: 源码中配置名 +- distConfigName: 最终生成的配置名 diff --git a/lerna.json b/lerna.json index 7551670660a6..1ae369e21ddd 100644 --- a/lerna.json +++ b/lerna.json @@ -13,6 +13,8 @@ "packages/taro-cli", "packages/taro-components", "packages/taro-h5", + "packages/taro-helper", + "packages/taro-service", "packages/taro-loader", "packages/taro-mini-runner", "packages/taro-react", diff --git a/package.json b/package.json index e1593fd916c5..507e0531c063 100644 --- a/package.json +++ b/package.json @@ -65,11 +65,15 @@ "@types/babel-generator": "^6.25.3", "@types/babel-traverse": "^6.25.5", "@types/babel-types": "^7.0.7", + "@types/debug": "4.1.5", + "@types/fs-extra": "8.1.0", + "@types/hapi__joi": "16.0.12", "@types/jest": "^24.0.18", "@types/lodash": "^4.14.142", "@types/node": "^12.7.11", "@types/react": "^16.9.5", "@types/sinon": "^7.5.0", + "@types/tapable": "1.0.5", "@types/webpack": "^4.39.3", "@typescript-eslint/eslint-plugin": "^2.23.0", "@typescript-eslint/parser": "^2.23.0", diff --git a/packages/taro-cli/bin/taro b/packages/taro-cli/bin/taro index abd2d2d4ddf4..9dcb9fb8ee48 100755 --- a/packages/taro-cli/bin/taro +++ b/packages/taro-cli/bin/taro @@ -1,19 +1,6 @@ #! /usr/bin/env node -const program = require('commander') -const { getPkgVersion, printPkgVersion } = require('../dist/util') +require('../dist/util').printPkgVersion() -printPkgVersion() - -program - .version(getPkgVersion()) - .usage(' [options]') - .command('init [projectName]', 'Init a project with default templete') - .command('config ', 'Taro config') - .command('create', 'Create page for project') - .command('build', 'Build a project with options') - .command('update', 'Update packages of taro') - .command('convert', 'Convert weapp to taro') - .command('info', 'Diagnostics Taro env info') - .command('doctor', 'Diagnose taro project') - .parse(process.argv) +const CLI = require('../dist/cli').default +new CLI().run() diff --git a/packages/taro-cli/bin/taro-build b/packages/taro-cli/bin/taro-build deleted file mode 100755 index e08cc1e56841..000000000000 --- a/packages/taro-cli/bin/taro-build +++ /dev/null @@ -1,86 +0,0 @@ -#!/usr/bin/env node -const path = require('path') -const fs = require('fs-extra') -const program = require('commander') -const chalk = require('chalk') -const _ = require('lodash') - -const Builder = require('../dist/build').default -const { PROJECT_CONFIG, BUILD_TYPES } = require('../dist/util/constants') -const appPath = process.cwd() -const projectConfPath = path.join(appPath, PROJECT_CONFIG) - -program - .option('--type [typeName]', 'Build type, weapp/swan/alipay/tt/h5/quickapp/rn/qq/jd') - .option('--watch', 'Watch mode') - .option('--page [pagePath]', 'Build one page') - .option('--component [pagePath]', 'Build one component') - .option('--env [env]', 'Env type') - .option('--ui', 'Build Taro UI library') - .option('--ui-index [uiIndexPath]', 'Index file for build Taro UI library') - .option('--plugin [typeName]', 'Build Taro plugin project, weapp') - .option('--port [port]', 'Specified port') - .option('--release', 'Release quickapp') - .parse(process.argv) - -const { type, watch, ui, port, release, page, component, uiIndex } = program -let { env, plugin } = program - -env = process.env.NODE_ENV || env - -if (env) { - process.env.NODE_ENV = env -} else { - if (watch) { - process.env.NODE_ENV = 'development' - } else { - process.env.NODE_ENV = 'production' - } -} -process.env.TARO_ENV = type - -const builder = new Builder(appPath) - -if (ui) { - console.log(chalk.green(`开始编译 UI 库`)) - builder.build({ - type: 'ui', - watch, - uiIndex - }) - return -} - -if (plugin) { - if (typeof plugin === 'boolean') { - plugin = BUILD_TYPES.WEAPP - } - builder.build({ - type: BUILD_TYPES.PLUGIN, - platform: plugin, - watch - }) - return -} - -if (!fs.existsSync(projectConfPath)) { - console.log(chalk.red(`找不到项目配置文件${PROJECT_CONFIG},请确定当前目录是Taro项目根目录!`)) - process.exit(1) -} - -const projectConf = require(projectConfPath)(_.merge) -if (typeof page === 'string') { - console.log(chalk.green(`开始编译页面 ${chalk.bold(page)}`)) -} else if (typeof component === 'string') { - console.log(chalk.green(`开始编译组件 ${chalk.bold(component)}`)) -} else { - console.log(chalk.green(`开始编译项目 ${chalk.bold(projectConf.projectName)}`)) -} - -builder.build({ - type, - watch, - port: typeof port === 'string' ? port: undefined, - release: !!release, - page, component -}) diff --git a/packages/taro-cli/bin/taro-config b/packages/taro-cli/bin/taro-config deleted file mode 100755 index 79b19239901e..000000000000 --- a/packages/taro-cli/bin/taro-config +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env node - -const program = require('commander') -const helper = require('../dist/taro-config') - -program - .option('--json', '以 JSON 形式输出') - .on('--help', function () { - console.log('') - console.log('Synopsis:') - console.log(' $ taro config set ') - console.log(' $ taro config get ') - console.log(' $ taro config delete ') - console.log(' $ taro config list [--json]') - }) - .parse(process.argv) - -const args = program.args -const { json } = program - -const [cmd, key, value] = args - -switch (cmd) { - case 'get': - if (!key) return - helper.get(key) - break - case 'set': - if (!key || !value) return - helper.set(key, value) - break - case 'delete': - if (!key) return - helper.deleteKey(key) - break - case 'list': - case 'ls': - helper.list(json) - break - default: - break -} diff --git a/packages/taro-cli/bin/taro-convert b/packages/taro-cli/bin/taro-convert deleted file mode 100755 index 35c7b992aa71..000000000000 --- a/packages/taro-cli/bin/taro-convert +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env node - -const program = require('commander') - -const Convertor = require('../dist/convertor').default - -program - .parse(process.argv) - -const convertor = new Convertor(process.cwd()) - -convertor.run() diff --git a/packages/taro-cli/bin/taro-create b/packages/taro-cli/bin/taro-create deleted file mode 100755 index e43ba0d8977b..000000000000 --- a/packages/taro-cli/bin/taro-create +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env node - -const program = require('commander') -const chalk = require('chalk') -const Page = require('../dist/create/page').default -program - .option('--name [name]', '名称') - .option('--description [description]', '介绍') - .parse(process.argv) - -const args = program.args -const { name, description } = program - -const type = args[0] || 'page' -const resultName = args[1] || name - -if (typeof resultName !== 'string') return console.log(chalk.red('请输入需要创建的页面名称')) - -if (type === 'page') { - const page = new Page({ - pageName: resultName, - projectDir: process.cwd(), - description - }) - - page.create() -} diff --git a/packages/taro-cli/bin/taro-doctor b/packages/taro-cli/bin/taro-doctor deleted file mode 100755 index a1b259cc717e..000000000000 --- a/packages/taro-cli/bin/taro-doctor +++ /dev/null @@ -1,76 +0,0 @@ -#!/usr/bin/env node - -const path = require('path') -const program = require('commander') -const _ = require('lodash/fp') -const ora = require('ora') -const chalk = require('chalk') -const fs = require('fs-extra') -const { PROJECT_CONFIG } = require('../dist/util/constants') -const PROJECT_CONF_PATH = path.join(process.cwd(), PROJECT_CONFIG) -const appPath = process.cwd() - -if (!fs.existsSync(PROJECT_CONF_PATH)) { - console.log(chalk.red(`找不到项目配置文件${PROJECT_CONFIG},请确定当前目录是Taro项目根目录!`)) - process.exit(1) -} - -const { validators } = require('../dist/doctor').default -const abilityXMLValidator = require('../dist/doctor/abilityXMLValidator').default -const QUICKAPP_CONF_PATH = path.join(appPath, 'project.quickapp.json') -if (fs.existsSync(QUICKAPP_CONF_PATH)) { - validators.push(abilityXMLValidator) -} - -const NOTE_ALL_RIGHT = chalk.green('[✓] ') -const NOTE_VALID = chalk.yellow('[!] ') -const NOTE_INVALID = chalk.red('[✗] ') - -const titleChalk = chalk.hex('#aaa') -const lineChalk = chalk.hex('#fff') -const solutionChalk = chalk.hex('#999') - -function printReport (reports) { - _.forEach(report => { - console.log('\n' + titleChalk(report.desc)) - - if (report.raw) { - console.log(report.raw) - return - } - - if (_.getOr(0, 'lines.length', report) === 0) { - console.log(` ${NOTE_ALL_RIGHT}没有发现问题`) - return - } - - _.forEach(line => { - console.log( - ' ' + - (line.valid ? NOTE_VALID : NOTE_INVALID) + - lineChalk(line.desc) - ) - if (line.solution) { - console.log(' ' + solutionChalk(line.solution)) - } - }, report.lines) - }, reports) -} - -program - .option('-v --verbose', 'Print all message') - .parse(process.argv) - -async function diagnose () { - const spinner = ora('正在诊断项目...').start() - const projectConfig = require(PROJECT_CONF_PATH)(_.merge) - const reportsP = _.map(validator => validator({ - appPath, - projectConfig, - configPath: PROJECT_CONF_PATH - }), validators) - const reports = await Promise.all(reportsP) - spinner.succeed('诊断完成') - printReport(reports) -} -diagnose() diff --git a/packages/taro-cli/bin/taro-info b/packages/taro-cli/bin/taro-info deleted file mode 100755 index 5d59b9b4cd8a..000000000000 --- a/packages/taro-cli/bin/taro-info +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env node -const fs = require('fs') -const path = require('path') -const envinfo = require('envinfo') -const process = require('process') -const program = require('commander') - -const { UPDATE_PACKAGE_LIST } = require('../dist/util/constants') -const { getPkgVersion } = require('../dist/util') - -const npmPackages = UPDATE_PACKAGE_LIST.concat(['react', 'react-native', 'nervjs', 'expo']) - -program.parse(process.argv) - -const args = program.args - -if (args.length === 1) { - switch (args[0]) { - case 'rn': { - rnInfo({ - // SDKs: ['iOS SDK', 'Android SDK'] 有bug ,卡死? - }) - break - } - default: - info() - } -} else { - info() -} - -function rnInfo (options) { - const appPath = process.cwd() - const tempPath = path.join(appPath, '.rn_temp') - if (fs.lstatSync(tempPath).isDirectory()) { - process.chdir('.rn_temp') - info(options) - } -} - -async function info (options) { - const info = await envinfo.run(Object.assign({}, { - System: ['OS', 'Shell'], - Binaries: ['Node', 'Yarn', 'npm'], - npmPackages, - npmGlobalPackages: ['typescript'] - }, options), { - title: `Taro CLI ${getPkgVersion()} environment info` - }) - console.log(info) -} diff --git a/packages/taro-cli/bin/taro-init b/packages/taro-cli/bin/taro-init deleted file mode 100755 index 74c02bb5c1fe..000000000000 --- a/packages/taro-cli/bin/taro-init +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env node - -const program = require('commander') - -const Project = require('../dist/create/project').default - -program - .option('--name [name]', '项目名称') - .option('--description [description]', '项目介绍') - .option('--typescript', '使用TypeScript') - .option('--no-typescript', '不使用TypeScript') - .option('--template-source [templateSource]', '项目模板源') - .option('--clone [clone]', '拉取远程模板时使用git clone') - .option('--template [template]', '项目模板') - .option('--css [css]', 'CSS预处理器(sass/less/stylus/none)') - .parse(process.argv) - -const args = program.args -const { template, templateSource, clone, description, name, css } = program -let typescript - -/** - * 非标准做法 - * 为了兼容不指定typescript参数时,在inquirer中询问是否使用typescript的情况 - */ -if (program.rawArgs.indexOf('--typescript') !== -1) { - typescript = true -} else if (program.rawArgs.indexOf('--no-typescript') !== -1) { - typescript = false -} - -const projectName = args[0] || name - -const project = new Project({ - projectName, - projectDir: process.cwd(), - templateSource, - clone, - template, - description, - typescript, - css -}) - -project.create() diff --git a/packages/taro-cli/bin/taro-update b/packages/taro-cli/bin/taro-update deleted file mode 100755 index c28d5f068121..000000000000 --- a/packages/taro-cli/bin/taro-update +++ /dev/null @@ -1,127 +0,0 @@ -#!/usr/bin/env node -const path = require('path') -const fs = require('fs-extra') -const program = require('commander') -const chalk = require('chalk') -const { getPkgItemByKey, shouldUseYarn, shouldUseCnpm } = require('../dist/util') -const ora = require('ora') -const exec = require('child_process').exec -const getLatestVersion = require('latest-version') -const { PROJECT_CONFIG, UPDATE_PACKAGE_LIST } = require('../dist/util/constants') -const projectConfPath = path.join(process.cwd(), PROJECT_CONFIG) -const pkgPath = path.join(process.cwd(), 'package.json') - -const pkgName = getPkgItemByKey('name') - -// 这里没有使用 command 的形式:taro-update-self -program.parse(process.argv) - -const args = program.args - -if (args.length === 1) { - switch (args[0]) { - case 'self': { - updateSelf() - break - } - case 'project': { - updateProject() - break - } - default: - info() - } -} else { - info() -} - -function info () { - console.log(chalk.red('命令错误:')) - console.log(`${chalk.green('taro update self')} 更新 Taro 开发工具 taro-cli 到最新版本`) - console.log(`${chalk.green('taro update project')} 更新项目所有 Taro 相关依赖到最新版本...`) -} - -function updateSelf () { - let command - if (shouldUseCnpm()) { - command = 'cnpm i -g @tarojs/cli@latest' - } else { - command = 'npm i -g @tarojs/cli@latest' - } - - const child = exec(command) - - const spinner = ora('即将将 Taro 开发工具 taro-cli 更新到最新版本...').start() - - child.stdout.on('data', function (data) { - console.log(data) - spinner.stop() - }) - child.stderr.on('data', function (data) { - console.log(data) - spinner.stop() - }) -} - -async function updateProject () { - if (!fs.existsSync(projectConfPath)) { - console.log(chalk.red(`找不到项目配置文件${PROJECT_CONFIG},请确定当前目录是Taro项目根目录!`)) - process.exit(1) - } - const packageMap = require(pkgPath) - - const version = await getLatestVersion(pkgName) - // 获取 NervJS 版本 - const nervJSVersion = `^${await getLatestVersion('nervjs')}` - - // 更新 @tarojs/* 版本和 NervJS 版本 - Object.keys(packageMap.dependencies).forEach((key) => { - if (UPDATE_PACKAGE_LIST.indexOf(key) !== -1) { - if (key.includes('nerv')) { - packageMap.dependencies[key] = nervJSVersion - } else { - packageMap.dependencies[key] = version - } - } - }) - Object.keys(packageMap.devDependencies).forEach((key) => { - if (UPDATE_PACKAGE_LIST.indexOf(key) !== -1) { - if (key.includes('nerv')) { - packageMap.devDependencies[key] = nervJSVersion - } else { - packageMap.devDependencies[key] = version - } - } - }) - - // 写入package.json - try { - await fs.writeJson(pkgPath, packageMap, {spaces: '\t'}) - console.log(chalk.green('更新项目 package.json 成功!')) - console.log() - } catch (err) { - console.error(err) - } - - let command - if (shouldUseYarn()) { - command = 'yarn' - } else if (shouldUseCnpm()) { - command = 'cnpm install' - } else { - command = 'npm install' - } - - const child = exec(command) - - const spinner = ora('即将将项目所有 Taro 相关依赖更新到最新版本...').start() - - child.stdout.on('data', function (data) { - spinner.stop() - console.log(data) - }) - child.stderr.on('data', function (data) { - spinner.stop() - console.log(data) - }) -} diff --git a/packages/taro-cli/package.json b/packages/taro-cli/package.json index 2ff953b3be76..0f11aa810fbd 100644 --- a/packages/taro-cli/package.json +++ b/packages/taro-cli/package.json @@ -39,13 +39,14 @@ "author": "O2Team", "license": "MIT", "dependencies": { + "@tarojs/helper": "3.0.0-beta.6", + "@tarojs/service": "3.0.0-beta.6", "@tarojs/taro": "3.0.0-beta.6", "@tarojs/taroize": "3.0.0-beta.6", "@tarojs/transformer-wx": "^2.0.4", "@types/request": "^2.48.1", "@typescript-eslint/parser": "^2.0.0", "adm-zip": "^0.4.13", - "autoprefixer": "^8.4.1", "babel-core": "^6.26.3", "babel-eslint": "^8.2.3", "babel-generator": "^6.26.1", @@ -61,9 +62,6 @@ "babel-types": "^6.26.0", "babylon": "^6.18.0", "better-babel-generator": "^6.26.1", - "chalk": "2.4.2", - "chokidar": "^2.0.3", - "commander": "^2.19.0", "cross-spawn": "^6.0.5", "css-to-react-native-transform": "^1.4.0", "css-what": "^3.2.0", @@ -89,6 +87,7 @@ "mem-fs": "^1.1.3", "mem-fs-editor": "^4.0.0", "minimatch": "^3.0.4", + "minimist": "1.2.5", "npm-check": "^5.9.0", "ora": "^2.0.0", "postcss": "^6.0.22", @@ -115,8 +114,7 @@ "vinyl": "^2.1.0", "vinyl-fs": "^3.0.2", "xml2js": "^0.4.19", - "xxhashjs": "^0.2.2", - "yauzl": "2.10.0" + "xxhashjs": "^0.2.2" }, "devDependencies": { "@tarojs/taro": "3.0.0-alpha.4" diff --git a/packages/taro-cli/src/build.ts b/packages/taro-cli/src/build.ts deleted file mode 100644 index 385129d4b118..000000000000 --- a/packages/taro-cli/src/build.ts +++ /dev/null @@ -1,88 +0,0 @@ -import * as path from 'path' -import * as fs from 'fs-extra' -import { SyncHook, Hook } from 'tapable' -import * as _ from 'lodash' -import chalk from 'chalk' -import { IProjectConfig, ICommonPlugin } from '@tarojs/taro/types/compile' - -import { BUILD_TYPES, PROJECT_CONFIG } from './util/constants' -import { IBuildOptions } from './util/types' -import { emptyDirectory } from './util' -import CONFIG from './config' - -interface IBuilderHooks { - beforeBuild: Hook, - afterBuild: Hook -} - -export default class Builder { - hooks: IBuilderHooks - appPath: string - config: IProjectConfig - constructor (appPath: string) { - this.hooks = { - beforeBuild: new SyncHook(['config']), - afterBuild: new SyncHook(['builder']) - } - - this.appPath = appPath - this.init() - } - - init () { - this.resolveConfig() - this.applyPlugins() - } - - resolveConfig () { - this.config = require(path.join(this.appPath, PROJECT_CONFIG))(_.merge) - } - - applyPlugins () { - const plugins = this.config.plugins || [] - if (plugins.length) { - plugins.forEach((plugin: ICommonPlugin) => { - plugin.apply(this) - }) - } - } - - emptyFirst ({ watch, type }) { - const outputPath = path.join(this.appPath, `${this.config.outputRoot || CONFIG.OUTPUT_DIR}`) - if (!fs.existsSync(outputPath)) { - fs.ensureDirSync(outputPath) - } else if (type !== BUILD_TYPES.H5 && (type !== BUILD_TYPES.QUICKAPP || !watch)) { - emptyDirectory(outputPath) - } - } - - build (buildOptions: IBuildOptions) { - this.hooks.beforeBuild.call(this.config) - const { type, watch, port } = buildOptions - this.emptyFirst({ type, watch }) - switch (type) { - case BUILD_TYPES.H5: - this.buildForH5(this.appPath, { watch, port }) - break - case BUILD_TYPES.WEAPP: - case BUILD_TYPES.SWAN: - case BUILD_TYPES.ALIPAY: - case BUILD_TYPES.TT: - case BUILD_TYPES.QUICKAPP: - case BUILD_TYPES.QQ: - case BUILD_TYPES.JD: - this.buildForMini(this.appPath, buildOptions) - break - default: - console.log(chalk.red('输入类型错误,目前只支持 weapp/swan/alipay/tt/qq/h5 六端类型')) - } - } - - buildForH5 (appPath: string, buildOptions: IBuildOptions) { - require('./h5').build(appPath, buildOptions) - } - - buildForMini (appPath: string, buildOptions: IBuildOptions) { - require('./mini').build(appPath, buildOptions, null, this) - } -} diff --git a/packages/taro-cli/src/cli.ts b/packages/taro-cli/src/cli.ts new file mode 100644 index 000000000000..ec47b72dcc63 --- /dev/null +++ b/packages/taro-cli/src/cli.ts @@ -0,0 +1,151 @@ +import * as path from 'path' + +import * as minimist from 'minimist' +import { Kernel } from '@tarojs/service' + +import build from './commands/build' +import init from './commands/init' +import create from './commands/create' +import config from './commands/config' +import info from './commands/info' +import doctor from './commands/doctor' +import convert from './commands/convert' +import update from './commands/update' +import customCommand from './commands/customCommand' +import { getPkgVersion } from './util' + +export default class CLI { + appPath: string + constructor (appPath) { + this.appPath = appPath || process.cwd() + } + + run () { + this.parseArgs() + } + + parseArgs () { + const args = minimist(process.argv.slice(2), { + alias: { + version: ['v'], + help: ['h'] + }, + boolean: ['version', 'help'] + }) + const _ = args._ + const command = _[0] + if (command) { + const kernel = new Kernel({ + appPath: this.appPath, + presets: [ + path.resolve(__dirname, '.', 'presets', 'index.js') + ] + }) + switch (command) { + case 'build': + build(kernel, { + platform: args.type, + isWatch: !!args.watch, + port: args.port, + release: args.release, + ui: args.ui, + uiIndex: args.uiIndex, + page: args.page, + component: args.component, + plugin: args.plugin, + isHelp: args.h + }) + break + case 'init': + const projectName = _[1] + init(kernel, { + appPath: this.appPath, + projectName, + typescript: args.typescript, + templateSource: args['template-source'], + clone: !!args.clone, + template: args.template, + css: args.css, + isHelp: args.h + }) + break + case 'create': + const type = _[1] || 'page' + const name = _[2] || args.name + create(kernel, { + appPath: this.appPath, + type, + name, + description: args.description, + isHelp: args.h + }) + break + case 'config': + const cmd = _[1] + const key = _[2] + const value = _[3] + config(kernel, { + cmd, + key, + value, + json: !!args.json, + isHelp: args.h + }) + break + case 'info': + const rn = _[1] + info(kernel, { + appPath: this.appPath, + rn, + isHelp: args.h + }) + break + case 'doctor': + doctor(kernel, { + appPath: this.appPath, + isHelp: args.h + }) + break + case 'convert': + convert(kernel, { + appPath: this.appPath, + isHelp: args.h + }) + break + case 'update': + const updateType = _[1] + const version = _[2] + update(kernel, { + appPath: this.appPath, + updateType, + version, + isHelp: args.h + }) + break + default: + customCommand(command, kernel, args) + break + } + } else { + if (args.h) { + console.log('Usage: taro [options]') + console.log() + console.log('Options:') + console.log(' -v, --version output the version number') + console.log(' -h, --help output usage information') + console.log() + console.log('Commands:') + console.log(' init [projectName] Init a project with default templete') + console.log(' config Taro config') + console.log(' create Create page for project') + console.log(' build Build a project with options') + console.log(' update Update packages of taro') + console.log(' info Diagnostics Taro env info') + console.log(' doctor Diagnose taro project') + console.log(' help [cmd] display help for [cmd]') + } else if (args.v) { + console.log(getPkgVersion()) + } + } + } +} diff --git a/packages/taro-cli/src/commands/build.ts b/packages/taro-cli/src/commands/build.ts new file mode 100644 index 000000000000..2c54e8456e69 --- /dev/null +++ b/packages/taro-cli/src/commands/build.ts @@ -0,0 +1,66 @@ +import { Kernel } from '@tarojs/service' + +export default function build (kernel: Kernel, { + platform, + isWatch, + release, + port, + ui, + uiIndex, + page, + component, + envHasBeenSet = false, + plugin, + isHelp +}: { + platform: string, + isWatch: boolean, + release?: boolean + port?: number + ui?: boolean + uiIndex?: string + page?: string + component?: string + envHasBeenSet?: boolean + plugin?: string | boolean + isHelp?: boolean +}) { + if (plugin) { + if (typeof plugin === 'boolean') { + plugin = 'weapp' + } + platform = 'plugin' + } + if (platform === 'plugin') { + plugin = plugin || 'weapp' + } + if (ui) { + platform = 'ui' + } + let nodeEnv = process.env.NODE_ENV + if (!nodeEnv) { + if (isWatch) { + nodeEnv = 'development' + } else { + nodeEnv = 'production' + } + } + process.env.NODE_ENV = nodeEnv + process.env.TARO_ENV = platform + kernel.run({ + name: 'build', + opts: { + platform, + isWatch, + release, + port, + ui, + uiIndex, + page, + component, + envHasBeenSet, + plugin, + isHelp + } + }) +} diff --git a/packages/taro-cli/src/commands/config.ts b/packages/taro-cli/src/commands/config.ts new file mode 100644 index 000000000000..02f579799c0b --- /dev/null +++ b/packages/taro-cli/src/commands/config.ts @@ -0,0 +1,26 @@ +import { Kernel } from '@tarojs/service' + +export default function config (kernel: Kernel, { + cmd, + key, + value, + json, + isHelp +}: { + cmd: string, + key?: string, + value?: string, + json?: boolean, + isHelp?: boolean +}) { + kernel.run({ + name: 'config', + opts: { + cmd, + key, + value, + json, + isHelp + } + }) +} diff --git a/packages/taro-cli/src/commands/convert.ts b/packages/taro-cli/src/commands/convert.ts new file mode 100644 index 000000000000..5ce8eb0f02dc --- /dev/null +++ b/packages/taro-cli/src/commands/convert.ts @@ -0,0 +1,17 @@ +import { Kernel } from '@tarojs/service' + +export default function convert (kernel: Kernel, { + appPath, + isHelp +}: { + appPath: string, + isHelp?: boolean +}) { + kernel.run({ + name: 'convert', + opts: { + appPath, + isHelp + } + }) +} diff --git a/packages/taro-cli/src/commands/create.ts b/packages/taro-cli/src/commands/create.ts new file mode 100644 index 000000000000..05f9c047da1e --- /dev/null +++ b/packages/taro-cli/src/commands/create.ts @@ -0,0 +1,26 @@ +import { Kernel } from '@tarojs/service' + +export default function create (kernel: Kernel, { + appPath, + type, + name, + description, + isHelp +}: { + appPath: string, + type: string, + name: string, + description?: string, + isHelp?: boolean +}) { + kernel.run({ + name: 'create', + opts: { + appPath, + type, + name, + description, + isHelp + } + }) +} diff --git a/packages/taro-cli/src/commands/customCommand.ts b/packages/taro-cli/src/commands/customCommand.ts new file mode 100644 index 000000000000..58e7f63cf0d1 --- /dev/null +++ b/packages/taro-cli/src/commands/customCommand.ts @@ -0,0 +1,25 @@ +import { Kernel } from '@tarojs/service' + +export default function customCommand ( + command: string, + kernel: Kernel, + args: { _: string[], [key: string]: any } +) { + if (typeof command === 'string') { + const options: any = {} + const excludeKeys = ['_', 'version', 'v', 'help', 'h'] + Object.keys(args).forEach(key => { + if (!excludeKeys.includes(key)) { + options[key] = args[key] + } + }) + kernel.run({ + name: command, + opts: { + _: args._, + options, + isHelp: args.h + } + }) + } +} diff --git a/packages/taro-cli/src/commands/doctor.ts b/packages/taro-cli/src/commands/doctor.ts new file mode 100644 index 000000000000..4748661bff26 --- /dev/null +++ b/packages/taro-cli/src/commands/doctor.ts @@ -0,0 +1,17 @@ +import { Kernel } from '@tarojs/service' + +export default function doctor (kernel: Kernel, { + appPath, + isHelp +}: { + appPath: string, + isHelp?: boolean +}) { + kernel.run({ + name: 'doctor', + opts: { + appPath, + isHelp + } + }) +} diff --git a/packages/taro-cli/src/commands/info.ts b/packages/taro-cli/src/commands/info.ts new file mode 100644 index 000000000000..a6296116f5f4 --- /dev/null +++ b/packages/taro-cli/src/commands/info.ts @@ -0,0 +1,20 @@ +import { Kernel } from '@tarojs/service' + +export default function info (kernel: Kernel, { + appPath, + rn, + isHelp +}: { + appPath: string, + rn?: boolean, + isHelp?: boolean +}) { + kernel.run({ + name: 'info', + opts: { + appPath, + rn, + isHelp + } + }) +} diff --git a/packages/taro-cli/src/commands/init.ts b/packages/taro-cli/src/commands/init.ts new file mode 100644 index 000000000000..d15b3bf05bd8 --- /dev/null +++ b/packages/taro-cli/src/commands/init.ts @@ -0,0 +1,35 @@ +import { Kernel } from '@tarojs/service' + +export default function init (kernel: Kernel, { + appPath, + projectName, + typescript, + templateSource, + clone, + template, + css, + isHelp +}: { + appPath: string, + projectName?: string, + typescript?: boolean, + templateSource?: string, + clone?: boolean, + template?: string, + css?: string, + isHelp?: boolean +}) { + kernel.run({ + name: 'init', + opts: { + appPath, + projectName, + typescript, + templateSource, + clone, + template, + css, + isHelp + } + }) +} diff --git a/packages/taro-cli/src/commands/update.ts b/packages/taro-cli/src/commands/update.ts new file mode 100644 index 000000000000..2c817799a64b --- /dev/null +++ b/packages/taro-cli/src/commands/update.ts @@ -0,0 +1,23 @@ +import { Kernel } from '@tarojs/service' + +export default function update (kernel: Kernel, { + appPath, + updateType, + version, + isHelp +}: { + appPath: string, + updateType: string, + version?: string, + isHelp?: boolean +}) { + kernel.run({ + name: 'update', + opts: { + appPath, + updateType, + version, + isHelp + } + }) +} diff --git a/packages/taro-cli/src/config/browser_list.ts b/packages/taro-cli/src/config/browser_list.ts deleted file mode 100644 index 4043175f5e86..000000000000 --- a/packages/taro-cli/src/config/browser_list.ts +++ /dev/null @@ -1 +0,0 @@ -export default ['last 3 versions', 'Android >= 4.1', 'ios >= 8'] diff --git a/packages/taro-cli/src/convertor/helper.ts b/packages/taro-cli/src/convertor/helper.ts index b57b36783ff7..ba276ee0e897 100644 --- a/packages/taro-cli/src/convertor/helper.ts +++ b/packages/taro-cli/src/convertor/helper.ts @@ -2,9 +2,14 @@ import * as path from 'path' import * as fs from 'fs-extra' import * as t from 'babel-types' -import { printLog, promoteRelativePath, resolveScriptPath } from '../util' - -import { processTypeEnum, REG_SCRIPT, REG_TYPESCRIPT } from '../util/constants' +import { + printLog, + promoteRelativePath, + resolveScriptPath, + processTypeEnum, + REG_SCRIPT, + REG_TYPESCRIPT +} from '@tarojs/helper' function getRelativePath ( rootPath: string, diff --git a/packages/taro-cli/src/convertor/index.ts b/packages/taro-cli/src/convertor/index.ts index a27f41646b8f..60aac0a558a8 100644 --- a/packages/taro-cli/src/convertor/index.ts +++ b/packages/taro-cli/src/convertor/index.ts @@ -2,7 +2,6 @@ import * as fs from 'fs-extra' import * as path from 'path' import { AppConfig, TabBar } from '@tarojs/taro' -import chalk from 'chalk' import * as prettier from 'prettier' import traverse, { NodePath } from 'babel-traverse' import * as t from 'babel-types' @@ -16,25 +15,21 @@ import { printLog, promoteRelativePath, resolveScriptPath, - processStyleImports, - getPkgVersion, + CSS_IMPORT_REG, pascalCase, - emptyDirectory -} from '../util' -import { - BUILD_TYPES, - MINI_APP_FILES, + emptyDirectory, processTypeEnum, REG_TYPESCRIPT, REG_URL, REG_IMAGE, - IMINI_APP_FILE_TYPE -} from '../util/constants' + chalk +} from '@tarojs/helper' import { generateMinimalEscapeCode } from '../util/astConvert' import Creator from '../create/creator' import babylonConfig from '../config/babylon' import { IPrettierConfig } from '../util/types' import { analyzeImportUrl, incrementId } from './helper' +import { getPkgVersion } from '../util' const template = require('babel-template') @@ -77,12 +72,37 @@ interface ITaroizeOptions { rootPath?: string } +function processStyleImports (content: string, processFn: (a: string, b: string) => string) { + const style: string[] = [] + const imports: string[] = [] + const styleReg = new RegExp('.wxss') + content = content.replace(CSS_IMPORT_REG, (m, $1, $2) => { + if (styleReg.test($2)) { + style.push(m) + imports.push($2) + if (processFn) { + return processFn(m, $2) + } + return '' + } + if (processFn) { + return processFn(m, $2) + } + return m + }) + return { + content, + style, + imports + } +} + export default class Convertor { root: string convertRoot: string convertDir: string importsDir: string - fileTypes: IMINI_APP_FILE_TYPE + fileTypes: any pages: Set components: Set hadBeenCopyedFiles: Set @@ -100,7 +120,12 @@ export default class Convertor { this.convertRoot = path.join(this.root, 'taroConvert') this.convertDir = path.join(this.convertRoot, 'src') this.importsDir = path.join(this.convertDir, 'imports') - this.fileTypes = MINI_APP_FILES[BUILD_TYPES.WEAPP] + this.fileTypes = { + TEMPL: '.wxml', + STYLE: '.wxss', + CONFIG: '.json', + SCRIPT: '.js' + } this.pages = new Set() this.components = new Set() this.hadBeenCopyedFiles = new Set() @@ -734,12 +759,12 @@ ${code} } async traverseStyle (filePath: string, style: string) { - const { imports, content } = processStyleImports(style, BUILD_TYPES.WEAPP, (str, stylePath) => { + const { imports, content } = processStyleImports(style, (str, stylePath) => { let relativePath = stylePath if (path.isAbsolute(relativePath)) { relativePath = promoteRelativePath(path.relative(filePath, path.join(this.root, stylePath))) } - return str.replace(stylePath, relativePath).replace(MINI_APP_FILES[BUILD_TYPES.WEAPP].STYLE, OUTPUT_STYLE_EXTNAME) + return str.replace(stylePath, relativePath).replace('.wxss', OUTPUT_STYLE_EXTNAME) }) const styleDist = this.getDistFilePath(filePath, OUTPUT_STYLE_EXTNAME) const { css } = await this.styleUnitTransform(filePath, content) diff --git a/packages/taro-cli/src/create/fetchTemplate.ts b/packages/taro-cli/src/create/fetchTemplate.ts index a8b2cfe131ec..c78b09706123 100644 --- a/packages/taro-cli/src/create/fetchTemplate.ts +++ b/packages/taro-cli/src/create/fetchTemplate.ts @@ -1,10 +1,11 @@ import * as fs from 'fs-extra' import * as path from 'path' -import chalk from 'chalk' import * as ora from 'ora' import * as AdmZip from 'adm-zip' import * as download from 'download-git-repo' import * as request from 'request' +import { chalk } from '@tarojs/helper' + import { getTemplateSourceType, readDirWithFileTypes } from '../util' const TEMP_DOWNLOAD_FLODER = 'taro-temp' diff --git a/packages/taro-cli/src/create/init.ts b/packages/taro-cli/src/create/init.ts index c6998951d9b6..bc97efde3824 100644 --- a/packages/taro-cli/src/create/init.ts +++ b/packages/taro-cli/src/create/init.ts @@ -1,12 +1,13 @@ import * as fs from 'fs-extra' import * as path from 'path' -import chalk from 'chalk' import { exec } from 'child_process' import * as ora from 'ora' +import { shouldUseYarn, shouldUseCnpm, chalk } from '@tarojs/helper' + +import { getAllFilesInFloder, getPkgVersion } from '../util' import { IProjectConf } from './project' import { IPageConf } from './page' import Creator from './creator' -import * as helper from '../util' const CONFIG_DIR_NAME = 'config' const TEMPLATE_CREATOR = 'template_creator.js' @@ -174,11 +175,11 @@ export async function createApp (creater: Creator, params: IProjectConf, cb) { } // npm & yarn - const version = helper.getPkgVersion() - const shouldUseYarn = helper.shouldUseYarn() - const useNpmrc = !shouldUseYarn + const version = getPkgVersion() + const isShouldUseYarn = shouldUseYarn() + const useNpmrc = !isShouldUseYarn const yarnLockfilePath = path.join('yarn-lockfiles', `${version}-yarn.lock`) - const useYarnLock = shouldUseYarn && fs.existsSync(creater.templatePath(template, yarnLockfilePath)) + const useYarnLock = isShouldUseYarn && fs.existsSync(creater.templatePath(template, yarnLockfilePath)) if (useNpmrc) { creater.template(template, '.npmrc', path.join(projectPath, '.npmrc')) @@ -190,7 +191,7 @@ export async function createApp (creater: Creator, params: IProjectConf, cb) { } // 遍历出模板中所有文件 - const files = await helper.getAllFilesInFloder(templatePath, doNotCopyFiles) + const files = await getAllFilesInFloder(templatePath, doNotCopyFiles) // 引入模板编写者的自定义逻辑 const handlerPath = path.join(templatePath, TEMPLATE_CREATOR) @@ -242,9 +243,9 @@ export async function createApp (creater: Creator, params: IProjectConf, cb) { if (autoInstall) { // packages install let command: string - if (shouldUseYarn) { + if (isShouldUseYarn) { command = 'yarn install' - } else if (helper.shouldUseCnpm()) { + } else if (shouldUseCnpm()) { command = 'cnpm install' } else { command = 'npm install' diff --git a/packages/taro-cli/src/create/page.ts b/packages/taro-cli/src/create/page.ts index 4b733d60cb99..767a3411a335 100644 --- a/packages/taro-cli/src/create/page.ts +++ b/packages/taro-cli/src/create/page.ts @@ -1,11 +1,10 @@ import * as path from 'path' import * as fs from 'fs-extra' -import chalk from 'chalk' +import { DEFAULT_TEMPLATE_SRC, TARO_CONFIG_FLODER, TARO_BASE_CONFIG, getUserHomeDir, chalk } from '@tarojs/helper' + import Creator from './creator' import { createPage } from './init' import fetchTemplate from './fetchTemplate' -import { DEFAULT_TEMPLATE_SRC, TARO_CONFIG_FLODER, TARO_BASE_CONFIG } from '../util/constants' -import { getUserHomeDir } from '../util' export interface IPageConf { projectDir: string; diff --git a/packages/taro-cli/src/create/project.ts b/packages/taro-cli/src/create/project.ts index 012d0361dfc2..036f43eab509 100644 --- a/packages/taro-cli/src/create/project.ts +++ b/packages/taro-cli/src/create/project.ts @@ -1,14 +1,19 @@ import * as path from 'path' import * as fs from 'fs-extra' -import chalk from 'chalk' import * as inquirer from 'inquirer' import * as semver from 'semver' +import { + DEFAULT_TEMPLATE_SRC, + TARO_CONFIG_FLODER, + TARO_BASE_CONFIG, + getUserHomeDir, + chalk, + SOURCE_DIR +} from '@tarojs/helper' + import { createApp } from './init' import fetchTemplate from './fetchTemplate' import Creator from './creator' -import CONFIG from '../config' -import { DEFAULT_TEMPLATE_SRC, TARO_CONFIG_FLODER, TARO_BASE_CONFIG } from '../util/constants' -import { getUserHomeDir } from '../util' export interface IProjectConf { projectName: string; @@ -261,7 +266,7 @@ export default class Project extends Creator { } write (cb?: () => void) { - this.conf.src = CONFIG.SOURCE_DIR + this.conf.src = SOURCE_DIR createApp(this, this.conf, cb).catch(err => console.log(err)) } } diff --git a/packages/taro-cli/src/doctor/abilityXMLValidator.ts b/packages/taro-cli/src/doctor/abilityXMLValidator.ts index 40eaf6d3a4eb..a976aadfe0ed 100644 --- a/packages/taro-cli/src/doctor/abilityXMLValidator.ts +++ b/packages/taro-cli/src/doctor/abilityXMLValidator.ts @@ -32,7 +32,7 @@ ability.xml所需声明内容包括: import * as _ from 'lodash/fp' import * as fs from 'fs-extra' import * as path from 'path' -import chalk from 'chalk' +import { chalk } from '@tarojs/helper' import { IErrorLine } from './interface' diff --git a/packages/taro-cli/src/doctor/configSchema.ts b/packages/taro-cli/src/doctor/configSchema.ts index b45f4b347070..47389ddad3a6 100644 --- a/packages/taro-cli/src/doctor/configSchema.ts +++ b/packages/taro-cli/src/doctor/configSchema.ts @@ -8,7 +8,15 @@ const schema = Joi.object().keys({ sourceRoot: Joi.string().required(), outputRoot: Joi.string().required(), - plugins: Joi.array().items(Joi.object()), + plugins: Joi.array().items(Joi.alternatives( + Joi.string(), + Joi.array() + )), + + presets: Joi.array().items(Joi.alternatives( + Joi.string(), + Joi.array() + )), env: Joi.object().pattern(Joi.string(), Joi.string()), diff --git a/packages/taro-cli/src/doctor/recommandValidator.ts b/packages/taro-cli/src/doctor/recommandValidator.ts index cce1ff490b9a..3b77acbffa32 100644 --- a/packages/taro-cli/src/doctor/recommandValidator.ts +++ b/packages/taro-cli/src/doctor/recommandValidator.ts @@ -1,7 +1,7 @@ import * as _ from 'lodash/fp' import * as fs from 'fs-extra' import * as path from 'path' -import chalk from 'chalk' +import { chalk } from '@tarojs/helper' import { IErrorLine } from './interface' diff --git a/packages/taro-cli/src/h5/index.ts b/packages/taro-cli/src/h5/index.ts deleted file mode 100644 index 0d3fabeb7847..000000000000 --- a/packages/taro-cli/src/h5/index.ts +++ /dev/null @@ -1,143 +0,0 @@ -import * as path from 'path' -import { promisify } from 'util' -import { IProjectConfig, IH5Config, IDeviceRatio } from '@tarojs/taro/types/compile' -import { fromPairs, get, merge } from 'lodash' -import * as rimraf from 'rimraf' - -import CONFIG from '../config' -import { - recursiveMerge, - resolveScriptPath -} from '../util' -import { BUILD_TYPES, PROJECT_CONFIG } from '../util/constants' -import * as npmProcess from '../util/npm' -import { IBuildOptions, IOption } from '../util/types' -import Builder from '../build' - -const pRimraf = promisify(rimraf) - -const defaultH5Config: Partial = { - router: { - mode: 'hash', - customRoutes: {}, - basename: '/' - } -} - -type PageName = string -type FilePath = string - -class Compiler { - projectConfig: IProjectConfig - h5Config: IH5Config - sourceRoot: string - sourcePath: string - outputPath: string - outputDir: string - entryFilePath: string - entryFileName: string - pathAlias: { - [key: string]: string - } - - pages: [PageName, FilePath][] = [] - - isUi: boolean - - constructor (public appPath: string, entryFile?: string, isUi?: boolean) { - const projectConfig = recursiveMerge({ - h5: defaultH5Config - }, require(path.join(appPath, PROJECT_CONFIG))(merge)) - this.projectConfig = projectConfig - const sourceDir = projectConfig.sourceRoot || CONFIG.SOURCE_DIR - this.sourceRoot = sourceDir - const outputDir = projectConfig.outputRoot || CONFIG.OUTPUT_DIR - this.outputDir = outputDir - this.h5Config = get(projectConfig, 'h5') - this.sourcePath = path.join(appPath, sourceDir) - this.outputPath = path.join(appPath, outputDir) - this.entryFileName = `${entryFile || CONFIG.ENTRY}.config` - this.entryFilePath = resolveScriptPath(path.join(this.sourcePath, entryFile || CONFIG.ENTRY)) - this.pathAlias = projectConfig.alias || {} - this.isUi = !!isUi - } - - async clean () { - const outputPath = this.outputPath - try { - await pRimraf(outputPath) - } catch (e) { - console.log(e) - } - } - - async buildDist ({ watch, port }: IBuildOptions) { - const isMultiRouterMode = get(this.h5Config, 'router.mode') === 'multi' - const projectConfig = this.projectConfig - /** 不是真正意义上的IH5Config对象 */ - const h5Config: IH5Config & { - deviceRatio?: IDeviceRatio - env?: IOption - } = this.h5Config - const outputDir = this.outputDir - const sourceRoot = this.sourceRoot - const pathAlias = this.pathAlias - - const getEntryFile = (filename: string) => { - return path.join(this.sourcePath, filename) - } - - const entryFile = path.basename(this.entryFileName) - const entryFileName = path.basename(this.entryFileName, path.extname(this.entryFileName)) - const defaultEntry = isMultiRouterMode - ? fromPairs(this.pages.map(([_, filePath]) => { - return [filePath, [getEntryFile(filePath)]] - })) - : { - [entryFileName]: [getEntryFile(entryFile)] - } - if (projectConfig.deviceRatio) { - h5Config.deviceRatio = projectConfig.deviceRatio - } - if (projectConfig.env) { - h5Config.env = projectConfig.env - } - recursiveMerge(h5Config, { - alias: pathAlias, - copy: projectConfig.copy, - defineConstants: projectConfig.defineConstants, - designWidth: projectConfig.designWidth, - entry: merge(defaultEntry, h5Config.entry), - entryFileName, - env: { - TARO_ENV: JSON.stringify(BUILD_TYPES.H5), - FRAMEWORK: JSON.stringify(projectConfig.framework), - TARO_VERSION: JSON.stringify(require('../../package.json').version) - }, - isWatch: !!watch, - outputRoot: outputDir, - babel: projectConfig.babel, - csso: projectConfig.csso, - // uglify: projectConfig.uglify, - terser: projectConfig.terser, - sass: projectConfig.sass, - plugins: projectConfig.plugins, - port, - sourceRoot, - framework: projectConfig.framework - }) - const webpackRunner = await npmProcess.getNpmPkg('@tarojs/webpack-runner', this.appPath) - webpackRunner(this.appPath, h5Config) - } -} - -export { Compiler } - -export async function build (appPath: string, buildConfig: IBuildOptions, _: Builder) { - process.env.TARO_ENV = BUILD_TYPES.H5 - const compiler = new Compiler(appPath) - await compiler.clean() - if (compiler.h5Config.transformOnly !== true) { - await compiler.buildDist(buildConfig) - } -} diff --git a/packages/taro-cli/src/index.ts b/packages/taro-cli/src/index.ts index b99811b576ec..d41e56b7882b 100644 --- a/packages/taro-cli/src/index.ts +++ b/packages/taro-cli/src/index.ts @@ -1,21 +1,15 @@ import Convertor from './convertor' -import Builder from './build' import doctor from './doctor' import Project from './create/project' -import { Compiler as H5Compiler } from './h5/index' export default { Convertor, - Builder, doctor, - Project, - H5Compiler + Project } export { Convertor, - Builder, doctor, - Project, - H5Compiler + Project } diff --git a/packages/taro-cli/src/jdreact/convert_to_jdreact.ts b/packages/taro-cli/src/jdreact/convert_to_jdreact.ts index 75431e3b689a..bc9adcdc1885 100644 --- a/packages/taro-cli/src/jdreact/convert_to_jdreact.ts +++ b/packages/taro-cli/src/jdreact/convert_to_jdreact.ts @@ -3,9 +3,7 @@ import * as path from 'path' import * as klaw from 'klaw' import * as _ from 'lodash' -import * as Util from '../util' - -import { processTypeEnum } from '../util/constants' +import { processTypeEnum, printLog } from '@tarojs/helper' const JDREACT_DIR = '.jdreact' const NATIVE_BUNDLES_DIR = 'bundle' @@ -38,7 +36,7 @@ async function processFile ({ filePath, tempPath, entryBaseName }) { const indexDistFilePath = path.join(indexDistDirPath, `${moduleName}.js`) fs.ensureDirSync(indexDistDirPath) fs.writeFileSync(indexDistFilePath, indexJsStr) - Util.printLog(processTypeEnum.GENERATE, `${moduleName}.js`, indexDistFilePath) + printLog(processTypeEnum.GENERATE, `${moduleName}.js`, indexDistFilePath) return } @@ -51,13 +49,13 @@ async function processFile ({ filePath, tempPath, entryBaseName }) { templatePkgObject.name = `jdreact-jsbundle-${moduleName}` templatePkgObject.dependencies = Object.assign({}, tempPkgObject.dependencies, templatePkgObject.dependencies) fs.writeJsonSync(destPkgPath, templatePkgObject, { spaces: 2 }) - Util.printLog(processTypeEnum.GENERATE, 'package.json', destPkgPath) + printLog(processTypeEnum.GENERATE, 'package.json', destPkgPath) return } fs.ensureDirSync(destDirname) fs.copySync(filePath, destFilePath) - Util.printLog(processTypeEnum.COPY, _.camelCase(path.extname(filePath)).toUpperCase(), filePath) + printLog(processTypeEnum.COPY, _.camelCase(path.extname(filePath)).toUpperCase(), filePath) } export function convertToJDReact ({ tempPath, entryBaseName }) { @@ -91,6 +89,6 @@ export function convertToJDReact ({ tempPath, entryBaseName }) { path.join(indexDistDirPath, `${moduleName}.web.js`), { overwrite: false } ) - Util.printLog(processTypeEnum.COPY, 'templates', templateSrcDirname) + printLog(processTypeEnum.COPY, 'templates', templateSrcDirname) }) } diff --git a/packages/taro-cli/src/mini/helper.ts b/packages/taro-cli/src/mini/helper.ts deleted file mode 100644 index 7a82f2cb83d0..000000000000 --- a/packages/taro-cli/src/mini/helper.ts +++ /dev/null @@ -1,210 +0,0 @@ -import * as fs from 'fs-extra' -import * as path from 'path' -import { execSync } from 'child_process' - -import * as _ from 'lodash' -import * as ora from 'ora' -import chalk from 'chalk' -import { IProjectConfig, ITaroManifestConfig } from '@tarojs/taro/types/compile' - -import { - BUILD_TYPES, - MINI_APP_FILES, - IMINI_APP_FILE_TYPE, - PROJECT_CONFIG, - NODE_MODULES -} from '../util/constants' -import { - resolveScriptPath, - isEmptyObject, - recursiveFindNodeModules, - shouldUseCnpm, - shouldUseYarn, - unzip -} from '../util' -import { - IOption, - INpmConfig -} from '../util/types' -import CONFIG from '../config' -import { downloadGithubRepoLatestRelease } from '../util/dowload' - -export interface IBuildData { - appPath: string, - configDir: string, - sourceDirName: string, - outputDirName: string, - sourceDir: string, - outputDir: string, - originalOutputDir: string, - entryFilePath: string, - entryFileName: string, - projectConfig: IProjectConfig, - npmConfig: INpmConfig, - alias: IOption, - compileConfig: {[k: string]: any}, - isProduction: boolean, - buildAdapter: BUILD_TYPES, - outputFilesTypes: IMINI_APP_FILE_TYPE, - nodeModulesPath: string, - jsxAttributeNameReplace?: { - [key: string]: any; - }; - quickappManifest?: ITaroManifestConfig; -} - -let BuildData: IBuildData - -export function setIsProduction (isProduction: boolean) { - BuildData.isProduction = isProduction -} - -export function setQuickappManifest (quickappManifest: ITaroManifestConfig) { - BuildData.quickappManifest = quickappManifest -} - -export function setBuildData (appPath: string, adapter: BUILD_TYPES, options?: Partial | null): IBuildData { - const configDir = path.join(appPath, PROJECT_CONFIG) - const projectConfig = require(configDir)(_.merge) - const sourceDirName = projectConfig.sourceRoot || CONFIG.SOURCE_DIR - const outputDirName = projectConfig.outputRoot || CONFIG.OUTPUT_DIR - const sourceDir = path.join(appPath, sourceDirName) - const outputDir = path.join(appPath, outputDirName) - const entryFilePath = resolveScriptPath(path.join(sourceDir, CONFIG.ENTRY)) - const entryFileName = path.basename(entryFilePath) - - const pathAlias = projectConfig.alias || {} - const weappConf = projectConfig.weapp || {} - const npmConfig = Object.assign( - { - name: CONFIG.NPM_DIR, - dir: null - }, - weappConf.npm - ) - const useCompileConf = Object.assign({}, weappConf.compile) - BuildData = { - appPath, - configDir, - sourceDirName, - outputDirName, - sourceDir, - outputDir, - originalOutputDir: outputDir, - entryFilePath, - entryFileName, - projectConfig, - npmConfig, - alias: pathAlias, - isProduction: false, - compileConfig: useCompileConf, - buildAdapter: adapter, - outputFilesTypes: MINI_APP_FILES[adapter], - nodeModulesPath: recursiveFindNodeModules(path.join(appPath, NODE_MODULES)), - jsxAttributeNameReplace: weappConf.jsxAttributeNameReplace || {} - } - // 可以自定义输出文件类型 - if (weappConf!.customFilesTypes && !isEmptyObject(weappConf!.customFilesTypes)) { - BuildData.outputFilesTypes = Object.assign( - {}, - BuildData.outputFilesTypes, - weappConf!.customFilesTypes[adapter] || {} - ) - } - if (adapter === BUILD_TYPES.QUICKAPP) { - BuildData.originalOutputDir = BuildData.outputDir - BuildData.outputDirName = `${BuildData.outputDirName}/src` - BuildData.outputDir = path.join(BuildData.appPath, BuildData.outputDirName) - } - if (options) { - Object.assign(BuildData, options) - } - - return BuildData -} - -export function getBuildData (): IBuildData { - return BuildData -} - -export function setOutputDirName (outputDirName) { - BuildData.originalOutputDir = BuildData.outputDir - BuildData.outputDirName = outputDirName - BuildData.outputDir = path.join(BuildData.appPath, BuildData.outputDirName) -} - -export async function prepareQuickAppEnvironment (buildData: IBuildData) { - let isReady = false - let needDownload = false - let needInstall = false - const originalOutputDir = buildData.originalOutputDir - console.log() - if (fs.existsSync(path.join(buildData.originalOutputDir, 'sign'))) { - needDownload = false - } else { - needDownload = true - } - if (needDownload) { - const getSpinner = ora('开始下载快应用运行容器...').start() - await downloadGithubRepoLatestRelease('NervJS/quickapp-container', buildData.appPath, originalOutputDir) - await unzip(path.join(originalOutputDir, 'download_temp.zip')) - getSpinner.succeed('快应用运行容器下载完成') - } else { - console.log(`${chalk.green('✔ ')} 快应用容器已经准备好`) - } - process.chdir(originalOutputDir) - console.log() - if (fs.existsSync(path.join(originalOutputDir, 'node_modules'))) { - needInstall = false - } else { - needInstall = true - } - if (needInstall) { - let command - if (shouldUseYarn()) { - command = 'NODE_ENV=development yarn install' - } else if (shouldUseCnpm()) { - command = 'NODE_ENV=development cnpm install' - } else { - command = 'NODE_ENV=development npm install' - } - const installSpinner = ora('安装快应用依赖环境, 需要一会儿...').start() - try { - const stdout = execSync(command) - installSpinner.color = 'green' - installSpinner.succeed('安装成功') - console.log(`${stdout}`) - isReady = true - } catch (error) { - installSpinner.color = 'red' - installSpinner.fail(chalk.red(`快应用依赖环境安装失败,请进入 ${path.basename(originalOutputDir)} 重新安装!`)) - console.log(`${error}`) - isReady = false - } - } else { - console.log(`${chalk.green('✔ ')} 快应用依赖已经安装好`) - isReady = true - } - return isReady -} - -export async function runQuickApp (isWatch: boolean | void, buildData: IBuildData, port?: number, release?: boolean) { - const originalOutputDir = buildData.originalOutputDir - const { compile } = require(require.resolve('hap-toolkit/lib/commands/compile', { paths: [originalOutputDir] })) - if (isWatch) { - const { launchServer } = require(require.resolve('@hap-toolkit/server', { paths: [originalOutputDir] })) - launchServer({ - port: port || 12306, - watch: isWatch, - clearRecords: false, - disableADB: false - }) - compile('native', 'dev', true) - } else { - if (!release) { - compile('native', 'dev', false) - } else { - compile('native', 'prod', false) - } - } -} diff --git a/packages/taro-cli/src/mini/index.ts b/packages/taro-cli/src/mini/index.ts deleted file mode 100644 index 2fd155e2f466..000000000000 --- a/packages/taro-cli/src/mini/index.ts +++ /dev/null @@ -1,162 +0,0 @@ -import * as fs from 'fs-extra' -import * as path from 'path' -import chalk from 'chalk' - -import { IBuildOptions } from '../util/types' -import { BUILD_TYPES, processTypeEnum } from '../util/constants' -import * as npmProcess from '../util/npm' -import { getBabelConfig, getInstalledNpmPkgVersion, getPkgVersion, printLog } from '../util' -import Builder from '../build' -import * as defaultManifestJSON from '../config/manifest.default.json' - -import { - setBuildData, - setIsProduction, - getBuildData, - setQuickappManifest, - prepareQuickAppEnvironment, - runQuickApp, - IBuildData -} from './helper' - -function buildProjectConfig () { - const { buildAdapter, sourceDir, outputDir, outputDirName, appPath } = getBuildData() - let projectConfigFileName = `project.${buildAdapter}.json` - if (buildAdapter === BUILD_TYPES.WEAPP || buildAdapter === BUILD_TYPES.QQ) { - projectConfigFileName = 'project.config.json' - } - let projectConfigPath = path.join(appPath, projectConfigFileName) - - if (!fs.existsSync(projectConfigPath)) { - projectConfigPath = path.join(sourceDir, projectConfigFileName) - if (!fs.existsSync(projectConfigPath)) return - } - - const origProjectConfig = fs.readJSONSync(projectConfigPath) - if (buildAdapter === BUILD_TYPES.TT) { - projectConfigFileName = 'project.config.json' - } - fs.ensureDirSync(outputDir) - fs.writeFileSync( - path.join(outputDir, projectConfigFileName), - JSON.stringify(Object.assign({}, origProjectConfig, { miniprogramRoot: './' }), null, 2) - ) - printLog(processTypeEnum.GENERATE, '工具配置', `${outputDirName}/${projectConfigFileName}`) -} - -async function buildFrameworkInfo () { - // 百度小程序编译出 .frameworkinfo 文件 - const { buildAdapter, outputDir, outputDirName, nodeModulesPath, projectConfig } = getBuildData() - if (buildAdapter === BUILD_TYPES.SWAN) { - const frameworkInfoFileName = '.frameworkinfo' - const frameworkName = '@tarojs/taro' - const frameworkVersion = getInstalledNpmPkgVersion(frameworkName, nodeModulesPath) - if (frameworkVersion) { - const frameworkinfo = { - toolName: 'Taro', - toolCliVersion: getPkgVersion(), - toolFrameworkVersion: frameworkVersion, - createTime: projectConfig.date ? new Date(projectConfig.date).getTime() : Date.now() - } - fs.writeFileSync(path.join(outputDir, frameworkInfoFileName), JSON.stringify(frameworkinfo, null, 2)) - printLog(processTypeEnum.GENERATE, '框架信息', `${outputDirName}/${frameworkInfoFileName}`) - } else { - printLog(processTypeEnum.WARNING, '依赖安装', chalk.red(`项目依赖 ${frameworkName} 未安装,或安装有误!`)) - } - } -} - -function readQuickAppManifest () { - const { appPath } = getBuildData() - // 读取 project.quickapp.json - const quickappJSONPath = path.join(appPath, 'project.quickapp.json') - let quickappJSON - if (fs.existsSync(quickappJSONPath)) { - quickappJSON = fs.readJSONSync(quickappJSONPath) - } else { - printLog( - processTypeEnum.WARNING, - '缺少配置', - `检测到项目目录下未添加 ${chalk.bold( - 'project.quickapp.json' - )} 文件,将使用默认配置,参考文档 https://nervjs.github.io/taro/docs/project-config.html` - ) - quickappJSON = defaultManifestJSON - } - return quickappJSON -} - -export async function build (appPath: string, { watch, type = BUILD_TYPES.WEAPP, envHasBeenSet = false, port, release }: IBuildOptions, customBuildData: Partial | null | undefined, builder: Builder) { - const buildData = setBuildData(appPath, type, customBuildData) - const isQuickApp = type === BUILD_TYPES.QUICKAPP - process.env.TARO_ENV = type - if (!envHasBeenSet) { - setIsProduction(process.env.NODE_ENV === 'production' || !watch) - } - fs.ensureDirSync(buildData.outputDir) - let quickappJSON - if (!isQuickApp) { - buildProjectConfig() - await buildFrameworkInfo() - } else { - quickappJSON = readQuickAppManifest() - setQuickappManifest(quickappJSON) - } - - await buildWithWebpack({ - appPath - }, builder) - if (isQuickApp) { - const isReady = await prepareQuickAppEnvironment(buildData) - if (!isReady) { - console.log() - console.log(chalk.red('快应用环境准备失败,请重试!')) - process.exit(0) - } - await runQuickApp(watch, buildData, port, release) - } -} - -async function buildWithWebpack ({ appPath }: { appPath: string }, builder) { - const { - entryFilePath, - buildAdapter, - projectConfig, - isProduction, - alias, - sourceDirName, - outputDirName, - nodeModulesPath, - quickappManifest - } = getBuildData() - const miniRunner = await npmProcess.getNpmPkg('@tarojs/mini-runner', appPath) - const babelConfig = getBabelConfig(projectConfig.babel) - const miniRunnerOpts = { - entry: { - app: [entryFilePath] - }, - alias, - copy: projectConfig.copy, - sourceRoot: sourceDirName, - outputRoot: outputDirName, - buildAdapter, - babel: babelConfig, - csso: projectConfig.csso, - sass: projectConfig.sass, - // uglify: projectConfig.uglify, - terser: projectConfig.terser, - plugins: projectConfig.plugins, - projectName: projectConfig.projectName, - isWatch: !isProduction, - env: projectConfig.env, - defineConstants: projectConfig.defineConstants, - designWidth: projectConfig.designWidth, - deviceRatio: projectConfig.deviceRatio, - baseLevel: projectConfig.baseLevel, - framework: projectConfig.framework, - nodeModulesPath, - quickappJSON: quickappManifest, - ...projectConfig.mini - } - await miniRunner(appPath, miniRunnerOpts, builder) -} diff --git a/packages/taro-cli/src/plugin.ts b/packages/taro-cli/src/plugin.ts deleted file mode 100644 index 3ad714397eef..000000000000 --- a/packages/taro-cli/src/plugin.ts +++ /dev/null @@ -1,56 +0,0 @@ -import * as fs from 'fs-extra' -import * as path from 'path' -import chalk from 'chalk' - -import { - BUILD_TYPES -} from './util/constants' - -import { - getBuildData -} from './mini/helper' -import { build as buildMini } from './mini' -import { IBuildOptions } from './util/types' -import { Builder } from '.' - -const PLUGIN_JSON = 'plugin.json' -const PLUGIN_MOCK_JSON = 'plugin-mock.json' - -export async function build (appPath: string, { watch, platform }: IBuildOptions, builder: Builder) { - switch (platform) { - case BUILD_TYPES.WEAPP: - await buildWxPlugin(appPath, { watch, type: BUILD_TYPES.WEAPP }, builder) - break - case BUILD_TYPES.ALIPAY: - await buildAlipayPlugin(appPath, { watch, type: BUILD_TYPES.ALIPAY }, builder) - break - default: - console.log(chalk.red('输入插件类型错误,目前只支持 weapp/alipay 插件类型')) - break - } -} - -async function buildWxPlugin (appPath, { watch, type }, builder) { - await buildMini(appPath, { watch, type: BUILD_TYPES.PLUGIN }, null, builder) - const { outputDirName } = getBuildData() - await buildMini(appPath, { watch, type }, { - outputDirName: `${outputDirName}/miniprogram` - }, builder) -} - -async function buildAlipayPlugin (appPath, { watch, type }, builder) { - await buildMini(appPath, { watch, type }, null, builder) - const { - sourceDir, - outputDir - } = getBuildData() - const pluginJson = path.join(sourceDir, PLUGIN_JSON) - const pluginMockJson = path.join(sourceDir, PLUGIN_MOCK_JSON) - - if (fs.existsSync(pluginJson)) { - fs.copyFileSync(pluginJson, path.join(outputDir, PLUGIN_JSON)) - } - if (fs.existsSync(pluginMockJson)) { - fs.copyFileSync(pluginMockJson, path.join(outputDir, PLUGIN_MOCK_JSON)) - } -} diff --git a/packages/taro-cli/src/presets/commands/build.ts b/packages/taro-cli/src/presets/commands/build.ts new file mode 100644 index 000000000000..d96b60c25bb5 --- /dev/null +++ b/packages/taro-cli/src/presets/commands/build.ts @@ -0,0 +1,104 @@ +import * as path from 'path' + +import { IPluginContext } from '@tarojs/service' + +export default (ctx: IPluginContext) => { + registerBuildHooks(ctx) + ctx.registerCommand({ + name: 'build', + optionsMap: { + '--type [typeName]': 'Build type, weapp/swan/alipay/tt/h5/quickapp/rn/qq/jd', + '--watch': 'Watch mode', + '--page [pagePath]': 'Build one page', + '--component [pagePath]': 'Build one component', + '--env [env]': 'Env type', + '--ui': 'Build Taro UI library', + '--ui-index [uiIndexPath]': 'Index file for build Taro UI library', + '--plugin [typeName]': 'Build Taro plugin project, weapp', + '--port [port]': 'Specified port', + '--release': 'Release quickapp' + }, + async fn (opts) { + const { platform, config } = opts + const { fs, chalk, PROJECT_CONFIG } = ctx.helper + const { outputPath, appPath } = ctx.paths + const { isWatch, envHasBeenSet } = ctx.runOpts + if (!fs.existsSync(path.join(appPath, PROJECT_CONFIG))) { + console.log(chalk.red(`找不到项目配置文件${PROJECT_CONFIG},请确定当前目录是 Taro 项目根目录!`)) + process.exit(1) + } + if (typeof platform !== 'string') { + console.log(chalk.red('请传入正确的编译类型!')) + process.exit(0) + } + process.env.TARO_ENV = platform + fs.ensureDirSync(outputPath) + let isProduction = false + if (!envHasBeenSet) { + isProduction = process.env.NODE_ENV === 'production' || !isWatch + } + + await ctx.applyPlugins('onBuildStart') + await ctx.applyPlugins({ + name: platform, + opts: { + config: { + ...config, + isWatch, + mode: isProduction ? 'production': 'development', + async modifyWebpackChain (chain, webpack) { + ctx.applyPlugins({ + name: 'modifyWebpackChain', + initialVal: chain, + opts: { + chain, + webpack + } + }) + }, + async modifyBuildAssets (assets) { + await ctx.applyPlugins({ + name: 'modifyBuildAssets', + initialVal: assets, + opts: { + assets + } + }) + }, + async modifyMiniConfigs (configMap) { + await ctx.applyPlugins({ + name: 'modifyMiniConfigs', + initialVal: configMap, + opts: { + configMap + } + }) + }, + async onBuildFinish ({ error, stats, isWatch }) { + await ctx.applyPlugins({ + name: 'onBuildFinish', + opts: { + error, + stats, + isWatch + } + }) + } + } + } + }) + } + }) +} + +function registerBuildHooks (ctx) { + [ + 'modifyWebpackChain', + 'modifyBuildAssets', + 'modifyMiniConfigs', + 'onBuildStart', + 'onBuildFinish' + ].forEach(methodName => { + ctx.registerMethod(methodName) + }) +} diff --git a/packages/taro-cli/src/presets/commands/config.ts b/packages/taro-cli/src/presets/commands/config.ts new file mode 100644 index 000000000000..c40726b311fe --- /dev/null +++ b/packages/taro-cli/src/presets/commands/config.ts @@ -0,0 +1,84 @@ +import * as path from 'path' +import { IPluginContext } from '@tarojs/service' + +export default (ctx: IPluginContext) => { + ctx.registerCommand({ + name: 'config', + optionsMap: { + '--json': '以 JSON 形式输出' + }, + synopsisList: [ + 'taro config set ', + 'taro config get ', + 'taro config delete ', + 'taro config list [--json]' + ], + fn () { + const { cmd, key, value, json } = ctx.runOpts + const { fs, getUserHomeDir, TARO_CONFIG_FLODER, TARO_BASE_CONFIG } = ctx.helper + const homedir = getUserHomeDir() + const configPath = path.join(homedir, `${TARO_CONFIG_FLODER}/${TARO_BASE_CONFIG}`) + if (!homedir) return console.log('找不到用户根目录') + + function displayConfigPath (configPath) { + console.log('Config path:', configPath) + console.log() + } + + switch (cmd) { + case 'get': + if (!key) return console.log('Usage: taro config get foo') + if (fs.existsSync(configPath)) { + displayConfigPath(configPath) + const config = fs.readJSONSync(configPath) + console.log('Key:', key, ', value:', config[key]) + } + break + case 'set': + if (!key || !value) return console.log('Usage: taro config set foo bar') + + if (fs.existsSync(configPath)) { + displayConfigPath(configPath) + const config = fs.readJSONSync(configPath) + config[key] = value + fs.writeJSONSync(configPath, config) + } else { + fs.ensureFileSync(configPath) + fs.writeJSONSync(configPath, { + [key]: value + }) + } + console.log('Set key:', key, ', value:', value) + break + case 'delete': + if (!key) return console.log('Usage: taro config delete foo') + + if (fs.existsSync(configPath)) { + displayConfigPath(configPath) + const config = fs.readJSONSync(configPath) + delete config[key] + fs.writeJSONSync(configPath, config) + } + console.log('Deleted:', key) + break + case 'list': + case 'ls': + if (fs.existsSync(configPath)) { + displayConfigPath(configPath) + console.log('Config info:') + const config = fs.readJSONSync(configPath) + if (json) { + console.log(JSON.stringify(config, null, 2)) + } else { + for (const key in config) { + console.log(`${key}=${config[key]}`) + } + } + } + break + default: + break + } + } + }) +} diff --git a/packages/taro-cli/src/presets/commands/convert.ts b/packages/taro-cli/src/presets/commands/convert.ts new file mode 100644 index 000000000000..f850c911281e --- /dev/null +++ b/packages/taro-cli/src/presets/commands/convert.ts @@ -0,0 +1,12 @@ +import { IPluginContext } from '@tarojs/service' + +export default (ctx: IPluginContext) => { + ctx.registerCommand({ + name: 'convert', + async fn () { + const Convertor = require('../../convertor').default + const convertor = new Convertor(ctx.paths.appPath) + convertor.run() + } + }) +} diff --git a/packages/taro-cli/src/presets/commands/create.ts b/packages/taro-cli/src/presets/commands/create.ts new file mode 100644 index 000000000000..1605b989663c --- /dev/null +++ b/packages/taro-cli/src/presets/commands/create.ts @@ -0,0 +1,33 @@ +import { IPluginContext } from '@tarojs/service' + +export default (ctx: IPluginContext) => { + ctx.registerCommand({ + name: 'create', + optionsMap: { + '--name [name]': '名称', + '--description [description]': '介绍' + }, + fn () { + const { + type, + name, + description + } = ctx.runOpts + const { chalk } = ctx.helper + const { appPath } = ctx.paths + if (typeof name !== 'string') { + return console.log(chalk.red('请输入需要创建的页面名称')) + } + if (type === 'page') { + const Page = require('../../create/page').default + const page = new Page({ + pageName: name, + projectDir: appPath, + description + }) + + page.create() + } + } + }) +} diff --git a/packages/taro-cli/src/presets/commands/doctor.ts b/packages/taro-cli/src/presets/commands/doctor.ts new file mode 100644 index 000000000000..85e3f7430f11 --- /dev/null +++ b/packages/taro-cli/src/presets/commands/doctor.ts @@ -0,0 +1,71 @@ +import * as path from 'path' + +import * as _ from 'lodash/fp' +import * as ora from 'ora' +import { IPluginContext } from '@tarojs/service' + +export default (ctx: IPluginContext) => { + ctx.registerCommand({ + name: 'doctor', + async fn () { + const { validators } = require('../../doctor').default + const { abilityXMLValidator } = require('../../doctor/abilityXMLValidator') + const { appPath, configPath } = ctx.paths + const { fs, chalk, PROJECT_CONFIG } = ctx.helper + + if (!configPath ||!fs.existsSync(configPath)) { + console.log(chalk.red(`找不到项目配置文件${PROJECT_CONFIG},请确定当前目录是 Taro 项目根目录!`)) + process.exit(1) + } + const QUICKAPP_CONF_PATH = path.join(appPath, 'project.quickapp.json') + if (fs.existsSync(QUICKAPP_CONF_PATH)) { + validators.push(abilityXMLValidator) + } + + const NOTE_ALL_RIGHT = chalk.green('[✓] ') + const NOTE_VALID = chalk.yellow('[!] ') + const NOTE_INVALID = chalk.red('[✗] ') + + const titleChalk = chalk.hex('#aaa') + const lineChalk = chalk.hex('#fff') + const solutionChalk = chalk.hex('#999') + + function printReport (reports) { + _.forEach(report => { + console.log('\n' + titleChalk(report.desc)) + + if (report.raw) { + console.log(report.raw) + return + } + + if (_.getOr(0, 'lines.length', report) === 0) { + console.log(` ${NOTE_ALL_RIGHT}没有发现问题`) + return + } + + _.forEach(line => { + console.log( + ' ' + + (line.valid ? NOTE_VALID : NOTE_INVALID) + + lineChalk(line.desc) + ) + if (line.solution) { + console.log(' ' + solutionChalk(line.solution)) + } + }, report.lines) + }, reports) + } + + const spinner = ora('正在诊断项目...').start() + const reportsP = _.map(validator => validator({ + appPath, + projectConfig: ctx.initialConfig, + configPath + }), validators) + const reports = await Promise.all(reportsP as any) + spinner.succeed('诊断完成') + printReport(reports) + } + }) +} diff --git a/packages/taro-cli/src/presets/commands/info.ts b/packages/taro-cli/src/presets/commands/info.ts new file mode 100644 index 000000000000..6cd0f6627691 --- /dev/null +++ b/packages/taro-cli/src/presets/commands/info.ts @@ -0,0 +1,41 @@ +import * as path from 'path' + +import * as envinfo from 'envinfo' +import { IPluginContext } from '@tarojs/service' + +import { getPkgVersion } from '../../util' + +export default (ctx: IPluginContext) => { + ctx.registerCommand({ + name: 'info', + async fn () { + const { rn } = ctx.runOpts + const { fs, chalk, PROJECT_CONFIG } = ctx.helper + const { appPath } = ctx.paths + if (!fs.existsSync(path.join(appPath, PROJECT_CONFIG))) { + console.log(chalk.red(`找不到项目配置文件${PROJECT_CONFIG},请确定当前目录是 Taro 项目根目录!`)) + process.exit(1) + } + if (rn) { + const tempPath = path.join(appPath, '.rn_temp') + if (fs.lstatSync(tempPath).isDirectory()) { + process.chdir('.rn_temp') + } + } + await info({}, ctx) + } + }) +} + +async function info (options, ctx) { + const npmPackages = ctx.helper.UPDATE_PACKAGE_LIST.concat(['react', 'react-native', 'nervjs', 'expo', 'taro-ui']) + const info = await envinfo.run(Object.assign({}, { + System: ['OS', 'Shell'], + Binaries: ['Node', 'Yarn', 'npm'], + npmPackages, + npmGlobalPackages: ['typescript'] + }, options), { + title: `Taro CLI ${getPkgVersion()} environment info` + }) + console.log(info) +} diff --git a/packages/taro-cli/src/presets/commands/init.ts b/packages/taro-cli/src/presets/commands/init.ts new file mode 100644 index 000000000000..88f7cc48cf8b --- /dev/null +++ b/packages/taro-cli/src/presets/commands/init.ts @@ -0,0 +1,36 @@ +import { IPluginContext } from '@tarojs/service' + +export default (ctx: IPluginContext) => { + ctx.registerCommand({ + name: 'init', + optionsMap: { + '--name [name]': '项目名称', + '--description [description]': '项目介绍', + '--typescript': '使用TypeScript', + '--no-typescript': '使用TypeScript', + '--template-source [templateSource]': '项目模板源', + '--clone [clone]': '拉取远程模板时使用git clone', + '--template [template]': '项目模板', + '--css [css]': 'CSS预处理器(sass/less/stylus/none)', + '-h, --help': 'output usage information' + }, + async fn () { + // init project + const { appPath } = ctx.paths + const { projectName, templateSource, clone, template, description, typescript, css } = ctx.runOpts + const Project = require('../../create/project').default + const project = new Project({ + projectName, + projectDir: appPath, + templateSource, + clone, + template, + description, + typescript, + css + }) + + project.create() + } + }) +} diff --git a/packages/taro-cli/src/presets/commands/update.ts b/packages/taro-cli/src/presets/commands/update.ts new file mode 100644 index 000000000000..535be9abd318 --- /dev/null +++ b/packages/taro-cli/src/presets/commands/update.ts @@ -0,0 +1,151 @@ +import * as path from 'path' +import { exec } from 'child_process' + +import * as getLatestVersion from 'latest-version' +import * as semver from 'semver' +import * as ora from 'ora' +import { IPluginContext } from '@tarojs/service' + +import { getPkgItemByKey } from '../../util' + +export default (ctx: IPluginContext) => { + ctx.registerCommand({ + name: 'update', + async fn () { + const { appPath, configPath } = ctx.paths + const { chalk, fs, shouldUseCnpm, shouldUseYarn, PROJECT_CONFIG, UPDATE_PACKAGE_LIST } = ctx.helper + const { version, updateType } = ctx.runOpts + + const pkgPath = path.join(appPath, 'package.json') + const pkgName = getPkgItemByKey('name') + + async function getTargetVersion () { + let targetTaroVersion + // base on current project taro versions, not base on @tarojs/cli verison + const currentTaroVersion = require(pkgPath).dependencies['@tarojs/taro'] + if (version) { + targetTaroVersion = semver.clean(version) + } else { + // update to current lastest major.x.x + try { + targetTaroVersion = await getLatestVersion(pkgName, { + version: semver.major(currentTaroVersion).toString() + }) + } catch (e) { + targetTaroVersion = await getLatestVersion(pkgName) + } + } + if (!semver.valid(targetTaroVersion)) { + console.log(chalk.red('命令错误:无效的 version ~')) + throw Error('无效的 version!') + } + return targetTaroVersion + } + + function info () { + console.log(chalk.red('命令错误:')) + console.log(`${chalk.green( + 'taro update self [version]')} 更新 Taro 开发工具 taro-cli 到指定版本或当前主版本的最新版本`) + console.log(`${chalk.green( + 'taro update project [version]')} 更新项目所有 Taro 相关依赖到指定版本或当前主版本的最新版本`) + } + + async function updateSelf () { + let command + const targetTaroVersion = await getTargetVersion() + if (shouldUseCnpm()) { + command = `cnpm i -g @tarojs/cli@${targetTaroVersion}` + } else { + command = `npm i -g @tarojs/cli@${targetTaroVersion}` + } + + const child = exec(command) + + const spinner = ora('即将将 Taro 开发工具 taro-cli 更新到最新版本...').start() + + child.stdout!.on('data', function (data) { + console.log(data) + spinner.stop() + }) + child.stderr!.on('data', function (data) { + console.log(data) + spinner.stop() + }) + } + + async function updateProject () { + if (!configPath ||!fs.existsSync(configPath)) { + console.log(chalk.red(`找不到项目配置文件${PROJECT_CONFIG},请确定当前目录是Taro项目根目录!`)) + process.exit(1) + } + const packageMap = require(pkgPath) + + const version = await getTargetVersion() + // 获取 NervJS 版本 + const nervJSVersion = `^${await getLatestVersion('nervjs')}` + + // 更新 @tarojs/* 版本和 NervJS 版本 + Object.keys(packageMap.dependencies).forEach((key) => { + if (UPDATE_PACKAGE_LIST.indexOf(key) !== -1) { + if (key.includes('nerv')) { + packageMap.dependencies[key] = nervJSVersion + } else if (key.includes('react-native')) { + // delete old version react-native,and will update when run taro build + delete packageMap.dependencies[key] + } else { + packageMap.dependencies[key] = version + } + } + }) + Object.keys(packageMap.devDependencies).forEach((key) => { + if (UPDATE_PACKAGE_LIST.indexOf(key) !== -1) { + if (key.includes('nerv')) { + packageMap.devDependencies[key] = nervJSVersion + } else { + packageMap.devDependencies[key] = version + } + } + }) + + // 写入package.json + try { + await fs.writeJson(pkgPath, packageMap, {spaces: '\t'}) + console.log(chalk.green('更新项目 package.json 成功!')) + console.log() + } catch (err) { + console.error(err) + } + + let command + if (shouldUseYarn()) { + command = 'yarn' + } else if (shouldUseCnpm()) { + command = 'cnpm install' + } else { + command = 'npm install' + } + + const child = exec(command) + + const spinner = ora('即将将项目所有 Taro 相关依赖更新到最新版本...').start() + + child.stdout!.on('data', function (data) { + spinner.stop() + console.log(data) + }) + child.stderr!.on('data', function (data) { + spinner.stop() + console.log(data) + }) + } + + if (!updateType) return info() + + if (updateType === 'self') return updateSelf() + + if (updateType === 'project') return updateProject() + + info() + } + }) +} diff --git a/packages/taro-cli/src/presets/files/generateFrameworkInfo.ts b/packages/taro-cli/src/presets/files/generateFrameworkInfo.ts new file mode 100644 index 000000000000..81a7676e3666 --- /dev/null +++ b/packages/taro-cli/src/presets/files/generateFrameworkInfo.ts @@ -0,0 +1,30 @@ +import { IPluginContext } from '@tarojs/service' + +import { getPkgVersion } from '../../util' + +export default (ctx: IPluginContext) => { + ctx.registerMethod('generateFrameworkInfo', ({ platform }) => { + const { getInstalledNpmPkgVersion, processTypeEnum, printLog, chalk } = ctx.helper + const { nodeModulesPath } = ctx.paths + const { date, outputRoot } = ctx.initialConfig + const frameworkInfoFileName = '.frameworkinfo' + const frameworkName = `@tarojs/taro-${platform}` + const frameworkVersion = getInstalledNpmPkgVersion(frameworkName, nodeModulesPath) + + if (frameworkVersion) { + const frameworkinfo = { + toolName: 'Taro', + toolCliVersion: getPkgVersion(), + toolFrameworkVersion: frameworkVersion, + createTime: date ? new Date(date).getTime() : Date.now() + } + ctx.writeFileToDist({ + filePath: frameworkInfoFileName, + content: JSON.stringify(frameworkinfo, null, 2) + }) + printLog(processTypeEnum.GENERATE, '框架信息', `${outputRoot}/${frameworkInfoFileName}`) + } else { + printLog(processTypeEnum.WARNING, '依赖安装', chalk.red(`项目依赖 ${frameworkName} 未安装,或安装有误!`)) + } + }) +} diff --git a/packages/taro-cli/src/presets/files/generateProjectConfig.ts b/packages/taro-cli/src/presets/files/generateProjectConfig.ts new file mode 100644 index 000000000000..f3fdecf08f92 --- /dev/null +++ b/packages/taro-cli/src/presets/files/generateProjectConfig.ts @@ -0,0 +1,30 @@ +import * as path from 'path' + +import { IPluginContext } from '@tarojs/service' + +export default (ctx: IPluginContext) => { + ctx.registerMethod('generateProjectConfig', ({ srcConfigName, distConfigName }) => { + const { appPath, sourcePath, outputPath } = ctx.paths + const { printLog, processTypeEnum, fs } = ctx.helper + // 生成 project.config.json + const projectConfigFileName = srcConfigName + let projectConfigPath = path.join(appPath, projectConfigFileName) + if (!fs.existsSync(projectConfigPath)) { + // 若项目根目录不存在对应平台的 projectConfig 文件,则尝试从源代码目录查找 + projectConfigPath = path.join(sourcePath, projectConfigFileName) + if (!fs.existsSync(projectConfigPath)) return + } + + const origProjectConfig = fs.readJSONSync(projectConfigPath) + // compileType 是 plugin 时不修改 miniprogramRoot 字段 + let distProjectConfig = origProjectConfig + if (origProjectConfig['compileType'] !== 'plugin') { + distProjectConfig = Object.assign({}, origProjectConfig, { miniprogramRoot: './' }) + } + ctx.writeFileToDist({ + filePath: distConfigName, + content: JSON.stringify(distProjectConfig, null, 2) + }) + printLog(processTypeEnum.GENERATE, '工具配置', `${outputPath}/${distConfigName}`) + }) +} diff --git a/packages/taro-cli/src/presets/files/writeFileToDist.ts b/packages/taro-cli/src/presets/files/writeFileToDist.ts new file mode 100644 index 000000000000..c89fc3e355b1 --- /dev/null +++ b/packages/taro-cli/src/presets/files/writeFileToDist.ts @@ -0,0 +1,17 @@ +import * as path from 'path' + +import { IPluginContext } from '@tarojs/service' + +export default (ctx: IPluginContext) => { + ctx.registerMethod('writeFileToDist', ({ filePath, content }) => { + const { outputPath } = ctx.paths + const { printLog, processTypeEnum, fs } = ctx.helper + if (path.isAbsolute(filePath)) { + printLog(processTypeEnum.ERROR, `ctx.writeFileToDist 不能接受绝对路径`) + return + } + const absFilePath = path.join(outputPath, filePath) + fs.ensureDirSync(path.dirname(absFilePath)) + fs.writeFileSync(absFilePath, content) + }) +} diff --git a/packages/taro-cli/src/presets/index.ts b/packages/taro-cli/src/presets/index.ts new file mode 100644 index 000000000000..62015d3a43a1 --- /dev/null +++ b/packages/taro-cli/src/presets/index.ts @@ -0,0 +1,35 @@ +import * as path from 'path' + +export default () => { + return { + plugins: [ + // platforms + path.resolve(__dirname, 'platforms', 'weapp.js'), + path.resolve(__dirname, 'platforms', 'tt.js'), + path.resolve(__dirname, 'platforms', 'alipay.js'), + path.resolve(__dirname, 'platforms', 'swan.js'), + path.resolve(__dirname, 'platforms', 'jd.js'), + path.resolve(__dirname, 'platforms', 'qq.js'), + path.resolve(__dirname, 'platforms', 'quickapp.js'), + path.resolve(__dirname, 'platforms', 'h5.js'), + path.resolve(__dirname, 'platforms', 'rn.js'), + path.resolve(__dirname, 'platforms', 'plugin.js'), + path.resolve(__dirname, 'platforms', 'ui.js'), + + // commands + path.resolve(__dirname, 'commands', 'build.js'), + path.resolve(__dirname, 'commands', 'init.js'), + path.resolve(__dirname, 'commands', 'config.js'), + path.resolve(__dirname, 'commands', 'create.js'), + path.resolve(__dirname, 'commands', 'info.js'), + path.resolve(__dirname, 'commands', 'doctor.js'), + path.resolve(__dirname, 'commands', 'convert.js'), + path.resolve(__dirname, 'commands', 'update.js'), + + // files + path.resolve(__dirname, 'files', 'writeFileToDist.js'), + path.resolve(__dirname, 'files', 'generateProjectConfig.js'), + path.resolve(__dirname, 'files', 'generateFrameworkInfo.js') + ] + } +} diff --git a/packages/taro-cli/src/presets/platforms/alipay.ts b/packages/taro-cli/src/presets/platforms/alipay.ts new file mode 100644 index 000000000000..084d68fc89f6 --- /dev/null +++ b/packages/taro-cli/src/presets/platforms/alipay.ts @@ -0,0 +1,67 @@ +import { IPluginContext } from '@tarojs/service' +import { recursiveReplaceObjectKeys } from '../../util' + +export default (ctx: IPluginContext) => { + ctx.registerPlatform({ + name: 'alipay', + useConfigName: 'mini', + async fn ({ config }) { + const { appPath, nodeModulesPath, outputPath } = ctx.paths + const { npm, emptyDirectory } = ctx.helper + emptyDirectory(outputPath) + + // 准备 miniRunner 参数 + const miniRunnerOpts = { + ...config, + nodeModulesPath, + buildAdapter: config.platform, + isBuildPlugin: false, + globalObject: 'my', + fileType: { + templ: '.axml', + style: '.acss', + config: '.json', + script: '.js', + xs: '.sjs' + }, + isUseComponentBuildPage: false, + templateAdapter: { + if: 'a:if', + else: 'a:else', + elseif: 'a:elif', + for: 'a:for', + forItem: 'a:for-item', + forIndex: 'a:for-index', + key: 'a:key', + xs: 'sjs', + type: 'alipay' + }, + isSupportRecursive: true, + isSupportXS: true + } + + ctx.modifyMiniConfigs(({ configMap }) => { + const replaceKeyMap = { + navigationBarTitleText: 'defaultTitle', + navigationBarBackgroundColor: 'titleBarColor', + enablePullDownRefresh: 'pullRefresh', + list: 'items', + text: 'name', + iconPath: 'icon', + selectedIconPath: 'activeIcon', + color: 'textColor' + } + Object.keys(configMap).forEach(key => { + const item = configMap[key] + if (item.content) { + recursiveReplaceObjectKeys(item.content, replaceKeyMap) + } + }) + }) + + // build with webpack + const miniRunner = await npm.getNpmPkg('@tarojs/mini-runner', appPath) + await miniRunner(appPath, miniRunnerOpts) + } + }) +} diff --git a/packages/taro-cli/src/presets/platforms/h5.ts b/packages/taro-cli/src/presets/platforms/h5.ts new file mode 100644 index 000000000000..a84e046c65ac --- /dev/null +++ b/packages/taro-cli/src/presets/platforms/h5.ts @@ -0,0 +1,39 @@ +import * as path from 'path' +import { merge, get } from 'lodash' +import { IPluginContext } from '@tarojs/service' + +import { getPkgVersion } from '../../util' + +export default (ctx: IPluginContext) => { + ctx.registerPlatform({ + name: 'h5', + useConfigName: 'h5', + async fn ({ config }) { + const { appPath, outputPath, sourcePath } = ctx.paths + const { initialConfig } = ctx + const { port } = ctx.runOpts + const { emptyDirectory, recursiveMerge, npm, ENTRY, SOURCE_DIR, OUTPUT_DIR } = ctx.helper + emptyDirectory(outputPath) + const entryFileName = `${ENTRY}.config` + const entryFile = path.basename(entryFileName) + const defaultEntry = { + [ENTRY]: [path.join(sourcePath, entryFile)] + } + const customEntry = get(initialConfig, 'h5.entry') + const h5RunnerOpts = recursiveMerge(Object.assign({}, config), { + entryFileName: ENTRY, + env: { + TARO_ENV: JSON.stringify('h5'), + FRAMEWORK: JSON.stringify(config.framework), + TARO_VERSION: JSON.stringify(getPkgVersion()) + }, + port, + sourceRoot: config.sourceRoot || SOURCE_DIR, + outputRoot: config.outputRoot || OUTPUT_DIR + }) + h5RunnerOpts.entry = merge(defaultEntry, customEntry) + const webpackRunner = await npm.getNpmPkg('@tarojs/webpack-runner', appPath) + webpackRunner(appPath, h5RunnerOpts) + } + }) +} diff --git a/packages/taro-cli/src/presets/platforms/jd.ts b/packages/taro-cli/src/presets/platforms/jd.ts new file mode 100644 index 000000000000..48c33b1da4cd --- /dev/null +++ b/packages/taro-cli/src/presets/platforms/jd.ts @@ -0,0 +1,52 @@ +import { IPluginContext } from '@tarojs/service' + +export default (ctx: IPluginContext) => { + ctx.registerPlatform({ + name: 'jd', + useConfigName: 'mini', + async fn ({ config }) { + const { appPath, nodeModulesPath, outputPath } = ctx.paths + const { npm, emptyDirectory } = ctx.helper + + emptyDirectory(outputPath) + + // 生成 project.config.json + ctx.generateProjectConfig({ + srcConfigName: 'project.jd.json', + distConfigName: 'project.config.json' + }) + + // 准备 miniRunner 参数 + const miniRunnerOpts = { + ...config, + nodeModulesPath, + buildAdapter: config.platform, + isBuildPlugin: false, + globalObject: 'jd', + fileType: { + templ: '.jxml', + style: '.jxss', + config: '.json', + script: '.js' + }, + isUseComponentBuildPage: false, + templateAdapter: { + if: 'jd:if', + else: 'jd:else', + elseif: 'jd:elif', + for: 'jd:for', + forItem: 'jd:for-item', + forIndex: 'jd:for-index', + key: 'jd:key', + type: 'jd' + }, + isSupportRecursive: false, + isSupportXS: false + } + + // build with webpack + const miniRunner = await npm.getNpmPkg('@tarojs/mini-runner', appPath) + await miniRunner(appPath, miniRunnerOpts) + } + }) +} diff --git a/packages/taro-cli/src/presets/platforms/plugin.ts b/packages/taro-cli/src/presets/platforms/plugin.ts new file mode 100644 index 000000000000..73cc36f9010f --- /dev/null +++ b/packages/taro-cli/src/presets/platforms/plugin.ts @@ -0,0 +1,83 @@ +import * as path from 'path' +import { IPluginContext } from '@tarojs/service' + +export default (ctx: IPluginContext) => { + ctx.registerPlatform({ + name: 'plugin', + useConfigName: 'mini', + async fn ({ config }) { + const { + plugin, + isWatch + } = ctx.runOpts + const { sourcePath, outputPath } = ctx.paths + const { chalk, fs, PLATFORMS } = ctx.helper + const { WEAPP, ALIPAY } = PLATFORMS + + const PLUGIN_JSON = 'plugin.json' + const PLUGIN_MOCK_JSON = 'plugin-mock.json' + + const typeMap = { + [WEAPP]: '微信', + [ALIPAY]: '支付宝' + } + if (plugin !== WEAPP && plugin !== ALIPAY) { + console.log(chalk.red('目前插件编译仅支持 微信/支付宝 小程序!')) + return + } + console.log(chalk.green(`开始编译${typeMap[plugin]}小程序插件`)) + + async function buildWxPlugin () { + await ctx.applyPlugins({ + name: 'build', + opts: { + platform: 'weapp', + isBuildPlugin: true, + isWatch, + outputRoot: `${config.outputRoot}` + } + }) + await ctx.applyPlugins({ + name: 'build', + opts: { + platform: 'weapp', + isBuildPlugin: false, + isWatch, + outputRoot: `${config.outputRoot}/miniprogram` + } + }) + } + + async function buildAlipayPlugin () { + await ctx.applyPlugins({ + name: 'build', + opts: { + platform: 'alipay', + isWatch + } + }) + const pluginJson = path.join(sourcePath, PLUGIN_JSON) + const pluginMockJson = path.join(sourcePath, PLUGIN_MOCK_JSON) + + if (fs.existsSync(pluginJson)) { + fs.copyFileSync(pluginJson, path.join(outputPath, PLUGIN_JSON)) + } + if (fs.existsSync(pluginMockJson)) { + fs.copyFileSync(pluginMockJson, path.join(outputPath, PLUGIN_MOCK_JSON)) + } + } + + switch (plugin) { + case WEAPP: + await buildWxPlugin() + break + case ALIPAY: + await buildAlipayPlugin() + break + default: + console.log(chalk.red('输入插件类型错误,目前只支持 weapp/alipay 插件类型')) + break + } + } + }) +} diff --git a/packages/taro-cli/src/presets/platforms/qq.ts b/packages/taro-cli/src/presets/platforms/qq.ts new file mode 100644 index 000000000000..364577bb2f4c --- /dev/null +++ b/packages/taro-cli/src/presets/platforms/qq.ts @@ -0,0 +1,54 @@ +import { IPluginContext } from '@tarojs/service' + +export default (ctx: IPluginContext) => { + ctx.registerPlatform({ + name: 'qq', + useConfigName: 'mini', + async fn ({ config }) { + const { appPath, nodeModulesPath, outputPath } = ctx.paths + const { npm, emptyDirectory } = ctx.helper + + emptyDirectory(outputPath) + + // 生成 project.config.json + ctx.generateProjectConfig({ + srcConfigName: 'project.qq.json', + distConfigName: 'project.config.json' + }) + + // 准备 miniRunner 参数 + const miniRunnerOpts = { + ...config, + nodeModulesPath, + buildAdapter: config.platform, + isBuildPlugin: false, + globalObject: 'qq', + fileType: { + templ: '.qml', + style: '.qss', + config: '.json', + script: '.js', + xs: '.wxs' + }, + isUseComponentBuildPage: true, + templateAdapter: { + if: 'qq:if', + else: 'qq:else', + elseif: 'qq:elif', + for: 'qq:for', + forItem: 'qq:for-item', + forIndex: 'qq:for-index', + key: 'qq:key', + xs: 'wxs', + type: 'qq' + }, + isSupportRecursive: false, + isSupportXS: true + } + + // build with webpack + const miniRunner = await npm.getNpmPkg('@tarojs/mini-runner', appPath) + await miniRunner(appPath, miniRunnerOpts) + } + }) +} diff --git a/packages/taro-cli/src/presets/platforms/quickapp.ts b/packages/taro-cli/src/presets/platforms/quickapp.ts new file mode 100644 index 000000000000..e2ecdc62b955 --- /dev/null +++ b/packages/taro-cli/src/presets/platforms/quickapp.ts @@ -0,0 +1,230 @@ +import * as path from 'path' +import { execSync } from 'child_process' + +import { IPluginContext } from '@tarojs/service' +import * as ora from 'ora' + +import { + recursiveReplaceObjectKeys +} from '../../util' +import { downloadGithubRepoLatestRelease } from '../../util/dowload' +import * as defaultManifestJSON from '../../config/manifest.default.json' + +export default (ctx: IPluginContext) => { + ctx.registerPlatform({ + name: 'quickapp', + useConfigName: 'mini', + async fn ({ config }) { + const { appPath, nodeModulesPath } = ctx.paths + const { + isWatch, + port, + release + } = ctx.runOpts + const { + npm, + fs, + printLog, + processTypeEnum, + chalk, + shouldUseYarn, + isWindows, + shouldUseCnpm, + unzip + } = ctx.helper + + // 读取 project.quickapp.json + const quickappJSONPath = path.join(appPath, 'project.quickapp.json') + let quickappJSON + if (fs.existsSync(quickappJSONPath)) { + quickappJSON = fs.readJSONSync(quickappJSONPath) + } else { + printLog(processTypeEnum.WARNING, '缺少配置', `检测到项目目录下未添加 ${chalk.bold('project.quickapp.json')} 文件,将使用默认配置,参考文档 https://nervjs.github.io/taro/docs/project-config.html`) + quickappJSON = defaultManifestJSON + } + + const originalOutputRoot = config.outputRoot + config.outputRoot = `${originalOutputRoot}/src` + + // 准备 miniRunner 参数 + const miniRunnerOpts = { + ...config, + nodeModulesPath, + buildAdapter: config.platform, + isBuildPlugin: false, + globalObject: 'global', + fileType: { + templ: '.ux', + style: '.css', + config: '.json', + script: '.js' + }, + isUseComponentBuildPage: false, + quickappJSON, + isBuildQuickapp: true, + templateAdapter: { + if: 'if', + else: 'else', + elseif: 'elif', + for: 'for', + forItem: 'for-item', + forIndex: 'for-index', + key: 'key', + type: 'quickapp' + }, + isSupportRecursive: true, + isSupportXS: false + } + + ctx.modifyBuildTempFileContent(({ tempFiles }) => { + const replaceKeyMap = { + navigationBarTitleText: 'titleBarText', + navigationBarBackgroundColor: 'titleBarBackgroundColor', + navigationBarTextStyle: 'titleBarTextColor', + pageOrientation: 'orientation', + backgroundTextStyle: false, + onReachBottomDistance: false, + backgroundColorBottom: false, + backgroundColorTop: false + } + Object.keys(tempFiles).forEach(key => { + const item = tempFiles[key] + if (item.config) { + recursiveReplaceObjectKeys(item.config, replaceKeyMap) + } + }) + }) + + // build with webpack + const miniRunner = await npm.getNpmPkg('@tarojs/mini-runner', appPath) + await miniRunner(appPath, miniRunnerOpts) + + const isReady = await prepareQuickAppEnvironment({ + originalOutputRoot, + fs, + appPath, + chalk, + shouldUseYarn, + isWindows, + shouldUseCnpm, + unzip + }) + if (!isReady) { + console.log() + console.log(chalk.red('快应用环境准备失败,请重试!')) + process.exit(0) + } + await runQuickApp({ + isWatch, + originalOutputRoot, + port, + release + }) + } + }) +} + +async function prepareQuickAppEnvironment ({ + originalOutputRoot, + fs, + appPath, + chalk, + shouldUseYarn, + isWindows, + shouldUseCnpm, + unzip +}) { + let isReady = false + let needDownload = false + let needInstall = false + console.log() + if (fs.existsSync(path.join(originalOutputRoot, 'sign'))) { + needDownload = false + } else { + needDownload = true + } + if (needDownload) { + const getSpinner = ora('开始下载快应用运行容器...').start() + await downloadGithubRepoLatestRelease('NervJS/quickapp-container', appPath, originalOutputRoot) + await unzip(path.join(originalOutputRoot, 'download_temp.zip')) + getSpinner.succeed('快应用运行容器下载完成') + } else { + console.log(`${chalk.green('✔ ')} 快应用容器已经准备好`) + } + process.chdir(originalOutputRoot) + console.log() + if (fs.existsSync(path.join(originalOutputRoot, 'node_modules'))) { + needInstall = false + } else { + needInstall = true + } + if (needInstall) { + let command + if (shouldUseYarn()) { + if(!isWindows) { + command = 'NODE_ENV=development yarn install' + } else { + command = 'yarn install' + } + } else if (shouldUseCnpm()) { + if(!isWindows) { + command = 'NODE_ENV=development cnpm install' + } else { + command = 'cnpm install' + } + } else { + if(!isWindows) { + command = 'NODE_ENV=development npm install' + } else { + command = 'npm install' + } + } + const installSpinner = ora(`安装快应用依赖环境, 需要一会儿...`).start() + try { + const stdout = execSync(command) + installSpinner.color = 'green' + installSpinner.succeed('安装成功') + console.log(`${stdout}`) + isReady = true + } catch (error) { + installSpinner.color = 'red' + installSpinner.fail(chalk.red(`快应用依赖环境安装失败,请进入 ${path.basename(originalOutputRoot)} 重新安装!`)) + console.log(`${error}`) + isReady = false + } + } else { + console.log(`${chalk.green('✔ ')} 快应用依赖已经安装好`) + isReady = true + } + return isReady +} + +async function runQuickApp ({ + isWatch, + originalOutputRoot, + port, + release +}: { + isWatch: boolean | void, + originalOutputRoot: string, + port?: number, + release?: boolean +}) { + const { compile } = require(require.resolve('hap-toolkit/lib/commands/compile', { paths: [originalOutputRoot] })) + if (isWatch) { + const { launchServer } = require(require.resolve('@hap-toolkit/server', { paths: [originalOutputRoot] })) + launchServer({ + port: port || 12306, + watch: isWatch, + clearRecords: false, + disableADB: false + }) + compile('native', 'dev', true) + } else { + if (!release) { + compile('native', 'dev', false) + } else { + compile('native', 'prod', false) + } + } +} diff --git a/packages/taro-cli/src/presets/platforms/rn.ts b/packages/taro-cli/src/presets/platforms/rn.ts new file mode 100644 index 000000000000..572e9bc59995 --- /dev/null +++ b/packages/taro-cli/src/presets/platforms/rn.ts @@ -0,0 +1,23 @@ +import { IPluginContext } from '@tarojs/service' + +export default (ctx: IPluginContext) => { + ctx.registerPlatform({ + name: 'rn', + useConfigName: 'rn', + async fn ({config}) { + const { appPath, outputPath } = ctx.paths + const { isWatch, port } = ctx.runOpts + const { emptyDirectory } = ctx.helper + const { modifyWebpackChain, modifyBuildAssets, onBuildFinish } = config + emptyDirectory(outputPath) + require('../../rn').build(appPath, { + watch: isWatch, + port + }, { + modifyWebpackChain, + modifyBuildAssets, + onBuildFinish + }) + } + }) +} diff --git a/packages/taro-cli/src/presets/platforms/swan.ts b/packages/taro-cli/src/presets/platforms/swan.ts new file mode 100644 index 000000000000..4ccd384d382c --- /dev/null +++ b/packages/taro-cli/src/presets/platforms/swan.ts @@ -0,0 +1,57 @@ +import { IPluginContext } from '@tarojs/service' + +export default (ctx: IPluginContext) => { + ctx.registerPlatform({ + name: 'swan', + useConfigName: 'mini', + async fn ({ config }) { + const { appPath, nodeModulesPath, outputPath } = ctx.paths + const { npm, emptyDirectory } = ctx.helper + emptyDirectory(outputPath) + + ctx.generateFrameworkInfo({ + platform: config.platform + }) + + // 生成 project.swan.json + ctx.generateProjectConfig({ + srcConfigName: 'project.swan.json', + distConfigName: 'project.swan.json' + }) + + // 准备 miniRunner 参数 + const miniRunnerOpts = { + ...config, + nodeModulesPath, + buildAdapter: config.platform, + isBuildPlugin: false, + globalObject: 'swan', + fileType: { + templ: '.swan', + style: '.css', + config: '.json', + script: '.js', + xs: '.sjs' + }, + isUseComponentBuildPage: true, + templateAdapter: { + if: 's-if', + else: 's-else', + elseif: 's-elif', + for: 's-for', + forItem: 's-for-item', + forIndex: 's-for-index', + key: 's-key', + xs: 'sjs', + type: 'swan' + }, + isSupportRecursive: true, + isSupportXS: true + } + + // build with webpack + const miniRunner = await npm.getNpmPkg('@tarojs/mini-runner', appPath) + await miniRunner(appPath, miniRunnerOpts) + } + }) +} diff --git a/packages/taro-cli/src/presets/platforms/tt.ts b/packages/taro-cli/src/presets/platforms/tt.ts new file mode 100644 index 000000000000..bdb498577ed9 --- /dev/null +++ b/packages/taro-cli/src/presets/platforms/tt.ts @@ -0,0 +1,51 @@ +import { IPluginContext } from '@tarojs/service' + +export default (ctx: IPluginContext) => { + ctx.registerPlatform({ + name: 'tt', + useConfigName: 'mini', + async fn ({ config }) { + const { appPath, nodeModulesPath, outputPath } = ctx.paths + const { npm, emptyDirectory } = ctx.helper + emptyDirectory(outputPath) + + // 生成 project.config.json + ctx.generateProjectConfig({ + srcConfigName: 'project.tt.json', + distConfigName: 'project.config.json' + }) + + // 准备 miniRunner 参数 + const miniRunnerOpts = { + ...config, + nodeModulesPath, + buildAdapter: config.platform, + isBuildPlugin: false, + globalObject: 'tt', + fileType: { + templ: '.ttml', + style: '.ttss', + config: '.json', + script: '.js' + }, + isUseComponentBuildPage: false, + templateAdapter: { + if: 'tt:if', + else: 'tt:else', + elseif: 'tt:elif', + for: 'tt:for', + forItem: 'tt:for-item', + forIndex: 'tt:for-index', + key: 'tt:key', + type: 'tt' + }, + isSupportRecursive: true, + isSupportXS: false + } + + // build with webpack + const miniRunner = await npm.getNpmPkg('@tarojs/mini-runner', appPath) + await miniRunner(appPath, miniRunnerOpts) + } + }) +} diff --git a/packages/taro-cli/src/presets/platforms/ui.ts b/packages/taro-cli/src/presets/platforms/ui.ts new file mode 100644 index 000000000000..ac422a788ee5 --- /dev/null +++ b/packages/taro-cli/src/presets/platforms/ui.ts @@ -0,0 +1,236 @@ +import * as path from 'path' + +import * as _ from 'lodash' +import { IPluginContext } from '@tarojs/service' + +export default (ctx: IPluginContext) => { + ctx.registerPlatform({ + name: 'ui', + async fn () { + const { + H5_OUTPUT_NAME, + RN_OUTPUT_NAME, + TEMP_DIR, + RN_TEMP_DIR, + WEAPP_OUTPUT_NAME, + QUICKAPP_OUTPUT_NAME, + copyFileToDist, + analyzeStyleFilesImport, + analyzeFiles + } = require('../../ui/common') + const { Compiler } = require('../../h5') + const { buildH5Script, buildForH5 } = require('../../ui/h5') + const { buildForRN } = require('../../ui/rn') + const { buildForWeapp } = require('../../ui/weapp') + const { buildForQuickapp } = require('../../ui/quickapp') + const { Compiler: RNCompiler } = require('../../rn_bak') + + const { uiIndex, isWatch } = ctx.runOpts + const { appPath, sourcePath } = ctx.paths + const { chalk, fs, resolveScriptPath, printLog, REG_STYLE, processTypeEnum, PLATFORMS, chokidar } = ctx.helper + const projectConfig = ctx.initialConfig + let entryFilePath + if (uiIndex) { + entryFilePath = resolveScriptPath(path.join(sourcePath, uiIndex)) + } else { + entryFilePath = resolveScriptPath(path.join(sourcePath, 'index')) + } + const buildData = { + appPath, + projectConfig, + sourceDirName: projectConfig.sourceRoot, + outputDirName: projectConfig.outputRoot, + sourceDir: sourcePath, + entryFilePath, + entryFileName: path.basename(entryFilePath), + tempPath: path.join(appPath, TEMP_DIR), + rnTempPath: path.join(appPath, RN_TEMP_DIR) + } + + function buildEntry (uiIndex) { + const { appPath, outputDirName } = buildData + let indexName = 'index' + if (uiIndex) { + indexName = path.basename(uiIndex, path.extname(uiIndex)) + } + + let content = '' + platforms.forEach((item, index) => { + let dir: any = item + if (item !== PLATFORMS.H5 && item !== PLATFORMS.RN && item !== PLATFORMS.QUICKAPP) { + dir = WEAPP_OUTPUT_NAME + } + content += `if (process.env.TARO_ENV === '${item}') { + module.exports = require('./${dir}/${indexName}') + module.exports.default = module.exports + }` + if (index < platforms.length - 1) { + content += ' else ' + } else { + content += ` else { + module.exports = require('./${WEAPP_OUTPUT_NAME}/${indexName}') + module.exports.default = module.exports + }` + } + }) + + const outputDir = path.join(appPath, outputDirName!) + fs.writeFileSync(path.join(outputDir, `index.js`), content) + } + + function watchFiles () { + const {sourceDir, projectConfig, appPath, outputDirName, tempPath} = buildData + const platforms = _.get(buildData, 'projectConfig.ui.platforms') + console.log('\n', chalk.gray('监听文件修改中...'), '\n') + + const watchList = [sourceDir] + + const uiConfig = projectConfig.ui + let extraWatchFiles + if (uiConfig && Array.isArray(uiConfig.extraWatchFiles)) { + extraWatchFiles = uiConfig.extraWatchFiles + extraWatchFiles.forEach(item => { + watchList.push(path.join(appPath, item.path)) + if (typeof item.handler === 'function') item.callback = item.handler({buildH5Script}) + }) + } + + const watcher = chokidar.watch(watchList, { + ignored: /(^|[/\\])\../, + ignoreInitial: true + }) + + function syncWeappFile (filePath) { + const outputDir = path.join(appPath, outputDirName!, WEAPP_OUTPUT_NAME) + copyFileToDist(filePath, sourceDir, outputDir, buildData) + // 依赖分析 + const extname = path.extname(filePath) + if (REG_STYLE.test(extname)) { + analyzeStyleFilesImport([filePath], sourceDir, outputDir, buildData) + } else { + analyzeFiles([filePath], sourceDir, outputDir, buildData) + } + } + + function syncQuickappFile (filePath) { + const outputDir = path.join(appPath, outputDirName!, QUICKAPP_OUTPUT_NAME) + copyFileToDist(filePath, sourceDir, outputDir, buildData) + // 依赖分析 + const extname = path.extname(filePath) + if (REG_STYLE.test(extname)) { + analyzeStyleFilesImport([filePath], sourceDir, outputDir, buildData) + } else { + analyzeFiles([filePath], sourceDir, outputDir, buildData) + } + } + + function syncH5File (filePath, compiler) { + const {sourceDir, appPath, outputDirName, tempPath} = buildData + const outputDir = path.join(appPath, outputDirName!, H5_OUTPUT_NAME) + let fileTempPath = filePath.replace(sourceDir, tempPath) + fileTempPath = fileTempPath.replace(new RegExp(`${path.extname(fileTempPath)}$`), '') + fileTempPath = resolveScriptPath(fileTempPath) + compiler.processFiles(filePath) + + if (process.env.TARO_BUILD_TYPE === 'script') { + buildH5Script(buildData) + } else { + copyFileToDist(fileTempPath, tempPath, outputDir, buildData) + // 依赖分析 + const extname = path.extname(filePath) + if (REG_STYLE.test(extname)) { + analyzeStyleFilesImport([fileTempPath], tempPath, outputDir, buildData) + } else { + analyzeFiles([fileTempPath], tempPath, outputDir, buildData) + } + } + } + + function syncRNFile (filePath, compiler) { + const {sourceDir, appPath, outputDirName, rnTempPath} = buildData + const outputDir = path.join(appPath, outputDirName!, RN_OUTPUT_NAME) + const fileTempPath = filePath.replace(sourceDir, rnTempPath) + compiler.processFiles(filePath) + + copyFileToDist(fileTempPath, tempPath, outputDir, buildData) + // 依赖分析 + const extname = path.extname(filePath) + if (REG_STYLE.test(extname)) { + analyzeStyleFilesImport([fileTempPath], tempPath, outputDir, buildData) + } else { + analyzeFiles([fileTempPath], tempPath, outputDir, buildData) + } + } + + function handleChange (filePath, type, tips) { + const relativePath = path.relative(appPath, filePath) + const compiler = new Compiler(appPath) + const rnCompiler = new RNCompiler(appPath) + printLog(type, tips, relativePath) + + let processed = false + extraWatchFiles && extraWatchFiles.forEach(item => { + if (filePath.indexOf(item.path.substr(2)) < 0) return + if (typeof item.callback === 'function') { + item.callback() + processed = true + } + }) + if (processed) return + + try { + if (platforms && Array.isArray(platforms)) { + platforms.includes(PLATFORMS.WEAPP) && syncWeappFile(filePath) + platforms.includes(PLATFORMS.QUICKAPP) && syncQuickappFile(filePath) + platforms.includes(PLATFORMS.H5) && syncH5File(filePath, compiler) + platforms.includes(PLATFORMS.RN) && syncRNFile(filePath, rnCompiler) + } else { + syncWeappFile(filePath) + syncH5File(filePath, compiler) + } + } catch (err) { + console.log(err) + } + } + + watcher + .on('add', filePath => handleChange(filePath, processTypeEnum.CREATE, '添加文件')) + .on('change', filePath => handleChange(filePath, processTypeEnum.MODIFY, '文件变动')) + .on('unlink', filePath => { + for (const path in extraWatchFiles) { + if (filePath.indexOf(path.substr(2)) > -1) return + } + + const relativePath = path.relative(appPath, filePath) + printLog(processTypeEnum.UNLINK, '删除文件', relativePath) + const weappOutputPath = path.join(appPath, outputDirName!, WEAPP_OUTPUT_NAME) + const quickappOutputPath = path.join(appPath, outputDirName!, QUICKAPP_OUTPUT_NAME) + const h5OutputPath = path.join(appPath, outputDirName!, H5_OUTPUT_NAME) + const fileTempPath = filePath.replace(sourceDir, tempPath) + const fileWeappPath = filePath.replace(sourceDir, weappOutputPath) + const fileQuickappPath = filePath.replace(sourceDir, quickappOutputPath) + const fileH5Path = filePath.replace(sourceDir, h5OutputPath) + fs.existsSync(fileTempPath) && fs.unlinkSync(fileTempPath) + fs.existsSync(fileWeappPath) && fs.unlinkSync(fileWeappPath) + fs.existsSync(fileQuickappPath) && fs.unlinkSync(fileQuickappPath) + fs.existsSync(fileH5Path) && fs.unlinkSync(fileH5Path) + }) + } + + const platforms = _.get(buildData, 'projectConfig.ui.platforms') || [PLATFORMS.WEAPP, PLATFORMS.H5] + buildEntry(uiIndex) + if (platforms && Array.isArray(platforms)) { + platforms.includes(PLATFORMS.WEAPP) && await buildForWeapp(buildData) + platforms.includes(PLATFORMS.QUICKAPP) && await buildForQuickapp(buildData) + platforms.includes(PLATFORMS.H5) && await buildForH5(uiIndex, buildData) + platforms.includes(PLATFORMS.RN) && await buildForRN(uiIndex, buildData) + } else { + await buildForWeapp(buildData) + await buildForH5(uiIndex, buildData) + } + if (isWatch) { + watchFiles() + } + } + }) +} diff --git a/packages/taro-cli/src/presets/platforms/weapp.ts b/packages/taro-cli/src/presets/platforms/weapp.ts new file mode 100644 index 000000000000..991c1adc962e --- /dev/null +++ b/packages/taro-cli/src/presets/platforms/weapp.ts @@ -0,0 +1,53 @@ +import { IPluginContext } from '@tarojs/service' + +export default (ctx: IPluginContext) => { + ctx.registerPlatform({ + name: 'weapp', + useConfigName: 'mini', + async fn ({ config }) { + const { appPath, nodeModulesPath, outputPath } = ctx.paths + const { npm, emptyDirectory } = ctx.helper + emptyDirectory(outputPath) + + // 生成 project.config.json + ctx.generateProjectConfig({ + srcConfigName: 'project.config.json', + distConfigName: 'project.config.json' + }) + + // 准备 miniRunner 参数 + const miniRunnerOpts = { + ...config, + nodeModulesPath, + buildAdapter: config.platform, + isBuildPlugin: false, + globalObject: 'wx', + fileType: { + templ: '.wxml', + style: '.wxss', + config: '.json', + script: '.js', + xs: '.wxs' + }, + isUseComponentBuildPage: true, + templateAdapter: { + if: 'wx:if', + else: 'wx:else', + elseif: 'wx:elif', + for: 'wx:for', + forItem: 'wx:for-item', + forIndex: 'wx:for-index', + key: 'wx:key', + xs: 'wxs', + type: 'weapp' + }, + isSupportRecursive: false, + isSupportXS: true + } + + // build with webpack + const miniRunner = await npm.getNpmPkg('@tarojs/mini-runner', appPath) + await miniRunner(appPath, miniRunnerOpts) + } + }) +} diff --git a/packages/taro-cli/src/rn.ts b/packages/taro-cli/src/rn.ts index cce8b841caf8..dbc824103564 100644 --- a/packages/taro-cli/src/rn.ts +++ b/packages/taro-cli/src/rn.ts @@ -2,17 +2,28 @@ import * as fs from 'fs-extra' import * as path from 'path' import { exec, spawn, spawnSync, execSync, SpawnSyncOptions } from 'child_process' import { performance } from 'perf_hooks' -import * as chokidar from 'chokidar' -import chalk from 'chalk' import * as _ from 'lodash' import * as klaw from 'klaw' -import { TogglableOptions, ICommonPlugin, IOption } from '@tarojs/taro/types/compile' - -import * as Util from './util' -import CONFIG from './config' +import { TogglableOptions, IOption } from '@tarojs/taro/types/compile' +import { + PROJECT_CONFIG, + processTypeEnum, + REG_STYLE, + REG_SCRIPTS, + REG_TYPESCRIPT, + chalk, + chokidar, + resolveScriptPath, + printLog, + shouldUseYarn, + shouldUseCnpm, + SOURCE_DIR, + ENTRY +} from '@tarojs/helper' + +import { getPkgVersion } from './util' import * as StyleProcess from './rn/styleProcess' import { parseJSCode as transformJSCode } from './rn/transformJS' -import { PROJECT_CONFIG, processTypeEnum, REG_STYLE, REG_SCRIPTS, REG_TYPESCRIPT, BUILD_TYPES } from './util/constants' import { convertToJDReact } from './jdreact/convert_to_jdreact' import { IBuildOptions } from './util/types' // import { Error } from 'tslint/lib/error' @@ -52,7 +63,7 @@ class Compiler { sass: IOption less: IOption stylus: IOption - plugins: ICommonPlugin[] + plugins: any[] rnConfig hasJDReactOutput: boolean babelConfig: any @@ -62,9 +73,9 @@ class Compiler { constructor (appPath) { this.appPath = appPath this.projectConfig = require(path.join(appPath, PROJECT_CONFIG))(_.merge) - const sourceDirName = this.projectConfig.sourceRoot || CONFIG.SOURCE_DIR + const sourceDirName = this.projectConfig.sourceRoot || SOURCE_DIR this.sourceDir = path.join(appPath, sourceDirName) - this.entryFilePath = Util.resolveScriptPath(path.join(this.sourceDir, CONFIG.ENTRY)) + this.entryFilePath = resolveScriptPath(path.join(this.sourceDir, ENTRY)) this.entryFileName = path.basename(this.entryFilePath) this.entryBaseName = path.basename(this.entryFilePath, path.extname(this.entryFileName)) this.babel = this.projectConfig.babel @@ -102,7 +113,7 @@ class Compiler { return Promise.all(styleFiles.map(async p => { // to css string const filePath = path.join(p) const fileExt = path.extname(filePath) - Util.printLog(processTypeEnum.COMPILE, _.camelCase(fileExt).toUpperCase(), filePath) + printLog(processTypeEnum.COMPILE, _.camelCase(fileExt).toUpperCase(), filePath) return StyleProcess.loadStyle({ filePath, pluginsConfig: { @@ -157,9 +168,9 @@ class Compiler { AppRegistry.registerComponent(appName, () => App);` fs.writeFileSync(path.join(this.tempPath, 'index.js'), indexJsStr) - Util.printLog(processTypeEnum.GENERATE, 'index.js', path.join(this.tempPath, 'index.js')) + printLog(processTypeEnum.GENERATE, 'index.js', path.join(this.tempPath, 'index.js')) fs.writeFileSync(path.join(this.tempPath, 'app.json'), JSON.stringify(appJsonObject, null, 2)) - Util.printLog(processTypeEnum.GENERATE, 'app.json', path.join(this.tempPath, 'app.json')) + printLog(processTypeEnum.GENERATE, 'app.json', path.join(this.tempPath, 'app.json')) return Promise.resolve() } @@ -180,7 +191,7 @@ class Compiler { if (REG_TYPESCRIPT.test(filePath)) { distPath = distPath.replace(/\.(tsx|ts)(\?.*)?$/, '.js') } - Util.printLog(processTypeEnum.COMPILE, _.camelCase(path.extname(filePath)).toUpperCase(), filePath) + printLog(processTypeEnum.COMPILE, _.camelCase(path.extname(filePath)).toUpperCase(), filePath) // transformJSCode const transformResult = transformJSCode({ code, filePath, isEntryFile: this.isEntryFile(filePath), projectConfig: this.projectConfig @@ -188,16 +199,16 @@ class Compiler { const jsCode = transformResult.code fs.ensureDirSync(distDirname) fs.writeFileSync(distPath, Buffer.from(jsCode)) - Util.printLog(processTypeEnum.GENERATE, _.camelCase(path.extname(filePath)).toUpperCase(), distPath) + printLog(processTypeEnum.GENERATE, _.camelCase(path.extname(filePath)).toUpperCase(), distPath) // compileDepStyles const styleFiles = transformResult.styleFiles depTree[filePath] = styleFiles await this.compileDepStyles(filePath, styleFiles) } else { fs.ensureDirSync(distDirname) - Util.printLog(processTypeEnum.COPY, _.camelCase(path.extname(filePath)).toUpperCase(), filePath) + printLog(processTypeEnum.COPY, _.camelCase(path.extname(filePath)).toUpperCase(), filePath) fs.copySync(filePath, distPath) - Util.printLog(processTypeEnum.GENERATE, _.camelCase(path.extname(filePath)).toUpperCase(), distPath) + printLog(processTypeEnum.GENERATE, _.camelCase(path.extname(filePath)).toUpperCase(), distPath) } } @@ -258,7 +269,7 @@ class Compiler { const t0 = performance.now() await callback(args) const t1 = performance.now() - Util.printLog(processTypeEnum.COMPILE, `编译完成,花费${Math.round(t1 - t0)} ms`) + printLog(processTypeEnum.COMPILE, `编译完成,花费${Math.round(t1 - t0)} ms`) console.log() } @@ -277,12 +288,12 @@ class Compiler { }) .on('add', filePath => { const relativePath = path.relative(this.appPath, filePath) - Util.printLog(processTypeEnum.CREATE, '添加文件', relativePath) + printLog(processTypeEnum.CREATE, '添加文件', relativePath) this.perfWrap(this.buildTemp.bind(this)) }) .on('change', filePath => { const relativePath = path.relative(this.appPath, filePath) - Util.printLog(processTypeEnum.MODIFY, '文件变动', relativePath) + printLog(processTypeEnum.MODIFY, '文件变动', relativePath) if (REG_SCRIPTS.test(filePath)) { this.perfWrap(this.processFile.bind(this), filePath) } @@ -296,7 +307,7 @@ class Compiler { }) .on('unlink', filePath => { const relativePath = path.relative(this.appPath, filePath) - Util.printLog(processTypeEnum.UNLINK, '删除文件', relativePath) + printLog(processTypeEnum.UNLINK, '删除文件', relativePath) this.perfWrap(this.buildTemp.bind(this)) }) .on('error', error => console.log(`Watcher error: ${error}`)) @@ -309,7 +320,7 @@ function hasRNDep (appPath) { } function updatePkgJson (appPath) { - const version = Util.getPkgVersion() + const version = getPkgVersion() const RNDep = `{ "@tarojs/components-rn": "^${version}", "@tarojs/taro-rn": "^${version}", @@ -327,7 +338,7 @@ function updatePkgJson (appPath) { if (!hasRNDep(appPath)) { pkgJson.dependencies = Object.assign({}, pkgJson.dependencies, JSON.parse(RNDep.replace(/(\r\n|\n|\r|\s+)/gm, ''))) fs.writeFileSync(path.join(appPath, 'package.json'), JSON.stringify(pkgJson, null, 2)) - Util.printLog(processTypeEnum.GENERATE, 'package.json', path.join(appPath, 'package.json')) + printLog(processTypeEnum.GENERATE, 'package.json', path.join(appPath, 'package.json')) installDep(appPath).then(() => { resolve() }) @@ -343,9 +354,9 @@ function installDep (path: string) { console.log(chalk.yellow('开始安装依赖~')) process.chdir(path) let command - if (Util.shouldUseYarn()) { + if (shouldUseYarn()) { command = 'yarn' - } else if (Util.shouldUseCnpm()) { + } else if (shouldUseCnpm()) { command = 'cnpm install' } else { command = 'npm install' @@ -365,7 +376,7 @@ export { Compiler } export async function build (appPath: string, buildConfig: IBuildOptions) { const { watch } = buildConfig - process.env.TARO_ENV = BUILD_TYPES.RN + process.env.TARO_ENV = 'rn' const compiler = new Compiler(appPath) fs.ensureDirSync(compiler.tempPath) const t0 = performance.now() @@ -375,7 +386,7 @@ export async function build (appPath: string, buildConfig: IBuildOptions) { } await compiler.buildTemp() const t1 = performance.now() - Util.printLog(processTypeEnum.COMPILE, `编译完成,花费${Math.round(t1 - t0)} ms`) + printLog(processTypeEnum.COMPILE, `编译完成,花费${Math.round(t1 - t0)} ms`) if (watch) { compiler.watchFiles() diff --git a/packages/taro-cli/src/rn/styleProcess.ts b/packages/taro-cli/src/rn/styleProcess.ts index 69cc22851ebc..70e333a59bb7 100644 --- a/packages/taro-cli/src/rn/styleProcess.ts +++ b/packages/taro-cli/src/rn/styleProcess.ts @@ -1,14 +1,17 @@ import * as path from 'path' import * as fs from 'fs-extra' import * as postcss from 'postcss' -import chalk from 'chalk' import * as pxtransform from 'postcss-pxtransform' import transformCSS from 'taro-css-to-react-native' +import { + FILE_PROCESSOR_MAP, + npm as npmProcess, + processTypeEnum, + printLog, + chalk +} from '@tarojs/helper' import { StyleSheetValidation } from './StyleSheet/index' -import * as Util from '../util' -import * as npmProcess from '../util/npm' -import { FILE_PROCESSOR_MAP, processTypeEnum } from '../util/constants' import * as stylelintConfig from '../config/rn-stylelint.json' @@ -50,7 +53,7 @@ function loadStyle ({ filePath, pluginsConfig }, appPath) { } }) .catch(e => { - Util.printLog(processTypeEnum.ERROR, '样式预处理', filePath) + printLog(processTypeEnum.ERROR, '样式预处理', filePath) console.log(e.stack) }) } @@ -97,7 +100,7 @@ function postCSS ({ css, filePath, projectConfig }) { } }) .catch(e => { - Util.printLog(processTypeEnum.ERROR, '样式转换', filePath) + printLog(processTypeEnum.ERROR, '样式转换', filePath) console.log(e.stack) }) } @@ -107,7 +110,7 @@ function getStyleObject ({ css, filePath }) { try { styleObject = transformCSS(css) } catch (err) { - Util.printLog(processTypeEnum.WARNING, 'css-to-react-native 报错', filePath) + printLog(processTypeEnum.WARNING, 'css-to-react-native 报错', filePath) console.log(chalk.red(err.stack)) } return styleObject @@ -120,7 +123,7 @@ function validateStyle ({ styleObject, filePath }) { } catch (err) { // 先忽略掉 scalePx2dp 的报错 if (/Invalid prop `.*` of type `string` supplied to `.*`, expected `number`[^]*/g.test(err.message)) return - Util.printLog(processTypeEnum.WARNING, '样式不支持', filePath) + printLog(processTypeEnum.WARNING, '样式不支持', filePath) console.log(chalk.red(err.message)) } } @@ -130,7 +133,7 @@ function writeStyleFile ({ css, tempFilePath }) { const fileContent = getWrapedCSS(css.replace(/"(scalePx2dp\(.*?\))"/g, '$1')) fs.ensureDirSync(path.dirname(tempFilePath)) fs.writeFileSync(tempFilePath, fileContent) - Util.printLog(processTypeEnum.GENERATE, '生成样式文件', tempFilePath) + printLog(processTypeEnum.GENERATE, '生成样式文件', tempFilePath) } export { loadStyle, postCSS, getStyleObject, validateStyle, writeStyleFile } diff --git a/packages/taro-cli/src/rn/transformJS.ts b/packages/taro-cli/src/rn/transformJS.ts index 145534a73097..fa833ec97926 100644 --- a/packages/taro-cli/src/rn/transformJS.ts +++ b/packages/taro-cli/src/rn/transformJS.ts @@ -5,10 +5,22 @@ import * as t from 'babel-types' import * as _ from 'lodash' import generate from 'babel-generator' import wxTransformer from '@tarojs/transformer-wx' -import * as Util from '../util' +import { + REG_STYLE, + REG_TYPESCRIPT, + REG_SCRIPTS, + resolveScriptPath, + resolveStylePath, + replaceAliasPath, + isAliasPath, + promoteRelativePath, + isNpmPkg, + generateEnvList, + generateConstantsList, +} from '@tarojs/helper' + import babylonConfig from '../config/babylon' import { convertSourceStringToAstExpression as toAst, convertAstExpressionToVariable as toVar } from '../util/astConvert' -import { REG_STYLE, REG_TYPESCRIPT, BUILD_TYPES, REG_SCRIPTS } from '../util/constants' const template = require('babel-template') @@ -237,17 +249,17 @@ export function parseJSCode ({ code, filePath, isEntryFile, projectConfig }) { const valueExtname = path.extname(value) const specifiers = node.specifiers const pathAlias = projectConfig.alias || {} - if (Util.isAliasPath(value, pathAlias)) { - source.value = value = Util.replaceAliasPath(filePath, value, pathAlias) + if (isAliasPath(value, pathAlias)) { + source.value = value = replaceAliasPath(filePath, value, pathAlias) } // 引入的包为非 npm 包 - if (!Util.isNpmPkg(value)) { + if (!isNpmPkg(value)) { // import 样式处理 if (REG_STYLE.test(valueExtname)) { const stylePath = path.resolve(path.dirname(filePath), value) if (styleFiles.indexOf(stylePath) < 0) { // 样式条件文件编译 .rn.scss - const realStylePath = Util.resolveStylePath(stylePath) + const realStylePath = resolveStylePath(stylePath) styleFiles.push(realStylePath) } } @@ -260,10 +272,10 @@ export function parseJSCode ({ code, filePath, isEntryFile, projectConfig }) { const absolutePath = path.resolve(filePath, '..', value) const dirname = path.dirname(absolutePath) const extname = path.extname(absolutePath) - const realFilePath = Util.resolveScriptPath(path.join(dirname, path.basename(absolutePath, extname))) + const realFilePath = resolveScriptPath(path.join(dirname, path.basename(absolutePath, extname))) const removeExtPath = realFilePath.replace(path.extname(realFilePath), '') node.source = t.stringLiteral( - Util.promoteRelativePath(path.relative(filePath, removeExtPath)).replace(/\\/g, '/') + promoteRelativePath(path.relative(filePath, removeExtPath)).replace(/\\/g, '/') ) } } @@ -601,10 +613,10 @@ export function parseJSCode ({ code, filePath, isEntryFile, projectConfig }) { }) const constantsReplaceList = Object.assign( { - 'process.env.TARO_ENV': BUILD_TYPES.RN + 'process.env.TARO_ENV': 'rn' }, - Util.generateEnvList(projectConfig.env || {}), - Util.generateConstantsList(projectConfig.defineConstants || {}) + generateEnvList(projectConfig.env || {}), + generateConstantsList(projectConfig.defineConstants || {}) ) // TODO 使用 babel-plugin-transform-jsx-to-stylesheet 处理 JSX 里面样式的处理,删除无效的样式引入待优化 diff --git a/packages/taro-cli/src/taro-config/index.ts b/packages/taro-cli/src/taro-config/index.ts deleted file mode 100644 index 66141058d68d..000000000000 --- a/packages/taro-cli/src/taro-config/index.ts +++ /dev/null @@ -1,53 +0,0 @@ -import * as fs from 'fs-extra' -import * as path from 'path' -import { getUserHomeDir } from '../util' - -const homedir = getUserHomeDir() -const configPath = path.join(homedir, '.taro/index.json') - -export function get (key: string) { - if (!homedir) return console.log('找不到用户根目录') - if (fs.existsSync(configPath)) { - const config = fs.readJSONSync(configPath) - console.log(config[key]) - } -} - -export function set (key: string, value: string) { - if (!homedir) return console.log('找不到用户根目录') - - if (fs.existsSync(configPath)) { - const config = fs.readJSONSync(configPath) - config[key] = value - fs.writeJSONSync(configPath, config) - } else { - fs.ensureFileSync(configPath) - fs.writeJSONSync(configPath, { - [key]: value - }) - } -} - -export function deleteKey (key: string) { - if (!homedir) return console.log('找不到用户根目录') - - if (fs.existsSync(configPath)) { - const config = fs.readJSONSync(configPath) - delete config[key] - fs.writeJSONSync(configPath, config) - } -} - -export function list (isJSONFormat = false) { - if (!homedir) return console.log('找不到用户根目录') - if (fs.existsSync(configPath)) { - const config = fs.readJSONSync(configPath) - if (isJSONFormat) { - console.log(JSON.stringify(config, null, 2)) - } else { - for (const key in config) { - console.log(`${key}=${config[key]}`) - } - } - } -} diff --git a/packages/taro-cli/src/ui/common.ts b/packages/taro-cli/src/ui/common.ts index 07c168fb69e9..f99caf1504bc 100644 --- a/packages/taro-cli/src/ui/common.ts +++ b/packages/taro-cli/src/ui/common.ts @@ -2,17 +2,34 @@ import * as path from 'path' import * as fs from 'fs-extra' import * as t from 'babel-types' +import * as glob from 'glob' import traverse from 'babel-traverse' import generate from 'babel-generator' import wxTransformer from '@tarojs/transformer-wx' +import { + cssImports, + printLog, + resolveScriptPath, + resolveStylePath, + isNpmPkg, + processTypeEnum, + REG_STYLE, + REG_TYPESCRIPT, + REG_SCRIPT, + REG_JSON, + REG_FONT, + REG_IMAGE, + REG_MEDIA, + CSS_EXT +} from '@tarojs/helper' + import { IBuildData } from './ui.types' -import { cssImports, printLog, resolveScriptPath, resolveStylePath } from '../util' -import { processTypeEnum, REG_STYLE, REG_TYPESCRIPT, REG_SCRIPT, REG_JSON, REG_FONT, REG_IMAGE, REG_MEDIA } from '../util/constants' -const processedScriptFiles: Set = new Set() +let processedScriptFiles: Set = new Set() export const WEAPP_OUTPUT_NAME = 'weapp' +export const QUICKAPP_OUTPUT_NAME = 'quickappp' export const H5_OUTPUT_NAME = 'h5' export const RN_OUTPUT_NAME = 'rn' export const TEMP_DIR = '.temp' @@ -50,8 +67,8 @@ function parseAst ( const value = source.value const valueExtname = path.extname(value) if (value.indexOf('.') === 0) { - const importPath = path.resolve(path.dirname(sourceFilePath), value) - resolveScriptPath(importPath) + let importPath = path.resolve(path.dirname(sourceFilePath), value) + importPath = resolveScriptPath(importPath) if (REG_SCRIPT.test(valueExtname) || REG_TYPESCRIPT.test(valueExtname)) { const vpath = path.resolve(sourceFilePath, '..', value) let fPath = value @@ -186,10 +203,22 @@ export function parseEntryAst (ast: t.File, relativeFile: string) { } } +export function isFileToBeCSSModulesMap (filePath) { + let isMap = false + CSS_EXT.forEach(item => { + const reg = new RegExp(`${item}.map.js$`, 'g') + if (reg.test(filePath)) { + isMap = true + } + }) + return isMap +} + export function copyFileToDist (filePath: string, sourceDir: string, outputDir: string, buildData: IBuildData) { - if (!filePath && !path.isAbsolute(filePath)) { + if ((!filePath && !path.isAbsolute(filePath)) || isFileToBeCSSModulesMap(filePath)) { return } + const { appPath } = buildData const dirname = path.dirname(filePath) const distDirname = dirname.replace(sourceDir, outputDir) @@ -202,7 +231,7 @@ export function copyFileToDist (filePath: string, sourceDir: string, outputDir: })) } -export function analyzeFiles (files: string[], sourceDir: string, outputDir: string, buildData: IBuildData) { +function _analyzeFiles(files: string[], sourceDir: string, outputDir: string, buildData: IBuildData){ files.forEach(file => { if (fs.existsSync(file)) { if (processedScriptFiles.has(file)) { @@ -232,7 +261,7 @@ export function analyzeFiles (files: string[], sourceDir: string, outputDir: str }) } if (scriptFiles.length) { - analyzeFiles(scriptFiles, sourceDir, outputDir, buildData) + _analyzeFiles(scriptFiles, sourceDir, outputDir, buildData) } if (styleFiles.length) { analyzeStyleFilesImport(styleFiles, sourceDir, outputDir, buildData) @@ -241,6 +270,11 @@ export function analyzeFiles (files: string[], sourceDir: string, outputDir: str }) } +export function analyzeFiles (files: string[], sourceDir: string, outputDir: string, buildData: IBuildData) { + _analyzeFiles(files, sourceDir, outputDir, buildData) + processedScriptFiles = new Set() +} + export function analyzeStyleFilesImport (styleFiles, sourceDir, outputDir, buildData: IBuildData) { styleFiles.forEach(item => { if (!fs.existsSync(item)) { @@ -261,11 +295,23 @@ export function analyzeStyleFilesImport (styleFiles, sourceDir, outputDir, build let imports = cssImports(content) if (imports.length > 0) { imports = imports.map(importItem => { + if (isNpmPkg(importItem)) { + return '' + } const filePath = resolveStylePath(path.resolve(path.dirname(item), importItem)) copyFileToDist(filePath, sourceDir, outputDir, buildData) return filePath - }) + }).filter(item => item) analyzeStyleFilesImport(imports, sourceDir, outputDir, buildData) } }) } + +export function copyAllInterfaceFiles (sourceDir, outputDir, buildData) { + const interfaceFiles = glob.sync(path.join(sourceDir, '**/*.d.ts')) + if (interfaceFiles && interfaceFiles.length) { + interfaceFiles.forEach(item => { + copyFileToDist(item, sourceDir, outputDir, buildData) + }) + } +} diff --git a/packages/taro-cli/src/ui/h5.ts b/packages/taro-cli/src/ui/h5.ts index 420b0444162d..ea463d1256df 100644 --- a/packages/taro-cli/src/ui/h5.ts +++ b/packages/taro-cli/src/ui/h5.ts @@ -1,21 +1,20 @@ -import { Compiler } from '../h5' -import chalk from 'chalk' import * as path from 'path' import * as fs from 'fs-extra' import wxTransformer from '@tarojs/transformer-wx' - -import * as npmProcess from '../util/npm' -import { printLog, resolveScriptPath } from '../util' -import { processTypeEnum, REG_TYPESCRIPT } from '../util/constants' +import { + printLog, + resolveScriptPath, + npm as npmProcess, + processTypeEnum, + REG_TYPESCRIPT, + chalk, +} from '@tarojs/helper' import { IBuildData, IH5BuildConfig } from './ui.types' -import { copyFileToDist, analyzeFiles, parseEntryAst, analyzeStyleFilesImport, H5_OUTPUT_NAME } from './common' +import { copyFileToDist, analyzeFiles, parseEntryAst, analyzeStyleFilesImport, H5_OUTPUT_NAME, copyAllInterfaceFiles } from './common' async function buildForH5 (uiIndex = 'index', buildData: IBuildData) { - const { appPath } = buildData - const compiler = new Compiler(appPath, uiIndex) console.log() console.log(chalk.green('开始编译 H5 端组件库!')) - await (compiler as any).buildTemp() if (process.env.TARO_BUILD_TYPE === 'script') { await buildH5Script(buildData) } else { @@ -32,6 +31,10 @@ async function buildH5Script (buildData: IBuildData) { h5Config.env = projectConfig.env h5Config.defineConstants = projectConfig.defineConstants h5Config.plugins = projectConfig.plugins + h5Config.babel = projectConfig.babel + h5Config.csso = projectConfig.csso + h5Config.uglify = projectConfig.uglify + h5Config.sass = projectConfig.sass h5Config.designWidth = projectConfig.designWidth if (projectConfig.deviceRatio) { h5Config.deviceRatio = projectConfig.deviceRatio @@ -48,7 +51,7 @@ async function buildH5Script (buildData: IBuildData) { async function buildH5Lib (uiIndex, buildData: IBuildData) { try { - const { appPath, outputDirName, tempPath } = buildData + const {sourceDir, appPath, outputDirName, tempPath} = buildData const outputDir = path.join(appPath, outputDirName, H5_OUTPUT_NAME) const tempEntryFilePath = resolveScriptPath(path.join(tempPath, uiIndex)) const outputEntryFilePath = path.join(outputDir, path.basename(tempEntryFilePath)) @@ -59,7 +62,7 @@ async function buildH5Lib (uiIndex, buildData: IBuildData) { isNormal: true, isTyped: REG_TYPESCRIPT.test(tempEntryFilePath) }) - const { styleFiles, components, code: generateCode } = parseEntryAst(transformResult.ast, tempEntryFilePath) + const {styleFiles, components, code: generateCode} = parseEntryAst(transformResult.ast, tempEntryFilePath) const relativePath = path.relative(appPath, tempEntryFilePath) printLog(processTypeEnum.COPY, '发现文件', relativePath) fs.ensureDirSync(path.dirname(outputEntryFilePath)) @@ -76,6 +79,7 @@ async function buildH5Lib (uiIndex, buildData: IBuildData) { }) analyzeStyleFilesImport(styleFiles, tempPath, path.join(appPath, outputDirName), buildData) } + copyAllInterfaceFiles(sourceDir, outputDir, buildData) } catch (err) { console.log(err) } diff --git a/packages/taro-cli/src/ui/index.ts b/packages/taro-cli/src/ui/index.ts deleted file mode 100644 index cbf4d2c28337..000000000000 --- a/packages/taro-cli/src/ui/index.ts +++ /dev/null @@ -1,210 +0,0 @@ -import * as fs from 'fs-extra' -import * as path from 'path' -import * as chokidar from 'chokidar' -import chalk from 'chalk' -import * as _ from 'lodash' - -import { Compiler } from '../h5' -import { buildH5Script, buildForH5 } from './h5' -import { buildForRN } from './rn' -import { buildForWeapp } from './weapp' -import CONFIG from '../config' -import { resolveScriptPath, printLog } from '../util' -import { - processTypeEnum, - PROJECT_CONFIG, - BUILD_TYPES, - REG_STYLE -} from '../util/constants' -import { IBuildOptions } from '../util/types' -import { setBuildData as setMiniBuildData } from '../mini/helper' -import { IBuildData } from './ui.types' -import { - H5_OUTPUT_NAME, - RN_OUTPUT_NAME, - TEMP_DIR, - RN_TEMP_DIR, - WEAPP_OUTPUT_NAME, - copyFileToDist, - analyzeStyleFilesImport, - analyzeFiles -} from './common' -import { Compiler as RNCompiler } from '../rn' - -let buildData: IBuildData - -function setBuildData (appPath, uiIndex) { - const configDir = path.join(appPath, PROJECT_CONFIG) - const projectConfig = require(configDir)(_.merge) - const sourceDirName = projectConfig.sourceRoot || CONFIG.SOURCE_DIR - const outputDirName = projectConfig.outputRoot || CONFIG.OUTPUT_DIR - const sourceDir = path.join(appPath, sourceDirName) - let entryFilePath - if (uiIndex) { - entryFilePath = resolveScriptPath(path.join(sourceDir, uiIndex)) - } else { - entryFilePath = resolveScriptPath(path.join(sourceDir, 'index')) - } - const entryFileName = path.basename(entryFilePath) - const tempPath = path.join(appPath, TEMP_DIR) - const rnTempPath = path.join(appPath, RN_TEMP_DIR) - - buildData = { - appPath, - projectConfig, - sourceDirName, - outputDirName, - sourceDir, - entryFilePath, - entryFileName, - tempPath, - rnTempPath - } -} - -function buildEntry (uiIndex) { - const { appPath, outputDirName } = buildData - let indexName = 'index' - if (uiIndex) { - indexName = path.basename(uiIndex, path.extname(uiIndex)) - } - const content = `if (process.env.TARO_ENV === '${BUILD_TYPES.H5}') { - module.exports = require('./${H5_OUTPUT_NAME}/${indexName}') - module.exports.default = module.exports - } else if(process.env.TARO_ENV === '${BUILD_TYPES.RN}'){ - module.exports = require('./${RN_OUTPUT_NAME}/${indexName}') - module.exports.default = module.exports - } else { - module.exports = require('./${WEAPP_OUTPUT_NAME}/${indexName}') - module.exports.default = module.exports - }` - const outputDir = path.join(appPath, outputDirName) - fs.writeFileSync(path.join(outputDir, 'index.js'), content) -} - -function watchFiles () { - const { sourceDir, projectConfig, appPath, outputDirName, tempPath } = buildData - console.log('\n', chalk.gray('监听文件修改中...'), '\n') - - const watchList = [sourceDir] - - const uiConfig = projectConfig.ui - let extraWatchFiles - if (uiConfig) { - extraWatchFiles = uiConfig.extraWatchFiles - extraWatchFiles.forEach(item => { - watchList.push(path.join(appPath, item.path)) - if (typeof item.handler === 'function') item.callback = item.handler({ buildH5Script }) - }) - } - - const watcher = chokidar.watch(watchList, { - ignored: /(^|[/\\])\../, - ignoreInitial: true - }) - - function syncWeappFile (filePath) { - const outputDir = path.join(appPath, outputDirName, WEAPP_OUTPUT_NAME) - copyFileToDist(filePath, sourceDir, outputDir, buildData) - // 依赖分析 - const extname = path.extname(filePath) - if (REG_STYLE.test(extname)) { - analyzeStyleFilesImport([filePath], sourceDir, outputDir, buildData) - } else { - analyzeFiles([filePath], sourceDir, outputDir, buildData) - } - } - - function syncH5File (filePath, compiler) { - const { sourceDir, appPath, outputDirName, tempPath } = buildData - const outputDir = path.join(appPath, outputDirName, H5_OUTPUT_NAME) - const fileTempPath = filePath.replace(sourceDir, tempPath) - compiler.processFiles(filePath) - - if (process.env.TARO_BUILD_TYPE === 'script') { - buildH5Script(buildData) - } else { - copyFileToDist(fileTempPath, tempPath, outputDir, buildData) - // 依赖分析 - const extname = path.extname(filePath) - if (REG_STYLE.test(extname)) { - analyzeStyleFilesImport([fileTempPath], tempPath, outputDir, buildData) - } else { - analyzeFiles([fileTempPath], tempPath, outputDir, buildData) - } - } - } - - function syncRNFile (filePath, compiler) { - const { sourceDir, appPath, outputDirName, rnTempPath } = buildData - const outputDir = path.join(appPath, outputDirName, RN_OUTPUT_NAME) - const fileTempPath = filePath.replace(sourceDir, rnTempPath) - compiler.processFiles(filePath) - - copyFileToDist(fileTempPath, tempPath, outputDir, buildData) - // 依赖分析 - const extname = path.extname(filePath) - if (REG_STYLE.test(extname)) { - analyzeStyleFilesImport([fileTempPath], tempPath, outputDir, buildData) - } else { - analyzeFiles([fileTempPath], tempPath, outputDir, buildData) - } - } - - function handleChange (filePath, type, tips) { - const relativePath = path.relative(appPath, filePath) - const compiler = new Compiler(appPath) - const rnCompiler = new RNCompiler(appPath) - printLog(type, tips, relativePath) - - let processed = false - extraWatchFiles && extraWatchFiles.forEach(item => { - if (filePath.indexOf(item.path.substr(2)) < 0) return - if (typeof item.callback === 'function') { - item.callback() - processed = true - } - }) - if (processed) return - - try { - syncWeappFile(filePath) - syncH5File(filePath, compiler) - syncRNFile(filePath, rnCompiler) - } catch (err) { - console.log(err) - } - } - - watcher - .on('add', filePath => handleChange(filePath, processTypeEnum.CREATE, '添加文件')) - .on('change', filePath => handleChange(filePath, processTypeEnum.MODIFY, '文件变动')) - .on('unlink', filePath => { - for (const path in extraWatchFiles) { - if (filePath.indexOf(path.substr(2)) > -1) return - } - - const relativePath = path.relative(appPath, filePath) - printLog(processTypeEnum.UNLINK, '删除文件', relativePath) - const weappOutputPath = path.join(appPath, outputDirName, WEAPP_OUTPUT_NAME) - const h5OutputPath = path.join(appPath, outputDirName, H5_OUTPUT_NAME) - const fileTempPath = filePath.replace(sourceDir, tempPath) - const fileWeappPath = filePath.replace(sourceDir, weappOutputPath) - const fileH5Path = filePath.replace(sourceDir, h5OutputPath) - fs.existsSync(fileTempPath) && fs.unlinkSync(fileTempPath) - fs.existsSync(fileWeappPath) && fs.unlinkSync(fileWeappPath) - fs.existsSync(fileH5Path) && fs.unlinkSync(fileH5Path) - }) -} - -export async function build (appPath, { watch, uiIndex }: IBuildOptions) { - setBuildData(appPath, uiIndex) - setMiniBuildData(appPath, BUILD_TYPES.WEAPP) - buildEntry(uiIndex) - await buildForWeapp(buildData) - await buildForH5(uiIndex, buildData) - await buildForRN(uiIndex, buildData) - if (watch) { - watchFiles() - } -} diff --git a/packages/taro-cli/src/ui/rn.ts b/packages/taro-cli/src/ui/rn.ts index 61745a2fae44..f6cc7208bef9 100644 --- a/packages/taro-cli/src/ui/rn.ts +++ b/packages/taro-cli/src/ui/rn.ts @@ -1,12 +1,10 @@ import * as path from 'path' import * as fs from 'fs-extra' import * as wxTransformer from '@tarojs/transformer-wx' -import chalk from 'chalk' +import { processTypeEnum, REG_TYPESCRIPT, printLog, resolveScriptPath, chalk } from '@tarojs/helper' -import { processTypeEnum, REG_TYPESCRIPT } from '../util/constants' import { Compiler as RNCompiler } from '../rn' import { analyzeFiles, analyzeStyleFilesImport, copyFileToDist, RN_OUTPUT_NAME, parseEntryAst } from './common' -import { printLog, resolveScriptPath } from '../util' import { IBuildData } from './ui.types' export async function buildForRN (uiIndex = 'index', buildData) { @@ -20,9 +18,10 @@ export async function buildForRN (uiIndex = 'index', buildData) { export async function buildRNLib (uiIndex, buildData: IBuildData) { try { - const { appPath, outputDirName, rnTempPath } = buildData + const { appPath, outputDirName, sourceDir ,rnTempPath} = buildData const outputDir = path.join(appPath, outputDirName, RN_OUTPUT_NAME) - const tempEntryFilePath = resolveScriptPath(path.join(rnTempPath, uiIndex)) + const tempEntryFilePath = resolveScriptPath(path.join(sourceDir, uiIndex)) + const baseEntryFilePath = resolveScriptPath(path.join(rnTempPath, uiIndex)) // base by rn_temp const outputEntryFilePath = path.join(outputDir, path.basename(tempEntryFilePath)) const code = fs.readFileSync(tempEntryFilePath).toString() const transformResult = wxTransformer({ @@ -32,8 +31,9 @@ export async function buildRNLib (uiIndex, buildData: IBuildData) { isNormal: true, isTyped: REG_TYPESCRIPT.test(tempEntryFilePath) }) - const { styleFiles, components, code: generateCode } = parseEntryAst(transformResult.ast, tempEntryFilePath) + const { styleFiles, components, code: generateCode } = parseEntryAst(transformResult.ast, baseEntryFilePath) const relativePath = path.relative(appPath, tempEntryFilePath) + tempEntryFilePath.replace(path.extname(tempEntryFilePath),'.js') printLog(processTypeEnum.COPY, '发现文件', relativePath) fs.ensureDirSync(path.dirname(outputEntryFilePath)) fs.writeFileSync(outputEntryFilePath, generateCode) diff --git a/packages/taro-cli/src/ui/ui.types.ts b/packages/taro-cli/src/ui/ui.types.ts index 909e49815cdc..c45700bd5f2e 100644 --- a/packages/taro-cli/src/ui/ui.types.ts +++ b/packages/taro-cli/src/ui/ui.types.ts @@ -15,10 +15,14 @@ export interface IBuildData { export interface IH5BuildConfig extends IH5Config { env?: object, defineConstants?: object, - plugins?: object, + plugins?: any[], designWidth?: number, deviceRatio?: object, sourceRoot?: string, outputRoot?: string, - isWatch?: boolean + isWatch?: boolean, + babel?: object, + sass?: object, + csso?: object, + uglify?: object } diff --git a/packages/taro-cli/src/ui/weapp.ts b/packages/taro-cli/src/ui/weapp.ts index cfe1f1b2547a..aadea5592725 100644 --- a/packages/taro-cli/src/ui/weapp.ts +++ b/packages/taro-cli/src/ui/weapp.ts @@ -1,22 +1,11 @@ -import chalk from 'chalk' import * as fs from 'fs-extra' import * as path from 'path' -import * as glob from 'glob' import * as wxTransformer from '@tarojs/transformer-wx' -import { processTypeEnum, REG_TYPESCRIPT } from '../util/constants' -import { printLog } from '../util' -import { analyzeFiles, parseEntryAst, WEAPP_OUTPUT_NAME, copyFileToDist } from './common' -import { IBuildData } from './ui.types' +import { processTypeEnum, REG_TYPESCRIPT, printLog, chalk } from '@tarojs/helper' -function copyAllInterfaceFiles (sourceDir, outputDir, buildData) { - const interfaceFiles = glob.sync(path.join(sourceDir, '**/*.d.ts')) - if (interfaceFiles && interfaceFiles.length) { - interfaceFiles.forEach(item => { - copyFileToDist(item, sourceDir, outputDir, buildData) - }) - } -} +import { analyzeFiles, parseEntryAst, WEAPP_OUTPUT_NAME, copyFileToDist, copyAllInterfaceFiles } from './common' +import { IBuildData } from './ui.types' export async function buildForWeapp (buildData: IBuildData) { const { appPath, entryFilePath, outputDirName, entryFileName, sourceDir } = buildData diff --git a/packages/taro-cli/src/util/constants.ts b/packages/taro-cli/src/util/constants.ts deleted file mode 100644 index 5c802fba741b..000000000000 --- a/packages/taro-cli/src/util/constants.ts +++ /dev/null @@ -1,363 +0,0 @@ -import * as os from 'os' -import chalk, { Chalk } from 'chalk' - -export const enum processTypeEnum { - START = 'start', - CREATE = 'create', - COMPILE = 'compile', - CONVERT = 'convert', - COPY = 'copy', - GENERATE = 'generate', - MODIFY = 'modify', - ERROR = 'error', - WARNING = 'warning', - UNLINK = 'unlink', - REFERENCE = 'reference' -} - -export interface IProcessTypeMap { - [key: string]: { - name: string; - color: string | Chalk; - }; -} - -export const processTypeMap: IProcessTypeMap = { - [processTypeEnum.CREATE]: { - name: '创建', - color: 'cyan' - }, - [processTypeEnum.COMPILE]: { - name: '编译', - color: 'green' - }, - [processTypeEnum.CONVERT]: { - name: '转换', - color: chalk.rgb(255, 136, 0) - }, - [processTypeEnum.COPY]: { - name: '拷贝', - color: 'magenta' - }, - [processTypeEnum.GENERATE]: { - name: '生成', - color: 'blue' - }, - [processTypeEnum.MODIFY]: { - name: '修改', - color: 'yellow' - }, - [processTypeEnum.ERROR]: { - name: '错误', - color: 'red' - }, - [processTypeEnum.WARNING]: { - name: '警告', - color: 'yellowBright' - }, - [processTypeEnum.UNLINK]: { - name: '删除', - color: 'magenta' - }, - [processTypeEnum.START]: { - name: '启动', - color: 'green' - }, - [processTypeEnum.REFERENCE]: { - name: '引用', - color: 'blue' - } -} - -export const CSS_EXT: string[] = ['.css', '.scss', '.sass', '.less', '.styl', '.wxss', '.acss'] -export const SCSS_EXT: string[] = ['.scss'] -export const JS_EXT: string[] = ['.js', '.jsx'] -export const TS_EXT: string[] = ['.ts', '.tsx'] -export const UX_EXT: string[] = ['.ux'] - -export const REG_JS = /\.js(\?.*)?$/ -export const REG_SCRIPT = /\.(js|jsx)(\?.*)?$/ -export const REG_TYPESCRIPT = /\.(tsx|ts)(\?.*)?$/ -export const REG_SCRIPTS = /\.[tj]sx?$/i -export const REG_STYLE = /\.(css|scss|sass|less|styl|wxss)(\?.*)?$/ -export const REG_MEDIA = /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/ -export const REG_IMAGE = /\.(png|jpe?g|gif|bpm|svg|webp)(\?.*)?$/ -export const REG_FONT = /\.(woff2?|eot|ttf|otf)(\?.*)?$/ -export const REG_JSON = /\.json(\?.*)?$/ -export const REG_UX = /\.ux(\?.*)?$/ -export const REG_WXML_IMPORT = / { - if (item.indexOf('..') >= 0) { - dotCount++ - } - }) - if (dotCount === 1) { - fPathArr.splice(0, 1, '.') - return fPathArr.join('/') - } - if (dotCount > 1) { - fPathArr.splice(0, 1) - return fPathArr.join('/') - } - return fPath.replace(/\\/g, '/') -} - -export const homedir = os.homedir export function getRootPath (): string { return path.resolve(__dirname, '../../') } -export function getTaroPath (): string { - const taroPath = path.join(homedir(), '.taro') - if (!fs.existsSync(taroPath)) { - fs.ensureDirSync(taroPath) - } - return taroPath -} - -export function getConfig (): object { - const configPath = path.join(getTaroPath(), 'config.json') - if (fs.existsSync(configPath)) { - return require(configPath) - } - return {} -} - -export function getSystemUsername (): string { - const userHome = homedir() - const systemUsername = process.env.USER || path.basename(userHome) - return systemUsername -} - export function getPkgVersion (): string { return require(path.join(getRootPath(), 'package.json')).version } @@ -122,358 +24,6 @@ export function printPkgVersion () { console.log() } -export function shouldUseYarn (): boolean { - try { - execSync('yarn --version', { stdio: 'ignore' }) - return true - } catch (e) { - return false - } -} - -export function shouldUseCnpm (): boolean { - try { - execSync('cnpm --version', { stdio: 'ignore' }) - return true - } catch (e) { - return false - } -} - -export function isEmptyObject (obj: any): boolean { - if (obj == null) { - return true - } - for (const key in obj) { - if (obj.hasOwnProperty(key)) { - return false - } - } - return true -} - -export function resolveScriptPath (p: string): string { - const realPath = p - const taroEnv = process.env.TARO_ENV - const SCRIPT_EXT = JS_EXT.concat(TS_EXT) - for (let i = 0; i < SCRIPT_EXT.length; i++) { - const item = SCRIPT_EXT[i] - if (taroEnv) { - if (fs.existsSync(`${p}.${taroEnv}${item}`)) { - return `${p}.${taroEnv}${item}` - } - if (fs.existsSync(`${p}${path.sep}index.${taroEnv}${item}`)) { - return `${p}${path.sep}index.${taroEnv}${item}` - } - if (fs.existsSync(`${p.replace(/\/index$/, `.${taroEnv}/index`)}${item}`)) { - return `${p.replace(/\/index$/, `.${taroEnv}/index`)}${item}` - } - } - if (fs.existsSync(`${p}${item}`)) { - return `${p}${item}` - } - if (fs.existsSync(`${p}${path.sep}index${item}`)) { - return `${p}${path.sep}index${item}` - } - } - return realPath -} - -export function resolveStylePath (p: string): string { - const realPath = p - const removeExtPath = p.replace(path.extname(p), '') - const taroEnv = process.env.TARO_ENV - for (let i = 0; i < CSS_EXT.length; i++) { - const item = CSS_EXT[i] - if (taroEnv) { - if (fs.existsSync(`${removeExtPath}.${taroEnv}${item}`)) { - return `${removeExtPath}.${taroEnv}${item}` - } - } - if (fs.existsSync(`${p}${item}`)) { - return `${p}${item}` - } - } - return realPath -} - -export function printLog (type: processTypeEnum, tag: string, filePath?: string) { - const typeShow = processTypeMap[type] - const tagLen = tag.replace(/[\u0391-\uFFE5]/g, 'aa').length - const tagFormatLen = 8 - if (tagLen < tagFormatLen) { - const rightPadding = new Array(tagFormatLen - tagLen + 1).join(' ') - tag += rightPadding - } - const padding = '' - filePath = filePath || '' - if (typeof typeShow.color === 'string') { - console.log(chalk[typeShow.color](typeShow.name), padding, tag, padding, filePath) - } else { - console.log(typeShow.color(typeShow.name), padding, tag, padding, filePath) - } -} - -export function generateEnvList (env: object): object { - const res = {} - if (env && !isEmptyObject(env)) { - for (const key in env) { - try { - res[`process.env.${key}`] = JSON.parse(env[key]) - } catch (err) { - res[`process.env.${key}`] = env[key] - } - } - } - return res -} - -export function generateConstantsList (constants: object): object { - const res = {} - if (constants && !isEmptyObject(constants)) { - for (const key in constants) { - if (isPlainObject(constants[key])) { - res[key] = generateConstantsList(constants[key]) - } else { - try { - res[key] = JSON.parse(constants[key]) - } catch (err) { - res[key] = constants[key] - } - } - } - } - return res -} - -export function cssImports (content: string): string[] { - let match: RegExpExecArray | null - const results: string[] = [] - content = String(content).replace(/\/\*.+?\*\/|\/\/.*(?=[\n\r])/g, '') - while ((match = CSS_IMPORT_REG.exec(content))) { - results.push(match[2]) - } - return results -} - -export function processStyleImports ( - content: string, - adapter: BUILD_TYPES, - processFn: (a: string, b: string) => string -) { - const style: string[] = [] - const imports: string[] = [] - const styleReg = new RegExp(`\\${MINI_APP_FILES[adapter].STYLE}`) - content = content.replace(CSS_IMPORT_REG, (m, $1, $2) => { - if (styleReg.test($2)) { - style.push(m) - imports.push($2) - if (processFn) { - return processFn(m, $2) - } - return '' - } - if (processFn) { - return processFn(m, $2) - } - return m - }) - return { - content, - style, - imports - } -} -/*eslint-disable*/ -const retries = (process.platform === 'win32') ? 100 : 1 -export function emptyDirectory (dirPath: string, opts: { excludes: string[] } = { excludes: [] }) { - if (fs.existsSync(dirPath)) { - fs.readdirSync(dirPath).forEach(file => { - const curPath = path.join(dirPath, file) - if (fs.lstatSync(curPath).isDirectory()) { - let removed = false - let i = 0 // retry counter - do { - try { - if (!opts.excludes.length || !opts.excludes.some(item => curPath.indexOf(item) >= 0)) { - emptyDirectory(curPath) - fs.rmdirSync(curPath) - } - removed = true - } catch (e) { - } finally { - if (++i < retries) { - continue - } - } - } while (!removed) - } else { - fs.unlinkSync(curPath) - } - }) - } -} -/* eslint-enable */ - -export function recursiveFindNodeModules (filePath: string): string { - const dirname = path.dirname(filePath) - const workspaceRoot = findWorkspaceRoot(dirname) - const nodeModules = path.join(workspaceRoot || dirname, 'node_modules') - if (fs.existsSync(nodeModules)) { - return nodeModules - } - return recursiveFindNodeModules(dirname) -} - -export const pascalCase: (str: string) => string = (str: string): string => - str.charAt(0).toUpperCase() + camelCase(str.substr(1)) - -export function getInstalledNpmPkgPath (pkgName: string, basedir: string): string | null { - const resolvePath = require('resolve') - try { - return resolvePath.sync(`${pkgName}/package.json`, { basedir }) - } catch (err) { - return null - } -} - -export function getInstalledNpmPkgVersion (pkgName: string, basedir: string): string | null { - const pkgPath = getInstalledNpmPkgPath(pkgName, basedir) - if (!pkgPath) { - return null - } - return fs.readJSONSync(pkgPath).version -} - -export function isQuickappPkg (name: string, quickappPkgs: any[] = []): boolean { - const isQuickappPkg = /^@(system|service)\.[a-zA-Z]{1,}/.test(name) - let hasSetInManifest = false - quickappPkgs.forEach(item => { - if (item.name === name.replace(/^@/, '')) { - hasSetInManifest = true - } - }) - if (isQuickappPkg && !hasSetInManifest) { - printLog( - processTypeEnum.ERROR, - '快应用', - `需要在 ${chalk.bold('project.quickapp.json')} 文件的 ${chalk.bold('features')} 配置中添加 ${chalk.bold(name)}` - ) - } - return isQuickappPkg -} - -export const recursiveMerge = (src, ...args) => { - return mergeWith(src, ...args, (value, srcValue) => { - const typeValue = typeof value - const typeSrcValue = typeof srcValue - if (typeValue !== typeSrcValue) return - if (Array.isArray(value) && Array.isArray(srcValue)) { - return value.concat(srcValue) - } - if (typeValue === 'object') { - return recursiveMerge(value, srcValue) - } - }) -} - -export const mergeVisitors = (src, ...args) => { - const validFuncs = ['exit', 'enter'] - return mergeWith(src, ...args, (value, srcValue, key, object, srcObject) => { - if (!object.hasOwnProperty(key) || !srcObject.hasOwnProperty(key)) { - return undefined - } - - const shouldMergeToArray = validFuncs.indexOf(key) > -1 - if (shouldMergeToArray) { - return flatMap([value, srcValue]) - } - const [newValue, newSrcValue] = [value, srcValue].map(v => { - if (typeof v === 'function') { - return { - enter: v - } - } else { - return v - } - }) - return mergeVisitors(newValue, newSrcValue) - }) -} - -export const applyArrayedVisitors = obj => { - let key - for (key in obj) { - const funcs = obj[key] - if (Array.isArray(funcs)) { - obj[key] = (astPath, ...args) => { - funcs.forEach(func => { - func(astPath, ...args) - }) - } - } else if (typeof funcs === 'object') { - applyArrayedVisitors(funcs) - } - } - return obj -} - -export function unzip (zipPath) { - return new Promise((resolve, reject) => { - yauzl.open(zipPath, { lazyEntries: true }, (err, zipfile) => { - if (err) throw err - zipfile.on('close', () => { - fs.removeSync(zipPath) - resolve() - }) - zipfile.readEntry() - zipfile.on('error', err => { - reject(err) - }) - zipfile.on('entry', entry => { - if (/\/$/.test(entry.fileName)) { - const fileNameArr = entry.fileName.replace(/\\/g, '/').split('/') - fileNameArr.shift() - const fileName = fileNameArr.join('/') - fs.ensureDirSync(path.join(path.dirname(zipPath), fileName)) - zipfile.readEntry() - } else { - zipfile.openReadStream(entry, (err, readStream) => { - if (err) throw err - const filter = new Transform() - filter._transform = function (chunk, encoding, cb) { - cb(undefined, chunk) - } - filter._flush = function (cb) { - cb() - zipfile.readEntry() - } - const fileNameArr = entry.fileName.replace(/\\/g, '/').split('/') - fileNameArr.shift() - const fileName = fileNameArr.join('/') - const writeStream = fs.createWriteStream(path.join(path.dirname(zipPath), fileName)) - writeStream.on('close', () => {}) - readStream.pipe(filter).pipe(writeStream) - }) - } - }) - }) - }) -} - -let babelConfig - -export function getBabelConfig (babel) { - if (!babelConfig) { - babelConfig = mergeWith({}, defaultBabelConfig, babel, (objValue, srcValue) => { - if (Array.isArray(objValue)) { - return Array.from(new Set(srcValue.concat(objValue))) - } - }) - } - return babelConfig -} - export const getAllFilesInFloder = async ( floder: string, filter: string[] = [] @@ -496,29 +46,6 @@ export const getAllFilesInFloder = async ( return files } -export function getUserHomeDir (): string { - function homedir (): string { - const env = process.env - const home = env.HOME - const user = env.LOGNAME || env.USER || env.LNAME || env.USERNAME - - if (process.platform === 'win32') { - return env.USERPROFILE || '' + env.HOMEDRIVE + env.HOMEPATH || home || '' - } - - if (process.platform === 'darwin') { - return home || (user ? '/Users/' + user : '') - } - - if (process.platform === 'linux') { - return home || (process.getuid() === 0 ? '/root' : user ? '/home/' + user : '') - } - - return home || '' - } - return typeof (os.homedir as (() => string) | undefined) === 'function' ? os.homedir() : homedir() -} - export type TemplateSourceType = 'git' | 'url' export function getTemplateSourceType (url: string): TemplateSourceType { @@ -530,9 +57,9 @@ export function getTemplateSourceType (url: string): TemplateSourceType { } interface FileStat { - name: string; - isDirectory: boolean; - isFile: boolean; + name: string + isDirectory: boolean + isFile: boolean } export function readDirWithFileTypes (floder: string): FileStat[] { @@ -548,10 +75,18 @@ export function readDirWithFileTypes (floder: string): FileStat[] { return res } -export function extnameExpRegOf (filePath: string): RegExp { - return new RegExp(`${path.extname(filePath)}$`) -} - -export function generateAlipayPath (filePath) { - return filePath.replace(/@/g, '_') +export function recursiveReplaceObjectKeys (obj, keyMap) { + Object.keys(obj).forEach(key => { + if (keyMap[key]) { + obj[keyMap[key]] = obj[key] + if (typeof obj[key] === 'object') { + recursiveReplaceObjectKeys(obj[keyMap[key]], keyMap) + } + delete obj[key] + } else if (keyMap[key] === false) { + delete obj[key] + } else if (typeof obj[key] === 'object') { + recursiveReplaceObjectKeys(obj[key], keyMap) + } + }) } diff --git a/packages/taro-cli/src/util/types.ts b/packages/taro-cli/src/util/types.ts index b6c44674dc9c..0a0e61488af7 100644 --- a/packages/taro-cli/src/util/types.ts +++ b/packages/taro-cli/src/util/types.ts @@ -1,5 +1,3 @@ -import { BUILD_TYPES } from './constants' - export interface IInstallOptions { dev: boolean; peerDependencies?: boolean; @@ -57,7 +55,7 @@ export interface IPrettierConfig { } export interface IBuildOptions { - type?: BUILD_TYPES, + type?: string, watch?: boolean, platform?: string, port?: number, @@ -69,7 +67,7 @@ export interface IBuildOptions { } export interface IMiniAppBuildConfig { - adapter: BUILD_TYPES, + adapter: string, watch?: boolean, envHasBeenSet?: boolean, port?: number, diff --git a/packages/taro-cli/yarn.lock b/packages/taro-cli/yarn.lock new file mode 100644 index 000000000000..c1b075635edb --- /dev/null +++ b/packages/taro-cli/yarn.lock @@ -0,0 +1,6409 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.0.0-beta.44.tgz?cache=0&sync_timestamp=1578953126105&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.0.0-beta.44.tgz#2a02643368de80916162be70865c97774f3adbd9" + dependencies: + "@babel/highlight" "7.0.0-beta.44" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.0.0-beta.44", "@babel/code-frame@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.8.3.tgz?cache=0&sync_timestamp=1578953126105&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" + dependencies: + "@babel/highlight" "^7.8.3" + +"@babel/generator@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.0.0-beta.44.tgz?cache=0&sync_timestamp=1588185906082&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fgenerator%2Fdownload%2F%40babel%2Fgenerator-7.0.0-beta.44.tgz#c7e67b9b5284afcf69b309b50d7d37f3e5033d42" + dependencies: + "@babel/types" "7.0.0-beta.44" + jsesc "^2.5.1" + lodash "^4.2.0" + source-map "^0.5.0" + trim-right "^1.0.1" + +"@babel/generator@^7.9.6": + version "7.9.6" + resolved "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.9.6.tgz?cache=0&sync_timestamp=1588185906082&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fgenerator%2Fdownload%2F%40babel%2Fgenerator-7.9.6.tgz#5408c82ac5de98cda0d77d8124e99fa1f2170a43" + dependencies: + "@babel/types" "^7.9.6" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + +"@babel/helper-function-name@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.0.0-beta.44.tgz#e18552aaae2231100a6e485e03854bc3532d44dd" + dependencies: + "@babel/helper-get-function-arity" "7.0.0-beta.44" + "@babel/template" "7.0.0-beta.44" + "@babel/types" "7.0.0-beta.44" + +"@babel/helper-function-name@^7.9.5": + version "7.9.5" + resolved "https://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.9.5.tgz#2b53820d35275120e1874a82e5aabe1376920a5c" + dependencies: + "@babel/helper-get-function-arity" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/types" "^7.9.5" + +"@babel/helper-get-function-arity@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.0.0-beta.44.tgz?cache=0&sync_timestamp=1578951938166&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-get-function-arity%2Fdownload%2F%40babel%2Fhelper-get-function-arity-7.0.0-beta.44.tgz#d03ca6dd2b9f7b0b1e6b32c56c72836140db3a15" + dependencies: + "@babel/types" "7.0.0-beta.44" + +"@babel/helper-get-function-arity@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.8.3.tgz?cache=0&sync_timestamp=1578951938166&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-get-function-arity%2Fdownload%2F%40babel%2Fhelper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-split-export-declaration@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.0.0-beta.44.tgz#c0b351735e0fbcb3822c8ad8db4e583b05ebd9dc" + dependencies: + "@babel/types" "7.0.0-beta.44" + +"@babel/helper-split-export-declaration@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-validator-identifier@^7.9.0", "@babel/helper-validator-identifier@^7.9.5": + version "7.9.5" + resolved "https://registry.npm.taobao.org/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80" + +"@babel/highlight@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.0.0-beta.44.tgz#18c94ce543916a80553edcdcf681890b200747d5" + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + +"@babel/highlight@^7.8.3": + version "7.9.0" + resolved "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079" + dependencies: + "@babel/helper-validator-identifier" "^7.9.0" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.3.1", "@babel/parser@^7.8.6", "@babel/parser@^7.9.6": + version "7.9.6" + resolved "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.9.6.tgz#3b1bbb30dabe600cd72db58720998376ff653bc7" + +"@babel/runtime-corejs3@^7.8.3": + version "7.9.6" + resolved "https://registry.npm.taobao.org/@babel/runtime-corejs3/download/@babel/runtime-corejs3-7.9.6.tgz?cache=0&sync_timestamp=1588186184001&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime-corejs3%2Fdownload%2F%40babel%2Fruntime-corejs3-7.9.6.tgz#67aded13fffbbc2cb93247388cf84d77a4be9a71" + dependencies: + core-js-pure "^3.0.0" + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.7.2", "@babel/runtime@^7.9.2": + version "7.9.6" + resolved "https://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.9.6.tgz?cache=0&sync_timestamp=1588185905751&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.9.6.tgz#a9102eb5cadedf3f31d08a9ecf294af7827ea29f" + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.0.0-beta.44.tgz#f8832f4fdcee5d59bf515e595fc5106c529b394f" + dependencies: + "@babel/code-frame" "7.0.0-beta.44" + "@babel/types" "7.0.0-beta.44" + babylon "7.0.0-beta.44" + lodash "^4.2.0" + +"@babel/template@^7.8.3": + version "7.8.6" + resolved "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/parser" "^7.8.6" + "@babel/types" "^7.8.6" + +"@babel/traverse@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.0.0-beta.44.tgz?cache=0&sync_timestamp=1588185904779&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.0.0-beta.44.tgz#a970a2c45477ad18017e2e465a0606feee0d2966" + dependencies: + "@babel/code-frame" "7.0.0-beta.44" + "@babel/generator" "7.0.0-beta.44" + "@babel/helper-function-name" "7.0.0-beta.44" + "@babel/helper-split-export-declaration" "7.0.0-beta.44" + "@babel/types" "7.0.0-beta.44" + babylon "7.0.0-beta.44" + debug "^3.1.0" + globals "^11.1.0" + invariant "^2.2.0" + lodash "^4.2.0" + +"@babel/traverse@^7.2.3": + version "7.9.6" + resolved "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.9.6.tgz?cache=0&sync_timestamp=1588185904779&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.9.6.tgz#5540d7577697bf619cc57b92aa0f1c231a94f442" + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.9.6" + "@babel/helper-function-name" "^7.9.5" + "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/parser" "^7.9.6" + "@babel/types" "^7.9.6" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + +"@babel/types@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.0.0-beta.44.tgz?cache=0&sync_timestamp=1588185868018&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftypes%2Fdownload%2F%40babel%2Ftypes-7.0.0-beta.44.tgz#6b1b164591f77dec0a0342aca995f2d046b3a757" + dependencies: + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^2.0.0" + +"@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.5", "@babel/types@^7.9.6": + version "7.9.6" + resolved "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.9.6.tgz?cache=0&sync_timestamp=1588185868018&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftypes%2Fdownload%2F%40babel%2Ftypes-7.9.6.tgz#2c5502b427251e9de1bd2dff95add646d95cc9f7" + dependencies: + "@babel/helper-validator-identifier" "^7.9.5" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + +"@mrmlnc/readdir-enhanced@^2.2.1": + version "2.2.1" + resolved "https://registry.npm.taobao.org/@mrmlnc/readdir-enhanced/download/@mrmlnc/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" + dependencies: + call-me-maybe "^1.0.1" + glob-to-regexp "^0.3.0" + +"@nodelib/fs.stat@^1.1.2": + version "1.1.3" + resolved "https://registry.npm.taobao.org/@nodelib/fs.stat/download/@nodelib/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" + +"@sindresorhus/is@^0.7.0": + version "0.7.0" + resolved "https://registry.npm.taobao.org/@sindresorhus/is/download/@sindresorhus/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" + +"@tarojs/transformer-wx@^2.0.4": + version "2.2.3" + resolved "https://registry.npm.taobao.org/@tarojs/transformer-wx/download/@tarojs/transformer-wx-2.2.3.tgz#648b6eb314f1476715b762248debfe2caa032644" + dependencies: + "@babel/code-frame" "^7.0.0-beta.44" + babel-core "^6.26.3" + babel-eslint "^8.2.3" + babel-helper-evaluate-path "^0.5.0" + babel-helper-mark-eval-scopes "^0.4.3" + babel-helper-remove-or-void "^0.4.3" + babel-plugin-danger-remove-unused-import "^1.1.1" + babel-plugin-minify-dead-code "^1.3.2" + babel-plugin-preval "1.6.2" + babel-plugin-syntax-dynamic-import "^6.18.0" + babel-plugin-transform-class-properties "^6.24.1" + babel-plugin-transform-define "^1.3.0" + babel-plugin-transform-do-expressions "^6.22.0" + babel-plugin-transform-es2015-template-literals "^6.22.0" + babel-plugin-transform-export-extensions "^6.22.0" + babel-plugin-transform-flow-strip-types "^6.22.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + eslint "5.16.0" + eslint-plugin-react "7.10.0" + eslint-plugin-taro "^2.2.3" + html "^1.0.0" + lodash "^4.17.5" + prettier "^1.14.2" + typescript "^3.2.2" + +"@types/caseless@*": + version "0.12.2" + resolved "https://registry.npm.taobao.org/@types/caseless/download/@types/caseless-0.12.2.tgz#f65d3d6389e01eeb458bd54dc8f52b95a9463bc8" + +"@types/color-name@^1.1.1": + version "1.1.1" + resolved "https://registry.npm.taobao.org/@types/color-name/download/@types/color-name-1.1.1.tgz?cache=0&sync_timestamp=1588200011932&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fcolor-name%2Fdownload%2F%40types%2Fcolor-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + +"@types/eslint-visitor-keys@^1.0.0": + version "1.0.0" + resolved "https://registry.npm.taobao.org/@types/eslint-visitor-keys/download/@types/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" + +"@types/json-schema@^7.0.3": + version "7.0.4" + resolved "https://registry.npm.taobao.org/@types/json-schema/download/@types/json-schema-7.0.4.tgz?cache=0&sync_timestamp=1588200629858&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fjson-schema%2Fdownload%2F%40types%2Fjson-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339" + +"@types/node@*": + version "13.13.5" + resolved "https://registry.npm.taobao.org/@types/node/download/@types/node-13.13.5.tgz?cache=0&sync_timestamp=1588705478748&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-13.13.5.tgz#96ec3b0afafd64a4ccea9107b75bf8489f0e5765" + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.npm.taobao.org/@types/parse-json/download/@types/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + +"@types/request@^2.48.1": + version "2.48.4" + resolved "https://registry.npm.taobao.org/@types/request/download/@types/request-2.48.4.tgz?cache=0&sync_timestamp=1588206696727&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Frequest%2Fdownload%2F%40types%2Frequest-2.48.4.tgz#df3d43d7b9ed3550feaa1286c6eabf0738e6cf7e" + dependencies: + "@types/caseless" "*" + "@types/node" "*" + "@types/tough-cookie" "*" + form-data "^2.5.0" + +"@types/tough-cookie@*": + version "4.0.0" + resolved "https://registry.npm.taobao.org/@types/tough-cookie/download/@types/tough-cookie-4.0.0.tgz#fef1904e4668b6e5ecee60c52cc6a078ffa6697d" + +"@typescript-eslint/experimental-utils@2.31.0": + version "2.31.0" + resolved "https://registry.npm.taobao.org/@typescript-eslint/experimental-utils/download/@typescript-eslint/experimental-utils-2.31.0.tgz?cache=0&sync_timestamp=1588612658497&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fexperimental-utils%2Fdownload%2F%40typescript-eslint%2Fexperimental-utils-2.31.0.tgz#a9ec514bf7fd5e5e82bc10dcb6a86d58baae9508" + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/typescript-estree" "2.31.0" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" + +"@typescript-eslint/parser@^2.0.0": + version "2.31.0" + resolved "https://registry.npm.taobao.org/@typescript-eslint/parser/download/@typescript-eslint/parser-2.31.0.tgz#beddd4e8efe64995108b229b2862cd5752d40d6f" + dependencies: + "@types/eslint-visitor-keys" "^1.0.0" + "@typescript-eslint/experimental-utils" "2.31.0" + "@typescript-eslint/typescript-estree" "2.31.0" + eslint-visitor-keys "^1.1.0" + +"@typescript-eslint/typescript-estree@2.31.0": + version "2.31.0" + resolved "https://registry.npm.taobao.org/@typescript-eslint/typescript-estree/download/@typescript-eslint/typescript-estree-2.31.0.tgz?cache=0&sync_timestamp=1588612657384&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Ftypescript-estree%2Fdownload%2F%40typescript-eslint%2Ftypescript-estree-2.31.0.tgz#ac536c2d46672aa1f27ba0ec2140d53670635cfd" + dependencies: + debug "^4.1.1" + eslint-visitor-keys "^1.1.0" + glob "^7.1.6" + is-glob "^4.0.1" + lodash "^4.17.15" + semver "^6.3.0" + tsutils "^3.17.1" + +acorn-jsx@^5.0.0, acorn-jsx@^5.2.0: + version "5.2.0" + resolved "https://registry.npm.taobao.org/acorn-jsx/download/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" + +acorn@^6.0.7: + version "6.4.1" + resolved "https://registry.npm.taobao.org/acorn/download/acorn-6.4.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" + +acorn@^7.1.1: + version "7.1.1" + resolved "https://registry.npm.taobao.org/acorn/download/acorn-7.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" + +adm-zip@^0.4.13: + version "0.4.14" + resolved "https://registry.npm.taobao.org/adm-zip/download/adm-zip-0.4.14.tgz?cache=0&sync_timestamp=1581020452043&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fadm-zip%2Fdownload%2Fadm-zip-0.4.14.tgz#2cf312bcc9f8875df835b0f6040bd89be0a727a9" + +ajv-keywords@^3.0.0: + version "3.4.1" + resolved "https://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" + +ajv@^6.0.1, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5, ajv@^6.9.1: + version "6.12.2" + resolved "https://registry.npm.taobao.org/ajv/download/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd" + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-align@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/ansi-align/download/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" + dependencies: + string-width "^2.0.0" + +ansi-escapes@^1.1.0: + version "1.4.0" + resolved "https://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-1.4.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-escapes%2Fdownload%2Fansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" + +ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: + version "3.2.0" + resolved "https://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-3.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-escapes%2Fdownload%2Fansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + +ansi-escapes@^4.2.1: + version "4.3.1" + resolved "https://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-4.3.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-escapes%2Fdownload%2Fansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" + dependencies: + type-fest "^0.11.0" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz?cache=0&sync_timestamp=1570188663907&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz?cache=0&sync_timestamp=1570188663907&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz?cache=0&sync_timestamp=1570188663907&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz?cache=0&sync_timestamp=1570188663907&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.1.0: + version "4.2.1" + resolved "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" + dependencies: + "@types/color-name" "^1.1.1" + color-convert "^2.0.1" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +append-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/append-buffer/download/append-buffer-1.0.2.tgz#d8220cf466081525efea50614f3de6514dfa58f1" + dependencies: + buffer-equal "^1.0.0" + +archive-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/archive-type/download/archive-type-4.0.0.tgz#f92e72233056dfc6969472749c267bdb046b1d70" + dependencies: + file-type "^4.2.0" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz?cache=0&sync_timestamp=1571657259891&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fargparse%2Fdownload%2Fargparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/arr-diff/download/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + dependencies: + arr-flatten "^1.0.1" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + +arr-flatten@^1.0.1, arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/arr-union/download/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + +array-differ@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/array-differ/download/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.npm.taobao.org/array-find-index/download/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + +array-includes@^3.0.3, array-includes@^3.1.1: + version "3.1.1" + resolved "https://registry.npm.taobao.org/array-includes/download/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0" + is-string "^1.0.5" + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.npm.taobao.org/array-union/download/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.npm.taobao.org/array-uniq/download/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.npm.taobao.org/array-unique/download/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + +array.prototype.flat@^1.2.1: + version "1.2.3" + resolved "https://registry.npm.taobao.org/array.prototype.flat/download/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b" + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +arrify@^1.0.0, arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/arrify/download/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.npm.taobao.org/asap/download/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/assign-symbols/download/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/astral-regex/download/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.npm.taobao.org/async-each/download/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.npm.taobao.org/atob/download/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + +autoprefixer@^8.0.0: + version "8.6.5" + resolved "https://registry.npm.taobao.org/autoprefixer/download/autoprefixer-8.6.5.tgz?cache=0&sync_timestamp=1586208301301&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fautoprefixer%2Fdownload%2Fautoprefixer-8.6.5.tgz#343f3d193ed568b3208e00117a1b96eb691d4ee9" + dependencies: + browserslist "^3.2.8" + caniuse-lite "^1.0.30000864" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^6.0.23" + postcss-value-parser "^3.2.3" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + +aws4@^1.8.0: + version "1.9.1" + resolved "https://registry.npm.taobao.org/aws4/download/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" + +babel-code-frame@^6.26.0, babel-code-frame@^6.8.0: + version "6.26.0" + resolved "https://registry.npm.taobao.org/babel-code-frame/download/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-core@6.10.4: + version "6.10.4" + resolved "https://registry.npm.taobao.org/babel-core/download/babel-core-6.10.4.tgz#283f2212bb03d4e5cd7498b9886efbf6fc2e238e" + dependencies: + babel-code-frame "^6.8.0" + babel-generator "^6.9.0" + babel-helpers "^6.8.0" + babel-messages "^6.8.0" + babel-register "^6.9.0" + babel-runtime "^6.9.1" + babel-template "^6.9.0" + babel-traverse "^6.10.4" + babel-types "^6.9.1" + babylon "^6.7.0" + convert-source-map "^1.1.0" + debug "^2.1.1" + json5 "^0.4.0" + lodash "^4.2.0" + minimatch "^3.0.2" + path-exists "^1.0.0" + path-is-absolute "^1.0.0" + private "^0.1.6" + shebang-regex "^1.0.0" + slash "^1.0.0" + source-map "^0.5.0" + +babel-core@^6.26.0, babel-core@^6.26.3: + version "6.26.3" + resolved "https://registry.npm.taobao.org/babel-core/download/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.1" + debug "^2.6.9" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.8" + slash "^1.0.0" + source-map "^0.5.7" + +babel-eslint@^8.2.3: + version "8.2.6" + resolved "https://registry.npm.taobao.org/babel-eslint/download/babel-eslint-8.2.6.tgz?cache=0&sync_timestamp=1582676223200&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-eslint%2Fdownload%2Fbabel-eslint-8.2.6.tgz#6270d0c73205628067c0f7ae1693a9e797acefd9" + dependencies: + "@babel/code-frame" "7.0.0-beta.44" + "@babel/traverse" "7.0.0-beta.44" + "@babel/types" "7.0.0-beta.44" + babylon "7.0.0-beta.44" + eslint-scope "3.7.1" + eslint-visitor-keys "^1.0.0" + +babel-generator@^6.26.0, babel-generator@^6.26.1, babel-generator@^6.9.0: + version "6.26.1" + resolved "https://registry.npm.taobao.org/babel-generator/download/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.17.4" + source-map "^0.5.7" + trim-right "^1.0.1" + +babel-helper-builder-react-jsx@^6.24.1: + version "6.26.0" + resolved "https://registry.npm.taobao.org/babel-helper-builder-react-jsx/download/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0" + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + esutils "^2.0.2" + +babel-helper-evaluate-path@^0.5.0: + version "0.5.0" + resolved "https://registry.npm.taobao.org/babel-helper-evaluate-path/download/babel-helper-evaluate-path-0.5.0.tgz#a62fa9c4e64ff7ea5cea9353174ef023a900a67c" + +babel-helper-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.npm.taobao.org/babel-helper-function-name/download/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + dependencies: + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-get-function-arity@^6.24.1: + version "6.24.1" + resolved "https://registry.npm.taobao.org/babel-helper-get-function-arity/download/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-mark-eval-scopes@^0.4.3: + version "0.4.3" + resolved "https://registry.npm.taobao.org/babel-helper-mark-eval-scopes/download/babel-helper-mark-eval-scopes-0.4.3.tgz#d244a3bef9844872603ffb46e22ce8acdf551562" + +babel-helper-remove-or-void@^0.4.3: + version "0.4.3" + resolved "https://registry.npm.taobao.org/babel-helper-remove-or-void/download/babel-helper-remove-or-void-0.4.3.tgz#a4f03b40077a0ffe88e45d07010dee241ff5ae60" + +babel-helpers@^6.24.1, babel-helpers@^6.8.0: + version "6.24.1" + resolved "https://registry.npm.taobao.org/babel-helpers/download/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-macros@^1.1.1: + version "1.2.0" + resolved "https://registry.npm.taobao.org/babel-macros/download/babel-macros-1.2.0.tgz#39e47ed6d286d4a98f1948d8bab45dac17e4e2d4" + dependencies: + cosmiconfig "3.1.0" + +babel-messages@^6.23.0, babel-messages@^6.8.0: + version "6.23.0" + resolved "https://registry.npm.taobao.org/babel-messages/download/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-danger-remove-unused-import@^1.1.1: + version "1.1.2" + resolved "https://registry.npm.taobao.org/babel-plugin-danger-remove-unused-import/download/babel-plugin-danger-remove-unused-import-1.1.2.tgz#ac39c30edfe524ef8cfc411fec5edc479d19e132" + +babel-plugin-macros@^2.0.0: + version "2.8.0" + resolved "https://registry.npm.taobao.org/babel-plugin-macros/download/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" + dependencies: + "@babel/runtime" "^7.7.2" + cosmiconfig "^6.0.0" + resolve "^1.12.0" + +babel-plugin-minify-dead-code@^1.3.2: + version "1.3.2" + resolved "https://registry.npm.taobao.org/babel-plugin-minify-dead-code/download/babel-plugin-minify-dead-code-1.3.2.tgz#7cd45c95c52700f00680a37377e00accad45b188" + dependencies: + babel-core "6.10.4" + +babel-plugin-preval@1.6.2: + version "1.6.2" + resolved "https://registry.npm.taobao.org/babel-plugin-preval/download/babel-plugin-preval-1.6.2.tgz?cache=0&sync_timestamp=1584932700579&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-plugin-preval%2Fdownload%2Fbabel-plugin-preval-1.6.2.tgz#8f580a1d4579d5fc79f1cfaee6f9fe0996fdeb1f" + dependencies: + babel-macros "^1.1.1" + babel-register "^6.26.0" + babylon "^6.18.0" + require-from-string "^2.0.1" + +babel-plugin-preval@1.6.4: + version "1.6.4" + resolved "https://registry.npm.taobao.org/babel-plugin-preval/download/babel-plugin-preval-1.6.4.tgz?cache=0&sync_timestamp=1584932700579&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-plugin-preval%2Fdownload%2Fbabel-plugin-preval-1.6.4.tgz#96febe8172b3ca6c3d03ed96eeb0382ba4b18056" + dependencies: + babel-plugin-macros "^2.0.0" + babel-register "^6.26.0" + babylon "^6.18.0" + require-from-string "^2.0.1" + +babel-plugin-remove-dead-code@^1.3.2: + version "1.3.2" + resolved "https://registry.npm.taobao.org/babel-plugin-remove-dead-code/download/babel-plugin-remove-dead-code-1.3.2.tgz#e1a2cd9595bb2f767291f35cab4ec9b467ee62c6" + dependencies: + babel-core "6.10.4" + +babel-plugin-syntax-class-properties@^6.8.0: + version "6.13.0" + resolved "https://registry.npm.taobao.org/babel-plugin-syntax-class-properties/download/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" + +babel-plugin-syntax-decorators@^6.1.18: + version "6.13.0" + resolved "https://registry.npm.taobao.org/babel-plugin-syntax-decorators/download/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" + +babel-plugin-syntax-do-expressions@^6.8.0: + version "6.13.0" + resolved "https://registry.npm.taobao.org/babel-plugin-syntax-do-expressions/download/babel-plugin-syntax-do-expressions-6.13.0.tgz#5747756139aa26d390d09410b03744ba07e4796d" + +babel-plugin-syntax-dynamic-import@^6.18.0: + version "6.18.0" + resolved "https://registry.npm.taobao.org/babel-plugin-syntax-dynamic-import/download/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" + +babel-plugin-syntax-export-extensions@^6.8.0: + version "6.13.0" + resolved "https://registry.npm.taobao.org/babel-plugin-syntax-export-extensions/download/babel-plugin-syntax-export-extensions-6.13.0.tgz#70a1484f0f9089a4e84ad44bac353c95b9b12721" + +babel-plugin-syntax-flow@^6.18.0: + version "6.18.0" + resolved "https://registry.npm.taobao.org/babel-plugin-syntax-flow/download/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" + +babel-plugin-syntax-jsx@^6.8.0: + version "6.18.0" + resolved "https://registry.npm.taobao.org/babel-plugin-syntax-jsx/download/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" + +babel-plugin-transform-class-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.npm.taobao.org/babel-plugin-transform-class-properties/download/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" + dependencies: + babel-helper-function-name "^6.24.1" + babel-plugin-syntax-class-properties "^6.8.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-decorators-legacy@^1.3.4: + version "1.3.5" + resolved "https://registry.npm.taobao.org/babel-plugin-transform-decorators-legacy/download/babel-plugin-transform-decorators-legacy-1.3.5.tgz#0e492dffa0edd70529072887f8aa86d4dd8b40a1" + dependencies: + babel-plugin-syntax-decorators "^6.1.18" + babel-runtime "^6.2.0" + babel-template "^6.3.0" + +babel-plugin-transform-define@^1.3.0: + version "1.3.2" + resolved "https://registry.npm.taobao.org/babel-plugin-transform-define/download/babel-plugin-transform-define-1.3.2.tgz#4bdbfe35a839fc206e0f60a7a9ae3b82d5e11808" + dependencies: + lodash "^4.17.11" + traverse "0.6.6" + +babel-plugin-transform-do-expressions@^6.22.0: + version "6.22.0" + resolved "https://registry.npm.taobao.org/babel-plugin-transform-do-expressions/download/babel-plugin-transform-do-expressions-6.22.0.tgz#28ccaf92812d949c2cd1281f690c8fdc468ae9bb" + dependencies: + babel-plugin-syntax-do-expressions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-template-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.npm.taobao.org/babel-plugin-transform-es2015-template-literals/download/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-export-extensions@^6.22.0: + version "6.22.0" + resolved "https://registry.npm.taobao.org/babel-plugin-transform-export-extensions/download/babel-plugin-transform-export-extensions-6.22.0.tgz#53738b47e75e8218589eea946cbbd39109bbe653" + dependencies: + babel-plugin-syntax-export-extensions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-flow-strip-types@^6.22.0: + version "6.22.0" + resolved "https://registry.npm.taobao.org/babel-plugin-transform-flow-strip-types/download/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" + dependencies: + babel-plugin-syntax-flow "^6.18.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-react-jsx@^6.24.1: + version "6.24.1" + resolved "https://registry.npm.taobao.org/babel-plugin-transform-react-jsx/download/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3" + dependencies: + babel-helper-builder-react-jsx "^6.24.1" + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-taroapi@1.3.15: + version "1.3.15" + resolved "https://registry.npm.taobao.org/babel-plugin-transform-taroapi/download/babel-plugin-transform-taroapi-1.3.15.tgz?cache=0&sync_timestamp=1588736516727&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-plugin-transform-taroapi%2Fdownload%2Fbabel-plugin-transform-taroapi-1.3.15.tgz#413de3cc47389387bbd36be292d8945d36caf52e" + +babel-register@^6.26.0, babel-register@^6.9.0: + version "6.26.0" + resolved "https://registry.npm.taobao.org/babel-register/download/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + dependencies: + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" + home-or-tmp "^2.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + source-map-support "^0.4.15" + +babel-runtime@^6.2.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0, babel-runtime@^6.6.1, babel-runtime@^6.9.1: + version "6.26.0" + resolved "https://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-template@^6.24.1, babel-template@^6.26.0, babel-template@^6.3.0, babel-template@^6.9.0: + version "6.26.0" + resolved "https://registry.npm.taobao.org/babel-template/download/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + +babel-traverse@^6.10.4, babel-traverse@^6.24.1, babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.npm.taobao.org/babel-traverse/download/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + +babel-types@^6.24.1, babel-types@^6.26.0, babel-types@^6.9.1: + version "6.26.0" + resolved "https://registry.npm.taobao.org/babel-types/download/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babylon@7.0.0-beta.44: + version "7.0.0-beta.44" + resolved "https://registry.npm.taobao.org/babylon/download/babylon-7.0.0-beta.44.tgz#89159e15e6e30c5096e22d738d8c0af8a0e8ca1d" + +babylon@^6.18.0, babylon@^6.7.0: + version "6.18.0" + resolved "https://registry.npm.taobao.org/babylon/download/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + +bail@^1.0.0: + version "1.0.5" + resolved "https://registry.npm.taobao.org/bail/download/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + +base64-js@^1.0.2: + version "1.3.1" + resolved "https://registry.npm.taobao.org/base64-js/download/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.npm.taobao.org/base/download/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + dependencies: + tweetnacl "^0.14.3" + +better-babel-generator@^6.26.1: + version "6.26.1" + resolved "https://registry.npm.taobao.org/better-babel-generator/download/better-babel-generator-6.26.1.tgz#7c26035f32d8d55d06dbc81b410378a6230a515e" + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "2" + lodash "^4.17.4" + source-map "^0.5.7" + trim-right "^1.0.1" + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.npm.taobao.org/big.js/download/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.npm.taobao.org/bindings/download/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + dependencies: + file-uri-to-path "1.0.0" + +bl@^1.0.0: + version "1.2.2" + resolved "https://registry.npm.taobao.org/bl/download/bl-1.2.2.tgz?cache=0&sync_timestamp=1584503211561&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbl%2Fdownload%2Fbl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" + dependencies: + readable-stream "^2.3.5" + safe-buffer "^5.1.1" + +boxen@^1.2.1: + version "1.3.0" + resolved "https://registry.npm.taobao.org/boxen/download/boxen-1.3.0.tgz?cache=0&sync_timestamp=1575618207409&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fboxen%2Fdownload%2Fboxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" + dependencies: + ansi-align "^2.0.0" + camelcase "^4.0.0" + chalk "^2.0.1" + cli-boxes "^1.0.0" + string-width "^2.0.0" + term-size "^1.2.0" + widest-line "^2.0.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^1.8.2: + version "1.8.5" + resolved "https://registry.npm.taobao.org/braces/download/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +browserslist@^3.2.8: + version "3.2.8" + resolved "https://registry.npm.taobao.org/browserslist/download/browserslist-3.2.8.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrowserslist%2Fdownload%2Fbrowserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" + dependencies: + caniuse-lite "^1.0.30000844" + electron-to-chromium "^1.3.47" + +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/buffer-alloc-unsafe/download/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + +buffer-alloc@^1.2.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/buffer-alloc/download/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.npm.taobao.org/buffer-crc32/download/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + +buffer-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/buffer-equal/download/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe" + +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/buffer-fill/download/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + +buffer@^5.2.1: + version "5.6.0" + resolved "https://registry.npm.taobao.org/buffer/download/buffer-5.6.0.tgz?cache=0&sync_timestamp=1588706716358&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbuffer%2Fdownload%2Fbuffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + +builtin-modules@^3.0.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/builtin-modules/download/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/cache-base/download/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +cacheable-request@^2.1.1: + version "2.1.4" + resolved "https://registry.npm.taobao.org/cacheable-request/download/cacheable-request-2.1.4.tgz#0d808801b6342ad33c91df9d0b44dc09b91e5c3d" + dependencies: + clone-response "1.0.2" + get-stream "3.0.0" + http-cache-semantics "3.8.1" + keyv "3.0.0" + lowercase-keys "1.0.0" + normalize-url "2.0.1" + responselike "1.0.2" + +call-me-maybe@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/call-me-maybe/download/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/caller-callsite/download/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/caller-path/download/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + dependencies: + caller-callsite "^2.0.0" + +callsite-record@^3.0.0: + version "3.2.2" + resolved "https://registry.npm.taobao.org/callsite-record/download/callsite-record-3.2.2.tgz#9a0390642e43fe8bb823945e51464f69f41643de" + dependencies: + callsite "^1.0.0" + chalk "^1.1.1" + error-stack-parser "^1.3.3" + highlight-es "^1.0.0" + lodash "4.6.1 || ^4.16.1" + pinkie-promise "^2.0.0" + +callsite@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/callsite/download/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/callsites/download/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/callsites/download/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/camelcase-keys/download/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase-keys@^4.0.0: + version "4.2.0" + resolved "https://registry.npm.taobao.org/camelcase-keys/download/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" + dependencies: + camelcase "^4.1.0" + map-obj "^2.0.0" + quick-lru "^1.0.0" + +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.npm.taobao.org/camelcase/download/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + +camelcase@^4.0.0, camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.npm.taobao.org/camelcase/download/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + +camelize@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/camelize/download/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" + +caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000864: + version "1.0.30001054" + resolved "https://registry.npm.taobao.org/caniuse-lite/download/caniuse-lite-1.0.30001054.tgz#7e82fc42d927980b0ce1426c4813df12381e1a75" + +capture-stack-trace@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/capture-stack-trace/download/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + +caw@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/caw/download/caw-2.0.1.tgz#6c3ca071fc194720883c2dc5da9b074bfc7e9e95" + dependencies: + get-proxy "^2.0.0" + isurl "^1.0.0-alpha5" + tunnel-agent "^0.6.0" + url-to-options "^1.0.1" + +ccount@^1.0.0: + version "1.0.5" + resolved "https://registry.npm.taobao.org/ccount/download/ccount-1.0.5.tgz?cache=0&sync_timestamp=1580050511018&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fccount%2Fdownload%2Fccount-1.0.5.tgz#ac82a944905a65ce204eb03023157edf29425c17" + +chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.1, chalk@^2.4.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/chalk/download/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +character-entities-html4@^1.0.0: + version "1.1.4" + resolved "https://registry.npm.taobao.org/character-entities-html4/download/character-entities-html4-1.1.4.tgz#0e64b0a3753ddbf1fdc044c5fd01d0199a02e125" + +character-entities-legacy@^1.0.0: + version "1.1.4" + resolved "https://registry.npm.taobao.org/character-entities-legacy/download/character-entities-legacy-1.1.4.tgz?cache=0&sync_timestamp=1579857893239&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcharacter-entities-legacy%2Fdownload%2Fcharacter-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" + +character-entities@^1.0.0: + version "1.2.4" + resolved "https://registry.npm.taobao.org/character-entities/download/character-entities-1.2.4.tgz?cache=0&sync_timestamp=1579860906831&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcharacter-entities%2Fdownload%2Fcharacter-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" + +character-reference-invalid@^1.0.0: + version "1.1.4" + resolved "https://registry.npm.taobao.org/character-reference-invalid/download/character-reference-invalid-1.1.4.tgz?cache=0&sync_timestamp=1579857891731&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcharacter-reference-invalid%2Fdownload%2Fcharacter-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" + +chardet@^0.4.0: + version "0.4.2" + resolved "https://registry.npm.taobao.org/chardet/download/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.npm.taobao.org/chardet/download/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + +chokidar@^2.0.3: + version "2.1.8" + resolved "https://registry.npm.taobao.org/chokidar/download/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +ci-info@^1.5.0: + version "1.6.0" + resolved "https://registry.npm.taobao.org/ci-info/download/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + +circular-json@^0.3.1: + version "0.3.3" + resolved "https://registry.npm.taobao.org/circular-json/download/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.npm.taobao.org/class-utils/download/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +cli-boxes@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/cli-boxes/download/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" + +cli-cursor@^1.0.1, cli-cursor@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" + dependencies: + restore-cursor "^1.0.1" + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + dependencies: + restore-cursor "^2.0.0" + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^0.1.2: + version "0.1.2" + resolved "https://registry.npm.taobao.org/cli-spinners/download/cli-spinners-0.1.2.tgz?cache=0&sync_timestamp=1586157490774&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcli-spinners%2Fdownload%2Fcli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" + +cli-spinners@^1.1.0: + version "1.3.1" + resolved "https://registry.npm.taobao.org/cli-spinners/download/cli-spinners-1.3.1.tgz?cache=0&sync_timestamp=1586157490774&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcli-spinners%2Fdownload%2Fcli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a" + +cli-width@^2.0.0: + version "2.2.1" + resolved "https://registry.npm.taobao.org/cli-width/download/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/cliui/download/cliui-5.0.0.tgz?cache=0&sync_timestamp=1573943292170&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +clone-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/clone-buffer/download/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" + +clone-regexp@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/clone-regexp/download/clone-regexp-1.0.1.tgz#051805cd33173375d82118fc0918606da39fd60f" + dependencies: + is-regexp "^1.0.0" + is-supported-regexp-flag "^1.0.0" + +clone-response@1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/clone-response/download/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + dependencies: + mimic-response "^1.0.0" + +clone-stats@^0.0.1: + version "0.0.1" + resolved "https://registry.npm.taobao.org/clone-stats/download/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" + +clone-stats@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/clone-stats/download/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" + +clone@^1.0.0, clone@^1.0.2: + version "1.0.4" + resolved "https://registry.npm.taobao.org/clone/download/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + +clone@^2.1.1: + version "2.1.2" + resolved "https://registry.npm.taobao.org/clone/download/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + +cloneable-readable@^1.0.0: + version "1.1.3" + resolved "https://registry.npm.taobao.org/cloneable-readable/download/cloneable-readable-1.1.3.tgz#120a00cb053bfb63a222e709f9683ea2e11d8cec" + dependencies: + inherits "^2.0.1" + process-nextick-args "^2.0.0" + readable-stream "^2.3.5" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.npm.taobao.org/co/download/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + +collapse-white-space@^1.0.2: + version "1.0.6" + resolved "https://registry.npm.taobao.org/collapse-white-space/download/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/collection-visit/download/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz?cache=0&sync_timestamp=1566248870121&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolor-convert%2Fdownload%2Fcolor-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz?cache=0&sync_timestamp=1566248870121&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolor-convert%2Fdownload%2Fcolor-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + dependencies: + delayed-stream "~1.0.0" + +commander@~2.8.1: + version "2.8.1" + resolved "https://registry.npm.taobao.org/commander/download/commander-2.8.1.tgz?cache=0&sync_timestamp=1587781810870&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" + dependencies: + graceful-readlink ">= 1.0.0" + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/commondir/download/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +concat-stream@^1.4.7: + version "1.6.2" + resolved "https://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +config-chain@^1.1.11: + version "1.1.12" + resolved "https://registry.npm.taobao.org/config-chain/download/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + +configstore@^3.0.0: + version "3.1.2" + resolved "https://registry.npm.taobao.org/configstore/download/configstore-3.1.2.tgz?cache=0&sync_timestamp=1581616252924&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconfigstore%2Fdownload%2Fconfigstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" + dependencies: + dot-prop "^4.1.0" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + unique-string "^1.0.0" + write-file-atomic "^2.0.0" + xdg-basedir "^3.0.0" + +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.npm.taobao.org/contains-path/download/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + +content-disposition@^0.5.2: + version "0.5.3" + resolved "https://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + dependencies: + safe-buffer "5.1.2" + +convert-source-map@^1.1.0, convert-source-map@^1.5.0, convert-source-map@^1.5.1: + version "1.7.0" + resolved "https://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.7.0.tgz?cache=0&sync_timestamp=1573003637425&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconvert-source-map%2Fdownload%2Fconvert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + dependencies: + safe-buffer "~5.1.1" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.npm.taobao.org/copy-descriptor/download/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + +core-js-pure@^3.0.0: + version "3.6.5" + resolved "https://registry.npm.taobao.org/core-js-pure/download/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813" + +core-js@^2.4.0, core-js@^2.4.1, core-js@^2.5.0: + version "2.6.11" + resolved "https://registry.npm.taobao.org/core-js/download/core-js-2.6.11.tgz?cache=0&sync_timestamp=1586450269267&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +cosmiconfig@3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-3.1.0.tgz?cache=0&sync_timestamp=1572710682964&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcosmiconfig%2Fdownload%2Fcosmiconfig-3.1.0.tgz#640a94bf9847f321800403cd273af60665c73397" + dependencies: + is-directory "^0.3.1" + js-yaml "^3.9.0" + parse-json "^3.0.0" + require-from-string "^2.0.1" + +cosmiconfig@^5.0.0: + version "5.2.1" + resolved "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-5.2.1.tgz?cache=0&sync_timestamp=1572710682964&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcosmiconfig%2Fdownload%2Fcosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-6.0.0.tgz?cache=0&sync_timestamp=1572710682964&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcosmiconfig%2Fdownload%2Fcosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" + +create-error-class@^3.0.0: + version "3.0.2" + resolved "https://registry.npm.taobao.org/create-error-class/download/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" + dependencies: + capture-stack-trace "^1.0.0" + +cross-spawn-async@^2.1.1: + version "2.2.5" + resolved "https://registry.npm.taobao.org/cross-spawn-async/download/cross-spawn-async-2.2.5.tgz#845ff0c0834a3ded9d160daca6d390906bb288cc" + dependencies: + lru-cache "^4.0.0" + which "^1.2.8" + +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +crypto-random-string@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/crypto-random-string/download/crypto-random-string-1.0.0.tgz?cache=0&sync_timestamp=1583560482221&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcrypto-random-string%2Fdownload%2Fcrypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" + +css-color-keywords@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/css-color-keywords/download/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" + +css-mediaquery@^0.1.2: + version "0.1.2" + resolved "https://registry.npm.taobao.org/css-mediaquery/download/css-mediaquery-0.1.2.tgz#6a2c37344928618631c54bd33cedd301da18bea0" + +css-selector-tokenizer@^0.7.0: + version "0.7.2" + resolved "https://registry.npm.taobao.org/css-selector-tokenizer/download/css-selector-tokenizer-0.7.2.tgz?cache=0&sync_timestamp=1583233392235&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-selector-tokenizer%2Fdownload%2Fcss-selector-tokenizer-0.7.2.tgz#11e5e27c9a48d90284f22d45061c303d7a25ad87" + dependencies: + cssesc "^3.0.0" + fastparse "^1.1.2" + regexpu-core "^4.6.0" + +css-to-react-native-transform@^1.4.0: + version "1.9.0" + resolved "https://registry.npm.taobao.org/css-to-react-native-transform/download/css-to-react-native-transform-1.9.0.tgz#63369f479048ab7662f5320f8010840ad91344e7" + dependencies: + css "^2.2.4" + css-mediaquery "^0.1.2" + css-to-react-native "^2.3.0" + +css-to-react-native@^2.3.0: + version "2.3.2" + resolved "https://registry.npm.taobao.org/css-to-react-native/download/css-to-react-native-2.3.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-to-react-native%2Fdownload%2Fcss-to-react-native-2.3.2.tgz#e75e2f8f7aa385b4c3611c52b074b70a002f2e7d" + dependencies: + camelize "^1.0.0" + css-color-keywords "^1.0.0" + postcss-value-parser "^3.3.0" + +css-what@^3.2.0: + version "3.2.1" + resolved "https://registry.npm.taobao.org/css-what/download/css-what-3.2.1.tgz#f4a8f12421064621b456755e34a03a2c22df5da1" + +css@^2.2.4: + version "2.2.4" + resolved "https://registry.npm.taobao.org/css/download/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" + dependencies: + inherits "^2.0.3" + source-map "^0.6.1" + source-map-resolve "^0.5.2" + urix "^0.1.0" + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/cssesc/download/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + +cuint@^0.2.2: + version "0.2.2" + resolved "https://registry.npm.taobao.org/cuint/download/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b" + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.npm.taobao.org/currently-unhandled/download/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + dependencies: + array-find-index "^1.0.1" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + dependencies: + assert-plus "^1.0.0" + +de-indent@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/de-indent/download/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" + +debug@^2.1.1, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + dependencies: + ms "2.0.0" + +debug@^3.0.0, debug@^3.1.0: + version "3.2.6" + resolved "https://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + dependencies: + ms "^2.1.1" + +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + dependencies: + ms "^2.1.1" + +decamelize-keys@^1.0.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/decamelize-keys/download/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.npm.taobao.org/decompress-response/download/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + dependencies: + mimic-response "^1.0.0" + +decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1: + version "4.1.1" + resolved "https://registry.npm.taobao.org/decompress-tar/download/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1" + dependencies: + file-type "^5.2.0" + is-stream "^1.1.0" + tar-stream "^1.5.2" + +decompress-tarbz2@^4.0.0: + version "4.1.1" + resolved "https://registry.npm.taobao.org/decompress-tarbz2/download/decompress-tarbz2-4.1.1.tgz#3082a5b880ea4043816349f378b56c516be1a39b" + dependencies: + decompress-tar "^4.1.0" + file-type "^6.1.0" + is-stream "^1.1.0" + seek-bzip "^1.0.5" + unbzip2-stream "^1.0.9" + +decompress-targz@^4.0.0: + version "4.1.1" + resolved "https://registry.npm.taobao.org/decompress-targz/download/decompress-targz-4.1.1.tgz#c09bc35c4d11f3de09f2d2da53e9de23e7ce1eee" + dependencies: + decompress-tar "^4.1.1" + file-type "^5.2.0" + is-stream "^1.1.0" + +decompress-unzip@^4.0.1: + version "4.0.1" + resolved "https://registry.npm.taobao.org/decompress-unzip/download/decompress-unzip-4.0.1.tgz#deaaccdfd14aeaf85578f733ae8210f9b4848f69" + dependencies: + file-type "^3.8.0" + get-stream "^2.2.0" + pify "^2.3.0" + yauzl "^2.4.2" + +decompress@^4.2.0: + version "4.2.1" + resolved "https://registry.npm.taobao.org/decompress/download/decompress-4.2.1.tgz#007f55cc6a62c055afa37c07eb6a4ee1b773f118" + dependencies: + decompress-tar "^4.0.0" + decompress-tarbz2 "^4.0.0" + decompress-targz "^4.0.0" + decompress-unzip "^4.0.1" + graceful-fs "^4.1.10" + make-dir "^1.0.0" + pify "^2.3.0" + strip-dirs "^2.0.0" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.npm.taobao.org/deep-extend/download/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.npm.taobao.org/defaults/download/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + dependencies: + clone "^1.0.2" + +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.npm.taobao.org/define-properties/download/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.npm.taobao.org/define-property/download/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +depcheck@0.8.3: + version "0.8.3" + resolved "https://registry.npm.taobao.org/depcheck/download/depcheck-0.8.3.tgz#430aad19016820cfe7b0766ee561817fcdea5835" + dependencies: + "@babel/parser" "^7.3.1" + "@babel/traverse" "^7.2.3" + builtin-modules "^3.0.0" + deprecate "^1.0.0" + deps-regex "^0.1.4" + js-yaml "^3.4.2" + lodash "^4.17.11" + minimatch "^3.0.2" + node-sass-tilde-importer "^1.0.2" + please-upgrade-node "^3.1.1" + require-package-name "^2.0.1" + resolve "^1.10.0" + vue-template-compiler "^2.6.10" + walkdir "^0.3.2" + yargs "^13.2.2" + +deprecate@^1.0.0: + version "1.1.1" + resolved "https://registry.npm.taobao.org/deprecate/download/deprecate-1.1.1.tgz#4632e981fc815eeaf00be945a40359c0f8bf9913" + +deps-regex@^0.1.4: + version "0.1.4" + resolved "https://registry.npm.taobao.org/deps-regex/download/deps-regex-0.1.4.tgz#518667b7691460a5e7e0a341be76eb7ce8090184" + +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/detect-indent/download/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + dependencies: + repeating "^2.0.0" + +dir-glob@2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/dir-glob/download/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" + dependencies: + arrify "^1.0.1" + path-type "^3.0.0" + +dir-glob@^2.0.0: + version "2.2.2" + resolved "https://registry.npm.taobao.org/dir-glob/download/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" + dependencies: + path-type "^3.0.0" + +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.npm.taobao.org/doctrine/download/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/doctrine/download/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/doctrine/download/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + dependencies: + esutils "^2.0.2" + +dom-serializer@0: + version "0.2.2" + resolved "https://registry.npm.taobao.org/dom-serializer/download/dom-serializer-0.2.2.tgz?cache=0&sync_timestamp=1573447907918&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdom-serializer%2Fdownload%2Fdom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +domelementtype@1, domelementtype@^1.3.1: + version "1.3.1" + resolved "https://registry.npm.taobao.org/domelementtype/download/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + +domelementtype@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/domelementtype/download/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" + +domhandler@^2.3.0: + version "2.4.2" + resolved "https://registry.npm.taobao.org/domhandler/download/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + dependencies: + domelementtype "1" + +domutils@^1.5.1: + version "1.7.0" + resolved "https://registry.npm.taobao.org/domutils/download/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + dependencies: + dom-serializer "0" + domelementtype "1" + +dot-prop@^4.1.0: + version "4.2.0" + resolved "https://registry.npm.taobao.org/dot-prop/download/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" + dependencies: + is-obj "^1.0.0" + +dot-prop@^5.2.0: + version "5.2.0" + resolved "https://registry.npm.taobao.org/dot-prop/download/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb" + dependencies: + is-obj "^2.0.0" + +download-git-repo@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/download-git-repo/download/download-git-repo-2.0.0.tgz#0af3fe7c92de7d21827522969beeae0d06525a55" + dependencies: + download "^7.1.0" + git-clone "^0.1.0" + rimraf "^2.6.3" + +download@^7.1.0: + version "7.1.0" + resolved "https://registry.npm.taobao.org/download/download/download-7.1.0.tgz?cache=0&sync_timestamp=1585804309684&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdownload%2Fdownload%2Fdownload-7.1.0.tgz#9059aa9d70b503ee76a132897be6dec8e5587233" + dependencies: + archive-type "^4.0.0" + caw "^2.0.1" + content-disposition "^0.5.2" + decompress "^4.2.0" + ext-name "^5.0.0" + file-type "^8.1.0" + filenamify "^2.0.0" + get-stream "^3.0.0" + got "^8.3.1" + make-dir "^1.2.0" + p-event "^2.1.0" + pify "^3.0.0" + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.npm.taobao.org/duplexer3/download/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + +duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.npm.taobao.org/duplexify/download/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ejs@^2.5.9, ejs@^2.6.1: + version "2.7.4" + resolved "https://registry.npm.taobao.org/ejs/download/ejs-2.7.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fejs%2Fdownload%2Fejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" + +electron-to-chromium@^1.3.47: + version "1.3.431" + resolved "https://registry.npm.taobao.org/electron-to-chromium/download/electron-to-chromium-1.3.431.tgz#705dd8ef46200415ba837b31d927cdc1e43db303" + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz?cache=0&sync_timestamp=1586511397703&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Femoji-regex%2Fdownload%2Femoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-8.0.0.tgz?cache=0&sync_timestamp=1586511397703&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Femoji-regex%2Fdownload%2Femoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/emojis-list/download/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + +encoding@^0.1.11: + version "0.1.12" + resolved "https://registry.npm.taobao.org/encoding/download/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + dependencies: + iconv-lite "~0.4.13" + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.4.tgz?cache=0&sync_timestamp=1569416367473&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fend-of-stream%2Fdownload%2Fend-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + dependencies: + once "^1.4.0" + +entities@^1.1.1: + version "1.1.2" + resolved "https://registry.npm.taobao.org/entities/download/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + +entities@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/entities/download/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" + +envinfo@^6.0.1: + version "6.0.1" + resolved "https://registry.npm.taobao.org/envinfo/download/envinfo-6.0.1.tgz#dec51f2dd38fb4a1fb5bf568488c06ad1e7e08a7" + +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.npm.taobao.org/error-ex/download/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + dependencies: + is-arrayish "^0.2.1" + +error-stack-parser@^1.3.3: + version "1.3.6" + resolved "https://registry.npm.taobao.org/error-stack-parser/download/error-stack-parser-1.3.6.tgz?cache=0&sync_timestamp=1578288503034&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ferror-stack-parser%2Fdownload%2Ferror-stack-parser-1.3.6.tgz#e0e73b93e417138d1cd7c0b746b1a4a14854c292" + dependencies: + stackframe "^0.3.1" + +es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: + version "1.17.5" + resolved "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9" + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.1.5" + is-regex "^1.0.5" + object-inspect "^1.7.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimleft "^2.1.1" + string.prototype.trimright "^2.1.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.npm.taobao.org/es-to-primitive/download/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +eslint-import-resolver-node@^0.3.2: + version "0.3.3" + resolved "https://registry.npm.taobao.org/eslint-import-resolver-node/download/eslint-import-resolver-node-0.3.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-import-resolver-node%2Fdownload%2Feslint-import-resolver-node-0.3.3.tgz#dbaa52b6b2816b50bc6711af75422de808e98404" + dependencies: + debug "^2.6.9" + resolve "^1.13.1" + +eslint-module-utils@^2.4.1: + version "2.6.0" + resolved "https://registry.npm.taobao.org/eslint-module-utils/download/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" + dependencies: + debug "^2.6.9" + pkg-dir "^2.0.0" + +eslint-plugin-import@^2.8.0: + version "2.20.2" + resolved "https://registry.npm.taobao.org/eslint-plugin-import/download/eslint-plugin-import-2.20.2.tgz?cache=0&sync_timestamp=1585455648129&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-import%2Fdownload%2Feslint-plugin-import-2.20.2.tgz#91fc3807ce08be4837141272c8b99073906e588d" + dependencies: + array-includes "^3.0.3" + array.prototype.flat "^1.2.1" + contains-path "^0.1.0" + debug "^2.6.9" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.2" + eslint-module-utils "^2.4.1" + has "^1.0.3" + minimatch "^3.0.4" + object.values "^1.1.0" + read-pkg-up "^2.0.0" + resolve "^1.12.0" + +eslint-plugin-react-hooks@^1.6.1: + version "1.7.0" + resolved "https://registry.npm.taobao.org/eslint-plugin-react-hooks/download/eslint-plugin-react-hooks-1.7.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-react-hooks%2Fdownload%2Feslint-plugin-react-hooks-1.7.0.tgz#6210b6d5a37205f0b92858f895a4e827020a7d04" + +eslint-plugin-react@7.10.0: + version "7.10.0" + resolved "https://registry.npm.taobao.org/eslint-plugin-react/download/eslint-plugin-react-7.10.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-react%2Fdownload%2Feslint-plugin-react-7.10.0.tgz#af5c1fef31c4704db02098f9be18202993828b50" + dependencies: + doctrine "^2.1.0" + has "^1.0.3" + jsx-ast-utils "^2.0.1" + prop-types "^15.6.2" + +eslint-plugin-react@^7.4.0: + version "7.19.0" + resolved "https://registry.npm.taobao.org/eslint-plugin-react/download/eslint-plugin-react-7.19.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-react%2Fdownload%2Feslint-plugin-react-7.19.0.tgz#6d08f9673628aa69c5559d33489e855d83551666" + dependencies: + array-includes "^3.1.1" + doctrine "^2.1.0" + has "^1.0.3" + jsx-ast-utils "^2.2.3" + object.entries "^1.1.1" + object.fromentries "^2.0.2" + object.values "^1.1.1" + prop-types "^15.7.2" + resolve "^1.15.1" + semver "^6.3.0" + string.prototype.matchall "^4.0.2" + xregexp "^4.3.0" + +eslint-plugin-taro@^2.2.3: + version "2.2.3" + resolved "https://registry.npm.taobao.org/eslint-plugin-taro/download/eslint-plugin-taro-2.2.3.tgz?cache=0&sync_timestamp=1588736462224&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-taro%2Fdownload%2Feslint-plugin-taro-2.2.3.tgz#a6bb520285cd6cf89e975f7b46d8f1ef5c0a3361" + dependencies: + has "^1.0.1" + +eslint-scope@3.7.1: + version "3.7.1" + resolved "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-3.7.1.tgz?cache=0&sync_timestamp=1563679289211&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-4.0.3.tgz?cache=0&sync_timestamp=1563679289211&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-5.0.0.tgz?cache=0&sync_timestamp=1563679289211&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-utils@^1.3.1, eslint-utils@^1.4.3: + version "1.4.3" + resolved "https://registry.npm.taobao.org/eslint-utils/download/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/eslint-utils/download/eslint-utils-2.0.0.tgz#7be1cc70f27a72a76cd14aa698bcabed6890e1cd" + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/eslint-visitor-keys/download/eslint-visitor-keys-1.1.0.tgz?cache=0&sync_timestamp=1565705511122&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-visitor-keys%2Fdownload%2Feslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" + +eslint@5.16.0: + version "5.16.0" + resolved "https://registry.npm.taobao.org/eslint/download/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.9.1" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^3.0.0" + eslint-scope "^4.0.3" + eslint-utils "^1.3.1" + eslint-visitor-keys "^1.0.0" + espree "^5.0.1" + esquery "^1.0.1" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob "^7.1.2" + globals "^11.7.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + inquirer "^6.2.2" + js-yaml "^3.13.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.11" + minimatch "^3.0.4" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.2" + progress "^2.0.0" + regexpp "^2.0.1" + semver "^5.5.1" + strip-ansi "^4.0.0" + strip-json-comments "^2.0.1" + table "^5.2.3" + text-table "^0.2.0" + +eslint@^6.1.0: + version "6.8.0" + resolved "https://registry.npm.taobao.org/eslint/download/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.10.0" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^3.0.0" + eslint-scope "^5.0.0" + eslint-utils "^1.4.3" + eslint-visitor-keys "^1.1.0" + espree "^6.1.2" + esquery "^1.0.1" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + inquirer "^7.0.0" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.14" + minimatch "^3.0.4" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.3" + progress "^2.0.0" + regexpp "^2.0.1" + semver "^6.1.2" + strip-ansi "^5.2.0" + strip-json-comments "^3.0.1" + table "^5.2.3" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^5.0.1: + version "5.0.1" + resolved "https://registry.npm.taobao.org/espree/download/espree-5.0.1.tgz?cache=0&sync_timestamp=1588885178439&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fespree%2Fdownload%2Fespree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" + dependencies: + acorn "^6.0.7" + acorn-jsx "^5.0.0" + eslint-visitor-keys "^1.0.0" + +espree@^6.1.2: + version "6.2.1" + resolved "https://registry.npm.taobao.org/espree/download/espree-6.2.1.tgz?cache=0&sync_timestamp=1588885178439&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fespree%2Fdownload%2Fespree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" + dependencies: + acorn "^7.1.1" + acorn-jsx "^5.2.0" + eslint-visitor-keys "^1.1.0" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + +esquery@^1.0.1: + version "1.3.1" + resolved "https://registry.npm.taobao.org/esquery/download/esquery-1.3.1.tgz?cache=0&sync_timestamp=1587061286348&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fesquery%2Fdownload%2Fesquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.npm.taobao.org/esrecurse/download/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + dependencies: + estraverse "^4.1.0" + +estraverse@^4.1.0, estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz?cache=0&sync_timestamp=1586968505635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + +estraverse@^5.1.0: + version "5.1.0" + resolved "https://registry.npm.taobao.org/estraverse/download/estraverse-5.1.0.tgz?cache=0&sync_timestamp=1586968505635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642" + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npm.taobao.org/esutils/download/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + +execa@^0.2.2: + version "0.2.2" + resolved "https://registry.npm.taobao.org/execa/download/execa-0.2.2.tgz?cache=0&sync_timestamp=1576749091315&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-0.2.2.tgz#e2ead472c2c31aad6f73f1ac956eef45e12320cb" + dependencies: + cross-spawn-async "^2.1.1" + npm-run-path "^1.0.0" + object-assign "^4.0.1" + path-key "^1.0.0" + strip-eof "^1.0.0" + +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.npm.taobao.org/execa/download/execa-0.7.0.tgz?cache=0&sync_timestamp=1576749091315&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execall@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/execall/download/execall-1.0.0.tgz#73d0904e395b3cab0658b08d09ec25307f29bb73" + dependencies: + clone-regexp "^1.0.0" + +exit-hook@^1.0.0: + version "1.1.1" + resolved "https://registry.npm.taobao.org/exit-hook/download/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" + +expand-brackets@^0.1.4: + version "0.1.5" + resolved "https://registry.npm.taobao.org/expand-brackets/download/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + dependencies: + is-posix-bracket "^0.1.0" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.npm.taobao.org/expand-range/download/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + dependencies: + fill-range "^2.1.0" + +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.npm.taobao.org/expand-tilde/download/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + dependencies: + homedir-polyfill "^1.0.1" + +ext-list@^2.0.0: + version "2.2.2" + resolved "https://registry.npm.taobao.org/ext-list/download/ext-list-2.2.2.tgz#0b98e64ed82f5acf0f2931babf69212ef52ddd37" + dependencies: + mime-db "^1.28.0" + +ext-name@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/ext-name/download/ext-name-5.0.0.tgz#70781981d183ee15d13993c8822045c506c8f0a6" + dependencies: + ext-list "^2.0.0" + sort-keys-length "^1.0.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@^3.0.0, extend@~3.0.2: + version "3.0.2" + resolved "https://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + +external-editor@^2.1.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/external-editor/download/external-editor-2.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexternal-editor%2Fdownload%2Fexternal-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" + dependencies: + chardet "^0.4.0" + iconv-lite "^0.4.17" + tmp "^0.0.33" + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.npm.taobao.org/external-editor/download/external-editor-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexternal-editor%2Fdownload%2Fexternal-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.npm.taobao.org/extglob/download/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + dependencies: + is-extglob "^1.0.0" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.npm.taobao.org/extsprintf/download/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + +fast-deep-equal@^3.1.1: + version "3.1.1" + resolved "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" + +fast-glob@^2.0.2: + version "2.2.7" + resolved "https://registry.npm.taobao.org/fast-glob/download/fast-glob-2.2.7.tgz?cache=0&sync_timestamp=1582318661510&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-glob%2Fdownload%2Ffast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" + dependencies: + "@mrmlnc/readdir-enhanced" "^2.2.1" + "@nodelib/fs.stat" "^1.1.2" + glob-parent "^3.1.0" + is-glob "^4.0.0" + merge2 "^1.2.3" + micromatch "^3.1.10" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + 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#874bf69c6f404c2b5d99c481341399fd55892633" + +fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + +fastparse@^1.1.2: + version "1.1.2" + resolved "https://registry.npm.taobao.org/fastparse/download/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" + +fbjs-css-vars@^1.0.0: + version "1.0.2" + resolved "https://registry.npm.taobao.org/fbjs-css-vars/download/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" + +fbjs@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/fbjs/download/fbjs-1.0.0.tgz#52c215e0883a3c86af2a7a776ed51525ae8e0a5a" + dependencies: + core-js "^2.4.1" + fbjs-css-vars "^1.0.0" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.18" + +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/fd-slicer/download/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + dependencies: + pend "~1.2.0" + +figures@^1.3.5: + version "1.7.0" + resolved "https://registry.npm.taobao.org/figures/download/figures-1.7.0.tgz?cache=0&sync_timestamp=1581865349068&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffigures%2Fdownload%2Ffigures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + dependencies: + escape-string-regexp "^1.0.5" + object-assign "^4.1.0" + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/figures/download/figures-2.0.0.tgz?cache=0&sync_timestamp=1581865349068&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffigures%2Fdownload%2Ffigures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + dependencies: + escape-string-regexp "^1.0.5" + +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.npm.taobao.org/figures/download/figures-3.2.0.tgz?cache=0&sync_timestamp=1581865349068&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffigures%2Fdownload%2Ffigures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/file-entry-cache/download/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" + dependencies: + flat-cache "^1.2.1" + object-assign "^4.0.1" + +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.npm.taobao.org/file-entry-cache/download/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + dependencies: + flat-cache "^2.0.1" + +file-type@^3.8.0: + version "3.9.0" + resolved "https://registry.npm.taobao.org/file-type/download/file-type-3.9.0.tgz?cache=0&sync_timestamp=1588614681835&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-type%2Fdownload%2Ffile-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" + +file-type@^4.2.0: + version "4.4.0" + resolved "https://registry.npm.taobao.org/file-type/download/file-type-4.4.0.tgz?cache=0&sync_timestamp=1588614681835&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-type%2Fdownload%2Ffile-type-4.4.0.tgz#1b600e5fca1fbdc6e80c0a70c71c8dba5f7906c5" + +file-type@^5.2.0: + version "5.2.0" + resolved "https://registry.npm.taobao.org/file-type/download/file-type-5.2.0.tgz?cache=0&sync_timestamp=1588614681835&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-type%2Fdownload%2Ffile-type-5.2.0.tgz#2ddbea7c73ffe36368dfae49dc338c058c2b8ad6" + +file-type@^6.1.0: + version "6.2.0" + resolved "https://registry.npm.taobao.org/file-type/download/file-type-6.2.0.tgz?cache=0&sync_timestamp=1588614681835&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-type%2Fdownload%2Ffile-type-6.2.0.tgz#e50cd75d356ffed4e306dc4f5bcf52a79903a919" + +file-type@^8.1.0: + version "8.1.0" + resolved "https://registry.npm.taobao.org/file-type/download/file-type-8.1.0.tgz?cache=0&sync_timestamp=1588614681835&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-type%2Fdownload%2Ffile-type-8.1.0.tgz#244f3b7ef641bbe0cca196c7276e4b332399f68c" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/file-uri-to-path/download/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + +filename-regex@^2.0.0: + version "2.0.1" + resolved "https://registry.npm.taobao.org/filename-regex/download/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + +filename-reserved-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/filename-reserved-regex/download/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229" + +filenamify@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/filenamify/download/filenamify-2.1.0.tgz#88faf495fb1b47abfd612300002a16228c677ee9" + dependencies: + filename-reserved-regex "^2.0.0" + strip-outer "^1.0.0" + trim-repeated "^1.0.0" + +fill-range@^2.1.0: + version "2.2.4" + resolved "https://registry.npm.taobao.org/fill-range/download/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^3.0.0" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +find-parent-dir@^0.3.0: + version "0.3.0" + resolved "https://registry.npm.taobao.org/find-parent-dir/download/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.npm.taobao.org/find-up/download/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/find-up/download/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + dependencies: + locate-path "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + dependencies: + locate-path "^3.0.0" + +find-yarn-workspace-root@1.2.1: + version "1.2.1" + resolved "https://registry.npm.taobao.org/find-yarn-workspace-root/download/find-yarn-workspace-root-1.2.1.tgz#40eb8e6e7c2502ddfaa2577c176f221422f860db" + dependencies: + fs-extra "^4.0.3" + micromatch "^3.1.4" + +first-chunk-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/first-chunk-stream/download/first-chunk-stream-2.0.0.tgz#1bdecdb8e083c0664b91945581577a43a9f31d70" + dependencies: + readable-stream "^2.0.2" + +flat-cache@^1.2.1: + version "1.3.4" + resolved "https://registry.npm.taobao.org/flat-cache/download/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f" + dependencies: + circular-json "^0.3.1" + graceful-fs "^4.1.2" + rimraf "~2.6.2" + write "^0.2.1" + +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/flat-cache/download/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + +flatted@^2.0.0: + version "2.0.2" + resolved "https://registry.npm.taobao.org/flatted/download/flatted-2.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fflatted%2Fdownload%2Fflatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + +flush-write-stream@^1.0.2: + version "1.1.1" + resolved "https://registry.npm.taobao.org/flush-write-stream/download/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +for-in@^1.0.1, for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + +for-own@^0.1.4: + version "0.1.5" + resolved "https://registry.npm.taobao.org/for-own/download/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + dependencies: + for-in "^1.0.1" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +form-data@^2.5.0: + version "2.5.1" + resolved "https://registry.npm.taobao.org/form-data/download/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.npm.taobao.org/form-data/download/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.npm.taobao.org/fragment-cache/download/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + dependencies: + map-cache "^0.2.2" + +from2@^2.1.1: + version "2.3.0" + resolved "https://registry.npm.taobao.org/from2/download/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/fs-constants/download/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + +fs-extra@^4.0.3: + version "4.0.3" + resolved "https://registry.npm.taobao.org/fs-extra/download/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/fs-extra/download/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-mkdirp-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/fs-mkdirp-stream/download/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb" + dependencies: + graceful-fs "^4.1.11" + through2 "^2.0.3" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.13.tgz?cache=0&sync_timestamp=1588787369955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + +generic-names@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/generic-names/download/generic-names-2.0.1.tgz#f8a378ead2ccaa7a34f0317b05554832ae41b872" + dependencies: + loader-utils "^1.1.0" + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + +get-proxy@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/get-proxy/download/get-proxy-2.1.0.tgz#349f2b4d91d44c4d4d4e9cba2ad90143fac5ef93" + dependencies: + npm-conf "^1.1.0" + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.npm.taobao.org/get-stdin/download/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + +get-stdin@^6.0.0: + version "6.0.0" + resolved "https://registry.npm.taobao.org/get-stdin/download/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" + +get-stream@3.0.0, get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + +get-stream@^2.2.0: + version "2.3.1" + resolved "https://registry.npm.taobao.org/get-stream/download/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de" + dependencies: + object-assign "^4.0.1" + pinkie-promise "^2.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + dependencies: + assert-plus "^1.0.0" + +git-clone@^0.1.0: + version "0.1.0" + resolved "https://registry.npm.taobao.org/git-clone/download/git-clone-0.1.0.tgz#0d76163778093aef7f1c30238f2a9ef3f07a2eb9" + +giturl@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/giturl/download/giturl-1.0.1.tgz#926c69bda5c48a3d8f74254e99f826835e6a4aa0" + +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.npm.taobao.org/glob-base/download/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/glob-parent/download/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + dependencies: + is-glob "^2.0.0" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@^5.0.0: + version "5.1.1" + resolved "https://registry.npm.taobao.org/glob-parent/download/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + dependencies: + is-glob "^4.0.1" + +glob-stream@^6.1.0: + version "6.1.0" + resolved "https://registry.npm.taobao.org/glob-stream/download/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4" + dependencies: + extend "^3.0.0" + glob "^7.1.1" + glob-parent "^3.1.0" + is-negated-glob "^1.0.0" + ordered-read-streams "^1.0.0" + pumpify "^1.3.5" + readable-stream "^2.1.5" + remove-trailing-separator "^1.0.1" + to-absolute-glob "^2.0.0" + unique-stream "^2.0.2" + +glob-to-regexp@^0.3.0: + version "0.3.0" + resolved "https://registry.npm.taobao.org/glob-to-regexp/download/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" + +glob@^6.0.1: + version "6.0.4" + resolved "https://registry.npm.taobao.org/glob/download/glob-6.0.4.tgz?cache=0&sync_timestamp=1573078121947&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob%2Fdownload%2Fglob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.6: + version "7.1.6" + resolved "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz?cache=0&sync_timestamp=1573078121947&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob%2Fdownload%2Fglob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-dirs@^0.1.0: + version "0.1.1" + resolved "https://registry.npm.taobao.org/global-dirs/download/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + dependencies: + ini "^1.3.4" + +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/global-modules/download/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.npm.taobao.org/global-prefix/download/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + +globals@^11.1.0, globals@^11.7.0: + version "11.12.0" + resolved "https://registry.npm.taobao.org/globals/download/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + +globals@^12.1.0: + version "12.4.0" + resolved "https://registry.npm.taobao.org/globals/download/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + dependencies: + type-fest "^0.8.1" + +globals@^9.18.0: + version "9.18.0" + resolved "https://registry.npm.taobao.org/globals/download/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + +globby@^4.0.0: + version "4.1.0" + resolved "https://registry.npm.taobao.org/globby/download/globby-4.1.0.tgz#080f54549ec1b82a6c60e631fc82e1211dbe95f8" + dependencies: + array-union "^1.0.1" + arrify "^1.0.0" + glob "^6.0.1" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +globby@^7.1.1: + version "7.1.1" + resolved "https://registry.npm.taobao.org/globby/download/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" + dependencies: + array-union "^1.0.1" + dir-glob "^2.0.0" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + +globby@^8.0.0: + version "8.0.2" + resolved "https://registry.npm.taobao.org/globby/download/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d" + dependencies: + array-union "^1.0.1" + dir-glob "2.0.0" + fast-glob "^2.0.2" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + +globjoin@^0.1.4: + version "0.1.4" + resolved "https://registry.npm.taobao.org/globjoin/download/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" + +gonzales-pe@^4.2.3: + version "4.3.0" + resolved "https://registry.npm.taobao.org/gonzales-pe/download/gonzales-pe-4.3.0.tgz#fe9dec5f3c557eead09ff868c65826be54d067b3" + dependencies: + minimist "^1.2.5" + +got@^6.7.1: + version "6.7.1" + resolved "https://registry.npm.taobao.org/got/download/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" + dependencies: + create-error-class "^3.0.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-redirect "^1.0.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + lowercase-keys "^1.0.0" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + unzip-response "^2.0.1" + url-parse-lax "^1.0.0" + +got@^8.3.1: + version "8.3.2" + resolved "https://registry.npm.taobao.org/got/download/got-8.3.2.tgz#1d23f64390e97f776cac52e5b936e5f514d2e937" + dependencies: + "@sindresorhus/is" "^0.7.0" + cacheable-request "^2.1.1" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + into-stream "^3.1.0" + is-retry-allowed "^1.1.0" + isurl "^1.0.0-alpha5" + lowercase-keys "^1.0.0" + mimic-response "^1.0.0" + p-cancelable "^0.4.0" + p-timeout "^2.0.1" + pify "^3.0.0" + safe-buffer "^5.1.1" + timed-out "^4.0.1" + url-parse-lax "^3.0.0" + url-to-options "^1.0.1" + +graceful-fs@^4.0.0, graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.1.9: + version "4.2.4" + resolved "https://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + +"graceful-readlink@>= 1.0.0": + version "1.0.1" + resolved "https://registry.npm.taobao.org/graceful-readlink/download/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + +har-validator@~5.1.3: + version "5.1.3" + resolved "https://registry.npm.taobao.org/har-validator/download/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + dependencies: + ajv "^6.5.5" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + dependencies: + ansi-regex "^2.0.0" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + +has-symbol-support-x@^1.4.1: + version "1.4.2" + resolved "https://registry.npm.taobao.org/has-symbol-support-x/download/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" + +has-symbols@^1.0.0, has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/has-symbols/download/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + +has-to-string-tag-x@^1.2.0: + version "1.4.1" + resolved "https://registry.npm.taobao.org/has-to-string-tag-x/download/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" + dependencies: + has-symbol-support-x "^1.4.1" + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.npm.taobao.org/has-value/download/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/has-value/download/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.npm.taobao.org/has-values/download/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/has-values/download/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.1, has@^1.0.3: + version "1.0.3" + resolved "https://registry.npm.taobao.org/has/download/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + dependencies: + function-bind "^1.1.1" + +he@^1.1.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/he/download/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + +highlight-es@^1.0.0: + version "1.0.3" + resolved "https://registry.npm.taobao.org/highlight-es/download/highlight-es-1.0.3.tgz#12abc300a27e686f6f18010134e3a5c6d2fe6930" + dependencies: + chalk "^2.4.0" + is-es2016-keyword "^1.0.0" + js-tokens "^3.0.0" + +hoek@6.x.x: + version "6.1.3" + resolved "https://registry.npm.taobao.org/hoek/download/hoek-6.1.3.tgz#73b7d33952e01fe27a38b0457294b79dd8da242c" + +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/home-or-tmp/download/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.npm.taobao.org/homedir-polyfill/download/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + dependencies: + parse-passwd "^1.0.0" + +hosted-git-info@^2.1.4: + version "2.8.8" + resolved "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + +html-tags@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/html-tags/download/html-tags-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-tags%2Fdownload%2Fhtml-tags-2.0.0.tgz#10b30a386085f43cede353cc8fa7cb0deeea668b" + +html@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/html/download/html-1.0.0.tgz#a544fa9ea5492bfb3a2cca8210a10be7b5af1f61" + dependencies: + concat-stream "^1.4.7" + +htmlparser2@^3.9.2: + version "3.10.1" + resolved "https://registry.npm.taobao.org/htmlparser2/download/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" + dependencies: + domelementtype "^1.3.1" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^3.1.1" + +http-cache-semantics@3.8.1: + version "3.8.1" + resolved "https://registry.npm.taobao.org/http-cache-semantics/download/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@~0.4.13: + version "0.4.24" + resolved "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz?cache=0&sync_timestamp=1579333981154&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + dependencies: + safer-buffer ">= 2.1.2 < 3" + +icss-replace-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/icss-replace-symbols/download/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" + +icss-utils@^3.0.1: + version "3.0.1" + resolved "https://registry.npm.taobao.org/icss-utils/download/icss-utils-3.0.1.tgz#ee70d3ae8cac38c6be5ed91e851b27eed343ad0f" + dependencies: + postcss "^6.0.2" + +ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.npm.taobao.org/ieee754/download/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + +ignore@^3.3.3, ignore@^3.3.5: + version "3.3.10" + resolved "https://registry.npm.taobao.org/ignore/download/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.npm.taobao.org/ignore/download/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/import-fresh/download/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + +import-fresh@^3.0.0, import-fresh@^3.1.0: + version "3.2.1" + resolved "https://registry.npm.taobao.org/import-fresh/download/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/import-lazy/download/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + +import-lazy@^3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/import-lazy/download/import-lazy-3.1.0.tgz#891279202c8a2280fdbd6674dbd8da1a1dfc67cc" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/indent-string/download/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + dependencies: + repeating "^2.0.0" + +indent-string@^3.0.0: + version "3.2.0" + resolved "https://registry.npm.taobao.org/indent-string/download/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/indexes-of/download/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz?cache=0&sync_timestamp=1560975547815&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + +ini@^1.3.4, ini@~1.3.0: + version "1.3.5" + resolved "https://registry.npm.taobao.org/ini/download/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + +inquirer@^0.12.0: + version "0.12.0" + resolved "https://registry.npm.taobao.org/inquirer/download/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e" + dependencies: + ansi-escapes "^1.1.0" + ansi-regex "^2.0.0" + chalk "^1.0.0" + cli-cursor "^1.0.1" + cli-width "^2.0.0" + figures "^1.3.5" + lodash "^4.3.0" + readline2 "^1.0.1" + run-async "^0.1.0" + rx-lite "^3.1.2" + string-width "^1.0.1" + strip-ansi "^3.0.0" + through "^2.3.6" + +inquirer@^5.2.0: + version "5.2.0" + resolved "https://registry.npm.taobao.org/inquirer/download/inquirer-5.2.0.tgz#db350c2b73daca77ff1243962e9f22f099685726" + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^2.1.0" + figures "^2.0.0" + lodash "^4.3.0" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^5.5.2" + string-width "^2.1.0" + strip-ansi "^4.0.0" + through "^2.3.6" + +inquirer@^6.2.2: + version "6.5.2" + resolved "https://registry.npm.taobao.org/inquirer/download/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" + dependencies: + ansi-escapes "^3.2.0" + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^2.0.0" + lodash "^4.17.12" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^6.4.0" + string-width "^2.1.0" + strip-ansi "^5.1.0" + through "^2.3.6" + +inquirer@^7.0.0: + version "7.1.0" + resolved "https://registry.npm.taobao.org/inquirer/download/inquirer-7.1.0.tgz#1298a01859883e17c7264b82870ae1034f92dd29" + dependencies: + ansi-escapes "^4.2.1" + chalk "^3.0.0" + cli-cursor "^3.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.15" + mute-stream "0.0.8" + run-async "^2.4.0" + rxjs "^6.5.3" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + +internal-slot@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/internal-slot/download/internal-slot-1.0.2.tgz#9c2e9fb3cd8e5e4256c6f45fe310067fcfa378a3" + dependencies: + es-abstract "^1.17.0-next.1" + has "^1.0.3" + side-channel "^1.0.2" + +interpret@^1.0.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/interpret/download/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" + +into-stream@^3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/into-stream/download/into-stream-3.1.0.tgz#96fb0a936c12babd6ff1752a17d05616abd094c6" + dependencies: + from2 "^2.1.1" + p-is-promise "^1.1.0" + +invariant@^2.2.0, invariant@^2.2.2: + version "2.2.4" + resolved "https://registry.npm.taobao.org/invariant/download/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + dependencies: + loose-envify "^1.0.0" + +is-absolute@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-absolute/download/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" + dependencies: + is-relative "^1.0.0" + is-windows "^1.0.1" + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + dependencies: + kind-of "^6.0.0" + +is-alphabetical@^1.0.0: + version "1.0.4" + resolved "https://registry.npm.taobao.org/is-alphabetical/download/is-alphabetical-1.0.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-alphabetical%2Fdownload%2Fis-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" + +is-alphanumeric@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-alphanumeric/download/is-alphanumeric-1.0.0.tgz#4a9cef71daf4c001c1d81d63d140cf53fd6889f4" + +is-alphanumerical@^1.0.0: + version "1.0.4" + resolved "https://registry.npm.taobao.org/is-alphanumerical/download/is-alphanumerical-1.0.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-alphanumerical%2Fdownload%2Fis-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" + dependencies: + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.1.4, is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz?cache=0&sync_timestamp=1588707106955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + +is-callable@^1.1.4, is-callable@^1.1.5: + version "1.1.5" + resolved "https://registry.npm.taobao.org/is-callable/download/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" + +is-ci@^1.0.10, is-ci@^1.0.8: + version "1.2.1" + resolved "https://registry.npm.taobao.org/is-ci/download/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + dependencies: + ci-info "^1.5.0" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.npm.taobao.org/is-date-object/download/is-date-object-1.0.2.tgz?cache=0&sync_timestamp=1576729165697&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-date-object%2Fdownload%2Fis-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + +is-decimal@^1.0.0: + version "1.0.4" + resolved "https://registry.npm.taobao.org/is-decimal/download/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.npm.taobao.org/is-directory/download/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + +is-dotfile@^1.0.0: + version "1.0.3" + resolved "https://registry.npm.taobao.org/is-dotfile/download/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.npm.taobao.org/is-equal-shallow/download/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + dependencies: + is-primitive "^2.0.0" + +is-es2016-keyword@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-es2016-keyword/download/is-es2016-keyword-1.0.0.tgz#f6e54e110c5e4f8d265e69d2ed0eaf8cf5f47718" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-extglob/download/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + +is-finite@^1.0.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/is-finite/download/is-finite-1.1.0.tgz?cache=0&sync_timestamp=1581061033879&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-finite%2Fdownload%2Fis-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/is-glob/download/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + dependencies: + is-extglob "^1.0.0" + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1: + version "4.0.1" + resolved "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + dependencies: + is-extglob "^2.1.1" + +is-hexadecimal@^1.0.0: + version "1.0.4" + resolved "https://registry.npm.taobao.org/is-hexadecimal/download/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" + +is-installed-globally@^0.1.0: + version "0.1.0" + resolved "https://registry.npm.taobao.org/is-installed-globally/download/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" + dependencies: + global-dirs "^0.1.0" + is-path-inside "^1.0.0" + +is-natural-number@^4.0.1: + version "4.0.1" + resolved "https://registry.npm.taobao.org/is-natural-number/download/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8" + +is-negated-glob@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-negated-glob/download/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2" + +is-npm@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-npm/download/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" + +is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/is-number/download/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + dependencies: + kind-of "^3.0.2" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + dependencies: + kind-of "^3.0.2" + +is-number@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/is-number/download/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" + +is-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/is-obj/download/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/is-obj/download/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + +is-object@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/is-object/download/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/is-path-inside/download/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + dependencies: + path-is-inside "^1.0.1" + +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + dependencies: + isobject "^3.0.1" + +is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.npm.taobao.org/is-posix-bracket/download/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + +is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/is-primitive/download/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + +is-redirect@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-redirect/download/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" + +is-regex@^1.0.5: + version "1.0.5" + resolved "https://registry.npm.taobao.org/is-regex/download/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" + dependencies: + has "^1.0.3" + +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-regexp/download/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + +is-relative@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-relative/download/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" + dependencies: + is-unc-path "^1.0.0" + +is-retry-allowed@^1.0.0, is-retry-allowed@^1.1.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/is-retry-allowed/download/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + +is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + +is-string@^1.0.5: + version "1.0.5" + resolved "https://registry.npm.taobao.org/is-string/download/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" + +is-supported-regexp-flag@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/is-supported-regexp-flag/download/is-supported-regexp-flag-1.0.1.tgz#21ee16518d2c1dd3edd3e9a0d57e50207ac364ca" + +is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.npm.taobao.org/is-symbol/download/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + dependencies: + has-symbols "^1.0.1" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +is-unc-path@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-unc-path/download/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" + dependencies: + unc-path-regex "^0.1.2" + +is-utf8@^0.2.0, is-utf8@^0.2.1: + version "0.2.1" + resolved "https://registry.npm.taobao.org/is-utf8/download/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + +is-valid-glob@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-valid-glob/download/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa" + +is-whitespace-character@^1.0.0: + version "1.0.4" + resolved "https://registry.npm.taobao.org/is-whitespace-character/download/is-whitespace-character-1.0.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-whitespace-character%2Fdownload%2Fis-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7" + +is-windows@^1.0.1, is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + +is-word-character@^1.0.0: + version "1.0.4" + resolved "https://registry.npm.taobao.org/is-word-character/download/is-word-character-1.0.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-word-character%2Fdownload%2Fis-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230" + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz?cache=0&sync_timestamp=1562592096220&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fisarray%2Fdownload%2Fisarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isbinaryfile@^3.0.2: + version "3.0.3" + resolved "https://registry.npm.taobao.org/isbinaryfile/download/isbinaryfile-3.0.3.tgz?cache=0&sync_timestamp=1585923989927&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fisbinaryfile%2Fdownload%2Fisbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80" + dependencies: + buffer-alloc "^1.2.0" + +isemail@3.x.x: + version "3.2.0" + resolved "https://registry.npm.taobao.org/isemail/download/isemail-3.2.0.tgz#59310a021931a9fb06bbb51e155ce0b3f236832c" + dependencies: + punycode "2.x.x" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + +isomorphic-fetch@^2.1.1: + version "2.2.1" + resolved "https://registry.npm.taobao.org/isomorphic-fetch/download/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +isurl@^1.0.0-alpha5: + version "1.0.0" + resolved "https://registry.npm.taobao.org/isurl/download/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" + dependencies: + has-to-string-tag-x "^1.2.0" + is-object "^1.0.1" + +joi@^14.0.6: + version "14.3.1" + resolved "https://registry.npm.taobao.org/joi/download/joi-14.3.1.tgz#164a262ec0b855466e0c35eea2a885ae8b6c703c" + dependencies: + hoek "6.x.x" + isemail "3.x.x" + topo "3.x.x" + +js-base64@^2.1.9: + version "2.5.2" + resolved "https://registry.npm.taobao.org/js-base64/download/js-base64-2.5.2.tgz#313b6274dda718f714d00b3330bbae6e38e90209" + +js-tokens@^3.0.0, js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.npm.taobao.org/js-tokens/download/js-tokens-3.0.2.tgz?cache=0&sync_timestamp=1586796260005&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-tokens%2Fdownload%2Fjs-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/js-tokens/download/js-tokens-4.0.0.tgz?cache=0&sync_timestamp=1586796260005&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-tokens%2Fdownload%2Fjs-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + +js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.4.2, js-yaml@^3.9.0: + version "3.13.1" + resolved "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + +jsesc@2, jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.npm.taobao.org/jsesc/download/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.npm.taobao.org/jsesc/download/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.npm.taobao.org/jsesc/download/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/json-buffer/download/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.npm.taobao.org/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-schema%2Fdownload%2Fjson-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/json-stable-stringify-without-jsonify/download/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + +json5@^0.4.0: + version "0.4.0" + resolved "https://registry.npm.taobao.org/json5/download/json5-0.4.0.tgz?cache=0&sync_timestamp=1586045700847&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson5%2Fdownload%2Fjson5-0.4.0.tgz#054352e4c4c80c86c0923877d449de176a732c8d" + +json5@^0.5.1: + version "0.5.1" + resolved "https://registry.npm.taobao.org/json5/download/json5-0.5.1.tgz?cache=0&sync_timestamp=1586045700847&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson5%2Fdownload%2Fjson5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/json5/download/json5-1.0.1.tgz?cache=0&sync_timestamp=1586045700847&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson5%2Fdownload%2Fjson5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + dependencies: + minimist "^1.2.0" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + optionalDependencies: + graceful-fs "^4.1.6" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +jsx-ast-utils@^2.0.1, jsx-ast-utils@^2.2.3: + version "2.2.3" + resolved "https://registry.npm.taobao.org/jsx-ast-utils/download/jsx-ast-utils-2.2.3.tgz?cache=0&sync_timestamp=1571953116713&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsx-ast-utils%2Fdownload%2Fjsx-ast-utils-2.2.3.tgz#8a9364e402448a3ce7f14d357738310d9248054f" + dependencies: + array-includes "^3.0.3" + object.assign "^4.1.0" + +keyv@3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/keyv/download/keyv-3.0.0.tgz?cache=0&sync_timestamp=1588662501983&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fkeyv%2Fdownload%2Fkeyv-3.0.0.tgz#44923ba39e68b12a7cec7df6c3268c031f2ef373" + dependencies: + json-buffer "3.0.0" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + +klaw@^2.1.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/klaw/download/klaw-2.1.1.tgz#42b76894701169cc910fd0d19ce677b5fb378af1" + dependencies: + graceful-fs "^4.1.9" + +known-css-properties@^0.6.0: + version "0.6.1" + resolved "https://registry.npm.taobao.org/known-css-properties/download/known-css-properties-0.6.1.tgz#31b5123ad03d8d1a3f36bd4155459c981173478b" + +latest-version@^3.0.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/latest-version/download/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" + dependencies: + package-json "^4.0.0" + +latest-version@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/latest-version/download/latest-version-4.0.0.tgz#9542393ac55a585861a4c4ebc02389a0b4a9c332" + dependencies: + package-json "^5.0.0" + +lazystream@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/lazystream/download/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" + dependencies: + readable-stream "^2.0.5" + +lead@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/lead/download/lead-1.0.0.tgz?cache=0&sync_timestamp=1588119386684&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flead%2Fdownload%2Flead-1.0.0.tgz#6f14f99a37be3a9dd784f5495690e5903466ee42" + dependencies: + flush-write-stream "^1.0.2" + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.npm.taobao.org/lines-and-columns/download/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/load-json-file/download/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/load-json-file/download/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/load-json-file/download/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +load-yaml-file@^0.1.0: + version "0.1.1" + resolved "https://registry.npm.taobao.org/load-yaml-file/download/load-yaml-file-0.1.1.tgz#dc9b8e89cee96757f6f15a5707ac53f76aa529e9" + dependencies: + graceful-fs "^4.1.5" + js-yaml "^3.13.0" + pify "^2.3.0" + strip-bom "^3.0.0" + +loader-utils@^1.1.0: + version "1.4.0" + resolved "https://registry.npm.taobao.org/loader-utils/download/loader-utils-1.4.0.tgz?cache=0&sync_timestamp=1584445207623&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floader-utils%2Fdownload%2Floader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/locate-path/download/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +lodash.toarray@^4.4.0: + version "4.4.0" + resolved "https://registry.npm.taobao.org/lodash.toarray/download/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" + +"lodash@4.6.1 || ^4.16.1", lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.3.0: + version "4.17.15" + resolved "https://registry.npm.taobao.org/lodash/download/lodash-4.17.15.tgz?cache=0&sync_timestamp=1571657272199&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + +log-symbols@^2.0.0, log-symbols@^2.2.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/log-symbols/download/log-symbols-2.2.0.tgz?cache=0&sync_timestamp=1587898912367&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flog-symbols%2Fdownload%2Flog-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + dependencies: + chalk "^2.0.1" + +longest-streak@^2.0.1: + version "2.0.4" + resolved "https://registry.npm.taobao.org/longest-streak/download/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4" + +loose-envify@^1.0.0, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.npm.taobao.org/loose-envify/download/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.npm.taobao.org/loud-rejection/download/loud-rejection-1.6.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floud-rejection%2Fdownload%2Floud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lowercase-keys@1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/lowercase-keys/download/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" + +lowercase-keys@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/lowercase-keys/download/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + +lru-cache@^4.0.0, lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +make-dir@^1.0.0, make-dir@^1.2.0: + version "1.3.0" + resolved "https://registry.npm.taobao.org/make-dir/download/make-dir-1.3.0.tgz?cache=0&sync_timestamp=1587567572251&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmake-dir%2Fdownload%2Fmake-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + dependencies: + pify "^3.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.npm.taobao.org/map-cache/download/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/map-obj/download/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + +map-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/map-obj/download/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/map-visit/download/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + dependencies: + object-visit "^1.0.0" + +markdown-escapes@^1.0.0: + version "1.0.4" + resolved "https://registry.npm.taobao.org/markdown-escapes/download/markdown-escapes-1.0.4.tgz?cache=0&sync_timestamp=1579859439450&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmarkdown-escapes%2Fdownload%2Fmarkdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535" + +markdown-table@^1.1.0: + version "1.1.3" + resolved "https://registry.npm.taobao.org/markdown-table/download/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60" + +math-random@^1.0.1: + version "1.0.4" + resolved "https://registry.npm.taobao.org/math-random/download/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" + +mathml-tag-names@^2.0.1: + version "2.1.3" + resolved "https://registry.npm.taobao.org/mathml-tag-names/download/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3" + +mdast-util-compact@^1.0.0: + version "1.0.4" + resolved "https://registry.npm.taobao.org/mdast-util-compact/download/mdast-util-compact-1.0.4.tgz#d531bb7667b5123abf20859be086c4d06c894593" + dependencies: + unist-util-visit "^1.1.0" + +mem-fs-editor@^4.0.0: + version "4.0.3" + resolved "https://registry.npm.taobao.org/mem-fs-editor/download/mem-fs-editor-4.0.3.tgz#d282a0c4e0d796e9eff9d75661f25f68f389af53" + dependencies: + commondir "^1.0.1" + deep-extend "^0.6.0" + ejs "^2.5.9" + glob "^7.0.3" + globby "^7.1.1" + isbinaryfile "^3.0.2" + mkdirp "^0.5.0" + multimatch "^2.0.0" + rimraf "^2.2.8" + through2 "^2.0.0" + vinyl "^2.0.1" + +mem-fs@^1.1.3: + version "1.1.3" + resolved "https://registry.npm.taobao.org/mem-fs/download/mem-fs-1.1.3.tgz#b8ae8d2e3fcb6f5d3f9165c12d4551a065d989cc" + dependencies: + through2 "^2.0.0" + vinyl "^1.1.0" + vinyl-file "^2.0.0" + +meow@^3.7.0: + version "3.7.0" + resolved "https://registry.npm.taobao.org/meow/download/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + +meow@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/meow/download/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4" + dependencies: + camelcase-keys "^4.0.0" + decamelize-keys "^1.0.0" + loud-rejection "^1.0.0" + minimist-options "^3.0.1" + normalize-package-data "^2.3.4" + read-pkg-up "^3.0.0" + redent "^2.0.0" + trim-newlines "^2.0.0" + yargs-parser "^10.0.0" + +merge2@^1.2.3: + version "1.3.0" + resolved "https://registry.npm.taobao.org/merge2/download/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81" + +micromatch@^2.3.11: + version "2.3.11" + resolved "https://registry.npm.taobao.org/micromatch/download/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +mime-db@1.44.0, mime-db@^1.28.0: + version "1.44.0" + resolved "https://registry.npm.taobao.org/mime-db/download/mime-db-1.44.0.tgz?cache=0&sync_timestamp=1587603342053&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-db%2Fdownload%2Fmime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + +mime-types@^2.1.12, mime-types@~2.1.19: + version "2.1.27" + resolved "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + dependencies: + mime-db "1.44.0" + +mime@^1.4.1: + version "1.6.0" + resolved "https://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/mimic-response/download/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + +"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist-options@^3.0.1: + version "3.0.2" + resolved "https://registry.npm.taobao.org/minimist-options/download/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + +minimist@1.2.5, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminimist%2Fdownload%2Fminimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.npm.taobao.org/mixin-deep/download/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@^0.5.0, mkdirp@^0.5.1: + version "0.5.5" + resolved "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.5.tgz?cache=0&sync_timestamp=1587535418745&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + dependencies: + minimist "^1.2.5" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + +multimatch@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/multimatch/download/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b" + dependencies: + array-differ "^1.0.0" + array-union "^1.0.1" + arrify "^1.0.0" + minimatch "^3.0.0" + +mute-stream@0.0.5: + version "0.0.5" + resolved "https://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + +nan@^2.12.1: + version "2.14.1" + resolved "https://registry.npm.taobao.org/nan/download/nan-2.14.1.tgz?cache=0&sync_timestamp=1587495810273&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnan%2Fdownload%2Fnan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.npm.taobao.org/nanomatch/download/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npm.taobao.org/natural-compare/download/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.npm.taobao.org/nice-try/download/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + +node-emoji@^1.0.3: + version "1.10.0" + resolved "https://registry.npm.taobao.org/node-emoji/download/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da" + dependencies: + lodash.toarray "^4.4.0" + +node-fetch@^1.0.1: + version "1.7.3" + resolved "https://registry.npm.taobao.org/node-fetch/download/node-fetch-1.7.3.tgz?cache=0&sync_timestamp=1587548798776&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-fetch%2Fdownload%2Fnode-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + +node-sass-tilde-importer@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/node-sass-tilde-importer/download/node-sass-tilde-importer-1.0.2.tgz#1a15105c153f648323b4347693fdb0f331bad1ce" + dependencies: + find-parent-dir "^0.3.0" + +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: + version "2.5.0" + resolved "https://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.5.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-package-data%2Fdownload%2Fnormalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.0.1, normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/normalize-path/download/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.npm.taobao.org/normalize-range/download/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + +normalize-selector@^0.2.0: + version "0.2.0" + resolved "https://registry.npm.taobao.org/normalize-selector/download/normalize-selector-0.2.0.tgz#d0b145eb691189c63a78d201dc4fdb1293ef0c03" + +normalize-url@2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/normalize-url/download/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6" + dependencies: + prepend-http "^2.0.0" + query-string "^5.0.1" + sort-keys "^2.0.0" + +now-and-later@^2.0.0: + version "2.0.1" + resolved "https://registry.npm.taobao.org/now-and-later/download/now-and-later-2.0.1.tgz#8e579c8685764a7cc02cb680380e94f43ccb1f7c" + dependencies: + once "^1.3.2" + +npm-check@^5.9.0: + version "5.9.2" + resolved "https://registry.npm.taobao.org/npm-check/download/npm-check-5.9.2.tgz#3b8a6230a3f8c11db113a9735b19b1ceac157dbb" + dependencies: + babel-runtime "^6.6.1" + callsite-record "^3.0.0" + chalk "^1.1.3" + co "^4.6.0" + depcheck "0.8.3" + execa "^0.2.2" + giturl "^1.0.0" + global-modules "^1.0.0" + globby "^4.0.0" + inquirer "^0.12.0" + is-ci "^1.0.8" + lodash "^4.17.15" + meow "^3.7.0" + minimatch "^3.0.2" + node-emoji "^1.0.3" + ora "^0.2.1" + package-json "^4.0.1" + path-exists "^2.1.0" + pkg-dir "^1.0.0" + preferred-pm "^1.0.1" + semver "^5.0.1" + semver-diff "^2.0.0" + text-table "^0.2.0" + throat "^2.0.2" + update-notifier "^2.1.0" + xtend "^4.0.1" + +npm-conf@^1.1.0: + version "1.1.3" + resolved "https://registry.npm.taobao.org/npm-conf/download/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9" + dependencies: + config-chain "^1.1.11" + pify "^3.0.0" + +npm-run-path@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-1.0.0.tgz#f5c32bf595fe81ae927daec52e82f8b000ac3c8f" + dependencies: + path-key "^1.0.0" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + dependencies: + path-key "^2.0.0" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.npm.taobao.org/num2fraction/download/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz?cache=0&sync_timestamp=1571657171505&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-assign%2Fdownload%2Fobject-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.npm.taobao.org/object-copy/download/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.7.0: + version "1.7.0" + resolved "https://registry.npm.taobao.org/object-inspect/download/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" + +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/object-keys/download/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/object-visit/download/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + dependencies: + isobject "^3.0.0" + +object.assign@^4.0.4, object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.npm.taobao.org/object.assign/download/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.entries@^1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/object.entries/download/object.entries-1.1.1.tgz#ee1cf04153de02bb093fec33683900f57ce5399b" + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + has "^1.0.3" + +object.fromentries@^2.0.2: + version "2.0.2" + resolved "https://registry.npm.taobao.org/object.fromentries/download/object.fromentries-2.0.2.tgz#4a09c9b9bb3843dd0f89acdb517a794d4f355ac9" + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + has "^1.0.3" + +object.omit@^2.0.0: + version "2.0.1" + resolved "https://registry.npm.taobao.org/object.omit/download/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.npm.taobao.org/object.pick/download/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + dependencies: + isobject "^3.0.1" + +object.values@^1.1.0, object.values@^1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/object.values/download/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + has "^1.0.3" + +once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0: + version "1.4.0" + resolved "https://registry.npm.taobao.org/once/download/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +onetime@^1.0.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/onetime/download/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.npm.taobao.org/onetime/download/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + dependencies: + mimic-fn "^1.0.0" + +onetime@^5.1.0: + version "5.1.0" + resolved "https://registry.npm.taobao.org/onetime/download/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" + dependencies: + mimic-fn "^2.1.0" + +optionator@^0.8.2, optionator@^0.8.3: + version "0.8.3" + resolved "https://registry.npm.taobao.org/optionator/download/optionator-0.8.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Foptionator%2Fdownload%2Foptionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +ora@^0.2.1: + version "0.2.3" + resolved "https://registry.npm.taobao.org/ora/download/ora-0.2.3.tgz?cache=0&sync_timestamp=1587481412542&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fora%2Fdownload%2Fora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4" + dependencies: + chalk "^1.1.1" + cli-cursor "^1.0.2" + cli-spinners "^0.1.2" + object-assign "^4.0.1" + +ora@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/ora/download/ora-2.1.0.tgz?cache=0&sync_timestamp=1587481412542&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fora%2Fdownload%2Fora-2.1.0.tgz#6caf2830eb924941861ec53a173799e008b51e5b" + dependencies: + chalk "^2.3.1" + cli-cursor "^2.1.0" + cli-spinners "^1.1.0" + log-symbols "^2.2.0" + strip-ansi "^4.0.0" + wcwidth "^1.0.1" + +ordered-read-streams@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/ordered-read-streams/download/ordered-read-streams-1.0.1.tgz#77c0cb37c41525d64166d990ffad7ec6a0e1363e" + dependencies: + readable-stream "^2.0.1" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.npm.taobao.org/os-homedir/download/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +p-cancelable@^0.4.0: + version "0.4.1" + resolved "https://registry.npm.taobao.org/p-cancelable/download/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0" + +p-event@^2.1.0: + version "2.3.1" + resolved "https://registry.npm.taobao.org/p-event/download/p-event-2.3.1.tgz#596279ef169ab2c3e0cae88c1cfbb08079993ef6" + dependencies: + p-timeout "^2.0.1" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + +p-is-promise@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/p-is-promise/download/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.npm.taobao.org/p-limit/download/p-limit-1.3.0.tgz?cache=0&sync_timestamp=1586101408834&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0: + version "2.3.0" + resolved "https://registry.npm.taobao.org/p-limit/download/p-limit-2.3.0.tgz?cache=0&sync_timestamp=1586101408834&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + dependencies: + p-try "^2.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/p-locate/download/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + dependencies: + p-limit "^2.0.0" + +p-timeout@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/p-timeout/download/p-timeout-2.0.1.tgz#d8dd1979595d2dc0139e1fe46b8b646cb3cdf038" + dependencies: + p-finally "^1.0.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/p-try/download/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/p-try/download/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + +package-json@^4.0.0, package-json@^4.0.1: + version "4.0.1" + resolved "https://registry.npm.taobao.org/package-json/download/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" + dependencies: + got "^6.7.1" + registry-auth-token "^3.0.1" + registry-url "^3.0.3" + semver "^5.1.0" + +package-json@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/package-json/download/package-json-5.0.0.tgz#a7dbe2725edcc7dc9bcee627672275e323882433" + dependencies: + got "^8.3.1" + registry-auth-token "^3.3.2" + registry-url "^3.1.0" + semver "^5.5.0" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/parent-module/download/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + dependencies: + callsites "^3.0.0" + +parse-entities@^1.0.2, parse-entities@^1.1.0: + version "1.2.2" + resolved "https://registry.npm.taobao.org/parse-entities/download/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50" + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.npm.taobao.org/parse-glob/download/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/parse-json/download/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + dependencies: + error-ex "^1.2.0" + +parse-json@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/parse-json/download/parse-json-3.0.0.tgz#fa6f47b18e23826ead32f263e744d0e1e847fb13" + dependencies: + error-ex "^1.3.1" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/parse-json/download/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/parse-json/download/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f" + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + lines-and-columns "^1.1.6" + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/parse-passwd/download/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.npm.taobao.org/path-dirname/download/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + +path-exists@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/path-exists/download/path-exists-1.0.0.tgz#d5a8998eb71ef37a74c34eb0d9eba6e878eea081" + +path-exists@^2.0.0, path-exists@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/path-exists/download/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-is-inside@^1.0.1, path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/path-is-inside/download/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + +path-key@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/path-key/download/path-key-1.0.0.tgz#5d53d578019646c0d68800db4e146e6bdc2ac7af" + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.npm.taobao.org/path-parse/download/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/path-type/download/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/path-type/download/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + dependencies: + pify "^2.0.0" + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/path-type/download/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + dependencies: + pify "^3.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/path-type/download/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/pend/download/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + +pify@^2.0.0, pify@^2.3.0: + version "2.3.0" + resolved "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.npm.taobao.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.npm.taobao.org/pinkie/download/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + +pkg-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + dependencies: + find-up "^1.0.0" + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + dependencies: + find-up "^2.1.0" + +please-upgrade-node@^3.1.1: + version "3.2.0" + resolved "https://registry.npm.taobao.org/please-upgrade-node/download/please-upgrade-node-3.2.0.tgz?cache=0&sync_timestamp=1565266069139&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fplease-upgrade-node%2Fdownload%2Fplease-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" + dependencies: + semver-compare "^1.0.0" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.npm.taobao.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + +postcss-html@^0.28.0: + version "0.28.0" + resolved "https://registry.npm.taobao.org/postcss-html/download/postcss-html-0.28.0.tgz#3dd0f5b5d7f886b8181bf844396d43a7898162cb" + dependencies: + htmlparser2 "^3.9.2" + +postcss-less@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/postcss-less/download/postcss-less-2.0.0.tgz#5d190b8e057ca446d60fe2e2587ad791c9029fb8" + dependencies: + postcss "^5.2.16" + +postcss-markdown@^0.28.0: + version "0.28.0" + resolved "https://registry.npm.taobao.org/postcss-markdown/download/postcss-markdown-0.28.0.tgz#99d1c4e74967af9e9c98acb2e2b66df4b3c6ed86" + dependencies: + remark "^9.0.0" + unist-util-find-all-after "^1.0.2" + +postcss-media-query-parser@^0.2.3: + version "0.2.3" + resolved "https://registry.npm.taobao.org/postcss-media-query-parser/download/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" + +postcss-modules-extract-imports@^1.1.0: + version "1.2.1" + resolved "https://registry.npm.taobao.org/postcss-modules-extract-imports/download/postcss-modules-extract-imports-1.2.1.tgz#dc87e34148ec7eab5f791f7cd5849833375b741a" + dependencies: + postcss "^6.0.1" + +postcss-modules-local-by-default@^1.2.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/postcss-modules-local-by-default/download/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-resolve-imports@^1.3.0: + version "1.3.0" + resolved "https://registry.npm.taobao.org/postcss-modules-resolve-imports/download/postcss-modules-resolve-imports-1.3.0.tgz#398d3000b95ae969420cdf4cd83fa8067f1c5eae" + dependencies: + css-selector-tokenizer "^0.7.0" + icss-utils "^3.0.1" + minimist "^1.2.0" + +postcss-modules-scope@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/postcss-modules-scope/download/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-values@^1.3.0: + version "1.3.0" + resolved "https://registry.npm.taobao.org/postcss-modules-values/download/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" + dependencies: + icss-replace-symbols "^1.1.0" + postcss "^6.0.1" + +postcss-reporter@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/postcss-reporter/download/postcss-reporter-5.0.0.tgz#a14177fd1342829d291653f2786efd67110332c3" + dependencies: + chalk "^2.0.1" + lodash "^4.17.4" + log-symbols "^2.0.0" + postcss "^6.0.8" + +postcss-reporter@^6.0.1: + version "6.0.1" + resolved "https://registry.npm.taobao.org/postcss-reporter/download/postcss-reporter-6.0.1.tgz#7c055120060a97c8837b4e48215661aafb74245f" + dependencies: + chalk "^2.4.1" + lodash "^4.17.11" + log-symbols "^2.2.0" + postcss "^7.0.7" + +postcss-resolve-nested-selector@^0.1.1: + version "0.1.1" + resolved "https://registry.npm.taobao.org/postcss-resolve-nested-selector/download/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" + +postcss-safe-parser@^3.0.1: + version "3.0.1" + resolved "https://registry.npm.taobao.org/postcss-safe-parser/download/postcss-safe-parser-3.0.1.tgz#b753eff6c7c0aea5e8375fbe4cde8bf9063ff142" + dependencies: + postcss "^6.0.6" + +postcss-sass@^0.3.0: + version "0.3.5" + resolved "https://registry.npm.taobao.org/postcss-sass/download/postcss-sass-0.3.5.tgz#6d3e39f101a53d2efa091f953493116d32beb68c" + dependencies: + gonzales-pe "^4.2.3" + postcss "^7.0.1" + +postcss-scss@^1.0.2: + version "1.0.6" + resolved "https://registry.npm.taobao.org/postcss-scss/download/postcss-scss-1.0.6.tgz#ab903f3bb20161bc177896462293a53d4bff5f7a" + dependencies: + postcss "^6.0.23" + +postcss-selector-parser@^3.1.0: + version "3.1.2" + resolved "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz?cache=0&sync_timestamp=1582039646348&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" + dependencies: + dot-prop "^5.2.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-syntax@^0.28.0: + version "0.28.0" + resolved "https://registry.npm.taobao.org/postcss-syntax/download/postcss-syntax-0.28.0.tgz#e17572a7dcf5388f0c9b68232d2dad48fa7f0b12" + +postcss-taro-unit-transform@1.2.15: + version "1.2.15" + resolved "https://registry.npm.taobao.org/postcss-taro-unit-transform/download/postcss-taro-unit-transform-1.2.15.tgz#bfb3f327c7a529995ccf6bfecca6d606b2fb9f45" + dependencies: + postcss "^6.0.21" + +postcss-url@^7.3.2: + version "7.3.2" + resolved "https://registry.npm.taobao.org/postcss-url/download/postcss-url-7.3.2.tgz#5fea273807fb84b38c461c3c9a9e8abd235f7120" + dependencies: + mime "^1.4.1" + minimatch "^3.0.4" + mkdirp "^0.5.0" + postcss "^6.0.1" + xxhashjs "^0.2.1" + +postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: + version "3.3.1" + resolved "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + +postcss@^5.2.16: + version "5.2.18" + resolved "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz?cache=0&sync_timestamp=1588601868752&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss%2Fdownload%2Fpostcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" + dependencies: + chalk "^1.1.3" + js-base64 "^2.1.9" + source-map "^0.5.6" + supports-color "^3.2.3" + +postcss@^6.0.1, postcss@^6.0.14, postcss@^6.0.16, postcss@^6.0.2, postcss@^6.0.21, postcss@^6.0.22, postcss@^6.0.23, postcss@^6.0.6, postcss@^6.0.8: + version "6.0.23" + resolved "https://registry.npm.taobao.org/postcss/download/postcss-6.0.23.tgz?cache=0&sync_timestamp=1588601868752&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss%2Fdownload%2Fpostcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" + dependencies: + chalk "^2.4.1" + source-map "^0.6.1" + supports-color "^5.4.0" + +postcss@^7.0.1, postcss@^7.0.7: + version "7.0.29" + resolved "https://registry.npm.taobao.org/postcss/download/postcss-7.0.29.tgz?cache=0&sync_timestamp=1588601868752&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss%2Fdownload%2Fpostcss-7.0.29.tgz#d3a903872bd52280b83bce38cdc83ce55c06129e" + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +preferred-pm@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/preferred-pm/download/preferred-pm-1.0.1.tgz#539df37ce944b1b765ae944a8ba34a7e68694e8d" + dependencies: + path-exists "^3.0.0" + which-pm "^1.0.1" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + +prepend-http@^1.0.1: + version "1.0.4" + resolved "https://registry.npm.taobao.org/prepend-http/download/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/prepend-http/download/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.npm.taobao.org/preserve/download/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + +prettier@^1.14.2, prettier@^1.16.4: + version "1.19.1" + resolved "https://registry.npm.taobao.org/prettier/download/prettier-1.19.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fprettier%2Fdownload%2Fprettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" + +private@^0.1.6, private@^0.1.8: + version "0.1.8" + resolved "https://registry.npm.taobao.org/private/download/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + +process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.npm.taobao.org/progress/download/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.npm.taobao.org/promise/download/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + dependencies: + asap "~2.0.3" + +prop-types@^15.6.2, prop-types@^15.7.2: + version "15.7.2" + resolved "https://registry.npm.taobao.org/prop-types/download/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.8.1" + +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.npm.taobao.org/proto-list/download/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.npm.taobao.org/psl/download/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.npm.taobao.org/pump/download/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.5: + version "1.5.1" + resolved "https://registry.npm.taobao.org/pumpify/download/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@2.x.x, punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + +query-string@^5.0.1: + version "5.1.1" + resolved "https://registry.npm.taobao.org/query-string/download/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" + dependencies: + decode-uri-component "^0.2.0" + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +quick-lru@^1.0.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/quick-lru/download/quick-lru-1.1.0.tgz?cache=0&sync_timestamp=1586159910337&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fquick-lru%2Fdownload%2Fquick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" + +randomatic@^3.0.0: + version "3.1.1" + resolved "https://registry.npm.taobao.org/randomatic/download/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" + dependencies: + is-number "^4.0.0" + kind-of "^6.0.0" + math-random "^1.0.1" + +rc@^1.0.1, rc@^1.1.6: + version "1.2.8" + resolved "https://registry.npm.taobao.org/rc/download/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-is@^16.8.1: + version "16.13.1" + resolved "https://registry.npm.taobao.org/react-is/download/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-1.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-pkg-up%2Fdownload%2Fread-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-pkg-up%2Fdownload%2Fread-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-3.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-pkg-up%2Fdownload%2Fread-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + dependencies: + find-up "^2.0.0" + read-pkg "^3.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/read-pkg/download/read-pkg-1.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-pkg%2Fdownload%2Fread-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/read-pkg/download/read-pkg-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-pkg%2Fdownload%2Fread-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/read-pkg/download/read-pkg-3.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-pkg%2Fdownload%2Fread-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.7.tgz?cache=0&sync_timestamp=1581624324274&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.1.1: + version "3.6.0" + resolved "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz?cache=0&sync_timestamp=1581624324274&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.npm.taobao.org/readdirp/download/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +readline2@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/readline2/download/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + mute-stream "0.0.5" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.npm.taobao.org/rechoir/download/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + dependencies: + resolve "^1.1.6" + +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/redent/download/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +redent@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/redent/download/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" + dependencies: + indent-string "^3.0.0" + strip-indent "^2.0.0" + +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.npm.taobao.org/regenerate-unicode-properties/download/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + dependencies: + regenerate "^1.4.0" + +regenerate@^1.4.0: + version "1.4.0" + resolved "https://registry.npm.taobao.org/regenerate/download/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz?cache=0&sync_timestamp=1584052481783&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + +regenerator-runtime@^0.13.4: + version "0.13.5" + resolved "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.13.5.tgz?cache=0&sync_timestamp=1584052481783&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" + +regex-cache@^0.4.2: + version "0.4.4" + resolved "https://registry.npm.taobao.org/regex-cache/download/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" + dependencies: + is-equal-shallow "^0.1.3" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/regex-not/download/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexp.prototype.flags@^1.3.0: + version "1.3.0" + resolved "https://registry.npm.taobao.org/regexp.prototype.flags/download/regexp.prototype.flags-1.3.0.tgz?cache=0&sync_timestamp=1576388141321&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregexp.prototype.flags%2Fdownload%2Fregexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +regexpp@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/regexpp/download/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" + +regexpu-core@^4.6.0: + version "4.7.0" + resolved "https://registry.npm.taobao.org/regexpu-core/download/regexpu-core-4.7.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregexpu-core%2Fdownload%2Fregexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.2.0" + +registry-auth-token@^3.0.1, registry-auth-token@^3.3.2: + version "3.4.0" + resolved "https://registry.npm.taobao.org/registry-auth-token/download/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" + dependencies: + rc "^1.1.6" + safe-buffer "^5.0.1" + +registry-url@^3.0.3, registry-url@^3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/registry-url/download/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" + dependencies: + rc "^1.0.1" + +regjsgen@^0.5.1: + version "0.5.1" + resolved "https://registry.npm.taobao.org/regjsgen/download/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" + +regjsparser@^0.6.4: + version "0.6.4" + resolved "https://registry.npm.taobao.org/regjsparser/download/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" + dependencies: + jsesc "~0.5.0" + +remark-parse@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/remark-parse/download/remark-parse-5.0.0.tgz#4c077f9e499044d1d5c13f80d7a98cf7b9285d95" + dependencies: + collapse-white-space "^1.0.2" + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + is-whitespace-character "^1.0.0" + is-word-character "^1.0.0" + markdown-escapes "^1.0.0" + parse-entities "^1.1.0" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + trim "0.0.1" + trim-trailing-lines "^1.0.0" + unherit "^1.0.4" + unist-util-remove-position "^1.0.0" + vfile-location "^2.0.0" + xtend "^4.0.1" + +remark-stringify@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/remark-stringify/download/remark-stringify-5.0.0.tgz?cache=0&sync_timestamp=1585564208574&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fremark-stringify%2Fdownload%2Fremark-stringify-5.0.0.tgz#336d3a4d4a6a3390d933eeba62e8de4bd280afba" + dependencies: + ccount "^1.0.0" + is-alphanumeric "^1.0.0" + is-decimal "^1.0.0" + is-whitespace-character "^1.0.0" + longest-streak "^2.0.1" + markdown-escapes "^1.0.0" + markdown-table "^1.1.0" + mdast-util-compact "^1.0.0" + parse-entities "^1.0.2" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + stringify-entities "^1.0.1" + unherit "^1.0.4" + xtend "^4.0.1" + +remark@^9.0.0: + version "9.0.0" + resolved "https://registry.npm.taobao.org/remark/download/remark-9.0.0.tgz?cache=0&sync_timestamp=1585564154157&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fremark%2Fdownload%2Fremark-9.0.0.tgz#c5cfa8ec535c73a67c4b0f12bfdbd3a67d8b2f60" + dependencies: + remark-parse "^5.0.0" + remark-stringify "^5.0.0" + unified "^6.0.0" + +remove-bom-buffer@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/remove-bom-buffer/download/remove-bom-buffer-3.0.0.tgz#c2bf1e377520d324f623892e33c10cac2c252b53" + dependencies: + is-buffer "^1.1.5" + is-utf8 "^0.2.1" + +remove-bom-stream@^1.2.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/remove-bom-stream/download/remove-bom-stream-1.2.0.tgz#05f1a593f16e42e1fb90ebf59de8e569525f9523" + dependencies: + remove-bom-buffer "^3.0.0" + safe-buffer "^5.1.0" + through2 "^2.0.3" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + +repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.npm.taobao.org/repeating/download/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + dependencies: + is-finite "^1.0.0" + +replace-ext@0.0.1: + version "0.0.1" + resolved "https://registry.npm.taobao.org/replace-ext/download/replace-ext-0.0.1.tgz?cache=0&sync_timestamp=1588554532939&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freplace-ext%2Fdownload%2Freplace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" + +replace-ext@1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/replace-ext/download/replace-ext-1.0.0.tgz?cache=0&sync_timestamp=1588554532939&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freplace-ext%2Fdownload%2Freplace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" + +replace-ext@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/replace-ext/download/replace-ext-1.0.1.tgz?cache=0&sync_timestamp=1588554532939&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freplace-ext%2Fdownload%2Freplace-ext-1.0.1.tgz#2d6d996d04a15855d967443631dd5f77825b016a" + +request@^2.88.0: + version "2.88.2" + resolved "https://registry.npm.taobao.org/request/download/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + +require-from-string@^2.0.1: + version "2.0.2" + resolved "https://registry.npm.taobao.org/require-from-string/download/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + +require-package-name@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/require-package-name/download/require-package-name-2.0.1.tgz#c11e97276b65b8e2923f75dabf5fb2ef0c3841b9" + +resolve-dir@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/resolve-dir/download/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/resolve-from/download/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/resolve-from/download/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + +resolve-options@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/resolve-options/download/resolve-options-1.1.0.tgz#32bb9e39c06d67338dc9378c0d6d6074566ad131" + dependencies: + value-or-function "^3.0.0" + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.npm.taobao.org/resolve-url/download/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.15.1, resolve@^1.6.0: + version "1.17.0" + resolved "https://registry.npm.taobao.org/resolve/download/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + dependencies: + path-parse "^1.0.6" + +responselike@1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/responselike/download/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + dependencies: + lowercase-keys "^1.0.0" + +restore-cursor@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/restore-cursor/download/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" + dependencies: + exit-hook "^1.0.0" + onetime "^1.0.0" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/restore-cursor/download/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/restore-cursor/download/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.npm.taobao.org/ret/download/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + +rimraf@2.6.3, rimraf@~2.6.2: + version "2.6.3" + resolved "https://registry.npm.taobao.org/rimraf/download/rimraf-2.6.3.tgz?cache=0&sync_timestamp=1581229865753&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frimraf%2Fdownload%2Frimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + dependencies: + glob "^7.1.3" + +rimraf@^2.2.8, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz?cache=0&sync_timestamp=1581229865753&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frimraf%2Fdownload%2Frimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + dependencies: + glob "^7.1.3" + +run-async@^0.1.0: + version "0.1.0" + resolved "https://registry.npm.taobao.org/run-async/download/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" + dependencies: + once "^1.3.0" + +run-async@^2.2.0, run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.npm.taobao.org/run-async/download/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + +rx-lite@^3.1.2: + version "3.1.2" + resolved "https://registry.npm.taobao.org/rx-lite/download/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" + +rxjs@^5.5.2: + version "5.5.12" + resolved "https://registry.npm.taobao.org/rxjs/download/rxjs-5.5.12.tgz#6fa61b8a77c3d793dbaf270bee2f43f652d741cc" + dependencies: + symbol-observable "1.0.1" + +rxjs@^6.4.0, rxjs@^6.5.3: + version "6.5.5" + resolved "https://registry.npm.taobao.org/rxjs/download/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec" + dependencies: + tslib "^1.9.0" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: + version "5.2.0" + resolved "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/safe-regex/download/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + +sax@>=0.6.0, sax@^1.2.4: + version "1.2.4" + resolved "https://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + +seek-bzip@^1.0.5: + version "1.0.5" + resolved "https://registry.npm.taobao.org/seek-bzip/download/seek-bzip-1.0.5.tgz#cfe917cb3d274bcffac792758af53173eb1fabdc" + dependencies: + commander "~2.8.1" + +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/semver-compare/download/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + +semver-diff@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/semver-diff/download/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" + dependencies: + semver "^5.0.3" + +"semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.0.3, semver@^5.1.0, semver@^5.5.0, semver@^5.5.1: + version "5.7.1" + resolved "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + +semver@^6.1.2, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/set-value/download/set-value-2.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fset-value%2Fdownload%2Fset-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.npm.taobao.org/setimmediate/download/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + +shelljs@^0.8.1: + version "0.8.4" + resolved "https://registry.npm.taobao.org/shelljs/download/shelljs-0.8.4.tgz?cache=0&sync_timestamp=1587787210621&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fshelljs%2Fdownload%2Fshelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +side-channel@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/side-channel/download/side-channel-1.0.2.tgz#df5d1abadb4e4bf4af1cd8852bf132d2f7876947" + dependencies: + es-abstract "^1.17.0-next.1" + object-inspect "^1.7.0" + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.3" + resolved "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + +slice-ansi@1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/slice-ansi/download/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" + dependencies: + is-fullwidth-code-point "^2.0.0" + +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/slice-ansi/download/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/snapdragon-node/download/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.npm.taobao.org/snapdragon-util/download/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.npm.taobao.org/snapdragon/download/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +sort-keys-length@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/sort-keys-length/download/sort-keys-length-1.0.1.tgz#9cb6f4f4e9e48155a6aa0671edd336ff1479a188" + dependencies: + sort-keys "^1.0.0" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.npm.taobao.org/sort-keys/download/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + dependencies: + is-plain-obj "^1.0.0" + +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/sort-keys/download/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + dependencies: + is-plain-obj "^1.0.0" + +source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: + version "0.5.3" + resolved "https://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.3.tgz?cache=0&sync_timestamp=1584829515586&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-resolve%2Fdownload%2Fsource-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.4.15: + version "0.4.18" + resolved "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.4.18.tgz?cache=0&sync_timestamp=1587719289626&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-support%2Fdownload%2Fsource-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + dependencies: + source-map "^0.5.6" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + +source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: + version "0.5.7" + resolved "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + +source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + +spdx-correct@^3.0.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.npm.taobao.org/spdx-exceptions/download/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.5" + resolved "https://registry.npm.taobao.org/spdx-license-ids/download/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" + +specificity@^0.3.1: + version "0.3.2" + resolved "https://registry.npm.taobao.org/specificity/download/specificity-0.3.2.tgz#99e6511eceef0f8d9b57924937aac2cb13d13c42" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.npm.taobao.org/split-string/download/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.npm.taobao.org/sshpk/download/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +stackframe@^0.3.1: + version "0.3.1" + resolved "https://registry.npm.taobao.org/stackframe/download/stackframe-0.3.1.tgz?cache=0&sync_timestamp=1578260297790&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstackframe%2Fdownload%2Fstackframe-0.3.1.tgz#33aa84f1177a5548c8935533cbfeb3420975f5a4" + +state-toggle@^1.0.0: + version "1.0.3" + resolved "https://registry.npm.taobao.org/state-toggle/download/state-toggle-1.0.3.tgz?cache=0&sync_timestamp=1580045011904&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstate-toggle%2Fdownload%2Fstate-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.npm.taobao.org/static-extend/download/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/stream-shift/download/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/strict-uri-encode/download/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.1.0: + version "4.2.0" + resolved "https://registry.npm.taobao.org/string-width/download/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +string.prototype.matchall@^4.0.2: + version "4.0.2" + resolved "https://registry.npm.taobao.org/string.prototype.matchall/download/string.prototype.matchall-4.0.2.tgz#48bb510326fb9fdeb6a33ceaa81a6ea04ef7648e" + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0" + has-symbols "^1.0.1" + internal-slot "^1.0.2" + regexp.prototype.flags "^1.3.0" + side-channel "^1.0.2" + +string.prototype.trimend@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/string.prototype.trimend/download/string.prototype.trimend-1.0.1.tgz?cache=0&sync_timestamp=1586465374694&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.trimend%2Fdownload%2Fstring.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string.prototype.trimleft@^2.1.1: + version "2.1.2" + resolved "https://registry.npm.taobao.org/string.prototype.trimleft/download/string.prototype.trimleft-2.1.2.tgz?cache=0&sync_timestamp=1585584322600&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.trimleft%2Fdownload%2Fstring.prototype.trimleft-2.1.2.tgz#4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc" + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + string.prototype.trimstart "^1.0.0" + +string.prototype.trimright@^2.1.1: + version "2.1.2" + resolved "https://registry.npm.taobao.org/string.prototype.trimright/download/string.prototype.trimright-2.1.2.tgz#c76f1cef30f21bbad8afeb8db1511496cfb0f2a3" + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + string.prototype.trimend "^1.0.0" + +string.prototype.trimstart@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/string.prototype.trimstart/download/string.prototype.trimstart-1.0.1.tgz?cache=0&sync_timestamp=1586465375114&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.trimstart%2Fdownload%2Fstring.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.3.0.tgz?cache=0&sync_timestamp=1565170823020&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring_decoder%2Fdownload%2Fstring_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz?cache=0&sync_timestamp=1565170823020&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring_decoder%2Fdownload%2Fstring_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + dependencies: + safe-buffer "~5.1.0" + +stringify-entities@^1.0.1: + version "1.3.2" + resolved "https://registry.npm.taobao.org/stringify-entities/download/stringify-entities-1.3.2.tgz?cache=0&sync_timestamp=1588829811603&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstringify-entities%2Fdownload%2Fstringify-entities-1.3.2.tgz#a98417e5471fd227b3e45d3db1861c11caf668f7" + dependencies: + character-entities-html4 "^1.0.0" + character-entities-legacy "^1.0.0" + is-alphanumerical "^1.0.0" + is-hexadecimal "^1.0.0" + +strip-ansi@^3.0.0: + version "3.0.1" + resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + dependencies: + ansi-regex "^5.0.0" + +strip-bom-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/strip-bom-stream/download/strip-bom-stream-2.0.0.tgz#f87db5ef2613f6968aa545abfe1ec728b6a829ca" + dependencies: + first-chunk-stream "^2.0.0" + strip-bom "^2.0.0" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/strip-bom/download/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + dependencies: + is-utf8 "^0.2.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/strip-bom/download/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + +strip-dirs@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/strip-dirs/download/strip-dirs-2.1.0.tgz#4987736264fc344cf20f6c34aca9d13d1d4ed6c5" + dependencies: + is-natural-number "^4.0.1" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/strip-indent/download/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + dependencies: + get-stdin "^4.0.1" + +strip-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/strip-indent/download/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + +strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz?cache=0&sync_timestamp=1586159975241&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-json-comments%2Fdownload%2Fstrip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + +strip-json-comments@^3.0.1: + version "3.1.0" + resolved "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-3.1.0.tgz?cache=0&sync_timestamp=1586159975241&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-json-comments%2Fdownload%2Fstrip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180" + +strip-outer@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/strip-outer/download/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" + dependencies: + escape-string-regexp "^1.0.2" + +style-search@^0.1.0: + version "0.1.0" + resolved "https://registry.npm.taobao.org/style-search/download/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" + +stylelint@9.3.0: + version "9.3.0" + resolved "https://registry.npm.taobao.org/stylelint/download/stylelint-9.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstylelint%2Fdownload%2Fstylelint-9.3.0.tgz#fe176e4e421ac10eac1a6b6d9f28e908eb58c5db" + dependencies: + autoprefixer "^8.0.0" + balanced-match "^1.0.0" + chalk "^2.4.1" + cosmiconfig "^5.0.0" + debug "^3.0.0" + execall "^1.0.0" + file-entry-cache "^2.0.0" + get-stdin "^6.0.0" + globby "^8.0.0" + globjoin "^0.1.4" + html-tags "^2.0.0" + ignore "^3.3.3" + import-lazy "^3.1.0" + imurmurhash "^0.1.4" + known-css-properties "^0.6.0" + lodash "^4.17.4" + log-symbols "^2.0.0" + mathml-tag-names "^2.0.1" + meow "^5.0.0" + micromatch "^2.3.11" + normalize-selector "^0.2.0" + pify "^3.0.0" + postcss "^6.0.16" + postcss-html "^0.28.0" + postcss-less "^2.0.0" + postcss-markdown "^0.28.0" + postcss-media-query-parser "^0.2.3" + postcss-reporter "^5.0.0" + postcss-resolve-nested-selector "^0.1.1" + postcss-safe-parser "^3.0.1" + postcss-sass "^0.3.0" + postcss-scss "^1.0.2" + postcss-selector-parser "^3.1.0" + postcss-syntax "^0.28.0" + postcss-value-parser "^3.3.0" + resolve-from "^4.0.0" + signal-exit "^3.0.2" + specificity "^0.3.1" + string-width "^2.1.0" + style-search "^0.1.0" + sugarss "^1.0.0" + svg-tags "^1.0.0" + table "^4.0.1" + +sugarss@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/sugarss/download/sugarss-1.0.1.tgz#be826d9003e0f247735f92365dc3fd7f1bae9e44" + dependencies: + postcss "^6.0.14" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + +supports-color@^3.2.3: + version "3.2.3" + resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + dependencies: + has-flag "^1.0.0" + +supports-color@^5.3.0, supports-color@^5.4.0: + version "5.5.0" + resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.1.0" + resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-7.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" + dependencies: + has-flag "^4.0.0" + +svg-tags@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/svg-tags/download/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" + +symbol-observable@1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/symbol-observable/download/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" + +table@^4.0.1: + version "4.0.3" + resolved "https://registry.npm.taobao.org/table/download/table-4.0.3.tgz#00b5e2b602f1794b9acaf9ca908a76386a7813bc" + dependencies: + ajv "^6.0.1" + ajv-keywords "^3.0.0" + chalk "^2.1.0" + lodash "^4.17.4" + slice-ansi "1.0.0" + string-width "^2.1.1" + +table@^5.2.3: + version "5.4.6" + resolved "https://registry.npm.taobao.org/table/download/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + +tapable@^1.1.3: + version "1.1.3" + resolved "https://registry.npm.taobao.org/tapable/download/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + +tar-stream@^1.5.2: + version "1.6.2" + resolved "https://registry.npm.taobao.org/tar-stream/download/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" + dependencies: + bl "^1.0.0" + buffer-alloc "^1.2.0" + end-of-stream "^1.0.0" + fs-constants "^1.0.0" + readable-stream "^2.3.0" + to-buffer "^1.1.1" + xtend "^4.0.0" + +taro-css-to-react-native@^2.0.4: + version "2.2.3" + resolved "https://registry.npm.taobao.org/taro-css-to-react-native/download/taro-css-to-react-native-2.2.3.tgz#6cd8a32a9bb97efea72870bad8bc94a5f9e54564" + dependencies: + camelize "^1.0.0" + css "^2.2.4" + css-color-keywords "^1.0.0" + css-mediaquery "^0.1.2" + postcss-value-parser "^3.3.0" + +term-size@^1.2.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/term-size/download/term-size-1.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fterm-size%2Fdownload%2Fterm-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" + dependencies: + execa "^0.7.0" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.npm.taobao.org/text-table/download/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + +throat@^2.0.2: + version "2.0.2" + resolved "https://registry.npm.taobao.org/throat/download/throat-2.0.2.tgz#a9fce808b69e133a632590780f342c30a6249b02" + +through2-filter@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/through2-filter/download/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254" + dependencies: + through2 "~2.0.0" + xtend "~4.0.0" + +through2@^2.0.0, through2@^2.0.3, through2@~2.0.0: + version "2.0.5" + resolved "https://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through@^2.3.6, through@^2.3.8: + version "2.3.8" + resolved "https://registry.npm.taobao.org/through/download/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + +timed-out@^4.0.0, timed-out@^4.0.1: + version "4.0.1" + resolved "https://registry.npm.taobao.org/timed-out/download/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.npm.taobao.org/tmp/download/tmp-0.0.33.tgz?cache=0&sync_timestamp=1588178571895&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftmp%2Fdownload%2Ftmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + dependencies: + os-tmpdir "~1.0.2" + +to-absolute-glob@^2.0.0: + version "2.0.2" + resolved "https://registry.npm.taobao.org/to-absolute-glob/download/to-absolute-glob-2.0.2.tgz#1865f43d9e74b0822db9f145b78cff7d0f7c849b" + dependencies: + is-absolute "^1.0.0" + is-negated-glob "^1.0.0" + +to-buffer@^1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/to-buffer/download/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" + +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-1.0.3.tgz?cache=0&sync_timestamp=1580550317222&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fto-fast-properties%2Fdownload%2Fto-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-2.0.0.tgz?cache=0&sync_timestamp=1580550317222&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fto-fast-properties%2Fdownload%2Fto-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.npm.taobao.org/to-object-path/download/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.npm.taobao.org/to-regex/download/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +to-through@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/to-through/download/to-through-2.0.0.tgz#fc92adaba072647bc0b67d6b03664aa195093af6" + dependencies: + through2 "^2.0.3" + +topo@3.x.x: + version "3.0.3" + resolved "https://registry.npm.taobao.org/topo/download/topo-3.0.3.tgz#d5a67fb2e69307ebeeb08402ec2a2a6f5f7ad95c" + dependencies: + hoek "6.x.x" + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.5.0.tgz?cache=0&sync_timestamp=1584646121003&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftough-cookie%2Fdownload%2Ftough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +traverse@0.6.6: + version "0.6.6" + resolved "https://registry.npm.taobao.org/traverse/download/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/trim-newlines/download/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + +trim-newlines@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/trim-newlines/download/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" + +trim-repeated@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/trim-repeated/download/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" + dependencies: + escape-string-regexp "^1.0.2" + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/trim-right/download/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + +trim-trailing-lines@^1.0.0: + version "1.1.3" + resolved "https://registry.npm.taobao.org/trim-trailing-lines/download/trim-trailing-lines-1.1.3.tgz#7f0739881ff76657b7776e10874128004b625a94" + +trim@0.0.1: + version "0.0.1" + resolved "https://registry.npm.taobao.org/trim/download/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" + +trough@^1.0.0: + version "1.0.5" + resolved "https://registry.npm.taobao.org/trough/download/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" + +tslib@^1.8.1, tslib@^1.9.0: + version "1.11.2" + resolved "https://registry.npm.taobao.org/tslib/download/tslib-1.11.2.tgz#9c79d83272c9a7aaf166f73915c9667ecdde3cc9" + +tsutils@^3.17.1: + version "3.17.1" + resolved "https://registry.npm.taobao.org/tsutils/download/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" + dependencies: + tslib "^1.8.1" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz?cache=0&sync_timestamp=1581364203962&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftweetnacl%2Fdownload%2Ftweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.npm.taobao.org/type-check/download/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + dependencies: + prelude-ls "~1.1.2" + +type-fest@^0.11.0: + version "0.11.0" + resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + +typescript@^3.2.2: + version "3.8.3" + resolved "https://registry.npm.taobao.org/typescript/download/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" + +ua-parser-js@^0.7.18: + version "0.7.21" + resolved "https://registry.npm.taobao.org/ua-parser-js/download/ua-parser-js-0.7.21.tgz#853cf9ce93f642f67174273cc34565ae6f308777" + +unbzip2-stream@^1.0.9: + version "1.4.2" + resolved "https://registry.npm.taobao.org/unbzip2-stream/download/unbzip2-stream-1.4.2.tgz#84eb9e783b186d8fb397515fbb656f312f1a7dbf" + dependencies: + buffer "^5.2.1" + through "^2.3.8" + +unc-path-regex@^0.1.2: + version "0.1.2" + resolved "https://registry.npm.taobao.org/unc-path-regex/download/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" + +unherit@^1.0.4: + version "1.1.3" + resolved "https://registry.npm.taobao.org/unherit/download/unherit-1.1.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funherit%2Fdownload%2Funherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22" + dependencies: + inherits "^2.0.0" + xtend "^4.0.0" + +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.npm.taobao.org/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.npm.taobao.org/unicode-match-property-ecmascript/download/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.1.0" + resolved "https://registry.npm.taobao.org/unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-1.1.0.tgz?cache=0&sync_timestamp=1583945910569&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funicode-property-aliases-ecmascript%2Fdownload%2Funicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + +unified@^6.0.0: + version "6.2.0" + resolved "https://registry.npm.taobao.org/unified/download/unified-6.2.0.tgz#7fbd630f719126d67d40c644b7e3f617035f6dba" + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-plain-obj "^1.1.0" + trough "^1.0.0" + vfile "^2.0.0" + x-is-string "^0.1.0" + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/union-value/download/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/uniq/download/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + +unique-stream@^2.0.2: + version "2.3.1" + resolved "https://registry.npm.taobao.org/unique-stream/download/unique-stream-2.3.1.tgz#c65d110e9a4adf9a6c5948b28053d9a8d04cbeac" + dependencies: + json-stable-stringify-without-jsonify "^1.0.1" + through2-filter "^3.0.0" + +unique-string@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/unique-string/download/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" + dependencies: + crypto-random-string "^1.0.0" + +unist-util-find-all-after@^1.0.2: + version "1.0.5" + resolved "https://registry.npm.taobao.org/unist-util-find-all-after/download/unist-util-find-all-after-1.0.5.tgz#5751a8608834f41d117ad9c577770c5f2f1b2899" + dependencies: + unist-util-is "^3.0.0" + +unist-util-is@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/unist-util-is/download/unist-util-is-3.0.0.tgz?cache=0&sync_timestamp=1581988511215&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funist-util-is%2Fdownload%2Funist-util-is-3.0.0.tgz#d9e84381c2468e82629e4a5be9d7d05a2dd324cd" + +unist-util-remove-position@^1.0.0: + version "1.1.4" + resolved "https://registry.npm.taobao.org/unist-util-remove-position/download/unist-util-remove-position-1.1.4.tgz#ec037348b6102c897703eee6d0294ca4755a2020" + dependencies: + unist-util-visit "^1.1.0" + +unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1: + version "1.1.2" + resolved "https://registry.npm.taobao.org/unist-util-stringify-position/download/unist-util-stringify-position-1.1.2.tgz#3f37fcf351279dcbca7480ab5889bb8a832ee1c6" + +unist-util-visit-parents@^2.0.0: + version "2.1.2" + resolved "https://registry.npm.taobao.org/unist-util-visit-parents/download/unist-util-visit-parents-2.1.2.tgz#25e43e55312166f3348cae6743588781d112c1e9" + dependencies: + unist-util-is "^3.0.0" + +unist-util-visit@^1.1.0: + version "1.4.1" + resolved "https://registry.npm.taobao.org/unist-util-visit/download/unist-util-visit-1.4.1.tgz#4724aaa8486e6ee6e26d7ff3c8685960d560b1e3" + dependencies: + unist-util-visit-parents "^2.0.0" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz?cache=0&sync_timestamp=1583530825899&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funiversalify%2Fdownload%2Funiversalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/unset-value/download/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +unzip-response@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/unzip-response/download/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" + +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.npm.taobao.org/upath/download/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + +update-notifier@^2.1.0: + version "2.5.0" + resolved "https://registry.npm.taobao.org/update-notifier/download/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" + dependencies: + boxen "^1.2.1" + chalk "^2.0.1" + configstore "^3.0.0" + import-lazy "^2.1.0" + is-ci "^1.0.10" + is-installed-globally "^0.1.0" + is-npm "^1.0.0" + latest-version "^3.0.0" + semver-diff "^2.0.0" + xdg-basedir "^3.0.0" + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.npm.taobao.org/uri-js/download/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.npm.taobao.org/urix/download/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/url-parse-lax/download/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + dependencies: + prepend-http "^1.0.1" + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/url-parse-lax/download/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + dependencies: + prepend-http "^2.0.0" + +url-to-options@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/url-to-options/download/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.npm.taobao.org/use/download/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.npm.taobao.org/uuid/download/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + +v8-compile-cache@^2.0.3: + version "2.1.0" + resolved "https://registry.npm.taobao.org/v8-compile-cache/download/v8-compile-cache-2.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fv8-compile-cache%2Fdownload%2Fv8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +value-or-function@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/value-or-function/download/value-or-function-3.0.0.tgz#1c243a50b595c1be54a754bfece8563b9ff8d813" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vfile-location@^2.0.0: + version "2.0.6" + resolved "https://registry.npm.taobao.org/vfile-location/download/vfile-location-2.0.6.tgz#8a274f39411b8719ea5728802e10d9e0dff1519e" + +vfile-message@^1.0.0: + version "1.1.1" + resolved "https://registry.npm.taobao.org/vfile-message/download/vfile-message-1.1.1.tgz#5833ae078a1dfa2d96e9647886cd32993ab313e1" + dependencies: + unist-util-stringify-position "^1.1.1" + +vfile@^2.0.0: + version "2.3.0" + resolved "https://registry.npm.taobao.org/vfile/download/vfile-2.3.0.tgz#e62d8e72b20e83c324bc6c67278ee272488bf84a" + dependencies: + is-buffer "^1.1.4" + replace-ext "1.0.0" + unist-util-stringify-position "^1.0.0" + vfile-message "^1.0.0" + +vinyl-file@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/vinyl-file/download/vinyl-file-2.0.0.tgz#a7ebf5ffbefda1b7d18d140fcb07b223efb6751a" + dependencies: + graceful-fs "^4.1.2" + pify "^2.3.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + strip-bom-stream "^2.0.0" + vinyl "^1.1.0" + +vinyl-fs@^3.0.2: + version "3.0.3" + resolved "https://registry.npm.taobao.org/vinyl-fs/download/vinyl-fs-3.0.3.tgz#c85849405f67428feabbbd5c5dbdd64f47d31bc7" + dependencies: + fs-mkdirp-stream "^1.0.0" + glob-stream "^6.1.0" + graceful-fs "^4.0.0" + is-valid-glob "^1.0.0" + lazystream "^1.0.0" + lead "^1.0.0" + object.assign "^4.0.4" + pumpify "^1.3.5" + readable-stream "^2.3.3" + remove-bom-buffer "^3.0.0" + remove-bom-stream "^1.2.0" + resolve-options "^1.1.0" + through2 "^2.0.0" + to-through "^2.0.0" + value-or-function "^3.0.0" + vinyl "^2.0.0" + vinyl-sourcemap "^1.1.0" + +vinyl-sourcemap@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/vinyl-sourcemap/download/vinyl-sourcemap-1.1.0.tgz#92a800593a38703a8cdb11d8b300ad4be63b3e16" + dependencies: + append-buffer "^1.0.2" + convert-source-map "^1.5.0" + graceful-fs "^4.1.6" + normalize-path "^2.1.1" + now-and-later "^2.0.0" + remove-bom-buffer "^3.0.0" + vinyl "^2.0.0" + +vinyl@^1.1.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/vinyl/download/vinyl-1.2.0.tgz#5c88036cf565e5df05558bfc911f8656df218884" + dependencies: + clone "^1.0.0" + clone-stats "^0.0.1" + replace-ext "0.0.1" + +vinyl@^2.0.0, vinyl@^2.0.1, vinyl@^2.1.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/vinyl/download/vinyl-2.2.0.tgz#d85b07da96e458d25b2ffe19fece9f2caa13ed86" + dependencies: + clone "^2.1.1" + clone-buffer "^1.0.0" + clone-stats "^1.0.0" + cloneable-readable "^1.0.0" + remove-trailing-separator "^1.0.1" + replace-ext "^1.0.0" + +vue-template-compiler@^2.6.10: + version "2.6.11" + resolved "https://registry.npm.taobao.org/vue-template-compiler/download/vue-template-compiler-2.6.11.tgz#c04704ef8f498b153130018993e56309d4698080" + dependencies: + de-indent "^1.0.2" + he "^1.1.0" + +walkdir@^0.3.2: + version "0.3.2" + resolved "https://registry.npm.taobao.org/walkdir/download/walkdir-0.3.2.tgz#ac8437a288c295656848ebc19981ebc677a5f590" + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/wcwidth/download/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + dependencies: + defaults "^1.0.3" + +whatwg-fetch@>=0.10.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/whatwg-fetch/download/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + +which-pm@^1.0.1: + version "1.1.0" + resolved "https://registry.npm.taobao.org/which-pm/download/which-pm-1.1.0.tgz#5c0fc3f722f003707dea7b20cd17effd3ad2fc33" + dependencies: + load-yaml-file "^0.1.0" + path-exists "^3.0.0" + +which@^1.2.14, which@^1.2.8, which@^1.2.9: + version "1.3.1" + resolved "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz?cache=0&sync_timestamp=1574116720213&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + dependencies: + isexe "^2.0.0" + +widest-line@^2.0.0: + version "2.0.1" + resolved "https://registry.npm.taobao.org/widest-line/download/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" + dependencies: + string-width "^2.1.1" + +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.npm.taobao.org/word-wrap/download/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +write-file-atomic@^2.0.0: + version "2.4.3" + resolved "https://registry.npm.taobao.org/write-file-atomic/download/write-file-atomic-2.4.3.tgz?cache=0&sync_timestamp=1582584103455&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwrite-file-atomic%2Fdownload%2Fwrite-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +write@1.0.3: + version "1.0.3" + resolved "https://registry.npm.taobao.org/write/download/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + dependencies: + mkdirp "^0.5.1" + +write@^0.2.1: + version "0.2.1" + resolved "https://registry.npm.taobao.org/write/download/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + dependencies: + mkdirp "^0.5.1" + +x-is-string@^0.1.0: + version "0.1.0" + resolved "https://registry.npm.taobao.org/x-is-string/download/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" + +xdg-basedir@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/xdg-basedir/download/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" + +xml2js@^0.4.19: + version "0.4.23" + resolved "https://registry.npm.taobao.org/xml2js/download/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" + +xmlbuilder@~11.0.0: + version "11.0.1" + resolved "https://registry.npm.taobao.org/xmlbuilder/download/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + +xregexp@^4.3.0: + version "4.3.0" + resolved "https://registry.npm.taobao.org/xregexp/download/xregexp-4.3.0.tgz#7e92e73d9174a99a59743f67a4ce879a04b5ae50" + dependencies: + "@babel/runtime-corejs3" "^7.8.3" + +xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.npm.taobao.org/xtend/download/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + +xxhashjs@^0.2.1, xxhashjs@^0.2.2: + version "0.2.2" + resolved "https://registry.npm.taobao.org/xxhashjs/download/xxhashjs-0.2.2.tgz#8a6251567621a1c46a5ae204da0249c7f8caa9d8" + dependencies: + cuint "^0.2.2" + +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/y18n/download/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + +yaml@^1.7.2: + version "1.9.2" + resolved "https://registry.npm.taobao.org/yaml/download/yaml-1.9.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyaml%2Fdownload%2Fyaml-1.9.2.tgz#f0cfa865f003ab707663e4f04b3956957ea564ed" + dependencies: + "@babel/runtime" "^7.9.2" + +yargs-parser@^10.0.0: + version "10.1.0" + resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" + dependencies: + camelcase "^4.1.0" + +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^13.2.2: + version "13.3.2" + resolved "https://registry.npm.taobao.org/yargs/download/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + +yauzl@2.10.0, yauzl@^2.4.2: + version "2.10.0" + resolved "https://registry.npm.taobao.org/yauzl/download/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" diff --git a/packages/taro-helper/index.js b/packages/taro-helper/index.js new file mode 100644 index 000000000000..437a6d4788f4 --- /dev/null +++ b/packages/taro-helper/index.js @@ -0,0 +1,2 @@ +module.exports = require('./dist/index.js').default +module.exports.default = module.exports diff --git a/packages/taro-helper/jest.config.js b/packages/taro-helper/jest.config.js new file mode 100644 index 000000000000..758fa1330e87 --- /dev/null +++ b/packages/taro-helper/jest.config.js @@ -0,0 +1,4 @@ +module.exports = { + preset: 'ts-jest', + testEnvironment: 'node' +} diff --git a/packages/taro-helper/package.json b/packages/taro-helper/package.json new file mode 100644 index 000000000000..652bee7f85ea --- /dev/null +++ b/packages/taro-helper/package.json @@ -0,0 +1,55 @@ +{ + "name": "@tarojs/helper", + "version": "3.0.0-beta.6", + "description": "Taro Helper", + "main": "index.js", + "types": "types/index.d.ts", + "scripts": { + "build": "run-s clean prod", + "dev": "tsc -w", + "prod": "tsc", + "clean": "rimraf dist", + "prepack": "npm run build", + "test": "jest", + "test:dev": "jest --watch" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/NervJS/taro.git" + }, + "files": [ + "index.js", + "dist" + ], + "keywords": [ + "taro" + ], + "author": "luckyadam", + "license": "MIT", + "bugs": { + "url": "https://github.com/NervJS/taro/issues" + }, + "homepage": "https://github.com/NervJS/taro#readme", + "dependencies": { + "@babel/core": "7.9.0", + "@babel/plugin-proposal-class-properties": "7.8.3", + "@babel/plugin-proposal-decorators": "7.8.3", + "@babel/plugin-proposal-object-rest-spread": "7.9.0", + "@babel/plugin-transform-runtime": "7.9.0", + "@babel/preset-env": "7.9.0", + "@babel/preset-typescript": "7.9.0", + "@babel/register": "7.9.0", + "@babel/runtime": "7.9.2", + "@tarojs/taro": "3.0.0-beta.6", + "babel-plugin-transform-react-jsx": "^6.24.1", + "chalk": "3.0.0", + "chokidar": "3.3.1", + "cross-spawn": "7.0.1", + "debug": "4.1.1", + "find-yarn-workspace-root": "1.2.1", + "fs-extra": "8.1.0", + "lodash": "4.17.15", + "resolve": "1.15.1", + "yauzl": "2.10.0" + } +} diff --git a/packages/taro-helper/src/babelRegister.ts b/packages/taro-helper/src/babelRegister.ts new file mode 100644 index 000000000000..23710fb5e6d3 --- /dev/null +++ b/packages/taro-helper/src/babelRegister.ts @@ -0,0 +1,28 @@ +import * as path from 'path' + +export default function createBabelRegister ({ only }) { + require('@babel/register')({ + only: Array.from(new Set([...only])), + presets: [ + require.resolve('@babel/preset-env'), + require.resolve('@babel/preset-typescript') + ], + plugins: [ + [require.resolve('@babel/plugin-proposal-decorators'), { + legacy: true + }], + require.resolve('@babel/plugin-proposal-class-properties'), + require.resolve('@babel/plugin-proposal-object-rest-spread'), + [require.resolve('@babel/plugin-transform-runtime'), { + corejs: false, + helpers: true, + regenerator: true, + useESModules: false, + absoluteRuntime: path.resolve(__dirname, '..', 'node_modules/@babel/runtime') + }] + ], + extensions: ['.jsx', '.js', '.ts', '.tsx'], + babelrc: false, + cache: false + }) +} diff --git a/packages/taro-helper/src/constants.ts b/packages/taro-helper/src/constants.ts new file mode 100644 index 000000000000..fae49590c450 --- /dev/null +++ b/packages/taro-helper/src/constants.ts @@ -0,0 +1,205 @@ +import * as os from 'os' +import * as chalk from 'chalk' + +export const PLATFORMS = {} + +export const enum processTypeEnum { + START = 'start', + CREATE = 'create', + COMPILE = 'compile', + CONVERT = 'convert', + COPY = 'copy', + GENERATE = 'generate', + MODIFY = 'modify', + ERROR = 'error', + WARNING = 'warning', + UNLINK = 'unlink', + REFERENCE = 'reference', + REMIND = 'remind' +} + +export interface IProcessTypeMap { + [key: string] : { + name: string, + color: string | chalk.Chalk + } +} + +export const processTypeMap: IProcessTypeMap = { + [processTypeEnum.CREATE]: { + name: '创建', + color: 'cyan' + }, + [processTypeEnum.COMPILE]: { + name: '编译', + color: 'green' + }, + [processTypeEnum.CONVERT]: { + name: '转换', + color: chalk.rgb(255, 136, 0) + }, + [processTypeEnum.COPY]: { + name: '拷贝', + color: 'magenta' + }, + [processTypeEnum.GENERATE]: { + name: '生成', + color: 'blue' + }, + [processTypeEnum.MODIFY]: { + name: '修改', + color: 'yellow' + }, + [processTypeEnum.ERROR]: { + name: '错误', + color: 'red' + }, + [processTypeEnum.WARNING]: { + name: '警告', + color: 'yellowBright' + }, + [processTypeEnum.UNLINK]: { + name: '删除', + color: 'magenta' + }, + [processTypeEnum.START]: { + name: '启动', + color: 'green' + }, + [processTypeEnum.REFERENCE]: { + name: '引用', + color: 'blue' + }, + [processTypeEnum.REMIND]: { + name: '提示', + color: 'green' + } +} + +export const CSS_EXT: string[] = ['.css', '.scss', '.sass', '.less', '.styl', '.wxss', '.acss'] +export const SCSS_EXT: string[] = ['.scss'] +export const JS_EXT: string[] = ['.js', '.jsx'] +export const TS_EXT: string[] = ['.ts', '.tsx'] +export const UX_EXT: string[] = ['.ux'] +export const SCRIPT_EXT: string[] = JS_EXT.concat(TS_EXT) +export const VUE_EXT: string[] = ['.vue'] + +export const REG_JS: RegExp = /\.js(\?.*)?$/ +export const REG_SCRIPT: RegExp = /\.(js|jsx)(\?.*)?$/ +export const REG_TYPESCRIPT: RegExp = /\.(tsx|ts)(\?.*)?$/ +export const REG_SCRIPTS: RegExp = /\.[tj]sx?$/i +export const REG_VUE = /\.vue$/i +export const REG_SASS: RegExp = /\.(s[ac]ss)$/ +export const REG_LESS: RegExp = /\.less$/ +export const REG_STYLUS: RegExp = /\.styl$/ +export const REG_STYLE: RegExp = /\.(css|scss|sass|less|styl|wxss|acss|ttss|jxss)(\?.*)?$/ +export const REG_CSS = /\.(css|wxss|acss|ttss)(\?.*)?$/ +export const REG_MEDIA: RegExp = /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/ +export const REG_IMAGE: RegExp = /\.(png|jpe?g|gif|bpm|svg|webp)(\?.*)?$/ +export const REG_FONT: RegExp = /\.(woff2?|eot|ttf|otf)(\?.*)?$/ +export const REG_JSON: RegExp = /\.json(\?.*)?$/ +export const REG_UX: RegExp = /\.ux(\?.*)?$/ +export const REG_TEMPLATE: RegExp = /\.(wxml|axml|ttml|qml|swan|jxml)(\?.*)?$/ +export const REG_WXML_IMPORT: RegExp = / any +export interface IInstallOptions { + dev: boolean, + peerDependencies?: boolean +} const defaultInstallOptions: IInstallOptions = { dev: false, @@ -125,24 +128,12 @@ export function installNpmPkg (pkgList: string[] | string, options: IInstallOpti return output } -export const callPlugin: pluginFunction = async ( - pluginName: string, - content: string | null, - file: string, - config: object, - root: string -) => { +export const callPlugin: pluginFunction = async (pluginName: string, content: string | null, file: string, config: object, root: string) => { const pluginFn = await getNpmPkg(`${taroPluginPrefix}${pluginName}`, root) return pluginFn(content, file, config) } -export const callPluginSync: pluginFunction = ( - pluginName: string, - content: string | null, - file: string, - config: object, - root: string -) => { +export const callPluginSync: pluginFunction = (pluginName: string, content: string | null, file: string, config: object, root: string) => { const pluginFn = getNpmPkgSync(`${taroPluginPrefix}${pluginName}`, root) return pluginFn(content, file, config) } diff --git a/packages/taro-helper/src/utils.ts b/packages/taro-helper/src/utils.ts new file mode 100644 index 000000000000..cf5fc923dfcc --- /dev/null +++ b/packages/taro-helper/src/utils.ts @@ -0,0 +1,508 @@ +import * as fs from 'fs-extra' +import * as path from 'path' +import * as os from 'os' +import { Transform } from 'stream' +import * as child_process from 'child_process' + +import * as chalk from 'chalk' +import * as findWorkspaceRoot from 'find-yarn-workspace-root' +import { isPlainObject, camelCase, mergeWith, flatMap } from 'lodash' +import * as yauzl from 'yauzl' + +import { + processTypeEnum, + processTypeMap, + TARO_CONFIG_FLODER, + SCRIPT_EXT, + NODE_MODULES_REG, + PLATFORMS, + CSS_IMPORT_REG, + CSS_EXT +} from './constants' +import createBabelRegister from './babelRegister' + +const execSync = child_process.execSync + +export function normalizePath (path: string) { + return path.replace(/\\/g, '/').replace(/\/{2,}/g, '/') +} + +export const isNodeModule = (filename: string) => NODE_MODULES_REG.test(filename) + +export function isNpmPkg (name: string): boolean { + if (/^(\.|\/)/.test(name)) { + return false + } + return true +} + +export function isQuickAppPkg (name: string): boolean { + return /^@(system|service)\.[a-zA-Z]{1,}/.test(name) +} + +export function isAliasPath (name: string, pathAlias: object = {}): boolean { + const prefixs = Object.keys(pathAlias) + if (prefixs.length === 0) { + return false + } + return prefixs.includes(name) || (new RegExp(`^(${prefixs.join('|')})/`).test(name)) +} + +export function replaceAliasPath (filePath: string, name: string, pathAlias: object = {}) { + // 后续的 path.join 在遇到符号链接时将会解析为真实路径,如果 + // 这里的 filePath 没有做同样的处理,可能会导致 import 指向 + // 源代码文件,导致文件被意外修改 + filePath = fs.realpathSync(filePath) + + const prefixs = Object.keys(pathAlias) + if (prefixs.includes(name)) { + return promoteRelativePath(path.relative(filePath, fs.realpathSync(resolveScriptPath(pathAlias[name])))) + } + const reg = new RegExp(`^(${prefixs.join('|')})/(.*)`) + name = name.replace(reg, function (m, $1, $2) { + return promoteRelativePath(path.relative(filePath, path.join(pathAlias[$1], $2))) + }) + return name +} + +export function promoteRelativePath (fPath: string): string { + const fPathArr = fPath.split(path.sep) + let dotCount = 0 + fPathArr.forEach(item => { + if (item.indexOf('..') >= 0) { + dotCount++ + } + }) + if (dotCount === 1) { + fPathArr.splice(0, 1, '.') + return fPathArr.join('/') + } + if (dotCount > 1) { + fPathArr.splice(0, 1) + return fPathArr.join('/') + } + return normalizePath(fPath) +} + +export function resolveStylePath (p: string): string { + const realPath = p + const removeExtPath = p.replace(path.extname(p), '') + const taroEnv = process.env.TARO_ENV + for (let i = 0; i < CSS_EXT.length; i++) { + const item = CSS_EXT[i] + if (taroEnv) { + if (fs.existsSync(`${removeExtPath}.${taroEnv}${item}`)) { + return `${removeExtPath}.${taroEnv}${item}` + } + } + if (fs.existsSync(`${p}${item}`)) { + return `${p}${item}` + } + } + return realPath +} + +export function printLog (type: processTypeEnum, tag: string, filePath?: string) { + const typeShow = processTypeMap[type] + const tagLen = tag.replace(/[\u0391-\uFFE5]/g, 'aa').length + const tagFormatLen = 8 + if (tagLen < tagFormatLen) { + const rightPadding = new Array(tagFormatLen - tagLen + 1).join(' ') + tag += rightPadding + } + const padding = '' + filePath = filePath || '' + if (typeof typeShow.color === 'string') { + console.log(chalk[typeShow.color](typeShow.name), padding, tag, padding, filePath) + } else { + console.log(typeShow.color(typeShow.name), padding, tag, padding, filePath) + } +} + +export function recursiveFindNodeModules (filePath: string, lastFindPath?: string): string { + if (lastFindPath && (normalizePath(filePath) === normalizePath(lastFindPath))) { + return filePath + } + const dirname = path.dirname(filePath) + const workspaceRoot = findWorkspaceRoot(dirname) + const nodeModules = path.join(workspaceRoot || dirname, 'node_modules') + if (fs.existsSync(nodeModules)) { + return nodeModules + } + if (dirname.split(path.sep).length <= 1) { + printLog(processTypeEnum.ERROR, `在${dirname}目录下`, `未找到node_modules文件夹,请先安装相关依赖库!`) + return nodeModules + } + return recursiveFindNodeModules(dirname, filePath) +} + +export function getUserHomeDir (): string { + function homedir(): string { + const env = process.env + const home = env.HOME + const user = env.LOGNAME || env.USER || env.LNAME || env.USERNAME + + if (process.platform === 'win32') { + return env.USERPROFILE || '' + env.HOMEDRIVE + env.HOMEPATH || home || '' + } + + if (process.platform === 'darwin') { + return home || (user ? '/Users/' + user : '') + } + + if (process.platform === 'linux') { + return home || (process.getuid() === 0 ? '/root' : (user ? '/home/' + user : '')) + } + + return home || '' + } + return typeof (os.homedir as (() => string) | undefined) === 'function' ? os.homedir() : homedir() +} + +export function getTaroPath (): string { + const taroPath = path.join(getUserHomeDir(), TARO_CONFIG_FLODER) + if (!fs.existsSync(taroPath)) { + fs.ensureDirSync(taroPath) + } + return taroPath +} + +export function getConfig (): object { + const configPath = path.join(getTaroPath(), 'config.json') + if (fs.existsSync(configPath)) { + return require(configPath) + } + return {} +} + +export function getSystemUsername (): string { + const userHome = getUserHomeDir() + const systemUsername = process.env.USER || path.basename(userHome) + return systemUsername +} + +export function shouldUseYarn (): boolean { + try { + execSync('yarn --version', { stdio: 'ignore' }) + return true + } catch (e) { + return false + } +} + +export function shouldUseCnpm (): boolean { + try { + execSync('cnpm --version', { stdio: 'ignore' }) + return true + } catch (e) { + return false + } +} + +export function isEmptyObject (obj: any): boolean { + if (obj == null) { + return true + } + for (const key in obj) { + if (obj.hasOwnProperty(key)) { + return false + } + } + return true +} + +export function resolveMainFilePath (p: string, extArrs = SCRIPT_EXT): string { + const realPath = p + const taroEnv = process.env.TARO_ENV + for (let i = 0; i < extArrs.length; i++) { + const item = extArrs[i] + if (taroEnv) { + if (fs.existsSync(`${p}.${taroEnv}${item}`)) { + return `${p}.${taroEnv}${item}` + } + if (fs.existsSync(`${p}${path.sep}index.${taroEnv}${item}`)) { + return `${p}${path.sep}index.${taroEnv}${item}` + } + if (fs.existsSync(`${p.replace(/\/index$/, `.${taroEnv}/index`)}${item}`)) { + return `${p.replace(/\/index$/, `.${taroEnv}/index`)}${item}` + } + } + if (fs.existsSync(`${p}${item}`)) { + return `${p}${item}` + } + if (fs.existsSync(`${p}${path.sep}index${item}`)) { + return `${p}${path.sep}index${item}` + } + } + return realPath +} + +export function resolveScriptPath (p: string): string { + return resolveMainFilePath(p) +} + +export function generateEnvList (env: object): object { + const res = { } + if (env && !isEmptyObject(env)) { + for (const key in env) { + try { + res[`process.env.${key}`] = JSON.parse(env[key]) + } catch (err) { + res[`process.env.${key}`] = env[key] + } + } + } + return res +} + +export function generateConstantsList (constants: object): object { + const res = { } + if (constants && !isEmptyObject(constants)) { + for (const key in constants) { + if (isPlainObject(constants[key])) { + res[key] = generateConstantsList(constants[key]) + } else { + try { + res[key] = JSON.parse(constants[key]) + } catch (err) { + res[key] = constants[key] + } + } + } + } + return res +} + +export function cssImports (content: string): string[] { + let match: RegExpExecArray | null + const results: string[] = [] + content = String(content).replace(/\/\*.+?\*\/|\/\/.*(?=[\n\r])/g, '') + while ((match = CSS_IMPORT_REG.exec(content))) { + results.push(match[2]) + } + return results +} + +/*eslint-disable*/ +const retries = (process.platform === 'win32') ? 100 : 1 +export function emptyDirectory (dirPath: string, opts: { excludes: string[] } = { excludes: [] }) { + if (fs.existsSync(dirPath)) { + fs.readdirSync(dirPath).forEach(file => { + const curPath = path.join(dirPath, file) + if (fs.lstatSync(curPath).isDirectory()) { + let removed = false + let i = 0 // retry counter + do { + try { + if (!opts.excludes.length || !opts.excludes.some(item => curPath.indexOf(item) >= 0)) { + emptyDirectory(curPath) + fs.rmdirSync(curPath) + } + removed = true + } catch (e) { + } finally { + if (++i < retries) { + continue + } + } + } while (!removed) + } else { + fs.unlinkSync(curPath) + } + }) + } +} +/* eslint-enable */ + +export const pascalCase: (str: string) => string + = (str: string): string => str.charAt(0).toUpperCase() + camelCase(str.substr(1)) + +export function getInstalledNpmPkgPath (pkgName: string, basedir: string): string | null { + const resolvePath = require('resolve') + try { + return resolvePath.sync(`${pkgName}/package.json`, { basedir }) + } catch (err) { + return null + } +} + +export function getInstalledNpmPkgVersion (pkgName: string, basedir: string): string | null { + const pkgPath = getInstalledNpmPkgPath(pkgName, basedir) + if (!pkgPath) { + return null + } + return fs.readJSONSync(pkgPath).version +} + +export const recursiveMerge = (src: Partial, ...args: (Partial | undefined)[]) => { + return mergeWith(src, ...args, (value, srcValue, key, obj, source) => { + const typeValue = typeof value + const typeSrcValue = typeof srcValue + if (typeValue !== typeSrcValue) return + if (Array.isArray(value) && Array.isArray(srcValue)) { + return value.concat(srcValue) + } + if (typeValue === 'object') { + return recursiveMerge(value, srcValue) + } + }) +} + +export const mergeVisitors = (src, ...args) => { + const validFuncs = ['exit', 'enter'] + return mergeWith(src, ...args, (value, srcValue, key, object, srcObject) => { + if (!object.hasOwnProperty(key) || !srcObject.hasOwnProperty(key)) { + return undefined + } + + const shouldMergeToArray = validFuncs.indexOf(key) > -1 + if (shouldMergeToArray) { + return flatMap([value, srcValue]) + } + const [newValue, newSrcValue] = [value, srcValue].map(v => { + if (typeof v === 'function') { + return { + enter: v + } + } else { + return v + } + }) + return mergeVisitors(newValue, newSrcValue) + }) +} + +export const applyArrayedVisitors = obj => { + let key + for (key in obj) { + const funcs = obj[key] + if (Array.isArray(funcs)) { + obj[key] = (astPath, ...args) => { + funcs.forEach(func => { + func(astPath, ...args) + }) + } + } else if (typeof funcs === 'object') { + applyArrayedVisitors(funcs) + } + } + return obj +} + +export function unzip (zipPath) { + return new Promise((resolve, reject) => { + yauzl.open(zipPath, { lazyEntries: true }, (err, zipfile) => { + if (err) throw err + zipfile.on('close', () => { + fs.removeSync(zipPath) + resolve() + }) + zipfile.readEntry() + zipfile.on('error', (err) => { + reject(err) + }) + zipfile.on('entry', entry => { + if (/\/$/.test(entry.fileName)) { + const fileNameArr = entry.fileName.replace(/\\/g, '/').split('/') + fileNameArr.shift() + const fileName = fileNameArr.join('/') + fs.ensureDirSync(path.join(path.dirname(zipPath), fileName)) + zipfile.readEntry() + } else { + zipfile.openReadStream(entry, (err, readStream) => { + if (err) throw err + const filter = new Transform() + filter._transform = function (chunk, encoding, cb) { + cb(undefined, chunk) + } + filter._flush = function (cb) { + cb() + zipfile.readEntry() + } + const fileNameArr = normalizePath(entry.fileName).split('/') + fileNameArr.shift() + const fileName = fileNameArr.join('/') + const writeStream = fs.createWriteStream(path.join(path.dirname(zipPath), fileName)) + writeStream.on('close', () => {}) + readStream + .pipe(filter) + .pipe(writeStream) + }) + } + }) + }) + }) +} + +export const getAllFilesInFloder = async ( + floder: string, + filter: string[] = [] +): Promise => { + let files: string[] = [] + const list = readDirWithFileTypes(floder) + + await Promise.all( + list.map(async item => { + const itemPath = path.join(floder, item.name) + if (item.isDirectory) { + const _files = await getAllFilesInFloder(itemPath, filter) + files = [...files, ..._files] + } else if (item.isFile) { + if (!filter.find(rule => rule === item.name)) files.push(itemPath) + } + }) + ) + + return files +} + +export interface FileStat { + name: string + isDirectory: boolean + isFile: boolean +} + +export function readDirWithFileTypes (floder: string): FileStat[] { + const list = fs.readdirSync(floder) + const res = list.map(name => { + const stat =fs.statSync(path.join(floder, name)) + return { + name, + isDirectory: stat.isDirectory(), + isFile: stat.isFile() + } + }) + return res +} + +export function extnameExpRegOf (filePath: string): RegExp { + return new RegExp(`${path.extname(filePath)}$`) +} + +export function addPlatforms (platform: string) { + const upperPlatform = platform.toLocaleUpperCase() + if (PLATFORMS[upperPlatform]) return + PLATFORMS[upperPlatform] = platform +} + +export const getModuleDefaultExport = exports => exports.__esModule ? exports.default : exports + +export function removeHeadSlash (str: string) { + return str.replace(/^(\/|\\)/, '') +} + +export function readConfig (configPath: string) { + let result: any = {} + if (fs.existsSync(configPath)) { + try { + createBabelRegister({ + only: [configPath] + }) + delete require.cache[configPath] + result = getModuleDefaultExport(require(configPath)) + } catch (err) { + throw err + } + } + return result +} diff --git a/packages/taro-mini-runner/src/config/tsconfig.json b/packages/taro-helper/tsconfig.json similarity index 58% rename from packages/taro-mini-runner/src/config/tsconfig.json rename to packages/taro-helper/tsconfig.json index 7ecbfd0cf517..9d0c1790e7a1 100644 --- a/packages/taro-mini-runner/src/config/tsconfig.json +++ b/packages/taro-helper/tsconfig.json @@ -1,28 +1,29 @@ { "compilerOptions": { "allowSyntheticDefaultImports": true, + "allowJs": true, "baseUrl": ".", - "declaration": false, "experimentalDecorators": true, - "jsx": "react", - "jsxFactory": "Nerv.createElement", + "lib": ["esnext", "dom"], "module": "commonjs", "moduleResolution": "node", "noImplicitAny": false, "noUnusedLocals": true, - "outDir": "./dist/", + "outDir": "dist/", "preserveConstEnums": true, "removeComments": false, - "rootDir": ".", - "sourceMap": true, + "rootDir": "./src", + "skipLibCheck": true, + "sourceMap": false, "strictNullChecks": true, - "target": "es6" + "target": "es2015", + "traceResolution": false, + "types": ["jest"] }, "include": [ - "src/**/*" + "./src", ], "exclude": [ - "node_modules" - ], - "compileOnSave": false + "./src/__tests__" + ] } diff --git a/packages/taro-helper/types/babelRegister.d.ts b/packages/taro-helper/types/babelRegister.d.ts new file mode 100644 index 000000000000..cf12e7cb0e1b --- /dev/null +++ b/packages/taro-helper/types/babelRegister.d.ts @@ -0,0 +1,3 @@ +export default function createBabelRegister({ only }: { + only: any; +}): void; diff --git a/packages/taro-helper/types/constants.d.ts b/packages/taro-helper/types/constants.d.ts new file mode 100644 index 000000000000..7b86d527966b --- /dev/null +++ b/packages/taro-helper/types/constants.d.ts @@ -0,0 +1,81 @@ +import * as chalk from 'chalk'; +export declare const PLATFORMS: {}; +export declare const enum processTypeEnum { + START = "start", + CREATE = "create", + COMPILE = "compile", + CONVERT = "convert", + COPY = "copy", + GENERATE = "generate", + MODIFY = "modify", + ERROR = "error", + WARNING = "warning", + UNLINK = "unlink", + REFERENCE = "reference", + REMIND = "remind" +} +export interface IProcessTypeMap { + [key: string]: { + name: string; + color: string | chalk.Chalk; + }; +} +export declare const processTypeMap: IProcessTypeMap; +export declare const CSS_EXT: string[]; +export declare const SCSS_EXT: string[]; +export declare const JS_EXT: string[]; +export declare const TS_EXT: string[]; +export declare const UX_EXT: string[]; +export declare const SCRIPT_EXT: string[]; +export declare const VUE_EXT: string[]; +export declare const REG_JS: RegExp; +export declare const REG_SCRIPT: RegExp; +export declare const REG_TYPESCRIPT: RegExp; +export declare const REG_SCRIPTS: RegExp; +export declare const REG_VUE: RegExp; +export declare const REG_SASS: RegExp; +export declare const REG_LESS: RegExp; +export declare const REG_STYLUS: RegExp; +export declare const REG_STYLE: RegExp; +export declare const REG_CSS: RegExp; +export declare const REG_MEDIA: RegExp; +export declare const REG_IMAGE: RegExp; +export declare const REG_FONT: RegExp; +export declare const REG_JSON: RegExp; +export declare const REG_UX: RegExp; +export declare const REG_TEMPLATE: RegExp; +export declare const REG_WXML_IMPORT: RegExp; +export declare const REG_URL: RegExp; +export declare const CSS_IMPORT_REG: RegExp; +export declare const NODE_MODULES = "node_modules"; +export declare const NODE_MODULES_REG: RegExp; +export declare const PROJECT_CONFIG = "config/index.js"; +export declare const DEVICE_RATIO: { + 640: number; + 750: number; + 828: number; +}; +export declare const FILE_PROCESSOR_MAP: { + '.js': string; + '.scss': string; + '.sass': string; + '.less': string; + '.styl': string; +}; +export declare const UPDATE_PACKAGE_LIST: string[]; +export declare const taroJsComponents = "@tarojs/components"; +export declare const taroJsQuickAppComponents = "@tarojs/components-qa"; +export declare const taroJsFramework = "@tarojs/taro"; +export declare const taroJsRedux = "@tarojs/redux"; +export declare const taroJsMobx = "@tarojs/mobx"; +export declare const taroJsMobxCommon = "@tarojs/mobx-common"; +export declare const DEVICE_RATIO_NAME = "deviceRatio"; +export declare const isWindows: boolean; +export declare const DEFAULT_TEMPLATE_SRC = "github:NervJS/taro-project-templates#2.0"; +export declare const TARO_CONFIG_FLODER = ".taro2"; +export declare const TARO_BASE_CONFIG = "index.json"; +export declare const OUTPUT_DIR = "dist"; +export declare const SOURCE_DIR = "src"; +export declare const TEMP_DIR = ".temp"; +export declare const NPM_DIR = "npm"; +export declare const ENTRY = "app"; diff --git a/packages/taro-helper/types/index.d.ts b/packages/taro-helper/types/index.d.ts new file mode 100644 index 000000000000..6f72dd3ddfb7 --- /dev/null +++ b/packages/taro-helper/types/index.d.ts @@ -0,0 +1,142 @@ +import fs from 'fs-extra'; +import * as chokidar from 'chokidar'; +import createDebug from 'debug'; +import chalk from 'chalk'; +import { processTypeEnum, IProcessTypeMap } from './constants'; +import * as utils from './utils'; +import * as npm from './npm'; +import createBabelRegister from './babelRegister'; + +export declare enum META_TYPE { + ENTRY = 'ENTRY', + PAGE = 'PAGE', + COMPONENT = 'COMPONENT', + NORMAL = 'NORMAL', + STATIC = 'STATIC', + CONFIG = 'CONFIG', + EXPORTS = 'EXPORTS' +} + +export declare enum FRAMEWORK_MAP { + VUE = 'vue', + REACT = 'react', + NERV = 'nerv' +} + +declare interface helper { + npm: typeof npm; + createBabelRegister: typeof createBabelRegister; + fs: typeof fs; + chokidar: typeof chokidar; + chalk: typeof chalk; + createDebug: createDebug.Debug & { + debug: createDebug.Debug; + default: createDebug.Debug; + }; + normalizePath(path: string): string; + isNpmPkg(name: string): boolean; + isQuickAppPkg(name: string): boolean; + isAliasPath(name: string, pathAlias?: object): boolean; + replaceAliasPath(filePath: string, name: string, pathAlias?: object): string; + promoteRelativePath(fPath: string): string; + resolveStylePath(p: string): string; + printLog(type: processTypeEnum, tag: string, filePath?: string | undefined): void; + recursiveFindNodeModules(filePath: string): string; + getUserHomeDir(): string; + getTaroPath(): string; + getConfig(): object; + getSystemUsername(): string; + shouldUseYarn(): boolean; + shouldUseCnpm(): boolean; + isEmptyObject(obj: any): boolean; + resolveScriptPath(p: string): string; + resolveMainFilePath(p: string, extArrs?: string[]): string + generateEnvList(env: object): object; + generateConstantsList(constants: object): object; + cssImports(content: string): string[]; + emptyDirectory(dirPath: string, opts?: { + excludes: string[]; + }): void; + getInstalledNpmPkgPath(pkgName: string, basedir: string): string | null; + getInstalledNpmPkgVersion(pkgName: string, basedir: string): string | null; + unzip(zipPath: any): Promise; + getBabelConfig(babel: any): any; + readDirWithFileTypes(floder: string): utils.FileStat[]; + extnameExpRegOf(filePath: string): RegExp; + addPlatforms(platform: string): void; + isNodeModule: (filename: string) => boolean; + pascalCase: (str: string) => string; + recursiveMerge: (src: Partial, ...args: (Partial | undefined)[]) => any; + mergeVisitors: (src: any, ...args: any[]) => any; + applyArrayedVisitors: (obj: any) => any; + getAllFilesInFloder: (floder: string, filter?: string[]) => Promise; + getModuleDefaultExport: (exports: any) => any; + removeHeadSlash: (str: string) => string; + readConfig: (configPath: string) => any; + PLATFORMS: any; + processTypeEnum: typeof processTypeEnum; + processTypeMap: IProcessTypeMap; + CSS_EXT: string[]; + SCSS_EXT: string[]; + JS_EXT: string[]; + TS_EXT: string[]; + UX_EXT: string[]; + SCRIPT_EXT: string[]; + VUE_EXT: string[]; + REG_JS: RegExp; + REG_SCRIPT: RegExp; + REG_TYPESCRIPT: RegExp; + REG_SCRIPTS: RegExp; + REG_VUE: RegExp; + REG_SASS: RegExp; + REG_LESS: RegExp; + REG_STYLUS: RegExp; + REG_STYLE: RegExp; + REG_CSS: RegExp; + REG_MEDIA: RegExp; + REG_IMAGE: RegExp; + REG_FONT: RegExp; + REG_JSON: RegExp; + REG_UX: RegExp; + REG_TEMPLATE: RegExp; + REG_WXML_IMPORT: RegExp; + REG_URL: RegExp; + CSS_IMPORT_REG: RegExp; + NODE_MODULES: "node_modules"; + NODE_MODULES_REG: RegExp; + PROJECT_CONFIG: "config/index.js"; + DEVICE_RATIO: { + 640: number; + 750: number; + 828: number; + }; + FILE_PROCESSOR_MAP: { + '.js': string; + '.scss': string; + '.sass': string; + '.less': string; + '.styl': string; + }; + META_TYPE: typeof META_TYPE; + FRAMEWORK_MAP: typeof FRAMEWORK_MAP; + UPDATE_PACKAGE_LIST: string[]; + taroJsComponents: "@tarojs/components"; + taroJsQuickAppComponents: "@tarojs/components-qa"; + taroJsFramework: "@tarojs/taro"; + taroJsRedux: "@tarojs/redux"; + taroJsMobx: "@tarojs/mobx"; + taroJsMobxCommon: "@tarojs/mobx-common"; + DEVICE_RATIO_NAME: "deviceRatio"; + isWindows: boolean; + DEFAULT_TEMPLATE_SRC: "github:NervJS/taro-project-templates#2.0"; + TARO_CONFIG_FLODER: ".taro2"; + TARO_BASE_CONFIG: "index.json"; + OUTPUT_DIR: "dist"; + SOURCE_DIR: "src"; + TEMP_DIR: ".temp"; + NPM_DIR: "npm"; + ENTRY: "app"; +} +declare const helper: helper +// @ts-ignore +export = helper diff --git a/packages/taro-helper/types/npm.d.ts b/packages/taro-helper/types/npm.d.ts new file mode 100644 index 000000000000..73fb7383b847 --- /dev/null +++ b/packages/taro-helper/types/npm.d.ts @@ -0,0 +1,14 @@ +declare type pluginFunction = (pluginName: string, content: string | null, file: string, config: object, root: string) => any; +export interface IInstallOptions { + dev: boolean; + peerDependencies?: boolean; +} +export declare const taroPluginPrefix = "@tarojs/plugin-"; +export declare function resolveNpm(pluginName: string, root: any): Promise; +export declare function resolveNpmSync(pluginName: string, root: any): string; +export declare function installNpmPkg(pkgList: string[] | string, options: IInstallOptions): any; +export declare const callPlugin: pluginFunction; +export declare const callPluginSync: pluginFunction; +export declare function getNpmPkgSync(npmName: string, root: string): any; +export declare function getNpmPkg(npmName: string, root: string): Promise; +export {}; diff --git a/packages/taro-helper/types/utils.d.ts b/packages/taro-helper/types/utils.d.ts new file mode 100644 index 000000000000..576a84246a7a --- /dev/null +++ b/packages/taro-helper/types/utils.d.ts @@ -0,0 +1,45 @@ +import { processTypeEnum } from './constants'; +export declare function normalizePath(path: string): string; +export declare const isNodeModule: (filename: string) => boolean; +export declare function isNpmPkg(name: string): boolean; +export declare function isQuickAppPkg(name: string): boolean; +export declare function isAliasPath(name: string, pathAlias?: object): boolean; +export declare function replaceAliasPath(filePath: string, name: string, pathAlias?: object): string; +export declare function promoteRelativePath(fPath: string): string; +export declare function resolveStylePath(p: string): string; +export declare function printLog(type: processTypeEnum, tag: string, filePath?: string): void; +export declare function recursiveFindNodeModules(filePath: string): string; +export declare function getUserHomeDir(): string; +export declare function getTaroPath(): string; +export declare function getConfig(): object; +export declare function getSystemUsername(): string; +export declare function shouldUseYarn(): boolean; +export declare function shouldUseCnpm(): boolean; +export declare function isEmptyObject(obj: any): boolean; +export declare function resolveScriptPath(p: string): string; +export declare function generateEnvList(env: object): object; +export declare function generateConstantsList(constants: object): object; +export declare function cssImports(content: string): string[]; +export declare function emptyDirectory(dirPath: string, opts?: { + excludes: string[]; +}): void; +export declare const pascalCase: (str: string) => string; +export declare function getInstalledNpmPkgPath(pkgName: string, basedir: string): string | null; +export declare function getInstalledNpmPkgVersion(pkgName: string, basedir: string): string | null; +export declare const recursiveMerge: (src: Partial, ...args: (Partial | undefined)[]) => any; +export declare const mergeVisitors: (src: any, ...args: any[]) => any; +export declare const applyArrayedVisitors: (obj: any) => any; +export declare function unzip(zipPath: any): Promise; +export declare function getBabelConfig(babel: any): any; +export declare const getAllFilesInFloder: (floder: string, filter?: string[]) => Promise; +export interface FileStat { + name: string; + isDirectory: boolean; + isFile: boolean; +} +export declare function readDirWithFileTypes(floder: string): FileStat[]; +export declare function extnameExpRegOf(filePath: string): RegExp; +export declare function addPlatforms(platform: string): void; +export declare const getModuleDefaultExport: (exports: any) => any; +export declare const removeHeadSlash: (str: string) => string; +export declare const readConfig: (configPath: string) => any; diff --git a/packages/taro-helper/yarn.lock b/packages/taro-helper/yarn.lock new file mode 100644 index 000000000000..0eb60975dbff --- /dev/null +++ b/packages/taro-helper/yarn.lock @@ -0,0 +1,1948 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.8.3.tgz?cache=0&sync_timestamp=1578953126105&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" + dependencies: + "@babel/highlight" "^7.8.3" + +"@babel/compat-data@^7.9.0", "@babel/compat-data@^7.9.6": + version "7.9.6" + resolved "https://registry.npm.taobao.org/@babel/compat-data/download/@babel/compat-data-7.9.6.tgz?cache=0&sync_timestamp=1588185911086&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcompat-data%2Fdownload%2F%40babel%2Fcompat-data-7.9.6.tgz#3f604c40e420131affe6f2c8052e9a275ae2049b" + dependencies: + browserslist "^4.11.1" + invariant "^2.2.4" + semver "^5.5.0" + +"@babel/core@7.9.0": + version "7.9.0" + resolved "https://registry.npm.taobao.org/@babel/core/download/@babel/core-7.9.0.tgz#ac977b538b77e132ff706f3b8a4dbad09c03c56e" + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.9.0" + "@babel/helper-module-transforms" "^7.9.0" + "@babel/helpers" "^7.9.0" + "@babel/parser" "^7.9.0" + "@babel/template" "^7.8.6" + "@babel/traverse" "^7.9.0" + "@babel/types" "^7.9.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.9.0", "@babel/generator@^7.9.6": + version "7.9.6" + resolved "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.9.6.tgz?cache=0&sync_timestamp=1588185906082&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fgenerator%2Fdownload%2F%40babel%2Fgenerator-7.9.6.tgz#5408c82ac5de98cda0d77d8124e99fa1f2170a43" + dependencies: + "@babel/types" "^7.9.6" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.8.3.tgz#60bc0bc657f63a0924ff9a4b4a0b24a13cf4deee" + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/helper-builder-binary-assignment-operator-visitor/download/@babel/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz#c84097a427a061ac56a1c30ebf54b7b22d241503" + dependencies: + "@babel/helper-explode-assignable-expression" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helper-compilation-targets@^7.8.7": + version "7.9.6" + resolved "https://registry.npm.taobao.org/@babel/helper-compilation-targets/download/@babel/helper-compilation-targets-7.9.6.tgz?cache=0&sync_timestamp=1588185905418&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-compilation-targets%2Fdownload%2F%40babel%2Fhelper-compilation-targets-7.9.6.tgz#1e05b7ccc9d38d2f8b40b458b380a04dcfadd38a" + dependencies: + "@babel/compat-data" "^7.9.6" + browserslist "^4.11.1" + invariant "^2.2.4" + levenary "^1.1.1" + semver "^5.5.0" + +"@babel/helper-create-class-features-plugin@^7.8.3", "@babel/helper-create-class-features-plugin@^7.9.6": + version "7.9.6" + resolved "https://registry.npm.taobao.org/@babel/helper-create-class-features-plugin/download/@babel/helper-create-class-features-plugin-7.9.6.tgz?cache=0&sync_timestamp=1588185905095&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-create-class-features-plugin%2Fdownload%2F%40babel%2Fhelper-create-class-features-plugin-7.9.6.tgz#965c8b0a9f051801fd9d3b372ca0ccf200a90897" + dependencies: + "@babel/helper-function-name" "^7.9.5" + "@babel/helper-member-expression-to-functions" "^7.8.3" + "@babel/helper-optimise-call-expression" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-replace-supers" "^7.9.6" + "@babel/helper-split-export-declaration" "^7.8.3" + +"@babel/helper-create-regexp-features-plugin@^7.8.3", "@babel/helper-create-regexp-features-plugin@^7.8.8": + version "7.8.8" + resolved "https://registry.npm.taobao.org/@babel/helper-create-regexp-features-plugin/download/@babel/helper-create-regexp-features-plugin-7.8.8.tgz#5d84180b588f560b7864efaeea89243e58312087" + dependencies: + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-regex" "^7.8.3" + regexpu-core "^4.7.0" + +"@babel/helper-define-map@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/helper-define-map/download/@babel/helper-define-map-7.8.3.tgz#a0655cad5451c3760b726eba875f1cd8faa02c15" + dependencies: + "@babel/helper-function-name" "^7.8.3" + "@babel/types" "^7.8.3" + lodash "^4.17.13" + +"@babel/helper-explode-assignable-expression@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/helper-explode-assignable-expression/download/@babel/helper-explode-assignable-expression-7.8.3.tgz#a728dc5b4e89e30fc2dfc7d04fa28a930653f982" + dependencies: + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helper-function-name@^7.8.3", "@babel/helper-function-name@^7.9.5": + version "7.9.5" + resolved "https://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.9.5.tgz#2b53820d35275120e1874a82e5aabe1376920a5c" + dependencies: + "@babel/helper-get-function-arity" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/types" "^7.9.5" + +"@babel/helper-get-function-arity@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.8.3.tgz?cache=0&sync_timestamp=1578951938166&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-get-function-arity%2Fdownload%2F%40babel%2Fhelper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-hoist-variables@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/helper-hoist-variables/download/@babel/helper-hoist-variables-7.8.3.tgz#1dbe9b6b55d78c9b4183fc8cdc6e30ceb83b7134" + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-member-expression-to-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.8.3.tgz?cache=0&sync_timestamp=1578951939517&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-member-expression-to-functions%2Fdownload%2F%40babel%2Fhelper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-module-imports@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/helper-module-imports/download/@babel/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-module-transforms@^7.9.0": + version "7.9.0" + resolved "https://registry.npm.taobao.org/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.9.0.tgz?cache=0&sync_timestamp=1584718808099&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-module-transforms%2Fdownload%2F%40babel%2Fhelper-module-transforms-7.9.0.tgz#43b34dfe15961918707d247327431388e9fe96e5" + dependencies: + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.6" + "@babel/helper-simple-access" "^7.8.3" + "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/template" "^7.8.6" + "@babel/types" "^7.9.0" + lodash "^4.17.13" + +"@babel/helper-optimise-call-expression@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.8.3.tgz?cache=0&sync_timestamp=1578951937431&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-optimise-call-expression%2Fdownload%2F%40babel%2Fhelper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9" + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" + +"@babel/helper-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/helper-regex/download/@babel/helper-regex-7.8.3.tgz?cache=0&sync_timestamp=1578951938163&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-regex%2Fdownload%2F%40babel%2Fhelper-regex-7.8.3.tgz#139772607d51b93f23effe72105b319d2a4c6965" + dependencies: + lodash "^4.17.13" + +"@babel/helper-remap-async-to-generator@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/helper-remap-async-to-generator/download/@babel/helper-remap-async-to-generator-7.8.3.tgz#273c600d8b9bf5006142c1e35887d555c12edd86" + dependencies: + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-wrap-function" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helper-replace-supers@^7.8.3", "@babel/helper-replace-supers@^7.8.6", "@babel/helper-replace-supers@^7.9.6": + version "7.9.6" + resolved "https://registry.npm.taobao.org/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.9.6.tgz?cache=0&sync_timestamp=1588185907352&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-replace-supers%2Fdownload%2F%40babel%2Fhelper-replace-supers-7.9.6.tgz#03149d7e6a5586ab6764996cd31d6981a17e1444" + dependencies: + "@babel/helper-member-expression-to-functions" "^7.8.3" + "@babel/helper-optimise-call-expression" "^7.8.3" + "@babel/traverse" "^7.9.6" + "@babel/types" "^7.9.6" + +"@babel/helper-simple-access@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/helper-simple-access/download/@babel/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae" + dependencies: + "@babel/template" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helper-split-export-declaration@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-validator-identifier@^7.9.0", "@babel/helper-validator-identifier@^7.9.5": + version "7.9.5" + resolved "https://registry.npm.taobao.org/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80" + +"@babel/helper-wrap-function@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/helper-wrap-function/download/@babel/helper-wrap-function-7.8.3.tgz#9dbdb2bb55ef14aaa01fe8c99b629bd5352d8610" + dependencies: + "@babel/helper-function-name" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helpers@^7.9.0": + version "7.9.6" + resolved "https://registry.npm.taobao.org/@babel/helpers/download/@babel/helpers-7.9.6.tgz?cache=0&sync_timestamp=1588185908061&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelpers%2Fdownload%2F%40babel%2Fhelpers-7.9.6.tgz#092c774743471d0bb6c7de3ad465ab3d3486d580" + dependencies: + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.9.6" + "@babel/types" "^7.9.6" + +"@babel/highlight@^7.8.3": + version "7.9.0" + resolved "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079" + dependencies: + "@babel/helper-validator-identifier" "^7.9.0" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.8.6", "@babel/parser@^7.9.0", "@babel/parser@^7.9.6": + version "7.9.6" + resolved "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.9.6.tgz#3b1bbb30dabe600cd72db58720998376ff653bc7" + +"@babel/plugin-proposal-async-generator-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.8.3.tgz#bad329c670b382589721b27540c7d288601c6e6f" + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-remap-async-to-generator" "^7.8.3" + "@babel/plugin-syntax-async-generators" "^7.8.0" + +"@babel/plugin-proposal-class-properties@7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-class-properties/download/@babel/plugin-proposal-class-properties-7.8.3.tgz?cache=0&sync_timestamp=1578953962040&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-class-properties%2Fdownload%2F%40babel%2Fplugin-proposal-class-properties-7.8.3.tgz#5e06654af5cd04b608915aada9b2a6788004464e" + dependencies: + "@babel/helper-create-class-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-proposal-decorators@7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-decorators/download/@babel/plugin-proposal-decorators-7.8.3.tgz?cache=0&sync_timestamp=1578953963051&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-decorators%2Fdownload%2F%40babel%2Fplugin-proposal-decorators-7.8.3.tgz#2156860ab65c5abf068c3f67042184041066543e" + dependencies: + "@babel/helper-create-class-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-decorators" "^7.8.3" + +"@babel/plugin-proposal-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-dynamic-import/download/@babel/plugin-proposal-dynamic-import-7.8.3.tgz#38c4fe555744826e97e2ae930b0fb4cc07e66054" + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + +"@babel/plugin-proposal-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-json-strings/download/@babel/plugin-proposal-json-strings-7.8.3.tgz#da5216b238a98b58a1e05d6852104b10f9a70d6b" + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.0" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-nullish-coalescing-operator/download/@babel/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz#e4572253fdeed65cddeecfdab3f928afeb2fd5d2" + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + +"@babel/plugin-proposal-numeric-separator@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-numeric-separator/download/@babel/plugin-proposal-numeric-separator-7.8.3.tgz#5d6769409699ec9b3b68684cd8116cedff93bad8" + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + +"@babel/plugin-proposal-object-rest-spread@7.9.0": + version "7.9.0" + resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.9.0.tgz?cache=0&sync_timestamp=1588185906386&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-object-rest-spread%2Fdownload%2F%40babel%2Fplugin-proposal-object-rest-spread-7.9.0.tgz#a28993699fc13df165995362693962ba6b061d6f" + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + +"@babel/plugin-proposal-object-rest-spread@^7.9.0": + version "7.9.6" + resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.9.6.tgz?cache=0&sync_timestamp=1588185906386&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-object-rest-spread%2Fdownload%2F%40babel%2Fplugin-proposal-object-rest-spread-7.9.6.tgz#7a093586fcb18b08266eb1a7177da671ac575b63" + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.9.5" + +"@babel/plugin-proposal-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-optional-catch-binding/download/@babel/plugin-proposal-optional-catch-binding-7.8.3.tgz#9dee96ab1650eed88646ae9734ca167ac4a9c5c9" + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + +"@babel/plugin-proposal-optional-chaining@^7.9.0": + version "7.9.0" + resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-optional-chaining/download/@babel/plugin-proposal-optional-chaining-7.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-optional-chaining%2Fdownload%2F%40babel%2Fplugin-proposal-optional-chaining-7.9.0.tgz#31db16b154c39d6b8a645292472b98394c292a58" + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + +"@babel/plugin-proposal-unicode-property-regex@^7.4.4", "@babel/plugin-proposal-unicode-property-regex@^7.8.3": + version "7.8.8" + resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.8.8.tgz#ee3a95e90cdc04fe8cd92ec3279fa017d68a0d1d" + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.8.8" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-async-generators@^7.8.0": + version "7.8.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-async-generators/download/@babel/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-decorators@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-decorators/download/@babel/plugin-syntax-decorators-7.8.3.tgz?cache=0&sync_timestamp=1578953928175&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-decorators%2Fdownload%2F%40babel%2Fplugin-syntax-decorators-7.8.3.tgz#8d2c15a9f1af624b0025f961682a9d53d3001bda" + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-dynamic-import@^7.8.0": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-dynamic-import/download/@babel/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-json-strings@^7.8.0": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-json-strings/download/@babel/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-nullish-coalescing-operator/download/@babel/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.8.0", "@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-numeric-separator/download/@babel/plugin-syntax-numeric-separator-7.8.3.tgz#0e3fb63e09bea1b11e96467271c8308007e7c41f" + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-object-rest-spread@^7.8.0": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-object-rest-spread/download/@babel/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.0": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-optional-catch-binding/download/@babel/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.0": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-optional-chaining/download/@babel/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-top-level-await/download/@babel/plugin-syntax-top-level-await-7.8.3.tgz?cache=0&sync_timestamp=1578951935611&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-top-level-await%2Fdownload%2F%40babel%2Fplugin-syntax-top-level-await-7.8.3.tgz#3acdece695e6b13aaf57fc291d1a800950c71391" + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-typescript@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-typescript/download/@babel/plugin-syntax-typescript-7.8.3.tgz#c1f659dda97711a569cef75275f7e15dcaa6cabc" + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-arrow-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-arrow-functions/download/@babel/plugin-transform-arrow-functions-7.8.3.tgz#82776c2ed0cd9e1a49956daeb896024c9473b8b6" + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-async-to-generator@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-async-to-generator/download/@babel/plugin-transform-async-to-generator-7.8.3.tgz#4308fad0d9409d71eafb9b1a6ee35f9d64b64086" + dependencies: + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-remap-async-to-generator" "^7.8.3" + +"@babel/plugin-transform-block-scoped-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-block-scoped-functions/download/@babel/plugin-transform-block-scoped-functions-7.8.3.tgz?cache=0&sync_timestamp=1578951934748&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-block-scoped-functions%2Fdownload%2F%40babel%2Fplugin-transform-block-scoped-functions-7.8.3.tgz#437eec5b799b5852072084b3ae5ef66e8349e8a3" + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-block-scoping@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-block-scoping/download/@babel/plugin-transform-block-scoping-7.8.3.tgz?cache=0&sync_timestamp=1578951934401&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-block-scoping%2Fdownload%2F%40babel%2Fplugin-transform-block-scoping-7.8.3.tgz#97d35dab66857a437c166358b91d09050c868f3a" + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + lodash "^4.17.13" + +"@babel/plugin-transform-classes@^7.9.0": + version "7.9.5" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-classes/download/@babel/plugin-transform-classes-7.9.5.tgz#800597ddb8aefc2c293ed27459c1fcc935a26c2c" + dependencies: + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-define-map" "^7.8.3" + "@babel/helper-function-name" "^7.9.5" + "@babel/helper-optimise-call-expression" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.6" + "@babel/helper-split-export-declaration" "^7.8.3" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-computed-properties/download/@babel/plugin-transform-computed-properties-7.8.3.tgz?cache=0&sync_timestamp=1578951933993&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-computed-properties%2Fdownload%2F%40babel%2Fplugin-transform-computed-properties-7.8.3.tgz#96d0d28b7f7ce4eb5b120bb2e0e943343c86f81b" + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-destructuring@^7.8.3": + version "7.9.5" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-destructuring/download/@babel/plugin-transform-destructuring-7.9.5.tgz#72c97cf5f38604aea3abf3b935b0e17b1db76a50" + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-dotall-regex@^7.4.4", "@babel/plugin-transform-dotall-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-dotall-regex/download/@babel/plugin-transform-dotall-regex-7.8.3.tgz#c3c6ec5ee6125c6993c5cbca20dc8621a9ea7a6e" + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-duplicate-keys@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-duplicate-keys/download/@babel/plugin-transform-duplicate-keys-7.8.3.tgz?cache=0&sync_timestamp=1578951935457&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-duplicate-keys%2Fdownload%2F%40babel%2Fplugin-transform-duplicate-keys-7.8.3.tgz#8d12df309aa537f272899c565ea1768e286e21f1" + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-exponentiation-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-exponentiation-operator/download/@babel/plugin-transform-exponentiation-operator-7.8.3.tgz#581a6d7f56970e06bf51560cd64f5e947b70d7b7" + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-for-of@^7.9.0": + version "7.9.0" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-for-of/download/@babel/plugin-transform-for-of-7.9.0.tgz?cache=0&sync_timestamp=1584718807470&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-for-of%2Fdownload%2F%40babel%2Fplugin-transform-for-of-7.9.0.tgz#0f260e27d3e29cd1bb3128da5e76c761aa6c108e" + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-function-name@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-function-name/download/@babel/plugin-transform-function-name-7.8.3.tgz#279373cb27322aaad67c2683e776dfc47196ed8b" + dependencies: + "@babel/helper-function-name" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-literals@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-literals/download/@babel/plugin-transform-literals-7.8.3.tgz?cache=0&sync_timestamp=1578951935103&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-literals%2Fdownload%2F%40babel%2Fplugin-transform-literals-7.8.3.tgz#aef239823d91994ec7b68e55193525d76dbd5dc1" + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-member-expression-literals@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-member-expression-literals/download/@babel/plugin-transform-member-expression-literals-7.8.3.tgz?cache=0&sync_timestamp=1578951935289&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-member-expression-literals%2Fdownload%2F%40babel%2Fplugin-transform-member-expression-literals-7.8.3.tgz#963fed4b620ac7cbf6029c755424029fa3a40410" + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-modules-amd@^7.9.0": + version "7.9.6" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-modules-amd/download/@babel/plugin-transform-modules-amd-7.9.6.tgz?cache=0&sync_timestamp=1588185902641&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-modules-amd%2Fdownload%2F%40babel%2Fplugin-transform-modules-amd-7.9.6.tgz#8539ec42c153d12ea3836e0e3ac30d5aae7b258e" + dependencies: + "@babel/helper-module-transforms" "^7.9.0" + "@babel/helper-plugin-utils" "^7.8.3" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.9.0": + version "7.9.6" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-modules-commonjs/download/@babel/plugin-transform-modules-commonjs-7.9.6.tgz?cache=0&sync_timestamp=1588185907042&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-modules-commonjs%2Fdownload%2F%40babel%2Fplugin-transform-modules-commonjs-7.9.6.tgz#64b7474a4279ee588cacd1906695ca721687c277" + dependencies: + "@babel/helper-module-transforms" "^7.9.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-simple-access" "^7.8.3" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.9.0": + version "7.9.6" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-modules-systemjs/download/@babel/plugin-transform-modules-systemjs-7.9.6.tgz?cache=0&sync_timestamp=1588185909511&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-modules-systemjs%2Fdownload%2F%40babel%2Fplugin-transform-modules-systemjs-7.9.6.tgz#207f1461c78a231d5337a92140e52422510d81a4" + dependencies: + "@babel/helper-hoist-variables" "^7.8.3" + "@babel/helper-module-transforms" "^7.9.0" + "@babel/helper-plugin-utils" "^7.8.3" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.9.0": + version "7.9.0" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-modules-umd/download/@babel/plugin-transform-modules-umd-7.9.0.tgz#e909acae276fec280f9b821a5f38e1f08b480697" + dependencies: + "@babel/helper-module-transforms" "^7.9.0" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-named-capturing-groups-regex/download/@babel/plugin-transform-named-capturing-groups-regex-7.8.3.tgz#a2a72bffa202ac0e2d0506afd0939c5ecbc48c6c" + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.8.3" + +"@babel/plugin-transform-new-target@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-new-target/download/@babel/plugin-transform-new-target-7.8.3.tgz#60cc2ae66d85c95ab540eb34babb6434d4c70c43" + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-object-super@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.8.3.tgz?cache=0&sync_timestamp=1578960811276&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-object-super%2Fdownload%2F%40babel%2Fplugin-transform-object-super-7.8.3.tgz#ebb6a1e7a86ffa96858bd6ac0102d65944261725" + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.3" + +"@babel/plugin-transform-parameters@^7.8.7", "@babel/plugin-transform-parameters@^7.9.5": + version "7.9.5" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-parameters/download/@babel/plugin-transform-parameters-7.9.5.tgz#173b265746f5e15b2afe527eeda65b73623a0795" + dependencies: + "@babel/helper-get-function-arity" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-property-literals@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-property-literals/download/@babel/plugin-transform-property-literals-7.8.3.tgz#33194300d8539c1ed28c62ad5087ba3807b98263" + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-regenerator@^7.8.7": + version "7.8.7" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-regenerator/download/@babel/plugin-transform-regenerator-7.8.7.tgz#5e46a0dca2bee1ad8285eb0527e6abc9c37672f8" + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-reserved-words/download/@babel/plugin-transform-reserved-words-7.8.3.tgz?cache=0&sync_timestamp=1578951936369&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-reserved-words%2Fdownload%2F%40babel%2Fplugin-transform-reserved-words-7.8.3.tgz#9a0635ac4e665d29b162837dd3cc50745dfdf1f5" + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-runtime@7.9.0": + version "7.9.0" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-runtime/download/@babel/plugin-transform-runtime-7.9.0.tgz?cache=0&sync_timestamp=1588185906678&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-runtime%2Fdownload%2F%40babel%2Fplugin-transform-runtime-7.9.0.tgz#45468c0ae74cc13204e1d3b1f4ce6ee83258af0b" + dependencies: + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + resolve "^1.8.1" + semver "^5.5.1" + +"@babel/plugin-transform-shorthand-properties@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-shorthand-properties/download/@babel/plugin-transform-shorthand-properties-7.8.3.tgz?cache=0&sync_timestamp=1578951936720&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-shorthand-properties%2Fdownload%2F%40babel%2Fplugin-transform-shorthand-properties-7.8.3.tgz#28545216e023a832d4d3a1185ed492bcfeac08c8" + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-spread/download/@babel/plugin-transform-spread-7.8.3.tgz#9c8ffe8170fdfb88b114ecb920b82fb6e95fe5e8" + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-sticky-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-sticky-regex/download/@babel/plugin-transform-sticky-regex-7.8.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-sticky-regex%2Fdownload%2F%40babel%2Fplugin-transform-sticky-regex-7.8.3.tgz#be7a1290f81dae767475452199e1f76d6175b100" + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-regex" "^7.8.3" + +"@babel/plugin-transform-template-literals@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-template-literals/download/@babel/plugin-transform-template-literals-7.8.3.tgz#7bfa4732b455ea6a43130adc0ba767ec0e402a80" + dependencies: + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-typeof-symbol@^7.8.4": + version "7.8.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-typeof-symbol/download/@babel/plugin-transform-typeof-symbol-7.8.4.tgz#ede4062315ce0aaf8a657a920858f1a2f35fc412" + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-typescript@^7.9.0": + version "7.9.6" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-typescript/download/@babel/plugin-transform-typescript-7.9.6.tgz?cache=0&sync_timestamp=1588186658971&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-typescript%2Fdownload%2F%40babel%2Fplugin-transform-typescript-7.9.6.tgz#2248971416a506fc78278fc0c0ea3179224af1e9" + dependencies: + "@babel/helper-create-class-features-plugin" "^7.9.6" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-typescript" "^7.8.3" + +"@babel/plugin-transform-unicode-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-unicode-regex/download/@babel/plugin-transform-unicode-regex-7.8.3.tgz#0cef36e3ba73e5c57273effb182f46b91a1ecaad" + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/preset-env@7.9.0": + version "7.9.0" + resolved "https://registry.npm.taobao.org/@babel/preset-env/download/@babel/preset-env-7.9.0.tgz#a5fc42480e950ae8f5d9f8f2bbc03f52722df3a8" + dependencies: + "@babel/compat-data" "^7.9.0" + "@babel/helper-compilation-targets" "^7.8.7" + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-proposal-async-generator-functions" "^7.8.3" + "@babel/plugin-proposal-dynamic-import" "^7.8.3" + "@babel/plugin-proposal-json-strings" "^7.8.3" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-proposal-numeric-separator" "^7.8.3" + "@babel/plugin-proposal-object-rest-spread" "^7.9.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.8.3" + "@babel/plugin-proposal-optional-chaining" "^7.9.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.8.3" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.8.0" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + "@babel/plugin-transform-arrow-functions" "^7.8.3" + "@babel/plugin-transform-async-to-generator" "^7.8.3" + "@babel/plugin-transform-block-scoped-functions" "^7.8.3" + "@babel/plugin-transform-block-scoping" "^7.8.3" + "@babel/plugin-transform-classes" "^7.9.0" + "@babel/plugin-transform-computed-properties" "^7.8.3" + "@babel/plugin-transform-destructuring" "^7.8.3" + "@babel/plugin-transform-dotall-regex" "^7.8.3" + "@babel/plugin-transform-duplicate-keys" "^7.8.3" + "@babel/plugin-transform-exponentiation-operator" "^7.8.3" + "@babel/plugin-transform-for-of" "^7.9.0" + "@babel/plugin-transform-function-name" "^7.8.3" + "@babel/plugin-transform-literals" "^7.8.3" + "@babel/plugin-transform-member-expression-literals" "^7.8.3" + "@babel/plugin-transform-modules-amd" "^7.9.0" + "@babel/plugin-transform-modules-commonjs" "^7.9.0" + "@babel/plugin-transform-modules-systemjs" "^7.9.0" + "@babel/plugin-transform-modules-umd" "^7.9.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" + "@babel/plugin-transform-new-target" "^7.8.3" + "@babel/plugin-transform-object-super" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.8.7" + "@babel/plugin-transform-property-literals" "^7.8.3" + "@babel/plugin-transform-regenerator" "^7.8.7" + "@babel/plugin-transform-reserved-words" "^7.8.3" + "@babel/plugin-transform-shorthand-properties" "^7.8.3" + "@babel/plugin-transform-spread" "^7.8.3" + "@babel/plugin-transform-sticky-regex" "^7.8.3" + "@babel/plugin-transform-template-literals" "^7.8.3" + "@babel/plugin-transform-typeof-symbol" "^7.8.4" + "@babel/plugin-transform-unicode-regex" "^7.8.3" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.9.0" + browserslist "^4.9.1" + core-js-compat "^3.6.2" + invariant "^2.2.2" + levenary "^1.1.1" + semver "^5.5.0" + +"@babel/preset-modules@^0.1.3": + version "0.1.3" + resolved "https://registry.npm.taobao.org/@babel/preset-modules/download/@babel/preset-modules-0.1.3.tgz#13242b53b5ef8c883c3cf7dddd55b36ce80fbc72" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-typescript@7.9.0": + version "7.9.0" + resolved "https://registry.npm.taobao.org/@babel/preset-typescript/download/@babel/preset-typescript-7.9.0.tgz#87705a72b1f0d59df21c179f7c3d2ef4b16ce192" + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-transform-typescript" "^7.9.0" + +"@babel/register@7.9.0": + version "7.9.0" + resolved "https://registry.npm.taobao.org/@babel/register/download/@babel/register-7.9.0.tgz#02464ede57548bddbb5e9f705d263b7c3f43d48b" + dependencies: + find-cache-dir "^2.0.0" + lodash "^4.17.13" + make-dir "^2.1.0" + pirates "^4.0.0" + source-map-support "^0.5.16" + +"@babel/runtime@7.9.2": + version "7.9.2" + resolved "https://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.9.2.tgz?cache=0&sync_timestamp=1588185905751&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.9.2.tgz#d90df0583a3a252f09aaa619665367bae518db06" + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.8.4": + version "7.9.6" + resolved "https://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.9.6.tgz?cache=0&sync_timestamp=1588185905751&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.9.6.tgz#a9102eb5cadedf3f31d08a9ecf294af7827ea29f" + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.8.3", "@babel/template@^7.8.6": + version "7.8.6" + resolved "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/parser" "^7.8.6" + "@babel/types" "^7.8.6" + +"@babel/traverse@^7.8.3", "@babel/traverse@^7.9.0", "@babel/traverse@^7.9.6": + version "7.9.6" + resolved "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.9.6.tgz?cache=0&sync_timestamp=1588185904779&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.9.6.tgz#5540d7577697bf619cc57b92aa0f1c231a94f442" + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.9.6" + "@babel/helper-function-name" "^7.9.5" + "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/parser" "^7.9.6" + "@babel/types" "^7.9.6" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + +"@babel/types@^7.4.4", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0", "@babel/types@^7.9.5", "@babel/types@^7.9.6": + version "7.9.6" + resolved "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.9.6.tgz?cache=0&sync_timestamp=1588185868018&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftypes%2Fdownload%2F%40babel%2Ftypes-7.9.6.tgz#2c5502b427251e9de1bd2dff95add646d95cc9f7" + dependencies: + "@babel/helper-validator-identifier" "^7.9.5" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + +"@tarojs/taro@2.2.1": + version "2.2.1" + resolved "https://registry.npm.taobao.org/@tarojs/taro/download/@tarojs/taro-2.2.1.tgz?cache=0&sync_timestamp=1588213070796&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40tarojs%2Ftaro%2Fdownload%2F%40tarojs%2Ftaro-2.2.1.tgz#32974e49ec55a9af6f916bcba7f713cf2089b68e" + dependencies: + "@tarojs/utils" "2.2.1" + +"@tarojs/utils@2.2.1": + version "2.2.1" + resolved "https://registry.npm.taobao.org/@tarojs/utils/download/@tarojs/utils-2.2.1.tgz?cache=0&sync_timestamp=1588213058625&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40tarojs%2Futils%2Fdownload%2F%40tarojs%2Futils-2.2.1.tgz#d80e72272d8e50addccdef2408e45874ea0d55ab" + +"@types/color-name@^1.1.1": + version "1.1.1" + resolved "https://registry.npm.taobao.org/@types/color-name/download/@types/color-name-1.1.1.tgz?cache=0&sync_timestamp=1588200011932&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fcolor-name%2Fdownload%2F%40types%2Fcolor-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.1.0: + version "4.2.1" + resolved "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" + dependencies: + "@types/color-name" "^1.1.1" + color-convert "^2.0.1" + +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.npm.taobao.org/anymatch/download/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/arr-union/download/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/assign-symbols/download/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.npm.taobao.org/atob/download/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + +babel-helper-builder-react-jsx@^6.24.1: + version "6.26.0" + resolved "https://registry.npm.taobao.org/babel-helper-builder-react-jsx/download/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0" + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + esutils "^2.0.2" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.npm.taobao.org/babel-plugin-dynamic-import-node/download/babel-plugin-dynamic-import-node-2.3.3.tgz?cache=0&sync_timestamp=1587495903478&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-plugin-dynamic-import-node%2Fdownload%2Fbabel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + dependencies: + object.assign "^4.1.0" + +babel-plugin-syntax-jsx@^6.8.0: + version "6.18.0" + resolved "https://registry.npm.taobao.org/babel-plugin-syntax-jsx/download/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" + +babel-plugin-transform-react-jsx@^6.24.1: + version "6.24.1" + resolved "https://registry.npm.taobao.org/babel-plugin-transform-react-jsx/download/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3" + dependencies: + babel-helper-builder-react-jsx "^6.24.1" + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" + +babel-runtime@^6.22.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.npm.taobao.org/babel-types/download/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.npm.taobao.org/base/download/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +binary-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" + +braces@^2.3.1: + version "2.3.2" + resolved "https://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + dependencies: + fill-range "^7.0.1" + +browserslist@^4.11.1, browserslist@^4.8.5, browserslist@^4.9.1: + version "4.12.0" + resolved "https://registry.npm.taobao.org/browserslist/download/browserslist-4.12.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrowserslist%2Fdownload%2Fbrowserslist-4.12.0.tgz#06c6d5715a1ede6c51fc39ff67fd647f740b656d" + dependencies: + caniuse-lite "^1.0.30001043" + electron-to-chromium "^1.3.413" + node-releases "^1.1.53" + pkg-up "^2.0.0" + +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.npm.taobao.org/buffer-crc32/download/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/cache-base/download/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +caniuse-lite@^1.0.30001043: + version "1.0.30001048" + resolved "https://registry.npm.taobao.org/caniuse-lite/download/caniuse-lite-1.0.30001048.tgz#4bb4f1bc2eb304e5e1154da80b93dee3f1cf447e" + +chalk@3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/chalk/download/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chokidar@3.3.1: + version "3.3.1" + resolved "https://registry.npm.taobao.org/chokidar/download/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450" + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.3.0" + optionalDependencies: + fsevents "~2.1.2" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.npm.taobao.org/class-utils/download/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/collection-visit/download/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz?cache=0&sync_timestamp=1566248870121&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolor-convert%2Fdownload%2Fcolor-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz?cache=0&sync_timestamp=1566248870121&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolor-convert%2Fdownload%2Fcolor-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/commondir/download/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + +convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.7.0.tgz?cache=0&sync_timestamp=1573003637425&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconvert-source-map%2Fdownload%2Fconvert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + dependencies: + safe-buffer "~5.1.1" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.npm.taobao.org/copy-descriptor/download/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + +core-js-compat@^3.6.2: + version "3.6.5" + resolved "https://registry.npm.taobao.org/core-js-compat/download/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c" + dependencies: + browserslist "^4.8.5" + semver "7.0.0" + +core-js@^2.4.0: + version "2.6.11" + resolved "https://registry.npm.taobao.org/core-js/download/core-js-2.6.11.tgz?cache=0&sync_timestamp=1586450269267&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" + +cross-spawn@7.0.1: + version "7.0.1" + resolved "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +debug@4.1.1, debug@^4.1.0: + version "4.1.1" + resolved "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + dependencies: + ms "^2.1.1" + +debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + dependencies: + ms "2.0.0" + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + +define-properties@^1.1.2: + version "1.1.3" + resolved "https://registry.npm.taobao.org/define-properties/download/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.npm.taobao.org/define-property/download/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +electron-to-chromium@^1.3.413: + version "1.3.424" + resolved "https://registry.npm.taobao.org/electron-to-chromium/download/electron-to-chromium-1.3.424.tgz#29bf66325521209180829e8c8b5164deaf0f86b8" + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npm.taobao.org/esutils/download/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/fd-slicer/download/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + dependencies: + pend "~1.2.0" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + dependencies: + to-regex-range "^5.0.1" + +find-cache-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/find-up/download/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + dependencies: + locate-path "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + dependencies: + locate-path "^3.0.0" + +find-yarn-workspace-root@1.2.1: + version "1.2.1" + resolved "https://registry.npm.taobao.org/find-yarn-workspace-root/download/find-yarn-workspace-root-1.2.1.tgz#40eb8e6e7c2502ddfaa2577c176f221422f860db" + dependencies: + fs-extra "^4.0.3" + micromatch "^3.1.4" + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.npm.taobao.org/fragment-cache/download/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + dependencies: + map-cache "^0.2.2" + +fs-extra@8.1.0: + version "8.1.0" + resolved "https://registry.npm.taobao.org/fs-extra/download/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^4.0.3: + version "4.0.3" + resolved "https://registry.npm.taobao.org/fs-extra/download/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.npm.taobao.org/fsevents/download/fsevents-2.1.3.tgz?cache=0&sync_timestamp=1587572647225&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + +gensync@^1.0.0-beta.1: + version "1.0.0-beta.1" + resolved "https://registry.npm.taobao.org/gensync/download/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + +glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.npm.taobao.org/glob-parent/download/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + dependencies: + is-glob "^4.0.1" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.npm.taobao.org/globals/download/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.4" + resolved "https://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + +has-symbols@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/has-symbols/download/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.npm.taobao.org/has-value/download/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/has-value/download/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.npm.taobao.org/has-values/download/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/has-values/download/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +invariant@^2.2.2, invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.npm.taobao.org/invariant/download/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + dependencies: + loose-envify "^1.0.0" + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + dependencies: + kind-of "^6.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + dependencies: + binary-extensions "^2.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + dependencies: + kind-of "^6.0.0" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + dependencies: + is-extglob "^2.1.1" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + dependencies: + isobject "^3.0.1" + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + +isarray@1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz?cache=0&sync_timestamp=1562592096220&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fisarray%2Fdownload%2Fisarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/js-tokens/download/js-tokens-4.0.0.tgz?cache=0&sync_timestamp=1586796260005&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-tokens%2Fdownload%2Fjs-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.npm.taobao.org/jsesc/download/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.npm.taobao.org/jsesc/download/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + +json5@^2.1.2: + version "2.1.3" + resolved "https://registry.npm.taobao.org/json5/download/json5-2.1.3.tgz?cache=0&sync_timestamp=1586045700847&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson5%2Fdownload%2Fjson5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + dependencies: + minimist "^1.2.5" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + optionalDependencies: + graceful-fs "^4.1.6" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/leven/download/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + +levenary@^1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/levenary/download/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77" + dependencies: + leven "^3.1.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/locate-path/download/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +lodash@4.17.15, lodash@^4.17.13, lodash@^4.17.4: + version "4.17.15" + resolved "https://registry.npm.taobao.org/lodash/download/lodash-4.17.15.tgz?cache=0&sync_timestamp=1571657272199&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + +loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.npm.taobao.org/loose-envify/download/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +make-dir@^2.0.0, make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/make-dir/download/make-dir-2.1.0.tgz?cache=0&sync_timestamp=1587567572251&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmake-dir%2Fdownload%2Fmake-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.npm.taobao.org/map-cache/download/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/map-visit/download/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + dependencies: + object-visit "^1.0.0" + +micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminimist%2Fdownload%2Fminimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.npm.taobao.org/mixin-deep/download/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.npm.taobao.org/nanomatch/download/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +node-modules-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/node-modules-regexp/download/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + +node-releases@^1.1.53: + version "1.1.53" + resolved "https://registry.npm.taobao.org/node-releases/download/node-releases-1.1.53.tgz#2d821bfa499ed7c5dffc5e2f28c88e78a08ee3f4" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/normalize-path/download/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.npm.taobao.org/object-copy/download/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-keys@^1.0.11, object-keys@^1.0.12: + version "1.1.1" + resolved "https://registry.npm.taobao.org/object-keys/download/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/object-visit/download/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.npm.taobao.org/object.assign/download/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.npm.taobao.org/object.pick/download/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + dependencies: + isobject "^3.0.1" + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.npm.taobao.org/p-limit/download/p-limit-1.3.0.tgz?cache=0&sync_timestamp=1586101408834&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0: + version "2.3.0" + resolved "https://registry.npm.taobao.org/p-limit/download/p-limit-2.3.0.tgz?cache=0&sync_timestamp=1586101408834&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + dependencies: + p-try "^2.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/p-locate/download/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + dependencies: + p-limit "^2.0.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/p-try/download/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/p-try/download/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npm.taobao.org/path-key/download/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.npm.taobao.org/path-parse/download/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/pend/download/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + +picomatch@^2.0.4, picomatch@^2.0.7: + version "2.2.2" + resolved "https://registry.npm.taobao.org/picomatch/download/picomatch-2.2.2.tgz?cache=0&sync_timestamp=1584790434095&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpicomatch%2Fdownload%2Fpicomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.npm.taobao.org/pify/download/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + +pirates@^4.0.0: + version "4.0.1" + resolved "https://registry.npm.taobao.org/pirates/download/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" + dependencies: + node-modules-regexp "^1.0.0" + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + dependencies: + find-up "^3.0.0" + +pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/pkg-up/download/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" + dependencies: + find-up "^2.1.0" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.npm.taobao.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + +private@^0.1.8: + version "0.1.8" + resolved "https://registry.npm.taobao.org/private/download/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + +readdirp@~3.3.0: + version "3.3.0" + resolved "https://registry.npm.taobao.org/readdirp/download/readdirp-3.3.0.tgz#984458d13a1e42e2e9f5841b129e162f369aff17" + dependencies: + picomatch "^2.0.7" + +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.npm.taobao.org/regenerate-unicode-properties/download/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + dependencies: + regenerate "^1.4.0" + +regenerate@^1.4.0: + version "1.4.0" + resolved "https://registry.npm.taobao.org/regenerate/download/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz?cache=0&sync_timestamp=1584052481783&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + +regenerator-runtime@^0.13.4: + version "0.13.5" + resolved "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.13.5.tgz?cache=0&sync_timestamp=1584052481783&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" + +regenerator-transform@^0.14.2: + version "0.14.4" + resolved "https://registry.npm.taobao.org/regenerator-transform/download/regenerator-transform-0.14.4.tgz#5266857896518d1616a78a0479337a30ea974cc7" + dependencies: + "@babel/runtime" "^7.8.4" + private "^0.1.8" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/regex-not/download/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexpu-core@^4.7.0: + version "4.7.0" + resolved "https://registry.npm.taobao.org/regexpu-core/download/regexpu-core-4.7.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregexpu-core%2Fdownload%2Fregexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.2.0" + +regjsgen@^0.5.1: + version "0.5.1" + resolved "https://registry.npm.taobao.org/regjsgen/download/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" + +regjsparser@^0.6.4: + version "0.6.4" + resolved "https://registry.npm.taobao.org/regjsparser/download/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" + dependencies: + jsesc "~0.5.0" + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.npm.taobao.org/resolve-url/download/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + +resolve@1.15.1: + version "1.15.1" + resolved "https://registry.npm.taobao.org/resolve/download/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" + dependencies: + path-parse "^1.0.6" + +resolve@^1.3.2, resolve@^1.8.1: + version "1.17.0" + resolved "https://registry.npm.taobao.org/resolve/download/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + dependencies: + path-parse "^1.0.6" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.npm.taobao.org/ret/download/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + +safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/safe-regex/download/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + dependencies: + ret "~0.1.10" + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.npm.taobao.org/semver/download/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + +semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/set-value/download/set-value-2.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fset-value%2Fdownload%2Fset-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/shebang-command/download/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/snapdragon-node/download/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.npm.taobao.org/snapdragon-util/download/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.npm.taobao.org/snapdragon/download/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.3.tgz?cache=0&sync_timestamp=1584829515586&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-resolve%2Fdownload%2Fsource-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.5.16: + version "0.5.19" + resolved "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.5.19.tgz?cache=0&sync_timestamp=1587719289626&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-support%2Fdownload%2Fsource-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + +source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.npm.taobao.org/split-string/download/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + dependencies: + extend-shallow "^3.0.0" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.npm.taobao.org/static-extend/download/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.1.0" + resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-7.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" + dependencies: + has-flag "^4.0.0" + +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-1.0.3.tgz?cache=0&sync_timestamp=1580550317222&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fto-fast-properties%2Fdownload%2Fto-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-2.0.0.tgz?cache=0&sync_timestamp=1580550317222&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fto-fast-properties%2Fdownload%2Fto-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.npm.taobao.org/to-object-path/download/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.npm.taobao.org/to-regex/download/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.npm.taobao.org/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.npm.taobao.org/unicode-match-property-ecmascript/download/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.1.0" + resolved "https://registry.npm.taobao.org/unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-1.1.0.tgz?cache=0&sync_timestamp=1583945910569&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funicode-property-aliases-ecmascript%2Fdownload%2Funicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/union-value/download/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz?cache=0&sync_timestamp=1583530825899&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funiversalify%2Fdownload%2Funiversalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/unset-value/download/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.npm.taobao.org/urix/download/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.npm.taobao.org/use/download/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz?cache=0&sync_timestamp=1574116720213&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + dependencies: + isexe "^2.0.0" + +yauzl@2.10.0: + version "2.10.0" + resolved "https://registry.npm.taobao.org/yauzl/download/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" diff --git a/packages/taro-mini-runner/package.json b/packages/taro-mini-runner/package.json index b018571fcabd..2d6676541330 100644 --- a/packages/taro-mini-runner/package.json +++ b/packages/taro-mini-runner/package.json @@ -34,6 +34,7 @@ "@babel/core": "7.6.4", "@babel/plugin-proposal-class-properties": "7.5.5", "@babel/preset-env": "7.6.3", + "@tarojs/helper": "3.0.0-beta.6", "@tarojs/runner-utils": "3.0.0-beta.6", "@tarojs/runtime": "3.0.0-beta.6", "@tarojs/shared": "3.0.0-beta.6", @@ -41,7 +42,6 @@ "@tarojs/taro-loader": "3.0.0-beta.6", "babel-loader": "8.0.6", "babel-types": "^6.26.0", - "chalk": "^2.4.2", "copy-webpack-plugin": "^5.0.3", "css": "2.2.4", "css-loader": "^3.0.0", @@ -62,6 +62,7 @@ "postcss-import": "12.0.1", "postcss-loader": "^3.0.0", "postcss-pxtransform": "^1.3.2", + "postcss-url": "8.0.0", "request": "^2.88.0", "resolve": "^1.11.1", "sass-loader": "^8.0.2", diff --git a/packages/taro-mini-runner/src/config/babel.ts b/packages/taro-mini-runner/src/config/babel.ts deleted file mode 100644 index aba848350e57..000000000000 --- a/packages/taro-mini-runner/src/config/babel.ts +++ /dev/null @@ -1,20 +0,0 @@ -const babelOptions: IBabelOptions = { - sourceMap: true, - presets: [ - 'env' - ], - plugins: [ - require('babel-plugin-transform-react-jsx'), - 'transform-decorators-legacy', - 'transform-class-properties', - 'transform-object-rest-spread' - ] -} - -export default babelOptions - -export interface IBabelOptions { - sourceMap: boolean, - presets: string[], - plugins: any[] -} diff --git a/packages/taro-mini-runner/src/config/babylon.ts b/packages/taro-mini-runner/src/config/babylon.ts deleted file mode 100644 index 1c1e778de91d..000000000000 --- a/packages/taro-mini-runner/src/config/babylon.ts +++ /dev/null @@ -1,15 +0,0 @@ -export default { - sourceType: 'module', - plugins: [ - 'typescript', - 'classProperties', - 'jsx', - 'trailingFunctionCommas', - 'asyncFunctions', - 'exponentiationOperator', - 'asyncGenerators', - 'objectRestSpread', - 'decorators', - 'dynamicImport' - ] -} diff --git a/packages/taro-mini-runner/src/config/index.ts b/packages/taro-mini-runner/src/config/index.ts deleted file mode 100644 index 677c1b768226..000000000000 --- a/packages/taro-mini-runner/src/config/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -export default { - OUTPUT_DIR: 'dist', - SOURCE_DIR: 'src', - TEMP_DIR: '.temp', - NPM_DIR: 'npm', - ENTRY: 'app' -} diff --git a/packages/taro-mini-runner/src/dependencies/TaroSingleEntryDependency.ts b/packages/taro-mini-runner/src/dependencies/TaroSingleEntryDependency.ts index d23f949f873d..e136fe587121 100644 --- a/packages/taro-mini-runner/src/dependencies/TaroSingleEntryDependency.ts +++ b/packages/taro-mini-runner/src/dependencies/TaroSingleEntryDependency.ts @@ -1,5 +1,5 @@ import * as ModuleDependency from 'webpack/lib/dependencies/ModuleDependency' -import { META_TYPE } from '@tarojs/runner-utils' +import { META_TYPE } from '@tarojs/helper' export default class TaroSingleEntryDependency extends ModuleDependency { name: string diff --git a/packages/taro-mini-runner/src/index.ts b/packages/taro-mini-runner/src/index.ts index 8b797751aecd..afb7cae76228 100644 --- a/packages/taro-mini-runner/src/index.ts +++ b/packages/taro-mini-runner/src/index.ts @@ -1,5 +1,5 @@ import * as webpack from 'webpack' -import { BUILD_TYPES, PARSE_AST_TYPE } from '@tarojs/runner-utils' +import { META_TYPE } from '@tarojs/helper' import { IBuildConfig } from './utils/types' import { printBuildError, bindProdLogger, bindDevLogger } from './utils/logHelper' @@ -8,74 +8,107 @@ import { Prerender } from './prerender/prerender' import { isEmpty } from 'lodash' import { makeConfig } from './webpack/chain' -const customizeChain = (chain, customizeFunc: Function) => { +const customizeChain = async (chain, modifyWebpackChainFunc: Function, customizeFunc: Function) => { + if (modifyWebpackChainFunc instanceof Function) { + await modifyWebpackChainFunc(chain, webpack) + } if (customizeFunc instanceof Function) { - customizeFunc(chain, webpack, PARSE_AST_TYPE) + customizeFunc(chain, webpack, META_TYPE) } } -export default function build (appPath: string, config: IBuildConfig, mainBuilder) { - const mode = config.isWatch ? 'development' : 'production' +export default async function build (appPath: string, config: IBuildConfig) { + const mode = config.mode + const newConfig = await makeConfig(config) + const webpackChain = buildConf(appPath, mode, newConfig) + await customizeChain(webpackChain, newConfig.modifyWebpackChain, newConfig.webpackChain) + const webpackConfig = webpackChain.toConfig() + const onBuildFinish = newConfig.onBuildFinish + const compiler = webpack(webpackConfig) return new Promise((resolve, reject) => { - const { buildAdapter } = config - if (buildAdapter === BUILD_TYPES.PLUGIN) { - config.buildAdapter = BUILD_TYPES.WEAPP - config.isBuildPlugin = true - } - makeConfig(config) - .then(config => { - const webpackChain = buildConf(appPath, mode, config) - - customizeChain(webpackChain, config.webpackChain) - const webpackConfig = webpackChain.toConfig() - - const compiler = webpack(webpackConfig) - let prerender: Prerender - if (config.isWatch) { - bindDevLogger(compiler, config.buildAdapter) - compiler.watch({ - aggregateTimeout: 300, - poll: undefined - }, (err, stats) => { - if (err) { - printBuildError(err) - return reject(err) - } + let prerender: Prerender + if (newConfig.isWatch) { + bindDevLogger(compiler) + compiler.watch({ + aggregateTimeout: 300, + poll: undefined + }, (err, stats) => { + if (err) { + printBuildError(err) + if (typeof onBuildFinish === 'function') { + onBuildFinish({ + error: err, + stats: null, + isWatch: true + }) + } + return reject(err) + } - if (!isEmpty(config.prerender)) { - if (prerender == null) { - prerender = new Prerender(config, webpackConfig, stats) - } - prerender.render().then(() => { - mainBuilder.hooks.afterBuild.call(stats) - resolve() + if (!isEmpty(newConfig.prerender)) { + if (prerender == null) { + prerender = new Prerender(config, webpackConfig, stats) + } + prerender.render().then(() => { + if (typeof onBuildFinish === 'function') { + onBuildFinish({ + error: null, + stats, + isWatch: true }) - } else { - mainBuilder.hooks.afterBuild.call(stats) - resolve() } + resolve() }) } else { - bindProdLogger(compiler, config.buildAdapter) - compiler.run((err, stats) => { - if (err) { - printBuildError(err) - return reject(err) - } - if (config.prerender) { - if (prerender == null) { - prerender = new Prerender(config, webpackConfig, stats) - } - prerender.render().then(() => { - mainBuilder.hooks.afterBuild.call(stats) - resolve() + if (typeof onBuildFinish === 'function') { + onBuildFinish({ + error: null, + stats, + isWatch: true + }) + } + resolve() + } + }) + } else { + bindProdLogger(compiler) + compiler.run((err, stats) => { + if (err) { + printBuildError(err) + if (typeof onBuildFinish === 'function') { + onBuildFinish({ + error: err, + stats: null, + isWatch: false + }) + } + return reject(err) + } + if (newConfig.prerender) { + if (prerender == null) { + prerender = new Prerender(config, webpackConfig, stats) + } + prerender.render().then(() => { + if (typeof onBuildFinish === 'function') { + onBuildFinish({ + error: null, + stats, + isWatch: false }) - } else { - mainBuilder.hooks.afterBuild.call(stats) - resolve() } + resolve() }) + } else { + if (typeof onBuildFinish === 'function') { + onBuildFinish({ + error: null, + stats, + isWatch: false + }) + } + resolve() } }) + } }) } diff --git a/packages/taro-mini-runner/src/plugins/MiniPlugin.ts b/packages/taro-mini-runner/src/plugins/MiniPlugin.ts index d461e9b21a60..579f55d963ec 100644 --- a/packages/taro-mini-runner/src/plugins/MiniPlugin.ts +++ b/packages/taro-mini-runner/src/plugins/MiniPlugin.ts @@ -15,8 +15,6 @@ import { readConfig, isEmptyObject, promoteRelativePath, - BUILD_TYPES, - MINI_APP_FILES, META_TYPE, REG_STYLE, NODE_MODULES_REG, @@ -25,27 +23,34 @@ import { SCRIPT_EXT, printLog, processTypeEnum -} from '@tarojs/runner-utils' +} from '@tarojs/helper' import TaroSingleEntryDependency from '../dependencies/TaroSingleEntryDependency' import { buildBaseTemplate, buildPageTemplate, buildXScript, buildBaseComponentTemplate } from '../template' import TaroNormalModulesPlugin from './TaroNormalModulesPlugin' import TaroLoadChunksPlugin from './TaroLoadChunksPlugin' -import { setAdapter } from '../template/adapters' +import { setAdapter, IAdapter, weixinAdapter } from '../template/adapters' import { componentConfig } from '../template/component' import { validatePrerenderPages, PrerenderConfig } from '../prerender/prerender' -import { AddPageChunks, IComponent } from '../utils/types' +import { AddPageChunks, IComponent, IFileType } from '../utils/types' const PLUGIN_NAME = 'TaroMiniPlugin' interface ITaroMiniPluginOptions { - buildAdapter: BUILD_TYPES + buildAdapter: string sourceDir: string commonChunks: string[] framework: string baseLevel: number prerender?: PrerenderConfig addChunkPages?: AddPageChunks + isBuildQuickapp: boolean + isSupportRecursive: boolean + isSupportXS: boolean + fileType: IFileType + templateAdapter: IAdapter + modifyBuildAssets?: Function, + modifyMiniConfigs?: Function } export interface IComponentObj { @@ -71,17 +76,6 @@ export const createTarget = function createTarget (_) { } } -/** for webpack option.target */ -export const Targets = { - [BUILD_TYPES.WEAPP]: createTarget(BUILD_TYPES.WEAPP), - [BUILD_TYPES.ALIPAY]: createTarget(BUILD_TYPES.ALIPAY), - [BUILD_TYPES.SWAN]: createTarget(BUILD_TYPES.SWAN), - [BUILD_TYPES.TT]: createTarget(BUILD_TYPES.TT), - [BUILD_TYPES.QQ]: createTarget(BUILD_TYPES.QQ), - [BUILD_TYPES.JD]: createTarget(BUILD_TYPES.JD), - [BUILD_TYPES.QUICKAPP]: createTarget(BUILD_TYPES.QUICKAPP) -} - function isLoaderExist (loaders, loaderName: string) { return loaders.some(item => item.loader === loaderName) } @@ -108,13 +102,24 @@ export default class TaroMiniPlugin { constructor (options = {}) { this.options = Object.assign({ - buildAdapter: BUILD_TYPES.WEAPP, + buildAdapter: 'weapp', sourceDir: '', framework: 'nerv', commonChunks: ['runtime', 'vendors'], - baseLevel: 16 + baseLevel: 16, + isBuildQuickapp: false, + isSupportRecursive: false, + isSupportXS: true, + fileType: { + style: '.wxss', + config: '.json', + script: '.js', + templ: '.wxml', + xs: '.wxs' + }, + templateAdapter: weixinAdapter }, options) - setAdapter(this.options.buildAdapter) + setAdapter(this.options.templateAdapter) } /** @@ -135,19 +140,25 @@ export default class TaroMiniPlugin { apply (compiler: webpack.Compiler) { this.context = compiler.context this.appEntry = this.getAppEntry(compiler) - + const { + commonChunks, + addChunkPages, + framework, + isBuildQuickapp, + fileType + } = this.options /** build mode */ compiler.hooks.run.tapAsync( PLUGIN_NAME, this.tryAsync(async (compiler: webpack.Compiler) => { await this.run(compiler) new TaroLoadChunksPlugin({ - commonChunks: this.options.commonChunks, - buildAdapter: this.options.buildAdapter, + commonChunks: commonChunks, isBuildPlugin: false, - addChunkPages: this.options.addChunkPages, + addChunkPages: addChunkPages, pages: this.pages, - framework: this.options.framework + framework: framework, + isBuildQuickapp }).apply(compiler) }) ) @@ -163,12 +174,12 @@ export default class TaroMiniPlugin { await this.run(compiler) if (!this.loadChunksPlugin) { this.loadChunksPlugin = new TaroLoadChunksPlugin({ - commonChunks: this.options.commonChunks, - buildAdapter: this.options.buildAdapter, + commonChunks: commonChunks, isBuildPlugin: false, - addChunkPages: this.options.addChunkPages, + addChunkPages: addChunkPages, pages: this.pages, - framework: this.options.framework + framework: framework, + isBuildQuickapp }) this.loadChunksPlugin.apply(compiler) } @@ -244,8 +255,8 @@ export default class TaroMiniPlugin { */ compilation.hooks.afterOptimizeAssets.tap(PLUGIN_NAME, assets => { Object.keys(assets).forEach(assetPath => { - const styleExt = MINI_APP_FILES[this.options.buildAdapter].STYLE - const templExt = MINI_APP_FILES[this.options.buildAdapter].TEMPL + const styleExt = fileType.style + const templExt = fileType.templ if (new RegExp(`(\\${styleExt}|\\${templExt})\\.js(\\.map){0,1}$`).test(assetPath)) { delete assets[assetPath] } else if (new RegExp(`${styleExt}${styleExt}$`).test(assetPath)) { @@ -582,44 +593,25 @@ export default class TaroMiniPlugin { return filePath.replace(this.context, '').replace(/\\/g, '/').replace(/^\//, '') } - get supportRecursive () { - return this.options.buildAdapter !== BUILD_TYPES.WEAPP && this.options.buildAdapter !== BUILD_TYPES.QQ && this.options.buildAdapter !== BUILD_TYPES.JD - } - /** 生成小程序相关文件 */ - generateMiniFiles (compilation: webpack.compilation.Compilation) { + async generateMiniFiles (compilation: webpack.compilation.Compilation) { const baseTemplateName = 'base' const baseCompName = 'comp' - const { baseLevel } = this.options - if (this.options.buildAdapter === BUILD_TYPES.ALIPAY && this.appConfig.tabBar) { - const tabBarConfig = { ...this.appConfig.tabBar } - const tabBarItems = tabBarConfig.list.map(({ text, iconPath, selectedIconPath, ...rest }) => { - return { - ...rest, - name: text, - icon: iconPath, - activeIcon: selectedIconPath - } - }) - delete tabBarConfig.list - this.generateConfigFile(compilation, this.appEntry, { - ...this.appConfig, - tabBar: { - ...tabBarConfig, - items: tabBarItems - } as any - }) - } else { - this.generateConfigFile(compilation, this.appEntry, this.appConfig) + const { baseLevel, isSupportRecursive, modifyBuildAssets, modifyMiniConfigs } = this.options + if (typeof modifyMiniConfigs === 'function') { + await modifyMiniConfigs(this.filesConfig) } + const appConfigPath = this.getConfigFilePath(this.appEntry) + const appConfigName = path.basename(appConfigPath).replace(path.extname(appConfigPath), '') + this.generateConfigFile(compilation, this.appEntry, this.filesConfig[appConfigName].content) this.generateConfigFile(compilation, baseCompName, { component: true, usingComponents: { [baseCompName]: `./${baseCompName}` } }) - this.generateTemplateFile(compilation, baseTemplateName, buildBaseTemplate, baseLevel, this.supportRecursive) - if (!this.supportRecursive) { + this.generateTemplateFile(compilation, baseTemplateName, buildBaseTemplate, baseLevel, isSupportRecursive) + if (!isSupportRecursive) { // 如微信、QQ 不支持递归模版的小程序,需要使用自定义组件协助递归 this.generateTemplateFile(compilation, baseCompName, buildBaseComponentTemplate) } @@ -638,7 +630,7 @@ export default class TaroMiniPlugin { const importBaseTemplatePath = promoteRelativePath(path.relative(page.path, path.join(this.options.sourceDir, this.getTemplatePath(baseTemplateName)))) const config = this.filesConfig[this.getConfigFilePath(page.name)] if (config) { - if (!this.supportRecursive) { + if (!isSupportRecursive) { const importBaseCompPath = promoteRelativePath(path.relative(page.path, path.join(this.options.sourceDir, this.getTargetFilePath(baseCompName, '')))) config.content.usingComponents = { [baseCompName]: importBaseCompPath, @@ -653,6 +645,9 @@ export default class TaroMiniPlugin { }) this.generateTabBarFiles(compilation) this.injectCommonStyles(compilation) + if (typeof modifyBuildAssets === 'function') { + await modifyBuildAssets(compilation.assets) + } } generateConfigFile (compilation: webpack.compilation.Compilation, filePath: string, config: Config & { component?: boolean }) { @@ -674,7 +669,7 @@ export default class TaroMiniPlugin { } generateXSFile (compilation: webpack.compilation.Compilation) { - const ext = MINI_APP_FILES[this.options.buildAdapter].XS + const ext = this.options.fileType.xs if (ext == null) { return } @@ -709,17 +704,17 @@ export default class TaroMiniPlugin { /** 处理 xml 文件后缀 */ getTemplatePath (filePath: string) { - return this.getTargetFilePath(filePath, MINI_APP_FILES[this.options.buildAdapter].TEMPL) + return this.getTargetFilePath(filePath, this.options.fileType.templ) } /** 处理样式文件后缀 */ getStylePath (filePath: string) { - return this.getTargetFilePath(filePath, MINI_APP_FILES[this.options.buildAdapter].STYLE) + return this.getTargetFilePath(filePath, this.options.fileType.style) } /** 处理 config 文件后缀 */ getConfigPath (filePath: string) { - return this.getTargetFilePath(filePath, MINI_APP_FILES[this.options.buildAdapter].CONFIG) + return this.getTargetFilePath(filePath, this.options.fileType.config) } /** 处理 extname */ @@ -752,7 +747,7 @@ export default class TaroMiniPlugin { * 小程序全局样式文件中引入 common chunks 中的公共样式文件 */ injectCommonStyles ({ assets }: webpack.compilation.Compilation) { - const styleExt = MINI_APP_FILES[this.options.buildAdapter].STYLE + const styleExt = this.options.fileType.style const appStyle = `app${styleExt}` if (!assets[appStyle]) return diff --git a/packages/taro-mini-runner/src/plugins/TaroLoadChunksPlugin.ts b/packages/taro-mini-runner/src/plugins/TaroLoadChunksPlugin.ts index 35c9c5418f86..ac08c855e25c 100644 --- a/packages/taro-mini-runner/src/plugins/TaroLoadChunksPlugin.ts +++ b/packages/taro-mini-runner/src/plugins/TaroLoadChunksPlugin.ts @@ -3,7 +3,11 @@ import * as path from 'path' import webpack from 'webpack' import { ConcatSource } from 'webpack-sources' import { toDashed } from '@tarojs/shared' -import { promoteRelativePath, META_TYPE, BUILD_TYPES, taroJsComponents } from '@tarojs/runner-utils' +import { + promoteRelativePath, + META_TYPE, + taroJsComponents +} from '@tarojs/helper' import { componentConfig } from '../template/component' import { AddPageChunks, IComponent } from '../utils/types' @@ -13,11 +17,11 @@ const PLUGIN_NAME = 'TaroLoadChunksPlugin' interface IOptions { commonChunks: string[], - buildAdapter: BUILD_TYPES, isBuildPlugin: boolean, framework: string, addChunkPages?: AddPageChunks, - pages: Set + pages: Set, + isBuildQuickapp: boolean } interface NormalModule { @@ -27,19 +31,19 @@ interface NormalModule { export default class TaroLoadChunksPlugin { commonChunks: string[] - buildAdapter: BUILD_TYPES isBuildPlugin: boolean framework: string addChunkPages?: AddPageChunks pages: Set + isBuildQuickapp: boolean constructor (options: IOptions) { this.commonChunks = options.commonChunks - this.buildAdapter = options.buildAdapter this.isBuildPlugin = options.isBuildPlugin this.framework = options.framework this.addChunkPages = options.addChunkPages this.pages = options.pages + this.isBuildQuickapp = options.isBuildQuickapp } apply (compiler: webpack.Compiler) { @@ -101,7 +105,7 @@ export default class TaroLoadChunksPlugin { return addRequireToSource(getIdOrName(chunk), modules, commonChunks) } - if ((this.buildAdapter === BUILD_TYPES.QUICKAPP) && + if (this.isBuildQuickapp && (miniType === META_TYPE.PAGE || miniType === META_TYPE.COMPONENT) ) { return addRequireToSource(getIdOrName(chunk), modules, commonChunks) diff --git a/packages/taro-mini-runner/src/plugins/TaroNormalModule.ts b/packages/taro-mini-runner/src/plugins/TaroNormalModule.ts index 480b8b2ecca1..f3e227627af6 100644 --- a/packages/taro-mini-runner/src/plugins/TaroNormalModule.ts +++ b/packages/taro-mini-runner/src/plugins/TaroNormalModule.ts @@ -1,5 +1,5 @@ import * as NormalModule from 'webpack/lib/NormalModule' -import { META_TYPE } from '@tarojs/runner-utils' +import { META_TYPE } from '@tarojs/helper' export default class TaroNormalModule extends NormalModule { name: string diff --git a/packages/taro-mini-runner/src/prerender/prerender.ts b/packages/taro-mini-runner/src/prerender/prerender.ts index 7f15115928b9..5dd0f3b802dc 100644 --- a/packages/taro-mini-runner/src/prerender/prerender.ts +++ b/packages/taro-mini-runner/src/prerender/prerender.ts @@ -1,5 +1,4 @@ import { Shortcuts, noop, isString, isObject, isFunction } from '@tarojs/shared' -import { MINI_APP_FILES } from '@tarojs/runner-utils' import { NodeVM } from 'vm2' import { omitBy } from 'lodash' @@ -232,7 +231,7 @@ export class Prerender { xml = this.prerenderConfig.transformXML(data, config, xml) } - const templatePath = this.getRealPath(path, MINI_APP_FILES[this.buildConfig.buildAdapter].TEMPL) + const templatePath = this.getRealPath(path, this.buildConfig.fileType.templ) const [importTemplate, template] = fs.readFileSync(templatePath, 'utf-8').split('\n') let str = `${importTemplate}\n` diff --git a/packages/taro-mini-runner/src/template/adapters.ts b/packages/taro-mini-runner/src/template/adapters.ts index 290be2a011e0..fa2aeccac865 100644 --- a/packages/taro-mini-runner/src/template/adapters.ts +++ b/packages/taro-mini-runner/src/template/adapters.ts @@ -1,6 +1,4 @@ -import { BUILD_TYPES } from '@tarojs/runner-utils' - -interface Adapter { +export interface IAdapter { if: string; else: string; elseif: string; @@ -9,10 +7,10 @@ interface Adapter { forIndex: string; key: string; xs?: string, - type: BUILD_TYPES; + type: string; } -const weixinAdapter: Adapter = { +export const weixinAdapter: IAdapter = { if: 'wx:if', else: 'wx:else', elseif: 'wx:elif', @@ -21,106 +19,11 @@ const weixinAdapter: Adapter = { forIndex: 'wx:for-index', key: 'wx:key', xs: 'wxs', - type: BUILD_TYPES.WEAPP -} - -const swanAdapter: Adapter = { - if: 's-if', - else: 's-else', - elseif: 's-elif', - for: 's-for', - forItem: 's-for-item', - forIndex: 's-for-index', - key: 's-key', - xs: 'sjs', - type: BUILD_TYPES.SWAN -} - -const alipayAdapter: Adapter = { - if: 'a:if', - else: 'a:else', - elseif: 'a:elif', - for: 'a:for', - forItem: 'a:for-item', - forIndex: 'a:for-index', - key: 'a:key', - xs: 'sjs', - type: BUILD_TYPES.ALIPAY -} - -const ttAdapter: Adapter = { - if: 'tt:if', - else: 'tt:else', - elseif: 'tt:elif', - for: 'tt:for', - forItem: 'tt:for-item', - forIndex: 'tt:for-index', - key: 'tt:key', - type: BUILD_TYPES.TT -} - -const quickappAdapter: Adapter = { - if: 'if', - else: 'else', - elseif: 'elif', - for: 'for', - forItem: 'for-item', - forIndex: 'for-index', - key: 'key', - type: BUILD_TYPES.QUICKAPP -} - -const qqAdapter: Adapter = { - if: 'qq:if', - else: 'qq:else', - elseif: 'qq:elif', - for: 'qq:for', - forItem: 'qq:for-item', - forIndex: 'qq:for-index', - key: 'qq:key', - xs: 'wxs', - type: BUILD_TYPES.QQ -} - -const jdAdapter: Adapter = { - if: 'jd:if', - else: 'jd:else', - elseif: 'jd:elif', - for: 'jd:for', - forItem: 'jd:for-item', - forIndex: 'jd:for-index', - key: 'jd:key', - type: BUILD_TYPES.JD -} - -export const supportXS = () => { - return [BUILD_TYPES.QQ, BUILD_TYPES.WEAPP, BUILD_TYPES.SWAN, BUILD_TYPES.ALIPAY].includes(Adapter.type) + type: 'weapp' } -export let Adapter: Adapter = weixinAdapter +export let Adapter: IAdapter = weixinAdapter -export function setAdapter (adapter: BUILD_TYPES) { - switch (adapter.toLowerCase()) { - case BUILD_TYPES.SWAN: - Adapter = swanAdapter - break - case BUILD_TYPES.ALIPAY: - Adapter = alipayAdapter - break - case BUILD_TYPES.TT: - Adapter = ttAdapter - break - case BUILD_TYPES.QUICKAPP: - Adapter = quickappAdapter - break - case BUILD_TYPES.QQ: - Adapter = qqAdapter - break - case BUILD_TYPES.JD: - Adapter = jdAdapter - break - default: - Adapter = weixinAdapter - break - } +export function setAdapter (adapter) { + Adapter = adapter } diff --git a/packages/taro-mini-runner/src/template/index.ts b/packages/taro-mini-runner/src/template/index.ts index 140741bf82c5..21546207e096 100644 --- a/packages/taro-mini-runner/src/template/index.ts +++ b/packages/taro-mini-runner/src/template/index.ts @@ -13,9 +13,9 @@ */ import { internalComponents, Shortcuts, createMiniComponents, focusComponents, isArray, capitalize } from '@tarojs/shared' -import { BUILD_TYPES } from '@tarojs/runner-utils' +import { PLATFORMS } from '@tarojs/helper' -import { Adapter, supportXS } from './adapters' +import { Adapter } from './adapters' import { componentConfig } from './component' interface Component { @@ -50,7 +50,7 @@ const swanSpecialAttrs = { export function buildAttribute (attrs: Attributes, nodeName: string): string { function getValue (key: string) { - if (Adapter.type === BUILD_TYPES.SWAN && isArray(swanSpecialAttrs[nodeName]) && swanSpecialAttrs[nodeName].includes(key)) { + if (Adapter.type === PLATFORMS.SWAN && isArray(swanSpecialAttrs[nodeName]) && swanSpecialAttrs[nodeName].includes(key)) { return `= ${attrs[key]} =` } @@ -62,12 +62,12 @@ export function buildAttribute (attrs: Attributes, nodeName: string): string { } const dataKeymap = (keymap: string) => { - return Adapter.type === BUILD_TYPES.SWAN ? `{ ${keymap} }` : keymap + return Adapter.type === PLATFORMS.SWAN ? `{ ${keymap} }` : keymap } function buildStandardComponentTemplate (comp: Component, level: number, supportRecursive: boolean): string { const nextLevel = supportRecursive ? 0 : level + 1 - const child = Adapter.type === BUILD_TYPES.SWAN && comp.nodeName === 'text' + const child = Adapter.type === PLATFORMS.SWAN && comp.nodeName === 'text' ? `{{ i.${Shortcuts.Childnodes}[index].${Shortcuts.Text} }}` : `