Compare commits

...

14 Commits

64 changed files with 3271 additions and 2082 deletions
+29 -28
View File
@@ -1,42 +1,43 @@
root: true root: true
parser: "@typescript-eslint/parser" parser: '@typescript-eslint/parser'
parserOptions: parserOptions:
project: tsconfig.json project: tsconfig.json
plugins: plugins:
- "@typescript-eslint" - '@typescript-eslint'
- prettier - prettier
extends: extends:
- eslint:recommended - eslint:recommended
- plugin:@typescript-eslint/eslint-recommended
- plugin:@typescript-eslint/recommended - plugin:@typescript-eslint/recommended
- plugin:@typescript-eslint/recommended-requiring-type-checking - plugin:@typescript-eslint/recommended-requiring-type-checking
- prettier
- prettier/@typescript-eslint - prettier/@typescript-eslint
- plugin:prettier/recommended - plugin:prettier/recommended
rules: rules:
"prettier/prettier": 'prettier/prettier': [1]
'@typescript-eslint/array-type': [1, { default: array-simple }]
'@typescript-eslint/explicit-function-return-type':
- 2
- allowExpressions: true
'@typescript-eslint/no-extraneous-class':
- 1 - 1
- singleQuote: true - allowWithDecorator: true
trailingComma: all allowStaticOnly: true
tabWidth: 4 '@typescript-eslint/no-parameter-properties':
endOfLine: lf
printWidth: 160
- usePrettierrc: false
"@typescript-eslint/array-type": [1, { default: array-simple }]
"@typescript-eslint/explicit-function-return-type":
[2, { allowExpressions: true }]
"@typescript-eslint/no-extra-non-null-assertion": [2]
"@typescript-eslint/no-extraneous-class": [1, { allowWithDecorator: true, allowStaticOnly: true }]
"@typescript-eslint/no-floating-promises": [1]
"@typescript-eslint/no-parameter-properties":
- 1 - 1
- allows: - allows: [protected readonly, private readonly, public readonly, readonly]
- protected readonly '@typescript-eslint/no-throw-literal': [2]
- private readonly 'no-unused-vars': [0]
- public readonly '@typescript-eslint/no-unused-vars':
- readonly - 1
"@typescript-eslint/no-throw-literal": [2] - varsIgnorePattern: ^_
"no-unused-vars": [0] argsIgnorePattern: ^_
"@typescript-eslint/prefer-for-of": [1] '@typescript-eslint/prefer-for-of': [1]
"@typescript-eslint/prefer-function-type": [1] '@typescript-eslint/prefer-function-type': [1]
"@typescript-eslint/prefer-nullish-coalescing": [1] '@typescript-eslint/prefer-nullish-coalescing': [1]
"@typescript-eslint/prefer-optional-chain": [1] '@typescript-eslint/prefer-optional-chain': [1]
'@typescript-eslint/ban-types':
- 1
- types:
object: false
no-void: [1, { allowAsStatement: true }]
eqeqeq: [1, smart]
+6 -5
View File
@@ -18,10 +18,11 @@ jobs:
run: yarn test run: yarn test
- name: release - name: release
run: yarn release run: yarn release
- name: "check for uncommitted changes" - name: 'check for uncommitted changes'
# Ensure no changes # Ensure no changes
run: | run: |
git add . && git diff --exit-code --stat \ git add .
|| (echo "##[error] found changed files after build. please 'yarn build && npm run format'" \ if ! git diff --cached --color=always --exit-code -- . ':!node_modules'; then
"and check in all changes" \ echo "::error::Found changed files after build. Please run 'yarn release' and check in all changes."
&& exit 1) exit 1
fi
+11
View File
@@ -0,0 +1,11 @@
singleQuote: true
trailingComma: all
tabWidth: 2
endOfLine: lf
printWidth: 120
overrides:
- files:
- '*.js'
- '*.ts'
options:
tabWidth: 4
+1 -7
View File
@@ -1,12 +1,6 @@
{ {
"npm.packageManager": "yarn", "npm.packageManager": "yarn",
"eslint.validate": [ "eslint.validate": ["javascript", "javascriptreact", "typescript", "typescriptreact", "vue"],
"javascript",
"javascriptreact",
"typescript",
"typescriptreact",
"vue"
],
"eslint.enable": true, "eslint.enable": true,
"files.autoSave": "off", "files.autoSave": "off",
"eslint.format.enable": true, "eslint.format.enable": true,
+1
View File
@@ -1,4 +1,5 @@
# GitHub Action - Setup xmake # GitHub Action - Setup xmake
[![Build status](https://github.com/xmake-io/github-action-setup-xmake/workflows/test/badge.svg)](https://github.com/xmake-io/github-action-setup-xmake/actions) [![Build status](https://github.com/xmake-io/github-action-setup-xmake/workflows/test/badge.svg)](https://github.com/xmake-io/github-action-setup-xmake/actions)
[![GitHub release (latest by date)](https://img.shields.io/github/v/release/xmake-io/github-action-setup-xmake)](https://github.com/marketplace/actions/setup-xmake) [![GitHub release (latest by date)](https://img.shields.io/github/v/release/xmake-io/github-action-setup-xmake)](https://github.com/marketplace/actions/setup-xmake)
+1 -2
View File
@@ -9,9 +9,8 @@ inputs:
xmake-version: xmake-version:
required: true required: true
default: latest default: latest
description: The version to use. Should be a semver range or 'latest'. Or use branch@{branch_name} to select a branch. description: The version to use. Should be a semver range or 'latest'. Or use [{repository}#]branch@{branch_name} to select a branch.
runs: runs:
using: 'node12' using: 'node12'
main: 'dist/index.js' main: 'dist/index.js'
Vendored
+6 -5
View File
@@ -1,5 +1,6 @@
"use strict"; "use strict";
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
exports.cleanup = exports.create = exports.lsRemote = void 0;
const exec_1 = require("@actions/exec"); const exec_1 = require("@actions/exec");
const io = require("@actions/io"); const io = require("@actions/io");
const os = require("os"); const os = require("os");
@@ -7,9 +8,10 @@ const path = require("path");
function makeOpt(ref) { function makeOpt(ref) {
return { cwd: path.join(os.tmpdir(), `xmake-git-${ref}`) }; return { cwd: path.join(os.tmpdir(), `xmake-git-${ref}`) };
} }
async function lsRemote() { const repoUrl = (repo) => `https://github.com/${repo}.git`;
async function lsRemote(repo) {
let out = ''; let out = '';
await exec_1.exec('git', ['ls-remote', 'https://github.com/xmake-io/xmake.git'], { await exec_1.exec('git', ['ls-remote', repoUrl(repo)], {
silent: true, silent: true,
listeners: { listeners: {
stdout: (d) => (out += d.toString()), stdout: (d) => (out += d.toString()),
@@ -20,7 +22,6 @@ async function lsRemote() {
const [ref, tag] = line.trim().split('\t'); const [ref, tag] = line.trim().split('\t');
if (ref && tag && tag.startsWith('refs/')) { if (ref && tag && tag.startsWith('refs/')) {
const tagPath = tag.split('/').splice(1); const tagPath = tag.split('/').splice(1);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let ldata = data; let ldata = data;
for (let i = 0; i < tagPath.length - 1; i++) { for (let i = 0; i < tagPath.length - 1; i++) {
const seg = tagPath[i]; const seg = tagPath[i];
@@ -37,12 +38,12 @@ async function lsRemote() {
return data; return data;
} }
exports.lsRemote = lsRemote; exports.lsRemote = lsRemote;
async function create(ref) { async function create(repo, ref) {
const opt = makeOpt(ref); const opt = makeOpt(ref);
await io.rmRF(opt.cwd); await io.rmRF(opt.cwd);
await io.mkdirP(opt.cwd); await io.mkdirP(opt.cwd);
await exec_1.exec('git', ['init'], opt); await exec_1.exec('git', ['init'], opt);
await exec_1.exec('git', ['remote', 'add', 'origin', 'https://github.com/xmake-io/xmake.git'], opt); await exec_1.exec('git', ['remote', 'add', 'origin', repoUrl(repo)], opt);
await exec_1.exec('git', ['fetch', 'origin', '+refs/pull/*:refs/remotes/origin/pull/*', '+refs/heads/*:refs/remotes/origin/*'], opt); await exec_1.exec('git', ['fetch', 'origin', '+refs/pull/*:refs/remotes/origin/pull/*', '+refs/heads/*:refs/remotes/origin/*'], opt);
await exec_1.exec('git', ['checkout', ref], opt); await exec_1.exec('git', ['checkout', ref], opt);
await exec_1.exec('git', ['submodule', 'update', '--init', '--recursive'], opt); await exec_1.exec('git', ['submodule', 'update', '--init', '--recursive'], opt);
+2 -1
View File
@@ -16,7 +16,8 @@ async function run() {
await exec_1.exec('xmake --version'); await exec_1.exec('xmake --version');
} }
catch (error) { catch (error) {
core.setFailed(error.message); const ex = error;
core.setFailed(ex.message);
} }
} }
run().catch((e) => core.error(e)); run().catch((e) => core.error(e));
+17
View File
@@ -0,0 +1,17 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Repo = exports.Sha = void 0;
function Sha(sha) {
sha = sha.trim().toLowerCase();
if (!/^[a-f0-9]{40}$/g.test(sha))
throw new Error(`Invalid sha value ${sha}`);
return sha;
}
exports.Sha = Sha;
function Repo(repo) {
repo = repo.trim();
if (!/^([^/#]+\/[^/#]+)$/g.test(repo))
throw new Error(`Invalid repo value ${repo}`);
return repo;
}
exports.Repo = Repo;
+28 -15
View File
@@ -1,5 +1,6 @@
"use strict"; "use strict";
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
exports.unixInstall = void 0;
const core = require("@actions/core"); const core = require("@actions/core");
const exec_1 = require("@actions/exec"); const exec_1 = require("@actions/exec");
const io = require("@actions/io"); const io = require("@actions/io");
@@ -8,27 +9,39 @@ const os = require("os");
const path = require("path"); const path = require("path");
const semver = require("semver"); const semver = require("semver");
const git = require("./git"); const git = require("./git");
async function install(sourceDir, binDir) {
await exec_1.exec('make', ['build'], { cwd: sourceDir });
await exec_1.exec('make', ['install', `prefix=${binDir}`], { cwd: sourceDir });
}
async function unixInstall(version) { async function unixInstall(version) {
const ver = version.version; let toolDir;
let toolDir = toolCache.find('xmake', ver); if (version.type !== 'local') {
if (!toolDir) { const ver = version.version;
const sourceDir = await core.group(`download xmake ${version}`, () => git.create(version.sha)); toolDir = toolCache.find('xmake', ver);
toolDir = await core.group(`install xmake ${version}`, async () => { if (!toolDir) {
await exec_1.exec('make', ['build'], { cwd: sourceDir }); const sourceDir = await core.group(`download xmake ${String(version)}`, () => git.create(version.repo, version.sha));
const binDir = path.join(os.tmpdir(), `xmake-${version.sha}`); toolDir = await core.group(`install xmake ${String(version)}`, async () => {
await exec_1.exec('make', ['install', `prefix=${binDir}`], { cwd: sourceDir }); const binDir = path.join(os.tmpdir(), `xmake-${version.sha}`);
const cacheDir = await toolCache.cacheDir(binDir, 'xmake', ver); await install(sourceDir, binDir);
await io.rmRF(binDir); const cacheDir = await toolCache.cacheDir(binDir, 'xmake', ver);
await git.cleanup(version.sha); await io.rmRF(binDir);
return cacheDir; await git.cleanup(version.sha);
return cacheDir;
});
}
}
else {
toolDir = await core.group(`install local xmake at '${version.path}'`, async () => {
const binDir = path.join(os.tmpdir(), `xmake-${Date.now()}`);
await install(version.path, binDir);
return binDir;
}); });
} }
// for versions 2.3.2 and above, xmake will be installed directly into the bin directory, and no script will be used to wrap it. if (version.type !== 'tags' || semver.gt(version.version, '2.3.1')) {
if (version.type !== 'tags' || semver.gt(ver, '2.3.1')) {
core.addPath(path.join(toolDir, 'bin')); core.addPath(path.join(toolDir, 'bin'));
} }
else { else {
core.addPath(path.join(toolDir, 'share', 'xmake')); // only for <= 2.3.1 core.addPath(path.join(toolDir, 'share', 'xmake'));
} }
} }
exports.unixInstall = unixInstall; exports.unixInstall = unixInstall;
+71 -39
View File
@@ -14,17 +14,25 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
}; };
var _string; var _string;
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
exports.selectVersion = void 0;
const core = require("@actions/core"); const core = require("@actions/core");
const semver = require("semver"); const semver = require("semver");
const git_1 = require("./git"); const git_1 = require("./git");
let VERSIONS; const interfaces_1 = require("./interfaces");
async function getVersions() { const p = require("path");
if (VERSIONS) const DEFAULT_REPO = interfaces_1.Repo('xmake-io/xmake');
return VERSIONS; const VERSIONS = new Map();
return (VERSIONS = await git_1.lsRemote()); async function getVersions(repo) {
const cache = VERSIONS.get(repo);
if (cache)
return cache;
const result = await git_1.lsRemote(repo);
VERSIONS.set(repo, result);
return result;
} }
class VersionImpl { class GitVersionImpl {
constructor(version, sha, type, toString) { constructor(repo, version, sha, type, toString) {
this.repo = repo;
this.version = version; this.version = version;
this.sha = sha; this.sha = sha;
this.type = type; this.type = type;
@@ -36,88 +44,112 @@ class VersionImpl {
} }
} }
_string = new WeakMap(); _string = new WeakMap();
async function selectBranch(branch) { class LocalVersionImpl {
const versions = await getVersions(); constructor(path) {
this.path = path;
this.type = 'local';
this.path = p.resolve(path);
}
}
async function selectBranch(repo, branch) {
const versions = await getVersions(repo);
if (branch in versions.heads) { if (branch in versions.heads) {
return new VersionImpl(branch, versions.heads[branch], 'heads', `branch ${branch}`); return new GitVersionImpl(repo, branch, versions.heads[branch], 'heads', `branch ${branch}`);
} }
throw new Error(`Branch ${branch} not found`); throw new Error(`Branch ${branch} not found`);
} }
async function selectPr(pr) { async function selectPr(repo, pr) {
var _a; var _a;
const versions = await getVersions(); const versions = await getVersions(repo);
if (pr in versions.pull) { if (pr in versions.pull) {
const prheads = versions.pull[pr]; const prHeads = versions.pull[pr];
const sha = (_a = prheads.merge) !== null && _a !== void 0 ? _a : prheads.head; const sha = (_a = prHeads.merge) !== null && _a !== void 0 ? _a : prHeads.head;
if (sha) { if (sha) {
return new VersionImpl(`pr#${pr}`, sha, 'pull', `pull request #${pr}`); return new GitVersionImpl(repo, `pr#${pr}`, sha, 'pull', `pull request #${pr}`);
} }
} }
throw new Error(`Pull requrest #${pr} not found`); throw new Error(`Pull requrest #${pr} not found`);
} }
async function selectSemver(version) { async function selectSemver(repo, version) {
// check version valid
const v = new semver.Range(version); const v = new semver.Range(version);
if (!v) { if (!v) {
throw new Error(`Invalid semver`); throw new Error(`Invalid semver`);
} }
const versions = await getVersions(); const versions = await getVersions(repo);
const ver = semver.maxSatisfying(Object.keys(versions.tags), v); const ver = semver.maxSatisfying(Object.keys(versions.tags), v);
if (!ver) { if (!ver) {
throw new Error(`No matched releases of xmake-version ${v.format()}`); throw new Error(`No matched releases of xmake-version ${v.format()}`);
} }
const sha = versions.tags[ver]; const sha = versions.tags[ver];
return new VersionImpl(ver, sha, 'tags', ver); return new GitVersionImpl(repo, ver, sha, 'tags', ver);
} }
async function selectSha(sha) { async function selectSha(repo, sha) {
sha = sha.toLowerCase(); var _a;
if (!/^[a-f0-9]{40}$/gi.test(sha)) const shaValue = interfaces_1.Sha(sha);
throw new Error(`Invalid sha value ${sha}`); const versions = await getVersions(repo);
const versions = await getVersions();
for (const branch in versions.heads) { for (const branch in versions.heads) {
if (versions.heads[branch] === sha) { if (versions.heads[branch] === shaValue) {
return selectBranch(branch); return selectBranch(repo, branch);
} }
} }
for (const tag in versions.tags) { for (const tag in versions.tags) {
if (versions.tags[tag] === sha) { if (versions.tags[tag] === shaValue) {
return selectSemver(tag); return selectSemver(repo, tag);
} }
} }
return Promise.resolve(new VersionImpl(`sha#${sha}`, sha, 'sha', `commit ${sha.substr(0, 8)}`)); for (const pr in versions.pull) {
const prData = versions.pull[pr];
if (((_a = prData.merge) !== null && _a !== void 0 ? _a : prData.head) === shaValue) {
return selectPr(repo, Number.parseInt(pr));
}
}
return Promise.resolve(new GitVersionImpl(repo, `sha#${shaValue}`, shaValue, 'sha', `commit ${shaValue.substr(0, 8)}`));
} }
async function selectVersion(version) { async function selectVersion(version) {
// get version string
version = (version !== null && version !== void 0 ? version : core.getInput('xmake-version')) || 'latest'; version = (version !== null && version !== void 0 ? version : core.getInput('xmake-version')) || 'latest';
if (version.toLowerCase() === 'latest') if (version.toLowerCase() === 'latest')
version = ''; version = '';
let repo = DEFAULT_REPO;
let ret; let ret;
// select branch if (version.startsWith('local#')) {
const path = version.slice('local#'.length);
ret = new LocalVersionImpl(path);
}
{
const match = /^([^/#]+\/[^/#]+)#(.+)$/.exec(version);
if (match) {
repo = interfaces_1.Repo(match[1]);
version = match[2];
}
}
if (version.startsWith('branch@')) { if (version.startsWith('branch@')) {
const branch = version.substr('branch@'.length); const branch = version.substr('branch@'.length);
ret = await selectBranch(branch); ret = await selectBranch(repo, branch);
} }
// select pr
if (version.startsWith('pr@')) { if (version.startsWith('pr@')) {
const pr = Number.parseInt(version.substr('pr@'.length)); const pr = Number.parseInt(version.substr('pr@'.length));
if (Number.isNaN(pr) || pr <= 0) { if (Number.isNaN(pr) || pr <= 0) {
throw new Error(`Invalid pull requrest ${version.substr('pr@'.length)}, should be a positive integer`); throw new Error(`Invalid pull requrest ${version.substr('pr@'.length)}, should be a positive integer`);
} }
ret = await selectPr(pr); ret = await selectPr(repo, pr);
} }
// select sha
if (version.startsWith('sha@')) { if (version.startsWith('sha@')) {
const sha = version.substr('sha@'.length); const sha = version.substr('sha@'.length);
ret = await selectSha(sha); ret = await selectSha(repo, sha);
} }
// select version
if (semver.validRange(version)) { if (semver.validRange(version)) {
ret = await selectSemver(version); ret = await selectSemver(repo, version);
} }
if (!ret) { if (!ret) {
throw new Error(`Invalid input xmake-version ${core.getInput('xmake-version')}`); throw new Error(`Invalid input xmake-version ${core.getInput('xmake-version')}`);
} }
core.info(`Selected xmake ${ret} (commit: ${ret.sha.substr(0, 8)})`); if (ret.type === 'local') {
core.info(`Use local xmake at '${ret.path}'`);
}
else {
core.info(`Selected xmake ${String(ret)} (commit: ${ret.sha.substr(0, 8)})` +
(repo !== DEFAULT_REPO ? ` of ${repo}` : ''));
}
return ret; return ret;
} }
exports.selectVersion = selectVersion; exports.selectVersion = selectVersion;
+11 -7
View File
@@ -1,5 +1,6 @@
"use strict"; "use strict";
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
exports.winInstall = void 0;
const core = require("@actions/core"); const core = require("@actions/core");
const exec_1 = require("@actions/exec"); const exec_1 = require("@actions/exec");
const io = require("@actions/io"); const io = require("@actions/io");
@@ -11,7 +12,6 @@ function getInstallerUrl(version) {
const ver = version.version; const ver = version.version;
switch (version.type) { switch (version.type) {
case 'heads': { case 'heads': {
// we only use appveyor ci artifacts for branch version
const arch = os.arch() === 'x64' ? 'x64' : 'x86'; const arch = os.arch() === 'x64' ? 'x64' : 'x86';
return `https://ci.appveyor.com/api/projects/waruqi/xmake/artifacts/xmake-installer.exe?branch=${ver}&pr=false&job=Image%3A+Visual+Studio+2017%3B+Platform%3A+${arch}`; return `https://ci.appveyor.com/api/projects/waruqi/xmake/artifacts/xmake-installer.exe?branch=${ver}&pr=false&job=Image%3A+Visual+Studio+2017%3B+Platform%3A+${arch}`;
} }
@@ -22,34 +22,38 @@ function getInstallerUrl(version) {
throw new Error('Sha builds for windows is not supported'); throw new Error('Sha builds for windows is not supported');
} }
case 'tags': { case 'tags': {
// we cannot use appveyor ci artifacts, the old version links may be broken.
const arch = os.arch() === 'x64' ? 'win64' : 'win32'; const arch = os.arch() === 'x64' ? 'win64' : 'win32';
return semver.gt(ver, '2.2.6') return semver.gt(ver, '2.2.6')
? `https://github.com/xmake-io/xmake/releases/download/${ver}/xmake-${ver}.${arch}.exe` ? `https://github.com/xmake-io/xmake/releases/download/${ver}/xmake-${ver}.${arch}.exe`
: `https://github.com/xmake-io/xmake/releases/download/${ver}/xmake-${ver}.exe`; : `https://github.com/xmake-io/xmake/releases/download/${ver}/xmake-${ver}.exe`;
} }
default: { default: {
// check that we have tested all types
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const _ = version.type; const _ = version.type;
throw new Error('Unknown version type'); throw new Error('Unknown version type');
} }
} }
} }
async function winInstall(version) { async function winInstall(version) {
if (version.type === 'local') {
throw new Error('Local builds for windows is not supported');
}
const ver = version.version; const ver = version.version;
let toolDir = toolCache.find('xmake', ver); let toolDir = toolCache.find('xmake', ver);
if (!toolDir) { if (!toolDir) {
const installer = await core.group(`download xmake ${version}`, async () => { const installer = await core.group(`download xmake ${String(version)}`, async () => {
const url = getInstallerUrl(version); const url = getInstallerUrl(version);
core.info(`downloading from ${url}`); core.info(`downloading from ${url}`);
const file = await toolCache.downloadTool(url); const file = await toolCache.downloadTool(url);
const exe = path.format({ ...path.parse(file), ext: '.exe', base: undefined }); const exe = path.format({
...path.parse(file),
ext: '.exe',
base: undefined,
});
await io.mv(file, exe); await io.mv(file, exe);
core.info(`downloaded to ${exe}`); core.info(`downloaded to ${exe}`);
return exe; return exe;
}); });
toolDir = await core.group(`install xmake ${version}`, async () => { toolDir = await core.group(`install xmake ${String(version)}`, async () => {
const binDir = path.join(os.tmpdir(), `xmake-${version.sha}`); const binDir = path.join(os.tmpdir(), `xmake-${version.sha}`);
core.info(`installing to ${binDir}`); core.info(`installing to ${binDir}`);
await exec_1.exec(`"${installer}" /NOADMIN /S /D=${binDir}`); await exec_1.exec(`"${installer}" /NOADMIN /S /D=${binDir}`);
+2 -2
View File
@@ -1,4 +1,4 @@
module.exports = { module.exports = {
preset: 'ts-jest', preset: 'ts-jest',
testEnvironment: 'node', testEnvironment: 'node',
}; };
+342 -307
View File
@@ -8,115 +8,134 @@
], ],
"linkedModules": [], "linkedModules": [],
"topLevelPatterns": [ "topLevelPatterns": [
"@actions/core@^1.1.3", "@actions/core@^1.2.4",
"@actions/exec@^1.0.1", "@actions/exec@^1.0.4",
"@actions/io@^1.0.1", "@actions/io@^1.0.1",
"@actions/tool-cache@^1.1.2", "@actions/tool-cache@^1.6.0",
"@types/jest@^25.1.4", "@types/jest@^26.0.3",
"@types/node@^13.9.8", "@types/node@^14.0.14",
"@types/semver@^7.1.0", "@types/semver@^7.3.1",
"@typescript-eslint/eslint-plugin@^2.26.0", "@typescript-eslint/eslint-plugin@^3.4.0",
"@typescript-eslint/parser@^2.26.0", "@typescript-eslint/parser@^3.4.0",
"eslint-config-prettier@^6.10.1", "eslint-config-prettier@^6.11.0",
"eslint-plugin-prettier@^3.1.2", "eslint-plugin-prettier@^3.1.4",
"eslint@^6.8.0", "eslint@^7.3.1",
"jest@^25.2.4", "jest@^26.1.0",
"prettier@^2.0.2", "prettier@^2.0.5",
"rimraf@^3.0.2", "rimraf@^3.0.2",
"semver@^7.1.3", "semver@^7.3.2",
"ts-jest@^25.3.0", "ts-jest@^26.1.1",
"typescript@^3.8.3" "type-fest@^0.16.0",
"typescript@^3.9.5"
], ],
"lockfileEntries": { "lockfileEntries": {
"@actions/core@^1.1.3": "https://registry.npm.taobao.org/@actions/core/download/@actions/core-1.2.3.tgz#e844b4fa0820e206075445079130868f95bfca95", "@actions/core@^1.2.3": "https://registry.npm.taobao.org/@actions/core/download/@actions/core-1.2.4.tgz#96179dbf9f8d951dd74b40a0dbd5c22555d186ab",
"@actions/core@^1.2.0": "https://registry.npm.taobao.org/@actions/core/download/@actions/core-1.2.3.tgz#e844b4fa0820e206075445079130868f95bfca95", "@actions/core@^1.2.4": "https://registry.npm.taobao.org/@actions/core/download/@actions/core-1.2.4.tgz#96179dbf9f8d951dd74b40a0dbd5c22555d186ab",
"@actions/exec@^1.0.0": "https://registry.npm.taobao.org/@actions/exec/download/@actions/exec-1.0.3.tgz#b967f8700d6ff011dcc91243b58bafc1bb9ab95f", "@actions/exec@^1.0.0": "https://registry.npm.taobao.org/@actions/exec/download/@actions/exec-1.0.4.tgz#99d75310e62e59fc37d2ee6dcff6d4bffadd3a5d",
"@actions/exec@^1.0.1": "https://registry.npm.taobao.org/@actions/exec/download/@actions/exec-1.0.3.tgz#b967f8700d6ff011dcc91243b58bafc1bb9ab95f", "@actions/exec@^1.0.4": "https://registry.npm.taobao.org/@actions/exec/download/@actions/exec-1.0.4.tgz#99d75310e62e59fc37d2ee6dcff6d4bffadd3a5d",
"@actions/http-client@^1.0.3": "https://registry.npm.taobao.org/@actions/http-client/download/@actions/http-client-1.0.6.tgz#6f9267ca50e1d74d8581f4a894a943cd4c97b49a", "@actions/http-client@^1.0.8": "https://registry.npm.taobao.org/@actions/http-client/download/@actions/http-client-1.0.8.tgz#8bd76e8eca89dc8bcf619aa128eba85f7a39af45",
"@actions/io@^1.0.1": "https://registry.npm.taobao.org/@actions/io/download/@actions/io-1.0.2.tgz#2f614b6e69ce14d191180451eb38e6576a6e6b27", "@actions/io@^1.0.1": "https://registry.npm.taobao.org/@actions/io/download/@actions/io-1.0.2.tgz#2f614b6e69ce14d191180451eb38e6576a6e6b27",
"@actions/tool-cache@^1.1.2": "https://registry.npm.taobao.org/@actions/tool-cache/download/@actions/tool-cache-1.3.3.tgz#34cf87a0436a2178207a644932114a236194b0fd", "@actions/tool-cache@^1.6.0": "https://registry.npm.taobao.org/@actions/tool-cache/download/@actions/tool-cache-1.6.0.tgz#5b425db2d642df65dd0d6bcec0d84dcdbca3f80d",
"@babel/code-frame@^7.0.0": "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.8.3.tgz?cache=0&sync_timestamp=1580303207516&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e", "@babel/code-frame@^7.0.0": "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.10.4.tgz?cache=0&sync_timestamp=1593522826253&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a",
"@babel/code-frame@^7.8.3": "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.8.3.tgz?cache=0&sync_timestamp=1580303207516&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e", "@babel/code-frame@^7.10.4": "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.10.4.tgz?cache=0&sync_timestamp=1593522826253&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a",
"@babel/core@^7.1.0": "https://registry.npm.taobao.org/@babel/core/download/@babel/core-7.8.7.tgz#b69017d221ccdeb203145ae9da269d72cf102f3b", "@babel/core@^7.1.0": "https://registry.npm.taobao.org/@babel/core/download/@babel/core-7.10.4.tgz?cache=0&sync_timestamp=1593522846862&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcore%2Fdownload%2F%40babel%2Fcore-7.10.4.tgz#780e8b83e496152f8dd7df63892b2e052bf1d51d",
"@babel/core@^7.7.5": "https://registry.npm.taobao.org/@babel/core/download/@babel/core-7.8.7.tgz#b69017d221ccdeb203145ae9da269d72cf102f3b", "@babel/core@^7.7.5": "https://registry.npm.taobao.org/@babel/core/download/@babel/core-7.10.4.tgz?cache=0&sync_timestamp=1593522846862&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcore%2Fdownload%2F%40babel%2Fcore-7.10.4.tgz#780e8b83e496152f8dd7df63892b2e052bf1d51d",
"@babel/generator@^7.8.6": "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.8.8.tgz#cdcd58caab730834cee9eeadb729e833b625da3e", "@babel/generator@^7.10.4": "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.10.4.tgz#e49eeed9fe114b62fa5b181856a43a5e32f5f243",
"@babel/generator@^7.8.7": "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.8.8.tgz#cdcd58caab730834cee9eeadb729e833b625da3e", "@babel/helper-function-name@^7.10.4": "https://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.10.4.tgz?cache=0&sync_timestamp=1593521218775&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-function-name%2Fdownload%2F%40babel%2Fhelper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a",
"@babel/helper-function-name@^7.8.3": "https://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca", "@babel/helper-get-function-arity@^7.10.4": "https://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.10.4.tgz?cache=0&sync_timestamp=1593522827189&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-get-function-arity%2Fdownload%2F%40babel%2Fhelper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2",
"@babel/helper-get-function-arity@^7.8.3": "https://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5", "@babel/helper-member-expression-to-functions@^7.10.4": "https://registry.npm.taobao.org/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.10.4.tgz?cache=0&sync_timestamp=1593522826309&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.10.4.tgz#7cd04b57dfcf82fce9aeae7d4e4452fa31b8c7c4",
"@babel/helper-plugin-utils@^7.0.0": "https://registry.npm.taobao.org/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670", "@babel/helper-module-imports@^7.10.4": "https://registry.npm.taobao.org/@babel/helper-module-imports/download/@babel/helper-module-imports-7.10.4.tgz?cache=0&sync_timestamp=1593522826853&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-module-imports%2Fdownload%2F%40babel%2Fhelper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620",
"@babel/helper-plugin-utils@^7.8.0": "https://registry.npm.taobao.org/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670", "@babel/helper-module-transforms@^7.10.4": "https://registry.npm.taobao.org/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.10.4.tgz#ca1f01fdb84e48c24d7506bb818c961f1da8805d",
"@babel/helper-split-export-declaration@^7.8.3": "https://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9", "@babel/helper-optimise-call-expression@^7.10.4": "https://registry.npm.taobao.org/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.10.4.tgz?cache=0&sync_timestamp=1593522827576&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-optimise-call-expression%2Fdownload%2F%40babel%2Fhelper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673",
"@babel/helpers@^7.8.4": "https://registry.npm.taobao.org/@babel/helpers/download/@babel/helpers-7.8.4.tgz?cache=0&sync_timestamp=1580387813921&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelpers%2Fdownload%2F%40babel%2Fhelpers-7.8.4.tgz#754eb3ee727c165e0a240d6c207de7c455f36f73", "@babel/helper-plugin-utils@^7.0.0": "https://registry.npm.taobao.org/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.10.4.tgz?cache=0&sync_timestamp=1593521123680&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-plugin-utils%2Fdownload%2F%40babel%2Fhelper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375",
"@babel/highlight@^7.8.3": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.8.3.tgz#28f173d04223eaaa59bc1d439a3836e6d1265797", "@babel/helper-plugin-utils@^7.10.4": "https://registry.npm.taobao.org/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.10.4.tgz?cache=0&sync_timestamp=1593521123680&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-plugin-utils%2Fdownload%2F%40babel%2Fhelper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375",
"@babel/parser@^7.1.0": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.8.8.tgz#4c3b7ce36db37e0629be1f0d50a571d2f86f6cd4", "@babel/helper-plugin-utils@^7.8.0": "https://registry.npm.taobao.org/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.10.4.tgz?cache=0&sync_timestamp=1593521123680&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-plugin-utils%2Fdownload%2F%40babel%2Fhelper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375",
"@babel/parser@^7.7.5": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.8.8.tgz#4c3b7ce36db37e0629be1f0d50a571d2f86f6cd4", "@babel/helper-replace-supers@^7.10.4": "https://registry.npm.taobao.org/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf",
"@babel/parser@^7.8.6": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.8.8.tgz#4c3b7ce36db37e0629be1f0d50a571d2f86f6cd4", "@babel/helper-simple-access@^7.10.4": "https://registry.npm.taobao.org/@babel/helper-simple-access/download/@babel/helper-simple-access-7.10.4.tgz?cache=0&sync_timestamp=1593521217867&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-simple-access%2Fdownload%2F%40babel%2Fhelper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461",
"@babel/parser@^7.8.7": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.8.8.tgz#4c3b7ce36db37e0629be1f0d50a571d2f86f6cd4", "@babel/helper-split-export-declaration@^7.10.4": "https://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.10.4.tgz?cache=0&sync_timestamp=1593522826673&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-split-export-declaration%2Fdownload%2F%40babel%2Fhelper-split-export-declaration-7.10.4.tgz#2c70576eaa3b5609b24cb99db2888cc3fc4251d1",
"@babel/plugin-syntax-bigint@^7.0.0": "https://registry.npm.taobao.org/@babel/plugin-syntax-bigint/download/@babel/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea", "@babel/helper-validator-identifier@^7.10.4": "https://registry.npm.taobao.org/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2",
"@babel/plugin-syntax-object-rest-spread@^7.0.0": "https://registry.npm.taobao.org/@babel/plugin-syntax-object-rest-spread/download/@babel/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871", "@babel/helpers@^7.10.4": "https://registry.npm.taobao.org/@babel/helpers/download/@babel/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044",
"@babel/template@^7.7.4": "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.8.6.tgz?cache=0&sync_timestamp=1582806154512&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftemplate%2Fdownload%2F%40babel%2Ftemplate-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b", "@babel/highlight@^7.10.4": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143",
"@babel/template@^7.8.3": "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.8.6.tgz?cache=0&sync_timestamp=1582806154512&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftemplate%2Fdownload%2F%40babel%2Ftemplate-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b", "@babel/parser@^7.1.0": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.10.4.tgz?cache=0&sync_timestamp=1593521035480&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fparser%2Fdownload%2F%40babel%2Fparser-7.10.4.tgz#9eedf27e1998d87739fb5028a5120557c06a1a64",
"@babel/template@^7.8.6": "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.8.6.tgz?cache=0&sync_timestamp=1582806154512&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftemplate%2Fdownload%2F%40babel%2Ftemplate-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b", "@babel/parser@^7.10.4": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.10.4.tgz?cache=0&sync_timestamp=1593521035480&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fparser%2Fdownload%2F%40babel%2Fparser-7.10.4.tgz#9eedf27e1998d87739fb5028a5120557c06a1a64",
"@babel/traverse@^7.1.0": "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.8.6.tgz?cache=0&sync_timestamp=1582806154496&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.8.6.tgz#acfe0c64e1cd991b3e32eae813a6eb564954b5ff", "@babel/plugin-syntax-async-generators@^7.8.4": "https://registry.npm.taobao.org/@babel/plugin-syntax-async-generators/download/@babel/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d",
"@babel/traverse@^7.7.4": "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.8.6.tgz?cache=0&sync_timestamp=1582806154496&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.8.6.tgz#acfe0c64e1cd991b3e32eae813a6eb564954b5ff", "@babel/plugin-syntax-bigint@^7.8.3": "https://registry.npm.taobao.org/@babel/plugin-syntax-bigint/download/@babel/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea",
"@babel/traverse@^7.8.4": "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.8.6.tgz?cache=0&sync_timestamp=1582806154496&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.8.6.tgz#acfe0c64e1cd991b3e32eae813a6eb564954b5ff", "@babel/plugin-syntax-class-properties@^7.8.3": "https://registry.npm.taobao.org/@babel/plugin-syntax-class-properties/download/@babel/plugin-syntax-class-properties-7.10.4.tgz?cache=0&sync_timestamp=1593522957421&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-class-properties%2Fdownload%2F%40babel%2Fplugin-syntax-class-properties-7.10.4.tgz#6644e6a0baa55a61f9e3231f6c9eeb6ee46c124c",
"@babel/traverse@^7.8.6": "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.8.6.tgz?cache=0&sync_timestamp=1582806154496&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.8.6.tgz#acfe0c64e1cd991b3e32eae813a6eb564954b5ff", "@babel/plugin-syntax-import-meta@^7.8.3": "https://registry.npm.taobao.org/@babel/plugin-syntax-import-meta/download/@babel/plugin-syntax-import-meta-7.10.4.tgz?cache=0&sync_timestamp=1593523074996&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-import-meta%2Fdownload%2F%40babel%2Fplugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51",
"@babel/types@^7.0.0": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.7.tgz?cache=0&sync_timestamp=1583373427111&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftypes%2Fdownload%2F%40babel%2Ftypes-7.8.7.tgz#1fc9729e1acbb2337d5b6977a63979b4819f5d1d", "@babel/plugin-syntax-json-strings@^7.8.3": "https://registry.npm.taobao.org/@babel/plugin-syntax-json-strings/download/@babel/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a",
"@babel/types@^7.3.0": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.7.tgz?cache=0&sync_timestamp=1583373427111&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftypes%2Fdownload%2F%40babel%2Ftypes-7.8.7.tgz#1fc9729e1acbb2337d5b6977a63979b4819f5d1d", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": "https://registry.npm.taobao.org/@babel/plugin-syntax-logical-assignment-operators/download/@babel/plugin-syntax-logical-assignment-operators-7.10.4.tgz?cache=0&sync_timestamp=1593521259188&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-logical-assignment-operators%2Fdownload%2F%40babel%2Fplugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699",
"@babel/types@^7.8.3": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.7.tgz?cache=0&sync_timestamp=1583373427111&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftypes%2Fdownload%2F%40babel%2Ftypes-7.8.7.tgz#1fc9729e1acbb2337d5b6977a63979b4819f5d1d", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": "https://registry.npm.taobao.org/@babel/plugin-syntax-nullish-coalescing-operator/download/@babel/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9",
"@babel/types@^7.8.6": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.7.tgz?cache=0&sync_timestamp=1583373427111&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftypes%2Fdownload%2F%40babel%2Ftypes-7.8.7.tgz#1fc9729e1acbb2337d5b6977a63979b4819f5d1d", "@babel/plugin-syntax-numeric-separator@^7.8.3": "https://registry.npm.taobao.org/@babel/plugin-syntax-numeric-separator/download/@babel/plugin-syntax-numeric-separator-7.10.4.tgz?cache=0&sync_timestamp=1593521768131&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-numeric-separator%2Fdownload%2F%40babel%2Fplugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97",
"@babel/types@^7.8.7": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.7.tgz?cache=0&sync_timestamp=1583373427111&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftypes%2Fdownload%2F%40babel%2Ftypes-7.8.7.tgz#1fc9729e1acbb2337d5b6977a63979b4819f5d1d", "@babel/plugin-syntax-object-rest-spread@^7.8.3": "https://registry.npm.taobao.org/@babel/plugin-syntax-object-rest-spread/download/@babel/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871",
"@babel/plugin-syntax-optional-catch-binding@^7.8.3": "https://registry.npm.taobao.org/@babel/plugin-syntax-optional-catch-binding/download/@babel/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1",
"@babel/plugin-syntax-optional-chaining@^7.8.3": "https://registry.npm.taobao.org/@babel/plugin-syntax-optional-chaining/download/@babel/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a",
"@babel/runtime-corejs3@^7.8.3": "https://registry.npm.taobao.org/@babel/runtime-corejs3/download/@babel/runtime-corejs3-7.10.4.tgz#f29fc1990307c4c57b10dbd6ce667b27159d9e0d",
"@babel/template@^7.10.4": "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278",
"@babel/template@^7.3.3": "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278",
"@babel/traverse@^7.1.0": "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.10.4.tgz?cache=0&sync_timestamp=1593522841483&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.10.4.tgz#e642e5395a3b09cc95c8e74a27432b484b697818",
"@babel/traverse@^7.10.4": "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.10.4.tgz?cache=0&sync_timestamp=1593522841483&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.10.4.tgz#e642e5395a3b09cc95c8e74a27432b484b697818",
"@babel/types@^7.0.0": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.10.4.tgz?cache=0&sync_timestamp=1593521074992&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftypes%2Fdownload%2F%40babel%2Ftypes-7.10.4.tgz#369517188352e18219981efd156bfdb199fff1ee",
"@babel/types@^7.10.4": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.10.4.tgz?cache=0&sync_timestamp=1593521074992&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftypes%2Fdownload%2F%40babel%2Ftypes-7.10.4.tgz#369517188352e18219981efd156bfdb199fff1ee",
"@babel/types@^7.3.0": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.10.4.tgz?cache=0&sync_timestamp=1593521074992&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftypes%2Fdownload%2F%40babel%2Ftypes-7.10.4.tgz#369517188352e18219981efd156bfdb199fff1ee",
"@babel/types@^7.3.3": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.10.4.tgz?cache=0&sync_timestamp=1593521074992&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftypes%2Fdownload%2F%40babel%2Ftypes-7.10.4.tgz#369517188352e18219981efd156bfdb199fff1ee",
"@bcoe/v8-coverage@^0.2.3": "https://registry.npm.taobao.org/@bcoe/v8-coverage/download/@bcoe/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39", "@bcoe/v8-coverage@^0.2.3": "https://registry.npm.taobao.org/@bcoe/v8-coverage/download/@bcoe/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39",
"@cnakazawa/watch@^1.0.3": "https://registry.npm.taobao.org/@cnakazawa/watch/download/@cnakazawa/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a", "@cnakazawa/watch@^1.0.3": "https://registry.npm.taobao.org/@cnakazawa/watch/download/@cnakazawa/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a",
"@istanbuljs/load-nyc-config@^1.0.0": "https://registry.npm.taobao.org/@istanbuljs/load-nyc-config/download/@istanbuljs/load-nyc-config-1.0.0.tgz#10602de5570baea82f8afbfa2630b24e7a8cfe5b", "@istanbuljs/load-nyc-config@^1.0.0": "https://registry.npm.taobao.org/@istanbuljs/load-nyc-config/download/@istanbuljs/load-nyc-config-1.1.0.tgz?cache=0&sync_timestamp=1589989504296&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40istanbuljs%2Fload-nyc-config%2Fdownload%2F%40istanbuljs%2Fload-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced",
"@istanbuljs/schema@^0.1.2": "https://registry.npm.taobao.org/@istanbuljs/schema/download/@istanbuljs/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd", "@istanbuljs/schema@^0.1.2": "https://registry.npm.taobao.org/@istanbuljs/schema/download/@istanbuljs/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd",
"@jest/console@^25.2.3": "https://registry.npm.taobao.org/@jest/console/download/@jest/console-25.2.3.tgz#38ac19b916ff61457173799239472659e1a67c39", "@jest/console@^26.1.0": "https://registry.npm.taobao.org/@jest/console/download/@jest/console-26.1.0.tgz#f67c89e4f4d04dbcf7b052aed5ab9c74f915b954",
"@jest/core@^25.2.4": "https://registry.npm.taobao.org/@jest/core/download/@jest/core-25.2.4.tgz#382ef80369d3311f1df79db1ee19e958ae95cdad", "@jest/core@^26.1.0": "https://registry.npm.taobao.org/@jest/core/download/@jest/core-26.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40jest%2Fcore%2Fdownload%2F%40jest%2Fcore-26.1.0.tgz#4580555b522de412a7998b3938c851e4f9da1c18",
"@jest/environment@^25.2.4": "https://registry.npm.taobao.org/@jest/environment/download/@jest/environment-25.2.4.tgz#74f4d8dd87b427434d0b822cde37bc0e78f3e28b", "@jest/environment@^26.1.0": "https://registry.npm.taobao.org/@jest/environment/download/@jest/environment-26.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40jest%2Fenvironment%2Fdownload%2F%40jest%2Fenvironment-26.1.0.tgz#378853bcdd1c2443b4555ab908cfbabb851e96da",
"@jest/fake-timers@^25.2.4": "https://registry.npm.taobao.org/@jest/fake-timers/download/@jest/fake-timers-25.2.4.tgz#6821b6edde74fda2a42467ae92cc93095d4c9527", "@jest/fake-timers@^26.1.0": "https://registry.npm.taobao.org/@jest/fake-timers/download/@jest/fake-timers-26.1.0.tgz#9a76b7a94c351cdbc0ad53e5a748789f819a65fe",
"@jest/reporters@^25.2.4": "https://registry.npm.taobao.org/@jest/reporters/download/@jest/reporters-25.2.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40jest%2Freporters%2Fdownload%2F%40jest%2Freporters-25.2.4.tgz#aa01c20aab217150d3a6080d5c98ce0bf34b17ed", "@jest/globals@^26.1.0": "https://registry.npm.taobao.org/@jest/globals/download/@jest/globals-26.1.0.tgz?cache=0&sync_timestamp=1592925417047&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40jest%2Fglobals%2Fdownload%2F%40jest%2Fglobals-26.1.0.tgz#6cc5d7cbb79b76b120f2403d7d755693cf063ab1",
"@jest/source-map@^25.2.1": "https://registry.npm.taobao.org/@jest/source-map/download/@jest/source-map-25.2.1.tgz?cache=0&sync_timestamp=1585215407328&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40jest%2Fsource-map%2Fdownload%2F%40jest%2Fsource-map-25.2.1.tgz#b62ecf8ae76170b08eff8859b56eb7576df34ab8", "@jest/reporters@^26.1.0": "https://registry.npm.taobao.org/@jest/reporters/download/@jest/reporters-26.1.0.tgz?cache=0&sync_timestamp=1592926179219&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40jest%2Freporters%2Fdownload%2F%40jest%2Freporters-26.1.0.tgz#08952e90c90282e14ff49e927bdf1873617dae78",
"@jest/test-result@^25.2.4": "https://registry.npm.taobao.org/@jest/test-result/download/@jest/test-result-25.2.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40jest%2Ftest-result%2Fdownload%2F%40jest%2Ftest-result-25.2.4.tgz#8fc9eac58e82eb2a82e4058e68c3814f98f59cf5", "@jest/source-map@^26.1.0": "https://registry.npm.taobao.org/@jest/source-map/download/@jest/source-map-26.1.0.tgz?cache=0&sync_timestamp=1592925324057&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40jest%2Fsource-map%2Fdownload%2F%40jest%2Fsource-map-26.1.0.tgz#a6a020d00e7d9478f4b690167c5e8b77e63adb26",
"@jest/test-sequencer@^25.2.4": "https://registry.npm.taobao.org/@jest/test-sequencer/download/@jest/test-sequencer-25.2.4.tgz#28364aeddec140c696324114f63570f3de536c87", "@jest/test-result@^26.1.0": "https://registry.npm.taobao.org/@jest/test-result/download/@jest/test-result-26.1.0.tgz#a93fa15b21ad3c7ceb21c2b4c35be2e407d8e971",
"@jest/transform@^25.2.4": "https://registry.npm.taobao.org/@jest/transform/download/@jest/transform-25.2.4.tgz#34336f37f13f62f7d1f5b93d5d150ba9eb3e11b9", "@jest/test-sequencer@^26.1.0": "https://registry.npm.taobao.org/@jest/test-sequencer/download/@jest/test-sequencer-26.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40jest%2Ftest-sequencer%2Fdownload%2F%40jest%2Ftest-sequencer-26.1.0.tgz#41a6fc8b850c3f33f48288ea9ea517c047e7f14e",
"@jest/types@^25.1.0": "https://registry.npm.taobao.org/@jest/types/download/@jest/types-25.1.0.tgz#b26831916f0d7c381e11dbb5e103a72aed1b4395", "@jest/transform@^26.1.0": "https://registry.npm.taobao.org/@jest/transform/download/@jest/transform-26.1.0.tgz?cache=0&sync_timestamp=1592924074822&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40jest%2Ftransform%2Fdownload%2F%40jest%2Ftransform-26.1.0.tgz#697f48898c2a2787c9b4cb71d09d7e617464e509",
"@jest/types@^25.2.3": "https://registry.npm.taobao.org/@jest/types/download/@jest/types-25.2.3.tgz#035c4fb94e2da472f359ff9a211915d59987f6b6", "@jest/types@^25.5.0": "https://registry.npm.taobao.org/@jest/types/download/@jest/types-25.5.0.tgz?cache=0&sync_timestamp=1592925333480&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40jest%2Ftypes%2Fdownload%2F%40jest%2Ftypes-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d",
"@sinonjs/commons@^1.7.0": "https://registry.npm.taobao.org/@sinonjs/commons/download/@sinonjs/commons-1.7.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40sinonjs%2Fcommons%2Fdownload%2F%40sinonjs%2Fcommons-1.7.1.tgz#da5fd19a5f71177a53778073978873964f49acf1", "@jest/types@^26.1.0": "https://registry.npm.taobao.org/@jest/types/download/@jest/types-26.1.0.tgz?cache=0&sync_timestamp=1592925333480&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40jest%2Ftypes%2Fdownload%2F%40jest%2Ftypes-26.1.0.tgz#f8afaaaeeb23b5cad49dd1f7779689941dcb6057",
"@types/babel__core@^7.1.0": "https://registry.npm.taobao.org/@types/babel__core/download/@types/babel__core-7.1.6.tgz?cache=0&sync_timestamp=1582707998251&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fbabel__core%2Fdownload%2F%40types%2Fbabel__core-7.1.6.tgz#16ff42a5ae203c9af1c6e190ed1f30f83207b610", "@sinonjs/commons@^1.7.0": "https://registry.npm.taobao.org/@sinonjs/commons/download/@sinonjs/commons-1.8.0.tgz?cache=0&sync_timestamp=1589985462006&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40sinonjs%2Fcommons%2Fdownload%2F%40sinonjs%2Fcommons-1.8.0.tgz#c8d68821a854c555bba172f3b06959a0039b236d",
"@types/babel__generator@*": "https://registry.npm.taobao.org/@types/babel__generator/download/@types/babel__generator-7.6.1.tgz#4901767b397e8711aeb99df8d396d7ba7b7f0e04", "@sinonjs/fake-timers@^6.0.1": "https://registry.npm.taobao.org/@sinonjs/fake-timers/download/@sinonjs/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40",
"@types/babel__template@*": "https://registry.npm.taobao.org/@types/babel__template/download/@types/babel__template-7.0.2.tgz?cache=0&sync_timestamp=1580847874054&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fbabel__template%2Fdownload%2F%40types%2Fbabel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307", "@types/babel__core@^7.0.0": "https://registry.npm.taobao.org/@types/babel__core/download/@types/babel__core-7.1.9.tgz?cache=0&sync_timestamp=1592726829065&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fbabel__core%2Fdownload%2F%40types%2Fbabel__core-7.1.9.tgz#77e59d438522a6fb898fa43dc3455c6e72f3963d",
"@types/babel__traverse@*": "https://registry.npm.taobao.org/@types/babel__traverse/download/@types/babel__traverse-7.0.9.tgz#be82fab304b141c3eee81a4ce3b034d0eba1590a", "@types/babel__core@^7.1.7": "https://registry.npm.taobao.org/@types/babel__core/download/@types/babel__core-7.1.9.tgz?cache=0&sync_timestamp=1592726829065&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fbabel__core%2Fdownload%2F%40types%2Fbabel__core-7.1.9.tgz#77e59d438522a6fb898fa43dc3455c6e72f3963d",
"@types/babel__traverse@^7.0.6": "https://registry.npm.taobao.org/@types/babel__traverse/download/@types/babel__traverse-7.0.9.tgz#be82fab304b141c3eee81a4ce3b034d0eba1590a", "@types/babel__generator@*": "https://registry.npm.taobao.org/@types/babel__generator/download/@types/babel__generator-7.6.1.tgz?cache=0&sync_timestamp=1588199664093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fbabel__generator%2Fdownload%2F%40types%2Fbabel__generator-7.6.1.tgz#4901767b397e8711aeb99df8d396d7ba7b7f0e04",
"@types/babel__template@*": "https://registry.npm.taobao.org/@types/babel__template/download/@types/babel__template-7.0.2.tgz?cache=0&sync_timestamp=1588199666194&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fbabel__template%2Fdownload%2F%40types%2Fbabel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307",
"@types/babel__traverse@*": "https://registry.npm.taobao.org/@types/babel__traverse/download/@types/babel__traverse-7.0.13.tgz#1874914be974a492e1b4cb00585cabb274e8ba18",
"@types/babel__traverse@^7.0.6": "https://registry.npm.taobao.org/@types/babel__traverse/download/@types/babel__traverse-7.0.13.tgz#1874914be974a492e1b4cb00585cabb274e8ba18",
"@types/color-name@^1.1.1": "https://registry.npm.taobao.org/@types/color-name/download/@types/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0", "@types/color-name@^1.1.1": "https://registry.npm.taobao.org/@types/color-name/download/@types/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0",
"@types/eslint-visitor-keys@^1.0.0": "https://registry.npm.taobao.org/@types/eslint-visitor-keys/download/@types/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d", "@types/eslint-visitor-keys@^1.0.0": "https://registry.npm.taobao.org/@types/eslint-visitor-keys/download/@types/eslint-visitor-keys-1.0.0.tgz?cache=0&sync_timestamp=1588199895754&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Feslint-visitor-keys%2Fdownload%2F%40types%2Feslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d",
"@types/istanbul-lib-coverage@*": "https://registry.npm.taobao.org/@types/istanbul-lib-coverage/download/@types/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff", "@types/graceful-fs@^4.1.2": "https://registry.npm.taobao.org/@types/graceful-fs/download/@types/graceful-fs-4.1.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fgraceful-fs%2Fdownload%2F%40types%2Fgraceful-fs-4.1.3.tgz#039af35fe26bec35003e8d86d2ee9c586354348f",
"@types/istanbul-lib-coverage@^2.0.0": "https://registry.npm.taobao.org/@types/istanbul-lib-coverage/download/@types/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff", "@types/istanbul-lib-coverage@*": "https://registry.npm.taobao.org/@types/istanbul-lib-coverage/download/@types/istanbul-lib-coverage-2.0.3.tgz?cache=0&sync_timestamp=1591718594878&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fistanbul-lib-coverage%2Fdownload%2F%40types%2Fistanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762",
"@types/istanbul-lib-coverage@^2.0.1": "https://registry.npm.taobao.org/@types/istanbul-lib-coverage/download/@types/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff", "@types/istanbul-lib-coverage@^2.0.0": "https://registry.npm.taobao.org/@types/istanbul-lib-coverage/download/@types/istanbul-lib-coverage-2.0.3.tgz?cache=0&sync_timestamp=1591718594878&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fistanbul-lib-coverage%2Fdownload%2F%40types%2Fistanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762",
"@types/istanbul-lib-coverage@^2.0.1": "https://registry.npm.taobao.org/@types/istanbul-lib-coverage/download/@types/istanbul-lib-coverage-2.0.3.tgz?cache=0&sync_timestamp=1591718594878&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fistanbul-lib-coverage%2Fdownload%2F%40types%2Fistanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762",
"@types/istanbul-lib-report@*": "https://registry.npm.taobao.org/@types/istanbul-lib-report/download/@types/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686", "@types/istanbul-lib-report@*": "https://registry.npm.taobao.org/@types/istanbul-lib-report/download/@types/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686",
"@types/istanbul-reports@^1.1.1": "https://registry.npm.taobao.org/@types/istanbul-reports/download/@types/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a", "@types/istanbul-reports@^1.1.1": "https://registry.npm.taobao.org/@types/istanbul-reports/download/@types/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2",
"@types/jest@^25.1.4": "https://registry.npm.taobao.org/@types/jest/download/@types/jest-25.1.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fjest%2Fdownload%2F%40types%2Fjest-25.1.4.tgz#9e9f1e59dda86d3fd56afce71d1ea1b331f6f760", "@types/jest@^26.0.3": "https://registry.npm.taobao.org/@types/jest/download/@types/jest-26.0.4.tgz#d2e513e85aca16992816f192582b5e67b0b15efb",
"@types/json-schema@^7.0.3": "https://registry.npm.taobao.org/@types/json-schema/download/@types/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339", "@types/json-schema@^7.0.3": "https://registry.npm.taobao.org/@types/json-schema/download/@types/json-schema-7.0.5.tgz?cache=0&sync_timestamp=1591720921048&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fjson-schema%2Fdownload%2F%40types%2Fjson-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd",
"@types/node@*": "https://registry.npm.taobao.org/@types/node/download/@types/node-13.9.2.tgz?cache=0&sync_timestamp=1584566829623&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-13.9.2.tgz#ace1880c03594cc3e80206d96847157d8e7fa349", "@types/node@*": "https://registry.npm.taobao.org/@types/node/download/@types/node-14.0.18.tgz?cache=0&sync_timestamp=1594067570282&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-14.0.18.tgz#5111b2285659442f9f95697386a2b42b875bd7e9",
"@types/node@^13.9.8": "https://registry.npm.taobao.org/@types/node/download/@types/node-13.9.8.tgz#09976420fc80a7a00bf40680c63815ed8c7616f4", "@types/node@^14.0.14": "https://registry.npm.taobao.org/@types/node/download/@types/node-14.0.23.tgz?cache=0&sync_timestamp=1594655900445&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-14.0.23.tgz#676fa0883450ed9da0bb24156213636290892806",
"@types/prettier@^1.19.0": "https://registry.npm.taobao.org/@types/prettier/download/@types/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f", "@types/normalize-package-data@^2.4.0": "https://registry.npm.taobao.org/@types/normalize-package-data/download/@types/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e",
"@types/semver@^7.1.0": "https://registry.npm.taobao.org/@types/semver/download/@types/semver-7.1.0.tgz#c8c630d4c18cd326beff77404887596f96408408", "@types/prettier@^2.0.0": "https://registry.npm.taobao.org/@types/prettier/download/@types/prettier-2.0.2.tgz?cache=0&sync_timestamp=1594074131001&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fprettier%2Fdownload%2F%40types%2Fprettier-2.0.2.tgz#5bb52ee68d0f8efa9cc0099920e56be6cc4e37f3",
"@types/semver@^7.3.1": "https://registry.npm.taobao.org/@types/semver/download/@types/semver-7.3.1.tgz#7a9a5d595b6d873f338c867dcef64df289468cfa",
"@types/stack-utils@^1.0.1": "https://registry.npm.taobao.org/@types/stack-utils/download/@types/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e", "@types/stack-utils@^1.0.1": "https://registry.npm.taobao.org/@types/stack-utils/download/@types/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e",
"@types/yargs-parser@*": "https://registry.npm.taobao.org/@types/yargs-parser/download/@types/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d", "@types/yargs-parser@*": "https://registry.npm.taobao.org/@types/yargs-parser/download/@types/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d",
"@types/yargs@^15.0.0": "https://registry.npm.taobao.org/@types/yargs/download/@types/yargs-15.0.4.tgz#7e5d0f8ca25e9d5849f2ea443cf7c402decd8299", "@types/yargs@^15.0.0": "https://registry.npm.taobao.org/@types/yargs/download/@types/yargs-15.0.5.tgz?cache=0&sync_timestamp=1589406630222&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fyargs%2Fdownload%2F%40types%2Fyargs-15.0.5.tgz#947e9a6561483bdee9adffc983e91a6902af8b79",
"@typescript-eslint/eslint-plugin@^2.26.0": "https://registry.npm.taobao.org/@typescript-eslint/eslint-plugin/download/@typescript-eslint/eslint-plugin-2.26.0.tgz#04c96560c8981421e5a9caad8394192363cc423f", "@typescript-eslint/eslint-plugin@^3.4.0": "https://registry.npm.taobao.org/@typescript-eslint/eslint-plugin/download/@typescript-eslint/eslint-plugin-3.6.1.tgz?cache=0&sync_timestamp=1594935114117&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Feslint-plugin%2Fdownload%2F%40typescript-eslint%2Feslint-plugin-3.6.1.tgz#5ced8fd2087fbb83a76973dea4a0d39d9cb4a642",
"@typescript-eslint/experimental-utils@2.26.0": "https://registry.npm.taobao.org/@typescript-eslint/experimental-utils/download/@typescript-eslint/experimental-utils-2.26.0.tgz#063390c404d9980767d76274df386c0aa675d91d", "@typescript-eslint/experimental-utils@3.6.1": "https://registry.npm.taobao.org/@typescript-eslint/experimental-utils/download/@typescript-eslint/experimental-utils-3.6.1.tgz?cache=0&sync_timestamp=1594933408823&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fexperimental-utils%2Fdownload%2F%40typescript-eslint%2Fexperimental-utils-3.6.1.tgz#b5a2738ebbceb3fa90c5b07d50bb1225403c4a54",
"@typescript-eslint/parser@^2.26.0": "https://registry.npm.taobao.org/@typescript-eslint/parser/download/@typescript-eslint/parser-2.26.0.tgz#385463615818b33acb72a25b39c03579df93d76f", "@typescript-eslint/parser@^3.4.0": "https://registry.npm.taobao.org/@typescript-eslint/parser/download/@typescript-eslint/parser-3.6.1.tgz?cache=0&sync_timestamp=1594935111878&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fparser%2Fdownload%2F%40typescript-eslint%2Fparser-3.6.1.tgz#216e8adf4ee9c629f77c985476a2ea07fb80e1dc",
"@typescript-eslint/typescript-estree@2.26.0": "https://registry.npm.taobao.org/@typescript-eslint/typescript-estree/download/@typescript-eslint/typescript-estree-2.26.0.tgz#d8132cf1ee8a72234f996519a47d8a9118b57d56", "@typescript-eslint/types@3.6.1": "https://registry.npm.taobao.org/@typescript-eslint/types/download/@typescript-eslint/types-3.6.1.tgz?cache=0&sync_timestamp=1594935117300&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Ftypes%2Fdownload%2F%40typescript-eslint%2Ftypes-3.6.1.tgz#87600fe79a1874235d3cc1cf5c7e1a12eea69eee",
"abab@^2.0.0": "https://registry.npm.taobao.org/abab/download/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a", "@typescript-eslint/typescript-estree@3.6.1": "https://registry.npm.taobao.org/@typescript-eslint/typescript-estree/download/@typescript-eslint/typescript-estree-3.6.1.tgz?cache=0&sync_timestamp=1594933407856&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Ftypescript-estree%2Fdownload%2F%40typescript-eslint%2Ftypescript-estree-3.6.1.tgz#a5c91fcc5497cce7922ff86bc37d5e5891dcdefa",
"acorn-globals@^4.3.2": "https://registry.npm.taobao.org/acorn-globals/download/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7", "@typescript-eslint/visitor-keys@3.6.1": "https://registry.npm.taobao.org/@typescript-eslint/visitor-keys/download/@typescript-eslint/visitor-keys-3.6.1.tgz?cache=0&sync_timestamp=1594935117477&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40typescript-eslint%2Fvisitor-keys%2Fdownload%2F%40typescript-eslint%2Fvisitor-keys-3.6.1.tgz#5c57a7772f4dd623cfeacc219303e7d46f963b37",
"abab@^2.0.3": "https://registry.npm.taobao.org/abab/download/abab-2.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fabab%2Fdownload%2Fabab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a",
"acorn-globals@^6.0.0": "https://registry.npm.taobao.org/acorn-globals/download/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45",
"acorn-jsx@^5.2.0": "https://registry.npm.taobao.org/acorn-jsx/download/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe", "acorn-jsx@^5.2.0": "https://registry.npm.taobao.org/acorn-jsx/download/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe",
"acorn-walk@^6.0.1": "https://registry.npm.taobao.org/acorn-walk/download/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c", "acorn-walk@^7.1.1": "https://registry.npm.taobao.org/acorn-walk/download/acorn-walk-7.2.0.tgz?cache=0&sync_timestamp=1592373495468&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn-walk%2Fdownload%2Facorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc",
"acorn@^6.0.1": "https://registry.npm.taobao.org/acorn/download/acorn-6.4.1.tgz?cache=0&sync_timestamp=1583796451368&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474", "acorn@^7.1.1": "https://registry.npm.taobao.org/acorn/download/acorn-7.3.1.tgz?cache=0&sync_timestamp=1591869432510&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-7.3.1.tgz#85010754db53c3fbaf3b9ea3e083aa5c5d147ffd",
"acorn@^7.1.0": "https://registry.npm.taobao.org/acorn/download/acorn-7.1.1.tgz?cache=0&sync_timestamp=1583796451368&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf", "acorn@^7.2.0": "https://registry.npm.taobao.org/acorn/download/acorn-7.3.1.tgz?cache=0&sync_timestamp=1591869432510&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-7.3.1.tgz#85010754db53c3fbaf3b9ea3e083aa5c5d147ffd",
"acorn@^7.1.1": "https://registry.npm.taobao.org/acorn/download/acorn-7.1.1.tgz?cache=0&sync_timestamp=1583796451368&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf", "ajv@^6.10.0": "https://registry.npm.taobao.org/ajv/download/ajv-6.12.3.tgz?cache=0&sync_timestamp=1593876872665&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706",
"ajv@^6.10.0": "https://registry.npm.taobao.org/ajv/download/ajv-6.12.0.tgz?cache=0&sync_timestamp=1582379551272&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7", "ajv@^6.10.2": "https://registry.npm.taobao.org/ajv/download/ajv-6.12.3.tgz?cache=0&sync_timestamp=1593876872665&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706",
"ajv@^6.10.2": "https://registry.npm.taobao.org/ajv/download/ajv-6.12.0.tgz?cache=0&sync_timestamp=1582379551272&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7", "ajv@^6.5.5": "https://registry.npm.taobao.org/ajv/download/ajv-6.12.3.tgz?cache=0&sync_timestamp=1593876872665&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706",
"ajv@^6.5.5": "https://registry.npm.taobao.org/ajv/download/ajv-6.12.0.tgz?cache=0&sync_timestamp=1582379551272&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7", "ansi-colors@^4.1.1": "https://registry.npm.taobao.org/ansi-colors/download/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348",
"ansi-escapes@^4.2.1": "https://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-4.3.1.tgz?cache=0&sync_timestamp=1583072820951&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-escapes%2Fdownload%2Fansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61", "ansi-escapes@^4.2.1": "https://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-4.3.1.tgz?cache=0&sync_timestamp=1583072820951&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-escapes%2Fdownload%2Fansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61",
"ansi-regex@^4.1.0": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997", "ansi-regex@^4.1.0": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997",
"ansi-regex@^5.0.0": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75", "ansi-regex@^5.0.0": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75",
@@ -130,7 +149,6 @@
"arr-diff@^4.0.0": "https://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520", "arr-diff@^4.0.0": "https://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520",
"arr-flatten@^1.1.0": "https://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1", "arr-flatten@^1.1.0": "https://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1",
"arr-union@^3.1.0": "https://registry.npm.taobao.org/arr-union/download/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4", "arr-union@^3.1.0": "https://registry.npm.taobao.org/arr-union/download/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4",
"array-equal@^1.0.0": "https://registry.npm.taobao.org/array-equal/download/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93",
"array-unique@^0.3.2": "https://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428", "array-unique@^0.3.2": "https://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428",
"asn1@~0.2.3": "https://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136", "asn1@~0.2.3": "https://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136",
"assert-plus@1.0.0": "https://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525", "assert-plus@1.0.0": "https://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525",
@@ -140,11 +158,12 @@
"asynckit@^0.4.0": "https://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79", "asynckit@^0.4.0": "https://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79",
"atob@^2.1.2": "https://registry.npm.taobao.org/atob/download/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9", "atob@^2.1.2": "https://registry.npm.taobao.org/atob/download/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9",
"aws-sign2@~0.7.0": "https://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8", "aws-sign2@~0.7.0": "https://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8",
"aws4@^1.8.0": "https://registry.npm.taobao.org/aws4/download/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e", "aws4@^1.8.0": "https://registry.npm.taobao.org/aws4/download/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2",
"babel-jest@^25.2.4": "https://registry.npm.taobao.org/babel-jest/download/babel-jest-25.2.4.tgz?cache=0&sync_timestamp=1585510733152&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-jest%2Fdownload%2Fbabel-jest-25.2.4.tgz#b21b68d3af8f161c3e6e501e91f0dea8e652e344", "babel-jest@^26.1.0": "https://registry.npm.taobao.org/babel-jest/download/babel-jest-26.1.0.tgz#b20751185fc7569a0f135730584044d1cb934328",
"babel-plugin-istanbul@^6.0.0": "https://registry.npm.taobao.org/babel-plugin-istanbul/download/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765", "babel-plugin-istanbul@^6.0.0": "https://registry.npm.taobao.org/babel-plugin-istanbul/download/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765",
"babel-plugin-jest-hoist@^25.2.1": "https://registry.npm.taobao.org/babel-plugin-jest-hoist/download/babel-plugin-jest-hoist-25.2.1.tgz?cache=0&sync_timestamp=1585215408279&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-plugin-jest-hoist%2Fdownload%2Fbabel-plugin-jest-hoist-25.2.1.tgz#d0003a1f3d5caa281e1107fe03bbf16b799f9955", "babel-plugin-jest-hoist@^26.1.0": "https://registry.npm.taobao.org/babel-plugin-jest-hoist/download/babel-plugin-jest-hoist-26.1.0.tgz#c6a774da08247a28285620a64dfadbd05dd5233a",
"babel-preset-jest@^25.2.1": "https://registry.npm.taobao.org/babel-preset-jest/download/babel-preset-jest-25.2.1.tgz?cache=0&sync_timestamp=1585215284183&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-preset-jest%2Fdownload%2Fbabel-preset-jest-25.2.1.tgz#4ccd0e577f69aa11b71806edfe8b25a5c3ac93a2", "babel-preset-current-node-syntax@^0.1.2": "https://registry.npm.taobao.org/babel-preset-current-node-syntax/download/babel-preset-current-node-syntax-0.1.3.tgz#b4b547acddbf963cba555ba9f9cbbb70bfd044da",
"babel-preset-jest@^26.1.0": "https://registry.npm.taobao.org/babel-preset-jest/download/babel-preset-jest-26.1.0.tgz?cache=0&sync_timestamp=1592925429126&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-preset-jest%2Fdownload%2Fbabel-preset-jest-26.1.0.tgz#612f714e5b457394acfd863793c564cbcdb7d1c1",
"balanced-match@^1.0.0": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767", "balanced-match@^1.0.0": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767",
"base@^0.11.1": "https://registry.npm.taobao.org/base/download/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f", "base@^0.11.1": "https://registry.npm.taobao.org/base/download/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f",
"bcrypt-pbkdf@^1.0.0": "https://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e", "bcrypt-pbkdf@^1.0.0": "https://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e",
@@ -152,7 +171,6 @@
"braces@^2.3.1": "https://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729", "braces@^2.3.1": "https://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729",
"braces@^3.0.1": "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107", "braces@^3.0.1": "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107",
"browser-process-hrtime@^1.0.0": "https://registry.npm.taobao.org/browser-process-hrtime/download/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626", "browser-process-hrtime@^1.0.0": "https://registry.npm.taobao.org/browser-process-hrtime/download/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626",
"browser-resolve@^1.11.3": "https://registry.npm.taobao.org/browser-resolve/download/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6",
"bs-logger@0.x": "https://registry.npm.taobao.org/bs-logger/download/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8", "bs-logger@0.x": "https://registry.npm.taobao.org/bs-logger/download/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8",
"bser@2.1.1": "https://registry.npm.taobao.org/bser/download/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05", "bser@2.1.1": "https://registry.npm.taobao.org/bser/download/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05",
"buffer-from@1.x": "https://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef", "buffer-from@1.x": "https://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef",
@@ -161,19 +179,18 @@
"callsites@^3.0.0": "https://registry.npm.taobao.org/callsites/download/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73", "callsites@^3.0.0": "https://registry.npm.taobao.org/callsites/download/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73",
"camelcase@^5.0.0": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320", "camelcase@^5.0.0": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320",
"camelcase@^5.3.1": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320", "camelcase@^5.3.1": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320",
"camelcase@^6.0.0": "https://registry.npm.taobao.org/camelcase/download/camelcase-6.0.0.tgz#5259f7c30e35e278f1bdc2a4d91230b37cad981e",
"capture-exit@^2.0.0": "https://registry.npm.taobao.org/capture-exit/download/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4", "capture-exit@^2.0.0": "https://registry.npm.taobao.org/capture-exit/download/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4",
"caseless@~0.12.0": "https://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc", "caseless@~0.12.0": "https://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc",
"chalk@^2.0.0": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424", "chalk@^2.0.0": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424",
"chalk@^2.1.0": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424",
"chalk@^3.0.0": "https://registry.npm.taobao.org/chalk/download/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4", "chalk@^3.0.0": "https://registry.npm.taobao.org/chalk/download/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4",
"chardet@^0.7.0": "https://registry.npm.taobao.org/chardet/download/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e", "chalk@^4.0.0": "https://registry.npm.taobao.org/chalk/download/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a",
"char-regex@^1.0.2": "https://registry.npm.taobao.org/char-regex/download/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf",
"ci-info@^2.0.0": "https://registry.npm.taobao.org/ci-info/download/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46", "ci-info@^2.0.0": "https://registry.npm.taobao.org/ci-info/download/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46",
"class-utils@^0.3.5": "https://registry.npm.taobao.org/class-utils/download/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463", "class-utils@^0.3.5": "https://registry.npm.taobao.org/class-utils/download/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463",
"cli-cursor@^3.1.0": "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307",
"cli-width@^2.0.0": "https://registry.npm.taobao.org/cli-width/download/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639",
"cliui@^6.0.0": "https://registry.npm.taobao.org/cliui/download/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1", "cliui@^6.0.0": "https://registry.npm.taobao.org/cliui/download/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1",
"co@^4.6.0": "https://registry.npm.taobao.org/co/download/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184", "co@^4.6.0": "https://registry.npm.taobao.org/co/download/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184",
"collect-v8-coverage@^1.0.0": "https://registry.npm.taobao.org/collect-v8-coverage/download/collect-v8-coverage-1.0.0.tgz#150ee634ac3650b71d9c985eb7f608942334feb1", "collect-v8-coverage@^1.0.0": "https://registry.npm.taobao.org/collect-v8-coverage/download/collect-v8-coverage-1.0.1.tgz?cache=0&sync_timestamp=1585829491234&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcollect-v8-coverage%2Fdownload%2Fcollect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59",
"collection-visit@^1.0.0": "https://registry.npm.taobao.org/collection-visit/download/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0", "collection-visit@^1.0.0": "https://registry.npm.taobao.org/collection-visit/download/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0",
"color-convert@^1.9.0": "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8", "color-convert@^1.9.0": "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8",
"color-convert@^2.0.1": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3", "color-convert@^2.0.1": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3",
@@ -183,26 +200,30 @@
"combined-stream@~1.0.6": "https://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f", "combined-stream@~1.0.6": "https://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f",
"component-emitter@^1.2.1": "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0", "component-emitter@^1.2.1": "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0",
"concat-map@0.0.1": "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b", "concat-map@0.0.1": "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b",
"convert-source-map@^1.4.0": "https://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442", "convert-source-map@^1.4.0": "https://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.7.0.tgz?cache=0&sync_timestamp=1573003862096&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconvert-source-map%2Fdownload%2Fconvert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442",
"convert-source-map@^1.6.0": "https://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442", "convert-source-map@^1.6.0": "https://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.7.0.tgz?cache=0&sync_timestamp=1573003862096&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconvert-source-map%2Fdownload%2Fconvert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442",
"convert-source-map@^1.7.0": "https://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442", "convert-source-map@^1.7.0": "https://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.7.0.tgz?cache=0&sync_timestamp=1573003862096&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconvert-source-map%2Fdownload%2Fconvert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442",
"copy-descriptor@^0.1.0": "https://registry.npm.taobao.org/copy-descriptor/download/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d", "copy-descriptor@^0.1.0": "https://registry.npm.taobao.org/copy-descriptor/download/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d",
"core-js-pure@^3.0.0": "https://registry.npm.taobao.org/core-js-pure/download/core-js-pure-3.6.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js-pure%2Fdownload%2Fcore-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813",
"core-util-is@1.0.2": "https://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7", "core-util-is@1.0.2": "https://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7",
"cross-spawn@^6.0.0": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4", "cross-spawn@^6.0.0": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz?cache=0&sync_timestamp=1590421014780&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcross-spawn%2Fdownload%2Fcross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4",
"cross-spawn@^6.0.5": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4", "cross-spawn@^7.0.0": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-7.0.3.tgz?cache=0&sync_timestamp=1590421014780&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcross-spawn%2Fdownload%2Fcross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6",
"cross-spawn@^7.0.0": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14", "cross-spawn@^7.0.2": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-7.0.3.tgz?cache=0&sync_timestamp=1590421014780&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcross-spawn%2Fdownload%2Fcross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6",
"cssom@^0.4.1": "https://registry.npm.taobao.org/cssom/download/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10", "cssom@^0.4.4": "https://registry.npm.taobao.org/cssom/download/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10",
"cssom@~0.3.6": "https://registry.npm.taobao.org/cssom/download/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a", "cssom@~0.3.6": "https://registry.npm.taobao.org/cssom/download/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a",
"cssstyle@^2.0.0": "https://registry.npm.taobao.org/cssstyle/download/cssstyle-2.2.0.tgz#e4c44debccd6b7911ed617a4395e5754bba59992", "cssstyle@^2.2.0": "https://registry.npm.taobao.org/cssstyle/download/cssstyle-2.3.0.tgz?cache=0&sync_timestamp=1588171453060&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcssstyle%2Fdownload%2Fcssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852",
"dashdash@^1.12.0": "https://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0", "dashdash@^1.12.0": "https://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0",
"data-urls@^1.1.0": "https://registry.npm.taobao.org/data-urls/download/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe", "data-urls@^2.0.0": "https://registry.npm.taobao.org/data-urls/download/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b",
"debug@^2.2.0": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f", "debug@^2.2.0": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f",
"debug@^2.3.3": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f", "debug@^2.3.3": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f",
"debug@^4.0.1": "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791", "debug@^4.0.1": "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791",
"debug@^4.1.0": "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791", "debug@^4.1.0": "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791",
"debug@^4.1.1": "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791", "debug@^4.1.1": "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791",
"decamelize@^1.2.0": "https://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290", "decamelize@^1.2.0": "https://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz?cache=0&sync_timestamp=1580010361049&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdecamelize%2Fdownload%2Fdecamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290",
"decamelize@^3.2.0": "https://registry.npm.taobao.org/decamelize/download/decamelize-3.2.0.tgz?cache=0&sync_timestamp=1580010361049&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdecamelize%2Fdownload%2Fdecamelize-3.2.0.tgz#84b8e8f4f8c579f938e35e2cc7024907e0090851",
"decimal.js@^10.2.0": "https://registry.npm.taobao.org/decimal.js/download/decimal.js-10.2.0.tgz#39466113a9e036111d02f82489b5fd6b0b5ed231",
"decode-uri-component@^0.2.0": "https://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545", "decode-uri-component@^0.2.0": "https://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545",
"deep-is@^0.1.3": "https://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34",
"deep-is@~0.1.3": "https://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34", "deep-is@~0.1.3": "https://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34",
"deepmerge@^4.2.2": "https://registry.npm.taobao.org/deepmerge/download/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955", "deepmerge@^4.2.2": "https://registry.npm.taobao.org/deepmerge/download/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955",
"define-property@^0.2.5": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116", "define-property@^0.2.5": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116",
@@ -210,85 +231,89 @@
"define-property@^2.0.2": "https://registry.npm.taobao.org/define-property/download/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d", "define-property@^2.0.2": "https://registry.npm.taobao.org/define-property/download/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d",
"delayed-stream@~1.0.0": "https://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619", "delayed-stream@~1.0.0": "https://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619",
"detect-newline@^3.0.0": "https://registry.npm.taobao.org/detect-newline/download/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651", "detect-newline@^3.0.0": "https://registry.npm.taobao.org/detect-newline/download/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651",
"diff-sequences@^25.1.0": "https://registry.npm.taobao.org/diff-sequences/download/diff-sequences-25.1.0.tgz#fd29a46f1c913fd66c22645dc75bffbe43051f32", "diff-sequences@^25.2.6": "https://registry.npm.taobao.org/diff-sequences/download/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd",
"diff-sequences@^25.2.1": "https://registry.npm.taobao.org/diff-sequences/download/diff-sequences-25.2.1.tgz#fcfe8aa07dd9b0c648396a478dabca8e76c6ab27", "diff-sequences@^26.0.0": "https://registry.npm.taobao.org/diff-sequences/download/diff-sequences-26.0.0.tgz#0760059a5c287637b842bd7085311db7060e88a6",
"doctrine@^3.0.0": "https://registry.npm.taobao.org/doctrine/download/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961", "doctrine@^3.0.0": "https://registry.npm.taobao.org/doctrine/download/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961",
"domexception@^1.0.1": "https://registry.npm.taobao.org/domexception/download/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90", "domexception@^2.0.1": "https://registry.npm.taobao.org/domexception/download/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304",
"ecc-jsbn@~0.1.1": "https://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9", "ecc-jsbn@~0.1.1": "https://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9",
"emoji-regex@^7.0.1": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156", "emoji-regex@^7.0.1": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156",
"emoji-regex@^8.0.0": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37", "emoji-regex@^8.0.0": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37",
"end-of-stream@^1.1.0": "https://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0", "end-of-stream@^1.1.0": "https://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0",
"enquirer@^2.3.5": "https://registry.npm.taobao.org/enquirer/download/enquirer-2.3.6.tgz?cache=0&sync_timestamp=1593693238207&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fenquirer%2Fdownload%2Fenquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d",
"error-ex@^1.3.1": "https://registry.npm.taobao.org/error-ex/download/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf",
"escape-string-regexp@^1.0.5": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4", "escape-string-regexp@^1.0.5": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4",
"escodegen@^1.11.1": "https://registry.npm.taobao.org/escodegen/download/escodegen-1.14.1.tgz#ba01d0c8278b5e95a9a45350142026659027a457", "escape-string-regexp@^2.0.0": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344",
"eslint-config-prettier@^6.10.1": "https://registry.npm.taobao.org/eslint-config-prettier/download/eslint-config-prettier-6.10.1.tgz#129ef9ec575d5ddc0e269667bf09defcd898642a", "escodegen@^1.14.1": "https://registry.npm.taobao.org/escodegen/download/escodegen-1.14.3.tgz?cache=0&sync_timestamp=1592866436888&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescodegen%2Fdownload%2Fescodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503",
"eslint-plugin-prettier@^3.1.2": "https://registry.npm.taobao.org/eslint-plugin-prettier/download/eslint-plugin-prettier-3.1.2.tgz#432e5a667666ab84ce72f945c72f77d996a5c9ba", "eslint-config-prettier@^6.11.0": "https://registry.npm.taobao.org/eslint-config-prettier/download/eslint-config-prettier-6.11.0.tgz#f6d2238c1290d01c859a8b5c1f7d352a0b0da8b1",
"eslint-scope@^5.0.0": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9", "eslint-plugin-prettier@^3.1.4": "https://registry.npm.taobao.org/eslint-plugin-prettier/download/eslint-plugin-prettier-3.1.4.tgz#168ab43154e2ea57db992a2cd097c828171f75c2",
"eslint-utils@^1.4.3": "https://registry.npm.taobao.org/eslint-utils/download/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f", "eslint-scope@^5.0.0": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5",
"eslint-utils@^2.0.0": "https://registry.npm.taobao.org/eslint-utils/download/eslint-utils-2.0.0.tgz#7be1cc70f27a72a76cd14aa698bcabed6890e1cd", "eslint-scope@^5.1.0": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5",
"eslint-visitor-keys@^1.1.0": "https://registry.npm.taobao.org/eslint-visitor-keys/download/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2", "eslint-utils@^2.0.0": "https://registry.npm.taobao.org/eslint-utils/download/eslint-utils-2.1.0.tgz?cache=0&sync_timestamp=1592222134559&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-utils%2Fdownload%2Feslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27",
"eslint@^6.8.0": "https://registry.npm.taobao.org/eslint/download/eslint-6.8.0.tgz?cache=0&sync_timestamp=1582928719498&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint%2Fdownload%2Feslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb", "eslint-visitor-keys@^1.1.0": "https://registry.npm.taobao.org/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz?cache=0&sync_timestamp=1592583377772&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-visitor-keys%2Fdownload%2Feslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e",
"espree@^6.1.2": "https://registry.npm.taobao.org/espree/download/espree-6.2.1.tgz?cache=0&sync_timestamp=1583870100266&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fespree%2Fdownload%2Fespree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a", "eslint-visitor-keys@^1.2.0": "https://registry.npm.taobao.org/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz?cache=0&sync_timestamp=1592583377772&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-visitor-keys%2Fdownload%2Feslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e",
"esprima@^4.0.0": "https://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71", "eslint@^7.3.1": "https://registry.npm.taobao.org/eslint/download/eslint-7.4.0.tgz?cache=0&sync_timestamp=1593807226047&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint%2Fdownload%2Feslint-7.4.0.tgz#4e35a2697e6c1972f9d6ef2b690ad319f80f206f",
"esprima@^4.0.1": "https://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71", "espree@^7.1.0": "https://registry.npm.taobao.org/espree/download/espree-7.1.0.tgz?cache=0&sync_timestamp=1591269414186&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fespree%2Fdownload%2Fespree-7.1.0.tgz#a9c7f18a752056735bf1ba14cb1b70adc3a5ce1c",
"esquery@^1.0.1": "https://registry.npm.taobao.org/esquery/download/esquery-1.1.0.tgz?cache=0&sync_timestamp=1581531387755&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fesquery%2Fdownload%2Fesquery-1.1.0.tgz#c5c0b66f383e7656404f86b31334d72524eddb48", "esprima@^4.0.0": "https://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz?cache=0&sync_timestamp=1569398383140&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fesprima%2Fdownload%2Fesprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71",
"esprima@^4.0.1": "https://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz?cache=0&sync_timestamp=1569398383140&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fesprima%2Fdownload%2Fesprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71",
"esquery@^1.2.0": "https://registry.npm.taobao.org/esquery/download/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57",
"esrecurse@^4.1.0": "https://registry.npm.taobao.org/esrecurse/download/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf", "esrecurse@^4.1.0": "https://registry.npm.taobao.org/esrecurse/download/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf",
"estraverse@^4.0.0": "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d",
"estraverse@^4.1.0": "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d", "estraverse@^4.1.0": "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d",
"estraverse@^4.1.1": "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d", "estraverse@^4.1.1": "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d",
"estraverse@^4.2.0": "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d", "estraverse@^4.2.0": "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d",
"estraverse@^5.1.0": "https://registry.npm.taobao.org/estraverse/download/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642",
"esutils@^2.0.2": "https://registry.npm.taobao.org/esutils/download/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64", "esutils@^2.0.2": "https://registry.npm.taobao.org/esutils/download/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64",
"exec-sh@^0.3.2": "https://registry.npm.taobao.org/exec-sh/download/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5", "exec-sh@^0.3.2": "https://registry.npm.taobao.org/exec-sh/download/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5",
"execa@^1.0.0": "https://registry.npm.taobao.org/execa/download/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8", "execa@^1.0.0": "https://registry.npm.taobao.org/execa/download/execa-1.0.0.tgz?cache=0&sync_timestamp=1590156579845&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8",
"execa@^3.2.0": "https://registry.npm.taobao.org/execa/download/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89", "execa@^4.0.0": "https://registry.npm.taobao.org/execa/download/execa-4.0.2.tgz?cache=0&sync_timestamp=1590156579845&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-4.0.2.tgz#ad87fb7b2d9d564f70d2b62d511bee41d5cbb240",
"exit@^0.1.2": "https://registry.npm.taobao.org/exit/download/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c", "exit@^0.1.2": "https://registry.npm.taobao.org/exit/download/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c",
"expand-brackets@^2.1.4": "https://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622", "expand-brackets@^2.1.4": "https://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622",
"expect@^25.2.4": "https://registry.npm.taobao.org/expect/download/expect-25.2.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexpect%2Fdownload%2Fexpect-25.2.4.tgz#b66e0777c861034ebc21730bb34e1839d5d46806", "expect@^26.1.0": "https://registry.npm.taobao.org/expect/download/expect-26.1.0.tgz?cache=0&sync_timestamp=1592925842963&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexpect%2Fdownload%2Fexpect-26.1.0.tgz#8c62e31d0f8d5a8ebb186ee81473d15dd2fbf7c8",
"extend-shallow@^2.0.1": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f", "extend-shallow@^2.0.1": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f",
"extend-shallow@^3.0.0": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8", "extend-shallow@^3.0.0": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8",
"extend-shallow@^3.0.2": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8", "extend-shallow@^3.0.2": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8",
"extend@~3.0.2": "https://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa", "extend@~3.0.2": "https://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa",
"external-editor@^3.0.3": "https://registry.npm.taobao.org/external-editor/download/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495",
"extglob@^2.0.4": "https://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543", "extglob@^2.0.4": "https://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543",
"extsprintf@1.3.0": "https://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05", "extsprintf@1.3.0": "https://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05",
"extsprintf@^1.2.0": "https://registry.npm.taobao.org/extsprintf/download/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f", "extsprintf@^1.2.0": "https://registry.npm.taobao.org/extsprintf/download/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f",
"fast-deep-equal@^3.1.1": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4", "fast-deep-equal@^3.1.1": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz?cache=0&sync_timestamp=1591599604098&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-deep-equal%2Fdownload%2Ffast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525",
"fast-diff@^1.1.2": "https://registry.npm.taobao.org/fast-diff/download/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03", "fast-diff@^1.1.2": "https://registry.npm.taobao.org/fast-diff/download/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03",
"fast-json-stable-stringify@2.x": "https://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633", "fast-json-stable-stringify@2.x": "https://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633",
"fast-json-stable-stringify@^2.0.0": "https://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633", "fast-json-stable-stringify@^2.0.0": "https://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633",
"fast-levenshtein@^2.0.6": "https://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917",
"fast-levenshtein@~2.0.6": "https://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917", "fast-levenshtein@~2.0.6": "https://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917",
"fb-watchman@^2.0.0": "https://registry.npm.taobao.org/fb-watchman/download/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85", "fb-watchman@^2.0.0": "https://registry.npm.taobao.org/fb-watchman/download/fb-watchman-2.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffb-watchman%2Fdownload%2Ffb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85",
"figures@^3.0.0": "https://registry.npm.taobao.org/figures/download/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af",
"file-entry-cache@^5.0.1": "https://registry.npm.taobao.org/file-entry-cache/download/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c", "file-entry-cache@^5.0.1": "https://registry.npm.taobao.org/file-entry-cache/download/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c",
"fill-range@^4.0.0": "https://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7", "fill-range@^4.0.0": "https://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7",
"fill-range@^7.0.1": "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40", "fill-range@^7.0.1": "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40",
"find-up@^4.0.0": "https://registry.npm.taobao.org/find-up/download/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19", "find-up@^4.0.0": "https://registry.npm.taobao.org/find-up/download/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19",
"find-up@^4.1.0": "https://registry.npm.taobao.org/find-up/download/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19", "find-up@^4.1.0": "https://registry.npm.taobao.org/find-up/download/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19",
"flat-cache@^2.0.1": "https://registry.npm.taobao.org/flat-cache/download/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0", "flat-cache@^2.0.1": "https://registry.npm.taobao.org/flat-cache/download/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0",
"flatted@^2.0.0": "https://registry.npm.taobao.org/flatted/download/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08", "flatted@^2.0.0": "https://registry.npm.taobao.org/flatted/download/flatted-2.0.2.tgz?cache=0&sync_timestamp=1593953421432&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fflatted%2Fdownload%2Fflatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138",
"for-in@^1.0.2": "https://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80", "for-in@^1.0.2": "https://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80",
"forever-agent@~0.6.1": "https://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91", "forever-agent@~0.6.1": "https://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91",
"form-data@~2.3.2": "https://registry.npm.taobao.org/form-data/download/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6", "form-data@~2.3.2": "https://registry.npm.taobao.org/form-data/download/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6",
"fragment-cache@^0.2.1": "https://registry.npm.taobao.org/fragment-cache/download/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19", "fragment-cache@^0.2.1": "https://registry.npm.taobao.org/fragment-cache/download/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19",
"fs.realpath@^1.0.0": "https://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f", "fs.realpath@^1.0.0": "https://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f",
"fsevents@^2.1.2": "https://registry.npm.taobao.org/fsevents/download/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805", "fsevents@^2.1.2": "https://registry.npm.taobao.org/fsevents/download/fsevents-2.1.3.tgz?cache=0&sync_timestamp=1588787369955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e",
"functional-red-black-tree@^1.0.1": "https://registry.npm.taobao.org/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327", "functional-red-black-tree@^1.0.1": "https://registry.npm.taobao.org/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327",
"gensync@^1.0.0-beta.1": "https://registry.npm.taobao.org/gensync/download/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269", "gensync@^1.0.0-beta.1": "https://registry.npm.taobao.org/gensync/download/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269",
"get-caller-file@^2.0.1": "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e", "get-caller-file@^2.0.1": "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e",
"get-package-type@^0.1.0": "https://registry.npm.taobao.org/get-package-type/download/get-package-type-0.1.0.tgz?cache=0&sync_timestamp=1589989507025&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-package-type%2Fdownload%2Fget-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a",
"get-stdin@^6.0.0": "https://registry.npm.taobao.org/get-stdin/download/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b", "get-stdin@^6.0.0": "https://registry.npm.taobao.org/get-stdin/download/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b",
"get-stream@^4.0.0": "https://registry.npm.taobao.org/get-stream/download/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5", "get-stream@^4.0.0": "https://registry.npm.taobao.org/get-stream/download/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5",
"get-stream@^5.0.0": "https://registry.npm.taobao.org/get-stream/download/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9", "get-stream@^5.0.0": "https://registry.npm.taobao.org/get-stream/download/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9",
"get-value@^2.0.3": "https://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28", "get-value@^2.0.3": "https://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28",
"get-value@^2.0.6": "https://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28", "get-value@^2.0.6": "https://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28",
"getpass@^0.1.1": "https://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa", "getpass@^0.1.1": "https://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa",
"glob-parent@^5.0.0": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2", "glob-parent@^5.0.0": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229",
"glob@^7.1.1": "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6", "glob@^7.1.1": "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz?cache=0&sync_timestamp=1573078302562&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob%2Fdownload%2Fglob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6",
"glob@^7.1.2": "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6", "glob@^7.1.2": "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz?cache=0&sync_timestamp=1573078302562&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob%2Fdownload%2Fglob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6",
"glob@^7.1.3": "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6", "glob@^7.1.3": "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz?cache=0&sync_timestamp=1573078302562&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob%2Fdownload%2Fglob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6",
"glob@^7.1.4": "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6", "glob@^7.1.4": "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz?cache=0&sync_timestamp=1573078302562&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob%2Fdownload%2Fglob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6",
"glob@^7.1.6": "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6", "glob@^7.1.6": "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz?cache=0&sync_timestamp=1573078302562&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob%2Fdownload%2Fglob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6",
"globals@^11.1.0": "https://registry.npm.taobao.org/globals/download/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e", "globals@^11.1.0": "https://registry.npm.taobao.org/globals/download/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e",
"globals@^12.1.0": "https://registry.npm.taobao.org/globals/download/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8", "globals@^12.1.0": "https://registry.npm.taobao.org/globals/download/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8",
"graceful-fs@^4.2.3": "https://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423", "graceful-fs@^4.2.4": "https://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.2.4.tgz?cache=0&sync_timestamp=1588086924019&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fgraceful-fs%2Fdownload%2Fgraceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb",
"growly@^1.3.0": "https://registry.npm.taobao.org/growly/download/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081", "growly@^1.3.0": "https://registry.npm.taobao.org/growly/download/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081",
"har-schema@^2.0.0": "https://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92", "har-schema@^2.0.0": "https://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92",
"har-validator@~5.1.3": "https://registry.npm.taobao.org/har-validator/download/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080", "har-validator@~5.1.3": "https://registry.npm.taobao.org/har-validator/download/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080",
@@ -298,22 +323,22 @@
"has-value@^1.0.0": "https://registry.npm.taobao.org/has-value/download/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177", "has-value@^1.0.0": "https://registry.npm.taobao.org/has-value/download/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177",
"has-values@^0.1.4": "https://registry.npm.taobao.org/has-values/download/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771", "has-values@^0.1.4": "https://registry.npm.taobao.org/has-values/download/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771",
"has-values@^1.0.0": "https://registry.npm.taobao.org/has-values/download/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f", "has-values@^1.0.0": "https://registry.npm.taobao.org/has-values/download/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f",
"html-encoding-sniffer@^1.0.2": "https://registry.npm.taobao.org/html-encoding-sniffer/download/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8", "hosted-git-info@^2.1.4": "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.8.8.tgz?cache=0&sync_timestamp=1583018405733&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhosted-git-info%2Fdownload%2Fhosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488",
"html-escaper@^2.0.0": "https://registry.npm.taobao.org/html-escaper/download/html-escaper-2.0.0.tgz#71e87f931de3fe09e56661ab9a29aadec707b491", "html-encoding-sniffer@^2.0.1": "https://registry.npm.taobao.org/html-encoding-sniffer/download/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3",
"http-signature@~1.2.0": "https://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz?cache=0&sync_timestamp=1582587749558&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-signature%2Fdownload%2Fhttp-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1", "html-escaper@^2.0.0": "https://registry.npm.taobao.org/html-escaper/download/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453",
"http-signature@~1.2.0": "https://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1",
"human-signals@^1.1.1": "https://registry.npm.taobao.org/human-signals/download/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3", "human-signals@^1.1.1": "https://registry.npm.taobao.org/human-signals/download/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3",
"iconv-lite@0.4.24": "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b", "iconv-lite@0.4.24": "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b",
"iconv-lite@^0.4.24": "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b",
"ignore@^4.0.6": "https://registry.npm.taobao.org/ignore/download/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc", "ignore@^4.0.6": "https://registry.npm.taobao.org/ignore/download/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc",
"import-fresh@^3.0.0": "https://registry.npm.taobao.org/import-fresh/download/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66", "import-fresh@^3.0.0": "https://registry.npm.taobao.org/import-fresh/download/import-fresh-3.2.1.tgz?cache=0&sync_timestamp=1573664960772&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fimport-fresh%2Fdownload%2Fimport-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66",
"import-local@^3.0.2": "https://registry.npm.taobao.org/import-local/download/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6", "import-local@^3.0.2": "https://registry.npm.taobao.org/import-local/download/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6",
"imurmurhash@^0.1.4": "https://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea", "imurmurhash@^0.1.4": "https://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea",
"inflight@^1.0.4": "https://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9", "inflight@^1.0.4": "https://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9",
"inherits@2": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c", "inherits@2": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c",
"inquirer@^7.0.0": "https://registry.npm.taobao.org/inquirer/download/inquirer-7.1.0.tgz?cache=0&sync_timestamp=1583821033098&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finquirer%2Fdownload%2Finquirer-7.1.0.tgz#1298a01859883e17c7264b82870ae1034f92dd29",
"ip-regex@^2.1.0": "https://registry.npm.taobao.org/ip-regex/download/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9", "ip-regex@^2.1.0": "https://registry.npm.taobao.org/ip-regex/download/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9",
"is-accessor-descriptor@^0.1.6": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6", "is-accessor-descriptor@^0.1.6": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6",
"is-accessor-descriptor@^1.0.0": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656", "is-accessor-descriptor@^1.0.0": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656",
"is-arrayish@^0.2.1": "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d",
"is-buffer@^1.1.5": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be", "is-buffer@^1.1.5": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be",
"is-ci@^2.0.0": "https://registry.npm.taobao.org/is-ci/download/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c", "is-ci@^2.0.0": "https://registry.npm.taobao.org/is-ci/download/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c",
"is-data-descriptor@^0.1.4": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56", "is-data-descriptor@^0.1.4": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56",
@@ -321,6 +346,7 @@
"is-descriptor@^0.1.0": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca", "is-descriptor@^0.1.0": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca",
"is-descriptor@^1.0.0": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec", "is-descriptor@^1.0.0": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec",
"is-descriptor@^1.0.2": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec", "is-descriptor@^1.0.2": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec",
"is-docker@^2.0.0": "https://registry.npm.taobao.org/is-docker/download/is-docker-2.0.0.tgz#2cb0df0e75e2d064fe1864c37cdeacb7b2dcf25b",
"is-extendable@^0.1.0": "https://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89", "is-extendable@^0.1.0": "https://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89",
"is-extendable@^0.1.1": "https://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89", "is-extendable@^0.1.1": "https://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89",
"is-extendable@^1.0.1": "https://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4", "is-extendable@^1.0.1": "https://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4",
@@ -332,15 +358,15 @@
"is-glob@^4.0.1": "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc", "is-glob@^4.0.1": "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc",
"is-number@^3.0.0": "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195", "is-number@^3.0.0": "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195",
"is-number@^7.0.0": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b", "is-number@^7.0.0": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b",
"is-plain-object@^2.0.3": "https://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677", "is-plain-object@^2.0.3": "https://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz?cache=0&sync_timestamp=1593243601484&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-object%2Fdownload%2Fis-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677",
"is-plain-object@^2.0.4": "https://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677", "is-plain-object@^2.0.4": "https://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz?cache=0&sync_timestamp=1593243601484&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-object%2Fdownload%2Fis-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677",
"is-promise@^2.1.0": "https://registry.npm.taobao.org/is-promise/download/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa", "is-potential-custom-element-name@^1.0.0": "https://registry.npm.taobao.org/is-potential-custom-element-name/download/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397",
"is-stream@^1.1.0": "https://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44", "is-stream@^1.1.0": "https://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44",
"is-stream@^2.0.0": "https://registry.npm.taobao.org/is-stream/download/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3", "is-stream@^2.0.0": "https://registry.npm.taobao.org/is-stream/download/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3",
"is-typedarray@^1.0.0": "https://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a", "is-typedarray@^1.0.0": "https://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a",
"is-typedarray@~1.0.0": "https://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a", "is-typedarray@~1.0.0": "https://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a",
"is-windows@^1.0.2": "https://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d", "is-windows@^1.0.2": "https://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d",
"is-wsl@^2.1.1": "https://registry.npm.taobao.org/is-wsl/download/is-wsl-2.1.1.tgz#4a1c152d429df3d441669498e2486d3596ebaf1d", "is-wsl@^2.1.1": "https://registry.npm.taobao.org/is-wsl/download/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271",
"isarray@1.0.0": "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11", "isarray@1.0.0": "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11",
"isexe@^2.0.0": "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10", "isexe@^2.0.0": "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10",
"isobject@^2.0.0": "https://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89", "isobject@^2.0.0": "https://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89",
@@ -348,51 +374,54 @@
"isobject@^3.0.1": "https://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df", "isobject@^3.0.1": "https://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df",
"isstream@~0.1.2": "https://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a", "isstream@~0.1.2": "https://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a",
"istanbul-lib-coverage@^3.0.0": "https://registry.npm.taobao.org/istanbul-lib-coverage/download/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec", "istanbul-lib-coverage@^3.0.0": "https://registry.npm.taobao.org/istanbul-lib-coverage/download/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec",
"istanbul-lib-instrument@^4.0.0": "https://registry.npm.taobao.org/istanbul-lib-instrument/download/istanbul-lib-instrument-4.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fistanbul-lib-instrument%2Fdownload%2Fistanbul-lib-instrument-4.0.1.tgz#61f13ac2c96cfefb076fe7131156cc05907874e6", "istanbul-lib-instrument@^4.0.0": "https://registry.npm.taobao.org/istanbul-lib-instrument/download/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d",
"istanbul-lib-instrument@^4.0.3": "https://registry.npm.taobao.org/istanbul-lib-instrument/download/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d",
"istanbul-lib-report@^3.0.0": "https://registry.npm.taobao.org/istanbul-lib-report/download/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6", "istanbul-lib-report@^3.0.0": "https://registry.npm.taobao.org/istanbul-lib-report/download/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6",
"istanbul-lib-source-maps@^4.0.0": "https://registry.npm.taobao.org/istanbul-lib-source-maps/download/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9", "istanbul-lib-source-maps@^4.0.0": "https://registry.npm.taobao.org/istanbul-lib-source-maps/download/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9",
"istanbul-reports@^3.0.0": "https://registry.npm.taobao.org/istanbul-reports/download/istanbul-reports-3.0.0.tgz#d4d16d035db99581b6194e119bbf36c963c5eb70", "istanbul-reports@^3.0.2": "https://registry.npm.taobao.org/istanbul-reports/download/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b",
"jest-changed-files@^25.2.3": "https://registry.npm.taobao.org/jest-changed-files/download/jest-changed-files-25.2.3.tgz?cache=0&sync_timestamp=1585255877649&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-changed-files%2Fdownload%2Fjest-changed-files-25.2.3.tgz#ad19deef9e47ba37efb432d2c9a67dfd97cc78af", "jest-changed-files@^26.1.0": "https://registry.npm.taobao.org/jest-changed-files/download/jest-changed-files-26.1.0.tgz#de66b0f30453bca2aff98e9400f75905da495305",
"jest-cli@^25.2.4": "https://registry.npm.taobao.org/jest-cli/download/jest-cli-25.2.4.tgz#021c2383904696597abc060dcb133c82ebd8bfcc", "jest-cli@^26.1.0": "https://registry.npm.taobao.org/jest-cli/download/jest-cli-26.1.0.tgz#eb9ec8a18cf3b6aa556d9deaa9e24be12b43ad87",
"jest-config@^25.2.4": "https://registry.npm.taobao.org/jest-config/download/jest-config-25.2.4.tgz#f4f33238979f225683179c89d1e402893008975d", "jest-config@^26.1.0": "https://registry.npm.taobao.org/jest-config/download/jest-config-26.1.0.tgz#9074f7539acc185e0113ad6d22ed589c16a37a73",
"jest-diff@^25.1.0": "https://registry.npm.taobao.org/jest-diff/download/jest-diff-25.1.0.tgz#58b827e63edea1bc80c1de952b80cec9ac50e1ad", "jest-diff@^25.2.1": "https://registry.npm.taobao.org/jest-diff/download/jest-diff-25.5.0.tgz?cache=0&sync_timestamp=1592925839936&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-diff%2Fdownload%2Fjest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9",
"jest-diff@^25.2.3": "https://registry.npm.taobao.org/jest-diff/download/jest-diff-25.2.3.tgz?cache=0&sync_timestamp=1585255877885&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-diff%2Fdownload%2Fjest-diff-25.2.3.tgz#54d601a0a754ef26e808a8c8dbadd278c215aa3f", "jest-diff@^26.1.0": "https://registry.npm.taobao.org/jest-diff/download/jest-diff-26.1.0.tgz?cache=0&sync_timestamp=1592925839936&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-diff%2Fdownload%2Fjest-diff-26.1.0.tgz#00a549bdc936c9691eb4dc25d1fbd78bf456abb2",
"jest-docblock@^25.2.3": "https://registry.npm.taobao.org/jest-docblock/download/jest-docblock-25.2.3.tgz?cache=0&sync_timestamp=1585255874870&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-docblock%2Fdownload%2Fjest-docblock-25.2.3.tgz#ac45280c43d59e7139f9fbe5896c6e0320c01ebb", "jest-docblock@^26.0.0": "https://registry.npm.taobao.org/jest-docblock/download/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5",
"jest-each@^25.2.3": "https://registry.npm.taobao.org/jest-each/download/jest-each-25.2.3.tgz?cache=0&sync_timestamp=1585255872267&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-each%2Fdownload%2Fjest-each-25.2.3.tgz#64067ba1508ebbd07e9b126c173ab371e8e6309d", "jest-each@^26.1.0": "https://registry.npm.taobao.org/jest-each/download/jest-each-26.1.0.tgz?cache=0&sync_timestamp=1592925429696&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-each%2Fdownload%2Fjest-each-26.1.0.tgz#e35449875009a22d74d1bda183b306db20f286f7",
"jest-environment-jsdom@^25.2.4": "https://registry.npm.taobao.org/jest-environment-jsdom/download/jest-environment-jsdom-25.2.4.tgz#f2783541d0538b1bc43641703372cea6a2e83611", "jest-environment-jsdom@^26.1.0": "https://registry.npm.taobao.org/jest-environment-jsdom/download/jest-environment-jsdom-26.1.0.tgz#9dc7313ffe1b59761dad1fedb76e2503e5d37c5b",
"jest-environment-node@^25.2.4": "https://registry.npm.taobao.org/jest-environment-node/download/jest-environment-node-25.2.4.tgz?cache=0&sync_timestamp=1585510748152&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-environment-node%2Fdownload%2Fjest-environment-node-25.2.4.tgz#dc211dfb0d8b66dfc1965a8f846e72e54ff0c430", "jest-environment-node@^26.1.0": "https://registry.npm.taobao.org/jest-environment-node/download/jest-environment-node-26.1.0.tgz#8bb387b3eefb132eab7826f9a808e4e05618960b",
"jest-get-type@^25.1.0": "https://registry.npm.taobao.org/jest-get-type/download/jest-get-type-25.1.0.tgz#1cfe5fc34f148dc3a8a3b7275f6b9ce9e2e8a876", "jest-get-type@^25.2.6": "https://registry.npm.taobao.org/jest-get-type/download/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877",
"jest-get-type@^25.2.1": "https://registry.npm.taobao.org/jest-get-type/download/jest-get-type-25.2.1.tgz?cache=0&sync_timestamp=1585215279267&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-get-type%2Fdownload%2Fjest-get-type-25.2.1.tgz#6c83de603c41b1627e6964da2f5454e6aa3c13a6", "jest-get-type@^26.0.0": "https://registry.npm.taobao.org/jest-get-type/download/jest-get-type-26.0.0.tgz#381e986a718998dbfafcd5ec05934be538db4039",
"jest-haste-map@^25.2.3": "https://registry.npm.taobao.org/jest-haste-map/download/jest-haste-map-25.2.3.tgz#2649392b5af191f0167a27bfb62e5d96d7eaaade", "jest-haste-map@^26.1.0": "https://registry.npm.taobao.org/jest-haste-map/download/jest-haste-map-26.1.0.tgz?cache=0&sync_timestamp=1592924070838&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-haste-map%2Fdownload%2Fjest-haste-map-26.1.0.tgz#ef31209be73f09b0d9445e7d213e1b53d0d1476a",
"jest-jasmine2@^25.2.4": "https://registry.npm.taobao.org/jest-jasmine2/download/jest-jasmine2-25.2.4.tgz#5f77de83e1027f0c7588137055a80da773872374", "jest-jasmine2@^26.1.0": "https://registry.npm.taobao.org/jest-jasmine2/download/jest-jasmine2-26.1.0.tgz#4dfe349b2b2d3c6b3a27c024fd4cb57ac0ed4b6f",
"jest-leak-detector@^25.2.3": "https://registry.npm.taobao.org/jest-leak-detector/download/jest-leak-detector-25.2.3.tgz?cache=0&sync_timestamp=1585255878917&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-leak-detector%2Fdownload%2Fjest-leak-detector-25.2.3.tgz#4cf39f137925e0061c04c24ca65cae36465f0238", "jest-leak-detector@^26.1.0": "https://registry.npm.taobao.org/jest-leak-detector/download/jest-leak-detector-26.1.0.tgz#039c3a07ebcd8adfa984b6ac015752c35792e0a6",
"jest-matcher-utils@^25.2.3": "https://registry.npm.taobao.org/jest-matcher-utils/download/jest-matcher-utils-25.2.3.tgz?cache=0&sync_timestamp=1585255876922&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-matcher-utils%2Fdownload%2Fjest-matcher-utils-25.2.3.tgz#59285bd6d6c810debc9caa585ed985e46a3f28fd", "jest-matcher-utils@^26.1.0": "https://registry.npm.taobao.org/jest-matcher-utils/download/jest-matcher-utils-26.1.0.tgz?cache=0&sync_timestamp=1592925841989&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-matcher-utils%2Fdownload%2Fjest-matcher-utils-26.1.0.tgz#cf75a41bd413dda784f022de5a65a2a5c73a5c92",
"jest-message-util@^25.2.4": "https://registry.npm.taobao.org/jest-message-util/download/jest-message-util-25.2.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-message-util%2Fdownload%2Fjest-message-util-25.2.4.tgz#b1441b9c82f5c11fc661303cbf200a2f136a7762", "jest-message-util@^26.1.0": "https://registry.npm.taobao.org/jest-message-util/download/jest-message-util-26.1.0.tgz?cache=0&sync_timestamp=1592925827966&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-message-util%2Fdownload%2Fjest-message-util-26.1.0.tgz#52573fbb8f5cea443c4d1747804d7a238a3e233c",
"jest-mock@^25.2.3": "https://registry.npm.taobao.org/jest-mock/download/jest-mock-25.2.3.tgz#b37a581f59d61bd91db27a99bf7eb8b3e5e993d5", "jest-mock@^26.1.0": "https://registry.npm.taobao.org/jest-mock/download/jest-mock-26.1.0.tgz#80d8286da1f05a345fbad1bfd6fa49a899465d3d",
"jest-pnp-resolver@^1.2.1": "https://registry.npm.taobao.org/jest-pnp-resolver/download/jest-pnp-resolver-1.2.1.tgz#ecdae604c077a7fbc70defb6d517c3c1c898923a", "jest-pnp-resolver@^1.2.1": "https://registry.npm.taobao.org/jest-pnp-resolver/download/jest-pnp-resolver-1.2.2.tgz?cache=0&sync_timestamp=1592991609279&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-pnp-resolver%2Fdownload%2Fjest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c",
"jest-regex-util@^25.2.1": "https://registry.npm.taobao.org/jest-regex-util/download/jest-regex-util-25.2.1.tgz?cache=0&sync_timestamp=1585215406327&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-regex-util%2Fdownload%2Fjest-regex-util-25.2.1.tgz#db64b0d15cd3642c93b7b9627801d7c518600584", "jest-regex-util@^26.0.0": "https://registry.npm.taobao.org/jest-regex-util/download/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28",
"jest-resolve-dependencies@^25.2.4": "https://registry.npm.taobao.org/jest-resolve-dependencies/download/jest-resolve-dependencies-25.2.4.tgz#2d904400387d74a366dff54badb40a2b3210e733", "jest-resolve-dependencies@^26.1.0": "https://registry.npm.taobao.org/jest-resolve-dependencies/download/jest-resolve-dependencies-26.1.0.tgz#1ce36472f864a5dadf7dc82fa158e1c77955691b",
"jest-resolve@^25.2.3": "https://registry.npm.taobao.org/jest-resolve/download/jest-resolve-25.2.3.tgz#ababeaf2bb948cb6d2dea8453759116da0fb7842", "jest-resolve@^26.1.0": "https://registry.npm.taobao.org/jest-resolve/download/jest-resolve-26.1.0.tgz?cache=0&sync_timestamp=1592925827408&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-resolve%2Fdownload%2Fjest-resolve-26.1.0.tgz#a530eaa302b1f6fa0479079d1561dd69abc00e68",
"jest-runner@^25.2.4": "https://registry.npm.taobao.org/jest-runner/download/jest-runner-25.2.4.tgz#d0daf7c56b4a83b6b675863d5cdcd502c960f9a1", "jest-runner@^26.1.0": "https://registry.npm.taobao.org/jest-runner/download/jest-runner-26.1.0.tgz#457f7fc522afe46ca6db1dccf19f87f500b3288d",
"jest-runtime@^25.2.4": "https://registry.npm.taobao.org/jest-runtime/download/jest-runtime-25.2.4.tgz#c66a421e115944426b377a7fd331f6c0902cfa56", "jest-runtime@^26.1.0": "https://registry.npm.taobao.org/jest-runtime/download/jest-runtime-26.1.0.tgz#45a37af42115f123ed5c51f126c05502da2469cb",
"jest-serializer@^25.2.1": "https://registry.npm.taobao.org/jest-serializer/download/jest-serializer-25.2.1.tgz?cache=0&sync_timestamp=1585215407092&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-serializer%2Fdownload%2Fjest-serializer-25.2.1.tgz#51727a5fc04256f461abe0fa024a022ba165877a", "jest-serializer@^26.1.0": "https://registry.npm.taobao.org/jest-serializer/download/jest-serializer-26.1.0.tgz?cache=0&sync_timestamp=1592924069336&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-serializer%2Fdownload%2Fjest-serializer-26.1.0.tgz#72a394531fc9b08e173dc7d297440ac610d95022",
"jest-snapshot@^25.2.4": "https://registry.npm.taobao.org/jest-snapshot/download/jest-snapshot-25.2.4.tgz#08d4517579c864df4280bcc948ceea34327a4ded", "jest-snapshot@^26.1.0": "https://registry.npm.taobao.org/jest-snapshot/download/jest-snapshot-26.1.0.tgz?cache=0&sync_timestamp=1592924084940&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-snapshot%2Fdownload%2Fjest-snapshot-26.1.0.tgz#c36ed1e0334bd7bd2fe5ad07e93a364ead7e1349",
"jest-util@^25.2.3": "https://registry.npm.taobao.org/jest-util/download/jest-util-25.2.3.tgz#0abf95a1d6b96f2de5a3ecd61b36c40a182dc256", "jest-util@26.x": "https://registry.npm.taobao.org/jest-util/download/jest-util-26.1.0.tgz#80e85d4ba820decacf41a691c2042d5276e5d8d8",
"jest-validate@^25.2.3": "https://registry.npm.taobao.org/jest-validate/download/jest-validate-25.2.3.tgz#ecb0f093cf8ae71d15075fb48439b6f78f1fcb5a", "jest-util@^26.1.0": "https://registry.npm.taobao.org/jest-util/download/jest-util-26.1.0.tgz#80e85d4ba820decacf41a691c2042d5276e5d8d8",
"jest-watcher@^25.2.4": "https://registry.npm.taobao.org/jest-watcher/download/jest-watcher-25.2.4.tgz?cache=0&sync_timestamp=1585510737791&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-watcher%2Fdownload%2Fjest-watcher-25.2.4.tgz#dda85b914d470fa4145164a8f70bda4f208bafb6", "jest-validate@^26.1.0": "https://registry.npm.taobao.org/jest-validate/download/jest-validate-26.1.0.tgz#942c85ad3d60f78250c488a7f85d8f11a29788e7",
"jest-worker@^25.2.1": "https://registry.npm.taobao.org/jest-worker/download/jest-worker-25.2.1.tgz?cache=0&sync_timestamp=1585215414576&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-worker%2Fdownload%2Fjest-worker-25.2.1.tgz#209617015c768652646aa33a7828cc2ab472a18a", "jest-watcher@^26.1.0": "https://registry.npm.taobao.org/jest-watcher/download/jest-watcher-26.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-watcher%2Fdownload%2Fjest-watcher-26.1.0.tgz#99812a0cd931f0cb3d153180426135ab83e4d8f2",
"jest@^25.2.4": "https://registry.npm.taobao.org/jest/download/jest-25.2.4.tgz#d10941948a2b57eb7accc2e7ae78af4a0e11b40a", "jest-worker@^26.1.0": "https://registry.npm.taobao.org/jest-worker/download/jest-worker-26.1.0.tgz#65d5641af74e08ccd561c240e7db61284f82f33d",
"jest@^26.1.0": "https://registry.npm.taobao.org/jest/download/jest-26.1.0.tgz#2f3aa7bcffb9bfd025473f83bbbf46a3af026263",
"js-tokens@^4.0.0": "https://registry.npm.taobao.org/js-tokens/download/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499", "js-tokens@^4.0.0": "https://registry.npm.taobao.org/js-tokens/download/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499",
"js-yaml@^3.13.1": "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847", "js-yaml@^3.13.1": "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.14.0.tgz?cache=0&sync_timestamp=1590172122543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-yaml%2Fdownload%2Fjs-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482",
"jsbn@~0.1.0": "https://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513", "jsbn@~0.1.0": "https://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513",
"jsdom@^15.2.1": "https://registry.npm.taobao.org/jsdom/download/jsdom-15.2.1.tgz?cache=0&sync_timestamp=1585531922622&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsdom%2Fdownload%2Fjsdom-15.2.1.tgz#d2feb1aef7183f86be521b8c6833ff5296d07ec5", "jsdom@^16.2.2": "https://registry.npm.taobao.org/jsdom/download/jsdom-16.2.2.tgz#76f2f7541646beb46a938f5dc476b88705bedf2b",
"jsesc@^2.5.1": "https://registry.npm.taobao.org/jsesc/download/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4", "jsesc@^2.5.1": "https://registry.npm.taobao.org/jsesc/download/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4",
"json-parse-better-errors@^1.0.1": "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": "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660", "json-schema-traverse@^0.4.1": "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660",
"json-schema@0.2.3": "https://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13", "json-schema@0.2.3": "https://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13",
"json-stable-stringify-without-jsonify@^1.0.1": "https://registry.npm.taobao.org/json-stable-stringify-without-jsonify/download/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651", "json-stable-stringify-without-jsonify@^1.0.1": "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": "https://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb", "json-stringify-safe@~5.0.1": "https://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb",
"json5@2.x": "https://registry.npm.taobao.org/json5/download/json5-2.1.2.tgz?cache=0&sync_timestamp=1584388298930&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson5%2Fdownload%2Fjson5-2.1.2.tgz#43ef1f0af9835dd624751a6b7fa48874fb2d608e", "json5@2.x": "https://registry.npm.taobao.org/json5/download/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43",
"json5@^2.1.0": "https://registry.npm.taobao.org/json5/download/json5-2.1.2.tgz?cache=0&sync_timestamp=1584388298930&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson5%2Fdownload%2Fjson5-2.1.2.tgz#43ef1f0af9835dd624751a6b7fa48874fb2d608e", "json5@^2.1.2": "https://registry.npm.taobao.org/json5/download/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43",
"jsprim@^1.2.2": "https://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2", "jsprim@^1.2.2": "https://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2",
"kind-of@^3.0.2": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64", "kind-of@^3.0.2": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64",
"kind-of@^3.0.3": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64", "kind-of@^3.0.3": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64",
@@ -401,49 +430,49 @@
"kind-of@^5.0.0": "https://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d", "kind-of@^5.0.0": "https://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d",
"kind-of@^6.0.0": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd", "kind-of@^6.0.0": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd",
"kind-of@^6.0.2": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd", "kind-of@^6.0.2": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd",
"kleur@^3.0.3": "https://registry.npm.taobao.org/kleur/download/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e", "kleur@^3.0.3": "https://registry.npm.taobao.org/kleur/download/kleur-3.0.3.tgz?cache=0&sync_timestamp=1593039771511&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fkleur%2Fdownload%2Fkleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e",
"leven@^3.1.0": "https://registry.npm.taobao.org/leven/download/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2", "leven@^3.1.0": "https://registry.npm.taobao.org/leven/download/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2",
"levn@^0.3.0": "https://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee", "levn@^0.4.1": "https://registry.npm.taobao.org/levn/download/levn-0.4.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flevn%2Fdownload%2Flevn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade",
"levn@~0.3.0": "https://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee", "levn@~0.3.0": "https://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flevn%2Fdownload%2Flevn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee",
"lines-and-columns@^1.1.6": "https://registry.npm.taobao.org/lines-and-columns/download/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00",
"locate-path@^5.0.0": "https://registry.npm.taobao.org/locate-path/download/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0", "locate-path@^5.0.0": "https://registry.npm.taobao.org/locate-path/download/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0",
"lodash.memoize@4.x": "https://registry.npm.taobao.org/lodash.memoize/download/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe", "lodash.memoize@4.x": "https://registry.npm.taobao.org/lodash.memoize/download/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe",
"lodash.sortby@^4.7.0": "https://registry.npm.taobao.org/lodash.sortby/download/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438", "lodash.sortby@^4.7.0": "https://registry.npm.taobao.org/lodash.sortby/download/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438",
"lodash@^4.17.13": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.15.tgz?cache=0&sync_timestamp=1580303049395&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548", "lodash@^4.17.13": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548",
"lodash@^4.17.14": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.15.tgz?cache=0&sync_timestamp=1580303049395&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548", "lodash@^4.17.14": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548",
"lodash@^4.17.15": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.15.tgz?cache=0&sync_timestamp=1580303049395&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548", "lodash@^4.17.15": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548",
"lolex@^5.0.0": "https://registry.npm.taobao.org/lolex/download/lolex-5.1.2.tgz?cache=0&sync_timestamp=1580817350752&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flolex%2Fdownload%2Flolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367", "make-dir@^3.0.0": "https://registry.npm.taobao.org/make-dir/download/make-dir-3.1.0.tgz?cache=0&sync_timestamp=1587567693680&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmake-dir%2Fdownload%2Fmake-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f",
"make-dir@^3.0.0": "https://registry.npm.taobao.org/make-dir/download/make-dir-3.0.2.tgz#04a1acbf22221e1d6ef43559f43e05a90dbb4392",
"make-error@1.x": "https://registry.npm.taobao.org/make-error/download/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2", "make-error@1.x": "https://registry.npm.taobao.org/make-error/download/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2",
"makeerror@1.0.x": "https://registry.npm.taobao.org/makeerror/download/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c", "makeerror@1.0.x": "https://registry.npm.taobao.org/makeerror/download/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c",
"map-cache@^0.2.2": "https://registry.npm.taobao.org/map-cache/download/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf", "map-cache@^0.2.2": "https://registry.npm.taobao.org/map-cache/download/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf",
"map-visit@^1.0.0": "https://registry.npm.taobao.org/map-visit/download/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f", "map-visit@^1.0.0": "https://registry.npm.taobao.org/map-visit/download/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f",
"merge-stream@^2.0.0": "https://registry.npm.taobao.org/merge-stream/download/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60", "merge-stream@^2.0.0": "https://registry.npm.taobao.org/merge-stream/download/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60",
"micromatch@^3.1.4": "https://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz?cache=0&sync_timestamp=1580303044337&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23", "micromatch@^3.1.4": "https://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23",
"micromatch@^4.0.2": "https://registry.npm.taobao.org/micromatch/download/micromatch-4.0.2.tgz?cache=0&sync_timestamp=1580303044337&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259", "micromatch@^4.0.2": "https://registry.npm.taobao.org/micromatch/download/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259",
"mime-db@1.43.0": "https://registry.npm.taobao.org/mime-db/download/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58", "mime-db@1.44.0": "https://registry.npm.taobao.org/mime-db/download/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92",
"mime-types@^2.1.12": "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06", "mime-types@^2.1.12": "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.27.tgz?cache=0&sync_timestamp=1587700357245&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-types%2Fdownload%2Fmime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f",
"mime-types@~2.1.19": "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06", "mime-types@~2.1.19": "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.27.tgz?cache=0&sync_timestamp=1587700357245&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-types%2Fdownload%2Fmime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f",
"mimic-fn@^2.1.0": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b", "mimic-fn@^2.1.0": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b",
"minimatch@^3.0.4": "https://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083", "minimatch@^3.0.4": "https://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083",
"minimist@^1.1.1": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602", "minimist@^1.1.1": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602",
"minimist@^1.2.0": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602", "minimist@^1.2.0": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602",
"minimist@^1.2.5": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602", "minimist@^1.2.5": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602",
"mixin-deep@^1.2.0": "https://registry.npm.taobao.org/mixin-deep/download/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566", "mixin-deep@^1.2.0": "https://registry.npm.taobao.org/mixin-deep/download/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566",
"mkdirp@1.x": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-1.0.3.tgz?cache=0&sync_timestamp=1584986213750&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-1.0.3.tgz#4cf2e30ad45959dddea53ad97d518b6c8205e1ea", "mkdirp@1.x": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-1.0.4.tgz?cache=0&sync_timestamp=1587535418745&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e",
"mkdirp@^0.5.1": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.3.tgz?cache=0&sync_timestamp=1584667994851&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.3.tgz#5a514b7179259287952881e94410ec5465659f8c", "mkdirp@^0.5.1": "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",
"ms@2.0.0": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8", "ms@2.0.0": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8",
"ms@^2.1.1": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009", "ms@^2.1.1": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009",
"mute-stream@0.0.8": "https://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d",
"nanomatch@^1.2.9": "https://registry.npm.taobao.org/nanomatch/download/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119", "nanomatch@^1.2.9": "https://registry.npm.taobao.org/nanomatch/download/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119",
"natural-compare@^1.4.0": "https://registry.npm.taobao.org/natural-compare/download/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7", "natural-compare@^1.4.0": "https://registry.npm.taobao.org/natural-compare/download/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7",
"nice-try@^1.0.4": "https://registry.npm.taobao.org/nice-try/download/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366", "nice-try@^1.0.4": "https://registry.npm.taobao.org/nice-try/download/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366",
"node-int64@^0.4.0": "https://registry.npm.taobao.org/node-int64/download/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b", "node-int64@^0.4.0": "https://registry.npm.taobao.org/node-int64/download/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b",
"node-modules-regexp@^1.0.0": "https://registry.npm.taobao.org/node-modules-regexp/download/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40", "node-modules-regexp@^1.0.0": "https://registry.npm.taobao.org/node-modules-regexp/download/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40",
"node-notifier@^6.0.0": "https://registry.npm.taobao.org/node-notifier/download/node-notifier-6.0.0.tgz#cea319e06baa16deec8ce5cd7f133c4a46b68e12", "node-notifier@^7.0.0": "https://registry.npm.taobao.org/node-notifier/download/node-notifier-7.0.1.tgz#a355e33e6bebacef9bf8562689aed0f4230ca6f9",
"normalize-package-data@^2.5.0": "https://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8",
"normalize-path@^2.1.1": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9", "normalize-path@^2.1.1": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9",
"normalize-path@^3.0.0": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65", "normalize-path@^3.0.0": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65",
"npm-run-path@^2.0.0": "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f", "npm-run-path@^2.0.0": "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz?cache=0&sync_timestamp=1577053378987&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-run-path%2Fdownload%2Fnpm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f",
"npm-run-path@^4.0.0": "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea", "npm-run-path@^4.0.0": "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-4.0.1.tgz?cache=0&sync_timestamp=1577053378987&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-run-path%2Fdownload%2Fnpm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea",
"nwsapi@^2.2.0": "https://registry.npm.taobao.org/nwsapi/download/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7", "nwsapi@^2.2.0": "https://registry.npm.taobao.org/nwsapi/download/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7",
"oauth-sign@~0.9.0": "https://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455", "oauth-sign@~0.9.0": "https://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455",
"object-copy@^0.1.0": "https://registry.npm.taobao.org/object-copy/download/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c", "object-copy@^0.1.0": "https://registry.npm.taobao.org/object-copy/download/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c",
@@ -453,76 +482,74 @@
"once@^1.3.1": "https://registry.npm.taobao.org/once/download/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1", "once@^1.3.1": "https://registry.npm.taobao.org/once/download/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1",
"once@^1.4.0": "https://registry.npm.taobao.org/once/download/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1", "once@^1.4.0": "https://registry.npm.taobao.org/once/download/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1",
"onetime@^5.1.0": "https://registry.npm.taobao.org/onetime/download/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5", "onetime@^5.1.0": "https://registry.npm.taobao.org/onetime/download/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5",
"optionator@^0.8.1": "https://registry.npm.taobao.org/optionator/download/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495", "optionator@^0.8.1": "https://registry.npm.taobao.org/optionator/download/optionator-0.8.3.tgz?cache=0&sync_timestamp=1585966141328&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Foptionator%2Fdownload%2Foptionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495",
"optionator@^0.8.3": "https://registry.npm.taobao.org/optionator/download/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495", "optionator@^0.9.1": "https://registry.npm.taobao.org/optionator/download/optionator-0.9.1.tgz?cache=0&sync_timestamp=1585966141328&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Foptionator%2Fdownload%2Foptionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499",
"os-tmpdir@~1.0.2": "https://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274",
"p-each-series@^2.1.0": "https://registry.npm.taobao.org/p-each-series/download/p-each-series-2.1.0.tgz#961c8dd3f195ea96c747e636b262b800a6b1af48", "p-each-series@^2.1.0": "https://registry.npm.taobao.org/p-each-series/download/p-each-series-2.1.0.tgz#961c8dd3f195ea96c747e636b262b800a6b1af48",
"p-finally@^1.0.0": "https://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae", "p-finally@^1.0.0": "https://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae",
"p-finally@^2.0.0": "https://registry.npm.taobao.org/p-finally/download/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561", "p-limit@^2.2.0": "https://registry.npm.taobao.org/p-limit/download/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1",
"p-limit@^2.2.0": "https://registry.npm.taobao.org/p-limit/download/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e",
"p-locate@^4.1.0": "https://registry.npm.taobao.org/p-locate/download/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07", "p-locate@^4.1.0": "https://registry.npm.taobao.org/p-locate/download/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07",
"p-try@^2.0.0": "https://registry.npm.taobao.org/p-try/download/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6", "p-try@^2.0.0": "https://registry.npm.taobao.org/p-try/download/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6",
"parent-module@^1.0.0": "https://registry.npm.taobao.org/parent-module/download/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2", "parent-module@^1.0.0": "https://registry.npm.taobao.org/parent-module/download/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2",
"parse5@5.1.0": "https://registry.npm.taobao.org/parse5/download/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2", "parse-json@^5.0.0": "https://registry.npm.taobao.org/parse-json/download/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f",
"parse5@5.1.1": "https://registry.npm.taobao.org/parse5/download/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178",
"pascalcase@^0.1.1": "https://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14", "pascalcase@^0.1.1": "https://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14",
"path-exists@^4.0.0": "https://registry.npm.taobao.org/path-exists/download/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3", "path-exists@^4.0.0": "https://registry.npm.taobao.org/path-exists/download/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3",
"path-is-absolute@^1.0.0": "https://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f", "path-is-absolute@^1.0.0": "https://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f",
"path-key@^2.0.0": "https://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40", "path-key@^2.0.0": "https://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz?cache=0&sync_timestamp=1574445307008&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40",
"path-key@^2.0.1": "https://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40", "path-key@^2.0.1": "https://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz?cache=0&sync_timestamp=1574445307008&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40",
"path-key@^3.0.0": "https://registry.npm.taobao.org/path-key/download/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375", "path-key@^3.0.0": "https://registry.npm.taobao.org/path-key/download/path-key-3.1.1.tgz?cache=0&sync_timestamp=1574445307008&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375",
"path-key@^3.1.0": "https://registry.npm.taobao.org/path-key/download/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375", "path-key@^3.1.0": "https://registry.npm.taobao.org/path-key/download/path-key-3.1.1.tgz?cache=0&sync_timestamp=1574445307008&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375",
"path-parse@^1.0.6": "https://registry.npm.taobao.org/path-parse/download/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c", "path-parse@^1.0.6": "https://registry.npm.taobao.org/path-parse/download/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c",
"performance-now@^2.1.0": "https://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b", "performance-now@^2.1.0": "https://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b",
"picomatch@^2.0.4": "https://registry.npm.taobao.org/picomatch/download/picomatch-2.2.1.tgz#21bac888b6ed8601f831ce7816e335bc779f0a4a", "picomatch@^2.0.4": "https://registry.npm.taobao.org/picomatch/download/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad",
"picomatch@^2.0.5": "https://registry.npm.taobao.org/picomatch/download/picomatch-2.2.1.tgz#21bac888b6ed8601f831ce7816e335bc779f0a4a", "picomatch@^2.0.5": "https://registry.npm.taobao.org/picomatch/download/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad",
"pirates@^4.0.1": "https://registry.npm.taobao.org/pirates/download/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87", "pirates@^4.0.1": "https://registry.npm.taobao.org/pirates/download/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87",
"pkg-dir@^4.2.0": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3", "pkg-dir@^4.2.0": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3",
"pn@^1.1.0": "https://registry.npm.taobao.org/pn/download/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb",
"posix-character-classes@^0.1.0": "https://registry.npm.taobao.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab", "posix-character-classes@^0.1.0": "https://registry.npm.taobao.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab",
"prelude-ls@^1.2.1": "https://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396",
"prelude-ls@~1.1.2": "https://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54", "prelude-ls@~1.1.2": "https://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54",
"prettier-linter-helpers@^1.0.0": "https://registry.npm.taobao.org/prettier-linter-helpers/download/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b", "prettier-linter-helpers@^1.0.0": "https://registry.npm.taobao.org/prettier-linter-helpers/download/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b",
"prettier@^2.0.2": "https://registry.npm.taobao.org/prettier/download/prettier-2.0.2.tgz#1ba8f3eb92231e769b7fcd7cb73ae1b6b74ade08", "prettier@^2.0.5": "https://registry.npm.taobao.org/prettier/download/prettier-2.0.5.tgz#d6d56282455243f2f92cc1716692c08aa31522d4",
"pretty-format@^25.1.0": "https://registry.npm.taobao.org/pretty-format/download/pretty-format-25.1.0.tgz#ed869bdaec1356fc5ae45de045e2c8ec7b07b0c8", "pretty-format@^25.2.1": "https://registry.npm.taobao.org/pretty-format/download/pretty-format-25.5.0.tgz?cache=0&sync_timestamp=1592925428595&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpretty-format%2Fdownload%2Fpretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a",
"pretty-format@^25.2.3": "https://registry.npm.taobao.org/pretty-format/download/pretty-format-25.2.3.tgz?cache=0&sync_timestamp=1585255872781&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpretty-format%2Fdownload%2Fpretty-format-25.2.3.tgz#ba6e9603a0d80fa2e470b1fed55de1f9bfd81421", "pretty-format@^25.5.0": "https://registry.npm.taobao.org/pretty-format/download/pretty-format-25.5.0.tgz?cache=0&sync_timestamp=1592925428595&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpretty-format%2Fdownload%2Fpretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a",
"pretty-format@^26.1.0": "https://registry.npm.taobao.org/pretty-format/download/pretty-format-26.1.0.tgz?cache=0&sync_timestamp=1592925428595&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpretty-format%2Fdownload%2Fpretty-format-26.1.0.tgz#272b9cd1f1a924ab5d443dc224899d7a65cb96ec",
"progress@^2.0.0": "https://registry.npm.taobao.org/progress/download/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8", "progress@^2.0.0": "https://registry.npm.taobao.org/progress/download/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8",
"prompts@^2.0.1": "https://registry.npm.taobao.org/prompts/download/prompts-2.3.2.tgz?cache=0&sync_timestamp=1584535708984&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fprompts%2Fdownload%2Fprompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068", "prompts@^2.0.1": "https://registry.npm.taobao.org/prompts/download/prompts-2.3.2.tgz?cache=0&sync_timestamp=1584535708984&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fprompts%2Fdownload%2Fprompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068",
"psl@^1.1.28": "https://registry.npm.taobao.org/psl/download/psl-1.7.0.tgz#f1c4c47a8ef97167dea5d6bbf4816d736e884a3c", "psl@^1.1.28": "https://registry.npm.taobao.org/psl/download/psl-1.8.0.tgz?cache=0&sync_timestamp=1585170332277&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpsl%2Fdownload%2Fpsl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24",
"pump@^3.0.0": "https://registry.npm.taobao.org/pump/download/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64", "pump@^3.0.0": "https://registry.npm.taobao.org/pump/download/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64",
"punycode@^2.1.0": "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec", "punycode@^2.1.0": "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec",
"punycode@^2.1.1": "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec", "punycode@^2.1.1": "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec",
"qs@~6.5.2": "https://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36", "qs@~6.5.2": "https://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36",
"react-is@^16.12.0": "https://registry.npm.taobao.org/react-is/download/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4", "react-is@^16.12.0": "https://registry.npm.taobao.org/react-is/download/react-is-16.13.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-is%2Fdownload%2Freact-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4",
"realpath-native@^2.0.0": "https://registry.npm.taobao.org/realpath-native/download/realpath-native-2.0.0.tgz#7377ac429b6e1fd599dc38d08ed942d0d7beb866", "read-pkg-up@^7.0.1": "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-7.0.1.tgz?cache=0&sync_timestamp=1575647702557&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-pkg-up%2Fdownload%2Fread-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507",
"read-pkg@^5.2.0": "https://registry.npm.taobao.org/read-pkg/download/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc",
"regenerator-runtime@^0.13.4": "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.13.5.tgz?cache=0&sync_timestamp=1584052597708&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697",
"regex-not@^1.0.0": "https://registry.npm.taobao.org/regex-not/download/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c", "regex-not@^1.0.0": "https://registry.npm.taobao.org/regex-not/download/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c",
"regex-not@^1.0.2": "https://registry.npm.taobao.org/regex-not/download/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c", "regex-not@^1.0.2": "https://registry.npm.taobao.org/regex-not/download/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c",
"regexpp@^2.0.1": "https://registry.npm.taobao.org/regexpp/download/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f", "regexpp@^3.0.0": "https://registry.npm.taobao.org/regexpp/download/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2",
"regexpp@^3.0.0": "https://registry.npm.taobao.org/regexpp/download/regexpp-3.0.0.tgz#dd63982ee3300e67b41c1956f850aa680d9d330e", "regexpp@^3.1.0": "https://registry.npm.taobao.org/regexpp/download/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2",
"remove-trailing-separator@^1.0.1": "https://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef", "remove-trailing-separator@^1.0.1": "https://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef",
"repeat-element@^1.1.2": "https://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce", "repeat-element@^1.1.2": "https://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce",
"repeat-string@^1.6.1": "https://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637", "repeat-string@^1.6.1": "https://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637",
"request-promise-core@1.1.3": "https://registry.npm.taobao.org/request-promise-core/download/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9", "request-promise-core@1.1.3": "https://registry.npm.taobao.org/request-promise-core/download/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9",
"request-promise-native@^1.0.7": "https://registry.npm.taobao.org/request-promise-native/download/request-promise-native-1.0.8.tgz#a455b960b826e44e2bf8999af64dff2bfe58cb36", "request-promise-native@^1.0.8": "https://registry.npm.taobao.org/request-promise-native/download/request-promise-native-1.0.8.tgz?cache=0&sync_timestamp=1572829735085&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frequest-promise-native%2Fdownload%2Frequest-promise-native-1.0.8.tgz#a455b960b826e44e2bf8999af64dff2bfe58cb36",
"request@^2.88.0": "https://registry.npm.taobao.org/request/download/request-2.88.2.tgz?cache=0&sync_timestamp=1581439006948&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frequest%2Fdownload%2Frequest-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3", "request@^2.88.2": "https://registry.npm.taobao.org/request/download/request-2.88.2.tgz?cache=0&sync_timestamp=1581439006948&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frequest%2Fdownload%2Frequest-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3",
"require-directory@^2.1.1": "https://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42", "require-directory@^2.1.1": "https://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42",
"require-main-filename@^2.0.0": "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b", "require-main-filename@^2.0.0": "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b",
"resolve-cwd@^3.0.0": "https://registry.npm.taobao.org/resolve-cwd/download/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d", "resolve-cwd@^3.0.0": "https://registry.npm.taobao.org/resolve-cwd/download/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d",
"resolve-from@^4.0.0": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6", "resolve-from@^4.0.0": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6",
"resolve-from@^5.0.0": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69", "resolve-from@^5.0.0": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69",
"resolve-url@^0.2.1": "https://registry.npm.taobao.org/resolve-url/download/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a", "resolve-url@^0.2.1": "https://registry.npm.taobao.org/resolve-url/download/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a",
"resolve@1.1.7": "https://registry.npm.taobao.org/resolve/download/resolve-1.1.7.tgz?cache=0&sync_timestamp=1580944242910&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve%2Fdownload%2Fresolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b", "resolve@^1.10.0": "https://registry.npm.taobao.org/resolve/download/resolve-1.17.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve%2Fdownload%2Fresolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444",
"resolve@1.x": "https://registry.npm.taobao.org/resolve/download/resolve-1.15.1.tgz?cache=0&sync_timestamp=1580944242910&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve%2Fdownload%2Fresolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8", "resolve@^1.17.0": "https://registry.npm.taobao.org/resolve/download/resolve-1.17.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve%2Fdownload%2Fresolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444",
"resolve@^1.15.1": "https://registry.npm.taobao.org/resolve/download/resolve-1.15.1.tgz?cache=0&sync_timestamp=1580944242910&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve%2Fdownload%2Fresolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8", "resolve@^1.3.2": "https://registry.npm.taobao.org/resolve/download/resolve-1.17.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve%2Fdownload%2Fresolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444",
"resolve@^1.3.2": "https://registry.npm.taobao.org/resolve/download/resolve-1.15.1.tgz?cache=0&sync_timestamp=1580944242910&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve%2Fdownload%2Fresolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8",
"restore-cursor@^3.1.0": "https://registry.npm.taobao.org/restore-cursor/download/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e",
"ret@~0.1.10": "https://registry.npm.taobao.org/ret/download/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc", "ret@~0.1.10": "https://registry.npm.taobao.org/ret/download/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc",
"rimraf@2.6.3": "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", "rimraf@2.6.3": "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",
"rimraf@^3.0.0": "https://registry.npm.taobao.org/rimraf/download/rimraf-3.0.2.tgz?cache=0&sync_timestamp=1581229865753&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frimraf%2Fdownload%2Frimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a", "rimraf@^3.0.0": "https://registry.npm.taobao.org/rimraf/download/rimraf-3.0.2.tgz?cache=0&sync_timestamp=1581229865753&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frimraf%2Fdownload%2Frimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a",
"rimraf@^3.0.2": "https://registry.npm.taobao.org/rimraf/download/rimraf-3.0.2.tgz?cache=0&sync_timestamp=1581229865753&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frimraf%2Fdownload%2Frimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a", "rimraf@^3.0.2": "https://registry.npm.taobao.org/rimraf/download/rimraf-3.0.2.tgz?cache=0&sync_timestamp=1581229865753&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frimraf%2Fdownload%2Frimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a",
"rsvp@^4.8.4": "https://registry.npm.taobao.org/rsvp/download/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734", "rsvp@^4.8.4": "https://registry.npm.taobao.org/rsvp/download/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734",
"run-async@^2.4.0": "https://registry.npm.taobao.org/run-async/download/run-async-2.4.0.tgz#e59054a5b86876cfae07f431d18cbaddc594f1e8", "safe-buffer@^5.0.1": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6",
"rxjs@^6.5.3": "https://registry.npm.taobao.org/rxjs/download/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c", "safe-buffer@^5.1.2": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6",
"safe-buffer@^5.0.1": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519",
"safe-buffer@^5.1.2": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519",
"safe-buffer@~5.1.1": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d", "safe-buffer@~5.1.1": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d",
"safe-regex@^1.1.0": "https://registry.npm.taobao.org/safe-regex/download/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e", "safe-regex@^1.1.0": "https://registry.npm.taobao.org/safe-regex/download/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e",
"safer-buffer@>= 2.1.2 < 3": "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a", "safer-buffer@>= 2.1.2 < 3": "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a",
@@ -530,33 +557,34 @@
"safer-buffer@^2.1.0": "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a", "safer-buffer@^2.1.0": "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a",
"safer-buffer@~2.1.0": "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a", "safer-buffer@~2.1.0": "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a",
"sane@^4.0.3": "https://registry.npm.taobao.org/sane/download/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded", "sane@^4.0.3": "https://registry.npm.taobao.org/sane/download/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded",
"saxes@^3.1.9": "https://registry.npm.taobao.org/saxes/download/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b", "saxes@^5.0.0": "https://registry.npm.taobao.org/saxes/download/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d",
"semver@6.x": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d", "semver@2 || 3 || 4 || 5": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7",
"semver@^5.4.1": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7", "semver@7.x": "https://registry.npm.taobao.org/semver/download/semver-7.3.2.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938",
"semver@^5.5.0": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7", "semver@^5.4.1": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7",
"semver@^6.0.0": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d", "semver@^5.5.0": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7",
"semver@^6.1.0": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d", "semver@^6.0.0": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d",
"semver@^6.1.2": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d", "semver@^6.1.0": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d",
"semver@^6.3.0": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d", "semver@^6.3.0": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d",
"semver@^7.1.3": "https://registry.npm.taobao.org/semver/download/semver-7.1.3.tgz#e4345ce73071c53f336445cfc19efb1c311df2a6", "semver@^7.2.1": "https://registry.npm.taobao.org/semver/download/semver-7.3.2.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938",
"semver@^7.3.2": "https://registry.npm.taobao.org/semver/download/semver-7.3.2.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938",
"set-blocking@^2.0.0": "https://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7", "set-blocking@^2.0.0": "https://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7",
"set-value@^2.0.0": "https://registry.npm.taobao.org/set-value/download/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b", "set-value@^2.0.0": "https://registry.npm.taobao.org/set-value/download/set-value-2.0.1.tgz?cache=0&sync_timestamp=1585774774019&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fset-value%2Fdownload%2Fset-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b",
"set-value@^2.0.1": "https://registry.npm.taobao.org/set-value/download/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b", "set-value@^2.0.1": "https://registry.npm.taobao.org/set-value/download/set-value-2.0.1.tgz?cache=0&sync_timestamp=1585774774019&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fset-value%2Fdownload%2Fset-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b",
"shebang-command@^1.2.0": "https://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea", "shebang-command@^1.2.0": "https://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea",
"shebang-command@^2.0.0": "https://registry.npm.taobao.org/shebang-command/download/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea", "shebang-command@^2.0.0": "https://registry.npm.taobao.org/shebang-command/download/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea",
"shebang-regex@^1.0.0": "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3", "shebang-regex@^1.0.0": "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3",
"shebang-regex@^3.0.0": "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172", "shebang-regex@^3.0.0": "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172",
"shellwords@^0.1.1": "https://registry.npm.taobao.org/shellwords/download/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b", "shellwords@^0.1.1": "https://registry.npm.taobao.org/shellwords/download/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b",
"signal-exit@^3.0.0": "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d", "signal-exit@^3.0.0": "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.3.tgz?cache=0&sync_timestamp=1585253750175&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsignal-exit%2Fdownload%2Fsignal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c",
"signal-exit@^3.0.2": "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d", "signal-exit@^3.0.2": "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.3.tgz?cache=0&sync_timestamp=1585253750175&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsignal-exit%2Fdownload%2Fsignal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c",
"sisteransi@^1.0.4": "https://registry.npm.taobao.org/sisteransi/download/sisteransi-1.0.5.tgz?cache=0&sync_timestamp=1584536263469&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsisteransi%2Fdownload%2Fsisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed", "sisteransi@^1.0.4": "https://registry.npm.taobao.org/sisteransi/download/sisteransi-1.0.5.tgz?cache=0&sync_timestamp=1584536263469&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsisteransi%2Fdownload%2Fsisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed",
"slash@^3.0.0": "https://registry.npm.taobao.org/slash/download/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634", "slash@^3.0.0": "https://registry.npm.taobao.org/slash/download/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634",
"slice-ansi@^2.1.0": "https://registry.npm.taobao.org/slice-ansi/download/slice-ansi-2.1.0.tgz?cache=0&sync_timestamp=1581873067338&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fslice-ansi%2Fdownload%2Fslice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636", "slice-ansi@^2.1.0": "https://registry.npm.taobao.org/slice-ansi/download/slice-ansi-2.1.0.tgz?cache=0&sync_timestamp=1581873067338&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fslice-ansi%2Fdownload%2Fslice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636",
"snapdragon-node@^2.0.1": "https://registry.npm.taobao.org/snapdragon-node/download/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b", "snapdragon-node@^2.0.1": "https://registry.npm.taobao.org/snapdragon-node/download/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b",
"snapdragon-util@^3.0.1": "https://registry.npm.taobao.org/snapdragon-util/download/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2", "snapdragon-util@^3.0.1": "https://registry.npm.taobao.org/snapdragon-util/download/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2",
"snapdragon@^0.8.1": "https://registry.npm.taobao.org/snapdragon/download/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d", "snapdragon@^0.8.1": "https://registry.npm.taobao.org/snapdragon/download/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d",
"source-map-resolve@^0.5.0": "https://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a", "source-map-resolve@^0.5.0": "https://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.3.tgz?cache=0&sync_timestamp=1584829593933&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-resolve%2Fdownload%2Fsource-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a",
"source-map-support@^0.5.6": "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042", "source-map-support@^0.5.6": "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",
"source-map-url@^0.4.0": "https://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3", "source-map-url@^0.4.0": "https://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3",
"source-map@^0.5.0": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc", "source-map@^0.5.0": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc",
"source-map@^0.5.6": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc", "source-map@^0.5.6": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc",
@@ -564,38 +592,39 @@
"source-map@^0.6.1": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263", "source-map@^0.6.1": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263",
"source-map@^0.7.3": "https://registry.npm.taobao.org/source-map/download/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383", "source-map@^0.7.3": "https://registry.npm.taobao.org/source-map/download/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383",
"source-map@~0.6.1": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263", "source-map@~0.6.1": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263",
"spdx-correct@^3.0.0": "https://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9",
"spdx-exceptions@^2.1.0": "https://registry.npm.taobao.org/spdx-exceptions/download/spdx-exceptions-2.3.0.tgz?cache=0&sync_timestamp=1587450317950&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdx-exceptions%2Fdownload%2Fspdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d",
"spdx-expression-parse@^3.0.0": "https://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679",
"spdx-license-ids@^3.0.0": "https://registry.npm.taobao.org/spdx-license-ids/download/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654",
"split-string@^3.0.1": "https://registry.npm.taobao.org/split-string/download/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2", "split-string@^3.0.1": "https://registry.npm.taobao.org/split-string/download/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2",
"split-string@^3.0.2": "https://registry.npm.taobao.org/split-string/download/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2", "split-string@^3.0.2": "https://registry.npm.taobao.org/split-string/download/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2",
"sprintf-js@~1.0.2": "https://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c", "sprintf-js@~1.0.2": "https://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c",
"sshpk@^1.7.0": "https://registry.npm.taobao.org/sshpk/download/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877", "sshpk@^1.7.0": "https://registry.npm.taobao.org/sshpk/download/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877",
"stack-utils@^1.0.1": "https://registry.npm.taobao.org/stack-utils/download/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8", "stack-utils@^2.0.2": "https://registry.npm.taobao.org/stack-utils/download/stack-utils-2.0.2.tgz#5cf48b4557becb4638d0bc4f21d23f5d19586593",
"static-extend@^0.1.1": "https://registry.npm.taobao.org/static-extend/download/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6", "static-extend@^0.1.1": "https://registry.npm.taobao.org/static-extend/download/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6",
"stealthy-require@^1.1.1": "https://registry.npm.taobao.org/stealthy-require/download/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b", "stealthy-require@^1.1.1": "https://registry.npm.taobao.org/stealthy-require/download/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b",
"string-length@^3.1.0": "https://registry.npm.taobao.org/string-length/download/string-length-3.1.0.tgz#107ef8c23456e187a8abd4a61162ff4ac6e25837", "string-length@^4.0.1": "https://registry.npm.taobao.org/string-length/download/string-length-4.0.1.tgz#4a973bf31ef77c4edbceadd6af2611996985f8a1",
"string-width@^3.0.0": "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961", "string-width@^3.0.0": "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961",
"string-width@^4.1.0": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5", "string-width@^4.1.0": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5",
"string-width@^4.2.0": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5", "string-width@^4.2.0": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5",
"strip-ansi@^5.1.0": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae", "strip-ansi@^5.1.0": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280549549&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae",
"strip-ansi@^5.2.0": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae", "strip-ansi@^6.0.0": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz?cache=0&sync_timestamp=1573280549549&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532",
"strip-ansi@^6.0.0": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532",
"strip-bom@^4.0.0": "https://registry.npm.taobao.org/strip-bom/download/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878", "strip-bom@^4.0.0": "https://registry.npm.taobao.org/strip-bom/download/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878",
"strip-eof@^1.0.0": "https://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf", "strip-eof@^1.0.0": "https://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf",
"strip-final-newline@^2.0.0": "https://registry.npm.taobao.org/strip-final-newline/download/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad", "strip-final-newline@^2.0.0": "https://registry.npm.taobao.org/strip-final-newline/download/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad",
"strip-json-comments@^3.0.1": "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7", "strip-json-comments@^3.1.0": "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180",
"supports-color@^5.3.0": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f", "supports-color@^5.3.0": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz?cache=0&sync_timestamp=1569557271992&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f",
"supports-color@^7.0.0": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1", "supports-color@^7.0.0": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.1.0.tgz?cache=0&sync_timestamp=1569557271992&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1",
"supports-color@^7.1.0": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1", "supports-color@^7.1.0": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.1.0.tgz?cache=0&sync_timestamp=1569557271992&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1",
"supports-hyperlinks@^2.0.0": "https://registry.npm.taobao.org/supports-hyperlinks/download/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47", "supports-hyperlinks@^2.0.0": "https://registry.npm.taobao.org/supports-hyperlinks/download/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47",
"symbol-tree@^3.2.2": "https://registry.npm.taobao.org/symbol-tree/download/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2", "symbol-tree@^3.2.4": "https://registry.npm.taobao.org/symbol-tree/download/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2",
"table@^5.2.3": "https://registry.npm.taobao.org/table/download/table-5.4.6.tgz?cache=0&sync_timestamp=1582102331079&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftable%2Fdownload%2Ftable-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e", "table@^5.2.3": "https://registry.npm.taobao.org/table/download/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e",
"terminal-link@^2.0.0": "https://registry.npm.taobao.org/terminal-link/download/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994", "terminal-link@^2.0.0": "https://registry.npm.taobao.org/terminal-link/download/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994",
"test-exclude@^6.0.0": "https://registry.npm.taobao.org/test-exclude/download/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e", "test-exclude@^6.0.0": "https://registry.npm.taobao.org/test-exclude/download/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e",
"text-table@^0.2.0": "https://registry.npm.taobao.org/text-table/download/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4", "text-table@^0.2.0": "https://registry.npm.taobao.org/text-table/download/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4",
"throat@^5.0.0": "https://registry.npm.taobao.org/throat/download/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b", "throat@^5.0.0": "https://registry.npm.taobao.org/throat/download/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b",
"through@^2.3.6": "https://registry.npm.taobao.org/through/download/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5",
"tmp@^0.0.33": "https://registry.npm.taobao.org/tmp/download/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9",
"tmpl@1.0.x": "https://registry.npm.taobao.org/tmpl/download/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1", "tmpl@1.0.x": "https://registry.npm.taobao.org/tmpl/download/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1",
"to-fast-properties@^2.0.0": "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-2.0.0.tgz?cache=0&sync_timestamp=1580550347606&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fto-fast-properties%2Fdownload%2Fto-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e", "to-fast-properties@^2.0.0": "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e",
"to-object-path@^0.3.0": "https://registry.npm.taobao.org/to-object-path/download/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af", "to-object-path@^0.3.0": "https://registry.npm.taobao.org/to-object-path/download/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af",
"to-regex-range@^2.1.0": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38", "to-regex-range@^2.1.0": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38",
"to-regex-range@^5.0.1": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4", "to-regex-range@^5.0.1": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4",
@@ -604,56 +633,62 @@
"tough-cookie@^2.3.3": "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.5.0.tgz?cache=0&sync_timestamp=1584645708631&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftough-cookie%2Fdownload%2Ftough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2", "tough-cookie@^2.3.3": "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.5.0.tgz?cache=0&sync_timestamp=1584645708631&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftough-cookie%2Fdownload%2Ftough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2",
"tough-cookie@^3.0.1": "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-3.0.1.tgz?cache=0&sync_timestamp=1584645708631&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftough-cookie%2Fdownload%2Ftough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2", "tough-cookie@^3.0.1": "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-3.0.1.tgz?cache=0&sync_timestamp=1584645708631&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftough-cookie%2Fdownload%2Ftough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2",
"tough-cookie@~2.5.0": "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.5.0.tgz?cache=0&sync_timestamp=1584645708631&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftough-cookie%2Fdownload%2Ftough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2", "tough-cookie@~2.5.0": "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.5.0.tgz?cache=0&sync_timestamp=1584645708631&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftough-cookie%2Fdownload%2Ftough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2",
"tr46@^1.0.1": "https://registry.npm.taobao.org/tr46/download/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09", "tr46@^2.0.2": "https://registry.npm.taobao.org/tr46/download/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479",
"ts-jest@^25.3.0": "https://registry.npm.taobao.org/ts-jest/download/ts-jest-25.3.0.tgz#c12d34573cbe34d49f10567940e44fd19d1c9178", "ts-jest@^26.1.1": "https://registry.npm.taobao.org/ts-jest/download/ts-jest-26.1.2.tgz?cache=0&sync_timestamp=1594635415527&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fts-jest%2Fdownload%2Fts-jest-26.1.2.tgz#dd2e832ffae9cb803361483b6a3010a6413dc475",
"tslib@^1.8.1": "https://registry.npm.taobao.org/tslib/download/tslib-1.11.1.tgz?cache=0&sync_timestamp=1582832152814&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftslib%2Fdownload%2Ftslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35", "tslib@^1.8.1": "https://registry.npm.taobao.org/tslib/download/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043",
"tslib@^1.9.0": "https://registry.npm.taobao.org/tslib/download/tslib-1.11.1.tgz?cache=0&sync_timestamp=1582832152814&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftslib%2Fdownload%2Ftslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35",
"tsutils@^3.17.1": "https://registry.npm.taobao.org/tsutils/download/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759", "tsutils@^3.17.1": "https://registry.npm.taobao.org/tsutils/download/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759",
"tunnel-agent@^0.6.0": "https://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd", "tunnel-agent@^0.6.0": "https://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd",
"tunnel@0.0.6": "https://registry.npm.taobao.org/tunnel/download/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c", "tunnel@0.0.6": "https://registry.npm.taobao.org/tunnel/download/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c",
"tweetnacl@^0.14.3": "https://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz?cache=0&sync_timestamp=1581364304221&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftweetnacl%2Fdownload%2Ftweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64", "tweetnacl@^0.14.3": "https://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz?cache=0&sync_timestamp=1581365146868&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftweetnacl%2Fdownload%2Ftweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64",
"tweetnacl@~0.14.0": "https://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz?cache=0&sync_timestamp=1581364304221&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftweetnacl%2Fdownload%2Ftweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64", "tweetnacl@~0.14.0": "https://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz?cache=0&sync_timestamp=1581365146868&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftweetnacl%2Fdownload%2Ftweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64",
"type-check@~0.3.2": "https://registry.npm.taobao.org/type-check/download/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72", "type-check@^0.4.0": "https://registry.npm.taobao.org/type-check/download/type-check-0.4.0.tgz?cache=0&sync_timestamp=1585882977555&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-check%2Fdownload%2Ftype-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1",
"type-check@~0.3.2": "https://registry.npm.taobao.org/type-check/download/type-check-0.3.2.tgz?cache=0&sync_timestamp=1585882977555&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-check%2Fdownload%2Ftype-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72",
"type-check@~0.4.0": "https://registry.npm.taobao.org/type-check/download/type-check-0.4.0.tgz?cache=0&sync_timestamp=1585882977555&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-check%2Fdownload%2Ftype-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1",
"type-detect@4.0.8": "https://registry.npm.taobao.org/type-detect/download/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c", "type-detect@4.0.8": "https://registry.npm.taobao.org/type-detect/download/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c",
"type-fest@^0.11.0": "https://registry.npm.taobao.org/type-fest/download/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1", "type-fest@^0.11.0": "https://registry.npm.taobao.org/type-fest/download/type-fest-0.11.0.tgz?cache=0&sync_timestamp=1593290904787&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1",
"type-fest@^0.8.1": "https://registry.npm.taobao.org/type-fest/download/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d", "type-fest@^0.16.0": "https://registry.npm.taobao.org/type-fest/download/type-fest-0.16.0.tgz?cache=0&sync_timestamp=1593290904787&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860",
"type-fest@^0.6.0": "https://registry.npm.taobao.org/type-fest/download/type-fest-0.6.0.tgz?cache=0&sync_timestamp=1593290904787&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b",
"type-fest@^0.8.1": "https://registry.npm.taobao.org/type-fest/download/type-fest-0.8.1.tgz?cache=0&sync_timestamp=1593290904787&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d",
"typedarray-to-buffer@^3.1.5": "https://registry.npm.taobao.org/typedarray-to-buffer/download/typedarray-to-buffer-3.1.5.tgz?cache=0&sync_timestamp=1580310064722&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftypedarray-to-buffer%2Fdownload%2Ftypedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080", "typedarray-to-buffer@^3.1.5": "https://registry.npm.taobao.org/typedarray-to-buffer/download/typedarray-to-buffer-3.1.5.tgz?cache=0&sync_timestamp=1580310064722&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftypedarray-to-buffer%2Fdownload%2Ftypedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080",
"typescript@^3.8.3": "https://registry.npm.taobao.org/typescript/download/typescript-3.8.3.tgz?cache=0&sync_timestamp=1584688517009&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftypescript%2Fdownload%2Ftypescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061", "typescript@^3.9.5": "https://registry.npm.taobao.org/typescript/download/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa",
"union-value@^1.0.0": "https://registry.npm.taobao.org/union-value/download/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847", "union-value@^1.0.0": "https://registry.npm.taobao.org/union-value/download/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847",
"unset-value@^1.0.0": "https://registry.npm.taobao.org/unset-value/download/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559", "unset-value@^1.0.0": "https://registry.npm.taobao.org/unset-value/download/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559",
"uri-js@^4.2.2": "https://registry.npm.taobao.org/uri-js/download/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0", "uri-js@^4.2.2": "https://registry.npm.taobao.org/uri-js/download/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0",
"urix@^0.1.0": "https://registry.npm.taobao.org/urix/download/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72", "urix@^0.1.0": "https://registry.npm.taobao.org/urix/download/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72",
"use@^3.1.0": "https://registry.npm.taobao.org/use/download/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f", "use@^3.1.0": "https://registry.npm.taobao.org/use/download/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f",
"uuid@^3.3.2": "https://registry.npm.taobao.org/uuid/download/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee", "uuid@^3.3.2": "https://registry.npm.taobao.org/uuid/download/uuid-3.4.0.tgz?cache=0&sync_timestamp=1592944257550&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuuid%2Fdownload%2Fuuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee",
"v8-compile-cache@^2.0.3": "https://registry.npm.taobao.org/v8-compile-cache/download/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e", "uuid@^7.0.3": "https://registry.npm.taobao.org/uuid/download/uuid-7.0.3.tgz?cache=0&sync_timestamp=1592944257550&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuuid%2Fdownload%2Fuuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b",
"v8-to-istanbul@^4.0.1": "https://registry.npm.taobao.org/v8-to-istanbul/download/v8-to-istanbul-4.1.2.tgz#387d173be5383dbec209d21af033dcb892e3ac82", "v8-compile-cache@^2.0.3": "https://registry.npm.taobao.org/v8-compile-cache/download/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745",
"v8-to-istanbul@^4.1.3": "https://registry.npm.taobao.org/v8-to-istanbul/download/v8-to-istanbul-4.1.4.tgz#b97936f21c0e2d9996d4985e5c5156e9d4e49cd6",
"validate-npm-package-license@^3.0.1": "https://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a",
"verror@1.10.0": "https://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400", "verror@1.10.0": "https://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400",
"w3c-hr-time@^1.0.1": "https://registry.npm.taobao.org/w3c-hr-time/download/w3c-hr-time-1.0.2.tgz?cache=0&sync_timestamp=1583455524970&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fw3c-hr-time%2Fdownload%2Fw3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd", "w3c-hr-time@^1.0.2": "https://registry.npm.taobao.org/w3c-hr-time/download/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd",
"w3c-xmlserializer@^1.1.2": "https://registry.npm.taobao.org/w3c-xmlserializer/download/w3c-xmlserializer-1.1.2.tgz#30485ca7d70a6fd052420a3d12fd90e6339ce794", "w3c-xmlserializer@^2.0.0": "https://registry.npm.taobao.org/w3c-xmlserializer/download/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a",
"walker@^1.0.7": "https://registry.npm.taobao.org/walker/download/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb", "walker@^1.0.7": "https://registry.npm.taobao.org/walker/download/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb",
"walker@~1.0.5": "https://registry.npm.taobao.org/walker/download/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb", "walker@~1.0.5": "https://registry.npm.taobao.org/walker/download/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb",
"webidl-conversions@^4.0.2": "https://registry.npm.taobao.org/webidl-conversions/download/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad", "webidl-conversions@^5.0.0": "https://registry.npm.taobao.org/webidl-conversions/download/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff",
"whatwg-encoding@^1.0.1": "https://registry.npm.taobao.org/whatwg-encoding/download/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0", "webidl-conversions@^6.0.0": "https://registry.npm.taobao.org/webidl-conversions/download/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514",
"whatwg-encoding@^1.0.5": "https://registry.npm.taobao.org/whatwg-encoding/download/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0", "whatwg-encoding@^1.0.5": "https://registry.npm.taobao.org/whatwg-encoding/download/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0",
"whatwg-mimetype@^2.2.0": "https://registry.npm.taobao.org/whatwg-mimetype/download/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf",
"whatwg-mimetype@^2.3.0": "https://registry.npm.taobao.org/whatwg-mimetype/download/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf", "whatwg-mimetype@^2.3.0": "https://registry.npm.taobao.org/whatwg-mimetype/download/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf",
"whatwg-url@^7.0.0": "https://registry.npm.taobao.org/whatwg-url/download/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06", "whatwg-url@^8.0.0": "https://registry.npm.taobao.org/whatwg-url/download/whatwg-url-8.1.0.tgz?cache=0&sync_timestamp=1588965133257&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhatwg-url%2Fdownload%2Fwhatwg-url-8.1.0.tgz#c628acdcf45b82274ce7281ee31dd3c839791771",
"which-module@^2.0.0": "https://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a", "which-module@^2.0.0": "https://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a",
"which@^1.2.9": "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a", "which@^1.2.9": "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz?cache=0&sync_timestamp=1574116898193&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a",
"which@^1.3.1": "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a", "which@^2.0.1": "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz?cache=0&sync_timestamp=1574116898193&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1",
"which@^2.0.1": "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1", "which@^2.0.2": "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz?cache=0&sync_timestamp=1574116898193&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1",
"which@^2.0.2": "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1", "word-wrap@^1.2.3": "https://registry.npm.taobao.org/word-wrap/download/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c",
"word-wrap@~1.2.3": "https://registry.npm.taobao.org/word-wrap/download/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c", "word-wrap@~1.2.3": "https://registry.npm.taobao.org/word-wrap/download/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c",
"wrap-ansi@^6.2.0": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53", "wrap-ansi@^6.2.0": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53",
"wrappy@1": "https://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f", "wrappy@1": "https://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f",
"write-file-atomic@^3.0.0": "https://registry.npm.taobao.org/write-file-atomic/download/write-file-atomic-3.0.3.tgz?cache=0&sync_timestamp=1582585849133&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwrite-file-atomic%2Fdownload%2Fwrite-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8", "write-file-atomic@^3.0.0": "https://registry.npm.taobao.org/write-file-atomic/download/write-file-atomic-3.0.3.tgz?cache=0&sync_timestamp=1582585849133&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwrite-file-atomic%2Fdownload%2Fwrite-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8",
"write@1.0.3": "https://registry.npm.taobao.org/write/download/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3", "write@1.0.3": "https://registry.npm.taobao.org/write/download/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3",
"ws@^7.0.0": "https://registry.npm.taobao.org/ws/download/ws-7.2.3.tgz#a5411e1fb04d5ed0efee76d26d5c46d830c39b46", "ws@^7.2.3": "https://registry.npm.taobao.org/ws/download/ws-7.3.1.tgz?cache=0&sync_timestamp=1593925423349&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fws%2Fdownload%2Fws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8",
"xml-name-validator@^3.0.0": "https://registry.npm.taobao.org/xml-name-validator/download/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a", "xml-name-validator@^3.0.0": "https://registry.npm.taobao.org/xml-name-validator/download/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a",
"xmlchars@^2.1.1": "https://registry.npm.taobao.org/xmlchars/download/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb", "xmlchars@^2.2.0": "https://registry.npm.taobao.org/xmlchars/download/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb",
"xregexp@^4.2.4": "https://registry.npm.taobao.org/xregexp/download/xregexp-4.3.0.tgz?cache=0&sync_timestamp=1581429221351&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fxregexp%2Fdownload%2Fxregexp-4.3.0.tgz#7e92e73d9174a99a59743f67a4ce879a04b5ae50",
"y18n@^4.0.0": "https://registry.npm.taobao.org/y18n/download/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b", "y18n@^4.0.0": "https://registry.npm.taobao.org/y18n/download/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b",
"yargs-parser@^18.1.1": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-18.1.1.tgz?cache=0&sync_timestamp=1584370526706&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-18.1.1.tgz#bf7407b915427fc760fcbbccc6c82b4f0ffcbd37", "yargs-parser@18.x": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0",
"yargs@^15.3.1": "https://registry.npm.taobao.org/yargs/download/yargs-15.3.1.tgz?cache=0&sync_timestamp=1584344189540&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-15.3.1.tgz#9505b472763963e54afe60148ad27a330818e98b" "yargs-parser@^18.1.2": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0",
"yargs@^15.3.1": "https://registry.npm.taobao.org/yargs/download/yargs-15.4.0.tgz?cache=0&sync_timestamp=1593706821858&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-15.4.0.tgz#53949fb768309bac1843de9b17b80051e9805ec2"
}, },
"files": [], "files": [],
"artifacts": {} "artifacts": {}
+7 -2
View File
@@ -1,5 +1,5 @@
interface CommandProperties { interface CommandProperties {
[key: string]: string; [key: string]: any;
} }
/** /**
* Commands * Commands
@@ -11,6 +11,11 @@ interface CommandProperties {
* ::warning::This is the message * ::warning::This is the message
* ::set-env name=MY_VAR::some value * ::set-env name=MY_VAR::some value
*/ */
export declare function issueCommand(command: string, properties: CommandProperties, message: string): void; export declare function issueCommand(command: string, properties: CommandProperties, message: any): void;
export declare function issue(name: string, message?: string): void; export declare function issue(name: string, message?: string): void;
/**
* Sanitizes an input into a string so it can be passed into issueCommand safely
* @param input input to sanitize into a string
*/
export declare function toCommandValue(input: any): string;
export {}; export {};
+16 -2
View File
@@ -61,14 +61,28 @@ class Command {
return cmdStr; return cmdStr;
} }
} }
/**
* Sanitizes an input into a string so it can be passed into issueCommand safely
* @param input input to sanitize into a string
*/
function toCommandValue(input) {
if (input === null || input === undefined) {
return '';
}
else if (typeof input === 'string' || input instanceof String) {
return input;
}
return JSON.stringify(input);
}
exports.toCommandValue = toCommandValue;
function escapeData(s) { function escapeData(s) {
return (s || '') return toCommandValue(s)
.replace(/%/g, '%25') .replace(/%/g, '%25')
.replace(/\r/g, '%0D') .replace(/\r/g, '%0D')
.replace(/\n/g, '%0A'); .replace(/\n/g, '%0A');
} }
function escapeProperty(s) { function escapeProperty(s) {
return (s || '') return toCommandValue(s)
.replace(/%/g, '%25') .replace(/%/g, '%25')
.replace(/\r/g, '%0D') .replace(/\r/g, '%0D')
.replace(/\n/g, '%0A') .replace(/\n/g, '%0A')
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"command.js","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":";;;;;;;;;AAAA,uCAAwB;AAQxB;;;;;;;;;GASG;AACH,SAAgB,YAAY,CAC1B,OAAe,EACf,UAA6B,EAC7B,OAAe;IAEf,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;IACrD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;AAC/C,CAAC;AAPD,oCAOC;AAED,SAAgB,KAAK,CAAC,IAAY,EAAE,UAAkB,EAAE;IACtD,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;AACjC,CAAC;AAFD,sBAEC;AAED,MAAM,UAAU,GAAG,IAAI,CAAA;AAEvB,MAAM,OAAO;IAKX,YAAY,OAAe,EAAE,UAA6B,EAAE,OAAe;QACzE,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,GAAG,iBAAiB,CAAA;SAC5B;QAED,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAED,QAAQ;QACN,IAAI,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC,OAAO,CAAA;QAEtC,IAAI,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9D,MAAM,IAAI,GAAG,CAAA;YACb,IAAI,KAAK,GAAG,IAAI,CAAA;YAChB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE;gBACjC,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;oBACvC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;oBAChC,IAAI,GAAG,EAAE;wBACP,IAAI,KAAK,EAAE;4BACT,KAAK,GAAG,KAAK,CAAA;yBACd;6BAAM;4BACL,MAAM,IAAI,GAAG,CAAA;yBACd;wBAED,MAAM,IAAI,GAAG,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAA;qBAC1C;iBACF;aACF;SACF;QAED,MAAM,IAAI,GAAG,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAA;QACpD,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;SACb,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AAC1B,CAAC;AAED,SAAS,cAAc,CAAC,CAAS;IAC/B,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;SACb,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;AACzB,CAAC"} {"version":3,"file":"command.js","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":";;;;;;;;;AAAA,uCAAwB;AAWxB;;;;;;;;;GASG;AACH,SAAgB,YAAY,CAC1B,OAAe,EACf,UAA6B,EAC7B,OAAY;IAEZ,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;IACrD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;AAC/C,CAAC;AAPD,oCAOC;AAED,SAAgB,KAAK,CAAC,IAAY,EAAE,UAAkB,EAAE;IACtD,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;AACjC,CAAC;AAFD,sBAEC;AAED,MAAM,UAAU,GAAG,IAAI,CAAA;AAEvB,MAAM,OAAO;IAKX,YAAY,OAAe,EAAE,UAA6B,EAAE,OAAe;QACzE,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,GAAG,iBAAiB,CAAA;SAC5B;QAED,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAED,QAAQ;QACN,IAAI,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC,OAAO,CAAA;QAEtC,IAAI,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9D,MAAM,IAAI,GAAG,CAAA;YACb,IAAI,KAAK,GAAG,IAAI,CAAA;YAChB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE;gBACjC,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;oBACvC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;oBAChC,IAAI,GAAG,EAAE;wBACP,IAAI,KAAK,EAAE;4BACT,KAAK,GAAG,KAAK,CAAA;yBACd;6BAAM;4BACL,MAAM,IAAI,GAAG,CAAA;yBACd;wBAED,MAAM,IAAI,GAAG,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAA;qBAC1C;iBACF;aACF;SACF;QAED,MAAM,IAAI,GAAG,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAA;QACpD,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAED;;;GAGG;AACH,SAAgB,cAAc,CAAC,KAAU;IACvC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;QACzC,OAAO,EAAE,CAAA;KACV;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,YAAY,MAAM,EAAE;QAC/D,OAAO,KAAe,CAAA;KACvB;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;AAC9B,CAAC;AAPD,wCAOC;AAED,SAAS,UAAU,CAAC,CAAM;IACxB,OAAO,cAAc,CAAC,CAAC,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AAC1B,CAAC;AAED,SAAS,cAAc,CAAC,CAAM;IAC5B,OAAO,cAAc,CAAC,CAAC,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;AACzB,CAAC"}
+17 -11
View File
@@ -21,9 +21,9 @@ export declare enum ExitCode {
/** /**
* Sets env variable for this action and future actions in the job * Sets env variable for this action and future actions in the job
* @param name the name of the variable to set * @param name the name of the variable to set
* @param val the value of the variable * @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify
*/ */
export declare function exportVariable(name: string, val: string): void; export declare function exportVariable(name: string, val: any): void;
/** /**
* Registers a secret which will get masked from logs * Registers a secret which will get masked from logs
* @param secret value of the secret * @param secret value of the secret
@@ -46,15 +46,21 @@ export declare function getInput(name: string, options?: InputOptions): string;
* Sets the value of an output. * Sets the value of an output.
* *
* @param name name of the output to set * @param name name of the output to set
* @param value value to store * @param value value to store. Non-string values will be converted to a string via JSON.stringify
*/ */
export declare function setOutput(name: string, value: string): void; export declare function setOutput(name: string, value: any): void;
/**
* Enables or disables the echoing of commands into stdout for the rest of the step.
* Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set.
*
*/
export declare function setCommandEcho(enabled: boolean): void;
/** /**
* Sets the action status to failed. * Sets the action status to failed.
* When the action exits it will be with an exit code of 1 * When the action exits it will be with an exit code of 1
* @param message add error issue message * @param message add error issue message
*/ */
export declare function setFailed(message: string): void; export declare function setFailed(message: string | Error): void;
/** /**
* Gets whether Actions Step Debug is on or not * Gets whether Actions Step Debug is on or not
*/ */
@@ -66,14 +72,14 @@ export declare function isDebug(): boolean;
export declare function debug(message: string): void; export declare function debug(message: string): void;
/** /**
* Adds an error issue * Adds an error issue
* @param message error issue message * @param message error issue message. Errors will be converted to string via toString()
*/ */
export declare function error(message: string): void; export declare function error(message: string | Error): void;
/** /**
* Adds an warning issue * Adds an warning issue
* @param message warning issue message * @param message warning issue message. Errors will be converted to string via toString()
*/ */
export declare function warning(message: string): void; export declare function warning(message: string | Error): void;
/** /**
* Writes info to log with console.log. * Writes info to log with console.log.
* @param message info message * @param message info message
@@ -104,9 +110,9 @@ export declare function group<T>(name: string, fn: () => Promise<T>): Promise<T>
* Saves state for current action, the state can only be retrieved by this action's post job execution. * Saves state for current action, the state can only be retrieved by this action's post job execution.
* *
* @param name name of the state to store * @param name name of the state to store
* @param value value to store * @param value value to store. Non-string values will be converted to a string via JSON.stringify
*/ */
export declare function saveState(name: string, value: string): void; export declare function saveState(name: string, value: any): void;
/** /**
* Gets the value of an state set by this action's main execution. * Gets the value of an state set by this action's main execution.
* *
+22 -9
View File
@@ -39,11 +39,13 @@ var ExitCode;
/** /**
* Sets env variable for this action and future actions in the job * Sets env variable for this action and future actions in the job
* @param name the name of the variable to set * @param name the name of the variable to set
* @param val the value of the variable * @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify
*/ */
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function exportVariable(name, val) { function exportVariable(name, val) {
process.env[name] = val; const convertedVal = command_1.toCommandValue(val);
command_1.issueCommand('set-env', { name }, val); process.env[name] = convertedVal;
command_1.issueCommand('set-env', { name }, convertedVal);
} }
exports.exportVariable = exportVariable; exports.exportVariable = exportVariable;
/** /**
@@ -82,12 +84,22 @@ exports.getInput = getInput;
* Sets the value of an output. * Sets the value of an output.
* *
* @param name name of the output to set * @param name name of the output to set
* @param value value to store * @param value value to store. Non-string values will be converted to a string via JSON.stringify
*/ */
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function setOutput(name, value) { function setOutput(name, value) {
command_1.issueCommand('set-output', { name }, value); command_1.issueCommand('set-output', { name }, value);
} }
exports.setOutput = setOutput; exports.setOutput = setOutput;
/**
* Enables or disables the echoing of commands into stdout for the rest of the step.
* Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set.
*
*/
function setCommandEcho(enabled) {
command_1.issue('echo', enabled ? 'on' : 'off');
}
exports.setCommandEcho = setCommandEcho;
//----------------------------------------------------------------------- //-----------------------------------------------------------------------
// Results // Results
//----------------------------------------------------------------------- //-----------------------------------------------------------------------
@@ -121,18 +133,18 @@ function debug(message) {
exports.debug = debug; exports.debug = debug;
/** /**
* Adds an error issue * Adds an error issue
* @param message error issue message * @param message error issue message. Errors will be converted to string via toString()
*/ */
function error(message) { function error(message) {
command_1.issue('error', message); command_1.issue('error', message instanceof Error ? message.toString() : message);
} }
exports.error = error; exports.error = error;
/** /**
* Adds an warning issue * Adds an warning issue
* @param message warning issue message * @param message warning issue message. Errors will be converted to string via toString()
*/ */
function warning(message) { function warning(message) {
command_1.issue('warning', message); command_1.issue('warning', message instanceof Error ? message.toString() : message);
} }
exports.warning = warning; exports.warning = warning;
/** /**
@@ -190,8 +202,9 @@ exports.group = group;
* Saves state for current action, the state can only be retrieved by this action's post job execution. * Saves state for current action, the state can only be retrieved by this action's post job execution.
* *
* @param name name of the state to store * @param name name of the state to store
* @param value value to store * @param value value to store. Non-string values will be converted to a string via JSON.stringify
*/ */
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function saveState(name, value) { function saveState(name, value) {
command_1.issueCommand('save-state', { name }, value); command_1.issueCommand('save-state', { name }, value);
} }
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,uCAA6C;AAE7C,uCAAwB;AACxB,2CAA4B;AAU5B;;GAEG;AACH,IAAY,QAUX;AAVD,WAAY,QAAQ;IAClB;;OAEG;IACH,6CAAW,CAAA;IAEX;;OAEG;IACH,6CAAW,CAAA;AACb,CAAC,EAVW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAUnB;AAED,yEAAyE;AACzE,YAAY;AACZ,yEAAyE;AAEzE;;;;GAIG;AACH,SAAgB,cAAc,CAAC,IAAY,EAAE,GAAW;IACtD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAA;IACvB,sBAAY,CAAC,SAAS,EAAE,EAAC,IAAI,EAAC,EAAE,GAAG,CAAC,CAAA;AACtC,CAAC;AAHD,wCAGC;AAED;;;GAGG;AACH,SAAgB,SAAS,CAAC,MAAc;IACtC,sBAAY,CAAC,UAAU,EAAE,EAAE,EAAE,MAAM,CAAC,CAAA;AACtC,CAAC;AAFD,8BAEC;AAED;;;GAGG;AACH,SAAgB,OAAO,CAAC,SAAiB;IACvC,sBAAY,CAAC,UAAU,EAAE,EAAE,EAAE,SAAS,CAAC,CAAA;IACvC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAA;AAC7E,CAAC;AAHD,0BAGC;AAED;;;;;;GAMG;AACH,SAAgB,QAAQ,CAAC,IAAY,EAAE,OAAsB;IAC3D,MAAM,GAAG,GACP,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,EAAE,CAAA;IACrE,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,GAAG,EAAE;QACvC,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,EAAE,CAAC,CAAA;KAC5D;IAED,OAAO,GAAG,CAAC,IAAI,EAAE,CAAA;AACnB,CAAC;AARD,4BAQC;AAED;;;;;GAKG;AACH,SAAgB,SAAS,CAAC,IAAY,EAAE,KAAa;IACnD,sBAAY,CAAC,YAAY,EAAE,EAAC,IAAI,EAAC,EAAE,KAAK,CAAC,CAAA;AAC3C,CAAC;AAFD,8BAEC;AAED,yEAAyE;AACzE,UAAU;AACV,yEAAyE;AAEzE;;;;GAIG;AACH,SAAgB,SAAS,CAAC,OAAe;IACvC,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAA;IACnC,KAAK,CAAC,OAAO,CAAC,CAAA;AAChB,CAAC;AAHD,8BAGC;AAED,yEAAyE;AACzE,mBAAmB;AACnB,yEAAyE;AAEzE;;GAEG;AACH,SAAgB,OAAO;IACrB,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,GAAG,CAAA;AAC5C,CAAC;AAFD,0BAEC;AAED;;;GAGG;AACH,SAAgB,KAAK,CAAC,OAAe;IACnC,sBAAY,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;AACpC,CAAC;AAFD,sBAEC;AAED;;;GAGG;AACH,SAAgB,KAAK,CAAC,OAAe;IACnC,eAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;AACzB,CAAC;AAFD,sBAEC;AAED;;;GAGG;AACH,SAAgB,OAAO,CAAC,OAAe;IACrC,eAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;AAC3B,CAAC;AAFD,0BAEC;AAED;;;GAGG;AACH,SAAgB,IAAI,CAAC,OAAe;IAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;AACxC,CAAC;AAFD,oBAEC;AAED;;;;;;GAMG;AACH,SAAgB,UAAU,CAAC,IAAY;IACrC,eAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;AACtB,CAAC;AAFD,gCAEC;AAED;;GAEG;AACH,SAAgB,QAAQ;IACtB,eAAK,CAAC,UAAU,CAAC,CAAA;AACnB,CAAC;AAFD,4BAEC;AAED;;;;;;;GAOG;AACH,SAAsB,KAAK,CAAI,IAAY,EAAE,EAAoB;;QAC/D,UAAU,CAAC,IAAI,CAAC,CAAA;QAEhB,IAAI,MAAS,CAAA;QAEb,IAAI;YACF,MAAM,GAAG,MAAM,EAAE,EAAE,CAAA;SACpB;gBAAS;YACR,QAAQ,EAAE,CAAA;SACX;QAED,OAAO,MAAM,CAAA;IACf,CAAC;CAAA;AAZD,sBAYC;AAED,yEAAyE;AACzE,uBAAuB;AACvB,yEAAyE;AAEzE;;;;;GAKG;AACH,SAAgB,SAAS,CAAC,IAAY,EAAE,KAAa;IACnD,sBAAY,CAAC,YAAY,EAAE,EAAC,IAAI,EAAC,EAAE,KAAK,CAAC,CAAA;AAC3C,CAAC;AAFD,8BAEC;AAED;;;;;GAKG;AACH,SAAgB,QAAQ,CAAC,IAAY;IACnC,OAAO,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,IAAI,EAAE,CAAA;AAC3C,CAAC;AAFD,4BAEC"} {"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,uCAA6D;AAE7D,uCAAwB;AACxB,2CAA4B;AAU5B;;GAEG;AACH,IAAY,QAUX;AAVD,WAAY,QAAQ;IAClB;;OAEG;IACH,6CAAW,CAAA;IAEX;;OAEG;IACH,6CAAW,CAAA;AACb,CAAC,EAVW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAUnB;AAED,yEAAyE;AACzE,YAAY;AACZ,yEAAyE;AAEzE;;;;GAIG;AACH,8DAA8D;AAC9D,SAAgB,cAAc,CAAC,IAAY,EAAE,GAAQ;IACnD,MAAM,YAAY,GAAG,wBAAc,CAAC,GAAG,CAAC,CAAA;IACxC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,YAAY,CAAA;IAChC,sBAAY,CAAC,SAAS,EAAE,EAAC,IAAI,EAAC,EAAE,YAAY,CAAC,CAAA;AAC/C,CAAC;AAJD,wCAIC;AAED;;;GAGG;AACH,SAAgB,SAAS,CAAC,MAAc;IACtC,sBAAY,CAAC,UAAU,EAAE,EAAE,EAAE,MAAM,CAAC,CAAA;AACtC,CAAC;AAFD,8BAEC;AAED;;;GAGG;AACH,SAAgB,OAAO,CAAC,SAAiB;IACvC,sBAAY,CAAC,UAAU,EAAE,EAAE,EAAE,SAAS,CAAC,CAAA;IACvC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAA;AAC7E,CAAC;AAHD,0BAGC;AAED;;;;;;GAMG;AACH,SAAgB,QAAQ,CAAC,IAAY,EAAE,OAAsB;IAC3D,MAAM,GAAG,GACP,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,EAAE,CAAA;IACrE,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,GAAG,EAAE;QACvC,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,EAAE,CAAC,CAAA;KAC5D;IAED,OAAO,GAAG,CAAC,IAAI,EAAE,CAAA;AACnB,CAAC;AARD,4BAQC;AAED;;;;;GAKG;AACH,8DAA8D;AAC9D,SAAgB,SAAS,CAAC,IAAY,EAAE,KAAU;IAChD,sBAAY,CAAC,YAAY,EAAE,EAAC,IAAI,EAAC,EAAE,KAAK,CAAC,CAAA;AAC3C,CAAC;AAFD,8BAEC;AAED;;;;GAIG;AACH,SAAgB,cAAc,CAAC,OAAgB;IAC7C,eAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;AACvC,CAAC;AAFD,wCAEC;AAED,yEAAyE;AACzE,UAAU;AACV,yEAAyE;AAEzE;;;;GAIG;AACH,SAAgB,SAAS,CAAC,OAAuB;IAC/C,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAA;IAEnC,KAAK,CAAC,OAAO,CAAC,CAAA;AAChB,CAAC;AAJD,8BAIC;AAED,yEAAyE;AACzE,mBAAmB;AACnB,yEAAyE;AAEzE;;GAEG;AACH,SAAgB,OAAO;IACrB,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,GAAG,CAAA;AAC5C,CAAC;AAFD,0BAEC;AAED;;;GAGG;AACH,SAAgB,KAAK,CAAC,OAAe;IACnC,sBAAY,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;AACpC,CAAC;AAFD,sBAEC;AAED;;;GAGG;AACH,SAAgB,KAAK,CAAC,OAAuB;IAC3C,eAAK,CAAC,OAAO,EAAE,OAAO,YAAY,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;AACzE,CAAC;AAFD,sBAEC;AAED;;;GAGG;AACH,SAAgB,OAAO,CAAC,OAAuB;IAC7C,eAAK,CAAC,SAAS,EAAE,OAAO,YAAY,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;AAC3E,CAAC;AAFD,0BAEC;AAED;;;GAGG;AACH,SAAgB,IAAI,CAAC,OAAe;IAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;AACxC,CAAC;AAFD,oBAEC;AAED;;;;;;GAMG;AACH,SAAgB,UAAU,CAAC,IAAY;IACrC,eAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;AACtB,CAAC;AAFD,gCAEC;AAED;;GAEG;AACH,SAAgB,QAAQ;IACtB,eAAK,CAAC,UAAU,CAAC,CAAA;AACnB,CAAC;AAFD,4BAEC;AAED;;;;;;;GAOG;AACH,SAAsB,KAAK,CAAI,IAAY,EAAE,EAAoB;;QAC/D,UAAU,CAAC,IAAI,CAAC,CAAA;QAEhB,IAAI,MAAS,CAAA;QAEb,IAAI;YACF,MAAM,GAAG,MAAM,EAAE,EAAE,CAAA;SACpB;gBAAS;YACR,QAAQ,EAAE,CAAA;SACX;QAED,OAAO,MAAM,CAAA;IACf,CAAC;CAAA;AAZD,sBAYC;AAED,yEAAyE;AACzE,uBAAuB;AACvB,yEAAyE;AAEzE;;;;;GAKG;AACH,8DAA8D;AAC9D,SAAgB,SAAS,CAAC,IAAY,EAAE,KAAU;IAChD,sBAAY,CAAC,YAAY,EAAE,EAAC,IAAI,EAAC,EAAE,KAAK,CAAC,CAAA;AAC3C,CAAC;AAFD,8BAEC;AAED;;;;;GAKG;AACH,SAAgB,QAAQ,CAAC,IAAY;IACnC,OAAO,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,IAAI,EAAE,CAAA;AAC3C,CAAC;AAFD,4BAEC"}
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@actions/core", "name": "@actions/core",
"version": "1.2.3", "version": "1.2.4",
"description": "Actions core lib", "description": "Actions core lib",
"keywords": [ "keywords": [
"github", "github",
+3 -2
View File
@@ -1,4 +1,5 @@
import * as im from './interfaces'; import { ExecOptions } from './interfaces';
export { ExecOptions };
/** /**
* Exec a command. * Exec a command.
* Output will be streamed to the live console. * Output will be streamed to the live console.
@@ -9,4 +10,4 @@ import * as im from './interfaces';
* @param options optional exec options. See ExecOptions * @param options optional exec options. See ExecOptions
* @returns Promise<number> exit code * @returns Promise<number> exit code
*/ */
export declare function exec(commandLine: string, args?: string[], options?: im.ExecOptions): Promise<number>; export declare function exec(commandLine: string, args?: string[], options?: ExecOptions): Promise<number>;
+8 -1
View File
@@ -8,8 +8,15 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
step((generator = generator.apply(thisArg, _arguments || [])).next()); step((generator = generator.apply(thisArg, _arguments || [])).next());
}); });
}; };
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;
};
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
const tr = require("./toolrunner"); const tr = __importStar(require("./toolrunner"));
/** /**
* Exec a command. * Exec a command.
* Output will be streamed to the live console. * Output will be streamed to the live console.
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../src/exec.ts"],"names":[],"mappings":";;;;;;;;;;;AACA,mCAAkC;AAElC;;;;;;;;;GASG;AACH,SAAsB,IAAI,CACxB,WAAmB,EACnB,IAAe,EACf,OAAwB;;QAExB,MAAM,WAAW,GAAG,EAAE,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAA;QACpD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5B,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;SACpE;QACD,8CAA8C;QAC9C,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;QAC/B,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;QAC9C,MAAM,MAAM,GAAkB,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;QACxE,OAAO,MAAM,CAAC,IAAI,EAAE,CAAA;IACtB,CAAC;CAAA;AAdD,oBAcC"} {"version":3,"file":"exec.js","sourceRoot":"","sources":["../src/exec.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AACA,iDAAkC;AAIlC;;;;;;;;;GASG;AACH,SAAsB,IAAI,CACxB,WAAmB,EACnB,IAAe,EACf,OAAqB;;QAErB,MAAM,WAAW,GAAG,EAAE,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAA;QACpD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5B,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;SACpE;QACD,8CAA8C;QAC9C,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;QAC/B,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;QAC9C,MAAM,MAAM,GAAkB,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;QACxE,OAAO,MAAM,CAAC,IAAI,EAAE,CAAA;IACtB,CAAC;CAAA;AAdD,oBAcC"}
+2
View File
@@ -24,6 +24,8 @@ export interface ExecOptions {
ignoreReturnCode?: boolean; ignoreReturnCode?: boolean;
/** optional. How long in ms to wait for STDIO streams to close after the exit event of the process before terminating. defaults to 10000 */ /** optional. How long in ms to wait for STDIO streams to close after the exit event of the process before terminating. defaults to 10000 */
delay?: number; delay?: number;
/** optional. input to write to the process on STDIN. */
input?: Buffer;
/** optional. Listeners for output. Callback functions that will be called on these events */ /** optional. Listeners for output. Callback functions that will be called on these events */
listeners?: { listeners?: {
stdout?: (data: Buffer) => void; stdout?: (data: Buffer) => void;
+19 -6
View File
@@ -8,13 +8,20 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
step((generator = generator.apply(thisArg, _arguments || [])).next()); step((generator = generator.apply(thisArg, _arguments || [])).next());
}); });
}; };
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;
};
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
const os = require("os"); const os = __importStar(require("os"));
const events = require("events"); const events = __importStar(require("events"));
const child = require("child_process"); const child = __importStar(require("child_process"));
const path = require("path"); const path = __importStar(require("path"));
const io = require("@actions/io"); const io = __importStar(require("@actions/io"));
const ioUtil = require("@actions/io/lib/io-util"); const ioUtil = __importStar(require("@actions/io/lib/io-util"));
/* eslint-disable @typescript-eslint/unbound-method */ /* eslint-disable @typescript-eslint/unbound-method */
const IS_WINDOWS = process.platform === 'win32'; const IS_WINDOWS = process.platform === 'win32';
/* /*
@@ -458,6 +465,12 @@ class ToolRunner extends events.EventEmitter {
resolve(exitCode); resolve(exitCode);
} }
}); });
if (this.options.input) {
if (!cp.stdin) {
throw new Error('child process missing stdin');
}
cp.stdin.end(this.options.input);
}
}); });
}); });
} }
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@actions/exec", "name": "@actions/exec",
"version": "1.0.3", "version": "1.0.4",
"description": "Actions exec lib", "description": "Actions exec lib",
"keywords": [ "keywords": [
"github", "github",
+3
View File
@@ -1,5 +1,8 @@
## Releases ## Releases
## 1.0.7
Update NPM dependencies and add 429 to the list of HttpCodes
## 1.0.6 ## 1.0.6
Automatically sends Content-Type and Accept application/json headers for \<verb>Json() helper methods if not set in the client or parameters. Automatically sends Content-Type and Accept application/json headers for \<verb>Json() helper methods if not set in the client or parameters.
+5 -2
View File
@@ -6,7 +6,9 @@ class BasicCredentialHandler {
this.password = password; this.password = password;
} }
prepareRequest(options) { prepareRequest(options) {
options.headers['Authorization'] = 'Basic ' + Buffer.from(this.username + ':' + this.password).toString('base64'); options.headers['Authorization'] =
'Basic ' +
Buffer.from(this.username + ':' + this.password).toString('base64');
} }
// This handler cannot handle 401 // This handler cannot handle 401
canHandleAuthentication(response) { canHandleAuthentication(response) {
@@ -42,7 +44,8 @@ class PersonalAccessTokenCredentialHandler {
// currently implements pre-authorization // currently implements pre-authorization
// TODO: support preAuth = false where it hooks on 401 // TODO: support preAuth = false where it hooks on 401
prepareRequest(options) { prepareRequest(options) {
options.headers['Authorization'] = 'Basic ' + Buffer.from('PAT:' + this.token).toString('base64'); options.headers['Authorization'] =
'Basic ' + Buffer.from('PAT:' + this.token).toString('base64');
} }
// This handler cannot handle 401 // This handler cannot handle 401
canHandleAuthentication(response) { canHandleAuthentication(response) {
+2 -1
View File
@@ -1,5 +1,5 @@
/// <reference types="node" /> /// <reference types="node" />
import http = require("http"); import http = require('http');
import ifm = require('./interfaces'); import ifm = require('./interfaces');
export declare enum HttpCodes { export declare enum HttpCodes {
OK = 200, OK = 200,
@@ -23,6 +23,7 @@ export declare enum HttpCodes {
RequestTimeout = 408, RequestTimeout = 408,
Conflict = 409, Conflict = 409,
Gone = 410, Gone = 410,
TooManyRequests = 429,
InternalServerError = 500, InternalServerError = 500,
NotImplemented = 501, NotImplemented = 501,
BadGateway = 502, BadGateway = 502,
+56 -25
View File
@@ -28,6 +28,7 @@ var HttpCodes;
HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout"; HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout";
HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict"; HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict";
HttpCodes[HttpCodes["Gone"] = 410] = "Gone"; HttpCodes[HttpCodes["Gone"] = 410] = "Gone";
HttpCodes[HttpCodes["TooManyRequests"] = 429] = "TooManyRequests";
HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError"; HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError";
HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented"; HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented";
HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway"; HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway";
@@ -52,8 +53,18 @@ function getProxyUrl(serverUrl) {
return proxyUrl ? proxyUrl.href : ''; return proxyUrl ? proxyUrl.href : '';
} }
exports.getProxyUrl = getProxyUrl; exports.getProxyUrl = getProxyUrl;
const HttpRedirectCodes = [HttpCodes.MovedPermanently, HttpCodes.ResourceMoved, HttpCodes.SeeOther, HttpCodes.TemporaryRedirect, HttpCodes.PermanentRedirect]; const HttpRedirectCodes = [
const HttpResponseRetryCodes = [HttpCodes.BadGateway, HttpCodes.ServiceUnavailable, HttpCodes.GatewayTimeout]; HttpCodes.MovedPermanently,
HttpCodes.ResourceMoved,
HttpCodes.SeeOther,
HttpCodes.TemporaryRedirect,
HttpCodes.PermanentRedirect
];
const HttpResponseRetryCodes = [
HttpCodes.BadGateway,
HttpCodes.ServiceUnavailable,
HttpCodes.GatewayTimeout
];
const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD']; const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD'];
const ExponentialBackoffCeiling = 10; const ExponentialBackoffCeiling = 10;
const ExponentialBackoffTimeSlice = 5; const ExponentialBackoffTimeSlice = 5;
@@ -178,18 +189,22 @@ class HttpClient {
*/ */
async request(verb, requestUrl, data, headers) { async request(verb, requestUrl, data, headers) {
if (this._disposed) { if (this._disposed) {
throw new Error("Client has already been disposed."); throw new Error('Client has already been disposed.');
} }
let parsedUrl = url.parse(requestUrl); let parsedUrl = url.parse(requestUrl);
let info = this._prepareRequest(verb, parsedUrl, headers); let info = this._prepareRequest(verb, parsedUrl, headers);
// Only perform retries on reads since writes may not be idempotent. // Only perform retries on reads since writes may not be idempotent.
let maxTries = (this._allowRetries && RetryableHttpVerbs.indexOf(verb) != -1) ? this._maxRetries + 1 : 1; let maxTries = this._allowRetries && RetryableHttpVerbs.indexOf(verb) != -1
? this._maxRetries + 1
: 1;
let numTries = 0; let numTries = 0;
let response; let response;
while (numTries < maxTries) { while (numTries < maxTries) {
response = await this.requestRaw(info, data); response = await this.requestRaw(info, data);
// Check if it's an authentication challenge // Check if it's an authentication challenge
if (response && response.message && response.message.statusCode === HttpCodes.Unauthorized) { if (response &&
response.message &&
response.message.statusCode === HttpCodes.Unauthorized) {
let authenticationHandler; let authenticationHandler;
for (let i = 0; i < this.handlers.length; i++) { for (let i = 0; i < this.handlers.length; i++) {
if (this.handlers[i].canHandleAuthentication(response)) { if (this.handlers[i].canHandleAuthentication(response)) {
@@ -207,21 +222,32 @@ class HttpClient {
} }
} }
let redirectsRemaining = this._maxRedirects; let redirectsRemaining = this._maxRedirects;
while (HttpRedirectCodes.indexOf(response.message.statusCode) != -1 while (HttpRedirectCodes.indexOf(response.message.statusCode) != -1 &&
&& this._allowRedirects this._allowRedirects &&
&& redirectsRemaining > 0) { redirectsRemaining > 0) {
const redirectUrl = response.message.headers["location"]; const redirectUrl = response.message.headers['location'];
if (!redirectUrl) { if (!redirectUrl) {
// if there's no location to redirect to, we won't // if there's no location to redirect to, we won't
break; break;
} }
let parsedRedirectUrl = url.parse(redirectUrl); let parsedRedirectUrl = url.parse(redirectUrl);
if (parsedUrl.protocol == 'https:' && parsedUrl.protocol != parsedRedirectUrl.protocol && !this._allowRedirectDowngrade) { if (parsedUrl.protocol == 'https:' &&
throw new Error("Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true."); parsedUrl.protocol != parsedRedirectUrl.protocol &&
!this._allowRedirectDowngrade) {
throw new Error('Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.');
} }
// we need to finish reading the response before reassigning response // we need to finish reading the response before reassigning response
// which will leak the open socket. // which will leak the open socket.
await response.readBody(); await response.readBody();
// strip authorization header if redirected to a different hostname
if (parsedRedirectUrl.hostname !== parsedUrl.hostname) {
for (let header in headers) {
// header names are case insensitive
if (header.toLowerCase() === 'authorization') {
delete headers[header];
}
}
}
// let's make the request with the new redirectUrl // let's make the request with the new redirectUrl
info = this._prepareRequest(verb, parsedRedirectUrl, headers); info = this._prepareRequest(verb, parsedRedirectUrl, headers);
response = await this.requestRaw(info, data); response = await this.requestRaw(info, data);
@@ -272,8 +298,8 @@ class HttpClient {
*/ */
requestRawWithCallback(info, data, onResult) { requestRawWithCallback(info, data, onResult) {
let socket; let socket;
if (typeof (data) === 'string') { if (typeof data === 'string') {
info.options.headers["Content-Length"] = Buffer.byteLength(data, 'utf8'); info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8');
} }
let callbackCalled = false; let callbackCalled = false;
let handleResult = (err, res) => { let handleResult = (err, res) => {
@@ -286,7 +312,7 @@ class HttpClient {
let res = new HttpClientResponse(msg); let res = new HttpClientResponse(msg);
handleResult(null, res); handleResult(null, res);
}); });
req.on('socket', (sock) => { req.on('socket', sock => {
socket = sock; socket = sock;
}); });
// If we ever get disconnected, we want the socket to timeout eventually // If we ever get disconnected, we want the socket to timeout eventually
@@ -301,10 +327,10 @@ class HttpClient {
// res should have headers // res should have headers
handleResult(err, null); handleResult(err, null);
}); });
if (data && typeof (data) === 'string') { if (data && typeof data === 'string') {
req.write(data, 'utf8'); req.write(data, 'utf8');
} }
if (data && typeof (data) !== 'string') { if (data && typeof data !== 'string') {
data.on('close', function () { data.on('close', function () {
req.end(); req.end();
}); });
@@ -331,31 +357,34 @@ class HttpClient {
const defaultPort = usingSsl ? 443 : 80; const defaultPort = usingSsl ? 443 : 80;
info.options = {}; info.options = {};
info.options.host = info.parsedUrl.hostname; info.options.host = info.parsedUrl.hostname;
info.options.port = info.parsedUrl.port ? parseInt(info.parsedUrl.port) : defaultPort; info.options.port = info.parsedUrl.port
info.options.path = (info.parsedUrl.pathname || '') + (info.parsedUrl.search || ''); ? parseInt(info.parsedUrl.port)
: defaultPort;
info.options.path =
(info.parsedUrl.pathname || '') + (info.parsedUrl.search || '');
info.options.method = method; info.options.method = method;
info.options.headers = this._mergeHeaders(headers); info.options.headers = this._mergeHeaders(headers);
if (this.userAgent != null) { if (this.userAgent != null) {
info.options.headers["user-agent"] = this.userAgent; info.options.headers['user-agent'] = this.userAgent;
} }
info.options.agent = this._getAgent(info.parsedUrl); info.options.agent = this._getAgent(info.parsedUrl);
// gives handlers an opportunity to participate // gives handlers an opportunity to participate
if (this.handlers) { if (this.handlers) {
this.handlers.forEach((handler) => { this.handlers.forEach(handler => {
handler.prepareRequest(info.options); handler.prepareRequest(info.options);
}); });
} }
return info; return info;
} }
_mergeHeaders(headers) { _mergeHeaders(headers) {
const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => (c[k.toLowerCase()] = obj[k], c), {}); const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {});
if (this.requestOptions && this.requestOptions.headers) { if (this.requestOptions && this.requestOptions.headers) {
return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers)); return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers));
} }
return lowercaseKeys(headers || {}); return lowercaseKeys(headers || {});
} }
_getExistingOrDefaultHeader(additionalHeaders, header, _default) { _getExistingOrDefaultHeader(additionalHeaders, header, _default) {
const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => (c[k.toLowerCase()] = obj[k], c), {}); const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {});
let clientHeader; let clientHeader;
if (this.requestOptions && this.requestOptions.headers) { if (this.requestOptions && this.requestOptions.headers) {
clientHeader = lowercaseKeys(this.requestOptions.headers)[header]; clientHeader = lowercaseKeys(this.requestOptions.headers)[header];
@@ -393,7 +422,7 @@ class HttpClient {
proxyAuth: proxyUrl.auth, proxyAuth: proxyUrl.auth,
host: proxyUrl.hostname, host: proxyUrl.hostname,
port: proxyUrl.port port: proxyUrl.port
}, }
}; };
let tunnelAgent; let tunnelAgent;
const overHttps = proxyUrl.protocol === 'https:'; const overHttps = proxyUrl.protocol === 'https:';
@@ -420,7 +449,9 @@ class HttpClient {
// we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process
// http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options
// we have to cast it to any and change it directly // we have to cast it to any and change it directly
agent.options = Object.assign(agent.options || {}, { rejectUnauthorized: false }); agent.options = Object.assign(agent.options || {}, {
rejectUnauthorized: false
});
} }
return agent; return agent;
} }
@@ -481,7 +512,7 @@ class HttpClient {
msg = contents; msg = contents;
} }
else { else {
msg = "Failed request: (" + statusCode + ")"; msg = 'Failed request: (' + statusCode + ')';
} }
let err = new Error(msg); let err = new Error(msg);
// attach statusCode and body obj (if available) to the error object // attach statusCode and body obj (if available) to the error object
+2 -2
View File
@@ -1,6 +1,6 @@
/// <reference types="node" /> /// <reference types="node" />
import http = require("http"); import http = require('http');
import url = require("url"); import url = require('url');
export interface IHeaders { export interface IHeaders {
[key: string]: any; [key: string]: any;
} }
-1
View File
@@ -1,3 +1,2 @@
"use strict"; "use strict";
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
;
+11 -7
View File
@@ -1,11 +1,14 @@
{ {
"name": "@actions/http-client", "name": "@actions/http-client",
"version": "1.0.6", "version": "1.0.8",
"description": "Actions Http Client", "description": "Actions Http Client",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {
"build": "rm -Rf ./_out && tsc && cp package*.json ./_out && cp *.md ./_out && cp LICENSE ./_out && cp actions.png ./_out", "build": "rm -Rf ./_out && tsc && cp package*.json ./_out && cp *.md ./_out && cp LICENSE ./_out && cp actions.png ./_out",
"test": "jest" "test": "jest",
"format": "prettier --write *.ts && prettier --write **/*.ts",
"format-check": "prettier --check *.ts && prettier --check **/*.ts",
"audit-check": "npm audit --audit-level=moderate"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
@@ -22,12 +25,13 @@
}, },
"homepage": "https://github.com/actions/http-client#readme", "homepage": "https://github.com/actions/http-client#readme",
"devDependencies": { "devDependencies": {
"@types/jest": "^24.0.25", "@types/jest": "^25.1.4",
"@types/node": "^12.12.24", "@types/node": "^12.12.31",
"jest": "^24.9.0", "jest": "^25.1.0",
"prettier": "^2.0.4",
"proxy": "^1.0.1", "proxy": "^1.0.1",
"ts-jest": "^24.3.0", "ts-jest": "^25.2.1",
"typescript": "^3.7.4" "typescript": "^3.8.3"
}, },
"dependencies": { "dependencies": {
"tunnel": "0.0.6" "tunnel": "0.0.6"
+7 -6
View File
@@ -9,12 +9,10 @@ function getProxyUrl(reqUrl) {
} }
let proxyVar; let proxyVar;
if (usingSsl) { if (usingSsl) {
proxyVar = process.env["https_proxy"] || proxyVar = process.env['https_proxy'] || process.env['HTTPS_PROXY'];
process.env["HTTPS_PROXY"];
} }
else { else {
proxyVar = process.env["http_proxy"] || proxyVar = process.env['http_proxy'] || process.env['HTTP_PROXY'];
process.env["HTTP_PROXY"];
} }
if (proxyVar) { if (proxyVar) {
proxyUrl = url.parse(proxyVar); proxyUrl = url.parse(proxyVar);
@@ -26,7 +24,7 @@ function checkBypass(reqUrl) {
if (!reqUrl.hostname) { if (!reqUrl.hostname) {
return false; return false;
} }
let noProxy = process.env["no_proxy"] || process.env["NO_PROXY"] || ''; let noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || '';
if (!noProxy) { if (!noProxy) {
return false; return false;
} }
@@ -47,7 +45,10 @@ function checkBypass(reqUrl) {
upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`); upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`);
} }
// Compare request host against noproxy // Compare request host against noproxy
for (let upperNoProxyItem of noProxy.split(',').map(x => x.trim().toUpperCase()).filter(x => x)) { for (let upperNoProxyItem of noProxy
.split(',')
.map(x => x.trim().toUpperCase())
.filter(x => x)) {
if (upperReqHosts.some(x => x === upperNoProxyItem)) { if (upperReqHosts.some(x => x === upperNoProxyItem)) {
return true; return true;
} }
+4
View File
@@ -29,6 +29,10 @@ if (process.platform === 'win32') {
const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-win-x64.7z'); const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-win-x64.7z');
const node12ExtractedFolder = await tc.extract7z(node12Path, 'path/to/extract/to'); const node12ExtractedFolder = await tc.extract7z(node12Path, 'path/to/extract/to');
} }
else if (process.platform === 'darwin') {
const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0.pkg');
const node12ExtractedFolder = await tc.extractXar(node12Path, 'path/to/extract/to');
}
else { else {
const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-linux-x64.tar.gz'); const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-linux-x64.tar.gz');
const node12ExtractedFolder = await tc.extractTar(node12Path, 'path/to/extract/to'); const node12ExtractedFolder = await tc.extractTar(node12Path, 'path/to/extract/to');
+16
View File
@@ -0,0 +1,16 @@
export interface IToolReleaseFile {
filename: string;
platform: string;
platform_version?: string;
arch: string;
download_url: string;
}
export interface IToolRelease {
version: string;
stable: boolean;
release_url: string;
files: IToolReleaseFile[];
}
export declare function _findMatch(versionSpec: string, stable: boolean, candidates: IToolRelease[], archFilter: string): Promise<IToolRelease | undefined>;
export declare function _getOsVersion(): string;
export declare function _readLinuxVersionFile(): string;
+106
View File
@@ -0,0 +1,106 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
const semver = __importStar(require("semver"));
const core_1 = require("@actions/core");
// needs to be require for core node modules to be mocked
/* eslint @typescript-eslint/no-require-imports: 0 */
const os = require("os");
const cp = require("child_process");
const fs = require("fs");
function _findMatch(versionSpec, stable, candidates, archFilter) {
return __awaiter(this, void 0, void 0, function* () {
const platFilter = os.platform();
let result;
let match;
let file;
for (const candidate of candidates) {
const version = candidate.version;
core_1.debug(`check ${version} satisfies ${versionSpec}`);
if (semver.satisfies(version, versionSpec) &&
(!stable || candidate.stable === stable)) {
file = candidate.files.find(item => {
core_1.debug(`${item.arch}===${archFilter} && ${item.platform}===${platFilter}`);
let chk = item.arch === archFilter && item.platform === platFilter;
if (chk && item.platform_version) {
const osVersion = module.exports._getOsVersion();
if (osVersion === item.platform_version) {
chk = true;
}
else {
chk = semver.satisfies(osVersion, item.platform_version);
}
}
return chk;
});
if (file) {
core_1.debug(`matched ${candidate.version}`);
match = candidate;
break;
}
}
}
if (match && file) {
// clone since we're mutating the file list to be only the file that matches
result = Object.assign({}, match);
result.files = [file];
}
return result;
});
}
exports._findMatch = _findMatch;
function _getOsVersion() {
// TODO: add windows and other linux, arm variants
// right now filtering on version is only an ubuntu and macos scenario for tools we build for hosted (python)
const plat = os.platform();
let version = '';
if (plat === 'darwin') {
version = cp.execSync('sw_vers -productVersion').toString();
}
else if (plat === 'linux') {
// lsb_release process not in some containers, readfile
// Run cat /etc/lsb-release
// DISTRIB_ID=Ubuntu
// DISTRIB_RELEASE=18.04
// DISTRIB_CODENAME=bionic
// DISTRIB_DESCRIPTION="Ubuntu 18.04.4 LTS"
const lsbContents = module.exports._readLinuxVersionFile();
if (lsbContents) {
const lines = lsbContents.split('\n');
for (const line of lines) {
const parts = line.split('=');
if (parts.length === 2 && parts[0].trim() === 'DISTRIB_RELEASE') {
version = parts[1].trim();
break;
}
}
}
}
return version;
}
exports._getOsVersion = _getOsVersion;
function _readLinuxVersionFile() {
const lsbFile = '/etc/lsb-release';
let contents = '';
if (fs.existsSync(lsbFile)) {
contents = fs.readFileSync(lsbFile).toString();
}
return contents;
}
exports._readLinuxVersionFile = _readLinuxVersionFile;
//# sourceMappingURL=manifest.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,+CAAgC;AAChC,wCAAmC;AAEnC,yDAAyD;AACzD,qDAAqD;AAErD,yBAAyB;AACzB,oCAAoC;AACpC,yBAAyB;AAqDzB,SAAsB,UAAU,CAC9B,WAAmB,EACnB,MAAe,EACf,UAA0B,EAC1B,UAAkB;;QAElB,MAAM,UAAU,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAA;QAEhC,IAAI,MAAgC,CAAA;QACpC,IAAI,KAA+B,CAAA;QAEnC,IAAI,IAAkC,CAAA;QACtC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;YAClC,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAA;YAEjC,YAAK,CAAC,SAAS,OAAO,cAAc,WAAW,EAAE,CAAC,CAAA;YAClD,IACE,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,WAAW,CAAC;gBACtC,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,KAAK,MAAM,CAAC,EACxC;gBACA,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBACjC,YAAK,CACH,GAAG,IAAI,CAAC,IAAI,MAAM,UAAU,OAAO,IAAI,CAAC,QAAQ,MAAM,UAAU,EAAE,CACnE,CAAA;oBAED,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU,CAAA;oBAClE,IAAI,GAAG,IAAI,IAAI,CAAC,gBAAgB,EAAE;wBAChC,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,CAAA;wBAEhD,IAAI,SAAS,KAAK,IAAI,CAAC,gBAAgB,EAAE;4BACvC,GAAG,GAAG,IAAI,CAAA;yBACX;6BAAM;4BACL,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;yBACzD;qBACF;oBAED,OAAO,GAAG,CAAA;gBACZ,CAAC,CAAC,CAAA;gBAEF,IAAI,IAAI,EAAE;oBACR,YAAK,CAAC,WAAW,SAAS,CAAC,OAAO,EAAE,CAAC,CAAA;oBACrC,KAAK,GAAG,SAAS,CAAA;oBACjB,MAAK;iBACN;aACF;SACF;QAED,IAAI,KAAK,IAAI,IAAI,EAAE;YACjB,4EAA4E;YAC5E,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;YACjC,MAAM,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAA;SACtB;QAED,OAAO,MAAM,CAAA;IACf,CAAC;CAAA;AAtDD,gCAsDC;AAED,SAAgB,aAAa;IAC3B,kDAAkD;IAClD,6GAA6G;IAC7G,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAA;IAC1B,IAAI,OAAO,GAAG,EAAE,CAAA;IAEhB,IAAI,IAAI,KAAK,QAAQ,EAAE;QACrB,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,QAAQ,EAAE,CAAA;KAC5D;SAAM,IAAI,IAAI,KAAK,OAAO,EAAE;QAC3B,uDAAuD;QACvD,2BAA2B;QAC3B,oBAAoB;QACpB,wBAAwB;QACxB,0BAA0B;QAC1B,2CAA2C;QAC3C,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAA;QAC1D,IAAI,WAAW,EAAE;YACf,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YACrC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;gBACxB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;gBAC7B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,iBAAiB,EAAE;oBAC/D,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;oBACzB,MAAK;iBACN;aACF;SACF;KACF;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AA7BD,sCA6BC;AAED,SAAgB,qBAAqB;IACnC,MAAM,OAAO,GAAG,kBAAkB,CAAA;IAClC,IAAI,QAAQ,GAAG,EAAE,CAAA;IAEjB,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;QAC1B,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAA;KAC/C;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC;AATD,sDASC"}
+17 -2
View File
@@ -1,3 +1,4 @@
import * as mm from './manifest';
export declare class HTTPError extends Error { export declare class HTTPError extends Error {
readonly httpStatusCode: number | undefined; readonly httpStatusCode: number | undefined;
constructor(httpStatusCode: number | undefined); constructor(httpStatusCode: number | undefined);
@@ -7,9 +8,10 @@ export declare class HTTPError extends Error {
* *
* @param url url of tool to download * @param url url of tool to download
* @param dest path to download tool * @param dest path to download tool
* @param auth authorization header
* @returns path to downloaded tool * @returns path to downloaded tool
*/ */
export declare function downloadTool(url: string, dest?: string): Promise<string>; export declare function downloadTool(url: string, dest?: string, auth?: string): Promise<string>;
/** /**
* Extract a .7z file * Extract a .7z file
* *
@@ -34,7 +36,16 @@ export declare function extract7z(file: string, dest?: string, _7zPath?: string)
* @param flags flags for the tar command to use for extraction. Defaults to 'xz' (extracting gzipped tars). Optional. * @param flags flags for the tar command to use for extraction. Defaults to 'xz' (extracting gzipped tars). Optional.
* @returns path to the destination directory * @returns path to the destination directory
*/ */
export declare function extractTar(file: string, dest?: string, flags?: string): Promise<string>; export declare function extractTar(file: string, dest?: string, flags?: string | string[]): Promise<string>;
/**
* Extract a xar compatible archive
*
* @param file path to the archive
* @param dest destination directory. Optional.
* @param flags flags for the xar. Optional.
* @returns path to the destination directory
*/
export declare function extractXar(file: string, dest?: string, flags?: string | string[]): Promise<string>;
/** /**
* Extract a zip * Extract a zip
* *
@@ -78,3 +89,7 @@ export declare function find(toolName: string, versionSpec: string, arch?: strin
* @param arch optional arch. defaults to arch of computer * @param arch optional arch. defaults to arch of computer
*/ */
export declare function findAllVersions(toolName: string, arch?: string): string[]; export declare function findAllVersions(toolName: string, arch?: string): string[];
export declare type IToolRelease = mm.IToolRelease;
export declare type IToolReleaseFile = mm.IToolReleaseFile;
export declare function getManifestFromRepo(owner: string, repo: string, auth?: string, branch?: string): Promise<IToolRelease[]>;
export declare function findFromManifest(versionSpec: string, stable: boolean, manifest: IToolRelease[], archFilter?: string): Promise<IToolRelease | undefined>;
+115 -9
View File
@@ -22,6 +22,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
const core = __importStar(require("@actions/core")); const core = __importStar(require("@actions/core"));
const io = __importStar(require("@actions/io")); const io = __importStar(require("@actions/io"));
const fs = __importStar(require("fs")); const fs = __importStar(require("fs"));
const mm = __importStar(require("./manifest"));
const os = __importStar(require("os")); const os = __importStar(require("os"));
const path = __importStar(require("path")); const path = __importStar(require("path"));
const httpm = __importStar(require("@actions/http-client")); const httpm = __importStar(require("@actions/http-client"));
@@ -41,15 +42,17 @@ class HTTPError extends Error {
} }
exports.HTTPError = HTTPError; exports.HTTPError = HTTPError;
const IS_WINDOWS = process.platform === 'win32'; const IS_WINDOWS = process.platform === 'win32';
const IS_MAC = process.platform === 'darwin';
const userAgent = 'actions/tool-cache'; const userAgent = 'actions/tool-cache';
/** /**
* Download a tool from an url and stream it into a file * Download a tool from an url and stream it into a file
* *
* @param url url of tool to download * @param url url of tool to download
* @param dest path to download tool * @param dest path to download tool
* @param auth authorization header
* @returns path to downloaded tool * @returns path to downloaded tool
*/ */
function downloadTool(url, dest) { function downloadTool(url, dest, auth) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
dest = dest || path.join(_getTempDirectory(), v4_1.default()); dest = dest || path.join(_getTempDirectory(), v4_1.default());
yield io.mkdirP(path.dirname(dest)); yield io.mkdirP(path.dirname(dest));
@@ -60,7 +63,7 @@ function downloadTool(url, dest) {
const maxSeconds = _getGlobal('TEST_DOWNLOAD_TOOL_RETRY_MAX_SECONDS', 20); const maxSeconds = _getGlobal('TEST_DOWNLOAD_TOOL_RETRY_MAX_SECONDS', 20);
const retryHelper = new retry_helper_1.RetryHelper(maxAttempts, minSeconds, maxSeconds); const retryHelper = new retry_helper_1.RetryHelper(maxAttempts, minSeconds, maxSeconds);
return yield retryHelper.execute(() => __awaiter(this, void 0, void 0, function* () { return yield retryHelper.execute(() => __awaiter(this, void 0, void 0, function* () {
return yield downloadToolAttempt(url, dest || ''); return yield downloadToolAttempt(url, dest || '', auth);
}), (err) => { }), (err) => {
if (err instanceof HTTPError && err.httpStatusCode) { if (err instanceof HTTPError && err.httpStatusCode) {
// Don't retry anything less than 500, except 408 Request Timeout and 429 Too Many Requests // Don't retry anything less than 500, except 408 Request Timeout and 429 Too Many Requests
@@ -76,7 +79,7 @@ function downloadTool(url, dest) {
}); });
} }
exports.downloadTool = downloadTool; exports.downloadTool = downloadTool;
function downloadToolAttempt(url, dest) { function downloadToolAttempt(url, dest, auth) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
if (fs.existsSync(dest)) { if (fs.existsSync(dest)) {
throw new Error(`Destination file path ${dest} already exists`); throw new Error(`Destination file path ${dest} already exists`);
@@ -85,7 +88,14 @@ function downloadToolAttempt(url, dest) {
const http = new httpm.HttpClient(userAgent, [], { const http = new httpm.HttpClient(userAgent, [], {
allowRetries: false allowRetries: false
}); });
const response = yield http.get(url); let headers;
if (auth) {
core.debug('set auth');
headers = {
authorization: auth
};
}
const response = yield http.get(url, headers);
if (response.message.statusCode !== 200) { if (response.message.statusCode !== 200) {
const err = new HTTPError(response.message.statusCode); const err = new HTTPError(response.message.statusCode);
core.debug(`Failed to download from "${url}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})`); core.debug(`Failed to download from "${url}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})`);
@@ -140,9 +150,10 @@ function extract7z(file, dest, _7zPath) {
process.chdir(dest); process.chdir(dest);
if (_7zPath) { if (_7zPath) {
try { try {
const logLevel = core.isDebug() ? '-bb1' : '-bb0';
const args = [ const args = [
'x', 'x',
'-bb1', logLevel,
'-bd', '-bd',
'-sccUTF-8', '-sccUTF-8',
file file
@@ -218,7 +229,16 @@ function extractTar(file, dest, flags = 'xz') {
core.debug(versionOutput.trim()); core.debug(versionOutput.trim());
const isGnuTar = versionOutput.toUpperCase().includes('GNU TAR'); const isGnuTar = versionOutput.toUpperCase().includes('GNU TAR');
// Initialize args // Initialize args
const args = [flags]; let args;
if (flags instanceof Array) {
args = flags;
}
else {
args = [flags];
}
if (core.isDebug() && !flags.includes('v')) {
args.push('-v');
}
let destArg = dest; let destArg = dest;
let fileArg = file; let fileArg = file;
if (IS_WINDOWS && isGnuTar) { if (IS_WINDOWS && isGnuTar) {
@@ -238,6 +258,36 @@ function extractTar(file, dest, flags = 'xz') {
}); });
} }
exports.extractTar = extractTar; exports.extractTar = extractTar;
/**
* Extract a xar compatible archive
*
* @param file path to the archive
* @param dest destination directory. Optional.
* @param flags flags for the xar. Optional.
* @returns path to the destination directory
*/
function extractXar(file, dest, flags = []) {
return __awaiter(this, void 0, void 0, function* () {
assert_1.ok(IS_MAC, 'extractXar() not supported on current OS');
assert_1.ok(file, 'parameter "file" is required');
dest = yield _createExtractFolder(dest);
let args;
if (flags instanceof Array) {
args = flags;
}
else {
args = [flags];
}
args.push('-x', '-C', dest, '-f', file);
if (core.isDebug()) {
args.push('-v');
}
const xarPath = yield io.which('xar', true);
yield exec_1.exec(`"${xarPath}"`, _unique(args));
return dest;
});
}
exports.extractXar = extractXar;
/** /**
* Extract a zip * Extract a zip
* *
@@ -268,7 +318,7 @@ function extractZipWin(file, dest) {
const escapedDest = dest.replace(/'/g, "''").replace(/"|\n|\r/g, ''); const escapedDest = dest.replace(/'/g, "''").replace(/"|\n|\r/g, '');
const command = `$ErrorActionPreference = 'Stop' ; try { Add-Type -AssemblyName System.IO.Compression.FileSystem } catch { } ; [System.IO.Compression.ZipFile]::ExtractToDirectory('${escapedFile}', '${escapedDest}')`; const command = `$ErrorActionPreference = 'Stop' ; try { Add-Type -AssemblyName System.IO.Compression.FileSystem } catch { } ; [System.IO.Compression.ZipFile]::ExtractToDirectory('${escapedFile}', '${escapedDest}')`;
// run powershell // run powershell
const powershellPath = yield io.which('powershell'); const powershellPath = yield io.which('powershell', true);
const args = [ const args = [
'-NoLogo', '-NoLogo',
'-Sta', '-Sta',
@@ -284,8 +334,12 @@ function extractZipWin(file, dest) {
} }
function extractZipNix(file, dest) { function extractZipNix(file, dest) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
const unzipPath = yield io.which('unzip'); const unzipPath = yield io.which('unzip', true);
yield exec_1.exec(`"${unzipPath}"`, [file], { cwd: dest }); const args = [file];
if (!core.isDebug()) {
args.unshift('-q');
}
yield exec_1.exec(`"${unzipPath}"`, args, { cwd: dest });
}); });
} }
/** /**
@@ -413,6 +467,51 @@ function findAllVersions(toolName, arch) {
return versions; return versions;
} }
exports.findAllVersions = findAllVersions; exports.findAllVersions = findAllVersions;
function getManifestFromRepo(owner, repo, auth, branch = 'master') {
return __awaiter(this, void 0, void 0, function* () {
let releases = [];
const treeUrl = `https://api.github.com/repos/${owner}/${repo}/git/trees/${branch}`;
const http = new httpm.HttpClient('tool-cache');
const headers = {};
if (auth) {
core.debug('set auth');
headers.authorization = auth;
}
const response = yield http.getJson(treeUrl, headers);
if (!response.result) {
return releases;
}
let manifestUrl = '';
for (const item of response.result.tree) {
if (item.path === 'versions-manifest.json') {
manifestUrl = item.url;
break;
}
}
headers['accept'] = 'application/vnd.github.VERSION.raw';
let versionsRaw = yield (yield http.get(manifestUrl, headers)).readBody();
if (versionsRaw) {
// shouldn't be needed but protects against invalid json saved with BOM
versionsRaw = versionsRaw.replace(/^\uFEFF/, '');
try {
releases = JSON.parse(versionsRaw);
}
catch (_a) {
core.debug('Invalid json');
}
}
return releases;
});
}
exports.getManifestFromRepo = getManifestFromRepo;
function findFromManifest(versionSpec, stable, manifest, archFilter = os.arch()) {
return __awaiter(this, void 0, void 0, function* () {
// wrap the internal impl
const match = yield mm._findMatch(versionSpec, stable, manifest, archFilter);
return match;
});
}
exports.findFromManifest = findFromManifest;
function _createExtractFolder(dest) { function _createExtractFolder(dest) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
if (!dest) { if (!dest) {
@@ -497,4 +596,11 @@ function _getGlobal(key, defaultValue) {
/* eslint-enable @typescript-eslint/no-explicit-any */ /* eslint-enable @typescript-eslint/no-explicit-any */
return value !== undefined ? value : defaultValue; return value !== undefined ? value : defaultValue;
} }
/**
* Returns an array of unique values.
* @param values Values to make unique.
*/
function _unique(values) {
return Array.from(new Set(values));
}
//# sourceMappingURL=tool-cache.js.map //# sourceMappingURL=tool-cache.js.map
File diff suppressed because one or more lines are too long
+5 -5
View File
@@ -1,13 +1,13 @@
{ {
"name": "@actions/tool-cache", "name": "@actions/tool-cache",
"version": "1.3.3", "version": "1.6.0",
"description": "Actions tool-cache lib", "description": "Actions tool-cache lib",
"keywords": [ "keywords": [
"github", "github",
"actions", "actions",
"exec" "exec"
], ],
"homepage": "https://github.com/actions/toolkit/tree/master/packages/exec", "homepage": "https://github.com/actions/toolkit/tree/master/packages/tool-cache",
"license": "MIT", "license": "MIT",
"main": "lib/tool-cache.js", "main": "lib/tool-cache.js",
"types": "lib/tool-cache.d.ts", "types": "lib/tool-cache.d.ts",
@@ -28,7 +28,7 @@
"directory": "packages/tool-cache" "directory": "packages/tool-cache"
}, },
"scripts": { "scripts": {
"audit-moderate": "npm install && npm audit --audit-level=moderate", "audit-moderate": "npm install && npm audit --json --audit-level=moderate > audit.json",
"test": "echo \"Error: run tests from root\" && exit 1", "test": "echo \"Error: run tests from root\" && exit 1",
"tsc": "tsc" "tsc": "tsc"
}, },
@@ -36,9 +36,9 @@
"url": "https://github.com/actions/toolkit/issues" "url": "https://github.com/actions/toolkit/issues"
}, },
"dependencies": { "dependencies": {
"@actions/core": "^1.2.0", "@actions/core": "^1.2.3",
"@actions/exec": "^1.0.0", "@actions/exec": "^1.0.0",
"@actions/http-client": "^1.0.3", "@actions/http-client": "^1.0.8",
"@actions/io": "^1.0.1", "@actions/io": "^1.0.1",
"semver": "^6.1.0", "semver": "^6.1.0",
"uuid": "^3.3.2" "uuid": "^3.3.2"
+26
View File
@@ -1,5 +1,31 @@
# changes log # changes log
## 7.3.0
* Add `subset(r1, r2)` method to determine if `r1` range is entirely
contained by `r2` range.
## 7.2.3
* Fix handling of `includePrelease` mode where version ranges like `1.0.0 -
2.0.0` would include `3.0.0-pre` and not `1.0.0-pre`.
## 7.2.2
* Fix bug where `2.0.0-pre` would be included in `^1.0.0` if
`includePrerelease` was set to true.
## 7.2.0
* Add `simplifyRange` method to attempt to generate a more human-readable
range expression that is equivalent to a supplied range, for a given set
of versions.
## 7.1.2
* Remove fancy lazy-loading logic, as it was causing problems for webpack
users.
## 7.1.0 ## 7.1.0
* Add `require('semver/preload')` to load the entire module without using * Add `require('semver/preload')` to load the entire module without using
+35 -23
View File
@@ -78,6 +78,8 @@ const semverOutside = require('semver/ranges/outside')
const semverGtr = require('semver/ranges/gtr') const semverGtr = require('semver/ranges/gtr')
const semverLtr = require('semver/ranges/ltr') const semverLtr = require('semver/ranges/ltr')
const semverIntersects = require('semver/ranges/intersects') const semverIntersects = require('semver/ranges/intersects')
const simplifyRange = require('semver/ranges/simplify')
const rangeSubset = require('semver/ranges/subset')
``` ```
As a command-line utility: As a command-line utility:
@@ -254,8 +256,8 @@ inclusive range, then all versions that start with the supplied parts
of the tuple are accepted, but nothing that would be greater than the of the tuple are accepted, but nothing that would be greater than the
provided tuple parts. provided tuple parts.
* `1.2.3 - 2.3` := `>=1.2.3 <2.4.0` * `1.2.3 - 2.3` := `>=1.2.3 <2.4.0-0`
* `1.2.3 - 2` := `>=1.2.3 <3.0.0` * `1.2.3 - 2` := `>=1.2.3 <3.0.0-0`
#### X-Ranges `1.2.x` `1.X` `1.2.*` `*` #### X-Ranges `1.2.x` `1.X` `1.2.*` `*`
@@ -263,28 +265,28 @@ Any of `X`, `x`, or `*` may be used to "stand in" for one of the
numeric values in the `[major, minor, patch]` tuple. numeric values in the `[major, minor, patch]` tuple.
* `*` := `>=0.0.0` (Any version satisfies) * `*` := `>=0.0.0` (Any version satisfies)
* `1.x` := `>=1.0.0 <2.0.0` (Matching major version) * `1.x` := `>=1.0.0 <2.0.0-0` (Matching major version)
* `1.2.x` := `>=1.2.0 <1.3.0` (Matching major and minor versions) * `1.2.x` := `>=1.2.0 <1.3.0-0` (Matching major and minor versions)
A partial version range is treated as an X-Range, so the special A partial version range is treated as an X-Range, so the special
character is in fact optional. character is in fact optional.
* `""` (empty string) := `*` := `>=0.0.0` * `""` (empty string) := `*` := `>=0.0.0`
* `1` := `1.x.x` := `>=1.0.0 <2.0.0` * `1` := `1.x.x` := `>=1.0.0 <2.0.0-0`
* `1.2` := `1.2.x` := `>=1.2.0 <1.3.0` * `1.2` := `1.2.x` := `>=1.2.0 <1.3.0-0`
#### Tilde Ranges `~1.2.3` `~1.2` `~1` #### Tilde Ranges `~1.2.3` `~1.2` `~1`
Allows patch-level changes if a minor version is specified on the Allows patch-level changes if a minor version is specified on the
comparator. Allows minor-level changes if not. comparator. Allows minor-level changes if not.
* `~1.2.3` := `>=1.2.3 <1.(2+1).0` := `>=1.2.3 <1.3.0` * `~1.2.3` := `>=1.2.3 <1.(2+1).0` := `>=1.2.3 <1.3.0-0`
* `~1.2` := `>=1.2.0 <1.(2+1).0` := `>=1.2.0 <1.3.0` (Same as `1.2.x`) * `~1.2` := `>=1.2.0 <1.(2+1).0` := `>=1.2.0 <1.3.0-0` (Same as `1.2.x`)
* `~1` := `>=1.0.0 <(1+1).0.0` := `>=1.0.0 <2.0.0` (Same as `1.x`) * `~1` := `>=1.0.0 <(1+1).0.0` := `>=1.0.0 <2.0.0-0` (Same as `1.x`)
* `~0.2.3` := `>=0.2.3 <0.(2+1).0` := `>=0.2.3 <0.3.0` * `~0.2.3` := `>=0.2.3 <0.(2+1).0` := `>=0.2.3 <0.3.0-0`
* `~0.2` := `>=0.2.0 <0.(2+1).0` := `>=0.2.0 <0.3.0` (Same as `0.2.x`) * `~0.2` := `>=0.2.0 <0.(2+1).0` := `>=0.2.0 <0.3.0-0` (Same as `0.2.x`)
* `~0` := `>=0.0.0 <(0+1).0.0` := `>=0.0.0 <1.0.0` (Same as `0.x`) * `~0` := `>=0.0.0 <(0+1).0.0` := `>=0.0.0 <1.0.0-0` (Same as `0.x`)
* `~1.2.3-beta.2` := `>=1.2.3-beta.2 <1.3.0` Note that prereleases in * `~1.2.3-beta.2` := `>=1.2.3-beta.2 <1.3.0-0` Note that prereleases in
the `1.2.3` version will be allowed, if they are greater than or the `1.2.3` version will be allowed, if they are greater than or
equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but
`1.2.4-beta.2` would not, because it is a prerelease of a `1.2.4-beta.2` would not, because it is a prerelease of a
@@ -306,15 +308,15 @@ However, it presumes that there will *not* be breaking changes between
`0.2.4` and `0.2.5`. It allows for changes that are presumed to be `0.2.4` and `0.2.5`. It allows for changes that are presumed to be
additive (but non-breaking), according to commonly observed practices. additive (but non-breaking), according to commonly observed practices.
* `^1.2.3` := `>=1.2.3 <2.0.0` * `^1.2.3` := `>=1.2.3 <2.0.0-0`
* `^0.2.3` := `>=0.2.3 <0.3.0` * `^0.2.3` := `>=0.2.3 <0.3.0-0`
* `^0.0.3` := `>=0.0.3 <0.0.4` * `^0.0.3` := `>=0.0.3 <0.0.4-0`
* `^1.2.3-beta.2` := `>=1.2.3-beta.2 <2.0.0` Note that prereleases in * `^1.2.3-beta.2` := `>=1.2.3-beta.2 <2.0.0-0` Note that prereleases in
the `1.2.3` version will be allowed, if they are greater than or the `1.2.3` version will be allowed, if they are greater than or
equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but
`1.2.4-beta.2` would not, because it is a prerelease of a `1.2.4-beta.2` would not, because it is a prerelease of a
different `[major, minor, patch]` tuple. different `[major, minor, patch]` tuple.
* `^0.0.3-beta` := `>=0.0.3-beta <0.0.4` Note that prereleases in the * `^0.0.3-beta` := `>=0.0.3-beta <0.0.4-0` Note that prereleases in the
`0.0.3` version *only* will be allowed, if they are greater than or `0.0.3` version *only* will be allowed, if they are greater than or
equal to `beta`. So, `0.0.3-pr.2` would be allowed. equal to `beta`. So, `0.0.3-pr.2` would be allowed.
@@ -322,16 +324,16 @@ When parsing caret ranges, a missing `patch` value desugars to the
number `0`, but will allow flexibility within that value, even if the number `0`, but will allow flexibility within that value, even if the
major and minor versions are both `0`. major and minor versions are both `0`.
* `^1.2.x` := `>=1.2.0 <2.0.0` * `^1.2.x` := `>=1.2.0 <2.0.0-0`
* `^0.0.x` := `>=0.0.0 <0.1.0` * `^0.0.x` := `>=0.0.0 <0.1.0-0`
* `^0.0` := `>=0.0.0 <0.1.0` * `^0.0` := `>=0.0.0 <0.1.0-0`
A missing `minor` and `patch` values will desugar to zero, but also A missing `minor` and `patch` values will desugar to zero, but also
allow flexibility within those values, even if the major version is allow flexibility within those values, even if the major version is
zero. zero.
* `^1.x` := `>=1.0.0 <2.0.0` * `^1.x` := `>=1.0.0 <2.0.0-0`
* `^0.x` := `>=0.0.0 <1.0.0` * `^0.x` := `>=0.0.0 <1.0.0-0`
### Range Grammar ### Range Grammar
@@ -446,6 +448,16 @@ strings that they parse.
`hilo` argument must be either the string `'>'` or `'<'`. (This is `hilo` argument must be either the string `'>'` or `'<'`. (This is
the function called by `gtr` and `ltr`.) the function called by `gtr` and `ltr`.)
* `intersects(range)`: Return true if any of the ranges comparators intersect * `intersects(range)`: Return true if any of the ranges comparators intersect
* `simplifyRange(versions, range)`: Return a "simplified" range that
matches the same items in `versions` list as the range specified. Note
that it does *not* guarantee that it would match the same versions in all
cases, only for the set of versions provided. This is useful when
generating ranges by joining together multiple versions with `||`
programmatically, to provide the user with something a bit more
ergonomic. If the provided range is shorter in string-length than the
generated range, then that is returned.
* `subset(subRange, superRange)`: Return `true` if the `subRange` range is
entirely contained by the `superRange` range.
Note that, since ranges may be non-contiguous, a version might not be Note that, since ranges may be non-contiguous, a version might not be
greater than a range, less than a range, *or* satisfy a range! For greater than a range, less than a range, *or* satisfy a range! For
+51 -36
View File
@@ -68,7 +68,7 @@ class Range {
range = range.trim() range = range.trim()
// `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`
const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE] const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]
range = range.replace(hr, hyphenReplace) range = range.replace(hr, hyphenReplace(this.options.includePrerelease))
debug('hyphen replace', range) debug('hyphen replace', range)
// `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`
range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace) range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)
@@ -92,6 +92,7 @@ class Range {
.map(comp => parseComparator(comp, this.options)) .map(comp => parseComparator(comp, this.options))
.join(' ') .join(' ')
.split(/\s+/) .split(/\s+/)
.map(comp => replaceGTE0(comp, this.options))
// in loose mode, throw out any that are not valid comparators // in loose mode, throw out any that are not valid comparators
.filter(this.options.loose ? comp => !!comp.match(compRe) : () => true) .filter(this.options.loose ? comp => !!comp.match(compRe) : () => true)
.map(comp => new Comparator(comp, this.options)) .map(comp => new Comparator(comp, this.options))
@@ -191,11 +192,11 @@ const parseComparator = (comp, options) => {
const isX = id => !id || id.toLowerCase() === 'x' || id === '*' const isX = id => !id || id.toLowerCase() === 'x' || id === '*'
// ~, ~> --> * (any, kinda silly) // ~, ~> --> * (any, kinda silly)
// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0 // ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0
// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0 // ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0
// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0 // ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0
// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0 // ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0
// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0 // ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0
const replaceTildes = (comp, options) => const replaceTildes = (comp, options) =>
comp.trim().split(/\s+/).map((comp) => { comp.trim().split(/\s+/).map((comp) => {
return replaceTilde(comp, options) return replaceTilde(comp, options)
@@ -210,18 +211,18 @@ const replaceTilde = (comp, options) => {
if (isX(M)) { if (isX(M)) {
ret = '' ret = ''
} else if (isX(m)) { } else if (isX(m)) {
ret = `>=${M}.0.0 <${+M + 1}.0.0` ret = `>=${M}.0.0 <${+M + 1}.0.0-0`
} else if (isX(p)) { } else if (isX(p)) {
// ~1.2 == >=1.2.0 <1.3.0 // ~1.2 == >=1.2.0 <1.3.0-0
ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0` ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`
} else if (pr) { } else if (pr) {
debug('replaceTilde pr', pr) debug('replaceTilde pr', pr)
ret = `>=${M}.${m}.${p}-${pr ret = `>=${M}.${m}.${p}-${pr
} <${M}.${+m + 1}.0` } <${M}.${+m + 1}.0-0`
} else { } else {
// ~1.2.3 == >=1.2.3 <1.3.0 // ~1.2.3 == >=1.2.3 <1.3.0-0
ret = `>=${M}.${m}.${p ret = `>=${M}.${m}.${p
} <${M}.${+m + 1}.0` } <${M}.${+m + 1}.0-0`
} }
debug('tilde return', ret) debug('tilde return', ret)
@@ -230,11 +231,11 @@ const replaceTilde = (comp, options) => {
} }
// ^ --> * (any, kinda silly) // ^ --> * (any, kinda silly)
// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0 // ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0
// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0 // ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0
// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0 // ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0
// ^1.2.3 --> >=1.2.3 <2.0.0 // ^1.2.3 --> >=1.2.3 <2.0.0-0
// ^1.2.0 --> >=1.2.0 <2.0.0 // ^1.2.0 --> >=1.2.0 <2.0.0-0
const replaceCarets = (comp, options) => const replaceCarets = (comp, options) =>
comp.trim().split(/\s+/).map((comp) => { comp.trim().split(/\s+/).map((comp) => {
return replaceCaret(comp, options) return replaceCaret(comp, options)
@@ -243,6 +244,7 @@ const replaceCarets = (comp, options) =>
const replaceCaret = (comp, options) => { const replaceCaret = (comp, options) => {
debug('caret', comp, options) debug('caret', comp, options)
const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET] const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]
const z = options.includePrerelease ? '-0' : ''
return comp.replace(r, (_, M, m, p, pr) => { return comp.replace(r, (_, M, m, p, pr) => {
debug('caret', comp, _, M, m, p, pr) debug('caret', comp, _, M, m, p, pr)
let ret let ret
@@ -250,40 +252,40 @@ const replaceCaret = (comp, options) => {
if (isX(M)) { if (isX(M)) {
ret = '' ret = ''
} else if (isX(m)) { } else if (isX(m)) {
ret = `>=${M}.0.0 <${+M + 1}.0.0` ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`
} else if (isX(p)) { } else if (isX(p)) {
if (M === '0') { if (M === '0') {
ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0` ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`
} else { } else {
ret = `>=${M}.${m}.0 <${+M + 1}.0.0` ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`
} }
} else if (pr) { } else if (pr) {
debug('replaceCaret pr', pr) debug('replaceCaret pr', pr)
if (M === '0') { if (M === '0') {
if (m === '0') { if (m === '0') {
ret = `>=${M}.${m}.${p}-${pr ret = `>=${M}.${m}.${p}-${pr
} <${M}.${m}.${+p + 1}` } <${M}.${m}.${+p + 1}-0`
} else { } else {
ret = `>=${M}.${m}.${p}-${pr ret = `>=${M}.${m}.${p}-${pr
} <${M}.${+m + 1}.0` } <${M}.${+m + 1}.0-0`
} }
} else { } else {
ret = `>=${M}.${m}.${p}-${pr ret = `>=${M}.${m}.${p}-${pr
} <${+M + 1}.0.0` } <${+M + 1}.0.0-0`
} }
} else { } else {
debug('no pr') debug('no pr')
if (M === '0') { if (M === '0') {
if (m === '0') { if (m === '0') {
ret = `>=${M}.${m}.${p ret = `>=${M}.${m}.${p
} <${M}.${m}.${+p + 1}` }${z} <${M}.${m}.${+p + 1}-0`
} else { } else {
ret = `>=${M}.${m}.${p ret = `>=${M}.${m}.${p
} <${M}.${+m + 1}.0` }${z} <${M}.${+m + 1}.0-0`
} }
} else { } else {
ret = `>=${M}.${m}.${p ret = `>=${M}.${m}.${p
} <${+M + 1}.0.0` } <${+M + 1}.0.0-0`
} }
} }
@@ -356,12 +358,15 @@ const replaceXRange = (comp, options) => {
} }
} }
if (gtlt === '<')
pr = '-0'
ret = `${gtlt + M}.${m}.${p}${pr}` ret = `${gtlt + M}.${m}.${p}${pr}`
} else if (xm) { } else if (xm) {
ret = `>=${M}.0.0${pr} <${+M + 1}.0.0${pr}` ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`
} else if (xp) { } else if (xp) {
ret = `>=${M}.${m}.0${pr ret = `>=${M}.${m}.0${pr
} <${M}.${+m + 1}.0${pr}` } <${M}.${+m + 1}.0-0`
} }
debug('xRange return', ret) debug('xRange return', ret)
@@ -378,32 +383,42 @@ const replaceStars = (comp, options) => {
return comp.trim().replace(re[t.STAR], '') return comp.trim().replace(re[t.STAR], '')
} }
const replaceGTE0 = (comp, options) => {
debug('replaceGTE0', comp, options)
return comp.trim()
.replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')
}
// This function is passed to string.replace(re[t.HYPHENRANGE]) // This function is passed to string.replace(re[t.HYPHENRANGE])
// M, m, patch, prerelease, build // M, m, patch, prerelease, build
// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 // 1.2 - 3.4.5 => >=1.2.0 <=3.4.5
// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do // 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do
// 1.2 - 3.4 => >=1.2.0 <3.5.0 // 1.2 - 3.4 => >=1.2.0 <3.5.0-0
const hyphenReplace = ($0, const hyphenReplace = incPr => ($0,
from, fM, fm, fp, fpr, fb, from, fM, fm, fp, fpr, fb,
to, tM, tm, tp, tpr, tb) => { to, tM, tm, tp, tpr, tb) => {
if (isX(fM)) { if (isX(fM)) {
from = '' from = ''
} else if (isX(fm)) { } else if (isX(fm)) {
from = `>=${fM}.0.0` from = `>=${fM}.0.0${incPr ? '-0' : ''}`
} else if (isX(fp)) { } else if (isX(fp)) {
from = `>=${fM}.${fm}.0` from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`
} else { } else if (fpr) {
from = `>=${from}` from = `>=${from}`
} else {
from = `>=${from}${incPr ? '-0' : ''}`
} }
if (isX(tM)) { if (isX(tM)) {
to = '' to = ''
} else if (isX(tm)) { } else if (isX(tm)) {
to = `<${+tM + 1}.0.0` to = `<${+tM + 1}.0.0-0`
} else if (isX(tp)) { } else if (isX(tp)) {
to = `<${tM}.${+tm + 1}.0` to = `<${tM}.${+tm + 1}.0-0`
} else if (tpr) { } else if (tpr) {
to = `<=${tM}.${tm}.${tp}-${tpr}` to = `<=${tM}.${tm}.${tp}-${tpr}`
} else if (incPr) {
to = `<${tM}.${tm}.${+tp + 1}-0`
} else { } else {
to = `<=${to}` to = `<=${to}`
} }
+2
View File
@@ -43,4 +43,6 @@ module.exports = {
gtr: require('./ranges/gtr'), gtr: require('./ranges/gtr'),
ltr: require('./ranges/ltr'), ltr: require('./ranges/ltr'),
intersects: require('./ranges/intersects'), intersects: require('./ranges/intersects'),
simplifyRange: require('./ranges/simplify'),
subset: require('./ranges/subset'),
} }
+3
View File
@@ -177,3 +177,6 @@ createToken('HYPHENRANGELOOSE', `^\\s*(${src[t.XRANGEPLAINLOOSE]})` +
// Star ranges basically just allow anything at all. // Star ranges basically just allow anything at all.
createToken('STAR', '(<|>)?=?\\s*\\*') createToken('STAR', '(<|>)?=?\\s*\\*')
// >=0.0.0 is like a star
createToken('GTE0', '^\\s*>=\\s*0\.0\.0\\s*$')
createToken('GTE0PRE', '^\\s*>=\\s*0\.0\.0-0\\s*$')
+7 -7
View File
@@ -1,6 +1,6 @@
{ {
"name": "semver", "name": "semver",
"version": "7.1.3", "version": "7.3.2",
"description": "The semantic version parser used by npm.", "description": "The semantic version parser used by npm.",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {
@@ -11,7 +11,7 @@
"postpublish": "git push origin --follow-tags" "postpublish": "git push origin --follow-tags"
}, },
"devDependencies": { "devDependencies": {
"tap": "^14.10.2" "tap": "^14.10.7"
}, },
"license": "ISC", "license": "ISC",
"repository": "https://github.com/npm/node-semver", "repository": "https://github.com/npm/node-semver",
@@ -19,12 +19,12 @@
"semver": "./bin/semver.js" "semver": "./bin/semver.js"
}, },
"files": [ "files": [
"bin", "bin/**/*.js",
"range.bnf", "range.bnf",
"classes", "classes/**/*.js",
"functions", "functions/**/*.js",
"internal", "internal/**/*.js",
"ranges", "ranges/**/*.js",
"index.js", "index.js",
"preload.js" "preload.js"
], ],
+44
View File
@@ -0,0 +1,44 @@
// given a set of versions and a range, create a "simplified" range
// that includes the same versions that the original range does
// If the original range is shorter than the simplified one, return that.
const satisfies = require('../functions/satisfies.js')
const compare = require('../functions/compare.js')
module.exports = (versions, range, options) => {
const set = []
let min = null
let prev = null
const v = versions.sort((a, b) => compare(a, b, options))
for (const version of v) {
const included = satisfies(version, range, options)
if (included) {
prev = version
if (!min)
min = version
} else {
if (prev) {
set.push([min, prev])
}
prev = null
min = null
}
}
if (min)
set.push([min, null])
const ranges = []
for (const [min, max] of set) {
if (min === max)
ranges.push(min)
else if (!max && min === v[0])
ranges.push('*')
else if (!max)
ranges.push(`>=${min}`)
else if (min === v[0])
ranges.push(`<=${max}`)
else
ranges.push(`${min} - ${max}`)
}
const simplified = ranges.join(' || ')
const original = typeof range.raw === 'string' ? range.raw : String(range)
return simplified.length < original.length ? simplified : range
}
+155
View File
@@ -0,0 +1,155 @@
const Range = require('../classes/range.js')
const { ANY } = require('../classes/comparator.js')
const satisfies = require('../functions/satisfies.js')
const compare = require('../functions/compare.js')
// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:
// - Every simple range `r1, r2, ...` is a subset of some `R1, R2, ...`
//
// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:
// - If c is only the ANY comparator
// - If C is only the ANY comparator, return true
// - Else return false
// - Let EQ be the set of = comparators in c
// - If EQ is more than one, return true (null set)
// - Let GT be the highest > or >= comparator in c
// - Let LT be the lowest < or <= comparator in c
// - If GT and LT, and GT.semver > LT.semver, return true (null set)
// - If EQ
// - If GT, and EQ does not satisfy GT, return true (null set)
// - If LT, and EQ does not satisfy LT, return true (null set)
// - If EQ satisfies every C, return true
// - Else return false
// - If GT
// - If GT is lower than any > or >= comp in C, return false
// - If GT is >=, and GT.semver does not satisfy every C, return false
// - If LT
// - If LT.semver is greater than that of any > comp in C, return false
// - If LT is <=, and LT.semver does not satisfy every C, return false
// - If any C is a = range, and GT or LT are set, return false
// - Else return true
const subset = (sub, dom, options) => {
sub = new Range(sub, options)
dom = new Range(dom, options)
let sawNonNull = false
OUTER: for (const simpleSub of sub.set) {
for (const simpleDom of dom.set) {
const isSub = simpleSubset(simpleSub, simpleDom, options)
sawNonNull = sawNonNull || isSub !== null
if (isSub)
continue OUTER
}
// the null set is a subset of everything, but null simple ranges in
// a complex range should be ignored. so if we saw a non-null range,
// then we know this isn't a subset, but if EVERY simple range was null,
// then it is a subset.
if (sawNonNull)
return false
}
return true
}
const simpleSubset = (sub, dom, options) => {
if (sub.length === 1 && sub[0].semver === ANY)
return dom.length === 1 && dom[0].semver === ANY
const eqSet = new Set()
let gt, lt
for (const c of sub) {
if (c.operator === '>' || c.operator === '>=')
gt = higherGT(gt, c, options)
else if (c.operator === '<' || c.operator === '<=')
lt = lowerLT(lt, c, options)
else
eqSet.add(c.semver)
}
if (eqSet.size > 1)
return null
let gtltComp
if (gt && lt) {
gtltComp = compare(gt.semver, lt.semver, options)
if (gtltComp > 0)
return null
else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<='))
return null
}
// will iterate one or zero times
for (const eq of eqSet) {
if (gt && !satisfies(eq, String(gt), options))
return null
if (lt && !satisfies(eq, String(lt), options))
return null
for (const c of dom) {
if (!satisfies(eq, String(c), options))
return false
}
return true
}
let higher, lower
let hasDomLT, hasDomGT
for (const c of dom) {
hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='
hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='
if (gt) {
if (c.operator === '>' || c.operator === '>=') {
higher = higherGT(gt, c, options)
if (higher === c)
return false
} else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options))
return false
}
if (lt) {
if (c.operator === '<' || c.operator === '<=') {
lower = lowerLT(lt, c, options)
if (lower === c)
return false
} else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options))
return false
}
if (!c.operator && (lt || gt) && gtltComp !== 0)
return false
}
// if there was a < or >, and nothing in the dom, then must be false
// UNLESS it was limited by another range in the other direction.
// Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0
if (gt && hasDomLT && !lt && gtltComp !== 0)
return false
if (lt && hasDomGT && !gt && gtltComp !== 0)
return false
return true
}
// >=1.2.3 is lower than >1.2.3
const higherGT = (a, b, options) => {
if (!a)
return b
const comp = compare(a.semver, b.semver, options)
return comp > 0 ? a
: comp < 0 ? b
: b.operator === '>' && a.operator === '>=' ? b
: a
}
// <=1.2.3 is higher than <1.2.3
const lowerLT = (a, b, options) => {
if (!a)
return b
const comp = compare(a.semver, b.semver, options)
return comp < 0 ? a
: comp > 0 ? b
: b.operator === '<' && a.operator === '<=' ? b
: a
}
module.exports = subset
+19 -17
View File
@@ -14,29 +14,31 @@
"rebuild": "yarn clean && yarn build", "rebuild": "yarn clean && yarn build",
"clean": "rimraf dist", "clean": "rimraf dist",
"lint": "eslint --fix src/**/*.ts", "lint": "eslint --fix src/**/*.ts",
"format": "prettier --write .",
"test": "jest", "test": "jest",
"release": "yarn rebuild && yarn lint && yarn install --production --no-bin-links" "release": "yarn format && yarn lint && yarn rebuild && yarn test && yarn install --production --no-bin-links"
}, },
"dependencies": { "dependencies": {
"@actions/core": "^1.1.3", "@actions/core": "^1.2.4",
"@actions/exec": "^1.0.1", "@actions/exec": "^1.0.4",
"@actions/io": "^1.0.1", "@actions/io": "^1.0.1",
"@actions/tool-cache": "^1.1.2", "@actions/tool-cache": "^1.6.0",
"semver": "^7.1.3" "semver": "^7.3.2"
}, },
"devDependencies": { "devDependencies": {
"@types/jest": "^25.1.4", "@types/jest": "^26.0.3",
"@types/node": "^13.9.8", "@types/node": "^14.0.14",
"@types/semver": "^7.1.0", "@types/semver": "^7.3.1",
"@typescript-eslint/eslint-plugin": "^2.26.0", "@typescript-eslint/eslint-plugin": "^3.4.0",
"@typescript-eslint/parser": "^2.26.0", "@typescript-eslint/parser": "^3.4.0",
"eslint": "^6.8.0", "eslint": "^7.3.1",
"eslint-config-prettier": "^6.10.1", "eslint-config-prettier": "^6.11.0",
"eslint-plugin-prettier": "^3.1.2", "eslint-plugin-prettier": "^3.1.4",
"jest": "^25.2.4", "jest": "^26.1.0",
"prettier": "^2.0.2", "prettier": "^2.0.5",
"rimraf": "^3.0.2", "rimraf": "^3.0.2",
"ts-jest": "^25.3.0", "ts-jest": "^26.1.1",
"typescript": "^3.8.3" "type-fest": "^0.16.0",
"typescript": "^3.9.5"
} }
} }
+2 -1
View File
@@ -1,9 +1,10 @@
import * as git from './git'; import * as git from './git';
import * as semver from 'semver'; import * as semver from 'semver';
import { Repo } from './interfaces';
describe('lsRemote', () => { describe('lsRemote', () => {
it('should return correct records', async () => { it('should return correct records', async () => {
const records = await git.lsRemote(); const records = await git.lsRemote(Repo('xmake-io/xmake'));
expect(records).toHaveProperty('heads'); expect(records).toHaveProperty('heads');
expect(records).toHaveProperty('tags'); expect(records).toHaveProperty('tags');
expect(records).toHaveProperty('pull'); expect(records).toHaveProperty('pull');
+19 -27
View File
@@ -2,33 +2,17 @@ import { exec } from '@actions/exec';
import * as io from '@actions/io'; import * as io from '@actions/io';
import * as os from 'os'; import * as os from 'os';
import * as path from 'path'; import * as path from 'path';
import { Sha, RefDic, Repo } from './interfaces';
function makeOpt(ref: string): { cwd: string } { function makeOpt(ref: Sha): { cwd: string } {
return { cwd: path.join(os.tmpdir(), `xmake-git-${ref}`) }; return { cwd: path.join(os.tmpdir(), `xmake-git-${ref}`) };
} }
export type RefDic = { const repoUrl = (repo: Repo): string => `https://github.com/${repo}.git`;
/** branches */
heads: Record<string, string>;
/** tags */
tags: Record<string, string>;
/** pull requests */
pull: Record<
number,
{
/** the current state of the pull request */
head: string;
/** the current branch we're merging onto */
base?: string;
/** merge result */
merge?: string;
}
>;
};
export async function lsRemote(): Promise<RefDic> { export async function lsRemote(repo: Repo): Promise<RefDic> {
let out = ''; let out = '';
await exec('git', ['ls-remote', 'https://github.com/xmake-io/xmake.git'], { await exec('git', ['ls-remote', repoUrl(repo)], {
silent: true, silent: true,
listeners: { listeners: {
stdout: (d) => (out += d.toString()), stdout: (d) => (out += d.toString()),
@@ -40,34 +24,42 @@ export async function lsRemote(): Promise<RefDic> {
if (ref && tag && tag.startsWith('refs/')) { if (ref && tag && tag.startsWith('refs/')) {
const tagPath = tag.split('/').splice(1); const tagPath = tag.split('/').splice(1);
// eslint-disable-next-line @typescript-eslint/no-explicit-any // eslint-disable-next-line @typescript-eslint/no-explicit-any
let ldata = data as any; let ldata = data as any; // eslint-disable-line @typescript-eslint/no-unsafe-assignment
for (let i = 0; i < tagPath.length - 1; i++) { for (let i = 0; i < tagPath.length - 1; i++) {
const seg = tagPath[i]; const seg = tagPath[i];
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
if (typeof ldata[seg] === 'object') { if (typeof ldata[seg] === 'object') {
ldata = ldata[seg]; // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
ldata = ldata[seg]; // eslint-disable-line @typescript-eslint/no-unsafe-assignment
} else { } else {
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
ldata = ldata[seg] = {}; ldata = ldata[seg] = {};
} }
} }
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
ldata[tagPath[tagPath.length - 1]] = ref; ldata[tagPath[tagPath.length - 1]] = ref;
} }
}); });
return data; return data;
} }
export async function create(ref: string): Promise<string> { export async function create(repo: Repo, ref: Sha): Promise<string> {
const opt = makeOpt(ref); const opt = makeOpt(ref);
await io.rmRF(opt.cwd); await io.rmRF(opt.cwd);
await io.mkdirP(opt.cwd); await io.mkdirP(opt.cwd);
await exec('git', ['init'], opt); await exec('git', ['init'], opt);
await exec('git', ['remote', 'add', 'origin', 'https://github.com/xmake-io/xmake.git'], opt); await exec('git', ['remote', 'add', 'origin', repoUrl(repo)], opt);
await exec('git', ['fetch', 'origin', '+refs/pull/*:refs/remotes/origin/pull/*', '+refs/heads/*:refs/remotes/origin/*'], opt); await exec(
'git',
['fetch', 'origin', '+refs/pull/*:refs/remotes/origin/pull/*', '+refs/heads/*:refs/remotes/origin/*'],
opt,
);
await exec('git', ['checkout', ref], opt); await exec('git', ['checkout', ref], opt);
await exec('git', ['submodule', 'update', '--init', '--recursive'], opt); await exec('git', ['submodule', 'update', '--init', '--recursive'], opt);
return opt.cwd; return opt.cwd;
} }
export async function cleanup(ref: string): Promise<void> { export async function cleanup(ref: Sha): Promise<void> {
const opt = makeOpt(ref); const opt = makeOpt(ref);
await io.rmRF(opt.cwd); await io.rmRF(opt.cwd);
} }
+2 -1
View File
@@ -12,7 +12,8 @@ async function run(): Promise<void> {
else await unixInstall(version); else await unixInstall(version);
await exec('xmake --version'); await exec('xmake --version');
} catch (error) { } catch (error) {
core.setFailed(error.message); const ex = error as Error;
core.setFailed(ex.message);
} }
} }
+49
View File
@@ -0,0 +1,49 @@
import { Opaque } from 'type-fest';
export type Sha = Opaque<string, 'sha'>;
export function Sha(sha: string): Sha {
sha = sha.trim().toLowerCase();
if (!/^[a-f0-9]{40}$/g.test(sha)) throw new Error(`Invalid sha value ${sha}`);
return sha as Sha;
}
export type Repo = Opaque<string, 'repo'>;
export function Repo(repo: string): Repo {
repo = repo.trim();
if (!/^([^/#]+\/[^/#]+)$/g.test(repo)) throw new Error(`Invalid repo value ${repo}`);
return repo as Repo;
}
export type RefDic = {
/** branches */
heads: Record<string, Sha>;
/** tags */
tags: Record<string, Sha>;
/** pull requests */
pull: Record<
number,
{
/** the current state of the pull request */
head: Sha;
/** the current branch we're merging onto */
base?: Sha;
/** merge result */
merge?: Sha;
}
>;
};
export interface GitVersion {
version: string;
sha: Sha;
type: keyof RefDic | 'sha';
repo: Repo;
}
export interface LocalVersion {
type: 'local';
path: string;
version: undefined;
}
export type Version = GitVersion | LocalVersion;
+30 -14
View File
@@ -6,25 +6,41 @@ import * as os from 'os';
import * as path from 'path'; import * as path from 'path';
import * as semver from 'semver'; import * as semver from 'semver';
import * as git from './git'; import * as git from './git';
import { Version } from './versions'; import { Version } from './interfaces';
async function install(sourceDir: string, binDir: string): Promise<void> {
await exec('make', ['build'], { cwd: sourceDir });
await exec('make', ['install', `prefix=${binDir}`], { cwd: sourceDir });
}
export async function unixInstall(version: Version): Promise<void> { export async function unixInstall(version: Version): Promise<void> {
const ver = version.version; let toolDir: string;
let toolDir = toolCache.find('xmake', ver); if (version.type !== 'local') {
if (!toolDir) { const ver = version.version;
const sourceDir = await core.group(`download xmake ${version}`, () => git.create(version.sha)); toolDir = toolCache.find('xmake', ver);
toolDir = await core.group(`install xmake ${version}`, async () => { if (!toolDir) {
await exec('make', ['build'], { cwd: sourceDir }); const sourceDir = await core.group(`download xmake ${String(version)}`, () =>
const binDir = path.join(os.tmpdir(), `xmake-${version.sha}`); git.create(version.repo, version.sha),
await exec('make', ['install', `prefix=${binDir}`], { cwd: sourceDir }); );
const cacheDir = await toolCache.cacheDir(binDir, 'xmake', ver); toolDir = await core.group(`install xmake ${String(version)}`, async () => {
await io.rmRF(binDir); const binDir = path.join(os.tmpdir(), `xmake-${version.sha}`);
await git.cleanup(version.sha); await install(sourceDir, binDir);
return cacheDir; const cacheDir = await toolCache.cacheDir(binDir, 'xmake', ver);
await io.rmRF(binDir);
await git.cleanup(version.sha);
return cacheDir;
});
}
} else {
// no tool cache for local install
toolDir = await core.group(`install local xmake at '${version.path}'`, async () => {
const binDir = path.join(os.tmpdir(), `xmake-${Date.now()}`);
await install(version.path, binDir);
return binDir;
}); });
} }
// for versions 2.3.2 and above, xmake will be installed directly into the bin directory, and no script will be used to wrap it. // for versions 2.3.2 and above, xmake will be installed directly into the bin directory, and no script will be used to wrap it.
if (version.type !== 'tags' || semver.gt(ver, '2.3.1')) { if (version.type !== 'tags' || semver.gt(version.version, '2.3.1')) {
core.addPath(path.join(toolDir, 'bin')); core.addPath(path.join(toolDir, 'bin'));
} else { } else {
core.addPath(path.join(toolDir, 'share', 'xmake')); // only for <= 2.3.1 core.addPath(path.join(toolDir, 'share', 'xmake')); // only for <= 2.3.1
+337 -255
View File
@@ -1,268 +1,282 @@
jest.mock('./git', () => ({ jest.mock('./git', () => ({
lsRemote() { lsRemote(repo: Repo) {
return { if (repo === 'xmake-io/xmake')
heads: { return {
dev: 'e3b63b2f0103855c940fa8683610cd02895450d1', heads: {
master: 'efad01e547f30d66d90e486c91c3afa0dbaceed3', dev: 'e3b63b2f0103855c940fa8683610cd02895450d1',
test: '18f0605f2e1764d4c07fa4f9fc24274275e1562c', master: 'efad01e547f30d66d90e486c91c3afa0dbaceed3',
}, test: '18f0605f2e1764d4c07fa4f9fc24274275e1562c',
tags: {
'v1.0.1': '723ec3e970e17f48a601fe2a919b9802b5e516fa',
'v1.0.2': '84fa20ca3ded99b9667609c5cb2e56b2308c8e4b',
'v1.0.3': 'e56812a09d3677957c41bccc8988599208e3b49a',
'v1.0.4': '825dda9d93448ba783e18f7947eef0b4eb07942e',
'v2.0.1': '432fd6a40018f4c29e08f1d4cadf1ccc387a0cff',
'v2.0.2': 'd24fcddbc2f1093f3943a917d99c5a8989ef2644',
'v2.0.3': 'b5f21a05b1cdaf46314238b4cc665976294df1da',
'v2.0.4': '2b15a1b5b149e5156e22358f3d29b4de63473376',
'v2.0.5': 'b168ce05d763957ed05844141d77d155bf842e7a',
'v2.1.1': '5ba22ca230c3f3f9477491df6d39f11d53132fb1',
'v2.1.2': 'bf69a2413117cf21c53bde1edbda713e77d4fd9b',
'v2.1.3': '248b2cc8a96d41445a2e46d259d14fea8e4203ec',
'v2.1.4': '1d94a23a7db35631f4b33b8b0b3968d0e62ffe2a',
'v2.1.5': '72f68f941f9b6d07f71811fe403a2dc178270af0',
'v2.1.6': '7ea60d24da152469258a4cb35b3ce591ea2fd961',
'v2.1.7': 'a04725662933fbbe3ad4a319d03267fc32907242',
'v2.1.8': '6c3f42dad5840210ee7294ca295f6c7b18c32291',
'v2.1.9': '0f1e8530e89a9432678ed6fe4fef25d0485d1293',
'v2.2.1': 'f15ff1ca73b02ff5f522c9fe59004331b1b410fb',
'v2.2.2': '18a42e0e8980e3edc39198b18c5c4b9a464ea381',
'v2.2.3': 'c4d0e69abf2b9caa88b997ca1f2935b6e0b00c9f',
'v2.2.5': 'd71a01615883fffa53fbd28e578db14353628a52',
'v2.2.6': 'eb60a76b7454975d151f2d8b5d9e19b26d561c2d',
'v2.2.7': '72bd93de8dd64cc5de8986860819a5873ce08fe5',
'v2.2.8': '6a2e390a79c4f0444a03b566d4bf24849a6ee3a3',
'v2.2.9': '4c22b7a7823518d538a81081d2e795b9ce4403e2',
'v2.3.1': 'f6155f883fd6377e0ee5002425f84f05eb420bef',
'v2.3.2': '31bacc4f76101e6a865ec254c48d8bcba456378f',
},
pull: {
'8': { head: '7e3ee3281df2b4caffebe25c87e871ba682dd701' },
'11': {
head: 'a18d2890ee7615f000b3a6b35150733e2e0013e3',
merge: 'ac07a6f13d09ba445af6ba403647f09c6f10dc9b',
}, },
'23': { tags: {
head: 'c33fd5a8b3e7ff7692630bbc8f5d5b6166502493', 'v1.0.1': '723ec3e970e17f48a601fe2a919b9802b5e516fa',
merge: '9041fc8587c9b797440ec2f58deb4626de688010', 'v1.0.2': '84fa20ca3ded99b9667609c5cb2e56b2308c8e4b',
'v1.0.3': 'e56812a09d3677957c41bccc8988599208e3b49a',
'v1.0.4': '825dda9d93448ba783e18f7947eef0b4eb07942e',
'v2.0.1': '432fd6a40018f4c29e08f1d4cadf1ccc387a0cff',
'v2.0.2': 'd24fcddbc2f1093f3943a917d99c5a8989ef2644',
'v2.0.3': 'b5f21a05b1cdaf46314238b4cc665976294df1da',
'v2.0.4': '2b15a1b5b149e5156e22358f3d29b4de63473376',
'v2.0.5': 'b168ce05d763957ed05844141d77d155bf842e7a',
'v2.1.1': '5ba22ca230c3f3f9477491df6d39f11d53132fb1',
'v2.1.2': 'bf69a2413117cf21c53bde1edbda713e77d4fd9b',
'v2.1.3': '248b2cc8a96d41445a2e46d259d14fea8e4203ec',
'v2.1.4': '1d94a23a7db35631f4b33b8b0b3968d0e62ffe2a',
'v2.1.5': '72f68f941f9b6d07f71811fe403a2dc178270af0',
'v2.1.6': '7ea60d24da152469258a4cb35b3ce591ea2fd961',
'v2.1.7': 'a04725662933fbbe3ad4a319d03267fc32907242',
'v2.1.8': '6c3f42dad5840210ee7294ca295f6c7b18c32291',
'v2.1.9': '0f1e8530e89a9432678ed6fe4fef25d0485d1293',
'v2.2.1': 'f15ff1ca73b02ff5f522c9fe59004331b1b410fb',
'v2.2.2': '18a42e0e8980e3edc39198b18c5c4b9a464ea381',
'v2.2.3': 'c4d0e69abf2b9caa88b997ca1f2935b6e0b00c9f',
'v2.2.5': 'd71a01615883fffa53fbd28e578db14353628a52',
'v2.2.6': 'eb60a76b7454975d151f2d8b5d9e19b26d561c2d',
'v2.2.7': '72bd93de8dd64cc5de8986860819a5873ce08fe5',
'v2.2.8': '6a2e390a79c4f0444a03b566d4bf24849a6ee3a3',
'v2.2.9': '4c22b7a7823518d538a81081d2e795b9ce4403e2',
'v2.3.1': 'f6155f883fd6377e0ee5002425f84f05eb420bef',
'v2.3.2': '31bacc4f76101e6a865ec254c48d8bcba456378f',
}, },
'24': { head: '5777dbc4397360e21e26466634cfddc633531054' }, pull: {
'28': { '8': { head: '7e3ee3281df2b4caffebe25c87e871ba682dd701' },
head: 'a3a28f8abdfe8711b2e4d7496ade02e910070e9f', '11': {
merge: '3bb5cf13cfa93ab186e7df168dce87718914696b', head: 'a18d2890ee7615f000b3a6b35150733e2e0013e3',
merge: 'ac07a6f13d09ba445af6ba403647f09c6f10dc9b',
},
'23': {
head: 'c33fd5a8b3e7ff7692630bbc8f5d5b6166502493',
merge: '9041fc8587c9b797440ec2f58deb4626de688010',
},
'24': { head: '5777dbc4397360e21e26466634cfddc633531054' },
'28': {
head: 'a3a28f8abdfe8711b2e4d7496ade02e910070e9f',
merge: '3bb5cf13cfa93ab186e7df168dce87718914696b',
},
'29': { head: '9400826a6fb06bbe08c23550c063eddafa65fe4b' },
'38': { head: '745c8f9a3ad7d4c0282fcfbb108bfb053864cbbc' },
'45': { head: '0a8ae5b98d2297bbad38fbf96cc78b373ac6f4ff' },
'52': { head: 'c53c28bc7b0cd59ea984a3c687273aa47d608c2a' },
'59': { head: '1e766da707d9b1075144303755f4e772fa33193d' },
'61': {
head: '75df3c9a5dafac83a8227ce84b004d3450b10c38',
merge: '08962c4c13c6eea78e3c840711b030d30afebeb4',
},
'63': { head: 'c3fc0841da49c875cadf225ed2da2dc624c1c72f' },
'65': {
head: '7c6dca6fe620ee41cd09162bc31d2ab0ab371832',
merge: '8c50b1e623668850f936ff980080425aedb7fac9',
},
'72': {
head: 'db0f89089bab6a8b6444712b48d4e05d36b05bf4',
merge: '3cf6fc8c23edfa66dff224e884a7faed8c2ecf02',
},
'74': { head: 'e9dde75d0f1159fda52b05f10646eae2cbdfc589' },
'75': { head: '3b9b9fb9c1c302be15e87ffe47309b2c6bc8eaec' },
'76': { head: '630f5f17601e5a35fb8b2e03fd7e3aad7af76c02' },
'77': { head: '61ae623bda980eeb65f5f26c86e9a246a43b93cd' },
'78': { head: '831481cdfbf0905b543ad503950233d7736b97d6' },
'80': { head: '52c8ee6e3a5782f49e19bb1b4b9c8fa79661c0e0' },
'81': { head: 'a145b7c6e0e491df3bc96a8b55201bacf6d73c77' },
'82': { head: '55c84b7fc414036f783396b8e8f937c032dc2f34' },
'84': { head: 'da6e4cce0e4c1736db0898d53c16ac8ca0441846' },
'85': { head: '05590ed02faa985c7b358d4c10126db549e50a77' },
'90': { head: 'c57aa4cf4463f33d3deaf8d58e42abbbd83b0e1b' },
'91': { head: 'f04981e7a207a25ece6047e83ac3c34c8747e89b' },
'92': {
head: 'b226dc77e49c31bf41ca55440aede275a642cb0a',
merge: '02f98269a1d7580621fedd809a182a47bf832dd6',
},
'93': { head: '37b4a7647163afdd392c7afcc61955244b6117cb' },
'97': { head: 'd35751770b68b1daa7154e3dfbae4169e71af4dd' },
'98': { head: '3687f2a29216e84aa182738e91bb0046a3950916' },
'100': {
head: '4f02b28754d131cbc3354a05535382eefd729231',
merge: '0cd4dc9a46b7418e8471c758d6003e4e4d34ce87',
},
'102': {
head: '0042b79375fd532220f9e9639ca6dfdc9007265a',
merge: '6eceac557545ef3022e7401ef3daff235694fde3',
},
'103': { head: 'cbd86c9b25592b81dd010b6fa2e7ce52c31f50db' },
'104': { head: 'e0be61b29d1d88ad7daa5f876faaf296e5935f9c' },
'105': { head: '4456dbd2f7b2f96812ed00d67cf484178375931c' },
'107': { head: '3f3b52d9b053a38b38557bc3a3e9aeb75d749350' },
'108': { head: 'b54b263ab4f05564cc463a53d1efedc1c3703f2f' },
'110': { head: 'b6724648232ed892301457c05cf5ec4deaefc2ed' },
'112': { head: 'ba4864ad076d07320b9d0f0b4b11b3b22644031e' },
'113': { head: '2cb7a91bf266680266de51636ce6620cbecc9362' },
'114': { head: '1ad0641672627b5ae2cc417b73614c6ce842bb12' },
'115': { head: '67a5ad78de9453d14b562cd7c3f2a4364e370d24' },
'116': { head: '98a844e670ee733c1036947efd9099f7763fb544' },
'118': { head: 'f2d1fc547a2f57da992b947cc3b3f615f9f2d34d' },
'119': { head: '64645daebde9aceaeea7f24c9156cdaa4ac5e035' },
'131': { head: '28353b3a76db9592acb23fed82461c07c8d6265b' },
'187': { head: '92ea65b345d93a88777d02cccaedbccb12fe5fc3' },
'188': { head: 'be03b89501a829e19932f86f491df80962bfe8d5' },
'198': { head: '49298d9ead57f63b85f2a8ad9e072915617cc58d' },
'204': {
head: 'ac21734c1d1ae754146754f2656451091ff22014',
merge: '39fcf9250a92c05eb837f82aefa0e1dc49660518',
},
'205': { head: 'd74715b3615e171776a6e5b9971d2ec2bff115d5' },
'210': { head: '9ee12112e49db451a49a66d77dd2990d9f6ddab9' },
'214': { head: 'b5b1c689f508068ffbde704194b08569151e383a' },
'215': { head: '05b6182def036b36c8e4aeac8cdc55441fc4a4db' },
'216': { head: 'e8af37c32549f54059f6e7635064c623b80c039c' },
'217': {
head: '905a8607f3f31ab9efeb68684d40df8284683f3a',
merge: '2f93475049575ed5e44699daa378239bc141aad3',
},
'221': { head: 'ca7b50a40cf7c120d49ca8164f9a54c289dd5743' },
'228': { head: '92f1645146c22699f4e2b567451f87fb0dbf2fc6' },
'231': { head: 'ca72eb0cf60c3e0747444859d9fc738b98ecc4b5' },
'235': { head: '69efc61859543613abc7ec553029852cd5693d17' },
'245': { head: '5d33e86c3190d37d04ac26da804db3c53218ae7e' },
'247': { head: '9ce75001587cc47db9c980dd99ba28d17b9cc7e8' },
'248': { head: '8c6cd6b4dc6b6a6b18150480d9711595f0043f26' },
'249': { head: 'a7543cbdfa7fcbe04178d53add85de04b54933b7' },
'267': { head: '7d0901f3014960bd53afa0918f21c4a53094faad' },
'270': { head: 'c584463f1cd693c2a5df78611816697343ac6ac4' },
'273': { head: 'da267497a9677d4cfc7175d462494e1334823476' },
'276': { head: '8a80645e856deeaa1df5ad6a2ef91a9c4d475cc8' },
'282': { head: 'f9df7b9a3594c8613e6f54003add9ffdaa7e4b49' },
'286': { head: '4c59f260714576e2c23aa068b4a1beae62756fd3' },
'298': { head: '4175116555b4337ad6cd423373462eb9107617ec' },
'303': { head: 'f114c56acb0264a094a99ceff5f45735ea17e54c' },
'333': { head: '0f2f41de06a0a7e2852ae9d6b01fd8cde6da4965' },
'365': { head: '88b7af92f6988abb30b72095592c74a245c06507' },
'380': { head: '5462c4ef4fb470c5878a46cb809203fc1459998f' },
'381': { head: 'bd186f9cf5a142aec24bf2d17eff4393487fbd87' },
'384': { head: 'e3e646d4e39695b398d719c3340345c8f53750bc' },
'387': { head: '84a97cf3471a039bbde45491d5db8eb470b3373e' },
'392': { head: '4572f4895e11712ba620097cb504195abc060df2' },
'394': { head: 'e34797ed62a4f5f7bab841a0982b3138300d637c' },
'395': { head: 'c2a04219cf41346bfa2f4871eda8915d43f38f09' },
'398': { head: '0e3f93ad95a57e2dbc3360c26292dacb767f8f54' },
'402': { head: '9cebcd69efd4587e3ac56b23e488fbbc9b359f48' },
'417': { head: '59a6c75f86de2cb080839910fa9395ccf1089083' },
'418': { head: 'c2c491ab4bedea3be7b1a6aca8bb4e65a9d763db' },
'420': { head: 'c9208456c2d0c8175d19290a50ccb6fdf95139bb' },
'421': { head: '82277e5222154ff4463127681f2d18abb07d7f4a' },
'422': { head: 'ace80d7f0b4b6e06a53b7d4bbad3eab28cd65915' },
'430': { head: '117f22a385f0118eac2aa6ef8fedf4b29062e973' },
'431': { head: '52d8932c29ccf051e2cd400493c38ff1c90f4ccb' },
'432': { head: '18ac66eebce733b1112b419f9896cdfa2ede395a' },
'435': { head: 'acad517e5ce23a82979a87155bb639f91098adaf' },
'438': { head: 'b4c94415e8c7ee24cb3f8c0ba6e0536282121adf' },
'441': { head: 'a674530614fbce03122c7d9c72712a6e7a23acb4' },
'443': { head: '34cf94bc1650a6e909e9fa3ee88d5cc3cb46eec2' },
'444': { head: '8049d92b3e9aef35e4f124e5ae361bdd1f5c5435' },
'445': { head: '69c93dba3591d9404bc6b38d84aca731db84ad15' },
'447': { head: 'a483b7a9f28c232d66a5c7596926e5c31af865e2' },
'448': { head: '9c2c26c81c8c43bc1a834522bc085392c766e7e0' },
'449': { head: '52f3bbe24e365b28f4bcd1e277d178a2561a1e8b' },
'450': { head: 'fddedb324fbff0546c2cbe304fe95c8e254da6fb' },
'451': { head: '17332ad1070bb6190bcd24f0a96cca823b4d8d26' },
'452': { head: 'b357d95010f883bff0d1a92ba2390f4c0a50e8ec' },
'453': { head: '3ac4190baf80ca6734a35acdfd5ac5f089acbe3e' },
'454': { head: '3a5a625a1f498350b05eaa70066c9e77e32ee85f' },
'455': { head: '98d4504577b586ef2398346a0db2743081cf03a8' },
'457': { head: '72f86392dd7bf482f409dfe4dd00219ef422ad9c' },
'458': { head: '4e01df47f2e594796ba6b36858cbe924533dd7aa' },
'459': { head: '608f198b3ab87f83b2458e58c1f7dcc6a2beebc0' },
'460': { head: 'f264f50f6c1ec488c1608bf69c463d57cc7ccca9' },
'462': { head: '5d8c5b6d686b802c48ff52bfe72f188c92509f49' },
'464': { head: 'f38741505acb528f609a8b269c911fc037a03fcc' },
'465': { head: '318bb739dd64d19a4b4d91d8be49b22fc3403cff' },
'468': { head: '117c7cc8a9bea5c9ef65bf00689e1917d91571ec' },
'470': { head: '9f73278f8f7631bc53daba27ffdf84d96068c562' },
'472': { head: '8cd138e181b63fa327b4b3caa3250fb1dce4b407' },
'473': { head: '45a4253be8540240758a69eb8c0c103a3edde057' },
'475': { head: 'b93b3d0cc8241e099fc508ffb1f9dace6ab8586a' },
'476': { head: '639552074da609025ca6609350c90263ebe684e7' },
'477': { head: 'dae10753450c75af10c300dbaf00653b15a27e87' },
'478': { head: '9ec42e0f156e0f82068eabbab6ccbfd17549486a' },
'481': { head: 'b11c6f57662624732501045e6cccf6b6188dacee' },
'482': { head: '887d8d84223de495f0442baa9ae143c382747285' },
'483': { head: '4cc123809f92db0a32f4fedbcbf4862484406da0' },
'484': { head: '7cff50433386d8c7793884cddd1eb6e1c3c2681e' },
'485': { head: '9ce1420b43db72da9d6a57bcc3d4ba478d614484' },
'486': { head: '18714381a6257fd93c93344cb559fc409f6b1017' },
'488': { head: 'ca45f8941e0b69582021d34061873c8752f76154' },
'491': { head: 'e7bcde1188f02ac07e64f6b9a798e0b1ca1e049c' },
'492': { head: '09f10b74034b040a6cb56640cd2c2f1027051b50' },
'495': { head: 'a6396622cdb3af334c1ec044d5a699affa0dccc2' },
'496': { head: 'e5ddd73878d170312580a9284edd5521a2115873' },
'497': { head: '74909f788acd34051cf4d32e94b5bcfe1f2c292b' },
'498': { head: '08c5864bbfcdc8238716ca8929a71554d08dabfd' },
'499': { head: 'bc6896917a2e150adb5aa2a063f72fc85d2ab9f5' },
'500': { head: 'ff0595d384a9b4e7656e0c44f327f7614e2a8fd6' },
'501': { head: '81acc02e79365957d37e98fbe70887edccfebba6' },
'503': { head: '145358ba831e7a90f275118a0556787754fe2fa6' },
'505': { head: '1cf79ba882fb24eca13829c12f6e39584ccd1f5f' },
'506': { head: '49f14868b5fa9bca4aa2f51ea2b70f9edae89cb6' },
'507': { head: '726997c8d83f2a9dff3bb96685dd35ea555e7b8c' },
'508': { head: 'a99ed5924ed00e195c0dacc036625bdb4d10f9a8' },
'509': { head: '7d4023cf698bff82b2c0f2b4aad86286d4890b49' },
'510': { head: 'fb9a434ada47e47e543f62e353c7375f93f82c39' },
'523': { head: '0bdcae97d8d9b2b3afe725f9b857a9994d3b28fa' },
'525': { head: 'ebe4099e7ea32b023edfc7a5559db5d1d5262e20' },
'526': { head: '454f1c64dae6c213177007885e54a1ab497f4b1b' },
'527': { head: '786c94fb869b6bbcf310e93f3068b795b177fc0b' },
'529': { head: 'df6f615305180ef67c9daa25038af1bc91ff44b0' },
'530': { head: '4f2e25226853830f157a2da79097c527030d42b4' },
'531': { head: '0b57414998b5404f93209f5b06141911cc9af503' },
'534': { head: 'bd4181e0321ec9db4dd6b304db51f5cf6566a484' },
'537': { head: 'b515795919b7eb114032a441564512645fae489c' },
'542': { head: '7ce304f9ee9946471d4ad11e78ea25149a05483f' },
'543': { head: 'f6b1a4866e1c73aafe6decdc6bfc1d99653f2b64' },
'547': { head: '9943cbae2e39a219cd5f889802d9db11aaefda5c' },
'550': { head: '172076db9fa929c5b6dd20a733d15cf28ef092aa' },
'551': { head: 'ff103cd4816ca50102c3bc10906695581c734f60' },
'552': { head: '99a3da1ff1e25e76a2cbf19f2f3a3ff43b6be013' },
'554': { head: '689068989bcda7bd099f920691dc388eae82bd9a' },
'557': { head: '416efddbbac77ecad9be41bdafd36bdea89e25d5' },
'563': { head: '3d72809db048911efec3d52106dd6968349ef4d1' },
'569': { head: 'ce51c2de7c11b6368ce8956329f9ebbe4ffd1b67' },
'593': { head: 'f00316a42943a9a75303658f8d646d35f9e8d1b9' },
'613': { head: '155deaae3ea36460929db9c8f28f2b97a319f54c' },
'625': { head: 'a027cf0843001dd2cb608c1c42cf643f48a56749' },
'628': { head: '23ae1e8af491342ef3e4f899ed0bdb5dd1a1284a' },
'631': { head: '30d4183095aa5dcdb9cbe00b1b48e45ca31424fe' },
'633': { head: '54ba9a0faf46957c3da37366119e0dab52fc02cc' },
'642': { head: 'c68a8ac90d822f74478cc36b6ba5a7e9ac225ee9' },
'655': { head: '6da12e9e3387be62b5b00cba64d1fb4d2e1ac140' },
'664': { head: 'e011000482dccb3e215d0eb895e280de6cda627e' },
'667': { head: 'dc25ac7a87256a0470f523017ee790b29e9b6f2d' },
'669': { head: 'd0b39e229426a336f71a0cc24f6319a47e2ce975' },
'671': { head: 'aa0cd8e58d2effab424214d12ab2122ff39a0f4a' },
'672': { head: '0cb3bd5f5aa0605835d7c785bd58e9d75b362fdd' },
'673': { head: '97b0e9c8e673325545d2e55288d66a2dd99d1cc0' },
'674': { head: '5d7a6efa13021da59a370bb011f4caf494b35da3' },
'678': { head: '98d788b6df2e95725e2435fff8469deb3ff74e8c' },
'679': { head: 'ea8ee4a153af424e238ed0e0772c32bfb0a881b1' },
'682': { head: 'fd12dc4bd31ebe9dc6370ab150c39441ce4d6061' },
'686': { head: 'd76b2b96872e3860af34b3256bc1df2189835829' },
'703': { head: '3b0f6e396c4a1d53b1b046c416681da6229fbdce' },
'708': { head: 'af28dba1f52990cb7b6c3c8f69f1f1bcf017c90a' },
}, },
'29': { head: '9400826a6fb06bbe08c23550c063eddafa65fe4b' }, };
'38': { head: '745c8f9a3ad7d4c0282fcfbb108bfb053864cbbc' }, if (repo === 'my/xmake')
'45': { head: '0a8ae5b98d2297bbad38fbf96cc78b373ac6f4ff' }, return {
'52': { head: 'c53c28bc7b0cd59ea984a3c687273aa47d608c2a' }, heads: {
'59': { head: '1e766da707d9b1075144303755f4e772fa33193d' }, dev: 'e3b63b2f0103855c940fa8683610cd02895450d1',
'61': { master: 'efad01e547f30d66d90e486c91c3afa0dbaceed3',
head: '75df3c9a5dafac83a8227ce84b004d3450b10c38', 'patch-1': '77cd51991f8b9c76e54d668103a06ca6c597e64a',
merge: '08962c4c13c6eea78e3c840711b030d30afebeb4',
}, },
'63': { head: 'c3fc0841da49c875cadf225ed2da2dc624c1c72f' }, tags: {},
'65': { pull: {},
head: '7c6dca6fe620ee41cd09162bc31d2ab0ab371832', };
merge: '8c50b1e623668850f936ff980080425aedb7fac9',
},
'72': {
head: 'db0f89089bab6a8b6444712b48d4e05d36b05bf4',
merge: '3cf6fc8c23edfa66dff224e884a7faed8c2ecf02',
},
'74': { head: 'e9dde75d0f1159fda52b05f10646eae2cbdfc589' },
'75': { head: '3b9b9fb9c1c302be15e87ffe47309b2c6bc8eaec' },
'76': { head: '630f5f17601e5a35fb8b2e03fd7e3aad7af76c02' },
'77': { head: '61ae623bda980eeb65f5f26c86e9a246a43b93cd' },
'78': { head: '831481cdfbf0905b543ad503950233d7736b97d6' },
'80': { head: '52c8ee6e3a5782f49e19bb1b4b9c8fa79661c0e0' },
'81': { head: 'a145b7c6e0e491df3bc96a8b55201bacf6d73c77' },
'82': { head: '55c84b7fc414036f783396b8e8f937c032dc2f34' },
'84': { head: 'da6e4cce0e4c1736db0898d53c16ac8ca0441846' },
'85': { head: '05590ed02faa985c7b358d4c10126db549e50a77' },
'90': { head: 'c57aa4cf4463f33d3deaf8d58e42abbbd83b0e1b' },
'91': { head: 'f04981e7a207a25ece6047e83ac3c34c8747e89b' },
'92': {
head: 'b226dc77e49c31bf41ca55440aede275a642cb0a',
merge: '02f98269a1d7580621fedd809a182a47bf832dd6',
},
'93': { head: '37b4a7647163afdd392c7afcc61955244b6117cb' },
'97': { head: 'd35751770b68b1daa7154e3dfbae4169e71af4dd' },
'98': { head: '3687f2a29216e84aa182738e91bb0046a3950916' },
'100': {
head: '4f02b28754d131cbc3354a05535382eefd729231',
merge: '0cd4dc9a46b7418e8471c758d6003e4e4d34ce87',
},
'102': {
head: '0042b79375fd532220f9e9639ca6dfdc9007265a',
merge: '6eceac557545ef3022e7401ef3daff235694fde3',
},
'103': { head: 'cbd86c9b25592b81dd010b6fa2e7ce52c31f50db' },
'104': { head: 'e0be61b29d1d88ad7daa5f876faaf296e5935f9c' },
'105': { head: '4456dbd2f7b2f96812ed00d67cf484178375931c' },
'107': { head: '3f3b52d9b053a38b38557bc3a3e9aeb75d749350' },
'108': { head: 'b54b263ab4f05564cc463a53d1efedc1c3703f2f' },
'110': { head: 'b6724648232ed892301457c05cf5ec4deaefc2ed' },
'112': { head: 'ba4864ad076d07320b9d0f0b4b11b3b22644031e' },
'113': { head: '2cb7a91bf266680266de51636ce6620cbecc9362' },
'114': { head: '1ad0641672627b5ae2cc417b73614c6ce842bb12' },
'115': { head: '67a5ad78de9453d14b562cd7c3f2a4364e370d24' },
'116': { head: '98a844e670ee733c1036947efd9099f7763fb544' },
'118': { head: 'f2d1fc547a2f57da992b947cc3b3f615f9f2d34d' },
'119': { head: '64645daebde9aceaeea7f24c9156cdaa4ac5e035' },
'131': { head: '28353b3a76db9592acb23fed82461c07c8d6265b' },
'187': { head: '92ea65b345d93a88777d02cccaedbccb12fe5fc3' },
'188': { head: 'be03b89501a829e19932f86f491df80962bfe8d5' },
'198': { head: '49298d9ead57f63b85f2a8ad9e072915617cc58d' },
'204': {
head: 'ac21734c1d1ae754146754f2656451091ff22014',
merge: '39fcf9250a92c05eb837f82aefa0e1dc49660518',
},
'205': { head: 'd74715b3615e171776a6e5b9971d2ec2bff115d5' },
'210': { head: '9ee12112e49db451a49a66d77dd2990d9f6ddab9' },
'214': { head: 'b5b1c689f508068ffbde704194b08569151e383a' },
'215': { head: '05b6182def036b36c8e4aeac8cdc55441fc4a4db' },
'216': { head: 'e8af37c32549f54059f6e7635064c623b80c039c' },
'217': {
head: '905a8607f3f31ab9efeb68684d40df8284683f3a',
merge: '2f93475049575ed5e44699daa378239bc141aad3',
},
'221': { head: 'ca7b50a40cf7c120d49ca8164f9a54c289dd5743' },
'228': { head: '92f1645146c22699f4e2b567451f87fb0dbf2fc6' },
'231': { head: 'ca72eb0cf60c3e0747444859d9fc738b98ecc4b5' },
'235': { head: '69efc61859543613abc7ec553029852cd5693d17' },
'245': { head: '5d33e86c3190d37d04ac26da804db3c53218ae7e' },
'247': { head: '9ce75001587cc47db9c980dd99ba28d17b9cc7e8' },
'248': { head: '8c6cd6b4dc6b6a6b18150480d9711595f0043f26' },
'249': { head: 'a7543cbdfa7fcbe04178d53add85de04b54933b7' },
'267': { head: '7d0901f3014960bd53afa0918f21c4a53094faad' },
'270': { head: 'c584463f1cd693c2a5df78611816697343ac6ac4' },
'273': { head: 'da267497a9677d4cfc7175d462494e1334823476' },
'276': { head: '8a80645e856deeaa1df5ad6a2ef91a9c4d475cc8' },
'282': { head: 'f9df7b9a3594c8613e6f54003add9ffdaa7e4b49' },
'286': { head: '4c59f260714576e2c23aa068b4a1beae62756fd3' },
'298': { head: '4175116555b4337ad6cd423373462eb9107617ec' },
'303': { head: 'f114c56acb0264a094a99ceff5f45735ea17e54c' },
'333': { head: '0f2f41de06a0a7e2852ae9d6b01fd8cde6da4965' },
'365': { head: '88b7af92f6988abb30b72095592c74a245c06507' },
'380': { head: '5462c4ef4fb470c5878a46cb809203fc1459998f' },
'381': { head: 'bd186f9cf5a142aec24bf2d17eff4393487fbd87' },
'384': { head: 'e3e646d4e39695b398d719c3340345c8f53750bc' },
'387': { head: '84a97cf3471a039bbde45491d5db8eb470b3373e' },
'392': { head: '4572f4895e11712ba620097cb504195abc060df2' },
'394': { head: 'e34797ed62a4f5f7bab841a0982b3138300d637c' },
'395': { head: 'c2a04219cf41346bfa2f4871eda8915d43f38f09' },
'398': { head: '0e3f93ad95a57e2dbc3360c26292dacb767f8f54' },
'402': { head: '9cebcd69efd4587e3ac56b23e488fbbc9b359f48' },
'417': { head: '59a6c75f86de2cb080839910fa9395ccf1089083' },
'418': { head: 'c2c491ab4bedea3be7b1a6aca8bb4e65a9d763db' },
'420': { head: 'c9208456c2d0c8175d19290a50ccb6fdf95139bb' },
'421': { head: '82277e5222154ff4463127681f2d18abb07d7f4a' },
'422': { head: 'ace80d7f0b4b6e06a53b7d4bbad3eab28cd65915' },
'430': { head: '117f22a385f0118eac2aa6ef8fedf4b29062e973' },
'431': { head: '52d8932c29ccf051e2cd400493c38ff1c90f4ccb' },
'432': { head: '18ac66eebce733b1112b419f9896cdfa2ede395a' },
'435': { head: 'acad517e5ce23a82979a87155bb639f91098adaf' },
'438': { head: 'b4c94415e8c7ee24cb3f8c0ba6e0536282121adf' },
'441': { head: 'a674530614fbce03122c7d9c72712a6e7a23acb4' },
'443': { head: '34cf94bc1650a6e909e9fa3ee88d5cc3cb46eec2' },
'444': { head: '8049d92b3e9aef35e4f124e5ae361bdd1f5c5435' },
'445': { head: '69c93dba3591d9404bc6b38d84aca731db84ad15' },
'447': { head: 'a483b7a9f28c232d66a5c7596926e5c31af865e2' },
'448': { head: '9c2c26c81c8c43bc1a834522bc085392c766e7e0' },
'449': { head: '52f3bbe24e365b28f4bcd1e277d178a2561a1e8b' },
'450': { head: 'fddedb324fbff0546c2cbe304fe95c8e254da6fb' },
'451': { head: '17332ad1070bb6190bcd24f0a96cca823b4d8d26' },
'452': { head: 'b357d95010f883bff0d1a92ba2390f4c0a50e8ec' },
'453': { head: '3ac4190baf80ca6734a35acdfd5ac5f089acbe3e' },
'454': { head: '3a5a625a1f498350b05eaa70066c9e77e32ee85f' },
'455': { head: '98d4504577b586ef2398346a0db2743081cf03a8' },
'457': { head: '72f86392dd7bf482f409dfe4dd00219ef422ad9c' },
'458': { head: '4e01df47f2e594796ba6b36858cbe924533dd7aa' },
'459': { head: '608f198b3ab87f83b2458e58c1f7dcc6a2beebc0' },
'460': { head: 'f264f50f6c1ec488c1608bf69c463d57cc7ccca9' },
'462': { head: '5d8c5b6d686b802c48ff52bfe72f188c92509f49' },
'464': { head: 'f38741505acb528f609a8b269c911fc037a03fcc' },
'465': { head: '318bb739dd64d19a4b4d91d8be49b22fc3403cff' },
'468': { head: '117c7cc8a9bea5c9ef65bf00689e1917d91571ec' },
'470': { head: '9f73278f8f7631bc53daba27ffdf84d96068c562' },
'472': { head: '8cd138e181b63fa327b4b3caa3250fb1dce4b407' },
'473': { head: '45a4253be8540240758a69eb8c0c103a3edde057' },
'475': { head: 'b93b3d0cc8241e099fc508ffb1f9dace6ab8586a' },
'476': { head: '639552074da609025ca6609350c90263ebe684e7' },
'477': { head: 'dae10753450c75af10c300dbaf00653b15a27e87' },
'478': { head: '9ec42e0f156e0f82068eabbab6ccbfd17549486a' },
'481': { head: 'b11c6f57662624732501045e6cccf6b6188dacee' },
'482': { head: '887d8d84223de495f0442baa9ae143c382747285' },
'483': { head: '4cc123809f92db0a32f4fedbcbf4862484406da0' },
'484': { head: '7cff50433386d8c7793884cddd1eb6e1c3c2681e' },
'485': { head: '9ce1420b43db72da9d6a57bcc3d4ba478d614484' },
'486': { head: '18714381a6257fd93c93344cb559fc409f6b1017' },
'488': { head: 'ca45f8941e0b69582021d34061873c8752f76154' },
'491': { head: 'e7bcde1188f02ac07e64f6b9a798e0b1ca1e049c' },
'492': { head: '09f10b74034b040a6cb56640cd2c2f1027051b50' },
'495': { head: 'a6396622cdb3af334c1ec044d5a699affa0dccc2' },
'496': { head: 'e5ddd73878d170312580a9284edd5521a2115873' },
'497': { head: '74909f788acd34051cf4d32e94b5bcfe1f2c292b' },
'498': { head: '08c5864bbfcdc8238716ca8929a71554d08dabfd' },
'499': { head: 'bc6896917a2e150adb5aa2a063f72fc85d2ab9f5' },
'500': { head: 'ff0595d384a9b4e7656e0c44f327f7614e2a8fd6' },
'501': { head: '81acc02e79365957d37e98fbe70887edccfebba6' },
'503': { head: '145358ba831e7a90f275118a0556787754fe2fa6' },
'505': { head: '1cf79ba882fb24eca13829c12f6e39584ccd1f5f' },
'506': { head: '49f14868b5fa9bca4aa2f51ea2b70f9edae89cb6' },
'507': { head: '726997c8d83f2a9dff3bb96685dd35ea555e7b8c' },
'508': { head: 'a99ed5924ed00e195c0dacc036625bdb4d10f9a8' },
'509': { head: '7d4023cf698bff82b2c0f2b4aad86286d4890b49' },
'510': { head: 'fb9a434ada47e47e543f62e353c7375f93f82c39' },
'523': { head: '0bdcae97d8d9b2b3afe725f9b857a9994d3b28fa' },
'525': { head: 'ebe4099e7ea32b023edfc7a5559db5d1d5262e20' },
'526': { head: '454f1c64dae6c213177007885e54a1ab497f4b1b' },
'527': { head: '786c94fb869b6bbcf310e93f3068b795b177fc0b' },
'529': { head: 'df6f615305180ef67c9daa25038af1bc91ff44b0' },
'530': { head: '4f2e25226853830f157a2da79097c527030d42b4' },
'531': { head: '0b57414998b5404f93209f5b06141911cc9af503' },
'534': { head: 'bd4181e0321ec9db4dd6b304db51f5cf6566a484' },
'537': { head: 'b515795919b7eb114032a441564512645fae489c' },
'542': { head: '7ce304f9ee9946471d4ad11e78ea25149a05483f' },
'543': { head: 'f6b1a4866e1c73aafe6decdc6bfc1d99653f2b64' },
'547': { head: '9943cbae2e39a219cd5f889802d9db11aaefda5c' },
'550': { head: '172076db9fa929c5b6dd20a733d15cf28ef092aa' },
'551': { head: 'ff103cd4816ca50102c3bc10906695581c734f60' },
'552': { head: '99a3da1ff1e25e76a2cbf19f2f3a3ff43b6be013' },
'554': { head: '689068989bcda7bd099f920691dc388eae82bd9a' },
'557': { head: '416efddbbac77ecad9be41bdafd36bdea89e25d5' },
'563': { head: '3d72809db048911efec3d52106dd6968349ef4d1' },
'569': { head: 'ce51c2de7c11b6368ce8956329f9ebbe4ffd1b67' },
'593': { head: 'f00316a42943a9a75303658f8d646d35f9e8d1b9' },
'613': { head: '155deaae3ea36460929db9c8f28f2b97a319f54c' },
'625': { head: 'a027cf0843001dd2cb608c1c42cf643f48a56749' },
'628': { head: '23ae1e8af491342ef3e4f899ed0bdb5dd1a1284a' },
'631': { head: '30d4183095aa5dcdb9cbe00b1b48e45ca31424fe' },
'633': { head: '54ba9a0faf46957c3da37366119e0dab52fc02cc' },
'642': { head: 'c68a8ac90d822f74478cc36b6ba5a7e9ac225ee9' },
'655': { head: '6da12e9e3387be62b5b00cba64d1fb4d2e1ac140' },
'664': { head: 'e011000482dccb3e215d0eb895e280de6cda627e' },
'667': { head: 'dc25ac7a87256a0470f523017ee790b29e9b6f2d' },
'669': { head: 'd0b39e229426a336f71a0cc24f6319a47e2ce975' },
'671': { head: 'aa0cd8e58d2effab424214d12ab2122ff39a0f4a' },
'672': { head: '0cb3bd5f5aa0605835d7c785bd58e9d75b362fdd' },
'673': { head: '97b0e9c8e673325545d2e55288d66a2dd99d1cc0' },
'674': { head: '5d7a6efa13021da59a370bb011f4caf494b35da3' },
'678': { head: '98d788b6df2e95725e2435fff8469deb3ff74e8c' },
'679': { head: 'ea8ee4a153af424e238ed0e0772c32bfb0a881b1' },
'682': { head: 'fd12dc4bd31ebe9dc6370ab150c39441ce4d6061' },
'686': { head: 'd76b2b96872e3860af34b3256bc1df2189835829' },
'703': { head: '3b0f6e396c4a1d53b1b046c416681da6229fbdce' },
'708': { head: 'af28dba1f52990cb7b6c3c8f69f1f1bcf017c90a' },
},
};
}, },
})); }));
import { selectVersion } from './versions'; import { selectVersion } from './versions';
import { Repo } from './interfaces';
import { resolve } from 'path';
describe('selectVersion', () => { describe('selectVersion', () => {
it('should return correct version for latest', async () => { it('should return correct version for latest', async () => {
await expect(selectVersion('latest')).resolves.toEqual({ await expect(selectVersion('latest')).resolves.toEqual({
repo: 'xmake-io/xmake',
version: 'v2.3.2', version: 'v2.3.2',
sha: '31bacc4f76101e6a865ec254c48d8bcba456378f', sha: '31bacc4f76101e6a865ec254c48d8bcba456378f',
type: 'tags', type: 'tags',
@@ -271,10 +285,13 @@ describe('selectVersion', () => {
it('should throw for no matched', async () => { it('should throw for no matched', async () => {
await expect(selectVersion('0.2.3')).rejects.toThrowError('No matched releases of xmake-version 0.2.3'); await expect(selectVersion('0.2.3')).rejects.toThrowError('No matched releases of xmake-version 0.2.3');
await expect(selectVersion('v0.2.3')).rejects.toThrowError('No matched releases of xmake-version 0.2.3'); await expect(selectVersion('v0.2.3')).rejects.toThrowError('No matched releases of xmake-version 0.2.3');
await expect(selectVersion('<0.2.3 > 0.1')).rejects.toThrowError('No matched releases of xmake-version <0.2.3 >=0.2.0'); await expect(selectVersion('<0.2.3 > 0.1')).rejects.toThrowError(
'No matched releases of xmake-version <0.2.3 >=0.2.0',
);
}); });
it('should return correct version for given', async () => { it('should return correct version for given', async () => {
await expect(selectVersion('v1.0.1')).resolves.toEqual({ await expect(selectVersion('v1.0.1')).resolves.toEqual({
repo: 'xmake-io/xmake',
version: 'v1.0.1', version: 'v1.0.1',
sha: '723ec3e970e17f48a601fe2a919b9802b5e516fa', sha: '723ec3e970e17f48a601fe2a919b9802b5e516fa',
type: 'tags', type: 'tags',
@@ -282,6 +299,7 @@ describe('selectVersion', () => {
}); });
it('should return correct version for range', async () => { it('should return correct version for range', async () => {
await expect(selectVersion('>=2')).resolves.toEqual({ await expect(selectVersion('>=2')).resolves.toEqual({
repo: 'xmake-io/xmake',
version: 'v2.3.2', version: 'v2.3.2',
sha: '31bacc4f76101e6a865ec254c48d8bcba456378f', sha: '31bacc4f76101e6a865ec254c48d8bcba456378f',
type: 'tags', type: 'tags',
@@ -290,6 +308,7 @@ describe('selectVersion', () => {
it('should return correct branch', async () => { it('should return correct branch', async () => {
await expect(selectVersion('branch@master')).resolves.toEqual({ await expect(selectVersion('branch@master')).resolves.toEqual({
repo: 'xmake-io/xmake',
version: 'master', version: 'master',
sha: 'efad01e547f30d66d90e486c91c3afa0dbaceed3', sha: 'efad01e547f30d66d90e486c91c3afa0dbaceed3',
type: 'heads', type: 'heads',
@@ -302,6 +321,7 @@ describe('selectVersion', () => {
it('should return correct pr', async () => { it('should return correct pr', async () => {
await expect(selectVersion('pr@708')).resolves.toEqual({ await expect(selectVersion('pr@708')).resolves.toEqual({
repo: 'xmake-io/xmake',
version: 'pr#708', version: 'pr#708',
sha: 'af28dba1f52990cb7b6c3c8f69f1f1bcf017c90a', sha: 'af28dba1f52990cb7b6c3c8f69f1f1bcf017c90a',
type: 'pull', type: 'pull',
@@ -313,11 +333,14 @@ describe('selectVersion', () => {
}); });
it('should throw invalid pr', async () => { it('should throw invalid pr', async () => {
await expect(selectVersion('pr@xxx')).rejects.toThrowError('Invalid pull requrest xxx, should be a positive integer'); await expect(selectVersion('pr@xxx')).rejects.toThrowError(
'Invalid pull requrest xxx, should be a positive integer',
);
}); });
it('should return branch of sha', async () => { it('should return branch of sha', async () => {
await expect(selectVersion('sha@efad01e547f30d66d90e486c91c3afa0dbaceed3')).resolves.toEqual({ await expect(selectVersion('sha@efad01e547f30d66d90e486c91c3afa0dbaceed3')).resolves.toEqual({
repo: 'xmake-io/xmake',
version: 'master', version: 'master',
sha: 'efad01e547f30d66d90e486c91c3afa0dbaceed3', sha: 'efad01e547f30d66d90e486c91c3afa0dbaceed3',
type: 'heads', type: 'heads',
@@ -326,14 +349,43 @@ describe('selectVersion', () => {
it('should return tag of sha', async () => { it('should return tag of sha', async () => {
await expect(selectVersion('sha@31bacc4f76101e6a865ec254c48d8bcba456378f')).resolves.toEqual({ await expect(selectVersion('sha@31bacc4f76101e6a865ec254c48d8bcba456378f')).resolves.toEqual({
repo: 'xmake-io/xmake',
version: 'v2.3.2', version: 'v2.3.2',
sha: '31bacc4f76101e6a865ec254c48d8bcba456378f', sha: '31bacc4f76101e6a865ec254c48d8bcba456378f',
type: 'tags', type: 'tags',
}); });
}); });
it('should return pr merge of sha', async () => {
await expect(selectVersion('sha@2f93475049575ed5e44699daa378239bc141aad3')).resolves.toEqual({
repo: 'xmake-io/xmake',
version: 'pr#217',
sha: '2f93475049575ed5e44699daa378239bc141aad3',
type: 'pull',
});
});
it('should not return pr head of sha if merge present', async () => {
await expect(selectVersion('sha@905a8607f3f31ab9efeb68684d40df8284683f3a')).resolves.toEqual({
repo: 'xmake-io/xmake',
version: 'sha#905a8607f3f31ab9efeb68684d40df8284683f3a',
sha: '905a8607f3f31ab9efeb68684d40df8284683f3a',
type: 'sha',
});
});
it('should return pr head of sha', async () => {
await expect(selectVersion('sha@af28dba1f52990cb7b6c3c8f69f1f1bcf017c90a')).resolves.toEqual({
repo: 'xmake-io/xmake',
version: 'pr#708',
sha: 'af28dba1f52990cb7b6c3c8f69f1f1bcf017c90a',
type: 'pull',
});
});
it('should return correct normalized sha', async () => { it('should return correct normalized sha', async () => {
await expect(selectVersion('sha@Af28dba1f52990cb7b6c3c8f69f1f1bcf017c90b')).resolves.toEqual({ await expect(selectVersion('sha@Af28dba1f52990cb7b6c3c8f69f1f1bcf017c90b')).resolves.toEqual({
repo: 'xmake-io/xmake',
version: 'sha#af28dba1f52990cb7b6c3c8f69f1f1bcf017c90b', version: 'sha#af28dba1f52990cb7b6c3c8f69f1f1bcf017c90b',
sha: 'af28dba1f52990cb7b6c3c8f69f1f1bcf017c90b', sha: 'af28dba1f52990cb7b6c3c8f69f1f1bcf017c90b',
type: 'sha', type: 'sha',
@@ -351,4 +403,34 @@ describe('selectVersion', () => {
'Invalid sha value af28dba1f52990cb7b6c3c8f69f1f1bcf017c90g', 'Invalid sha value af28dba1f52990cb7b6c3c8f69f1f1bcf017c90g',
); );
}); });
it('should return correct repo', async () => {
await expect(selectVersion('my/xmake#branch@patch-1')).resolves.toEqual({
repo: 'my/xmake',
version: 'patch-1',
sha: '77cd51991f8b9c76e54d668103a06ca6c597e64a',
type: 'heads',
});
});
it('should return local cwd', async () => {
await expect(selectVersion('local#')).resolves.toEqual({
path: process.cwd(),
type: 'local',
});
});
it('should return absolute path', async () => {
await expect(selectVersion('local#/usr/bin')).resolves.toEqual({
path: resolve('/usr/bin'),
type: 'local',
});
});
it('should return relative path', async () => {
await expect(selectVersion('local#xmake')).resolves.toEqual({
path: resolve('xmake'),
type: 'local',
});
});
}); });
+82 -39
View File
@@ -1,22 +1,28 @@
import * as core from '@actions/core'; import * as core from '@actions/core';
import * as semver from 'semver'; import * as semver from 'semver';
import { lsRemote, RefDic } from './git'; import { lsRemote } from './git';
import { RefDic, Sha, Version, Repo, GitVersion, LocalVersion } from './interfaces';
import * as p from 'path';
export interface Version { const DEFAULT_REPO = Repo('xmake-io/xmake');
version: string;
sha: string; const VERSIONS = new Map<Repo, RefDic>();
type: keyof RefDic | 'sha'; async function getVersions(repo: Repo): Promise<RefDic> {
const cache = VERSIONS.get(repo);
if (cache) return cache;
const result = await lsRemote(repo);
VERSIONS.set(repo, result);
return result;
} }
let VERSIONS: RefDic | undefined; class GitVersionImpl implements GitVersion {
constructor(
async function getVersions(): Promise<RefDic> { readonly repo: Repo,
if (VERSIONS) return VERSIONS; readonly version: string,
return (VERSIONS = await lsRemote()); readonly sha: Sha,
} readonly type: GitVersion['type'],
toString: string,
class VersionImpl implements Version { ) {
constructor(readonly version: string, readonly sha: string, readonly type: Version['type'], toString: string) {
this.#string = toString; this.#string = toString;
} }
readonly #string: string; readonly #string: string;
@@ -25,58 +31,73 @@ class VersionImpl implements Version {
} }
} }
async function selectBranch(branch: string): Promise<Version> { class LocalVersionImpl implements LocalVersion {
const versions = await getVersions(); readonly type = 'local';
readonly version: undefined;
constructor(readonly path: string) {
this.path = p.resolve(path);
}
}
async function selectBranch(repo: Repo, branch: string): Promise<Version> {
const versions = await getVersions(repo);
if (branch in versions.heads) { if (branch in versions.heads) {
return new VersionImpl(branch, versions.heads[branch], 'heads', `branch ${branch}`); return new GitVersionImpl(repo, branch, versions.heads[branch], 'heads', `branch ${branch}`);
} }
throw new Error(`Branch ${branch} not found`); throw new Error(`Branch ${branch} not found`);
} }
async function selectPr(pr: number): Promise<Version> { async function selectPr(repo: Repo, pr: number): Promise<Version> {
const versions = await getVersions(); const versions = await getVersions(repo);
if (pr in versions.pull) { if (pr in versions.pull) {
const prheads = versions.pull[pr]; const prHeads = versions.pull[pr];
const sha = prheads.merge ?? prheads.head; const sha = prHeads.merge ?? prHeads.head;
if (sha) { if (sha) {
return new VersionImpl(`pr#${pr}`, sha, 'pull', `pull request #${pr}`); return new GitVersionImpl(repo, `pr#${pr}`, sha, 'pull', `pull request #${pr}`);
} }
} }
throw new Error(`Pull requrest #${pr} not found`); throw new Error(`Pull requrest #${pr} not found`);
} }
async function selectSemver(version: string): Promise<Version> { async function selectSemver(repo: Repo, version: string): Promise<Version> {
// check version valid // check version valid
const v = new semver.Range(version); const v = new semver.Range(version);
if (!v) { if (!v) {
throw new Error(`Invalid semver`); throw new Error(`Invalid semver`);
} }
const versions = await getVersions(); const versions = await getVersions(repo);
const ver = semver.maxSatisfying(Object.keys(versions.tags), v); const ver = semver.maxSatisfying(Object.keys(versions.tags), v);
if (!ver) { if (!ver) {
throw new Error(`No matched releases of xmake-version ${v.format()}`); throw new Error(`No matched releases of xmake-version ${v.format()}`);
} }
const sha = versions.tags[ver]; const sha = versions.tags[ver];
return new VersionImpl(ver, sha, 'tags', ver); return new GitVersionImpl(repo, ver, sha, 'tags', ver);
} }
async function selectSha(sha: string): Promise<Version> { async function selectSha(repo: Repo, sha: string): Promise<Version> {
sha = sha.toLowerCase(); const shaValue = Sha(sha);
if (!/^[a-f0-9]{40}$/gi.test(sha)) throw new Error(`Invalid sha value ${sha}`); const versions = await getVersions(repo);
const versions = await getVersions();
for (const branch in versions.heads) { for (const branch in versions.heads) {
if (versions.heads[branch] === sha) { if (versions.heads[branch] === shaValue) {
return selectBranch(branch); return selectBranch(repo, branch);
} }
} }
for (const tag in versions.tags) { for (const tag in versions.tags) {
if (versions.tags[tag] === sha) { if (versions.tags[tag] === shaValue) {
return selectSemver(tag); return selectSemver(repo, tag);
} }
} }
return Promise.resolve(new VersionImpl(`sha#${sha}`, sha, 'sha', `commit ${sha.substr(0, 8)}`)); for (const pr in versions.pull) {
const prData = versions.pull[pr];
if ((prData.merge ?? prData.head) === shaValue) {
return selectPr(repo, Number.parseInt(pr));
}
}
return Promise.resolve(
new GitVersionImpl(repo, `sha#${shaValue}`, shaValue, 'sha', `commit ${shaValue.substr(0, 8)}`),
);
} }
export async function selectVersion(version?: string): Promise<Version> { export async function selectVersion(version?: string): Promise<Version> {
@@ -84,11 +105,26 @@ export async function selectVersion(version?: string): Promise<Version> {
version = (version ?? core.getInput('xmake-version')) || 'latest'; version = (version ?? core.getInput('xmake-version')) || 'latest';
if (version.toLowerCase() === 'latest') version = ''; if (version.toLowerCase() === 'latest') version = '';
let repo = DEFAULT_REPO;
let ret: Version | undefined; let ret: Version | undefined;
// select local
if (version.startsWith('local#')) {
const path = version.slice('local#'.length);
ret = new LocalVersionImpl(path);
}
{
const match = /^([^/#]+\/[^/#]+)#(.+)$/.exec(version);
if (match) {
repo = Repo(match[1]);
version = match[2];
}
}
// select branch // select branch
if (version.startsWith('branch@')) { if (version.startsWith('branch@')) {
const branch = version.substr('branch@'.length); const branch = version.substr('branch@'.length);
ret = await selectBranch(branch); ret = await selectBranch(repo, branch);
} }
// select pr // select pr
if (version.startsWith('pr@')) { if (version.startsWith('pr@')) {
@@ -96,20 +132,27 @@ export async function selectVersion(version?: string): Promise<Version> {
if (Number.isNaN(pr) || pr <= 0) { if (Number.isNaN(pr) || pr <= 0) {
throw new Error(`Invalid pull requrest ${version.substr('pr@'.length)}, should be a positive integer`); throw new Error(`Invalid pull requrest ${version.substr('pr@'.length)}, should be a positive integer`);
} }
ret = await selectPr(pr); ret = await selectPr(repo, pr);
} }
// select sha // select sha
if (version.startsWith('sha@')) { if (version.startsWith('sha@')) {
const sha = version.substr('sha@'.length); const sha = version.substr('sha@'.length);
ret = await selectSha(sha); ret = await selectSha(repo, sha);
} }
// select version // select version
if (semver.validRange(version)) { if (semver.validRange(version)) {
ret = await selectSemver(version); ret = await selectSemver(repo, version);
} }
if (!ret) { if (!ret) {
throw new Error(`Invalid input xmake-version ${core.getInput('xmake-version')}`); throw new Error(`Invalid input xmake-version ${core.getInput('xmake-version')}`);
} }
core.info(`Selected xmake ${ret} (commit: ${ret.sha.substr(0, 8)})`); if (ret.type === 'local') {
core.info(`Use local xmake at '${ret.path}'`);
} else {
core.info(
`Selected xmake ${String(ret)} (commit: ${ret.sha.substr(0, 8)})` +
(repo !== DEFAULT_REPO ? ` of ${repo}` : ''),
);
}
return ret; return ret;
} }
+12 -6
View File
@@ -5,9 +5,9 @@ import * as toolCache from '@actions/tool-cache';
import * as os from 'os'; import * as os from 'os';
import * as path from 'path'; import * as path from 'path';
import * as semver from 'semver'; import * as semver from 'semver';
import { Version } from './versions'; import { Version, GitVersion } from './interfaces';
function getInstallerUrl(version: Version): string { function getInstallerUrl(version: GitVersion): string {
const ver = version.version; const ver = version.version;
switch (version.type) { switch (version.type) {
case 'heads': { case 'heads': {
@@ -30,7 +30,6 @@ function getInstallerUrl(version: Version): string {
} }
default: { default: {
// check that we have tested all types // check that we have tested all types
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const _: never = version.type; const _: never = version.type;
throw new Error('Unknown version type'); throw new Error('Unknown version type');
} }
@@ -38,19 +37,26 @@ function getInstallerUrl(version: Version): string {
} }
export async function winInstall(version: Version): Promise<void> { export async function winInstall(version: Version): Promise<void> {
if (version.type === 'local') {
throw new Error('Local builds for windows is not supported');
}
const ver = version.version; const ver = version.version;
let toolDir = toolCache.find('xmake', ver); let toolDir = toolCache.find('xmake', ver);
if (!toolDir) { if (!toolDir) {
const installer = await core.group(`download xmake ${version}`, async () => { const installer = await core.group(`download xmake ${String(version)}`, async () => {
const url = getInstallerUrl(version); const url = getInstallerUrl(version);
core.info(`downloading from ${url}`); core.info(`downloading from ${url}`);
const file = await toolCache.downloadTool(url); const file = await toolCache.downloadTool(url);
const exe = path.format({ ...path.parse(file), ext: '.exe', base: undefined }); const exe = path.format({
...path.parse(file),
ext: '.exe',
base: undefined,
});
await io.mv(file, exe); await io.mv(file, exe);
core.info(`downloaded to ${exe}`); core.info(`downloaded to ${exe}`);
return exe; return exe;
}); });
toolDir = await core.group(`install xmake ${version}`, async () => { toolDir = await core.group(`install xmake ${String(version)}`, async () => {
const binDir = path.join(os.tmpdir(), `xmake-${version.sha}`); const binDir = path.join(os.tmpdir(), `xmake-${version.sha}`);
core.info(`installing to ${binDir}`); core.info(`installing to ${binDir}`);
await exec(`"${installer}" /NOADMIN /S /D=${binDir}`); await exec(`"${installer}" /NOADMIN /S /D=${binDir}`);
+5 -4
View File
@@ -1,6 +1,7 @@
{ {
"extends": "./tsconfig.json", "extends": "./tsconfig.json",
"exclude": [ "compilerOptions": {
"**/*.spec.ts" "removeComments": true
] },
"exclude": ["**/*.spec.ts"]
} }
+10 -11
View File
@@ -1,13 +1,12 @@
{ {
"include": [ "include": ["src/**/*"],
"src/**/*" "compileOnSave": true,
], "compilerOptions": {
"compileOnSave": true, "strict": true,
"compilerOptions": { "moduleResolution": "node",
"strict": true, "module": "commonjs",
"moduleResolution": "node", "target": "es2018",
"module": "commonjs", "outDir": "dist",
"target": "es2018", "types": ["node", "jest"]
"outDir": "dist" }
}
} }
+1398 -1119
View File
File diff suppressed because it is too large Load Diff