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 inquirer = require("inquirer");
const semver = require("semver")
const path = require("path");
const shelljs = require("shelljs");
const createLogger = require("logsets");
@ -38,16 +38,16 @@
const packages = [
"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/runtime/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/vite/package.json",
"git log --format=%cd --date=iso -1 -- packages/autopublish/package.json",
"git log --format=%cd --date=iso -1 -- packages/utils/package.json"
]
// const packages = [
// "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/runtime/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/vite/package.json",
// "git log --format=%cd --date=iso -1 -- packages/autopublish/package.json",
// "git log --format=%cd --date=iso -1 -- packages/utils/package.json"
// ]
function getPackages(){
let workspaceRoot = process.cwd()
@ -89,24 +89,74 @@
return changeFiles.length>0 ? changeFiles.split("\n") : []
}
function execShellScript(script){
/**
* 执行脚本出错会返回错误信息
* @param {*} script
*/
function execShellScript(script,options={}){
if(shelljs.exec(script).code>0){
throw new Error(`执行<${script}>失败`)
}
}
/**
* 执行脚本并返回结果
* @param {*} script
*/
function execShellScriptReturns(script,options={}){ ){
return shelljs.exec(script,options).code>0).stdout.trim()
}
program
/**
* 执行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
.command("publish")
.description("发布当前工作区下的包")
.option("-f, --force", "强制发布")
.option("--no-auto-commit", "不提交源码")
.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) => {
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"
}
@ -114,49 +164,73 @@ function execShellScript(script){
const packageFolder = process.cwd()
const packageName = path.basename(packageFolder)
const pkgFile = path.join(packageFolder,"package.json")
const { version,scripts } = fs.readJSONSync(pkgFile)
const package = fs.readJSONSync(pkgFile)
const packageBackup = Object.assign({},package) // 备份package.json当操作失败时还原
logger.log("包名:{}",`${packageName}`)
// 第一步: 查询当否已经提交了代码,如果没有则提交代码
const lastChanges = getPackageLastChanges(packageName)
let lastCommit = shelljs.exec(`git log --format=%cd --date=iso -1 -- .`, { silent: true }).stdout.trim()
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()}`))
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}"`)
}
}
// 第二步:更新最新的版本号
// 第一步: 提交代码
commitProject(package,{versionIncrementStep,autoCommit})
execShellScript(`npm version ${versionIncrementStep}`)
// 第二步: 更新版本号和发布时间
package.version = semver.inc(package.version,versionIncrementStep)
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 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()
// 第三步执行发布到Npm
// 由于工程可能引用了工作区内的其他包必须pnpm publish才能发布
// pnpm publish会修正引用工作区其他包到的依赖信息而npm publish不能识别工作区内的依赖会导致报错
try{
execShellScript(`pnpm publish --no-git-checks --access publish`)
// 当发布完毕后由于更新了publish因此需要重新提交代码
}catch{
fs.writeJSONSync(pkgFile,packageBackup)
}
})
program

View File

@ -1,6 +1,6 @@
{
"name": "@voerkai18n/publish",
"version": "1.0.0",
"version": "1.0.1",
"description": "发布项目工具",
"main": "index.js",
"scripts": {
@ -14,6 +14,7 @@
"publish": "./index.js"
},
"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';
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 i18nScope = scope;
const { getDataTypeName,isNumber,isPlainObject,deepMerge } = require$$2__default["default"];
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 i18nScope = scope;
const { getDataTypeName,isNumber,isPlainObject,deepMerge } = require$$2;
let inlineFormatters = formatters$1; // 内置格式化器

View File

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

View File

@ -33,8 +33,5 @@
"rollup": "^2.69.0",
"rollup-plugin-clear": "^2.0.7",
"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 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 { babel } from '@rollup/plugin-babel';
@ -22,7 +22,7 @@ export default [
}
],
plugins: [
resolve(),
//resolve(),
commonjs(),
babel({
babelHelpers:"runtime",
@ -48,7 +48,7 @@ export default [
}
],
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:
specifiers:
commander: ^9.0.0
semver: ^7.3.5
dependencies:
commander: registry.npmmirror.com/commander/9.0.0
semver: 7.3.5
packages/babel:
specifiers:
@ -162,13 +164,10 @@ importers:
'@rollup/plugin-babel': ^5.3.1
'@rollup/plugin-commonjs': ^21.0.2
'@rollup/plugin-node-resolve': ^13.1.3
'@voerkai18n/utils': workspace:^1.0.0
deepmerge: ^4.2.2
rollup: ^2.69.0
rollup-plugin-clear: ^2.0.7
rollup-plugin-terser: ^7.0.2
dependencies:
'@voerkai18n/utils': link:../utils
devDependencies:
'@babel/cli': 7.17.6_@babel+core@7.17.5
'@babel/core': 7.17.5
@ -239,8 +238,8 @@ packages:
slash: 2.0.0
source-map: 0.5.7
optionalDependencies:
'@nicolo-ribaudo/chokidar-2': registry.npmmirror.com/@nicolo-ribaudo/chokidar-2/2.1.8-no-fsevents.3
chokidar: registry.npmmirror.com/chokidar/3.5.3
'@nicolo-ribaudo/chokidar-2': 2.1.8-no-fsevents.3
chokidar: 3.5.3
/@babel/cli/7.17.6_@babel+core@7.17.8:
resolution: {integrity: sha512-l4w608nsDNlxZhiJ5tE3DbNmr61fIKMZ6fTBo171VEFuFMIYuJ3mHRhTLEkKKyvx2Mizkkv/0a8OJOnZqkKYNA==}
@ -2624,7 +2623,6 @@ packages:
/@nicolo-ribaudo/chokidar-2/2.1.8-no-fsevents.3:
resolution: {integrity: sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==}
requiresBuild: true
dev: true
optional: true
/@polka/url/1.0.0-next.21:
@ -3777,6 +3775,13 @@ packages:
engines: {node: '>=8'}
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:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
dependencies:
@ -3958,7 +3963,7 @@ packages:
readdirp: 2.2.1
upath: 1.2.0
optionalDependencies:
fsevents: registry.npmmirror.com/fsevents/1.2.13
fsevents: 1.2.13
/chokidar/3.5.3:
resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
@ -3974,7 +3979,6 @@ packages:
readdirp: 3.6.0
optionalDependencies:
fsevents: 2.3.2
dev: true
optional: true
/ci-info/3.3.0:
@ -4460,7 +4464,7 @@ packages:
esutils: 2.0.3
optionator: 0.8.3
optionalDependencies:
source-map: registry.npmmirror.com/source-map/0.6.1
source-map: 0.6.1
dev: true
/esprima/4.0.1:
@ -4596,6 +4600,11 @@ packages:
bser: 2.1.1
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:
resolution: {integrity: sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=}
engines: {node: '>=0.10.0'}
@ -4710,12 +4719,22 @@ packages:
/fs.realpath/1.0.0:
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:
resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
requiresBuild: true
dev: true
optional: true
/function-bind/1.1.1:
@ -5473,7 +5492,7 @@ packages:
micromatch: 4.0.5
walker: 1.0.8
optionalDependencies:
fsevents: registry.npmmirror.com/fsevents/2.3.2
fsevents: 2.3.2
dev: true
/jest-jasmine2/27.5.1:
@ -5853,7 +5872,7 @@ packages:
dependencies:
universalify: 2.0.0
optionalDependencies:
graceful-fs: registry.npmmirror.com/graceful-fs/4.2.9
graceful-fs: 4.2.9
/just-debounce/1.1.0:
resolution: {integrity: sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==}
@ -5990,7 +6009,6 @@ packages:
engines: {node: '>=10'}
dependencies:
yallist: 4.0.0
dev: true
/magic-string/0.25.9:
resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
@ -6124,6 +6142,11 @@ packages:
resolution: {integrity: sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==}
engines: {node: '>= 0.10'}
/nan/2.15.0:
resolution: {integrity: sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==}
requiresBuild: true
optional: true
/nanoid/3.3.1:
resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
@ -6786,7 +6809,7 @@ packages:
engines: {node: '>=10.0.0'}
hasBin: true
optionalDependencies:
fsevents: registry.npmmirror.com/fsevents/2.3.2
fsevents: 2.3.2
dev: true
/rollup/2.70.1:
@ -6794,7 +6817,7 @@ packages:
engines: {node: '>=10.0.0'}
hasBin: true
optionalDependencies:
fsevents: registry.npmmirror.com/fsevents/2.3.2
fsevents: 2.3.2
/safe-buffer/5.1.2:
resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
@ -6839,7 +6862,6 @@ packages:
hasBin: true
dependencies:
lru-cache: 6.0.0
dev: true
/serialize-javascript/4.0.0:
resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==}
@ -7667,7 +7689,6 @@ packages:
/yallist/4.0.0:
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
dev: true
/yargs-parser/20.2.9:
resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
@ -7720,13 +7741,6 @@ packages:
regenerator-runtime: registry.npmmirror.com/regenerator-runtime/0.13.9
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:
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
@ -7781,15 +7795,6 @@ packages:
version: 1.5.1
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:
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
@ -7841,24 +7846,6 @@ packages:
version: 0.7.0
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:
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
@ -8183,13 +8170,6 @@ packages:
escape-string-regexp: registry.npmmirror.com/escape-string-regexp/1.0.5
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:
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
@ -8207,19 +8187,6 @@ packages:
version: 1.0.0
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:
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
@ -8253,6 +8220,7 @@ packages:
name: graceful-fs
version: 4.2.9
requiresBuild: true
dev: false
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}
@ -8429,13 +8397,6 @@ packages:
version: 0.0.8
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:
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
@ -8593,6 +8554,7 @@ packages:
version: 0.6.1
engines: {node: '>=0.10.0'}
requiresBuild: true
dev: false
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}