├── .gitignore ├── lib ├── constants.js ├── log.js ├── withRetry.js ├── utils.js ├── argv.js ├── download.js └── request.js ├── .eslintrc.json ├── README.md ├── package.json ├── bin └── index.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /lib/constants.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | DEFAULT_CHUNK_SIZE: 5 * 1024 * 1024, 3 | MAX_CHUNK: 10000, 4 | } -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "node": true, 4 | "commonjs": true, 5 | "es2021": true 6 | }, 7 | "extends": "eslint:recommended", 8 | "parserOptions": { 9 | "ecmaVersion": "latest" 10 | }, 11 | "rules": { 12 | "no-unused-vars": "warn" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## coding-generic 2 | 用于推送 generic 类型制品到 coding 制品库, 支持断点续传 3 | 4 | ## 安装 5 | 6 | ```shell 7 | npm install coding-generic -g 8 | ``` 9 | 10 | ## 使用 11 | 12 | - 推送单个制品 13 | ```shell 14 | coding-generic -u=[:password] --path= --registry= 15 | ``` 16 | - 推送文件夹(仅 1.2.7 及以上版本支持) 17 | ```shell 18 | coding-generic -u=[:password] --dir --path= --registry= 19 | ``` 20 | 21 | - 下载文件夹(仅 1.2.13 及以上版本支持) 22 | ```shell 23 | coding-generic --pull -u=[:password] --registry=/list/?version= 24 | ``` -------------------------------------------------------------------------------- /lib/log.js: -------------------------------------------------------------------------------- 1 | const { createLogger, format, transports } = require('winston'); 2 | const { combine, timestamp, printf } = format; 3 | const util = require('util') 4 | 5 | const userHome = process.env.HOME || process.env.USERPROFILE; 6 | 7 | const formatLog = printf(({ level, message, timestamp }) => { 8 | return `${timestamp} ${level}: ${JSON.stringify(util.inspect(message))}` 9 | }); 10 | const transport = new (transports.DailyRotateFile)({ 11 | filename: `${userHome}/.coding/log/coding-generic/%DATE%.log`, 12 | zippedArchive: true, 13 | maxSize: '20m', 14 | maxFiles: '14d' 15 | }); 16 | 17 | const logger = createLogger({ 18 | format: combine( 19 | timestamp(), 20 | formatLog 21 | ), 22 | 'transports': [ 23 | transport 24 | ] 25 | }); 26 | 27 | module.exports = logger; -------------------------------------------------------------------------------- /lib/withRetry.js: -------------------------------------------------------------------------------- 1 | const chalk = require('chalk') 2 | const logger = require('../lib/log'); 3 | 4 | const delay = (wait) => new Promise((r) => setTimeout(() => r(), wait)) 5 | 6 | 7 | /** 8 | * 9 | * @param {fucntion} fn the function need to retry after rejected 10 | * @param {Number} retryCount number of retries 11 | * @param {Number} retryDelay delay time between each retries 12 | */ 13 | const withRetry = (fn, retryCount, retryDelay) => new Promise((resolve, reject) => 14 | fn() 15 | .then(resolve) 16 | .catch((err) => { 17 | if (retryCount > 0) { 18 | logger.error(err); 19 | console.log(chalk.red('合并分片遇到了一个小问题,重试中...')) 20 | return delay(retryDelay) 21 | .then(withRetry.bind(null, fn, retryCount - 1, retryDelay)) 22 | .then(resolve) 23 | .catch(reject) 24 | } 25 | return reject(err) 26 | }) 27 | ) 28 | 29 | module.exports = { 30 | withRetry 31 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "coding-generic", 3 | "version": "1.2.13", 4 | "description": "", 5 | "main": "index.js", 6 | "bin": { 7 | "coding-generic": "./bin/index.js" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "axios": "^0.21.1", 14 | "bluebird": "^3.7.2", 15 | "chalk": "^4.1.0", 16 | "cos-nodejs-sdk-v5": "^2.8.2", 17 | "form-data": "^3.0.0", 18 | "glob": "^8.0.3", 19 | "progress": "^2.0.3", 20 | "prompts": "^2.3.2", 21 | "spark-md5": "^3.0.1", 22 | "winston": "^3.3.3", 23 | "winston-daily-rotate-file": "^4.5.0", 24 | "yargs": "^16.0.3" 25 | }, 26 | "repository": { 27 | "type": "git", 28 | "url": "git@github.com:Coding/coding-generic.git" 29 | }, 30 | "devDependencies": { 31 | "eslint": "^8.44.0" 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /lib/utils.js: -------------------------------------------------------------------------------- 1 | const url = require('url'); 2 | const querystring = require('querystring'); 3 | const path = require('path'); 4 | 5 | /** 6 | * 生成 Authorization 7 | * @param {string} username username 8 | * @param {string} password password 9 | * @returns Authorization 10 | */ 11 | const generateAuthorization = (username, password) => { 12 | const buf = Buffer.from(`${username}:${password}`); 13 | return `Basic ${buf.toString('base64')}` 14 | } 15 | 16 | /** 17 | * 获取 registry 上的信息 18 | * @param {string} registry registryUrl 19 | * @returns {{asdf}} 20 | */ 21 | const getRegistryInfo = (registry) => { 22 | const { protocol, host, query, pathname } = url.parse(registry); 23 | const { version } = querystring.parse(query) 24 | return { 25 | requestUrl: `${protocol}//${path.join(host, pathname)}`, 26 | version: !version || version === '' ? 'latest' : version, 27 | host, protocol, pathname 28 | } 29 | } 30 | 31 | module.exports = { 32 | generateAuthorization, 33 | getRegistryInfo 34 | }; -------------------------------------------------------------------------------- /lib/argv.js: -------------------------------------------------------------------------------- 1 | const argv = require('yargs') 2 | .usage('上传文件: coding-generic --username=[:PASSWORD] --path= --registry=') 3 | .usage('上传文件夹: coding-generic --username=[:PASSWORD] --dir --path= --registry=') 4 | .usage('下载文件夹: coding-generic --pull --username=[:PASSWORD] --registry=/list/?version=') 5 | .options({ 6 | username: { 7 | alias: 'u', 8 | describe: '用户名(必填)和密码(可选),用冒号分隔', 9 | demandOption: true 10 | }, 11 | path: { 12 | alias: 'p', 13 | describe: '需要上传的文件路径', 14 | // demandOption: true 15 | }, 16 | registry: { 17 | alias: 'r', 18 | describe: '仓库路径', 19 | demandOption: true 20 | }, 21 | concurrency: { 22 | alias: 'c', 23 | describe: '上传分块并行数', 24 | demandOption: true, 25 | default: 5, 26 | }, 27 | dir: { 28 | alias: 'd', 29 | describe: '上传文件夹', 30 | boolean: true, 31 | }, 32 | pull: { 33 | describe: '下载', 34 | boolean: true, 35 | } 36 | }) 37 | .alias('version', 'v') 38 | .help('h') 39 | .alias('h', 'help') 40 | .example('上传文件: coding-generic --username=coding@coding.com:123456 --path=./test.txt --registry="https://codingcorp-generic.pkg.coding.net/project-name/generic-repo/chunks/test.txt?version=latest"') 41 | .example('上传文件夹: coding-generic --username=coding@coding.com:123456 --dir --path=./dirname --registry="https://codingcorp-generic.pkg.coding.net/project-name/generic-repo?version=latest"') 42 | .argv; 43 | 44 | module.exports = argv; -------------------------------------------------------------------------------- /lib/download.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const path = require('path'); 3 | const logger = require('./log'); 4 | const { generateAuthorization, getRegistryInfo } = require('./utils'); 5 | const { fetchDownloadList, downloadFile } = require('../lib/request'); 6 | const argv = require('./argv'); 7 | 8 | const { version, host, protocol, pathname } = getRegistryInfo(argv.registry); 9 | 10 | let Authorization = ''; 11 | 12 | const onDownload = async () => { 13 | console.log('************************ 准备下载 ************************'); 14 | logger.info('************************ 准备下载 ************************'); 15 | Authorization = generateAuthorization(argv.username, argv.password); 16 | const res = await fetchDownloadList(argv.registry, Authorization) 17 | const { status, fileInfos = [] } = res.data 18 | if (status === 200) { 19 | await downloadFiles(fileInfos) 20 | console.log('************************ 下载完毕 ************************'); 21 | logger.info('************************ 下载完毕 ************************'); 22 | } 23 | } 24 | 25 | const downloadFiles = async (fileInfos = []) => { 26 | try { 27 | return await Promise.all(fileInfos.map(async info => { 28 | console.log(`正在下载 ${info.fileName} ...`); 29 | logger.info(`正在下载 ${info.fileName} ...`); 30 | const p = path.join(process.cwd(), info.fileName); 31 | const dir = p.split('/').slice(0, -1).join('/'); 32 | if (dir && !fs.existsSync(dir)) { 33 | fs.mkdirSync(dir); 34 | } 35 | const writer = fs.createWriteStream(p); 36 | const url = `${protocol}//${path.join(host, path.join(pathname.split('/').slice(0, -2).join('/'), info.fileName))}` 37 | const res = await downloadFile(url, { version }, Authorization); 38 | await res.data.pipe(writer) 39 | await writer.end(); 40 | await writer.close(); 41 | console.log(`下载 ${info.fileName} 完成`); 42 | logger.info(`下载 ${info.fileName} 完成`); 43 | })); 44 | } catch (error) { 45 | console.log(error); 46 | logger.error(error); 47 | throw error; 48 | } 49 | 50 | } 51 | 52 | module.exports = { 53 | onDownload 54 | } -------------------------------------------------------------------------------- /lib/request.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios'); 2 | const util = require('util') 3 | const logger = require('./log'); 4 | 5 | 6 | const http = axios.create({ 7 | withCredentials: true, 8 | }) 9 | 10 | 11 | // 响应拦截器 12 | const responseSuccess = response => { 13 | return Promise.resolve(response) 14 | } 15 | 16 | const responseFailed = error => { 17 | console.log('eeee=>', error) 18 | const url = error && error.config && error.config.url 19 | console.error('网络请求错误', `(${url})`); 20 | logger.error(`网络请求错误 (${url})`); 21 | logger.error(JSON.stringify(util.inspect(error))); 22 | const { response } = error 23 | if (response) { 24 | console.error('网络请求错误', response.data); 25 | logger.error(response.data); 26 | logger.error(response); 27 | 28 | } 29 | return Promise.reject(error) 30 | } 31 | http.interceptors.response.use(responseSuccess, responseFailed) 32 | 33 | 34 | 35 | /** 36 | * 获取已经上传完成的分片信息 37 | * @param {string} requestUrl 38 | * @param {string} version 39 | * @param {string} fileTag 40 | * @param {string} fileSize 41 | * @param {string} Authorization 42 | */ 43 | const getExistChunks = (requestUrl, { 44 | fileSize, 45 | version, 46 | fileTag 47 | }, { 48 | Authorization 49 | }) => { 50 | return http.post(`${requestUrl}?version=${version}&fileTag=${fileTag}&fileSize=${fileSize}&action=part-init`, {}, { 51 | headers: { Authorization } 52 | }) 53 | } 54 | 55 | /** 56 | * 单个分片上传 57 | * @param {string} requestUrl 58 | * @param {string} uploadId 59 | * @param {string} version 60 | * @param {number} partNumber 从 1 开始 61 | * @param {number} size 分片大小 62 | * @param {string} form 63 | * @param {string} headers 64 | * @param {string} Authorization 65 | */ 66 | const uploadChunk = (requestUrl, { 67 | uploadId, 68 | version, 69 | partNumber, 70 | size, 71 | currentChunk, 72 | }, { 73 | headers, 74 | Authorization 75 | }) => { 76 | return http.post(`${requestUrl}?version=${version}&uploadId=${uploadId}&partNumber=${partNumber}&size=${size}&action=part-upload`, currentChunk, { 77 | maxContentLength: Infinity, 78 | maxBodyLength: Infinity, headers: { Authorization, ...headers } 79 | }) 80 | } 81 | 82 | /** 83 | * 分片上传完成后通知合并所有 chunk 84 | * @param {string} requestUrl 85 | * @param {string} version 86 | * @param {string} uploadId 87 | * @param {string} fileTag 88 | * @param {number} fileSize 89 | * @param {string} Authorization 90 | */ 91 | const mergeAllChunks = (requestUrl, { 92 | version, 93 | uploadId, 94 | fileTag, 95 | fileSize 96 | }, { 97 | Authorization 98 | }) => { 99 | return http.post(`${requestUrl}?version=${version}&uploadId=${uploadId}&fileTag=${fileTag}&size=${fileSize}&action=part-complete`, {}, { 100 | headers: { Authorization } 101 | }) 102 | } 103 | 104 | 105 | const fetchDownloadList = async (registry, Authorization) => { 106 | return http.post(registry, { 107 | }, { 108 | headers: { Authorization } 109 | }) 110 | 111 | } 112 | 113 | //http:/codingcorp-generic.pkg.coding-artifacts.test-codingcorp.woa.com/coding-xxx-567023e/generic-public/test/coding-coding 114 | //http://codingcorp-generic.pkg.coding-artifacts.test-codingcorp.woa.com/coding-xxx-567023e/generic-public/test/coding-coding 115 | 116 | const downloadFile = async (url, params, Authorization) => { 117 | return axios.get(url, { 118 | params, 119 | headers: { 120 | Authorization 121 | }, 122 | responseType: 'stream' 123 | }); 124 | 125 | } 126 | 127 | 128 | module.exports = { 129 | getExistChunks, 130 | uploadChunk, 131 | mergeAllChunks, 132 | fetchDownloadList, 133 | downloadFile 134 | } 135 | 136 | 137 | -------------------------------------------------------------------------------- /bin/index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | const fs = require('fs'); 4 | const SparkMD5 = require('spark-md5'); 5 | const chalk = require('chalk'); 6 | const prompts = require('prompts'); 7 | const path = require('path'); 8 | require('winston-daily-rotate-file'); 9 | const ProgressBar = require('progress'); 10 | const BlueBirdPromise = require("bluebird"); 11 | const glob = require('glob'); 12 | 13 | const logger = require('../lib/log'); 14 | const { DEFAULT_CHUNK_SIZE, MAX_CHUNK } = require('../lib/constants'); 15 | const { generateAuthorization, getRegistryInfo } = require('../lib/utils'); 16 | 17 | const { getExistChunks: _getExistChunks, uploadChunk: _uploadChunk, mergeAllChunks: _mergeAllChunks } = require('../lib/request'); 18 | 19 | const { withRetry } = require('../lib/withRetry'); 20 | const argv = require('../lib/argv'); 21 | const { onDownload } = require('../lib/download'); 22 | 23 | const { requestUrl, version } = getRegistryInfo(argv.registry); 24 | 25 | let Authorization = ''; 26 | let md5 = ''; 27 | let uploadId = ''; 28 | let fileSize = 0; 29 | 30 | let chunkSize = DEFAULT_CHUNK_SIZE; 31 | let totalChunk = 0; 32 | 33 | process.on('uncaughtException', error => { 34 | console.log(chalk.red('\n程序发生了一些异常,请稍后重试\n')); 35 | logger.error(error.stack); 36 | }) 37 | 38 | const upload = async (filePath, parts = [], requestUrl) => { 39 | const bar = new ProgressBar(':bar [:current/:total] :percent ', { total: totalChunk }); 40 | const uploadChunk = async (currentChunk, currentChunkIndex, parts, isRetry) => { 41 | if (parts.some(({ partNumber, size }) => partNumber === currentChunkIndex && size === currentChunk.length)) { 42 | bar.tick(); 43 | logger.info(`分片(${currentChunkIndex})已经上传,跳过 (path: ${filePath}) , url: ${requestUrl})`); 44 | return Promise.resolve(); 45 | } 46 | 47 | try { 48 | logger.info(`开始上传分片(${currentChunkIndex}) (path: ${filePath}) , url: ${requestUrl})`); 49 | await _uploadChunk(requestUrl, { 50 | uploadId, 51 | version, 52 | partNumber: currentChunkIndex, 53 | size: currentChunk.length, 54 | currentChunk 55 | }, { 56 | headers: { 57 | 'Content-Type': 'application/octet-stream' 58 | }, 59 | Authorization 60 | }); 61 | logger.info(`分片(${currentChunkIndex})上传完毕 (path: ${filePath}) , url: ${requestUrl})`); 62 | bar.tick(); 63 | } catch (error) { 64 | console.error(`分片(${currentChunkIndex})上传失败 (path: ${filePath}) , url: ${requestUrl})`); 65 | logger.error(`分片(${currentChunkIndex})上传失败 (path: ${filePath}) , url: ${requestUrl})`); 66 | logger.error(error.message); 67 | logger.error(error.stack); 68 | if (['ECONNREFUSED', 'ECONNRESET', 'ENOENT', 'EPROTO'].includes(error.code)) { 69 | // 没有重试过就重试一次 70 | if (!isRetry) { 71 | logger.warn('retry') 72 | logger.warn(error.code); 73 | logger.info(`重试分片(${currentChunkIndex})上传 (path: ${filePath}) , url: ${requestUrl})`); 74 | await uploadChunk(currentChunk, currentChunkIndex, parts, true); 75 | } else { 76 | console.log(chalk.red('网络连接异常,请重新执行命令继续上传')); 77 | logger.error(`分片(${currentChunkIndex})上传时网络连接异常 (path: ${filePath}) , url: ${requestUrl})`); 78 | await logger.close(() => process.exit(1)); 79 | throw error; 80 | } 81 | } else { 82 | console.log(chalk.red((error.response && error.response.data) || error.message)); 83 | await logger.close(() => process.exit(1)); 84 | throw error; 85 | } 86 | } 87 | } 88 | 89 | console.log(`\n开始上传 (${filePath})\n`); 90 | logger.info(`开始上传 (path: ${filePath}) , url: ${requestUrl})`); 91 | 92 | try { 93 | 94 | const chunkIndexs = new Array(totalChunk).fill("").map((_, index) => index + 1); 95 | 96 | logger.info(`分片总数:${totalChunk},分片大小:${chunkSize} (path: ${filePath}) , url: ${requestUrl})`); 97 | 98 | await BlueBirdPromise.map(chunkIndexs, (currentChunkIndex) => { 99 | const start = (currentChunkIndex - 1) * chunkSize; 100 | const end = ((start + chunkSize) >= fileSize) ? fileSize : start + chunkSize - 1; 101 | const stream = fs.createReadStream(filePath, { start, end }) 102 | let buf = []; 103 | return new Promise((resolve, reject) => { 104 | stream.on('data', data => { 105 | buf.push(data) 106 | }) 107 | stream.on('error', error => { 108 | reject('读取文件分片异常,请重新执行命令继续上传'); 109 | }) 110 | stream.on('end', async () => { 111 | await uploadChunk(Buffer.concat(buf), currentChunkIndex, parts); 112 | buf = null; 113 | resolve(); 114 | }) 115 | }).catch(error => { 116 | logger.error(`读取分片 ${currentChunkIndex} 数据失败 (path: ${filePath}) , url: ${requestUrl})`); 117 | throw Error(error) 118 | }) 119 | }, { concurrency: argv.concurrency }) 120 | 121 | } catch (error) { 122 | logger.error(error.message); 123 | logger.error(error.stack); 124 | console.log(chalk(error.message)); 125 | await logger.close(() => process.exit(1)); 126 | throw error; 127 | } 128 | 129 | 130 | 131 | 132 | 133 | const merge = async () => { 134 | console.log(chalk.cyan('正在合并分片,请稍等...')); 135 | logger.info(`正在合并分片 (path: ${filePath}) , url: ${requestUrl})`); 136 | return await _mergeAllChunks(requestUrl, { 137 | version, 138 | uploadId, 139 | fileSize, 140 | fileTag: md5 141 | }, { 142 | Authorization 143 | }); 144 | } 145 | 146 | 147 | try { 148 | const res = await withRetry(merge, 3, 500); 149 | if (res.code) { 150 | logger.error(`合并分片失败 (path: ${filePath}) , url: ${requestUrl})`); 151 | throw (res.message); 152 | } 153 | } catch (error) { 154 | logger.error(error.message); 155 | logger.error(error.stack); 156 | console.log(chalk.red((error.response && error.response.data) || error.message)); 157 | await logger.close(() => process.exit(1)); 158 | throw error; 159 | } 160 | 161 | console.log(chalk.green(`\n上传完毕 (${filePath})\n`)) 162 | logger.info(`************************ 上传完毕 (path: ${filePath}) , url: ${requestUrl}) ************************`) 163 | } 164 | 165 | const getFileMD5Success = async (filePath, requestUrl) => { 166 | let uploadedParts = [] 167 | try { 168 | logger.info(`获取已上传信息 (path: ${filePath} , url: ${requestUrl})`); 169 | const res = await _getExistChunks(requestUrl, { 170 | fileSize, 171 | version, 172 | fileTag: md5 173 | }, { 174 | Authorization 175 | }); 176 | if (res.code) { 177 | logger.info(`获取已上传信息错误(1): ${JSON.stringify(res)} (path: ${filePath} , url: ${requestUrl})`); 178 | throw (res.message); 179 | } 180 | uploadId = res.data.uploadId; 181 | logger.info(`上传的 UploadId: ${uploadId} (path: ${filePath} , url: ${requestUrl})`); 182 | // 上传过一部分 183 | if (Array.isArray(res.data.parts)) { 184 | uploadedParts = res.data.parts 185 | } else { 186 | // 未上传过 187 | uploadedParts = [] 188 | } 189 | } catch (error) { 190 | logger.error(`获取已上传信息错误(2) (path: ${filePath} , url: ${requestUrl})`); 191 | logger.error(error.message); 192 | logger.error(error.stack); 193 | console.log(chalk.red((error.response && error.response.data) || error.message), `(path: ${filePath} , url: ${requestUrl}`); 194 | await logger.close(() => process.exit(1)); 195 | throw error; 196 | } 197 | 198 | await upload(filePath, uploadedParts, requestUrl); 199 | } 200 | 201 | const getFileMD5 = async (filePath, requestUrl) => { 202 | totalChunk = Math.ceil(fileSize / DEFAULT_CHUNK_SIZE); 203 | if (totalChunk > MAX_CHUNK) { 204 | chunkSize = Math.ceil(fileSize / MAX_CHUNK); 205 | totalChunk = Math.ceil(fileSize / chunkSize); 206 | } 207 | const spark = new SparkMD5.ArrayBuffer(); 208 | try { 209 | console.log(`\n开始计算 MD5 (${filePath})\n`); 210 | logger.info(`开始计算 MD5 (${filePath})`); 211 | 212 | const bar = new ProgressBar(':bar [:current/:total] :percent ', { total: totalChunk }); 213 | await new Promise((resolve, reject) => { 214 | const stream = fs.createReadStream(filePath, { highWaterMark: chunkSize }); 215 | stream.on('data', chunk => { 216 | bar.tick(); 217 | spark.append(chunk) 218 | }) 219 | stream.on('error', error => { 220 | reject('读取文件分片异常,请重新执行命令继续上传'); 221 | }) 222 | stream.on('end', async () => { 223 | md5 = spark.end(); 224 | spark.destroy(); 225 | console.log(`\n文件 MD5:${md5}\n`) 226 | await getFileMD5Success(filePath, requestUrl); 227 | resolve(); 228 | }) 229 | }).catch(error => { 230 | logger.error(`计算 MD5 失败(${filePath})`); 231 | throw Error(error); 232 | }) 233 | } catch (error) { 234 | console.log(chalk.red((error.response && error.response.data) || error.message)); 235 | logger.error(error.message); 236 | logger.error(error.stack); 237 | await logger.close(() => process.exit(1)); 238 | throw error; 239 | } 240 | } 241 | 242 | const uploadFile = async (filePath, size, requestUrl) => { 243 | fileSize = size; 244 | logger.info(`************************ 开始上传 (${filePath}) ************************`); 245 | await getFileMD5(filePath, requestUrl); 246 | md5 = ''; 247 | uploadId = ''; 248 | fileSize = 0; 249 | chunkSize = DEFAULT_CHUNK_SIZE; 250 | totalChunk = 0; 251 | } 252 | 253 | const uploadDir = async (dir) => { 254 | let files = []; 255 | try { 256 | files = await new Promise((resolve, reject) => { 257 | glob("**/**", { 258 | cwd: dir, 259 | root: dir 260 | }, function (error, files = []) { 261 | if (error) { 262 | reject(error); 263 | } else { 264 | resolve(files) 265 | } 266 | }) 267 | }); 268 | } catch (error) { 269 | if (error) { 270 | console.log(chalk.red((error.response && error.response.data) || error.message)); 271 | logger.error(error.message); 272 | logger.error(error.stack); 273 | await logger.close(() => process.exit(1)); 274 | throw error; 275 | } else { 276 | return files; 277 | } 278 | } 279 | 280 | 281 | for (const file of files) { 282 | const filePath = path.join(dir, file); 283 | const stat = fs.lstatSync(filePath); 284 | const isDirectory = stat.isDirectory(); 285 | if (!isDirectory) { 286 | const url = new URL(`chunks/${dir.split(path.sep).pop()}/${file}`, requestUrl.endsWith('/') ? requestUrl : `${requestUrl}/`).toString(); 287 | await uploadFile(filePath, stat.size, url); 288 | console.log('************************ **** ************************'); 289 | logger.info('************************ **** ************************'); 290 | } 291 | } 292 | } 293 | 294 | const beforeUpload = async (filePath) => { 295 | const isUploadDir = argv.dir; 296 | let fSize = 0; 297 | try { 298 | const stat = fs.lstatSync(filePath); 299 | const isDirectory = stat.isDirectory(); 300 | if (isDirectory && !isUploadDir) { 301 | console.log(chalk.red(`\n${filePath}不合法,需指定一个文件\n`)) 302 | await logger.close(() => process.exit(1)); 303 | } else if (!isDirectory && isUploadDir) { 304 | console.log(chalk.red(`\n${filePath}不合法,需指定一个文件夹\n`)) 305 | await logger.close(() => process.exit(1)); 306 | } 307 | fSize = stat.size; 308 | } catch (error) { 309 | if (error.code === 'ENOENT') { 310 | console.log(chalk.red(`未找到 ${filePath}`)); 311 | } else { 312 | logger.error(error.message); 313 | logger.error(error.stack); 314 | console.log(chalk.red((error.response && error.response.data) || error.message)); 315 | } 316 | await logger.close(() => process.exit(1)); 317 | throw error; 318 | } 319 | if (isUploadDir) { 320 | await uploadDir(filePath); 321 | } else { 322 | await uploadFile(filePath, fSize, requestUrl); 323 | } 324 | } 325 | 326 | const onUpload = async (_username, _password) => { 327 | Authorization = generateAuthorization(_username, _password); 328 | 329 | logger.info('************************ 准备上传 ************************') 330 | 331 | if (path.isAbsolute(argv.path)) { 332 | await beforeUpload(argv.path); 333 | } else { 334 | await beforeUpload(path.join(process.cwd(), argv.path)) 335 | } 336 | 337 | await logger.close(); 338 | } 339 | 340 | const [username, password] = argv.username.split(':'); 341 | 342 | if (username && password) { 343 | if (argv.pull) { 344 | onDownload() 345 | } else { 346 | onUpload(username, password); 347 | } 348 | } else { 349 | prompts([ 350 | { 351 | type: 'password', 352 | name: 'password', 353 | message: '请输入登录密码:', 354 | } 355 | ], { 356 | onCancel: () => { } 357 | } 358 | ).then(async (answers) => { 359 | if (!answers.password) { 360 | return; 361 | } if (argv.pull) { 362 | onDownload() 363 | } else { 364 | onUpload(argv.username, answers.password); 365 | } 366 | }) 367 | } 368 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@aashutoshrathi/word-wrap@^1.2.3": 6 | version "1.2.6" 7 | resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" 8 | integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== 9 | 10 | "@dabh/diagnostics@^2.0.2": 11 | version "2.0.2" 12 | resolved "https://registry.npm.taobao.org/@dabh/diagnostics/download/@dabh/diagnostics-2.0.2.tgz#290d08f7b381b8f94607dc8f471a12c675f9db31" 13 | integrity sha1-KQ0I97OBuPlGB9yPRxoSxnX52zE= 14 | dependencies: 15 | colorspace "1.1.x" 16 | enabled "2.0.x" 17 | kuler "^2.0.0" 18 | 19 | "@eslint-community/eslint-utils@^4.2.0": 20 | version "4.4.0" 21 | resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" 22 | integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== 23 | dependencies: 24 | eslint-visitor-keys "^3.3.0" 25 | 26 | "@eslint-community/regexpp@^4.4.0": 27 | version "4.5.1" 28 | resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884" 29 | integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== 30 | 31 | "@eslint/eslintrc@^2.1.0": 32 | version "2.1.0" 33 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.0.tgz#82256f164cc9e0b59669efc19d57f8092706841d" 34 | integrity sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A== 35 | dependencies: 36 | ajv "^6.12.4" 37 | debug "^4.3.2" 38 | espree "^9.6.0" 39 | globals "^13.19.0" 40 | ignore "^5.2.0" 41 | import-fresh "^3.2.1" 42 | js-yaml "^4.1.0" 43 | minimatch "^3.1.2" 44 | strip-json-comments "^3.1.1" 45 | 46 | "@eslint/js@8.44.0": 47 | version "8.44.0" 48 | resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.44.0.tgz#961a5903c74139390478bdc808bcde3fc45ab7af" 49 | integrity sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw== 50 | 51 | "@humanwhocodes/config-array@^0.11.10": 52 | version "0.11.10" 53 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" 54 | integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== 55 | dependencies: 56 | "@humanwhocodes/object-schema" "^1.2.1" 57 | debug "^4.1.1" 58 | minimatch "^3.0.5" 59 | 60 | "@humanwhocodes/module-importer@^1.0.1": 61 | version "1.0.1" 62 | resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" 63 | integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== 64 | 65 | "@humanwhocodes/object-schema@^1.2.1": 66 | version "1.2.1" 67 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" 68 | integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== 69 | 70 | "@nodelib/fs.scandir@2.1.5": 71 | version "2.1.5" 72 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 73 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 74 | dependencies: 75 | "@nodelib/fs.stat" "2.0.5" 76 | run-parallel "^1.1.9" 77 | 78 | "@nodelib/fs.stat@2.0.5": 79 | version "2.0.5" 80 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 81 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 82 | 83 | "@nodelib/fs.walk@^1.2.8": 84 | version "1.2.8" 85 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" 86 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 87 | dependencies: 88 | "@nodelib/fs.scandir" "2.1.5" 89 | fastq "^1.6.0" 90 | 91 | acorn-jsx@^5.3.2: 92 | version "5.3.2" 93 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" 94 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 95 | 96 | acorn@^8.9.0: 97 | version "8.9.0" 98 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.9.0.tgz#78a16e3b2bcc198c10822786fa6679e245db5b59" 99 | integrity sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ== 100 | 101 | ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.3, ajv@^6.12.4: 102 | version "6.12.6" 103 | resolved "https://registry.npm.taobao.org/ajv/download/ajv-6.12.6.tgz?cache=0&sync_timestamp=1603561547443&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 104 | integrity sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ= 105 | dependencies: 106 | fast-deep-equal "^3.1.1" 107 | fast-json-stable-stringify "^2.0.0" 108 | json-schema-traverse "^0.4.1" 109 | uri-js "^4.2.2" 110 | 111 | ansi-regex@^5.0.0: 112 | version "5.0.0" 113 | resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" 114 | integrity sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U= 115 | 116 | ansi-regex@^5.0.1: 117 | version "5.0.1" 118 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 119 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 120 | 121 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 122 | version "4.3.0" 123 | resolved "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.3.0.tgz?cache=0&sync_timestamp=1601839122515&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 124 | integrity sha1-7dgDYornHATIWuegkG7a00tkiTc= 125 | dependencies: 126 | color-convert "^2.0.1" 127 | 128 | argparse@^2.0.1: 129 | version "2.0.1" 130 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 131 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 132 | 133 | asn1@~0.2.3: 134 | version "0.2.4" 135 | resolved "https://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" 136 | integrity sha1-jSR136tVO7M+d7VOWeiAu4ziMTY= 137 | dependencies: 138 | safer-buffer "~2.1.0" 139 | 140 | assert-plus@1.0.0, assert-plus@^1.0.0: 141 | version "1.0.0" 142 | resolved "https://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 143 | integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= 144 | 145 | async@^3.1.0: 146 | version "3.2.0" 147 | resolved "https://registry.npm.taobao.org/async/download/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" 148 | integrity sha1-s6JoXF67ZB094C0WEALGD8n4VyA= 149 | 150 | asynckit@^0.4.0: 151 | version "0.4.0" 152 | resolved "https://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 153 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= 154 | 155 | atomically@^1.3.1: 156 | version "1.6.0" 157 | resolved "https://registry.npm.taobao.org/atomically/download/atomically-1.6.0.tgz?cache=0&sync_timestamp=1603198452406&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fatomically%2Fdownload%2Fatomically-1.6.0.tgz#d8d47f99834dbb88bd6266cc69a1447e2f3675ec" 158 | integrity sha1-2NR/mYNNu4i9YmbMaaFEfi82dew= 159 | 160 | aws-sign2@~0.7.0: 161 | version "0.7.0" 162 | resolved "https://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz?cache=0&sync_timestamp=1589682812085&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faws-sign2%2Fdownload%2Faws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" 163 | integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= 164 | 165 | aws4@^1.8.0: 166 | version "1.10.1" 167 | resolved "https://registry.npm.taobao.org/aws4/download/aws4-1.10.1.tgz?cache=0&sync_timestamp=1597236947743&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faws4%2Fdownload%2Faws4-1.10.1.tgz#e1e82e4f3e999e2cfd61b161280d16a111f86428" 168 | integrity sha1-4eguTz6Zniz9YbFhKA0WoRH4ZCg= 169 | 170 | axios@^0.21.1: 171 | version "0.21.4" 172 | resolved "https://mirrors.tencent.com/npm/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" 173 | integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== 174 | dependencies: 175 | follow-redirects "^1.14.0" 176 | 177 | balanced-match@^1.0.0: 178 | version "1.0.2" 179 | resolved "https://mirrors.tencent.com/npm/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 180 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 181 | 182 | bcrypt-pbkdf@^1.0.0: 183 | version "1.0.2" 184 | resolved "https://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" 185 | integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= 186 | dependencies: 187 | tweetnacl "^0.14.3" 188 | 189 | bluebird@^3.7.2: 190 | version "3.7.2" 191 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" 192 | integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== 193 | 194 | brace-expansion@^1.1.7: 195 | version "1.1.11" 196 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 197 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 198 | dependencies: 199 | balanced-match "^1.0.0" 200 | concat-map "0.0.1" 201 | 202 | brace-expansion@^2.0.1: 203 | version "2.0.1" 204 | resolved "https://mirrors.tencent.com/npm/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" 205 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== 206 | dependencies: 207 | balanced-match "^1.0.0" 208 | 209 | callsites@^3.0.0: 210 | version "3.1.0" 211 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 212 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 213 | 214 | caseless@~0.12.0: 215 | version "0.12.0" 216 | resolved "https://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 217 | integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= 218 | 219 | chalk@^4.0.0: 220 | version "4.1.2" 221 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 222 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 223 | dependencies: 224 | ansi-styles "^4.1.0" 225 | supports-color "^7.1.0" 226 | 227 | chalk@^4.1.0: 228 | version "4.1.0" 229 | resolved "https://registry.npm.taobao.org/chalk/download/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" 230 | integrity sha1-ThSHCmGNni7dl92DRf2dncMVZGo= 231 | dependencies: 232 | ansi-styles "^4.1.0" 233 | supports-color "^7.1.0" 234 | 235 | cliui@^7.0.2: 236 | version "7.0.3" 237 | resolved "https://registry.npm.taobao.org/cliui/download/cliui-7.0.3.tgz?cache=0&sync_timestamp=1602861367442&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-7.0.3.tgz#ef180f26c8d9bff3927ee52428bfec2090427981" 238 | integrity sha1-7xgPJsjZv/OSfuUkKL/sIJBCeYE= 239 | dependencies: 240 | string-width "^4.2.0" 241 | strip-ansi "^6.0.0" 242 | wrap-ansi "^7.0.0" 243 | 244 | color-convert@^1.9.1: 245 | version "1.9.3" 246 | resolved "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 247 | integrity sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg= 248 | dependencies: 249 | color-name "1.1.3" 250 | 251 | color-convert@^2.0.1: 252 | version "2.0.1" 253 | resolved "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 254 | integrity sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM= 255 | dependencies: 256 | color-name "~1.1.4" 257 | 258 | color-name@1.1.3: 259 | version "1.1.3" 260 | resolved "https://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 261 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 262 | 263 | color-name@^1.0.0, color-name@~1.1.4: 264 | version "1.1.4" 265 | resolved "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 266 | integrity sha1-wqCah6y95pVD3m9j+jmVyCbFNqI= 267 | 268 | color-string@^1.5.2: 269 | version "1.5.4" 270 | resolved "https://registry.npm.taobao.org/color-string/download/color-string-1.5.4.tgz?cache=0&sync_timestamp=1602228106182&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolor-string%2Fdownload%2Fcolor-string-1.5.4.tgz#dd51cd25cfee953d138fe4002372cc3d0e504cb6" 271 | integrity sha1-3VHNJc/ulT0Tj+QAI3LMPQ5QTLY= 272 | dependencies: 273 | color-name "^1.0.0" 274 | simple-swizzle "^0.2.2" 275 | 276 | color@3.0.x: 277 | version "3.0.0" 278 | resolved "https://registry.npm.taobao.org/color/download/color-3.0.0.tgz?cache=0&sync_timestamp=1602228883047&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolor%2Fdownload%2Fcolor-3.0.0.tgz#d920b4328d534a3ac8295d68f7bd4ba6c427be9a" 279 | integrity sha1-2SC0Mo1TSjrIKV1o971LpsQnvpo= 280 | dependencies: 281 | color-convert "^1.9.1" 282 | color-string "^1.5.2" 283 | 284 | colors@^1.2.1: 285 | version "1.4.0" 286 | resolved "https://registry.npm.taobao.org/colors/download/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" 287 | integrity sha1-xQSRR51MG9rtLJztMs98fcI2D3g= 288 | 289 | colorspace@1.1.x: 290 | version "1.1.2" 291 | resolved "https://registry.npm.taobao.org/colorspace/download/colorspace-1.1.2.tgz#e0128950d082b86a2168580796a0aa5d6c68d8c5" 292 | integrity sha1-4BKJUNCCuGohaFgHlqCqXWxo2MU= 293 | dependencies: 294 | color "3.0.x" 295 | text-hex "1.0.x" 296 | 297 | combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: 298 | version "1.0.8" 299 | resolved "https://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 300 | integrity sha1-w9RaizT9cwYxoRCoolIGgrMdWn8= 301 | dependencies: 302 | delayed-stream "~1.0.0" 303 | 304 | concat-map@0.0.1: 305 | version "0.0.1" 306 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 307 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 308 | 309 | conf@^7.1.2: 310 | version "7.1.2" 311 | resolved "https://registry.npm.taobao.org/conf/download/conf-7.1.2.tgz#d9678a9d8f04de8bf5cd475105da8fdae49c2ec4" 312 | integrity sha1-2WeKnY8E3ov1zUdRBdqP2uScLsQ= 313 | dependencies: 314 | ajv "^6.12.2" 315 | atomically "^1.3.1" 316 | debounce-fn "^4.0.0" 317 | dot-prop "^5.2.0" 318 | env-paths "^2.2.0" 319 | json-schema-typed "^7.0.3" 320 | make-dir "^3.1.0" 321 | onetime "^5.1.0" 322 | pkg-up "^3.1.0" 323 | semver "^7.3.2" 324 | 325 | core-util-is@1.0.2, core-util-is@~1.0.0: 326 | version "1.0.2" 327 | resolved "https://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 328 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 329 | 330 | cos-nodejs-sdk-v5@^2.8.2: 331 | version "2.8.2" 332 | resolved "https://registry.npm.taobao.org/cos-nodejs-sdk-v5/download/cos-nodejs-sdk-v5-2.8.2.tgz#3ccb5bc872fe22b1952e600e2879fb5ef513e209" 333 | integrity sha1-PMtbyHL+IrGVLmAOKHn7XvUT4gk= 334 | dependencies: 335 | conf "^7.1.2" 336 | mime-types "^2.1.24" 337 | request "^2.88.0" 338 | xml2js "^0.4.19" 339 | 340 | cross-spawn@^7.0.2: 341 | version "7.0.3" 342 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 343 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 344 | dependencies: 345 | path-key "^3.1.0" 346 | shebang-command "^2.0.0" 347 | which "^2.0.1" 348 | 349 | dashdash@^1.12.0: 350 | version "1.14.1" 351 | resolved "https://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz?cache=0&sync_timestamp=1601073454623&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdashdash%2Fdownload%2Fdashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 352 | integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= 353 | dependencies: 354 | assert-plus "^1.0.0" 355 | 356 | debounce-fn@^4.0.0: 357 | version "4.0.0" 358 | resolved "https://registry.npm.taobao.org/debounce-fn/download/debounce-fn-4.0.0.tgz#ed76d206d8a50e60de0dd66d494d82835ffe61c7" 359 | integrity sha1-7XbSBtilDmDeDdZtSU2Cg1/+Ycc= 360 | dependencies: 361 | mimic-fn "^3.0.0" 362 | 363 | debug@^4.1.1, debug@^4.3.2: 364 | version "4.3.4" 365 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 366 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 367 | dependencies: 368 | ms "2.1.2" 369 | 370 | deep-is@^0.1.3: 371 | version "0.1.4" 372 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" 373 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 374 | 375 | delayed-stream@~1.0.0: 376 | version "1.0.0" 377 | resolved "https://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 378 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= 379 | 380 | doctrine@^3.0.0: 381 | version "3.0.0" 382 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 383 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 384 | dependencies: 385 | esutils "^2.0.2" 386 | 387 | dot-prop@^5.2.0: 388 | version "5.3.0" 389 | resolved "https://registry.npm.taobao.org/dot-prop/download/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" 390 | integrity sha1-kMzOcIzZzYLMTcjD3dmr3VWyDog= 391 | dependencies: 392 | is-obj "^2.0.0" 393 | 394 | ecc-jsbn@~0.1.1: 395 | version "0.1.2" 396 | resolved "https://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz?cache=0&sync_timestamp=1589682745945&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fecc-jsbn%2Fdownload%2Fecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" 397 | integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= 398 | dependencies: 399 | jsbn "~0.1.0" 400 | safer-buffer "^2.1.0" 401 | 402 | emoji-regex@^8.0.0: 403 | version "8.0.0" 404 | resolved "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-8.0.0.tgz?cache=0&sync_timestamp=1603212180491&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Femoji-regex%2Fdownload%2Femoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 405 | integrity sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc= 406 | 407 | enabled@2.0.x: 408 | version "2.0.0" 409 | resolved "https://registry.npm.taobao.org/enabled/download/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" 410 | integrity sha1-+d2S7C1vS7wNXR5k4h1hzUZl58I= 411 | 412 | env-paths@^2.2.0: 413 | version "2.2.0" 414 | resolved "https://registry.npm.taobao.org/env-paths/download/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" 415 | integrity sha1-zcpVfcAJFSkX1hZuL+vh8DloXkM= 416 | 417 | escalade@^3.1.1: 418 | version "3.1.1" 419 | resolved "https://registry.npm.taobao.org/escalade/download/escalade-3.1.1.tgz?cache=0&sync_timestamp=1602567224085&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescalade%2Fdownload%2Fescalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 420 | integrity sha1-2M/ccACWXFoBdLSoLqpcBVJ0LkA= 421 | 422 | escape-string-regexp@^4.0.0: 423 | version "4.0.0" 424 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 425 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 426 | 427 | eslint-scope@^7.2.0: 428 | version "7.2.0" 429 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" 430 | integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== 431 | dependencies: 432 | esrecurse "^4.3.0" 433 | estraverse "^5.2.0" 434 | 435 | eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: 436 | version "3.4.1" 437 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" 438 | integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== 439 | 440 | eslint@^8.44.0: 441 | version "8.44.0" 442 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.44.0.tgz#51246e3889b259bbcd1d7d736a0c10add4f0e500" 443 | integrity sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A== 444 | dependencies: 445 | "@eslint-community/eslint-utils" "^4.2.0" 446 | "@eslint-community/regexpp" "^4.4.0" 447 | "@eslint/eslintrc" "^2.1.0" 448 | "@eslint/js" "8.44.0" 449 | "@humanwhocodes/config-array" "^0.11.10" 450 | "@humanwhocodes/module-importer" "^1.0.1" 451 | "@nodelib/fs.walk" "^1.2.8" 452 | ajv "^6.10.0" 453 | chalk "^4.0.0" 454 | cross-spawn "^7.0.2" 455 | debug "^4.3.2" 456 | doctrine "^3.0.0" 457 | escape-string-regexp "^4.0.0" 458 | eslint-scope "^7.2.0" 459 | eslint-visitor-keys "^3.4.1" 460 | espree "^9.6.0" 461 | esquery "^1.4.2" 462 | esutils "^2.0.2" 463 | fast-deep-equal "^3.1.3" 464 | file-entry-cache "^6.0.1" 465 | find-up "^5.0.0" 466 | glob-parent "^6.0.2" 467 | globals "^13.19.0" 468 | graphemer "^1.4.0" 469 | ignore "^5.2.0" 470 | import-fresh "^3.0.0" 471 | imurmurhash "^0.1.4" 472 | is-glob "^4.0.0" 473 | is-path-inside "^3.0.3" 474 | js-yaml "^4.1.0" 475 | json-stable-stringify-without-jsonify "^1.0.1" 476 | levn "^0.4.1" 477 | lodash.merge "^4.6.2" 478 | minimatch "^3.1.2" 479 | natural-compare "^1.4.0" 480 | optionator "^0.9.3" 481 | strip-ansi "^6.0.1" 482 | strip-json-comments "^3.1.0" 483 | text-table "^0.2.0" 484 | 485 | espree@^9.6.0: 486 | version "9.6.0" 487 | resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.0.tgz#80869754b1c6560f32e3b6929194a3fe07c5b82f" 488 | integrity sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A== 489 | dependencies: 490 | acorn "^8.9.0" 491 | acorn-jsx "^5.3.2" 492 | eslint-visitor-keys "^3.4.1" 493 | 494 | esquery@^1.4.2: 495 | version "1.5.0" 496 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" 497 | integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== 498 | dependencies: 499 | estraverse "^5.1.0" 500 | 501 | esrecurse@^4.3.0: 502 | version "4.3.0" 503 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 504 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 505 | dependencies: 506 | estraverse "^5.2.0" 507 | 508 | estraverse@^5.1.0, estraverse@^5.2.0: 509 | version "5.3.0" 510 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" 511 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 512 | 513 | esutils@^2.0.2: 514 | version "2.0.3" 515 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 516 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 517 | 518 | extend@~3.0.2: 519 | version "3.0.2" 520 | resolved "https://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz?cache=0&sync_timestamp=1589682707348&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fextend%2Fdownload%2Fextend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" 521 | integrity sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo= 522 | 523 | extsprintf@1.3.0: 524 | version "1.3.0" 525 | resolved "https://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" 526 | integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= 527 | 528 | extsprintf@^1.2.0: 529 | version "1.4.0" 530 | resolved "https://registry.npm.taobao.org/extsprintf/download/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" 531 | integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= 532 | 533 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 534 | version "3.1.3" 535 | resolved "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 536 | integrity sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU= 537 | 538 | fast-json-stable-stringify@^2.0.0: 539 | version "2.1.0" 540 | resolved "https://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 541 | integrity sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM= 542 | 543 | fast-levenshtein@^2.0.6: 544 | version "2.0.6" 545 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 546 | integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== 547 | 548 | fast-safe-stringify@^2.0.4: 549 | version "2.0.7" 550 | resolved "https://registry.npm.taobao.org/fast-safe-stringify/download/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743" 551 | integrity sha1-EkqohYmSYfaK7bQqfAgN6dpgh0M= 552 | 553 | fastq@^1.6.0: 554 | version "1.15.0" 555 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" 556 | integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== 557 | dependencies: 558 | reusify "^1.0.4" 559 | 560 | fecha@^4.2.0: 561 | version "4.2.0" 562 | resolved "https://registry.npm.taobao.org/fecha/download/fecha-4.2.0.tgz#3ffb6395453e3f3efff850404f0a59b6747f5f41" 563 | integrity sha1-P/tjlUU+Pz7/+FBATwpZtnR/X0E= 564 | 565 | file-entry-cache@^6.0.1: 566 | version "6.0.1" 567 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" 568 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 569 | dependencies: 570 | flat-cache "^3.0.4" 571 | 572 | file-stream-rotator@^0.5.7: 573 | version "0.5.7" 574 | resolved "https://registry.npm.taobao.org/file-stream-rotator/download/file-stream-rotator-0.5.7.tgz#868a2e5966f7640a17dd86eda0e4467c089f6286" 575 | integrity sha1-hoouWWb3ZAoX3YbtoORGfAifYoY= 576 | dependencies: 577 | moment "^2.11.2" 578 | 579 | find-up@^3.0.0: 580 | version "3.0.0" 581 | resolved "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz?cache=0&sync_timestamp=1597169842138&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" 582 | integrity sha1-SRafHXmTQwZG2mHsxa41XCHJe3M= 583 | dependencies: 584 | locate-path "^3.0.0" 585 | 586 | find-up@^5.0.0: 587 | version "5.0.0" 588 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 589 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 590 | dependencies: 591 | locate-path "^6.0.0" 592 | path-exists "^4.0.0" 593 | 594 | flat-cache@^3.0.4: 595 | version "3.0.4" 596 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" 597 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== 598 | dependencies: 599 | flatted "^3.1.0" 600 | rimraf "^3.0.2" 601 | 602 | flatted@^3.1.0: 603 | version "3.2.7" 604 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" 605 | integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== 606 | 607 | fn.name@1.x.x: 608 | version "1.1.0" 609 | resolved "https://registry.npm.taobao.org/fn.name/download/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" 610 | integrity sha1-JsrYAXlnrqhzG8QpYdBKPVmIrMw= 611 | 612 | follow-redirects@^1.14.0: 613 | version "1.15.2" 614 | resolved "https://mirrors.tencent.com/npm/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" 615 | integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== 616 | 617 | forever-agent@~0.6.1: 618 | version "0.6.1" 619 | resolved "https://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 620 | integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= 621 | 622 | form-data@^3.0.0: 623 | version "3.0.0" 624 | resolved "https://registry.npm.taobao.org/form-data/download/form-data-3.0.0.tgz#31b7e39c85f1355b7139ee0c647cf0de7f83c682" 625 | integrity sha1-MbfjnIXxNVtxOe4MZHzw3n+DxoI= 626 | dependencies: 627 | asynckit "^0.4.0" 628 | combined-stream "^1.0.8" 629 | mime-types "^2.1.12" 630 | 631 | form-data@~2.3.2: 632 | version "2.3.3" 633 | resolved "https://registry.npm.taobao.org/form-data/download/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" 634 | integrity sha1-3M5SwF9kTymManq5Nr1yTO/786Y= 635 | dependencies: 636 | asynckit "^0.4.0" 637 | combined-stream "^1.0.6" 638 | mime-types "^2.1.12" 639 | 640 | fs.realpath@^1.0.0: 641 | version "1.0.0" 642 | resolved "https://mirrors.tencent.com/npm/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 643 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 644 | 645 | get-caller-file@^2.0.5: 646 | version "2.0.5" 647 | resolved "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 648 | integrity sha1-T5RBKoLbMvNuOwuXQfipf+sDH34= 649 | 650 | getpass@^0.1.1: 651 | version "0.1.7" 652 | resolved "https://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz?cache=0&sync_timestamp=1589682745510&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fgetpass%2Fdownload%2Fgetpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 653 | integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= 654 | dependencies: 655 | assert-plus "^1.0.0" 656 | 657 | glob-parent@^6.0.2: 658 | version "6.0.2" 659 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" 660 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 661 | dependencies: 662 | is-glob "^4.0.3" 663 | 664 | glob@^7.1.3: 665 | version "7.2.3" 666 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" 667 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 668 | dependencies: 669 | fs.realpath "^1.0.0" 670 | inflight "^1.0.4" 671 | inherits "2" 672 | minimatch "^3.1.1" 673 | once "^1.3.0" 674 | path-is-absolute "^1.0.0" 675 | 676 | glob@^8.0.3: 677 | version "8.0.3" 678 | resolved "https://mirrors.tencent.com/npm/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" 679 | integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== 680 | dependencies: 681 | fs.realpath "^1.0.0" 682 | inflight "^1.0.4" 683 | inherits "2" 684 | minimatch "^5.0.1" 685 | once "^1.3.0" 686 | 687 | globals@^13.19.0: 688 | version "13.20.0" 689 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" 690 | integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== 691 | dependencies: 692 | type-fest "^0.20.2" 693 | 694 | graphemer@^1.4.0: 695 | version "1.4.0" 696 | resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" 697 | integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== 698 | 699 | har-schema@^2.0.0: 700 | version "2.0.0" 701 | resolved "https://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" 702 | integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= 703 | 704 | har-validator@~5.1.3: 705 | version "5.1.5" 706 | resolved "https://registry.npm.taobao.org/har-validator/download/har-validator-5.1.5.tgz?cache=0&sync_timestamp=1596082584903&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhar-validator%2Fdownload%2Fhar-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" 707 | integrity sha1-HwgDufjLIMD6E4It8ezds2veHv0= 708 | dependencies: 709 | ajv "^6.12.3" 710 | har-schema "^2.0.0" 711 | 712 | has-flag@^4.0.0: 713 | version "4.0.0" 714 | resolved "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 715 | integrity sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s= 716 | 717 | http-signature@~1.2.0: 718 | version "1.2.0" 719 | resolved "https://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz?cache=0&sync_timestamp=1600868452638&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-signature%2Fdownload%2Fhttp-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" 720 | integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= 721 | dependencies: 722 | assert-plus "^1.0.0" 723 | jsprim "^1.2.2" 724 | sshpk "^1.7.0" 725 | 726 | ignore@^5.2.0: 727 | version "5.2.4" 728 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" 729 | integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== 730 | 731 | import-fresh@^3.0.0, import-fresh@^3.2.1: 732 | version "3.3.0" 733 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 734 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 735 | dependencies: 736 | parent-module "^1.0.0" 737 | resolve-from "^4.0.0" 738 | 739 | imurmurhash@^0.1.4: 740 | version "0.1.4" 741 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 742 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== 743 | 744 | inflight@^1.0.4: 745 | version "1.0.6" 746 | resolved "https://mirrors.tencent.com/npm/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 747 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 748 | dependencies: 749 | once "^1.3.0" 750 | wrappy "1" 751 | 752 | inherits@2, inherits@^2.0.3, inherits@~2.0.3: 753 | version "2.0.4" 754 | resolved "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 755 | integrity sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w= 756 | 757 | is-arrayish@^0.3.1: 758 | version "0.3.2" 759 | resolved "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" 760 | integrity sha1-RXSirlb3qyBolvtDHq7tBm/fjwM= 761 | 762 | is-extglob@^2.1.1: 763 | version "2.1.1" 764 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 765 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 766 | 767 | is-fullwidth-code-point@^3.0.0: 768 | version "3.0.0" 769 | resolved "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 770 | integrity sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0= 771 | 772 | is-glob@^4.0.0, is-glob@^4.0.3: 773 | version "4.0.3" 774 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 775 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 776 | dependencies: 777 | is-extglob "^2.1.1" 778 | 779 | is-obj@^2.0.0: 780 | version "2.0.0" 781 | resolved "https://registry.npm.taobao.org/is-obj/download/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" 782 | integrity sha1-Rz+wXZc3BeP9liBUUBjKjiLvSYI= 783 | 784 | is-path-inside@^3.0.3: 785 | version "3.0.3" 786 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" 787 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 788 | 789 | is-stream@^2.0.0: 790 | version "2.0.0" 791 | resolved "https://registry.npm.taobao.org/is-stream/download/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" 792 | integrity sha1-venDJoDW+uBBKdasnZIc54FfeOM= 793 | 794 | is-typedarray@~1.0.0: 795 | version "1.0.0" 796 | resolved "https://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 797 | integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= 798 | 799 | isarray@~1.0.0: 800 | version "1.0.0" 801 | resolved "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 802 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 803 | 804 | isexe@^2.0.0: 805 | version "2.0.0" 806 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 807 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 808 | 809 | isstream@~0.1.2: 810 | version "0.1.2" 811 | resolved "https://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 812 | integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= 813 | 814 | js-yaml@^4.1.0: 815 | version "4.1.0" 816 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 817 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 818 | dependencies: 819 | argparse "^2.0.1" 820 | 821 | jsbn@~0.1.0: 822 | version "0.1.1" 823 | resolved "https://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz?cache=0&sync_timestamp=1589682745609&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsbn%2Fdownload%2Fjsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 824 | integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= 825 | 826 | json-schema-traverse@^0.4.1: 827 | version "0.4.1" 828 | resolved "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz?cache=0&sync_timestamp=1599333856086&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-schema-traverse%2Fdownload%2Fjson-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 829 | integrity sha1-afaofZUTq4u4/mO9sJecRI5oRmA= 830 | 831 | json-schema-typed@^7.0.3: 832 | version "7.0.3" 833 | resolved "https://registry.npm.taobao.org/json-schema-typed/download/json-schema-typed-7.0.3.tgz#23ff481b8b4eebcd2ca123b4fa0409e66469a2d9" 834 | integrity sha1-I/9IG4tO680soSO0+gQJ5mRpotk= 835 | 836 | json-schema@0.2.3: 837 | version "0.2.3" 838 | resolved "https://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 839 | integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= 840 | 841 | json-stable-stringify-without-jsonify@^1.0.1: 842 | version "1.0.1" 843 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 844 | integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== 845 | 846 | json-stringify-safe@~5.0.1: 847 | version "5.0.1" 848 | resolved "https://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz?cache=0&sync_timestamp=1589682771374&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-stringify-safe%2Fdownload%2Fjson-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 849 | integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= 850 | 851 | jsprim@^1.2.2: 852 | version "1.4.1" 853 | resolved "https://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" 854 | integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= 855 | dependencies: 856 | assert-plus "1.0.0" 857 | extsprintf "1.3.0" 858 | json-schema "0.2.3" 859 | verror "1.10.0" 860 | 861 | kleur@^3.0.3: 862 | version "3.0.3" 863 | resolved "https://registry.npm.taobao.org/kleur/download/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" 864 | integrity sha1-p5yezIbuHOP6YgbRIWxQHxR/wH4= 865 | 866 | kuler@^2.0.0: 867 | version "2.0.0" 868 | resolved "https://registry.npm.taobao.org/kuler/download/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" 869 | integrity sha1-4sVwo4ADiPtEQH6FFTHB1nCwYbM= 870 | 871 | levn@^0.4.1: 872 | version "0.4.1" 873 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 874 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 875 | dependencies: 876 | prelude-ls "^1.2.1" 877 | type-check "~0.4.0" 878 | 879 | locate-path@^3.0.0: 880 | version "3.0.0" 881 | resolved "https://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" 882 | integrity sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4= 883 | dependencies: 884 | p-locate "^3.0.0" 885 | path-exists "^3.0.0" 886 | 887 | locate-path@^6.0.0: 888 | version "6.0.0" 889 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 890 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 891 | dependencies: 892 | p-locate "^5.0.0" 893 | 894 | lodash.merge@^4.6.2: 895 | version "4.6.2" 896 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 897 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 898 | 899 | logform@^2.2.0: 900 | version "2.2.0" 901 | resolved "https://registry.npm.taobao.org/logform/download/logform-2.2.0.tgz?cache=0&sync_timestamp=1592729921183&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flogform%2Fdownload%2Flogform-2.2.0.tgz#40f036d19161fc76b68ab50fdc7fe495544492f2" 902 | integrity sha1-QPA20ZFh/Ha2irUP3H/klVREkvI= 903 | dependencies: 904 | colors "^1.2.1" 905 | fast-safe-stringify "^2.0.4" 906 | fecha "^4.2.0" 907 | ms "^2.1.1" 908 | triple-beam "^1.3.0" 909 | 910 | make-dir@^3.1.0: 911 | version "3.1.0" 912 | resolved "https://registry.npm.taobao.org/make-dir/download/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" 913 | integrity sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8= 914 | dependencies: 915 | semver "^6.0.0" 916 | 917 | mime-db@1.44.0: 918 | version "1.44.0" 919 | resolved "https://registry.npm.taobao.org/mime-db/download/mime-db-1.44.0.tgz?cache=0&sync_timestamp=1600831210195&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-db%2Fdownload%2Fmime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" 920 | integrity sha1-+hHF6wrKEzS0Izy01S8QxaYnL5I= 921 | 922 | mime-types@^2.1.12, mime-types@^2.1.24, mime-types@~2.1.19: 923 | version "2.1.27" 924 | resolved "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.27.tgz?cache=0&sync_timestamp=1589682770020&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-types%2Fdownload%2Fmime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" 925 | integrity sha1-R5SfmOJ56lMRn1ci4PNOUpvsAJ8= 926 | dependencies: 927 | mime-db "1.44.0" 928 | 929 | mimic-fn@^2.1.0: 930 | version "2.1.0" 931 | resolved "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz?cache=0&sync_timestamp=1596095644798&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmimic-fn%2Fdownload%2Fmimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" 932 | integrity sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs= 933 | 934 | mimic-fn@^3.0.0: 935 | version "3.1.0" 936 | resolved "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-3.1.0.tgz?cache=0&sync_timestamp=1596095644798&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmimic-fn%2Fdownload%2Fmimic-fn-3.1.0.tgz#65755145bbf3e36954b949c16450427451d5ca74" 937 | integrity sha1-ZXVRRbvz42lUuUnBZFBCdFHVynQ= 938 | 939 | minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: 940 | version "3.1.2" 941 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 942 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 943 | dependencies: 944 | brace-expansion "^1.1.7" 945 | 946 | minimatch@^5.0.1: 947 | version "5.1.0" 948 | resolved "https://mirrors.tencent.com/npm/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" 949 | integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== 950 | dependencies: 951 | brace-expansion "^2.0.1" 952 | 953 | moment@^2.11.2: 954 | version "2.29.1" 955 | resolved "https://registry.npm.taobao.org/moment/download/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" 956 | integrity sha1-sr52n6MZQL6e7qZGnAdeNQBvo9M= 957 | 958 | ms@2.1.2, ms@^2.1.1: 959 | version "2.1.2" 960 | resolved "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 961 | integrity sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk= 962 | 963 | natural-compare@^1.4.0: 964 | version "1.4.0" 965 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 966 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== 967 | 968 | oauth-sign@~0.9.0: 969 | version "0.9.0" 970 | resolved "https://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz?cache=0&sync_timestamp=1589682811909&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Foauth-sign%2Fdownload%2Foauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" 971 | integrity sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU= 972 | 973 | object-hash@^2.0.1: 974 | version "2.0.3" 975 | resolved "https://registry.npm.taobao.org/object-hash/download/object-hash-2.0.3.tgz#d12db044e03cd2ca3d77c0570d87225b02e1e6ea" 976 | integrity sha1-0S2wROA80so9d8BXDYciWwLh5uo= 977 | 978 | once@^1.3.0: 979 | version "1.4.0" 980 | resolved "https://mirrors.tencent.com/npm/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 981 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 982 | dependencies: 983 | wrappy "1" 984 | 985 | one-time@^1.0.0: 986 | version "1.0.0" 987 | resolved "https://registry.npm.taobao.org/one-time/download/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" 988 | integrity sha1-4GvBdK7SFO1Y7e3lc7Qzu/gny0U= 989 | dependencies: 990 | fn.name "1.x.x" 991 | 992 | onetime@^5.1.0: 993 | version "5.1.2" 994 | resolved "https://registry.npm.taobao.org/onetime/download/onetime-5.1.2.tgz?cache=0&sync_timestamp=1597005345612&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fonetime%2Fdownload%2Fonetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" 995 | integrity sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4= 996 | dependencies: 997 | mimic-fn "^2.1.0" 998 | 999 | optionator@^0.9.3: 1000 | version "0.9.3" 1001 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" 1002 | integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== 1003 | dependencies: 1004 | "@aashutoshrathi/word-wrap" "^1.2.3" 1005 | deep-is "^0.1.3" 1006 | fast-levenshtein "^2.0.6" 1007 | levn "^0.4.1" 1008 | prelude-ls "^1.2.1" 1009 | type-check "^0.4.0" 1010 | 1011 | p-limit@^2.0.0: 1012 | version "2.3.0" 1013 | resolved "https://registry.npm.taobao.org/p-limit/download/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 1014 | integrity sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE= 1015 | dependencies: 1016 | p-try "^2.0.0" 1017 | 1018 | p-limit@^3.0.2: 1019 | version "3.1.0" 1020 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 1021 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 1022 | dependencies: 1023 | yocto-queue "^0.1.0" 1024 | 1025 | p-locate@^3.0.0: 1026 | version "3.0.0" 1027 | resolved "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" 1028 | integrity sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ= 1029 | dependencies: 1030 | p-limit "^2.0.0" 1031 | 1032 | p-locate@^5.0.0: 1033 | version "5.0.0" 1034 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 1035 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 1036 | dependencies: 1037 | p-limit "^3.0.2" 1038 | 1039 | p-try@^2.0.0: 1040 | version "2.2.0" 1041 | resolved "https://registry.npm.taobao.org/p-try/download/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 1042 | integrity sha1-yyhoVA4xPWHeWPr741zpAE1VQOY= 1043 | 1044 | parent-module@^1.0.0: 1045 | version "1.0.1" 1046 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 1047 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1048 | dependencies: 1049 | callsites "^3.0.0" 1050 | 1051 | path-exists@^3.0.0: 1052 | version "3.0.0" 1053 | resolved "https://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 1054 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= 1055 | 1056 | path-exists@^4.0.0: 1057 | version "4.0.0" 1058 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 1059 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1060 | 1061 | path-is-absolute@^1.0.0: 1062 | version "1.0.1" 1063 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1064 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 1065 | 1066 | path-key@^3.1.0: 1067 | version "3.1.1" 1068 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 1069 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1070 | 1071 | performance-now@^2.1.0: 1072 | version "2.1.0" 1073 | resolved "https://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" 1074 | integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= 1075 | 1076 | pkg-up@^3.1.0: 1077 | version "3.1.0" 1078 | resolved "https://registry.npm.taobao.org/pkg-up/download/pkg-up-3.1.0.tgz?cache=0&sync_timestamp=1589682752621&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpkg-up%2Fdownload%2Fpkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" 1079 | integrity sha1-EA7CNcwVDk/UJRlBJZaihRKg3vU= 1080 | dependencies: 1081 | find-up "^3.0.0" 1082 | 1083 | prelude-ls@^1.2.1: 1084 | version "1.2.1" 1085 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 1086 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 1087 | 1088 | process-nextick-args@~2.0.0: 1089 | version "2.0.1" 1090 | resolved "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 1091 | integrity sha1-eCDZsWEgzFXKmud5JoCufbptf+I= 1092 | 1093 | progress@^2.0.3: 1094 | version "2.0.3" 1095 | resolved "https://registry.npm.taobao.org/progress/download/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 1096 | integrity sha1-foz42PW48jnBvGi+tOt4Vn1XLvg= 1097 | 1098 | prompts@^2.3.2: 1099 | version "2.4.0" 1100 | resolved "https://registry.npm.taobao.org/prompts/download/prompts-2.4.0.tgz?cache=0&sync_timestamp=1603716651286&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fprompts%2Fdownload%2Fprompts-2.4.0.tgz#4aa5de0723a231d1ee9121c40fdf663df73f61d7" 1101 | integrity sha1-SqXeByOiMdHukSHED99mPfc/Ydc= 1102 | dependencies: 1103 | kleur "^3.0.3" 1104 | sisteransi "^1.0.5" 1105 | 1106 | psl@^1.1.28: 1107 | version "1.8.0" 1108 | resolved "https://registry.npm.taobao.org/psl/download/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" 1109 | integrity sha1-kyb4vPsBOtzABf3/BWrM4CDlHCQ= 1110 | 1111 | punycode@^2.1.0, punycode@^2.1.1: 1112 | version "2.1.1" 1113 | resolved "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz?cache=0&sync_timestamp=1589682803838&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpunycode%2Fdownload%2Fpunycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1114 | integrity sha1-tYsBCsQMIsVldhbI0sLALHv0eew= 1115 | 1116 | qs@~6.5.2: 1117 | version "6.5.2" 1118 | resolved "https://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" 1119 | integrity sha1-yzroBuh0BERYTvFUzo7pjUA/PjY= 1120 | 1121 | queue-microtask@^1.2.2: 1122 | version "1.2.3" 1123 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 1124 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 1125 | 1126 | readable-stream@^2.3.7: 1127 | version "2.3.7" 1128 | resolved "https://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.7.tgz?cache=0&sync_timestamp=1589682741447&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" 1129 | integrity sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c= 1130 | dependencies: 1131 | core-util-is "~1.0.0" 1132 | inherits "~2.0.3" 1133 | isarray "~1.0.0" 1134 | process-nextick-args "~2.0.0" 1135 | safe-buffer "~5.1.1" 1136 | string_decoder "~1.1.1" 1137 | util-deprecate "~1.0.1" 1138 | 1139 | readable-stream@^3.4.0: 1140 | version "3.6.0" 1141 | resolved "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz?cache=0&sync_timestamp=1589682741447&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" 1142 | integrity sha1-M3u9o63AcGvT4CRCaihtS0sskZg= 1143 | dependencies: 1144 | inherits "^2.0.3" 1145 | string_decoder "^1.1.1" 1146 | util-deprecate "^1.0.1" 1147 | 1148 | request@^2.88.0: 1149 | version "2.88.2" 1150 | resolved "https://registry.npm.taobao.org/request/download/request-2.88.2.tgz?cache=0&sync_timestamp=1589682741998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frequest%2Fdownload%2Frequest-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" 1151 | integrity sha1-1zyRhzHLWofaBH4gcjQUb2ZNErM= 1152 | dependencies: 1153 | aws-sign2 "~0.7.0" 1154 | aws4 "^1.8.0" 1155 | caseless "~0.12.0" 1156 | combined-stream "~1.0.6" 1157 | extend "~3.0.2" 1158 | forever-agent "~0.6.1" 1159 | form-data "~2.3.2" 1160 | har-validator "~5.1.3" 1161 | http-signature "~1.2.0" 1162 | is-typedarray "~1.0.0" 1163 | isstream "~0.1.2" 1164 | json-stringify-safe "~5.0.1" 1165 | mime-types "~2.1.19" 1166 | oauth-sign "~0.9.0" 1167 | performance-now "^2.1.0" 1168 | qs "~6.5.2" 1169 | safe-buffer "^5.1.2" 1170 | tough-cookie "~2.5.0" 1171 | tunnel-agent "^0.6.0" 1172 | uuid "^3.3.2" 1173 | 1174 | require-directory@^2.1.1: 1175 | version "2.1.1" 1176 | resolved "https://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 1177 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 1178 | 1179 | resolve-from@^4.0.0: 1180 | version "4.0.0" 1181 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1182 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1183 | 1184 | reusify@^1.0.4: 1185 | version "1.0.4" 1186 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 1187 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 1188 | 1189 | rimraf@^3.0.2: 1190 | version "3.0.2" 1191 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 1192 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1193 | dependencies: 1194 | glob "^7.1.3" 1195 | 1196 | run-parallel@^1.1.9: 1197 | version "1.2.0" 1198 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 1199 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 1200 | dependencies: 1201 | queue-microtask "^1.2.2" 1202 | 1203 | safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: 1204 | version "5.2.1" 1205 | resolved "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz?cache=0&sync_timestamp=1589682795646&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-buffer%2Fdownload%2Fsafe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 1206 | integrity sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY= 1207 | 1208 | safe-buffer@~5.1.0, safe-buffer@~5.1.1: 1209 | version "5.1.2" 1210 | resolved "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz?cache=0&sync_timestamp=1589682795646&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-buffer%2Fdownload%2Fsafe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 1211 | integrity sha1-mR7GnSluAxN0fVm9/St0XDX4go0= 1212 | 1213 | safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: 1214 | version "2.1.2" 1215 | resolved "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz?cache=0&sync_timestamp=1589682784154&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafer-buffer%2Fdownload%2Fsafer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1216 | integrity sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo= 1217 | 1218 | sax@>=0.6.0: 1219 | version "1.2.4" 1220 | resolved "https://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" 1221 | integrity sha1-KBYjTiN4vdxOU1T6tcqold9xANk= 1222 | 1223 | semver@^6.0.0: 1224 | version "6.3.0" 1225 | resolved "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1589682805026&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 1226 | integrity sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0= 1227 | 1228 | semver@^7.3.2: 1229 | version "7.3.2" 1230 | resolved "https://registry.npm.taobao.org/semver/download/semver-7.3.2.tgz?cache=0&sync_timestamp=1589682805026&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" 1231 | integrity sha1-YElisFK4HtB4aq6EOJ/7pw/9OTg= 1232 | 1233 | shebang-command@^2.0.0: 1234 | version "2.0.0" 1235 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 1236 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1237 | dependencies: 1238 | shebang-regex "^3.0.0" 1239 | 1240 | shebang-regex@^3.0.0: 1241 | version "3.0.0" 1242 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 1243 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1244 | 1245 | simple-swizzle@^0.2.2: 1246 | version "0.2.2" 1247 | resolved "https://registry.npm.taobao.org/simple-swizzle/download/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" 1248 | integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= 1249 | dependencies: 1250 | is-arrayish "^0.3.1" 1251 | 1252 | sisteransi@^1.0.5: 1253 | version "1.0.5" 1254 | resolved "https://registry.npm.taobao.org/sisteransi/download/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" 1255 | integrity sha1-E01oEpd1ZDfMBcoBNw06elcQde0= 1256 | 1257 | spark-md5@^3.0.1: 1258 | version "3.0.1" 1259 | resolved "https://registry.npm.taobao.org/spark-md5/download/spark-md5-3.0.1.tgz#83a0e255734f2ab4e5c466e5a2cfc9ba2aa2124d" 1260 | integrity sha1-g6DiVXNPKrTlxGblos/JuiqiEk0= 1261 | 1262 | sshpk@^1.7.0: 1263 | version "1.16.1" 1264 | resolved "https://registry.npm.taobao.org/sshpk/download/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" 1265 | integrity sha1-+2YcC+8ps520B2nuOfpwCT1vaHc= 1266 | dependencies: 1267 | asn1 "~0.2.3" 1268 | assert-plus "^1.0.0" 1269 | bcrypt-pbkdf "^1.0.0" 1270 | dashdash "^1.12.0" 1271 | ecc-jsbn "~0.1.1" 1272 | getpass "^0.1.1" 1273 | jsbn "~0.1.0" 1274 | safer-buffer "^2.0.2" 1275 | tweetnacl "~0.14.0" 1276 | 1277 | stack-trace@0.0.x: 1278 | version "0.0.10" 1279 | resolved "https://registry.npm.taobao.org/stack-trace/download/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" 1280 | integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= 1281 | 1282 | string-width@^4.1.0, string-width@^4.2.0: 1283 | version "4.2.0" 1284 | resolved "https://registry.npm.taobao.org/string-width/download/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" 1285 | integrity sha1-lSGCxGzHssMT0VluYjmSvRY7crU= 1286 | dependencies: 1287 | emoji-regex "^8.0.0" 1288 | is-fullwidth-code-point "^3.0.0" 1289 | strip-ansi "^6.0.0" 1290 | 1291 | string_decoder@^1.1.1: 1292 | version "1.3.0" 1293 | resolved "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" 1294 | integrity sha1-QvEUWUpGzxqOMLCoT1bHjD7awh4= 1295 | dependencies: 1296 | safe-buffer "~5.2.0" 1297 | 1298 | string_decoder@~1.1.1: 1299 | version "1.1.1" 1300 | resolved "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 1301 | integrity sha1-nPFhG6YmhdcDCunkujQUnDrwP8g= 1302 | dependencies: 1303 | safe-buffer "~5.1.0" 1304 | 1305 | strip-ansi@^6.0.0: 1306 | version "6.0.0" 1307 | resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz?cache=0&sync_timestamp=1589682795383&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" 1308 | integrity sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI= 1309 | dependencies: 1310 | ansi-regex "^5.0.0" 1311 | 1312 | strip-ansi@^6.0.1: 1313 | version "6.0.1" 1314 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1315 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1316 | dependencies: 1317 | ansi-regex "^5.0.1" 1318 | 1319 | strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: 1320 | version "3.1.1" 1321 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 1322 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1323 | 1324 | supports-color@^7.1.0: 1325 | version "7.2.0" 1326 | resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1598611709087&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1327 | integrity sha1-G33NyzK4E4gBs+R4umpRyqiWSNo= 1328 | dependencies: 1329 | has-flag "^4.0.0" 1330 | 1331 | text-hex@1.0.x: 1332 | version "1.0.0" 1333 | resolved "https://registry.npm.taobao.org/text-hex/download/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" 1334 | integrity sha1-adycGxdEbueakr9biEu0uRJ1BvU= 1335 | 1336 | text-table@^0.2.0: 1337 | version "0.2.0" 1338 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 1339 | integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== 1340 | 1341 | tough-cookie@~2.5.0: 1342 | version "2.5.0" 1343 | resolved "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.5.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftough-cookie%2Fdownload%2Ftough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" 1344 | integrity sha1-zZ+yoKodWhK0c72fuW+j3P9lreI= 1345 | dependencies: 1346 | psl "^1.1.28" 1347 | punycode "^2.1.1" 1348 | 1349 | triple-beam@^1.2.0, triple-beam@^1.3.0: 1350 | version "1.3.0" 1351 | resolved "https://registry.npm.taobao.org/triple-beam/download/triple-beam-1.3.0.tgz#a595214c7298db8339eeeee083e4d10bd8cb8dd9" 1352 | integrity sha1-pZUhTHKY24M57u7gg+TRC9jLjdk= 1353 | 1354 | tunnel-agent@^0.6.0: 1355 | version "0.6.0" 1356 | resolved "https://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 1357 | integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= 1358 | dependencies: 1359 | safe-buffer "^5.0.1" 1360 | 1361 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 1362 | version "0.14.5" 1363 | resolved "https://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz?cache=0&sync_timestamp=1589682745749&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftweetnacl%2Fdownload%2Ftweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 1364 | integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= 1365 | 1366 | type-check@^0.4.0, type-check@~0.4.0: 1367 | version "0.4.0" 1368 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 1369 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 1370 | dependencies: 1371 | prelude-ls "^1.2.1" 1372 | 1373 | type-fest@^0.20.2: 1374 | version "0.20.2" 1375 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 1376 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 1377 | 1378 | uri-js@^4.2.2: 1379 | version "4.4.0" 1380 | resolved "https://registry.npm.taobao.org/uri-js/download/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" 1381 | integrity sha1-qnFCYd55PoqCNHp7zJznTobyhgI= 1382 | dependencies: 1383 | punycode "^2.1.0" 1384 | 1385 | util-deprecate@^1.0.1, util-deprecate@~1.0.1: 1386 | version "1.0.2" 1387 | resolved "https://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1388 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 1389 | 1390 | uuid@^3.3.2: 1391 | version "3.4.0" 1392 | resolved "https://registry.npm.taobao.org/uuid/download/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" 1393 | integrity sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4= 1394 | 1395 | verror@1.10.0: 1396 | version "1.10.0" 1397 | resolved "https://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" 1398 | integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= 1399 | dependencies: 1400 | assert-plus "^1.0.0" 1401 | core-util-is "1.0.2" 1402 | extsprintf "^1.2.0" 1403 | 1404 | which@^2.0.1: 1405 | version "2.0.2" 1406 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 1407 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1408 | dependencies: 1409 | isexe "^2.0.0" 1410 | 1411 | winston-daily-rotate-file@^4.5.0: 1412 | version "4.5.0" 1413 | resolved "https://registry.npm.taobao.org/winston-daily-rotate-file/download/winston-daily-rotate-file-4.5.0.tgz#3914ac57c4bdae1138170bec85af0c2217b253b1" 1414 | integrity sha1-ORSsV8S9rhE4Fwvsha8MIheyU7E= 1415 | dependencies: 1416 | file-stream-rotator "^0.5.7" 1417 | object-hash "^2.0.1" 1418 | triple-beam "^1.3.0" 1419 | winston-transport "^4.2.0" 1420 | 1421 | winston-transport@^4.2.0, winston-transport@^4.4.0: 1422 | version "4.4.0" 1423 | resolved "https://registry.npm.taobao.org/winston-transport/download/winston-transport-4.4.0.tgz#17af518daa690d5b2ecccaa7acf7b20ca7925e59" 1424 | integrity sha1-F69RjappDVsuzMqnrPeyDKeSXlk= 1425 | dependencies: 1426 | readable-stream "^2.3.7" 1427 | triple-beam "^1.2.0" 1428 | 1429 | winston@^3.3.3: 1430 | version "3.3.3" 1431 | resolved "https://registry.npm.taobao.org/winston/download/winston-3.3.3.tgz#ae6172042cafb29786afa3d09c8ff833ab7c9170" 1432 | integrity sha1-rmFyBCyvspeGr6PQnI/4M6t8kXA= 1433 | dependencies: 1434 | "@dabh/diagnostics" "^2.0.2" 1435 | async "^3.1.0" 1436 | is-stream "^2.0.0" 1437 | logform "^2.2.0" 1438 | one-time "^1.0.0" 1439 | readable-stream "^3.4.0" 1440 | stack-trace "0.0.x" 1441 | triple-beam "^1.3.0" 1442 | winston-transport "^4.4.0" 1443 | 1444 | wrap-ansi@^7.0.0: 1445 | version "7.0.0" 1446 | resolved "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 1447 | integrity sha1-Z+FFz/UQpqaYS98RUpEdadLrnkM= 1448 | dependencies: 1449 | ansi-styles "^4.0.0" 1450 | string-width "^4.1.0" 1451 | strip-ansi "^6.0.0" 1452 | 1453 | wrappy@1: 1454 | version "1.0.2" 1455 | resolved "https://mirrors.tencent.com/npm/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1456 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1457 | 1458 | xml2js@^0.4.19: 1459 | version "0.4.23" 1460 | resolved "https://registry.npm.taobao.org/xml2js/download/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" 1461 | integrity sha1-oMaVFnUkIesqx1juTUzPWIQ+rGY= 1462 | dependencies: 1463 | sax ">=0.6.0" 1464 | xmlbuilder "~11.0.0" 1465 | 1466 | xmlbuilder@~11.0.0: 1467 | version "11.0.1" 1468 | resolved "https://registry.npm.taobao.org/xmlbuilder/download/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" 1469 | integrity sha1-vpuuHIoEbnazESdyY0fQrXACvrM= 1470 | 1471 | y18n@^5.0.2: 1472 | version "5.0.5" 1473 | resolved "https://registry.npm.taobao.org/y18n/download/y18n-5.0.5.tgz?cache=0&sync_timestamp=1603637417853&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" 1474 | integrity sha1-h2nsCNA7HqLfJQCs71YXQ7u5qxg= 1475 | 1476 | yargs-parser@^20.2.2: 1477 | version "20.2.3" 1478 | resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-20.2.3.tgz?cache=0&sync_timestamp=1602861397132&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-20.2.3.tgz#92419ba867b858c868acf8bae9bf74af0dd0ce26" 1479 | integrity sha1-kkGbqGe4WMhorPi66b90rw3QziY= 1480 | 1481 | yargs@^16.0.3: 1482 | version "16.1.0" 1483 | resolved "https://registry.npm.taobao.org/yargs/download/yargs-16.1.0.tgz?cache=0&sync_timestamp=1602805561021&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-16.1.0.tgz#fc333fe4791660eace5a894b39d42f851cd48f2a" 1484 | integrity sha1-/DM/5HkWYOrOWolLOdQvhRzUjyo= 1485 | dependencies: 1486 | cliui "^7.0.2" 1487 | escalade "^3.1.1" 1488 | get-caller-file "^2.0.5" 1489 | require-directory "^2.1.1" 1490 | string-width "^4.2.0" 1491 | y18n "^5.0.2" 1492 | yargs-parser "^20.2.2" 1493 | 1494 | yocto-queue@^0.1.0: 1495 | version "0.1.0" 1496 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 1497 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 1498 | --------------------------------------------------------------------------------