This commit is contained in:
wxzhang 2022-04-03 15:08:26 +08:00
parent 4d55caeb02
commit bd80def8ad
13 changed files with 442 additions and 151 deletions

View File

@ -20,7 +20,7 @@
const fs = require("fs-extra"); const fs = require("fs-extra");
const inquirer = require("inquirer"); const inquirer = require("inquirer");
const semver = require("semver")
const path = require("path"); const path = require("path");
const shelljs = require("shelljs"); const shelljs = require("shelljs");
const createLogger = require("logsets"); const createLogger = require("logsets");
@ -38,16 +38,16 @@
const packages = [ // const packages = [
"git log --format=%cd --date=iso -1 -- packages/babel/package.json", // "git log --format=%cd --date=iso -1 -- packages/babel/package.json",
"git log --format=%cd --date=iso -1 -- packages/cli/package.json", // "git log --format=%cd --date=iso -1 -- packages/cli/package.json",
"git log --format=%cd --date=iso -1 -- packages/runtime/package.json", // "git log --format=%cd --date=iso -1 -- packages/runtime/package.json",
"git log --format=%cd --date=iso -1 -- packages/formatters/package.json", // "git log --format=%cd --date=iso -1 -- packages/formatters/package.json",
"git log --format=%cd --date=iso -1 -- packages/vue/package.json", // "git log --format=%cd --date=iso -1 -- packages/vue/package.json",
"git log --format=%cd --date=iso -1 -- packages/vite/package.json", // "git log --format=%cd --date=iso -1 -- packages/vite/package.json",
"git log --format=%cd --date=iso -1 -- packages/autopublish/package.json", // "git log --format=%cd --date=iso -1 -- packages/autopublish/package.json",
"git log --format=%cd --date=iso -1 -- packages/utils/package.json" // "git log --format=%cd --date=iso -1 -- packages/utils/package.json"
] // ]
function getPackages(){ function getPackages(){
let workspaceRoot = process.cwd() let workspaceRoot = process.cwd()
@ -89,24 +89,74 @@
return changeFiles.length>0 ? changeFiles.split("\n") : [] return changeFiles.length>0 ? changeFiles.split("\n") : []
} }
function execShellScript(script){ /**
* 执行脚本出错会返回错误信息
* @param {*} script
*/
function execShellScript(script,options={}){
if(shelljs.exec(script).code>0){ if(shelljs.exec(script).code>0){
throw new Error(`执行<${script}>失败`) throw new Error(`执行<${script}>失败`)
} }
} }
/**
* 执行脚本并返回结果
* @param {*} script
*/
function execShellScriptReturns(script,options={}){ ){
return shelljs.exec(script,options).code>0).stdout.trim()
}
/**
* 执行Git提交命令
*
* 1. 检查当前包是否有未提交的文件
* 2. 如果没有则不提交
* 3. 如果有则提交
*
*
*/
function commitProject(packageName,{versionIncrementStep="patch",autoCommit=false}={}){
const lastChanges = getPackageLastChanges(package.name)
let lastCommit = shelljs.exec(`git log --format=%cd --date=iso -1 -- .`, { silent: true }).stdout.trim()
let hasError = false // 执行过程是否出错了
let isCommit = autoCommit // 是否执行了提交操作
if(lastCommit){
lastCommit = dayjs(lastCommit)
logger.log("最后一次提交:{}({})",lastCommit.format("YYYY-MM-DD HH:mm:ss"),lastCommit.fromNow())
}
if(lastChanges.length>0){
logger.log("包[{}]存在{}个未提交的文件:",package.name,lastChanges.length)
lastChanges.forEach(file=>logger.log(` - ${file.trim()}`))
if(!autoCommit){
const result = await inquirer.prompt({
name:"isCommit",
type:"confirm",
message:"是否提交以上文件到仓库?"
})
isCommit = result.isCommit
}
if(isCommit){
execShellScript(`git commit -a -m "Update ${package.name}"`)
}
}
}
let VERSION_STEPS = ["major", "minor", "patch","premajor","preminor","prepatch","prerelease"]
program program
.command("publish") .command("publish")
.description("发布当前工作区下的包") .description("发布当前工作区下的包")
.option("-f, --force", "强制发布") .option("-f, --force", "强制发布")
.option("--no-auto-commit", "不提交源码") .option("--no-auto-commit", "不提交源码")
.option("-q, --query", "询问是否发布,否则会自动发布") .option("-q, --query", "询问是否发布,否则会自动发布")
.addOption(new Option('-i, --version-increment-step [value]', '版本增长方式取值major,minor,patch').default("patch").choices(['major', 'minor', 'patch'])) .option("--no-add-version-tag", "不添加版本标签")
.addOption(new Option('-i, --version-increment-step [value]', '版本增长方式').default("patch").choices(VERSION_STEPS))
.action(async (options) => { .action(async (options) => {
console.log(JSON.stringify(options)) console.log(JSON.stringify(options))
const {versionIncrementStep,autoCommit} = options const {versionIncrementStep,autoCommit,addVersionTag} = options
if(!["major","minor","patch"].includes(versionIncrementStep)){ if(!VERSION_STEPS.includes(versionIncrementStep)){
versionIncrementStep = "patch" versionIncrementStep = "patch"
} }
@ -114,48 +164,72 @@ function execShellScript(script){
const packageFolder = process.cwd() const packageFolder = process.cwd()
const packageName = path.basename(packageFolder) const packageName = path.basename(packageFolder)
const pkgFile = path.join(packageFolder,"package.json") const pkgFile = path.join(packageFolder,"package.json")
const package = fs.readJSONSync(pkgFile)
const { version,scripts } = fs.readJSONSync(pkgFile) const packageBackup = Object.assign({},package) // 备份package.json当操作失败时还原
logger.log("包名:{}",`${packageName}`) logger.log("包名:{}",`${packageName}`)
// 第一步: 查询当否已经提交了代码,如果没有则提交代码 // 第一步: 提交代码
const lastChanges = getPackageLastChanges(packageName) commitProject(package,{versionIncrementStep,autoCommit})
let lastCommit = shelljs.exec(`git log --format=%cd --date=iso -1 -- .`, { silent: true }).stdout.trim()
if(lastCommit){ // 第二步: 更新版本号和发布时间
lastCommit = dayjs(lastCommit) package.version = semver.inc(package.version,versionIncrementStep)
logger.log("最后一次提交:{}({})",lastCommit.format("YYYY-MM-DD HH:mm:ss"),lastCommit.fromNow()) package.lastPublish = dayjs().format()
fs.writeJSONSync(pkgFile,package)
// const lastChanges = getPackageLastChanges(packageName)
// let lastCommit = shelljs.exec(`git log --format=%cd --date=iso -1 -- .`, { silent: true }).stdout.trim()
// let hasError = false // 执行过程是否出错了
// let isCommit = autoCommit // 是否执行了提交操作
// if(lastCommit){
// lastCommit = dayjs(lastCommit)
// logger.log("最后一次提交:{}({})",lastCommit.format("YYYY-MM-DD HH:mm:ss"),lastCommit.fromNow())
// }
// // 如果当前包有变化时需要要进行提交
// if(lastChanges.length>0){
// logger.log("包[{}]存在{}个未提交的文件:",packageName,lastChanges.length)
// lastChanges.forEach(file=>logger.log(` - ${file.trim()}`))
// if(!autoCommit){
// const result = await inquirer.prompt({
// name:"isCommit",
// type:"confirm",
// message:"是否提交以上文件到仓库?"
// })
// isCommit = result.isCommit
// }
// if(isCommit){
// // 由于更新版本号、发布时间等信息需要修改package.json所以在提交一份
// execShellScript(`npm version ${versionIncrementStep}`)
// // 重新读取package.json
// package = fs.readJSONSync(pkgFile)
// // 保存发布时间
// package.lastPublish = dayjs().format()
// // 由于更新版本号、发布时间等信息需要修改package.json所以在提交一份
// execShellScript(`npm version ${versionIncrementStep}`)
// // 提交代码到仓库
// execShellScript(`git commit -a -m "Update ${packageName}"`)
// // 添加版本标签
// if(addVersionTag){
// execShellScript(`git tag Version:${package.version}`)
// }
// }
// }
// 第三步执行发布到Npm
// 由于工程可能引用了工作区内的其他包必须pnpm publish才能发布
// pnpm publish会修正引用工作区其他包到的依赖信息而npm publish不能识别工作区内的依赖会导致报错
try{
execShellScript(`pnpm publish --no-git-checks --access publish`)
// 当发布完毕后由于更新了publish因此需要重新提交代码
}catch{
fs.writeJSONSync(pkgFile,packageBackup)
} }
if(lastChanges.length>0){
logger.log("包[{}]存在{}个未提交的文件:",packageName,lastChanges.length)
lastChanges.forEach(file=>logger.log(` - ${file.trim()}`))
let isCommit = autoCommit
if(!autoCommit){
const result = await inquirer.prompt({
name:"isCommit",
type:"confirm",
message:"是否提交以下文件?"
})
isCommit = result.isCommit
}
if(isCommit){
execShellScript(`git commit -a -m "Update ${packageName}"`)
}
}
// 第二步:更新最新的版本号
execShellScript(`npm version ${versionIncrementStep}`)
// 由于每次发布均会更新npm version patch并且需要提交代码
// const lastCommit = shelljs.exec(`git log --format=%cd --date=iso -1 -- ${pkgFile}`, { silent: true }).stdout.trim()
// // 增加版本号
// //
// shelljs.exec(`pnpm publish --access publish`, { silent: true }).stdout.trim()
}) })

View File

@ -1,6 +1,6 @@
{ {
"name": "@voerkai18n/publish", "name": "@voerkai18n/publish",
"version": "1.0.0", "version": "1.0.1",
"description": "发布项目工具", "description": "发布项目工具",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {
@ -14,6 +14,7 @@
"publish": "./index.js" "publish": "./index.js"
}, },
"dependencies": { "dependencies": {
"commander": "^9.0.0" "commander": "^9.0.0",
"semver": "^7.3.5"
} }
} }

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,10 +1,92 @@
'use strict'; 'use strict';
var require$$2 = require('@voerkai18n/utils'); /**
* 判断是否是JSON对象
* @param {*} obj
* @returns
*/
function isPlainObject$1(obj){
if (typeof obj !== 'object' || obj === null) return false;
var proto = Object.getPrototypeOf(obj);
if (proto === null) return true;
var baseProto = proto;
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } while (Object.getPrototypeOf(baseProto) !== null) {
baseProto = Object.getPrototypeOf(baseProto);
}
return proto === baseProto;
}
var require$$2__default = /*#__PURE__*/_interopDefaultLegacy(require$$2); function isNumber$1(value){
return !isNaN(parseInt(value))
}
/**
* 简单进行对象合并
*
* options={
* array:0 , // 数组合并策略0-替换1-合并2-去重合并
* }
*
* @param {*} toObj
* @param {*} formObj
* @returns 合并后的对象
*/
function deepMerge$1(toObj,formObj,options={}){
let results = Object.assign({},toObj);
Object.entries(formObj).forEach(([key,value])=>{
if(key in results){
if(typeof value === "object" && value !== null){
if(Array.isArray(value)){
if(options.array === 0){
results[key] = value;
}else if(options.array === 1){
results[key] = [...results[key],...value];
}else if(options.array === 2){
results[key] = [...new Set([...results[key],...value])];
}
}else {
results[key] = deepMerge$1(results[key],value,options);
}
}else {
results[key] = value;
}
}else {
results[key] = value;
}
});
return results
}
/**
* 获取指定变量类型名称
* getDataTypeName(1) == Number
* getDataTypeName("") == String
* getDataTypeName(null) == Null
* getDataTypeName(undefined) == Undefined
* getDataTypeName(new Date()) == Date
* getDataTypeName(new Error()) == Error
*
* @param {*} v
* @returns
*/
function getDataTypeName$1(v){
if (v === null) return 'Null'
if (v === undefined) return 'Undefined'
if(typeof(v)==="function") return "Function"
return v.constructor && v.constructor.name;
}
var utils ={
isPlainObject: isPlainObject$1,
isNumber: isNumber$1,
deepMerge: deepMerge$1,
getDataTypeName: getDataTypeName$1
};
/** /**
* *
@ -218,9 +300,9 @@ var formatters$1 = {
} }
}; };
const { getDataTypeName,isNumber,isPlainObject,deepMerge } = utils;
const EventEmitter = eventemitter; const EventEmitter = eventemitter;
const i18nScope = scope; const i18nScope = scope;
const { getDataTypeName,isNumber,isPlainObject,deepMerge } = require$$2__default["default"];
let inlineFormatters = formatters$1; // 内置格式化器 let inlineFormatters = formatters$1; // 内置格式化器

View File

@ -1,4 +1,90 @@
import require$$2 from '@voerkai18n/utils'; /**
* 判断是否是JSON对象
* @param {*} obj
* @returns
*/
function isPlainObject$1(obj){
if (typeof obj !== 'object' || obj === null) return false;
var proto = Object.getPrototypeOf(obj);
if (proto === null) return true;
var baseProto = proto;
while (Object.getPrototypeOf(baseProto) !== null) {
baseProto = Object.getPrototypeOf(baseProto);
}
return proto === baseProto;
}
function isNumber$1(value){
return !isNaN(parseInt(value))
}
/**
* 简单进行对象合并
*
* options={
* array:0 , // 数组合并策略0-替换1-合并2-去重合并
* }
*
* @param {*} toObj
* @param {*} formObj
* @returns 合并后的对象
*/
function deepMerge$1(toObj,formObj,options={}){
let results = Object.assign({},toObj);
Object.entries(formObj).forEach(([key,value])=>{
if(key in results){
if(typeof value === "object" && value !== null){
if(Array.isArray(value)){
if(options.array === 0){
results[key] = value;
}else if(options.array === 1){
results[key] = [...results[key],...value];
}else if(options.array === 2){
results[key] = [...new Set([...results[key],...value])];
}
}else {
results[key] = deepMerge$1(results[key],value,options);
}
}else {
results[key] = value;
}
}else {
results[key] = value;
}
});
return results
}
/**
* 获取指定变量类型名称
* getDataTypeName(1) == Number
* getDataTypeName("") == String
* getDataTypeName(null) == Null
* getDataTypeName(undefined) == Undefined
* getDataTypeName(new Date()) == Date
* getDataTypeName(new Error()) == Error
*
* @param {*} v
* @returns
*/
function getDataTypeName$1(v){
if (v === null) return 'Null'
if (v === undefined) return 'Undefined'
if(typeof(v)==="function") return "Function"
return v.constructor && v.constructor.name;
}
var utils ={
isPlainObject: isPlainObject$1,
isNumber: isNumber$1,
deepMerge: deepMerge$1,
getDataTypeName: getDataTypeName$1
};
/** /**
* *
@ -212,9 +298,9 @@ var formatters$1 = {
} }
}; };
const { getDataTypeName,isNumber,isPlainObject,deepMerge } = utils;
const EventEmitter = eventemitter; const EventEmitter = eventemitter;
const i18nScope = scope; const i18nScope = scope;
const { getDataTypeName,isNumber,isPlainObject,deepMerge } = require$$2;
let inlineFormatters = formatters$1; // 内置格式化器 let inlineFormatters = formatters$1; // 内置格式化器

View File

@ -1,6 +1,6 @@
const { getDataTypeName,isNumber,isPlainObject,deepMerge } = require("./utils")
const EventEmitter = require("./eventemitter") const EventEmitter = require("./eventemitter")
const i18nScope = require("./scope.js") const i18nScope = require("./scope.js")
const { getDataTypeName,isNumber,isPlainObject,deepMerge } = require("@voerkai18n/utils")
let inlineFormatters = require("./formatters") // 内置格式化器 let inlineFormatters = require("./formatters") // 内置格式化器

View File

@ -33,8 +33,5 @@
"rollup": "^2.69.0", "rollup": "^2.69.0",
"rollup-plugin-clear": "^2.0.7", "rollup-plugin-clear": "^2.0.7",
"rollup-plugin-terser": "^7.0.2" "rollup-plugin-terser": "^7.0.2"
},
"dependencies": {
"@voerkai18n/utils": "workspace:^1.0.0"
} }
} }

View File

@ -1,7 +1,7 @@
import clear from 'rollup-plugin-clear' import clear from 'rollup-plugin-clear'
import commonjs from '@rollup/plugin-commonjs'; import commonjs from '@rollup/plugin-commonjs';
import resolve from "@rollup/plugin-node-resolve"; // import resolve from "@rollup/plugin-node-resolve";
import { terser } from "rollup-plugin-terser"; import { terser } from "rollup-plugin-terser";
import { babel } from '@rollup/plugin-babel'; import { babel } from '@rollup/plugin-babel';
@ -22,7 +22,7 @@ export default [
} }
], ],
plugins: [ plugins: [
resolve(), //resolve(),
commonjs(), commonjs(),
babel({ babel({
babelHelpers:"runtime", babelHelpers:"runtime",
@ -48,7 +48,7 @@ export default [
} }
], ],
plugins:[ plugins:[
commonjs(), commonjs()
], ]
} }
] ]

89
packages/runtime/utils.js Normal file
View File

@ -0,0 +1,89 @@
/**
* 判断是否是JSON对象
* @param {*} obj
* @returns
*/
function isPlainObject(obj){
if (typeof obj !== 'object' || obj === null) return false;
var proto = Object.getPrototypeOf(obj);
if (proto === null) return true;
var baseProto = proto;
while (Object.getPrototypeOf(baseProto) !== null) {
baseProto = Object.getPrototypeOf(baseProto);
}
return proto === baseProto;
}
function isNumber(value){
return !isNaN(parseInt(value))
}
/**
* 简单进行对象合并
*
* options={
* array:0 , // 数组合并策略0-替换1-合并2-去重合并
* }
*
* @param {*} toObj
* @param {*} formObj
* @returns 合并后的对象
*/
function deepMerge(toObj,formObj,options={}){
let results = Object.assign({},toObj)
Object.entries(formObj).forEach(([key,value])=>{
if(key in results){
if(typeof value === "object" && value !== null){
if(Array.isArray(value)){
if(options.array === 0){
results[key] = value
}else if(options.array === 1){
results[key] = [...results[key],...value]
}else if(options.array === 2){
results[key] = [...new Set([...results[key],...value])]
}
}else{
results[key] = deepMerge(results[key],value,options)
}
}else{
results[key] = value
}
}else{
results[key] = value
}
})
return results
}
/**
* 获取指定变量类型名称
* getDataTypeName(1) == Number
* getDataTypeName("") == String
* getDataTypeName(null) == Null
* getDataTypeName(undefined) == Undefined
* getDataTypeName(new Date()) == Date
* getDataTypeName(new Error()) == Error
*
* @param {*} v
* @returns
*/
function getDataTypeName(v){
if (v === null) return 'Null'
if (v === undefined) return 'Undefined'
if(typeof(v)==="function") return "Function"
return v.constructor && v.constructor.name;
};
module.exports ={
isPlainObject,
isNumber,
deepMerge,
getDataTypeName
}

118
pnpm-lock.yaml generated
View File

@ -89,8 +89,10 @@ importers:
packages/autopublish: packages/autopublish:
specifiers: specifiers:
commander: ^9.0.0 commander: ^9.0.0
semver: ^7.3.5
dependencies: dependencies:
commander: registry.npmmirror.com/commander/9.0.0 commander: registry.npmmirror.com/commander/9.0.0
semver: 7.3.5
packages/babel: packages/babel:
specifiers: specifiers:
@ -162,13 +164,10 @@ importers:
'@rollup/plugin-babel': ^5.3.1 '@rollup/plugin-babel': ^5.3.1
'@rollup/plugin-commonjs': ^21.0.2 '@rollup/plugin-commonjs': ^21.0.2
'@rollup/plugin-node-resolve': ^13.1.3 '@rollup/plugin-node-resolve': ^13.1.3
'@voerkai18n/utils': workspace:^1.0.0
deepmerge: ^4.2.2 deepmerge: ^4.2.2
rollup: ^2.69.0 rollup: ^2.69.0
rollup-plugin-clear: ^2.0.7 rollup-plugin-clear: ^2.0.7
rollup-plugin-terser: ^7.0.2 rollup-plugin-terser: ^7.0.2
dependencies:
'@voerkai18n/utils': link:../utils
devDependencies: devDependencies:
'@babel/cli': 7.17.6_@babel+core@7.17.5 '@babel/cli': 7.17.6_@babel+core@7.17.5
'@babel/core': 7.17.5 '@babel/core': 7.17.5
@ -239,8 +238,8 @@ packages:
slash: 2.0.0 slash: 2.0.0
source-map: 0.5.7 source-map: 0.5.7
optionalDependencies: optionalDependencies:
'@nicolo-ribaudo/chokidar-2': registry.npmmirror.com/@nicolo-ribaudo/chokidar-2/2.1.8-no-fsevents.3 '@nicolo-ribaudo/chokidar-2': 2.1.8-no-fsevents.3
chokidar: registry.npmmirror.com/chokidar/3.5.3 chokidar: 3.5.3
/@babel/cli/7.17.6_@babel+core@7.17.8: /@babel/cli/7.17.6_@babel+core@7.17.8:
resolution: {integrity: sha512-l4w608nsDNlxZhiJ5tE3DbNmr61fIKMZ6fTBo171VEFuFMIYuJ3mHRhTLEkKKyvx2Mizkkv/0a8OJOnZqkKYNA==} resolution: {integrity: sha512-l4w608nsDNlxZhiJ5tE3DbNmr61fIKMZ6fTBo171VEFuFMIYuJ3mHRhTLEkKKyvx2Mizkkv/0a8OJOnZqkKYNA==}
@ -2624,7 +2623,6 @@ packages:
/@nicolo-ribaudo/chokidar-2/2.1.8-no-fsevents.3: /@nicolo-ribaudo/chokidar-2/2.1.8-no-fsevents.3:
resolution: {integrity: sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==} resolution: {integrity: sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==}
requiresBuild: true requiresBuild: true
dev: true
optional: true optional: true
/@polka/url/1.0.0-next.21: /@polka/url/1.0.0-next.21:
@ -3777,6 +3775,13 @@ packages:
engines: {node: '>=8'} engines: {node: '>=8'}
optional: true optional: true
/bindings/1.5.0:
resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
requiresBuild: true
dependencies:
file-uri-to-path: 1.0.0
optional: true
/brace-expansion/1.1.11: /brace-expansion/1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
dependencies: dependencies:
@ -3958,7 +3963,7 @@ packages:
readdirp: 2.2.1 readdirp: 2.2.1
upath: 1.2.0 upath: 1.2.0
optionalDependencies: optionalDependencies:
fsevents: registry.npmmirror.com/fsevents/1.2.13 fsevents: 1.2.13
/chokidar/3.5.3: /chokidar/3.5.3:
resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
@ -3974,7 +3979,6 @@ packages:
readdirp: 3.6.0 readdirp: 3.6.0
optionalDependencies: optionalDependencies:
fsevents: 2.3.2 fsevents: 2.3.2
dev: true
optional: true optional: true
/ci-info/3.3.0: /ci-info/3.3.0:
@ -4460,7 +4464,7 @@ packages:
esutils: 2.0.3 esutils: 2.0.3
optionator: 0.8.3 optionator: 0.8.3
optionalDependencies: optionalDependencies:
source-map: registry.npmmirror.com/source-map/0.6.1 source-map: 0.6.1
dev: true dev: true
/esprima/4.0.1: /esprima/4.0.1:
@ -4596,6 +4600,11 @@ packages:
bser: 2.1.1 bser: 2.1.1
dev: true dev: true
/file-uri-to-path/1.0.0:
resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
requiresBuild: true
optional: true
/fill-range/4.0.0: /fill-range/4.0.0:
resolution: {integrity: sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=} resolution: {integrity: sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
@ -4710,12 +4719,22 @@ packages:
/fs.realpath/1.0.0: /fs.realpath/1.0.0:
resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=}
/fsevents/1.2.13:
resolution: {integrity: sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==}
engines: {node: '>= 4.0'}
os: [darwin]
deprecated: fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.
requiresBuild: true
dependencies:
bindings: 1.5.0
nan: 2.15.0
optional: true
/fsevents/2.3.2: /fsevents/2.3.2:
resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin] os: [darwin]
requiresBuild: true requiresBuild: true
dev: true
optional: true optional: true
/function-bind/1.1.1: /function-bind/1.1.1:
@ -5473,7 +5492,7 @@ packages:
micromatch: 4.0.5 micromatch: 4.0.5
walker: 1.0.8 walker: 1.0.8
optionalDependencies: optionalDependencies:
fsevents: registry.npmmirror.com/fsevents/2.3.2 fsevents: 2.3.2
dev: true dev: true
/jest-jasmine2/27.5.1: /jest-jasmine2/27.5.1:
@ -5853,7 +5872,7 @@ packages:
dependencies: dependencies:
universalify: 2.0.0 universalify: 2.0.0
optionalDependencies: optionalDependencies:
graceful-fs: registry.npmmirror.com/graceful-fs/4.2.9 graceful-fs: 4.2.9
/just-debounce/1.1.0: /just-debounce/1.1.0:
resolution: {integrity: sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==} resolution: {integrity: sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==}
@ -5990,7 +6009,6 @@ packages:
engines: {node: '>=10'} engines: {node: '>=10'}
dependencies: dependencies:
yallist: 4.0.0 yallist: 4.0.0
dev: true
/magic-string/0.25.9: /magic-string/0.25.9:
resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
@ -6124,6 +6142,11 @@ packages:
resolution: {integrity: sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==} resolution: {integrity: sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==}
engines: {node: '>= 0.10'} engines: {node: '>= 0.10'}
/nan/2.15.0:
resolution: {integrity: sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==}
requiresBuild: true
optional: true
/nanoid/3.3.1: /nanoid/3.3.1:
resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==} resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
@ -6786,7 +6809,7 @@ packages:
engines: {node: '>=10.0.0'} engines: {node: '>=10.0.0'}
hasBin: true hasBin: true
optionalDependencies: optionalDependencies:
fsevents: registry.npmmirror.com/fsevents/2.3.2 fsevents: 2.3.2
dev: true dev: true
/rollup/2.70.1: /rollup/2.70.1:
@ -6794,7 +6817,7 @@ packages:
engines: {node: '>=10.0.0'} engines: {node: '>=10.0.0'}
hasBin: true hasBin: true
optionalDependencies: optionalDependencies:
fsevents: registry.npmmirror.com/fsevents/2.3.2 fsevents: 2.3.2
/safe-buffer/5.1.2: /safe-buffer/5.1.2:
resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
@ -6839,7 +6862,6 @@ packages:
hasBin: true hasBin: true
dependencies: dependencies:
lru-cache: 6.0.0 lru-cache: 6.0.0
dev: true
/serialize-javascript/4.0.0: /serialize-javascript/4.0.0:
resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==}
@ -7667,7 +7689,6 @@ packages:
/yallist/4.0.0: /yallist/4.0.0:
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
dev: true
/yargs-parser/20.2.9: /yargs-parser/20.2.9:
resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
@ -7720,13 +7741,6 @@ packages:
regenerator-runtime: registry.npmmirror.com/regenerator-runtime/0.13.9 regenerator-runtime: registry.npmmirror.com/regenerator-runtime/0.13.9
dev: true dev: true
registry.npmmirror.com/@nicolo-ribaudo/chokidar-2/2.1.8-no-fsevents.3:
resolution: {integrity: sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz}
name: '@nicolo-ribaudo/chokidar-2'
version: 2.1.8-no-fsevents.3
requiresBuild: true
optional: true
registry.npmmirror.com/ansi-escapes/4.3.2: registry.npmmirror.com/ansi-escapes/4.3.2:
resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz} resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz}
name: ansi-escapes name: ansi-escapes
@ -7781,15 +7795,6 @@ packages:
version: 1.5.1 version: 1.5.1
dev: false dev: false
registry.npmmirror.com/bindings/1.5.0:
resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bindings/-/bindings-1.5.0.tgz}
name: bindings
version: 1.5.0
requiresBuild: true
dependencies:
file-uri-to-path: registry.npmmirror.com/file-uri-to-path/1.0.0
optional: true
registry.npmmirror.com/bl/4.1.0: registry.npmmirror.com/bl/4.1.0:
resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz} resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz}
name: bl name: bl
@ -7841,24 +7846,6 @@ packages:
version: 0.7.0 version: 0.7.0
dev: false dev: false
registry.npmmirror.com/chokidar/3.5.3:
resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz}
name: chokidar
version: 3.5.3
engines: {node: '>= 8.10.0'}
requiresBuild: true
dependencies:
anymatch: 3.1.2
braces: 3.0.2
glob-parent: 5.1.2
is-binary-path: 2.1.0
is-glob: 4.0.3
normalize-path: 3.0.0
readdirp: 3.6.0
optionalDependencies:
fsevents: registry.npmmirror.com/fsevents/2.3.2
optional: true
registry.npmmirror.com/cli-cursor/3.1.0: registry.npmmirror.com/cli-cursor/3.1.0:
resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz} resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz}
name: cli-cursor name: cli-cursor
@ -8183,13 +8170,6 @@ packages:
escape-string-regexp: registry.npmmirror.com/escape-string-regexp/1.0.5 escape-string-regexp: registry.npmmirror.com/escape-string-regexp/1.0.5
dev: false dev: false
registry.npmmirror.com/file-uri-to-path/1.0.0:
resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz}
name: file-uri-to-path
version: 1.0.0
requiresBuild: true
optional: true
registry.npmmirror.com/fs-extra/10.0.1: registry.npmmirror.com/fs-extra/10.0.1:
resolution: {integrity: sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fs-extra/-/fs-extra-10.0.1.tgz} resolution: {integrity: sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fs-extra/-/fs-extra-10.0.1.tgz}
name: fs-extra name: fs-extra
@ -8207,19 +8187,6 @@ packages:
version: 1.0.0 version: 1.0.0
dev: false dev: false
registry.npmmirror.com/fsevents/1.2.13:
resolution: {integrity: sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fsevents/-/fsevents-1.2.13.tgz}
name: fsevents
version: 1.2.13
engines: {node: '>= 4.0'}
os: [darwin]
deprecated: fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.
requiresBuild: true
dependencies:
bindings: registry.npmmirror.com/bindings/1.5.0
nan: registry.npmmirror.com/nan/2.15.0
optional: true
registry.npmmirror.com/fsevents/2.3.2: registry.npmmirror.com/fsevents/2.3.2:
resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz} resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz}
name: fsevents name: fsevents
@ -8253,6 +8220,7 @@ packages:
name: graceful-fs name: graceful-fs
version: 4.2.9 version: 4.2.9
requiresBuild: true requiresBuild: true
dev: false
registry.npmmirror.com/has-flag/4.0.0: registry.npmmirror.com/has-flag/4.0.0:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz} resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz}
@ -8429,13 +8397,6 @@ packages:
version: 0.0.8 version: 0.0.8
dev: false dev: false
registry.npmmirror.com/nan/2.15.0:
resolution: {integrity: sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nan/-/nan-2.15.0.tgz}
name: nan
version: 2.15.0
requiresBuild: true
optional: true
registry.npmmirror.com/once/1.4.0: registry.npmmirror.com/once/1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/once/-/once-1.4.0.tgz} resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/once/-/once-1.4.0.tgz}
name: once name: once
@ -8593,6 +8554,7 @@ packages:
version: 0.6.1 version: 0.6.1
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
requiresBuild: true requiresBuild: true
dev: false
registry.npmmirror.com/string-width/1.0.2: registry.npmmirror.com/string-width/1.0.2:
resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string-width/-/string-width-1.0.2.tgz} resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string-width/-/string-width-1.0.2.tgz}