diff --git a/.gitignore b/.gitignore index b7306c2..20939da 100644 --- a/.gitignore +++ b/.gitignore @@ -36,6 +36,9 @@ project.xcworkspace .idea .gradle local.properties +**/.project +**/.settings +**/.classpath # node.js # diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..efa0fc0 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +registry=https://registry.npm.taobao.org/ \ No newline at end of file diff --git a/docs/guide3.md b/docs/guide3.md index dbf2a8e..53092dd 100644 --- a/docs/guide3.md +++ b/docs/guide3.md @@ -23,12 +23,12 @@ $ pushy uploadIpa ## 发布安卓应用 首先参考[文档-生成已签名的APK](https://reactnative.cn/docs/signed-apk-android.html#content)设置签名, -然后在android文件夹下运行`./gradlew assembleRelease`,你就可以在`android/app/build/outputs/apk/app-release.apk`中找到你的应用包。 +然后在android文件夹下运行`./gradlew assembleRelease`或`./gradlew aR`,你就可以在`android/app/build/outputs/apk/release/app-release.apk`中找到你的应用包。 然后运行如下命令 ```bash -$ pushy uploadApk android/app/build/outputs/apk/app-release.apk +$ pushy uploadApk android/app/build/outputs/apk/release/app-release.apk ``` 即可上传apk以供后续版本比对之用。 diff --git a/local-cli/cli.json b/local-cli/cli.json index 55c5b65..76414c5 100644 --- a/local-cli/cli.json +++ b/local-cli/cli.json @@ -96,13 +96,18 @@ "description": "Bundle javascript code only.", "options": { "dev": { - "default": false + "default": "false", + "hasValue": true }, "platform": { "hasValue": true }, + "bundleName":{ + "default": "index.bundlejs", + "hasValue": true + }, "entryFile": { - "default": "", + "default": "index.js", "hasValue": true }, "intermediaDir": { diff --git a/local-cli/src/api.js b/local-cli/src/api.js index c954eda..8204a3e 100644 --- a/local-cli/src/api.js +++ b/local-cli/src/api.js @@ -4,8 +4,7 @@ const fetch = require('isomorphic-fetch'); let host = process.env.PUSHY_REGISTRY || 'https://update.reactnative.cn/api'; -const fs = require('fs-promise'); -import * as fsOrigin from 'fs'; +const fs = require('fs-extra'); import request from 'request'; import ProgressBar from 'progress'; @@ -13,9 +12,9 @@ let session = undefined; let savedSession = undefined; exports.loadSession = async function() { - if (await fs.exists('.update')) { + if (fs.existsSync('.update')) { try { - exports.replaceSession(JSON.parse(await fs.readFile('.update', 'utf8'))); + exports.replaceSession(JSON.parse(fs.readFileSync('.update', 'utf8'))); savedSession = session; } catch (e) { console.error('Failed to parse file `.update`. Try to remove it manually.'); @@ -32,19 +31,19 @@ exports.replaceSession = function(newSession) { session = newSession; }; -exports.saveSession = async function() { +exports.saveSession = function() { // Only save on change. if (session !== savedSession) { const current = session; const data = JSON.stringify(current, null, 4); - await fs.writeFile('.update', data, 'utf8'); + fs.writeFileSync('.update', data, 'utf8'); savedSession = current; } }; -exports.closeSession = async function() { - if (await fs.exists('.update')) { - await fs.unlink('.update'); +exports.closeSession = function() { + if (fs.existsSync('.update')) { + fs.unlinkSync('.update'); savedSession = undefined; } session = undefined; @@ -97,7 +96,7 @@ async function uploadFile(fn) { realUrl = host + url; } - const fileSize = (await fs.stat(fn)).size; + const fileSize = fs.statSync(fn).size; const bar = new ProgressBar(' Uploading [:bar] :percent :etas', { complete: '=', @@ -106,7 +105,7 @@ async function uploadFile(fn) { }); const info = await new Promise((resolve, reject) => { - formData.file = fsOrigin.createReadStream(fn); + formData.file = fs.createReadStream(fn); formData.file.on('data', function(data) { bar.tick(data.length); diff --git a/local-cli/src/app.js b/local-cli/src/app.js index af27ca1..6d805e4 100644 --- a/local-cli/src/app.js +++ b/local-cli/src/app.js @@ -3,7 +3,7 @@ */ import {question} from './utils'; -import * as fs from 'fs-promise'; +import * as fs from 'fs-extra'; const { post, @@ -23,13 +23,13 @@ export function checkPlatform(platform) { return platform } -export async function getSelectedApp(platform) { +export function getSelectedApp(platform) { checkPlatform(platform); - if (!await fs.exists('update.json')){ + if (!fs.existsSync('update.json')){ throw new Error(`App not selected. run 'pushy selectApp --platform ${platform}' first!`); } - const updateInfo = JSON.parse(await fs.readFile('update.json', 'utf8')); + const updateInfo = JSON.parse(fs.readFileSync('update.json', 'utf8')); if (!updateInfo[platform]) { throw new Error(`App not selected. run 'pushy selectApp --platform ${platform}' first!`); } @@ -92,9 +92,9 @@ export const commands = { const id = args[0] || (await chooseApp(platform)).id; let updateInfo = {}; - if (await fs.exists('update.json')) { + if (fs.existsSync('update.json')) { try { - updateInfo = JSON.parse(await fs.readFile('update.json', 'utf8')); + updateInfo = JSON.parse(fs.readFileSync('update.json', 'utf8')); } catch (e) { console.error('Failed to parse file `update.json`. Try to remove it manually.'); throw e; @@ -105,6 +105,6 @@ export const commands = { appId: id, appKey, }; - await fs.writeFile('update.json', JSON.stringify(updateInfo, null, 4), 'utf8'); + fs.writeFileSync('update.json', JSON.stringify(updateInfo, null, 4), 'utf8'); }, } diff --git a/local-cli/src/bundle.js b/local-cli/src/bundle.js index 46f5b38..d6efafe 100644 --- a/local-cli/src/bundle.js +++ b/local-cli/src/bundle.js @@ -3,17 +3,14 @@ */ import * as path from 'path'; -import { mkdir as mkdirRecurisve } from 'mkdir-recursive'; -import rmdirRecursive from 'rimraf'; import { getRNVersion, translateOptions } from './utils'; -import * as fs from 'fs'; +import * as fs from 'fs-extra'; import { ZipFile } from 'yazl'; import { open as openZipFile } from 'yauzl'; // import {diff} from 'node-bsdiff'; import { question } from './utils'; import { checkPlatform } from './app'; -import crypto from 'crypto'; -import minimist from 'minimist'; +const { spawn } = require('child_process'); var diff; try { @@ -28,32 +25,74 @@ try { }; } -function mkdir(dir) { - return new Promise((resolve, reject) => { - mkdirRecurisve(dir, err => { - if (err) { - reject(err); - } else { - resolve(); - } - }); - }); -} +async function runReactNativeBundleCommand( + bundleName, + development, + entryFile, + outputFolder, + platform, + sourcemapOutput, + config, +) { + let reactNativeBundleArgs = []; -function rmdir(dir) { - return new Promise((resolve, reject) => { - rmdirRecursive(dir, err => { - if (err) { - reject(err); - } else { - resolve(); + let envArgs = process.env.PUSHY_ENV_ARGS; + + if (envArgs) { + Array.prototype.push.apply(reactNativeBundleArgs, envArgs.trim().split(/\s+/)); + } + + fs.emptyDirSync(outputFolder); + + Array.prototype.push.apply(reactNativeBundleArgs, [ + path.join('node_modules', 'react-native', 'local-cli', 'cli.js'), + 'bundle', + '--assets-dest', + outputFolder, + '--bundle-output', + path.join(outputFolder, bundleName), + '--dev', + development, + '--entry-file', + entryFile, + '--platform', + platform, + ]); + + if (sourcemapOutput) { + reactNativeBundleArgs.push('--sourcemap-output', sourcemapOutput); + } + + if (config) { + reactNativeBundleArgs.push('--config', config); + } + + console.log(`Running "react-native bundle" command:\n`); + const reactNativeBundleProcess = spawn('node', reactNativeBundleArgs); + console.log(`node ${reactNativeBundleArgs.join(' ')}`); + + return new Promise((resolve, reject, notify) => { + reactNativeBundleProcess.stdout.on('data', data => { + console.log(data.toString().trim()); + }); + + reactNativeBundleProcess.stderr.on('data', data => { + console.error(data.toString().trim()); + }); + + reactNativeBundleProcess.on('close', exitCode => { + if (exitCode) { + reject(new Error(`"react-native bundle" command exited with code ${exitCode}.`)); } + + resolve(null); }); }); } async function pack(dir, output) { - await mkdir(path.dirname(output)); + console.log('Packing'); + fs.ensureDirSync(path.dirname(output)); await new Promise((resolve, reject) => { var zipfile = new ZipFile(); @@ -115,7 +154,7 @@ function basename(fn) { } async function diffFromPPK(origin, next, output) { - await mkdir(path.dirname(output)); + fs.ensureDirSync(path.dirname(output)); const originEntries = {}; const originMap = {}; @@ -233,7 +272,7 @@ async function diffFromPPK(origin, next, output) { } async function diffFromPackage(origin, next, output, originBundleName, transformPackagePath = v => v) { - await mkdir(path.dirname(output)); + fs.ensureDirSync(path.dirname(output)); const originEntries = {}; const originMap = {}; @@ -342,12 +381,12 @@ export const commands = { bundle: async function({ options }) { const platform = checkPlatform(options.platform || (await question('Platform(ios/android):'))); - let { entryFile, intermediaDir, output, dev, verbose } = translateOptions({ + let { bundleName, entryFile, intermediaDir, output, dev, verbose } = translateOptions({ ...options, platform, }); - const realIntermedia = path.resolve(intermediaDir); + // const sourcemapOutput = path.join(intermediaDir, bundleName + ".map"); const realOutput = output.replace(/\$\{time\}/g, '' + Date.now()); @@ -355,141 +394,14 @@ export const commands = { throw new Error('Platform must be specified.'); } - const { version, major, minor } = getRNVersion(); + // const { version, major, minor } = getRNVersion(); - console.log('Bundling with React Native version: ', version); + // console.log('Bundling with React Native version: ', version); - await rmdir(realIntermedia); - await mkdir(realIntermedia); - if (major === 0) { - if (minor >= 56) { - require('metro-babel-register'); - } else if (minor >= 52) { - require('metro/src/babelRegisterOnly'); - } else if (minor >= 47) { - require('metro-bundler/src/babelRegisterOnly'); - } else if (minor === 46) { - require('metro-bundler/build/babelRegisterOnly'); - } else { - // handle RN <= 0.45 - require(path.resolve('node_modules/react-native/packager/babelRegisterOnly'))([ - /private-cli\/src/, - /local-cli/, - ]); - } - } + await runReactNativeBundleCommand(bundleName, dev, entryFile, intermediaDir, platform); - // This line fix issue #11 - require(path.resolve('node_modules/react-native/local-cli/cli')); - - let Config, defaultConfig, bundle; - - if (major === 0) { - if (minor >= 49) { - entryFile = entryFile || `index.js`; - } else { - entryFile = entryFile || `index.${platform}.js`; - } - } - - if (major === 0) { - if (minor >= 59) { - Config = require(path.resolve('node_modules/@react-native-community/cli/build/tools/loadMetroConfig')); - bundle = require(path.resolve('node_modules/@react-native-community/cli/build/commands/bundle/bundle')).default; - } else { - Config = require(path.resolve('node_modules/react-native/local-cli/util/Config')); - bundle = require(path.resolve('node_modules/react-native/local-cli/bundle/bundle')); - } - if (minor >= 59) { - // https://github.com/react-native-community/cli/blob/1.x/packages/cli/src/cliEntry.js#L170-L202 - const options = minimist(process.argv.slice(2)); - - const root = options.projectRoot ? path.resolve(options.projectRoot) : process.cwd(); - - const reactNativePath = options.reactNativePath - ? path.resolve(options.reactNativePath) - : (() => { - try { - return path.dirname( - require.resolve('react-native/package.json', { - paths: [root], - }), - ); - } catch (_ignored) { - throw new Error('Unable to find React Native files. Please use --reactNativePath to specify the path.'); - } - })(); - - defaultConfig = { - reactNativePath, - root, - }; - } else if (minor >= 57) { - // https://github.com/facebook/react-native/commit/a32620dc3b7a0ebd53feeaf7794051705d80f49e#diff-75692fe55c8b1a7c05f4264301342167L101 - // defaultConfig = Config.load(); - const { configPromise } = require(path.resolve('node_modules/react-native/local-cli/core')); - defaultConfig = await configPromise; - } else if (minor >= 45) { - defaultConfig = Config.findOptional(path.resolve('.')); - } else if (minor >= 42) { - defaultConfig = Config.get( - path.resolve('node_modules/react-native/local-cli'), - require(path.resolve('node_modules/react-native/local-cli/core/default.config')), - path.resolve('node_modules/react-native/packager/rn-cli.config.js'), - ); - } else if (minor >= 33) { - defaultConfig = Config.get( - path.resolve('node_modules/react-native/local-cli'), - require(path.resolve('node_modules/react-native/local-cli/default.config')), - path.resolve('node_modules/react-native/packager/rn-cli.config.js'), - ); - } else { - defaultConfig = Config.get( - path.resolve('node_modules/react-native/local-cli'), - require(path.resolve('node_modules/react-native/local-cli/default.config')), - ); - } - } else { - defaultConfig = Config.findOptional(path.resolve('.')); - } - - console; - if (bundle.func) { - // React native >= 0.31.0 - await bundle.func([], defaultConfig, { - entryFile: entryFile, - platform: platform, - dev: !!dev, - bundleOutput: `${realIntermedia}${path.sep}index.bundlejs`, - assetsDest: `${realIntermedia}`, - verbose: !!verbose, - bundleEncoding: 'utf8', - }); - } else { - // React native < 0.31.0 - await bundle( - [ - '--entry-file', - entryFile, - '--platform', - platform, - '--dev', - '' + !!dev, - '--bundle-output', - `${realIntermedia}${path.sep}index.bundlejs`, - '--assets-dest', - `${realIntermedia}`, - '--verbose', - '' + !!verbose, - ], - defaultConfig, - ); - } - - console.log('Packing'); - - await pack(realIntermedia, realOutput); + await pack(path.resolve(intermediaDir), realOutput); const v = await question('Would you like to publish it?(Y/N)'); if (v.toLowerCase() === 'y') { diff --git a/local-cli/src/package.js b/local-cli/src/package.js index 079647e..8c835c6 100644 --- a/local-cli/src/package.js +++ b/local-cli/src/package.js @@ -2,30 +2,33 @@ * Created by tdzl2003 on 4/2/16. */ -const { - get, - post, - uploadFile, -} = require('./api'); +const { get, post, uploadFile } = require('./api'); import { question } from './utils'; import { checkPlatform, getSelectedApp } from './app'; -import {getIPAVersion, getApkVersion} from './utils'; +import { getIPAVersion, getApkVersion } from './utils'; +const Table = require('tty-table'); -export async function listPackage(appId){ - const {data} = await get(`/app/${appId}/package/list?limit=1000`); +export async function listPackage(appId) { + const { data } = await get(`/app/${appId}/package/list?limit=1000`); + + const header = [{ value: 'Package Id' }, { value: 'Version' }]; + const rows = []; for (const pkg of data) { - const {version} = pkg; + const { version } = pkg; let versionInfo = ''; if (version) { versionInfo = ` - ${version.id} ${version.hash.slice(0, 8)} ${version.name}`; } else { versionInfo = ' (newest)'; } - console.log(`${pkg.id}) ${pkg.name}(${pkg.status})${versionInfo}`); + + rows.push([pkg.id, `${pkg.name}(${pkg.status})${versionInfo}`]); } - console.log(`\nTotal ${data.length} packages.`); + + console.log(Table(header, rows).render()); + console.log(`\nTotal ${data.length} package(s).`); return data; } @@ -33,8 +36,8 @@ export async function choosePackage(appId) { const list = await listPackage(appId); while (true) { - const id = await question('Enter packageId:'); - const app = list.find(v=>v.id === (id|0)); + const id = await question('Enter Package Id:'); + const app = list.find(v => v.id === (id | 0)); if (app) { return app; } @@ -42,40 +45,40 @@ export async function choosePackage(appId) { } export const commands = { - uploadIpa: async function({args}) { + uploadIpa: async function({ args }) { const fn = args[0]; if (!fn) { throw new Error('Usage: pushy uploadIpa '); } const name = await getIPAVersion(fn); - const {appId} = await getSelectedApp('ios'); + const { appId } = await getSelectedApp('ios'); - const {hash} = await uploadFile(fn); + const { hash } = await uploadFile(fn); - const {id} = await post(`/app/${appId}/package/create`, { + const { id } = await post(`/app/${appId}/package/create`, { name, hash, }); console.log(`Ipa uploaded: ${id}`); }, - uploadApk: async function({args}) { + uploadApk: async function({ args }) { const fn = args[0]; if (!fn) { throw new Error('Usage: pushy uploadApk '); } const name = await getApkVersion(fn); - const {appId} = await getSelectedApp('android'); + const { appId } = await getSelectedApp('android'); - const {hash} = await uploadFile(fn); + const { hash } = await uploadFile(fn); - const {id} = await post(`/app/${appId}/package/create`, { + const { id } = await post(`/app/${appId}/package/create`, { name, hash, }); console.log(`Apk uploaded: ${id}`); }, - packages: async function({options}) { - const platform = checkPlatform(options.platform || await question('Platform(ios/android):')); + packages: async function({ options }) { + const platform = checkPlatform(options.platform || (await question('Platform(ios/android):'))); const { appId } = await getSelectedApp(platform); await listPackage(appId); }, diff --git a/local-cli/src/utils/index.js b/local-cli/src/utils/index.js index e4cd837..8475315 100644 --- a/local-cli/src/utils/index.js +++ b/local-cli/src/utils/index.js @@ -3,7 +3,7 @@ */ import * as path from 'path'; -import * as fs from 'fs'; +import * as fs from 'fs-extra'; import ApkReader from 'node-apk-parser'; import ipaReader from './ipaReader'; diff --git a/package.json b/package.json index 69cb85c..6add2b4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-update", - "version": "5.1.7", + "version": "5.1.8", "description": "react-native hot update", "main": "lib/index.js", "scripts": { @@ -30,17 +30,16 @@ "dependencies": { "cli-arguments": "^0.2.1", "decompress-zip": "^0.3.1", - "fs-promise": "^0.4.1", + "fs-extra": "^8.1.0", "glob": "^7.1.2", "isomorphic-fetch": "^2.2.1", - "mkdir-recursive": "^0.2.1", "node-apk-parser": "^0.2.3", "progress": "^1.1.8", "read": "^1.0.7", "request": "^2.69.0", - "rimraf": "^2.6.2", "simple-plist": "^0.3.0", "temporary": "^0.0.8", + "tty-table": "^2.7.0", "yauzl": "2.4.1", "yazl": "2.3.0" }, diff --git a/react-native-pushy-cli/src/cli.js b/react-native-pushy-cli/src/cli.js index ef5cb4d..51d214b 100755 --- a/react-native-pushy-cli/src/cli.js +++ b/react-native-pushy-cli/src/cli.js @@ -4,7 +4,7 @@ */ import * as path from 'path'; -import * as fs from 'fs-promise'; +import * as fs from 'fs-extra'; const CLI_MODULE_PATH = function() { return path.resolve( diff --git a/yarn.lock b/yarn.lock index 963af9a..ed91591 100644 --- a/yarn.lock +++ b/yarn.lock @@ -40,13 +40,26 @@ ansi-regex@^2.0.0: version "2.1.1" resolved "http://registry.npm.taobao.org/ansi-regex/download/ansi-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#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc= + ansi-styles@^2.2.1: version "2.2.1" resolved "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" -any-promise@^1.0.0: - version "1.3.0" - resolved "http://registry.npm.taobao.org/any-promise/download/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" +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" + integrity sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0= + dependencies: + color-convert "^1.9.0" anymatch@^1.3.0: version "1.3.0" @@ -593,6 +606,13 @@ breakable@~1.0.0: version "1.0.0" resolved "http://registry.npm.taobao.org/breakable/download/breakable-1.0.0.tgz#784a797915a38ead27bad456b5572cb4bbaa78c1" +breakword@^1.0.3: + version "1.0.3" + resolved "https://registry.npm.taobao.org/breakword/download/breakword-1.0.3.tgz#71e091bbb78bb4ef003cf3ed2b2e062c6927f7dd" + integrity sha1-ceCRu7eLtO8APPPtKy4GLGkn990= + dependencies: + wcwidth "^1.0.1" + buffer-crc32@~0.2.3: version "0.2.13" resolved "http://registry.npm.taobao.org/buffer-crc32/download/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" @@ -609,6 +629,11 @@ camelcase@^1.2.1: version "1.2.1" resolved "http://registry.npm.taobao.org/camelcase/download/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA= + caseless@~0.11.0: version "0.11.0" resolved "http://registry.npm.taobao.org/caseless/download/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" @@ -636,6 +661,15 @@ chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1: strip-ansi "^3.0.0" supports-color "^2.0.0" +chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ= + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + chokidar@^1.6.1: version "1.6.1" resolved "http://registry.npm.taobao.org/chokidar/download/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" @@ -663,10 +697,36 @@ cliui@^2.1.0: right-align "^0.1.1" wordwrap "0.0.2" +cliui@^4.0.0: + version "4.1.0" + resolved "https://registry.npm.taobao.org/cliui/download/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + integrity sha1-NIQi2+gtgAswIu709qwQvy5NG0k= + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.npm.taobao.org/clone/download/clone-1.0.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fclone%2Fdownload%2Fclone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + code-point-at@^1.0.0: version "1.1.0" resolved "http://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg= + dependencies: + color-name "1.1.3" + +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" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + combined-stream@^1.0.5, combined-stream@~1.0.5: version "1.0.5" resolved "http://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" @@ -717,12 +777,50 @@ core-util-is@~1.0.0: version "1.0.2" resolved "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q= + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + cryptiles@2.x.x: version "2.0.5" resolved "http://registry.npm.taobao.org/cryptiles/download/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" dependencies: boom "2.x.x" +csv-generate@^2.2.2: + version "2.2.2" + resolved "https://registry.npm.taobao.org/csv-generate/download/csv-generate-2.2.2.tgz#c37808c5f3ead2deec940794073dd32d492adfd1" + integrity sha1-w3gIxfPq0t7slAeUBz3TLUkq39E= + +csv-parse@^3.1.2: + version "3.2.0" + resolved "https://registry.npm.taobao.org/csv-parse/download/csv-parse-3.2.0.tgz#9043b5921e7ecd5e3110947df1ef00d290dbeca7" + integrity sha1-kEO1kh5+zV4xEJR98e8A0pDb7Kc= + +csv-stringify@^4.3.1: + version "4.3.1" + resolved "https://registry.npm.taobao.org/csv-stringify/download/csv-stringify-4.3.1.tgz#7bee36f746ef555dd481a735a9e2938965f8478b" + integrity sha1-e+4290bvVV3Ugac1qeKTiWX4R4s= + dependencies: + lodash.get "~4.4.2" + +csv@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/csv/download/csv-4.0.0.tgz#c7de44b9a0fd47f7a10db24064519f642a7ce92d" + integrity sha1-x95EuaD9R/ehDbJAZFGfZCp86S0= + dependencies: + csv-generate "^2.2.2" + csv-parse "^3.1.2" + csv-stringify "^4.3.1" + stream-transform "^1.0.7" + dashdash@^1.12.0: version "1.14.1" resolved "http://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -745,7 +843,7 @@ debug@~2.2.0: dependencies: ms "0.7.1" -decamelize@^1.0.0: +decamelize@^1.0.0, decamelize@^1.2.0: version "1.2.0" resolved "http://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -765,6 +863,13 @@ deep-extend@~0.4.0: version "0.4.1" resolved "http://registry.npm.taobao.org/deep-extend/download/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.npm.taobao.org/defaults/download/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + dependencies: + clone "^1.0.2" + defined@^1.0.0: version "1.0.0" resolved "http://registry.npm.taobao.org/defined/download/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" @@ -825,7 +930,14 @@ encoding@^0.1.11: dependencies: iconv-lite "~0.4.13" -escape-string-regexp@^1.0.2: +end-of-stream@^1.1.0: + version "1.4.1" + resolved "https://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" + integrity sha1-7SljTRm6ukY7bOa4CjchPqtx7EM= + dependencies: + once "^1.4.0" + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "http://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -845,6 +957,19 @@ esutils@^2.0.0, esutils@^2.0.2: version "2.0.2" resolved "http://registry.npm.taobao.org/esutils/download/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/execa/download/execa-1.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg= + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.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" + expand-brackets@^0.1.4: version "0.1.5" resolved "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" @@ -891,6 +1016,13 @@ fill-range@^2.1.0: repeat-element "^1.1.2" repeat-string "^1.5.2" +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz?cache=0&sync_timestamp=1560752454611&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha1-SRafHXmTQwZG2mHsxa41XCHJe3M= + dependencies: + locate-path "^3.0.0" + for-in@^1.0.1: version "1.0.2" resolved "http://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -913,11 +1045,14 @@ form-data@~2.1.1: combined-stream "^1.0.5" mime-types "^2.1.12" -fs-promise@^0.4.1: - version "0.4.1" - resolved "http://registry.npm.taobao.org/fs-promise/download/fs-promise-0.4.1.tgz#9d57aed89dbcea0fdb6d4cb9c2044aedd9722efd" +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== dependencies: - any-promise "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" fs-readdir-recursive@^0.1.0: version "0.1.2" @@ -978,10 +1113,22 @@ generate-object-property@^1.1.0: dependencies: is-property "^1.0.0" +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha1-+Xj6TJDR3+f/LWvtoqUV5xO9z0o= + get-stdin@^4.0.1: version "4.0.1" resolved "http://registry.npm.taobao.org/get-stdin/download/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.npm.taobao.org/get-stream/download/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha1-wbJVV189wh1Zv8ec09K0axw6VLU= + dependencies: + pump "^3.0.0" + getpass@^0.1.1: version "0.1.6" resolved "http://registry.npm.taobao.org/getpass/download/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" @@ -1045,6 +1192,11 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.4: version "4.1.11" resolved "http://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.0.tgz#8d8fdc73977cb04104721cb53666c1ca64cd328b" + integrity sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg== + "graceful-readlink@>= 1.0.0": version "1.0.1" resolved "http://registry.npm.taobao.org/graceful-readlink/download/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" @@ -1064,6 +1216,11 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" +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" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + has-unicode@^2.0.0: version "2.0.1" resolved "http://registry.npm.taobao.org/has-unicode/download/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -1132,6 +1289,11 @@ invert-kv@^1.0.0: version "1.0.0" resolved "http://registry.npm.taobao.org/invert-kv/download/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/invert-kv/download/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha1-c5P1r6Weyf9fZ6J2INEcIm4+7AI= + is-binary-path@^1.0.0: version "1.0.1" resolved "http://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" @@ -1172,6 +1334,11 @@ is-fullwidth-code-point@^1.0.0: 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" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + is-glob@^2.0.0, is-glob@^2.0.1: version "2.0.1" resolved "http://registry.npm.taobao.org/is-glob/download/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" @@ -1211,7 +1378,7 @@ is-property@^1.0.0: version "1.0.2" resolved "http://registry.npm.taobao.org/is-property/download/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" -is-stream@^1.0.1: +is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "http://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -1227,6 +1394,11 @@ isarray@1.0.0, isarray@~1.0.0: version "1.0.0" resolved "http://registry.npm.taobao.org/isarray/download/isarray-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" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + isobject@^2.0.0: version "2.1.0" resolved "http://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" @@ -1286,6 +1458,13 @@ json5@^0.5.0: version "0.5.1" resolved "http://registry.npm.taobao.org/json5/download/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + jsonpointer@^4.0.0: version "4.0.1" resolved "http://registry.npm.taobao.org/jsonpointer/download/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" @@ -1314,10 +1493,25 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/lcid/download/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha1-bvXS32DlL4LrIopMNz6NHzlyU88= + dependencies: + invert-kv "^2.0.0" + leven@^1.0.2: version "1.0.2" resolved "http://registry.npm.taobao.org/leven/download/leven-1.0.2.tgz#9144b6eebca5f1d0680169f1a6770dcea60b75c3" +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" + integrity sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4= + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + lodash._baseassign@^3.0.0: version "3.2.0" resolved "http://registry.npm.taobao.org/lodash._baseassign/download/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" @@ -1379,6 +1573,11 @@ lodash.assign@^3.2.0: lodash._createassigner "^3.0.0" lodash.keys "^3.0.0" +lodash.get@~4.4.2: + version "4.4.2" + resolved "https://registry.npm.taobao.org/lodash.get/download/lodash.get-4.4.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash.get%2Fdownload%2Flodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + lodash.isarguments@^3.0.0: version "3.1.0" resolved "http://registry.npm.taobao.org/lodash.isarguments/download/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" @@ -1434,6 +1633,22 @@ loose-envify@^1.0.0: dependencies: js-tokens "^3.0.0" +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.npm.taobao.org/map-age-cleaner/download/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha1-fVg6cwZDTAVf5HSw9FB45uG0uSo= + dependencies: + p-defer "^1.0.0" + +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.npm.taobao.org/mem/download/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha1-Rhr0l7xK4JYIzbLmDu+2m/90QXg= + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + micromatch@^2.1.5: version "2.3.11" resolved "http://registry.npm.taobao.org/micromatch/download/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" @@ -1462,6 +1677,11 @@ mime-types@^2.1.12, mime-types@~2.1.7: dependencies: mime-db "~1.26.0" +mimic-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs= + "minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2: version "3.0.3" resolved "http://registry.npm.taobao.org/minimatch/download/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" @@ -1488,10 +1708,6 @@ minimist@^1.1.0, minimist@^1.2.0: version "1.2.0" resolved "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" -mkdir-recursive@^0.2.1: - version "0.2.3" - resolved "http://registry.npm.taobao.org/mkdir-recursive/download/mkdir-recursive-0.2.3.tgz#056327ff2c973b46e7cbc42376ff0648ccc48a4a" - "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: version "0.5.1" resolved "http://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" @@ -1518,6 +1734,11 @@ nan@^2.3.0: version "2.5.1" resolved "http://registry.npm.taobao.org/nan/download/nan-2.5.1.tgz#d5b01691253326a97a2bbee9e61c55d8d60351e2" +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" + integrity sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y= + node-apk-parser@^0.2.3: version "0.2.3" resolved "http://registry.npm.taobao.org/node-apk-parser/download/node-apk-parser-0.2.3.tgz#385a141a6da38de562e5d9f08961bf9724d35fc4" @@ -1562,6 +1783,13 @@ normalize-path@^2.0.1: version "2.0.1" resolved "http://registry.npm.taobao.org/normalize-path/download/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a" +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" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + npmlog@^4.0.1: version "4.0.2" resolved "http://registry.npm.taobao.org/npmlog/download/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" @@ -1590,7 +1818,7 @@ object.omit@^2.0.0: for-own "^0.1.4" is-extendable "^0.1.1" -once@^1.3.0: +once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "http://registry.npm.taobao.org/once/download/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: @@ -1612,6 +1840,15 @@ os-locale@^1.4.0: dependencies: lcid "^1.0.0" +os-locale@^3.0.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/os-locale/download/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha1-qAKm7hfyTBBIOrmTVxnO9O0Wvxo= + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" + os-tmpdir@^1.0.1: version "1.0.2" resolved "http://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -1624,6 +1861,40 @@ output-file-sync@^1.1.0: mkdirp "^0.5.1" object-assign "^4.1.0" +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/p-defer/download/p-defer-1.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-defer%2Fdownload%2Fp-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + +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" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/p-is-promise/download/p-is-promise-2.1.0.tgz?cache=0&sync_timestamp=1561997559793&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-is-promise%2Fdownload%2Fp-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha1-kYzrrqJIpiz3/6uOO8qMX4gvxC4= + +p-limit@^2.0.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/p-limit/download/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" + integrity sha1-QXyZQeYCepq8ulCS3SkE4lW1+8I= + dependencies: + p-try "^2.0.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" + integrity sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ= + dependencies: + p-limit "^2.0.0" + +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" + integrity sha1-yyhoVA4xPWHeWPr741zpAE1VQOY= + "package@>= 1.0.0 < 1.2.0": version "1.0.1" resolved "http://registry.npm.taobao.org/package/download/package-1.0.1.tgz#d25a1f99e2506dcb27d6704b83dca8a312e4edcc" @@ -1641,10 +1912,20 @@ path-exists@^1.0.0: version "1.0.0" resolved "http://registry.npm.taobao.org/path-exists/download/path-exists-1.0.0.tgz#d5a8998eb71ef37a74c34eb0d9eba6e878eea081" +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" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + path-is-absolute@^1.0.0: version "1.0.1" resolved "http://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" +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" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + path-parse@^1.0.5: version "1.0.5" resolved "http://registry.npm.taobao.org/path-parse/download/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" @@ -1687,6 +1968,14 @@ progress@^1.1.8: version "1.1.8" resolved "http://registry.npm.taobao.org/progress/download/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/pump/download/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ= + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + punycode@^1.4.1: version "1.4.1" resolved "http://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" @@ -1872,6 +2161,16 @@ request@^2.69.0, request@^2.79.0: tunnel-agent "~0.4.1" uuid "^3.0.0" +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frequire-directory%2Fdownload%2Frequire-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-1.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frequire-main-filename%2Fdownload%2Frequire-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= + resolve@^1.1.6: version "1.3.2" resolved "http://registry.npm.taobao.org/resolve/download/resolve-1.3.2.tgz#1f0442c9e0cbb8136e87b9305f932f46c7f28235" @@ -1890,23 +2189,22 @@ rimraf@2: dependencies: glob "^7.0.5" -rimraf@^2.6.2: - version "2.6.2" - resolved "http://registry.npm.taobao.org/rimraf/download/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" - dependencies: - glob "^7.0.5" - rimraf@~2.5.1, rimraf@~2.5.4: version "2.5.4" resolved "http://registry.npm.taobao.org/rimraf/download/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" dependencies: glob "^7.0.5" +semver@^5.5.0: + version "5.7.0" + resolved "https://registry.npm.taobao.org/semver/download/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" + integrity sha1-eQp89v6lRZuslhELKbYEEtyP+Ws= + semver@~5.3.0: version "5.3.0" resolved "http://registry.npm.taobao.org/semver/download/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" -set-blocking@~2.0.0: +set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "http://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -1914,6 +2212,13 @@ set-immediate-shim@^1.0.1: version "1.0.1" resolved "http://registry.npm.taobao.org/set-immediate-shim/download/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" +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" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + shebang-regex@^1.0.0: version "1.0.0" resolved "http://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" @@ -1942,6 +2247,15 @@ slash@^1.0.0: version "1.0.0" resolved "http://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" +smartwrap@^1.0.11: + version "1.0.11" + resolved "https://registry.npm.taobao.org/smartwrap/download/smartwrap-1.0.11.tgz#ee8f85878bfac89c1fa4da33e0877f729a8e2a74" + integrity sha1-7o+Fh4v6yJwfpNoz4Id/cpqOKnQ= + dependencies: + breakword "^1.0.3" + wcwidth "^1.0.1" + yargs "^12.0.5" + sntp@1.x.x: version "1.0.9" resolved "http://registry.npm.taobao.org/sntp/download/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" @@ -1993,6 +2307,11 @@ stream-buffers@~2.2.0: version "2.2.0" resolved "http://registry.npm.taobao.org/stream-buffers/download/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4" +stream-transform@^1.0.7: + version "1.0.8" + resolved "https://registry.npm.taobao.org/stream-transform/download/stream-transform-1.0.8.tgz#54f721122d310eca855a16c97939881ab5bbb76c" + integrity sha1-VPchEi0xDsqFWhbJeTmIGrW7t2w= + string-width@^1.0.1: version "1.0.2" resolved "http://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -2001,6 +2320,14 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" +string-width@^2.0.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" + integrity sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4= + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + string_decoder@~0.10.x: version "0.10.31" resolved "http://registry.npm.taobao.org/string_decoder/download/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" @@ -2023,6 +2350,25 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: 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#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0: + version "5.2.0" + resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4= + dependencies: + ansi-regex "^4.1.0" + +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" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + strip-json-comments@~2.0.1: version "2.0.1" resolved "http://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" @@ -2031,6 +2377,13 @@ supports-color@^2.0.0: version "2.0.0" resolved "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha1-4uaaRKyHcveKHsCzW2id9lMO/I8= + dependencies: + has-flag "^3.0.0" + tar-pack@~3.3.0: version "3.3.0" resolved "http://registry.npm.taobao.org/tar-pack/download/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae" @@ -2094,6 +2447,18 @@ tryor@~0.1.2: version "0.1.2" resolved "http://registry.npm.taobao.org/tryor/download/tryor-0.1.2.tgz#8145e4ca7caff40acde3ccf946e8b8bb75b4172b" +tty-table@^2.7.0: + version "2.7.0" + resolved "https://registry.npm.taobao.org/tty-table/download/tty-table-2.7.0.tgz#0e03b37435a040a9ed8f783a9bbc9a9660921e9f" + integrity sha1-DgOzdDWgQKntj3g6m7yalmCSHp8= + dependencies: + chalk "^2.4.2" + csv "^4.0.0" + smartwrap "^1.0.11" + strip-ansi "^5.0.0" + wcwidth "^1.0.1" + yargs "^12.0.5" + tunnel-agent@~0.4.1: version "0.4.3" resolved "http://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" @@ -2106,6 +2471,11 @@ uid-number@~0.0.6: version "0.0.6" resolved "http://registry.npm.taobao.org/uid-number/download/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + user-home@^1.1.1: version "1.1.1" resolved "http://registry.npm.taobao.org/user-home/download/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" @@ -2130,10 +2500,29 @@ verror@1.3.6: dependencies: extsprintf "1.0.2" +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/wcwidth/download/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + whatwg-fetch@>=0.10.0: version "2.0.2" resolved "http://registry.npm.taobao.org/whatwg-fetch/download/whatwg-fetch-2.0.2.tgz#fe294d1d89e36c5be8b3195057f2e4bc74fc980e" +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich-module%2Fdownload%2Fwhich-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo= + dependencies: + isexe "^2.0.0" + wide-align@^1.1.0: version "1.1.0" resolved "http://registry.npm.taobao.org/wide-align/download/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad" @@ -2148,6 +2537,14 @@ wordwrap@0.0.2: version "0.0.2" resolved "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-2.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrappy@1: version "1.0.2" resolved "http://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -2168,6 +2565,37 @@ y18n@^3.2.0: version "3.2.1" resolved "http://registry.npm.taobao.org/y18n/download/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" +"y18n@^3.2.1 || ^4.0.0": + version "4.0.0" + resolved "https://registry.npm.taobao.org/y18n/download/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha1-le+U+F7MgdAHwmThkKEg8KPIVms= + +yargs-parser@^11.1.1: + version "11.1.1" + resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" + integrity sha1-h5oIZZc7yp9rq1y987HGfsfTvPQ= + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^12.0.5: + version "12.0.5" + resolved "https://registry.npm.taobao.org/yargs/download/yargs-12.0.5.tgz?cache=0&sync_timestamp=1560133159069&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" + integrity sha1-BfWZe2CWR7ZPZrgeO0sQo2jnrRM= + dependencies: + cliui "^4.0.0" + decamelize "^1.2.0" + find-up "^3.0.0" + get-caller-file "^1.0.1" + os-locale "^3.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1 || ^4.0.0" + yargs-parser "^11.1.1" + yargs@~3.27.0: version "3.27.0" resolved "http://registry.npm.taobao.org/yargs/download/yargs-3.27.0.tgz#21205469316e939131d59f2da0c6d7f98221ea40"