From fb2bf1fcbed2b609ebc4ae014279b3236e5f5a33 Mon Sep 17 00:00:00 2001 From: bobi <1090851297@qq.com> Date: Sat, 20 Apr 2024 09:49:23 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20feat:=20cz=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=A3=80=E6=9F=A5=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/cli/.eslintrc | 19 + packages/cli/.prettierignore | 5 + packages/cli/.prettierrc.js | 16 + packages/cli/bin/index.js | 4 +- packages/cli/package-lock.json | 1788 +++++++++++++++-- packages/cli/package.json | 11 +- packages/cli/rollup.config.default.js | 38 +- packages/cli/rollup.config.dev.js | 14 +- packages/cli/src/config/dependencyConfig.ts | 24 +- .../cli/src/core/cz/configFile/configFile.ts | 93 +- .../cz/denpendencyRules/dependcyDiretory.ts | 10 +- packages/cli/src/core/cz/doctor/doctor.ts | 74 +- .../src/core/cz/packageFile/PackageFile.ts | 146 +- .../core/dependencies/Analyzer/analyzer.ts | 50 +- .../dependencies/dependencies-graph/Graph.ts | 78 +- .../dependencies-graph/dependenciesGraph.ts | 114 +- .../core/dependencies/enums/PackageManager.ts | 2 +- .../dependencies/enums/dependenciesType.ts | 10 +- .../src/core/dependencies/factory/detector.ts | 16 +- .../src/core/dependencies/factory/factory.ts | 36 +- .../glob-rules/npmModulesRules.ts | 12 +- .../dependencies/loadModules/loadModules.ts | 34 +- .../core/dependencies/resolver/NpmResolver.ts | 142 +- .../src/core/dependencies/server/server.ts | 160 +- .../src/core/dependencies/ui/components.d.ts | 10 +- .../cli/src/core/dependencies/ui/package.json | 2 +- .../src/core/dependencies/ui/tsconfig.json | 2 +- .../core/node-template/inquirery/inquirery.ts | 45 +- .../core/node-template/inquirery/questions.ts | 14 +- .../src/core/vite-template/copyTemplate.ts | 58 +- .../src/core/vite-template/inquirerCommand.ts | 46 +- packages/cli/src/index.ts | 121 +- packages/cli/src/types/GraphData.ts | 20 +- packages/cli/src/types/JsonData.ts | 11 +- packages/cli/src/types/PackageJson.ts | 42 +- packages/cli/src/types/packageType.ts | 14 +- packages/cli/src/utils/errorToast.ts | 12 +- packages/cli/src/utils/fsUtils.ts | 49 +- packages/cli/src/utils/getDependencies.ts | 41 +- packages/cli/src/utils/getInquirerData.ts | 48 +- packages/cli/src/utils/measureTime.ts | 8 +- packages/cli/src/utils/packageJsonUtils.ts | 32 +- packages/cli/src/utils/pathUtils.ts | 40 +- .../template/node-template/.commitlintrc.js | 167 +- packages/cli/template/node-template/.eslintrc | 19 + .../cli/template/node-template/.prettierrc.js | 17 + .../cli/template/node-template/bin/main.js | 4 +- packages/cli/template/node-template/index.ts | 6 +- .../cli/template/node-template/package.json | 6 +- .../node-template/rollup.config.default.js | 32 +- .../node-template/rollup.config.dev.js | 18 +- .../node-template/rollup.config.prod.js | 18 +- .../cli/template/node-template/tsconfig.json | 15 +- .../vite-react-tailwind-ali/.commitlintrc.js | 167 +- .../vite-react-tailwind-ali/README.md | 4 +- .../vite-react-tailwind-ali/package.json | 2 +- .../vite-react-tailwind-ali/vite.config.ts | 8 +- .../vite-vue3-less-ali/components.d.ts | 20 +- packages/cli/tsconfig.json | 17 +- pnpm-lock.yaml | 526 ++++- 60 files changed, 3349 insertions(+), 1208 deletions(-) create mode 100644 packages/cli/.eslintrc create mode 100644 packages/cli/.prettierignore create mode 100644 packages/cli/.prettierrc.js create mode 100644 packages/cli/template/node-template/.eslintrc create mode 100644 packages/cli/template/node-template/.prettierrc.js diff --git a/packages/cli/.eslintrc b/packages/cli/.eslintrc new file mode 100644 index 0000000..8b5a1c8 --- /dev/null +++ b/packages/cli/.eslintrc @@ -0,0 +1,19 @@ +{ + "root": true, + "parser": "@typescript-eslint/parser", + "plugins": [ + "@typescript-eslint" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/eslint-recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + "no-console": "off" + }, + // set eslint env + "env": { + "node": true + } +} diff --git a/packages/cli/.prettierignore b/packages/cli/.prettierignore new file mode 100644 index 0000000..68ff179 --- /dev/null +++ b/packages/cli/.prettierignore @@ -0,0 +1,5 @@ +.history/ +node_modules +lib +dist +template \ No newline at end of file diff --git a/packages/cli/.prettierrc.js b/packages/cli/.prettierrc.js new file mode 100644 index 0000000..f2276e5 --- /dev/null +++ b/packages/cli/.prettierrc.js @@ -0,0 +1,16 @@ +export default { + // 一行的字符数,如果超过会进行换行,默认为80 + printWidth: 80, + // 一个tab代表几个空格数,默认为2 + tabWidth: 2, + // 是否使用tab进行缩进,默认为false,表示用空格进行缩减 + useTabs: false, + // 字符串是否使用单引号,默认为false,使用双引号 + singleQuote: true, + // 行位是否使用分号,默认为true + semi: false, + // 是否使用尾逗号,有三个可选值"" + trailingComma: 'none', + // 对象大括号直接是否有空格,默认为true,效果:{ foo: bar } + bracketSpacing: true +} diff --git a/packages/cli/bin/index.js b/packages/cli/bin/index.js index 84f22b5..090160f 100755 --- a/packages/cli/bin/index.js +++ b/packages/cli/bin/index.js @@ -1,3 +1,3 @@ #!/usr/bin/env node -import main from "../lib/index.js"; -main(); +import main from '../lib/index.js' +main() diff --git a/packages/cli/package-lock.json b/packages/cli/package-lock.json index c6d66d7..05d3fed 100644 --- a/packages/cli/package-lock.json +++ b/packages/cli/package-lock.json @@ -1,22 +1,27 @@ { "name": "full-featured-cli", - "version": "1.0.4", + "version": "1.3.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "full-featured-cli", - "version": "1.0.4", + "version": "1.3.3", "license": "ISC", "dependencies": { - "@inquirer/prompts": "^4.3.1", + "@inquirer/prompts": "^4.3.3", + "@types/express": "^4.17.17", + "@types/figlet": "^1.5.8", "chalk": "^5.3.0", "commander": "^12.0.0", "express": "^4.19.2", + "figlet": "^1.7.0", "fs-extra": "^9.0.0", "fuse.js": "^7.0.0", + "hirestime": "^7.0.4", "inquirer": "^8.2.0", - "minimist": "^1.2.8" + "minimist": "^1.2.8", + "portfinder": "^1.0.32" }, "bin": { "full-featured": "bin/index.js" @@ -30,11 +35,18 @@ "@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-replace": "^5.0.5", "@rollup/plugin-terser": "^0.4.4", + "@types/body-parser": "^1.19.5", + "@types/express-serve-static-core": "^4.19.0", "@types/fs-extra": "^11.0.4", "@types/inquirer": "^9.0.7", "@types/node": "^20.11.30", + "@types/qs": "^6.9.14", "@types/semver": "^7.5.8", + "@types/serve-static": "^1.15.7", + "@typescript-eslint/parser": "^7.7.0", + "eslint": "^8.46.0", "glob": "^10.3.12", + "prettier": "^3.2.5", "rimraf": "^5.0.5", "rollup": "^4.14.0", "rollup-plugin-esbuild": "^6.1.1", @@ -49,6 +61,15 @@ "undici-types": "~5.26.4" } }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmmirror.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@ampproject/remapping": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", @@ -854,16 +875,186 @@ "node": ">=12" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmmirror.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmmirror.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmmirror.com/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmmirror.com/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "dev": true + }, "node_modules/@inquirer/checkbox": { - "version": "2.2.2", - "resolved": "https://registry.npmmirror.com/@inquirer/checkbox/-/checkbox-2.2.2.tgz", - "integrity": "sha512-EyPKpHIJ4bOw7S+Gbbwdy1V/kR3L5I2lLa/b9L/lOQDhdbk7Q1d0ET2k2kU8DNPu7FgQ8xvdzEUf92tSomrpzQ==", + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/@inquirer/checkbox/-/checkbox-2.3.1.tgz", + "integrity": "sha512-w0B2PhvIh6SFA5uMh32FE+7xSuv1P2o/qjBb5jxgi1DB8VBFjSD3gHDsgiGDeSmfTaQDyR7/beDllIvKeA+YDw==", + "dependencies": { + "@inquirer/core": "^8.0.1", + "@inquirer/figures": "^1.0.1", + "@inquirer/type": "^1.3.0", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/checkbox/node_modules/@inquirer/core": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/@inquirer/core/-/core-8.0.1.tgz", + "integrity": "sha512-qJRk1y51Os2ARc11Bg2N6uIwiQ9qBSrmZeuMonaQ/ntFpb4+VlcQ8Gl1TFH67mJLz3HA2nvuave0nbv6Lu8pbg==", "dependencies": { - "@inquirer/core": "^7.1.2", - "@inquirer/type": "^1.2.1", + "@inquirer/figures": "^1.0.1", + "@inquirer/type": "^1.3.0", + "@types/mute-stream": "^0.0.4", + "@types/node": "^20.12.7", + "@types/wrap-ansi": "^3.0.0", "ansi-escapes": "^4.3.2", "chalk": "^4.1.2", - "figures": "^3.2.0" + "cli-spinners": "^2.9.2", + "cli-width": "^4.1.0", + "mute-stream": "^1.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0" }, "engines": { "node": ">=18" @@ -871,7 +1062,7 @@ }, "node_modules/@inquirer/checkbox/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", @@ -879,29 +1070,62 @@ }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/@inquirer/confirm": { - "version": "3.1.2", - "resolved": "https://registry.npmmirror.com/@inquirer/confirm/-/confirm-3.1.2.tgz", - "integrity": "sha512-xQeRxRpVOQdBinIyOHX9+/nTrvt84NnaP8hym5ARdLr6a5T1ckowx70sEaItgULBHlxSIJL970BoRfFxlzO2IA==", + "version": "3.1.5", + "resolved": "https://registry.npmmirror.com/@inquirer/confirm/-/confirm-3.1.5.tgz", + "integrity": "sha512-6+dwZrpko5vr5EFEQmUbfBVhtu6IsnB8lQNsLHgO9S9fbfS5J6MuUj+NY0h98pPpYZXEazLR7qzypEDqVzf6aQ==", + "dependencies": { + "@inquirer/core": "^8.0.1", + "@inquirer/type": "^1.3.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/confirm/node_modules/@inquirer/core": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/@inquirer/core/-/core-8.0.1.tgz", + "integrity": "sha512-qJRk1y51Os2ARc11Bg2N6uIwiQ9qBSrmZeuMonaQ/ntFpb4+VlcQ8Gl1TFH67mJLz3HA2nvuave0nbv6Lu8pbg==", "dependencies": { - "@inquirer/core": "^7.1.2", - "@inquirer/type": "^1.2.1" + "@inquirer/figures": "^1.0.1", + "@inquirer/type": "^1.3.0", + "@types/mute-stream": "^0.0.4", + "@types/node": "^20.12.7", + "@types/wrap-ansi": "^3.0.0", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "cli-spinners": "^2.9.2", + "cli-width": "^4.1.0", + "mute-stream": "^1.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0" }, "engines": { "node": ">=18" } }, + "node_modules/@inquirer/confirm/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@inquirer/core": { - "version": "7.1.2", - "resolved": "https://registry.npmmirror.com/@inquirer/core/-/core-7.1.2.tgz", - "integrity": "sha512-ne5VhDqruYYzx8mmjDZ9F58ymrLJGxmSHJUcJGiW3tifzvl3goAm6gNX11w6+zUnGE54vgQ6ALDXL3IOSezMRw==", + "version": "7.1.3", + "resolved": "https://registry.npmmirror.com/@inquirer/core/-/core-7.1.3.tgz", + "integrity": "sha512-MbHUe32W0DRtuw3Hlt+vLWy3c0Vw7wVHSJyYZ16IGVXyxs31BTyo2MOFKzNnzBBAWhsqn+iHO1r84FXIzs39HQ==", "dependencies": { - "@inquirer/type": "^1.2.1", + "@inquirer/figures": "^1.0.0", + "@inquirer/type": "^1.2.2", "@types/mute-stream": "^0.0.4", "@types/node": "^20.12.4", "@types/wrap-ansi": "^3.0.0", @@ -909,7 +1133,6 @@ "chalk": "^4.1.2", "cli-spinners": "^2.9.2", "cli-width": "^4.1.0", - "figures": "^3.2.0", "mute-stream": "^1.0.0", "signal-exit": "^4.1.0", "strip-ansi": "^6.0.1", @@ -921,7 +1144,7 @@ }, "node_modules/@inquirer/core/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", @@ -929,40 +1152,47 @@ }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/@inquirer/editor": { - "version": "2.1.2", - "resolved": "https://registry.npmmirror.com/@inquirer/editor/-/editor-2.1.2.tgz", - "integrity": "sha512-758pnVt3WTk5x7ITlOTdZ6AIcbt0fGmIMpbZKJAeAejDvFsMyN+A1ODRgPi+yzpng4OsF8p9LamCH/F+5FhtGA==", + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/@inquirer/editor/-/editor-2.1.5.tgz", + "integrity": "sha512-wzMc/lTt79gOCPbBH7LVCrsn36+JHwYPXchDPATYphFTS/XLy50DuM2D79/dn0VIZHfNSw4C8RZNLDUH/3YmpA==", "dependencies": { - "@inquirer/core": "^7.1.2", - "@inquirer/type": "^1.2.1", + "@inquirer/core": "^8.0.1", + "@inquirer/type": "^1.3.0", "external-editor": "^3.1.0" }, "engines": { "node": ">=18" } }, - "node_modules/@inquirer/expand": { - "version": "2.1.2", - "resolved": "https://registry.npmmirror.com/@inquirer/expand/-/expand-2.1.2.tgz", - "integrity": "sha512-QTcmxuKBXvsitEmHrz7Nrr30OPTYQWZf+hWrPUHoLSs1Qg1CLIUxFUfKDguiHZGubXmMydKB9m6TJZlAmU+WTA==", + "node_modules/@inquirer/editor/node_modules/@inquirer/core": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/@inquirer/core/-/core-8.0.1.tgz", + "integrity": "sha512-qJRk1y51Os2ARc11Bg2N6uIwiQ9qBSrmZeuMonaQ/ntFpb4+VlcQ8Gl1TFH67mJLz3HA2nvuave0nbv6Lu8pbg==", "dependencies": { - "@inquirer/core": "^7.1.2", - "@inquirer/type": "^1.2.1", - "chalk": "^4.1.2" + "@inquirer/figures": "^1.0.1", + "@inquirer/type": "^1.3.0", + "@types/mute-stream": "^0.0.4", + "@types/node": "^20.12.7", + "@types/wrap-ansi": "^3.0.0", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "cli-spinners": "^2.9.2", + "cli-width": "^4.1.0", + "mute-stream": "^1.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0" }, "engines": { "node": ">=18" } }, - "node_modules/@inquirer/expand/node_modules/chalk": { + "node_modules/@inquirer/editor/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", @@ -970,71 +1200,102 @@ }, "engines": { "node": ">=10" + } + }, + "node_modules/@inquirer/expand": { + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/@inquirer/expand/-/expand-2.1.5.tgz", + "integrity": "sha512-XWMJWHtH4qHbr4Zxms8qq0QxzFtwGOVnQX8QnuA5HT1Ew19H6moy48pN5od2PxcZ8NuIKxsW8vSTiCidpzri9Q==", + "dependencies": { + "@inquirer/core": "^8.0.1", + "@inquirer/type": "^1.3.0", + "chalk": "^4.1.2" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "engines": { + "node": ">=18" } }, - "node_modules/@inquirer/input": { - "version": "2.1.2", - "resolved": "https://registry.npmmirror.com/@inquirer/input/-/input-2.1.2.tgz", - "integrity": "sha512-Szr9POj/NxbKSmbOx81ZD76b6xmvXXUY56QLWBXRv8zIGTIKtj03V4zAsw3MTiL6Qoo+IaRLwTLr3bI+qIblzA==", + "node_modules/@inquirer/expand/node_modules/@inquirer/core": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/@inquirer/core/-/core-8.0.1.tgz", + "integrity": "sha512-qJRk1y51Os2ARc11Bg2N6uIwiQ9qBSrmZeuMonaQ/ntFpb4+VlcQ8Gl1TFH67mJLz3HA2nvuave0nbv6Lu8pbg==", "dependencies": { - "@inquirer/core": "^7.1.2", - "@inquirer/type": "^1.2.1" + "@inquirer/figures": "^1.0.1", + "@inquirer/type": "^1.3.0", + "@types/mute-stream": "^0.0.4", + "@types/node": "^20.12.7", + "@types/wrap-ansi": "^3.0.0", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "cli-spinners": "^2.9.2", + "cli-width": "^4.1.0", + "mute-stream": "^1.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0" }, "engines": { "node": ">=18" } }, - "node_modules/@inquirer/password": { - "version": "2.1.2", - "resolved": "https://registry.npmmirror.com/@inquirer/password/-/password-2.1.2.tgz", - "integrity": "sha512-PSdF3PgYdNPLAwlIWiLyyXowZP2sNufQSTegNxnKoE/Ki5TwWphgphAGubd6X12hQAFaBrswqGpDjkwA/DOAig==", + "node_modules/@inquirer/expand/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { - "@inquirer/core": "^7.1.2", - "@inquirer/type": "^1.2.1", - "ansi-escapes": "^4.3.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/@inquirer/figures/-/figures-1.0.1.tgz", + "integrity": "sha512-mtup3wVKia3ZwULPHcbs4Mor8Voi+iIXEWD7wCNbIO6lYR62oPCTQyrddi5OMYVXHzeCSoneZwJuS8sBvlEwDw==", "engines": { "node": ">=18" } }, - "node_modules/@inquirer/prompts": { - "version": "4.3.2", - "resolved": "https://registry.npmmirror.com/@inquirer/prompts/-/prompts-4.3.2.tgz", - "integrity": "sha512-I5q6tK3cMI3jIzkvoirZ+hkpkrGH5i0PkIENe1V2gmmBIzJ8TVtP2EtPLVuqBKFvCyBIgKLUj1TcH23u09fN+A==", + "node_modules/@inquirer/input": { + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/@inquirer/input/-/input-2.1.5.tgz", + "integrity": "sha512-z4l1ISps86JZXo1OsWt8IAh4nnyXjXwcu/na2pKFkDud6DC9TLxvDPWxHmq25T40/WZCULhMQuCMDV+VccVG+A==", "dependencies": { - "@inquirer/checkbox": "^2.2.2", - "@inquirer/confirm": "^3.1.2", - "@inquirer/core": "^7.1.2", - "@inquirer/editor": "^2.1.2", - "@inquirer/expand": "^2.1.2", - "@inquirer/input": "^2.1.2", - "@inquirer/password": "^2.1.2", - "@inquirer/rawlist": "^2.1.2", - "@inquirer/select": "^2.2.2" + "@inquirer/core": "^8.0.1", + "@inquirer/type": "^1.3.0" }, "engines": { "node": ">=18" } }, - "node_modules/@inquirer/rawlist": { - "version": "2.1.2", - "resolved": "https://registry.npmmirror.com/@inquirer/rawlist/-/rawlist-2.1.2.tgz", - "integrity": "sha512-64XUlaY3Iwes9QzfUA068MaaHNOrq8/TlNG8IK56uYAJsPVB5YRAKa3Kng07dAXTRXkMLvdXlw+qPQtpte5HOQ==", + "node_modules/@inquirer/input/node_modules/@inquirer/core": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/@inquirer/core/-/core-8.0.1.tgz", + "integrity": "sha512-qJRk1y51Os2ARc11Bg2N6uIwiQ9qBSrmZeuMonaQ/ntFpb4+VlcQ8Gl1TFH67mJLz3HA2nvuave0nbv6Lu8pbg==", "dependencies": { - "@inquirer/core": "^7.1.2", - "@inquirer/type": "^1.2.1", - "chalk": "^4.1.2" + "@inquirer/figures": "^1.0.1", + "@inquirer/type": "^1.3.0", + "@types/mute-stream": "^0.0.4", + "@types/node": "^20.12.7", + "@types/wrap-ansi": "^3.0.0", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "cli-spinners": "^2.9.2", + "cli-width": "^4.1.0", + "mute-stream": "^1.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0" }, "engines": { "node": ">=18" } }, - "node_modules/@inquirer/rawlist/node_modules/chalk": { + "node_modules/@inquirer/input/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", @@ -1042,29 +1303,47 @@ }, "engines": { "node": ">=10" + } + }, + "node_modules/@inquirer/password": { + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/@inquirer/password/-/password-2.1.5.tgz", + "integrity": "sha512-uQ7zG/yOpO+OqeBg+W+Z1DY1gt+ZOW+pFGsYpqwHVIbTr17zOiUOFiInDXTWfiOk7r+hTAI7CqcJpZj/Zx6c6Q==", + "dependencies": { + "@inquirer/core": "^8.0.1", + "@inquirer/type": "^1.3.0", + "ansi-escapes": "^4.3.2" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "engines": { + "node": ">=18" } }, - "node_modules/@inquirer/select": { - "version": "2.2.2", - "resolved": "https://registry.npmmirror.com/@inquirer/select/-/select-2.2.2.tgz", - "integrity": "sha512-WaoleV3O/7iDAHFC0GArOkl7Yg/7wQ/UptxEkfM+bG67h65v0troAjkNASBbNiz9vvoNZxOGhVrug0LNDftCoQ==", + "node_modules/@inquirer/password/node_modules/@inquirer/core": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/@inquirer/core/-/core-8.0.1.tgz", + "integrity": "sha512-qJRk1y51Os2ARc11Bg2N6uIwiQ9qBSrmZeuMonaQ/ntFpb4+VlcQ8Gl1TFH67mJLz3HA2nvuave0nbv6Lu8pbg==", "dependencies": { - "@inquirer/core": "^7.1.2", - "@inquirer/type": "^1.2.1", + "@inquirer/figures": "^1.0.1", + "@inquirer/type": "^1.3.0", + "@types/mute-stream": "^0.0.4", + "@types/node": "^20.12.7", + "@types/wrap-ansi": "^3.0.0", "ansi-escapes": "^4.3.2", "chalk": "^4.1.2", - "figures": "^3.2.0" + "cli-spinners": "^2.9.2", + "cli-width": "^4.1.0", + "mute-stream": "^1.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0" }, "engines": { "node": ">=18" } }, - "node_modules/@inquirer/select/node_modules/chalk": { + "node_modules/@inquirer/password/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", @@ -1072,37 +1351,151 @@ }, "engines": { "node": ">=10" + } + }, + "node_modules/@inquirer/prompts": { + "version": "4.3.3", + "resolved": "https://registry.npmmirror.com/@inquirer/prompts/-/prompts-4.3.3.tgz", + "integrity": "sha512-QLn4tTeLKH3Foqlof0+dY0kLoCGQvvR4MDkHAooPI0rLGPOjUwoiVeEalcMtJTGulqJ76it2UW4++j88WO6KLQ==", + "dependencies": { + "@inquirer/checkbox": "^2.2.3", + "@inquirer/confirm": "^3.1.3", + "@inquirer/core": "^7.1.3", + "@inquirer/editor": "^2.1.3", + "@inquirer/expand": "^2.1.3", + "@inquirer/input": "^2.1.3", + "@inquirer/password": "^2.1.3", + "@inquirer/rawlist": "^2.1.3", + "@inquirer/select": "^2.2.3" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "engines": { + "node": ">=18" } }, - "node_modules/@inquirer/type": { - "version": "1.2.1", - "resolved": "https://registry.npmmirror.com/@inquirer/type/-/type-1.2.1.tgz", - "integrity": "sha512-xwMfkPAxeo8Ji/IxfUSqzRi0/+F2GIqJmpc5/thelgMGsjNZcjDDRBO9TLXT1s/hdx/mK5QbVIvgoLIFgXhTMQ==", + "node_modules/@inquirer/rawlist": { + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/@inquirer/rawlist/-/rawlist-2.1.5.tgz", + "integrity": "sha512-gy/vHQYGGU9r/6dUvPKv5nBKcgxXvX+wnLJy6C5A0arMvC5rjgqf9/6fnvM1fQcjoRr6HReIoSrrzw7pqF57BQ==", + "dependencies": { + "@inquirer/core": "^8.0.1", + "@inquirer/type": "^1.3.0", + "chalk": "^4.1.2" + }, "engines": { "node": ">=18" } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, + "node_modules/@inquirer/rawlist/node_modules/@inquirer/core": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/@inquirer/core/-/core-8.0.1.tgz", + "integrity": "sha512-qJRk1y51Os2ARc11Bg2N6uIwiQ9qBSrmZeuMonaQ/ntFpb4+VlcQ8Gl1TFH67mJLz3HA2nvuave0nbv6Lu8pbg==", "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + "@inquirer/figures": "^1.0.1", + "@inquirer/type": "^1.3.0", + "@types/mute-stream": "^0.0.4", + "@types/node": "^20.12.7", + "@types/wrap-ansi": "^3.0.0", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "cli-spinners": "^2.9.2", + "cli-width": "^4.1.0", + "mute-stream": "^1.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0" }, "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "node_modules/@inquirer/rawlist/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@inquirer/select": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/@inquirer/select/-/select-2.3.1.tgz", + "integrity": "sha512-UagbSdmSjeoukHLXqkDQi2ewiGEogUyxaOeKeH34Ngmc/2z+S8u4JsJWToMJNKIHjEtoTFdlYpFrxCxapp06nQ==", + "dependencies": { + "@inquirer/core": "^8.0.1", + "@inquirer/figures": "^1.0.1", + "@inquirer/type": "^1.3.0", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/select/node_modules/@inquirer/core": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/@inquirer/core/-/core-8.0.1.tgz", + "integrity": "sha512-qJRk1y51Os2ARc11Bg2N6uIwiQ9qBSrmZeuMonaQ/ntFpb4+VlcQ8Gl1TFH67mJLz3HA2nvuave0nbv6Lu8pbg==", + "dependencies": { + "@inquirer/figures": "^1.0.1", + "@inquirer/type": "^1.3.0", + "@types/mute-stream": "^0.0.4", + "@types/node": "^20.12.7", + "@types/wrap-ansi": "^3.0.0", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "cli-spinners": "^2.9.2", + "cli-width": "^4.1.0", + "mute-stream": "^1.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/select/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@inquirer/type": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/@inquirer/type/-/type-1.3.0.tgz", + "integrity": "sha512-RW4Zf6RCTnInRaOZuRHTqAUl+v6VJuQGglir7nW2BkT3OXOphMhkIFhvFRjorBx2l0VwtC/M4No8vYR65TdN9Q==", + "engines": { + "node": ">=18" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", @@ -1239,6 +1632,41 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -1656,12 +2084,56 @@ "win32" ] }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmmirror.com/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmmirror.com/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.5.tgz", "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", "dev": true }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.0", + "resolved": "https://registry.npmmirror.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.0.tgz", + "integrity": "sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/figlet": { + "version": "1.5.8", + "resolved": "https://registry.npmmirror.com/@types/figlet/-/figlet-1.5.8.tgz", + "integrity": "sha512-G22AUvy4Tl95XLE7jmUM8s8mKcoz+Hr+Xm9W90gJsppJq9f9tHvOGkrpn4gRX0q/cLtBdNkWtWCKDg2UDZoZvQ==" + }, "node_modules/@types/fs-extra": { "version": "11.0.4", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz", @@ -1672,6 +2144,11 @@ "@types/node": "*" } }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" + }, "node_modules/@types/inquirer": { "version": "9.0.7", "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-9.0.7.tgz", @@ -1691,6 +2168,11 @@ "@types/node": "*" } }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmmirror.com/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + }, "node_modules/@types/mute-stream": { "version": "0.0.4", "resolved": "https://registry.npmmirror.com/@types/mute-stream/-/mute-stream-0.0.4.tgz", @@ -1700,13 +2182,23 @@ } }, "node_modules/@types/node": { - "version": "20.12.5", - "resolved": "https://registry.npmmirror.com/@types/node/-/node-20.12.5.tgz", - "integrity": "sha512-BD+BjQ9LS/D8ST9p5uqBxghlN+S42iuNxjsUGjeZobe/ciXzk2qb1B6IXc6AnRLS+yFJRpN2IPEHMzwspfDJNw==", + "version": "20.12.7", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-20.12.7.tgz", + "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", "dependencies": { "undici-types": "~5.26.4" } }, + "node_modules/@types/qs": { + "version": "6.9.15", + "resolved": "https://registry.npmmirror.com/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmmirror.com/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" + }, "node_modules/@types/resolve": { "version": "1.20.2", "resolved": "https://registry.npmmirror.com/@types/resolve/-/resolve-1.20.2.tgz", @@ -1719,6 +2211,25 @@ "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", "dev": true }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmmirror.com/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmmirror.com/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, "node_modules/@types/through": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.33.tgz", @@ -1733,6 +2244,95 @@ "resolved": "https://registry.npmmirror.com/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz", "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==" }, + "node_modules/@typescript-eslint/parser": { + "version": "7.7.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-7.7.0.tgz", + "integrity": "sha512-fNcDm3wSwVM8QYL4HKVBggdIPAy9Q41vcvC/GtDobw3c4ndVT3K6cqudUmjHPw8EAp4ufax0o58/xvWaP2FmTg==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "7.7.0", + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/typescript-estree": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.7.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-7.7.0.tgz", + "integrity": "sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.7.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-7.7.0.tgz", + "integrity": "sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==", + "dev": true, + "engines": { + "node": "^18.18.0 || >=20.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.7.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.0.tgz", + "integrity": "sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.7.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.0.tgz", + "integrity": "sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.7.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -1757,6 +2357,27 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -1787,11 +2408,34 @@ "node": ">=8" } }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmmirror.com/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dependencies": { + "lodash": "^4.17.14" + } + }, "node_modules/at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz", @@ -1866,6 +2510,18 @@ "balanced-match": "^1.0.0" } }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/browserslist": { "version": "4.23.0", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", @@ -1949,6 +2605,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/caniuse-lite": { "version": "1.0.30001607", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001607.tgz", @@ -2051,6 +2716,12 @@ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -2121,6 +2792,12 @@ } } }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, "node_modules/deepmerge": { "version": "4.3.1", "resolved": "https://registry.npmmirror.com/deepmerge/-/deepmerge-4.3.1.tgz", @@ -2171,6 +2848,30 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -2289,12 +2990,207 @@ "node": ">=0.8.0" } }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmmirror.com/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmmirror.com/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmmirror.com/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/estree-walker": { "version": "2.0.2", "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", @@ -2370,6 +3266,72 @@ "node": ">=4" } }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/figlet": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/figlet/-/figlet-1.7.0.tgz", + "integrity": "sha512-gO8l3wvqo0V7wEFLXPbkX83b7MVjRrk1oRLfYlZXol8nEpb/ON9pcKLI4qpBv5YtOTfrINtqb7b40iYY2FTWFg==", + "bin": { + "figlet": "bin/index.js" + }, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/figures": { "version": "3.2.0", "resolved": "https://registry.npmmirror.com/figures/-/figures-3.2.0.tgz", @@ -2381,6 +3343,30 @@ "node": ">=8" } }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/finalhandler": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", @@ -2411,6 +3397,90 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flat-cache/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/flat-cache/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/flat-cache/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, "node_modules/foreground-child": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", @@ -2552,14 +3622,52 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/globby/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, - "peer": true, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/gopd": { @@ -2578,6 +3686,12 @@ "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -2630,6 +3744,14 @@ "node": ">= 0.4" } }, + "node_modules/hirestime": { + "version": "7.0.4", + "resolved": "https://registry.npmmirror.com/hirestime/-/hirestime-7.0.4.tgz", + "integrity": "sha512-+MBUB+eJCfsLnl/DOeQTUi/GgS+Ottk5/pR6pDN7HJNOkMOHMMmmvNmQhes1zevzVi6xiulsY8ZnPrDZEcXXxg==", + "engines": { + "node": ">=6.0" + } + }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -2661,6 +3783,37 @@ "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -2758,6 +3911,15 @@ "hasown": "^2.0.0" } }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -2766,6 +3928,18 @@ "node": ">=8" } }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-interactive": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/is-interactive/-/is-interactive-1.0.0.tgz", @@ -2780,6 +3954,24 @@ "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", "dev": true }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-reference": { "version": "1.2.1", "resolved": "https://registry.npmmirror.com/is-reference/-/is-reference-1.2.1.tgz", @@ -2828,6 +4020,18 @@ "dev": true, "peer": true }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -2841,6 +4045,24 @@ "node": ">=4" } }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -2865,11 +4087,51 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmmirror.com/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmmirror.com/log-symbols/-/log-symbols-4.1.0.tgz", @@ -2932,6 +4194,15 @@ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -2940,6 +4211,19 @@ "node": ">= 0.6" } }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -3007,11 +4291,21 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/mute-stream": { "version": "1.0.0", @@ -3021,6 +4315,12 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -3075,6 +4375,23 @@ "node": ">=6" } }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmmirror.com/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/ora": { "version": "5.4.1", "resolved": "https://registry.npmmirror.com/ora/-/ora-5.4.1.tgz", @@ -3117,6 +4434,42 @@ "node": ">=0.10.0" } }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -3125,6 +4478,24 @@ "node": ">= 0.8" } }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -3170,6 +4541,15 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -3186,6 +4566,48 @@ "node": ">=8.6" } }, + "node_modules/portfinder": { + "version": "1.0.32", + "resolved": "https://registry.npmmirror.com/portfinder/-/portfinder-1.0.32.tgz", + "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", + "dependencies": { + "async": "^2.6.4", + "debug": "^3.2.7", + "mkdirp": "^0.5.6" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.2.5", + "resolved": "https://registry.npmmirror.com/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -3198,6 +4620,15 @@ "node": ">= 0.10" } }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/qs": { "version": "6.11.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", @@ -3212,6 +4643,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -3270,6 +4707,15 @@ "resolve": "bin/resolve" } }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/resolve-pkg-maps": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", @@ -3296,6 +4742,16 @@ "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, "node_modules/rimraf": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.5.tgz", @@ -3375,6 +4831,15 @@ "node": ">=0.12.0" } }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/rxjs": { "version": "7.8.1", "resolved": "https://registry.npmmirror.com/rxjs/-/rxjs-7.8.1.tgz", @@ -3662,6 +5127,15 @@ "node": ">=8" } }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -3706,6 +5180,12 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmmirror.com/through/-/through-2.3.8.tgz", @@ -3731,6 +5211,18 @@ "node": ">=4" } }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -3739,11 +5231,35 @@ "node": ">=0.6" } }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, "node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.6.2.tgz", "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/type-fest": { "version": "0.21.3", "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.21.3.tgz", @@ -3764,6 +5280,20 @@ "node": ">= 0.6" } }, + "node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "dev": true, + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz", @@ -3816,6 +5346,15 @@ "browserslist": ">= 4.21.0" } }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -3903,6 +5442,15 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true, "peer": true + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + } } } } diff --git a/packages/cli/package.json b/packages/cli/package.json index 841b970..c078656 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -8,7 +8,9 @@ }, "scripts": { "test": "echo \"Error: no test specified\" && exit 1", - "dev": "rimraf ./lib && rollup -c rollup.config.dev.js --watch" + "dev": "rimraf ./lib && rollup -c rollup.config.dev.js --watch", + "lint": "eslint ./src --ext .ts --fix", + "format": "prettier --write \"./**/*.{html,vue,ts,js,json,md}\"" }, "type": "module", "author": "", @@ -30,14 +32,17 @@ "@types/qs": "^6.9.14", "@types/semver": "^7.5.8", "@types/serve-static": "^1.15.7", + "@typescript-eslint/parser": "^7.7.0", + "eslint": "^8.46.0", "glob": "^10.3.12", + "prettier": "^3.2.5", "rimraf": "^5.0.5", "rollup": "^4.14.0", "rollup-plugin-esbuild": "^6.1.1", "semver": "^7.6.0" }, "dependencies": { - "@inquirer/prompts": "^4.3.1", + "@inquirer/prompts": "^4.3.3", "@types/express": "^4.17.17", "@types/figlet": "^1.5.8", "chalk": "^5.3.0", @@ -51,4 +56,4 @@ "minimist": "^1.2.8", "portfinder": "^1.0.32" } -} \ No newline at end of file +} diff --git a/packages/cli/rollup.config.default.js b/packages/cli/rollup.config.default.js index c010279..f60ff5e 100644 --- a/packages/cli/rollup.config.default.js +++ b/packages/cli/rollup.config.default.js @@ -1,35 +1,35 @@ -import { defineConfig } from "rollup"; -import commonjs from "@rollup/plugin-commonjs"; -import resolve from "@rollup/plugin-node-resolve"; -import babel from "@rollup/plugin-babel"; -import json from "@rollup/plugin-json"; -import esbuild from "rollup-plugin-esbuild"; -import alias from "@rollup/plugin-alias"; +import { defineConfig } from 'rollup' +import commonjs from '@rollup/plugin-commonjs' +import resolve from '@rollup/plugin-node-resolve' +import babel from '@rollup/plugin-babel' +import json from '@rollup/plugin-json' +import esbuild from 'rollup-plugin-esbuild' +import alias from '@rollup/plugin-alias' const plugins = [ - babel({ babelHelpers: "bundled" }), + babel({ babelHelpers: 'bundled' }), resolve({ - preferBuiltins: true, + preferBuiltins: true }), json(), commonjs(), - esbuild(), -]; + esbuild() +] -const entries = ["src/index.ts"]; +const entries = ['src/index.ts'] export default [ ...entries.map((input) => ({ input, output: [ { - file: input.replace("src/", "lib/").replace(".ts", ".js"), - format: "esm", - }, + file: input.replace('src/', 'lib/').replace('.ts', '.js'), + format: 'esm' + } ], // 处理循环依赖直接外部引入即可 - external: ["readable-stream", "chalk", "semver"], - plugins, - })), -]; + external: ['readable-stream', 'chalk', 'semver'], + plugins + })) +] diff --git a/packages/cli/rollup.config.dev.js b/packages/cli/rollup.config.dev.js index 27f7935..733d410 100644 --- a/packages/cli/rollup.config.dev.js +++ b/packages/cli/rollup.config.dev.js @@ -1,14 +1,14 @@ -import config from "./rollup.config.default.js"; -import replace from "@rollup/plugin-replace"; +import config from './rollup.config.default.js' +import replace from '@rollup/plugin-replace' export default config.map((config) => { config.plugins.push( replace({ values: { - "process.env.NODE_ENV": JSON.stringify("development"), + 'process.env.NODE_ENV': JSON.stringify('development') // 🌸 防止字符串后面有等号然后进行替换 }, - preventAssignment: true, + preventAssignment: true }) - ); - return config; -}); + ) + return config +}) diff --git a/packages/cli/src/config/dependencyConfig.ts b/packages/cli/src/config/dependencyConfig.ts index a7698c9..82a8ca3 100644 --- a/packages/cli/src/config/dependencyConfig.ts +++ b/packages/cli/src/config/dependencyConfig.ts @@ -1,26 +1,26 @@ -import { errorToast, warningToast } from "../utils/errorToast"; -import { isDirectoryExists } from "../utils/fsUtils"; +import { errorToast, warningToast } from '../utils/errorToast' +import { isDirectoryExists } from '../utils/fsUtils' function parseConfig(root: string, depth: number) { const config = { root: root, - depth: depth, - }; + depth: depth + } if (!config.root) { - config.root = process.cwd(); + config.root = process.cwd() } else { - isDirectoryExists(root); + isDirectoryExists(root) } if (config.depth < 0) { - errorToast("depth must be an negative integer"); + errorToast('depth must be an negative integer') } else if (!config.depth) { warningToast( - "\nyour limitDepth does not set! The default settings of depth is 5" - ); - config.depth = 5; + '\nyour limitDepth does not set! The default settings of depth is 5' + ) + config.depth = 5 } - return config; + return config } -export { parseConfig }; +export { parseConfig } diff --git a/packages/cli/src/core/cz/configFile/configFile.ts b/packages/cli/src/core/cz/configFile/configFile.ts index 4cf2f99..8f22e5a 100644 --- a/packages/cli/src/core/cz/configFile/configFile.ts +++ b/packages/cli/src/core/cz/configFile/configFile.ts @@ -1,9 +1,8 @@ -import { posix } from "path"; -import { writeFile } from "../../../utils/fsUtils"; -import { joinPath } from "../../../utils/pathUtils"; +import { isFileExists, writeFile } from '../../../utils/fsUtils' +import { joinPath } from '../../../utils/pathUtils' function WriteCzConfig() { - const filename = ".cz-config.cjs"; + const filename = '.cz-config.cjs' const content = `module.exports={ types: [ { @@ -67,12 +66,12 @@ function WriteCzConfig() { allowCustomScopes: true, allowBreakingChanges: [":sparkles: feat", ":bug: fix"], subjectLimit: 72, - };`; + };` - writeFile(joinPath(process.cwd(), filename), content); + writeFile(joinPath(process.cwd(), filename), content) } function WriteCommitlintConfig() { - const filename = ".commitlintrc.js"; + const filename = '.commitlintrc.js' const content = `export default { extends: ["./node_modules/commitlint-config-gitmoji", "cz"], rules: { @@ -156,7 +155,81 @@ function WriteCommitlintConfig() { ], ], "subject-empty": [2, "never"], - }}`; - writeFile(joinPath(process.cwd(), filename), content); + }}` + writeFile(joinPath(process.cwd(), filename), content) +} +function WriteHuskyConfig() { + const preCommitContent = `#!/usr/bin/env sh + . "$(dirname -- "$0")/_/husky.sh" + npm run lint && npm run format ` + + const isPreCommitExits = + isFileExists('./.husky/_', 'pre-commit') || + isFileExists('./.husky', 'pre-commit') + + if (isPreCommitExits) { + writeFile(joinPath(process.cwd(), '.husky/pre-commit'), preCommitContent) + } else { + writeFile(joinPath(process.cwd(), '.husky/pre-commit'), preCommitContent) + } +} +function WriteEslintConfig() { + const filename = '.eslintrc' + const content = `{ + "root": true, + "parser": "@typescript-eslint/parser", + "plugins": [ + "@typescript-eslint" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/eslint-recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + "no-console": "off" + }, + // set eslint env + "env": { + "node": true + } + } + ` + writeFile(joinPath(process.cwd(), filename), content) +} +function WritePrettierConfig() { + const filename = '.prettierrc.js' + const ignoreFile = '.prettierignore' + const content = ` + export default { + // 一行的字符数,如果超过会进行换行,默认为80 + printWidth: 80, + // 一个tab代表几个空格数,默认为2 + tabWidth: 2, + // 是否使用tab进行缩进,默认为false,表示用空格进行缩减 + useTabs: false, + // 字符串是否使用单引号,默认为false,使用双引号 + singleQuote: true, + // 行位是否使用分号,默认为true + semi: false, + // 是否使用尾逗号,有三个可选值"" + trailingComma: 'none', + // 对象大括号直接是否有空格,默认为true,效果:{ foo: bar } + bracketSpacing: true + } + ` + const ignoreFileContent = ` + .history/ + node_modules + dist +` + writeFile(joinPath(process.cwd(), filename), content) + writeFile(joinPath(process.cwd(), ignoreFile), ignoreFileContent) +} +export { + WriteCommitlintConfig, + WriteCzConfig, + WriteHuskyConfig, + WriteEslintConfig, + WritePrettierConfig } -export { WriteCommitlintConfig, WriteCzConfig }; diff --git a/packages/cli/src/core/cz/denpendencyRules/dependcyDiretory.ts b/packages/cli/src/core/cz/denpendencyRules/dependcyDiretory.ts index 3c5c073..b45b88e 100644 --- a/packages/cli/src/core/cz/denpendencyRules/dependcyDiretory.ts +++ b/packages/cli/src/core/cz/denpendencyRules/dependcyDiretory.ts @@ -1,6 +1,6 @@ export const dependenciesDirectory = [ - "node_modules/*", - "node_modules/@*", - "node_modules/**/node_modules/*", - "node_modules/**/node_modules/@*", -]; + 'node_modules/*', + 'node_modules/@*', + 'node_modules/**/node_modules/*', + 'node_modules/**/node_modules/@*' +] diff --git a/packages/cli/src/core/cz/doctor/doctor.ts b/packages/cli/src/core/cz/doctor/doctor.ts index 8ab6661..685ea96 100644 --- a/packages/cli/src/core/cz/doctor/doctor.ts +++ b/packages/cli/src/core/cz/doctor/doctor.ts @@ -1,63 +1,67 @@ -import { errorToast, warningToast } from "../../../utils/errorToast"; -import { isFileExists } from "../../../utils/fsUtils"; -import inquirer from "inquirer"; -import { execSync } from "child_process"; -import chalk from "chalk"; -const prompt = inquirer.createPromptModule(); +import { errorToast, warningToast } from '../../../utils/errorToast' +import { isFileExists } from '../../../utils/fsUtils' +import { execSync } from 'child_process' +import chalk from 'chalk' class Doctor { runBaseDoctor() { try { - const isPackageJsonExits = isFileExists(process.cwd(), "package.json"); - console.log(chalk.green("\npackage.json ✅")); + isFileExists(process.cwd(), 'package.json') + console.log(chalk.green('\npackage.json ✅')) } catch (error) { - errorToast("❌ No package.json found in your project"); + errorToast('❌ No package.json found in your project') } try { - const isNodeModules = isFileExists(process.cwd(), "node_modules"); - console.log(chalk.green("\nnode_modules ✅")); + isFileExists(process.cwd(), 'node_modules') + console.log(chalk.green('\nnode_modules ✅')) } catch (error) { - errorToast("❌ Did not install the dependencies yet"); + errorToast('❌ Did not install the dependencies yet') } - return Promise; + try { + isFileExists(process.cwd(), 'node_modules') + console.log(chalk.green('\nnode_modules ✅')) + } catch (error) { + errorToast('❌ Did not install the dependencies yet') + } + return Promise } runDependencyManagerDoctor() { - const isYarn = isFileExists(process.cwd(), "yarn.lock"); - const isPnpm = isFileExists(process.cwd(), "pnpm-lock.yaml"); - let packageManager: "npm" | "pnpm" | "yarn" = "npm"; + const isYarn = isFileExists(process.cwd(), 'yarn.lock') + const isPnpm = isFileExists(process.cwd(), 'pnpm-lock.yaml') + let packageManager: 'npm' | 'pnpm' | 'yarn' = 'npm' try { - execSync("npm --version"); - packageManager = "npm"; + execSync('npm --version') + packageManager = 'npm' } catch (error) { errorToast( - "You Package manager is npm , but we do not find npm in your system \n so here we start to using npm manager" - ); - process.exit(); + 'You Package manager is npm , but we do not find npm in your system \n so here we start to using npm manager' + ) + process.exit() } if (isYarn) { try { - execSync("yarn --version"); - packageManager = "yarn"; - console.log(chalk.green("\nyarn ✅\n")); + execSync('yarn --version') + packageManager = 'yarn' + console.log(chalk.green('\nyarn ✅\n')) } catch (error) { warningToast( - "You Package manager is Yarn , but we do not find yarn in your system \n so here we start to using npm manager" - ); - packageManager = "npm"; + 'You Package manager is Yarn , but we do not find yarn in your system \n so here we start to using npm manager' + ) + packageManager = 'npm' } } else if (isPnpm) { try { - execSync("pnpm --version"); - packageManager = "pnpm"; - console.log(chalk.green("\npnpm ✅\n")); + execSync('pnpm --version') + packageManager = 'pnpm' + console.log(chalk.green('\npnpm ✅\n')) } catch (error) { warningToast( - "You Package manager is Pnpm , but we do not find Pnpm in your system \n so here we start to using npm manager" - ); - packageManager = "npm"; + 'You Package manager is Pnpm , but we do not find Pnpm in your system \n so here we start to using npm manager' + ) + packageManager = 'npm' } } - return packageManager; + return packageManager } } -export { Doctor }; +export { Doctor } diff --git a/packages/cli/src/core/cz/packageFile/PackageFile.ts b/packages/cli/src/core/cz/packageFile/PackageFile.ts index 52e30c2..c87985d 100644 --- a/packages/cli/src/core/cz/packageFile/PackageFile.ts +++ b/packages/cli/src/core/cz/packageFile/PackageFile.ts @@ -1,86 +1,118 @@ -import { ChildProcess, spawn, execSync } from "child_process"; -import { PackageJson } from "../../../types/packageType"; -import { isFileExists, writeFile } from "../../../utils/fsUtils"; -import { getDependencies } from "../../../utils/getDependencies"; -import { joinPath } from "../../../utils/pathUtils"; -import { errorToast, warningToast } from "../../../utils/errorToast"; -import inquirer from "inquirer"; -import chalk from "chalk"; -import { WriteCommitlintConfig, WriteCzConfig } from "../configFile/configFile"; -import { Doctor } from "../doctor/doctor"; -const prompt = inquirer.createPromptModule(); +import { spawn } from 'child_process' +import { PackageJson } from '../../../types/packageType' +import { writeFile } from '../../../utils/fsUtils' +import { getDependencies } from '../../../utils/getDependencies' +import { joinPath } from '../../../utils/pathUtils' +import { + WriteCommitlintConfig, + WriteCzConfig, + WriteEslintConfig, + WriteHuskyConfig, + WritePrettierConfig +} from '../configFile/configFile' +import { Doctor } from '../doctor/doctor' class PackageFile { - packageFile: PackageJson; - ShouldInstallDependencies: string[]; - packageManager: "npm" | "pnpm" | "yarn"; - constructor(packageJson: PackageJson) { - this.packageFile = packageJson; - this.ShouldInstallDependencies = []; - this.packageManager = "npm"; + packageFile: PackageJson + ShouldInstallDependencies: string[] + packageManager: 'npm' | 'pnpm' | 'yarn' + useGit: boolean + useEsPre: boolean + constructor(packageJson: PackageJson, useGit: boolean, useEsPre: boolean) { + this.packageFile = packageJson + this.ShouldInstallDependencies = [] + this.packageManager = 'npm' + this.useGit = useGit + this.useEsPre = useEsPre } runDoctor(type: string) { - const doctor = new Doctor(); - if (type === "base") { - doctor.runBaseDoctor(); - } else if (type === "dependency_modules") { - this.packageManager = doctor.runDependencyManagerDoctor(); + const doctor = new Doctor() + if (type === 'base') { + doctor.runBaseDoctor() + } else if (type === 'dependency_modules') { + this.packageManager = doctor.runDependencyManagerDoctor() } } addScript() { + if (this.useGit) { + spawn('git', ['init'], { + cwd: process.cwd(), + stdio: 'inherit' + }) + } + + this.packageFile = { + ...this.packageFile, + type: 'module' + } const writeScript = () => { this.packageFile.scripts = { ...this.packageFile.scripts, - commit: "git add . && ./node_modules/full-featured-cz/standalone.js", - }; + commit: 'git add . && ./node_modules/full-featured-cz/standalone.js' + } + + if (this.useEsPre) { + this.packageFile.scripts = { + ...this.packageFile.scripts, + lint: 'eslint ./src --ext .ts --fix', + format: 'prettier --write "./**/*.{html,vue,ts,js,json,md}"' + } + } writeFile( - joinPath(process.cwd(), "package.json"), + joinPath(process.cwd(), 'package.json'), JSON.stringify(this.packageFile, null, 2) - ); - this.scanDependencies(); - }; - this.runDoctor("base"); - if (this.packageFile.scripts["commit"]) { - prompt({ - type: "confirm", - name: "isCover", - prefix: "", - message: "\nAre you going to cover the commit script you ever written", - default: true, - }).then((res) => { - res.isCover ? writeScript() : ""; - }); - } else { - writeScript(); + ) + this.scanDependencies() } + this.runDoctor('base') + + writeScript() } scanDependencies() { this.ShouldInstallDependencies = getDependencies([ - "full-featured-cz", - "commitlint-config-gitmoji", - "husky", - ]); - + 'full-featured-cz', + 'commitlint-config-gitmoji', + this.useGit ? 'husky' : '', + this.useEsPre ? 'eslint' : '', + this.useEsPre ? '@typescript-eslint/eslint-plugin' : '', + this.useEsPre ? 'prettier' : '', + this.useEsPre ? '@typescript-eslint/parser' : '' + ]) if (this.ShouldInstallDependencies.length === 0) { - this.writeConfig(); + this.writeConfig() } else { - this.writeConfig(); - this.installDependencies(); + this.writeConfig() + this.installDependencies() } } installDependencies() { - this.runDoctor("dependency_modules"); + this.runDoctor('dependency_modules') spawn( this.packageManager, - ["install", ...this.ShouldInstallDependencies, "-D"], + ['install', ...this.ShouldInstallDependencies, '-D'], { cwd: process.cwd(), - stdio: "inherit", + stdio: 'inherit' } - ); + ) } writeConfig() { - WriteCzConfig(); - WriteCommitlintConfig(); + console.log(this.useGit) + + if (this.useGit) { + const installProcess = spawn('npx', ['husky', 'install'], { + cwd: process.cwd(), + stdio: 'inherit' + }) + installProcess.on('close', () => { + WriteHuskyConfig() + }) + } + if (this.useEsPre) { + WriteEslintConfig() + WritePrettierConfig() + } + WriteCzConfig() + WriteCommitlintConfig() } } -export { PackageFile }; +export { PackageFile } diff --git a/packages/cli/src/core/dependencies/Analyzer/analyzer.ts b/packages/cli/src/core/dependencies/Analyzer/analyzer.ts index 4682b88..42a80ec 100644 --- a/packages/cli/src/core/dependencies/Analyzer/analyzer.ts +++ b/packages/cli/src/core/dependencies/Analyzer/analyzer.ts @@ -1,68 +1,68 @@ -import { GraphData } from "../../../types/GraphData"; -import { PackageJson, PackagesSet } from "../../../types/PackageJson"; -import { DependencyGraph } from "../dependencies-graph/dependenciesGraph"; -import { ResolverFactory } from "../factory/factory"; +import { GraphData } from '../../../types/GraphData' +import { PackageJson, PackagesSet } from '../../../types/PackageJson' +import { DependencyGraph } from '../dependencies-graph/dependenciesGraph' +import { ResolverFactory } from '../factory/factory' export function AnalyzerFactory(root: string, depthLimit: number) { // resolve factory - const factory = new ResolverFactory(); - const resolver = factory.getDependenciesGraph(root, depthLimit); - const dependencyGraph = resolver?.resolveDependencies(); - const packages = resolver?.getPackageSetOfPackageJson(); + const factory = new ResolverFactory() + const resolver = factory.getDependenciesGraph(root, depthLimit) + const dependencyGraph = resolver?.resolveDependencies() + const packages = resolver?.getPackageSetOfPackageJson() if (dependencyGraph && packages) { - return new PackageAnalyzer(dependencyGraph, packages); + return new PackageAnalyzer(dependencyGraph, packages) } } export class PackageAnalyzer { - dependencyGraph: DependencyGraph; - packages: PackagesSet; + dependencyGraph: DependencyGraph + packages: PackagesSet constructor( dependencyGraph: DependencyGraph, packages: PackagesSet ) { - this.dependencyGraph = dependencyGraph; - this.packages = packages; + this.dependencyGraph = dependencyGraph + this.packages = packages } // getGraphData() { return { nodes: this.dependencyGraph.exportPackages(), - edges: this.dependencyGraph.exportEdges(), - }; + edges: this.dependencyGraph.exportEdges() + } } // 对导出的图的数据做进一步的统计分析 graphStatistics(data: GraphData): GraphData { - const licenseNum = new Map(); + const licenseNum = new Map() data.nodes.forEach((e) => { - const packageJson = this.packages[e.path]; - if (packageJson.license && typeof packageJson.license === "string") { + const packageJson = this.packages[e.path] + if (packageJson.license && typeof packageJson.license === 'string') { if (licenseNum.get(packageJson.license) === undefined) { - licenseNum.set(packageJson.license, 1); + licenseNum.set(packageJson.license, 1) } else { licenseNum.set( packageJson.license, (licenseNum.get(packageJson.license) as number) + 1 - ); + ) } } - }); - data.licenses = Object.fromEntries(licenseNum); - return data; + }) + data.licenses = Object.fromEntries(licenseNum) + return data } getPackageDependencies(id: number, depth: number) { return this.graphStatistics( this.dependencyGraph.getSpecifiedPackageDependencies(id, depth) - ); + ) } // whyInstalledIt(id: number) { - return this.graphStatistics(this.dependencyGraph.whyInstalledIt(id)); + return this.graphStatistics(this.dependencyGraph.whyInstalledIt(id)) } } diff --git a/packages/cli/src/core/dependencies/dependencies-graph/Graph.ts b/packages/cli/src/core/dependencies/dependencies-graph/Graph.ts index ac77742..87bd45d 100644 --- a/packages/cli/src/core/dependencies/dependencies-graph/Graph.ts +++ b/packages/cli/src/core/dependencies/dependencies-graph/Graph.ts @@ -1,91 +1,91 @@ -import { Queue } from "@datastructures-js/queue"; +import { Queue } from '@datastructures-js/queue' interface Edge { - to: number; - from: number; - info: E; + to: number + from: number + info: E } class Graph { - edges: Array>>; - invEdges: Array>>; + edges: Array>> + invEdges: Array>> constructor(N: number) { - this.edges = Array.from({ length: N }, () => Array.from({ length: 0 })); - this.invEdges = Array.from({ length: N }, () => Array.from({ length: 0 })); + this.edges = Array.from({ length: N }, () => Array.from({ length: 0 })) + this.invEdges = Array.from({ length: N }, () => Array.from({ length: 0 })) } indexCheck(idx: number) { - return idx >= 0 && idx < this.edges.length; + return idx >= 0 && idx < this.edges.length } addEdge(from: number, to: number, info: T) { if (!this.indexCheck(to) || !this.indexCheck(from)) { - return this; + return this } this.edges[from]!.push({ from: from, to: to, - info: info, - }); + info: info + }) this.invEdges[to]!.push({ from: to, to: from, - info: info, - }); - return this; + info: info + }) + return this } // 这一层导出边集以及 索引->包的关系 exportEdges(): Edge[] { - return this.edges.reduce((res, e) => res.concat(e), []); + return this.edges.reduce((res, e) => res.concat(e), []) } // 某个包为什么会被install? // 即找出某个顶点的所有直接、间接前驱 // 在构建图时, 保存了每条边的反向(相当于建了一个无向图), 所以使得这部分异常容易 findPredecessors(id: number) { - const res = this.subGraph(id, -1, true); + const res = this.subGraph(id, -1, true) res.edges = res.edges.map((e) => { return { from: e.to, to: e.from, - info: e.info, - }; - }); - return res; + info: e.info + } + }) + return res } // 获得指定深度的子图 subGraph(root: number, depthLimit: number, inv?: boolean) { - const depth = Array.from({ length: this.edges.length }, () => 0); - let resultEdges: Array> = []; - let resultNodes: { id: number; depth: number }[] = []; + const depth = Array.from({ length: this.edges.length }, () => 0) + let resultEdges: Array> = [] + const resultNodes: { id: number; depth: number }[] = [] const edgesSource: Array>> = - inv === true ? this.invEdges : this.edges; - const queue = new Queue(); - queue.push(root); - depth[root] = 1; + inv === true ? this.invEdges : this.edges + const queue = new Queue() + queue.push(root) + depth[root] = 1 while (!queue.isEmpty()) { - const front = queue.dequeue(); + const front = queue.dequeue() resultNodes.push({ id: front, - depth: depth[front] as number, - }); + depth: depth[front] as number + }) if (depth[front] === depthLimit) { - continue; + continue } - resultEdges = resultEdges.concat(edgesSource[front]!); - for (let e of edgesSource[front]!) { + resultEdges = resultEdges.concat(edgesSource[front]!) + for (const e of edgesSource[front]!) { if (depth[e.to] === 0) { - depth[e.to] = depth[front]! + 1; - queue.push(e.to); + depth[e.to] = depth[front]! + 1 + queue.push(e.to) } } } return { nodes: resultNodes, - edges: resultEdges, - }; + edges: resultEdges + } } } -export { Graph, Edge }; +export { Graph, Edge } diff --git a/packages/cli/src/core/dependencies/dependencies-graph/dependenciesGraph.ts b/packages/cli/src/core/dependencies/dependencies-graph/dependenciesGraph.ts index 838e4ab..a3fb32a 100644 --- a/packages/cli/src/core/dependencies/dependencies-graph/dependenciesGraph.ts +++ b/packages/cli/src/core/dependencies/dependencies-graph/dependenciesGraph.ts @@ -1,24 +1,24 @@ -import { PackageInfo } from "../../../types/PackageJson"; -import { dependenciesType } from "../enums/dependenciesType"; -import Fuse from "fuse.js"; +import { PackageInfo } from '../../../types/PackageJson' +import { dependenciesType } from '../enums/dependenciesType' +import Fuse from 'fuse.js' -import { Graph } from "./Graph"; -import { JsonData } from "../../../types/JsonData"; -import { GraphData } from "../../../types/GraphData"; -export const DEFAULT_DEPTH = 0; -export const DEFAULT_ID = -1; +import { Graph } from './Graph' +import { JsonData } from '../../../types/JsonData' +import { GraphData } from '../../../types/GraphData' +export const DEFAULT_DEPTH = 0 +export const DEFAULT_ID = -1 class DependencyGraph { - graph: Graph; - index: Map; - packages: Array; + graph: Graph + index: Map + packages: Array constructor(packages: Array) { - this.graph = new Graph(packages.length); - this.index = new Map(); + this.graph = new Graph(packages.length) + this.index = new Map() packages.forEach((v, idx) => { - this.index.set(v.path, idx); - v.id = idx; - }); - this.packages = packages; + this.index.set(v.path, idx) + v.id = idx + }) + this.packages = packages } addDependency(pth1: string, pth2: string, type: dependenciesType) { if (this.index.has(pth1) && this.index.has(pth2)) { @@ -26,107 +26,107 @@ class DependencyGraph { this.index.get(pth1) as number, this.index.get(pth2) as number, type - ); + ) } else { - throw new Error("传入的路径错误! by DependencyGraph > addDependency"); + throw new Error('传入的路径错误! by DependencyGraph > addDependency') } } setPackageDepth(pth: string, depth: number): void { if (this.index.has(pth)) { (this.packages[this.index.get(pth) as number] as PackageInfo).depth = - depth; + depth } } exportEdges() { - return this.graph.exportEdges(); + return this.graph.exportEdges() } exportPackages() { - return this.packages.filter((e) => e.depth !== 0); + return this.packages.filter((e) => e.depth !== 0) } exportToJson() { - const res: JsonData = {}; - const edges = this.graph.edges; + const res: JsonData = {} + const edges = this.graph.edges this.packages.forEach((v, idx) => { res[v.path] = { name: v.name, version: v.version, - dependencies: [], - }; - (edges[idx] as Ed[]).forEach((e) => { + dependencies: [] + } + ;(edges[idx] as Ed[]).forEach((e) => { if ( res[v.path] !== undefined && - res[v.path]!["dependencies"] !== undefined + res[v.path]!['dependencies'] !== undefined ) { res[v.path]!.dependencies.push( (this.packages[e.to] as PackageInfo).path - ); + ) } - }); - }); + }) + }) for (let i = 0; i < this.packages.length; i++) { res[this.packages[i]!.path] = { name: this.packages[i]!.name, version: this.packages[i]!.version, - dependencies: [], - }; - for (let edge of edges[i]!) { + dependencies: [] + } + for (const edge of edges[i]!) { res[this.packages[i]!.path]!.dependencies.push( this.packages[edge.to]!.path - ); + ) } } - return res; + return res } // 单独查看某个包的依赖 getSpecifiedPackageDependencies(id: number, depthLimit: number): GraphData { - const { nodes, edges } = this.graph.subGraph(id, depthLimit); + const { nodes, edges } = this.graph.subGraph(id, depthLimit) return { nodes: nodes.map((e) => { - const info: PackageInfo = { ...this.packages[e.id] } as PackageInfo; - info.depth = e.depth; - return info; + const info: PackageInfo = { ...this.packages[e.id] } as PackageInfo + info.depth = e.depth + return info }), edges: edges, - licenses: {}, - }; + licenses: {} + } } // 获得某个包的直接依赖 getDirectDependency(id: number) { return { list: this.graph.edges[id]!.map((e) => { - return this.packages[e.to]; - }), - }; + return this.packages[e.to] + }) + } } // why installed it whyInstalledIt(id: number): GraphData { - const { nodes, edges } = this.graph.findPredecessors(id); + const { nodes, edges } = this.graph.findPredecessors(id) return { nodes: nodes.map((e) => { - const info: PackageInfo = { ...this.packages[e.id] } as PackageInfo; - info.depth = e.depth; - return info; + const info: PackageInfo = { ...this.packages[e.id] } as PackageInfo + info.depth = e.depth + return info }), edges: edges, - licenses: {}, - }; + licenses: {} + } } // 包名查询 queryPackage(searchPattern: string) { const fuseOptions = { - keys: ["name", "version"], - }; - const fuse = new Fuse(this.packages, fuseOptions); + keys: ['name', 'version'] + } + const fuse = new Fuse(this.packages, fuseOptions) return { - data: fuse.search(searchPattern), - }; + data: fuse.search(searchPattern) + } } } -export { DependencyGraph }; +export { DependencyGraph } diff --git a/packages/cli/src/core/dependencies/enums/PackageManager.ts b/packages/cli/src/core/dependencies/enums/PackageManager.ts index b3c538f..9e8a297 100644 --- a/packages/cli/src/core/dependencies/enums/PackageManager.ts +++ b/packages/cli/src/core/dependencies/enums/PackageManager.ts @@ -1,5 +1,5 @@ export const enum PackageManagerType { npm, pnpm, - yarn, + yarn } diff --git a/packages/cli/src/core/dependencies/enums/dependenciesType.ts b/packages/cli/src/core/dependencies/enums/dependenciesType.ts index d8c2669..274f978 100644 --- a/packages/cli/src/core/dependencies/enums/dependenciesType.ts +++ b/packages/cli/src/core/dependencies/enums/dependenciesType.ts @@ -1,7 +1,7 @@ const enum dependenciesType { - Dependencies = "dependencies", - DevDependencies = "devDependencies", - PeerDependencies = "peerDependencies", - OptionalDependencies = "optionalDependencies", + Dependencies = 'dependencies', + DevDependencies = 'devDependencies', + PeerDependencies = 'peerDependencies', + OptionalDependencies = 'optionalDependencies' } -export { dependenciesType }; +export { dependenciesType } diff --git a/packages/cli/src/core/dependencies/factory/detector.ts b/packages/cli/src/core/dependencies/factory/detector.ts index dac48ba..ae0f84e 100644 --- a/packages/cli/src/core/dependencies/factory/detector.ts +++ b/packages/cli/src/core/dependencies/factory/detector.ts @@ -1,25 +1,23 @@ -import { PackageManagerType } from "../enums/PackageManager"; -import { isFileExists } from "../../../utils/fsUtils"; +import { PackageManagerType } from '../enums/PackageManager' +import { isFileExists } from '../../../utils/fsUtils' export abstract class PackageManagerDetector { - abstract detect(root: string): null | PackageManagerType; + abstract detect(root: string): null | PackageManagerType } class NpmDetector extends PackageManagerDetector { detect(root: string): PackageManagerType | null { - return isFileExists(root, "package.json") ? PackageManagerType.npm : null; + return isFileExists(root, 'package.json') ? PackageManagerType.npm : null } } class PnpmDetector extends PackageManagerDetector { detect(root: string): PackageManagerType | null { - return isFileExists(root, "pnpm-lock.yaml") - ? PackageManagerType.pnpm - : null; + return isFileExists(root, 'pnpm-lock.yaml') ? PackageManagerType.pnpm : null } } class YarnDetector extends PackageManagerDetector { detect(root: string): PackageManagerType | null { - return isFileExists(root, "yarn.lock") ? PackageManagerType.yarn : null; + return isFileExists(root, 'yarn.lock') ? PackageManagerType.yarn : null } } -export { NpmDetector, PnpmDetector, YarnDetector }; +export { NpmDetector, PnpmDetector, YarnDetector } diff --git a/packages/cli/src/core/dependencies/factory/factory.ts b/packages/cli/src/core/dependencies/factory/factory.ts index 5da121a..166c792 100644 --- a/packages/cli/src/core/dependencies/factory/factory.ts +++ b/packages/cli/src/core/dependencies/factory/factory.ts @@ -1,36 +1,36 @@ -import { PnpmDetector, NpmDetector, YarnDetector } from "./detector"; -import { PackageManagerType } from "../enums/PackageManager"; -import { errorToast } from "../../../utils/errorToast"; -import { loadNpmModules } from "../loadModules/loadModules"; -import { NpmResolver } from "../resolver/NpmResolver"; -const detectors = [PnpmDetector, NpmDetector, YarnDetector]; +import { PnpmDetector, NpmDetector, YarnDetector } from './detector' +import { PackageManagerType } from '../enums/PackageManager' +import { errorToast } from '../../../utils/errorToast' +import { loadNpmModules } from '../loadModules/loadModules' +import { NpmResolver } from '../resolver/NpmResolver' +const detectors = [PnpmDetector, NpmDetector, YarnDetector] export class ResolverFactory { getDependenciesGraph(root: string, depth: number) { // 判读是什么包管理器 npm pnpm yarn - console.log(root); + console.log(root) - let pkgManager: PackageManagerType | null = null; + let pkgManager: PackageManagerType | null = null detectors.forEach((detector) => { if (pkgManager === null) { - pkgManager = new detector().detect(root); + pkgManager = new detector().detect(root) } - }); - console.log(pkgManager); + }) + console.log(pkgManager) if (pkgManager === null) { - errorToast("No such project found in your directory or file"); - return; + errorToast('No such project found in your directory or file') + return } switch (pkgManager) { case PackageManagerType.npm: - console.log(loadNpmModules(root, depth), depth); - return new NpmResolver(loadNpmModules(root, depth), depth); - break; + console.log(loadNpmModules(root, depth), depth) + return new NpmResolver(loadNpmModules(root, depth), depth) + break case pkgManager === PackageManagerType.pnpm: - return new NpmResolver(loadNpmModules(root, depth), depth); - break; + return new NpmResolver(loadNpmModules(root, depth), depth) + break } // 然后根据管理器类型 使用对应的resolver } diff --git a/packages/cli/src/core/dependencies/glob-rules/npmModulesRules.ts b/packages/cli/src/core/dependencies/glob-rules/npmModulesRules.ts index 333466a..13ca71c 100644 --- a/packages/cli/src/core/dependencies/glob-rules/npmModulesRules.ts +++ b/packages/cli/src/core/dependencies/glob-rules/npmModulesRules.ts @@ -1,7 +1,7 @@ const npmModulesGlobRules = [ - "node_modules/*/package.json", - "node_modules/@*/*/package.json", - "node_modules/**/node_modules/*/package.json", - "node_modules/**/node_modules/@*/*/package.json", -]; -export { npmModulesGlobRules }; + 'node_modules/*/package.json', + 'node_modules/@*/*/package.json', + 'node_modules/**/node_modules/*/package.json', + 'node_modules/**/node_modules/@*/*/package.json' +] +export { npmModulesGlobRules } diff --git a/packages/cli/src/core/dependencies/loadModules/loadModules.ts b/packages/cli/src/core/dependencies/loadModules/loadModules.ts index e786c3c..5870e65 100644 --- a/packages/cli/src/core/dependencies/loadModules/loadModules.ts +++ b/packages/cli/src/core/dependencies/loadModules/loadModules.ts @@ -1,31 +1,23 @@ -import { readJsonFile } from "../../../utils/fsUtils"; -import { joinPath, posixDirname } from "../../../utils/pathUtils"; -import { - Root, - PackageInfo, - PackageJson, - PackagesSet, -} from "../../../types/PackageJson"; -import { globSync } from "glob"; -import { npmModulesGlobRules } from "../glob-rules/npmModulesRules"; +import { readJsonFile } from '../../../utils/fsUtils' +import { joinPath, posixDirname } from '../../../utils/pathUtils' +import { Root, PackageJson, PackagesSet } from '../../../types/PackageJson' +import { globSync } from 'glob' +import { npmModulesGlobRules } from '../glob-rules/npmModulesRules' -export function loadNpmModules( - root: string, - depth: number -): PackagesSet { - let packageSet: PackagesSet = {}; +export function loadNpmModules(root: string): PackagesSet { + const packageSet: PackagesSet = {} - packageSet[Root] = readJsonFile(joinPath(root, "package.json")); + packageSet[Root] = readJsonFile(joinPath(root, 'package.json')) const pathList = globSync([...npmModulesGlobRules], { cwd: root, - posix: true, - }); + posix: true + }) pathList.forEach((path) => { packageSet[posixDirname(path)] = readJsonFile( joinPath(root, path) - ); - }); + ) + }) - return packageSet; + return packageSet } diff --git a/packages/cli/src/core/dependencies/resolver/NpmResolver.ts b/packages/cli/src/core/dependencies/resolver/NpmResolver.ts index f753b09..53850e7 100644 --- a/packages/cli/src/core/dependencies/resolver/NpmResolver.ts +++ b/packages/cli/src/core/dependencies/resolver/NpmResolver.ts @@ -1,29 +1,29 @@ -import { PackageJson, PackagesSet } from "../../../types/PackageJson"; -import { Root } from "../../../types/PackageJson"; -import { Queue } from "@datastructures-js/queue"; -import semver from "semver"; +import { PackageJson, PackagesSet } from '../../../types/PackageJson' +import { Root } from '../../../types/PackageJson' +import { Queue } from '@datastructures-js/queue' +import semver from 'semver' import { DependencyGraph, DEFAULT_DEPTH, - DEFAULT_ID, -} from "../dependencies-graph/dependenciesGraph"; -import { dependenciesType } from "../enums/dependenciesType"; -import { iterateDependenciesMap } from "../../../utils/packageJsonUtils"; + DEFAULT_ID +} from '../dependencies-graph/dependenciesGraph' +import { dependenciesType } from '../enums/dependenciesType' +import { iterateDependenciesMap } from '../../../utils/packageJsonUtils' import { findSpecifiedDirectories, - posixPathJoin, -} from "../../../utils/pathUtils"; + posixPathJoin +} from '../../../utils/pathUtils' class NpmResolver { - packageSet: PackagesSet; - packageGraph: DependencyGraph; - pathList: Array; - depthLimit: number; + packageSet: PackagesSet + packageGraph: DependencyGraph + pathList: Array + depthLimit: number constructor(packageSet: PackagesSet, depth: number) { - this.packageSet = packageSet; - this.packageGraph = this.initDependencyGraph(); - this.depthLimit = depth; - this.pathList = Object.getOwnPropertyNames(packageSet); + this.packageSet = packageSet + this.packageGraph = this.initDependencyGraph() + this.depthLimit = depth + this.pathList = Object.getOwnPropertyNames(packageSet) } initDependencyGraph() { return new DependencyGraph( @@ -33,35 +33,35 @@ class NpmResolver { version: this.packageSet[path].version, path, depth: DEFAULT_DEPTH, - id: DEFAULT_ID, - }; + id: DEFAULT_ID + } }) - ); + ) } resolveDependencies(): DependencyGraph { - const NO_ITE = 0; - for (let pkg of this.pathList) { - this.packageSet[pkg].depth = NO_ITE; + const NO_ITE = 0 + for (const pkg of this.pathList) { + this.packageSet[pkg].depth = NO_ITE } - const packageQueue = new Queue(); + const packageQueue = new Queue() // 放进去start队头 - packageQueue.push(Root); + packageQueue.push(Root) // 将队头的深度设置为1 - this.packageSet[Root].depth = 1; + this.packageSet[Root].depth = 1 // 广度遍历 while (!packageQueue.isEmpty()) { // 删除队头开始遍历队头 - const front = packageQueue.dequeue(); + const front = packageQueue.dequeue() this.packageGraph.setPackageDepth( front, this.packageSet[front].depth as number - ); + ) // 若有深度限制, 达到最大深度时, 不再向下搜索 // 没有深度限制时, 由于depthLimit=-1, 所以同样不会触发退出 if (this.packageSet[front].depth === this.depthLimit) { - continue; + continue } // console.log('front: ', front); this.iteratePackageDependency( @@ -69,20 +69,20 @@ class NpmResolver { (depend: string, type: dependenciesType) => { // console.log('\t', depend) // 给无向图添加边 - this.packageGraph.addDependency(front, depend, type); + this.packageGraph.addDependency(front, depend, type) // 未搜索过时, 加入队列 if (this.packageSet[depend].depth === NO_ITE) { - packageQueue.push(depend); + packageQueue.push(depend) //在这里进行depth的叠加,如果发现没被迭代过,那么就证明是新发现的依赖,也就是当前头节点的字依赖,所以depth+1即可 this.packageSet[depend].depth = - (this.packageSet[front].depth as number) + 1; + (this.packageSet[front].depth as number) + 1 } } - ); + ) } - return this.packageGraph; + return this.packageGraph } iteratePackageDependency( pth: string, @@ -97,32 +97,32 @@ class NpmResolver { iterateDependenciesMap( this.packageSet[pth].dependencies, (name, version) => { - const targetPath = this.matchDependency(pth, name, version); + const targetPath = this.matchDependency(pth, name, version) // dependencies必须匹配成功 if (targetPath === undefined) { - throw new Error(`${pth}的依赖${name}: ${version}未找到`); + throw new Error(`${pth}的依赖${name}: ${version}未找到`) } // 当版本要求为链接形式时, 可能会产生这个异常 // 但不影响包的依赖匹配 if (!semver.satisfies(this.packageSet[targetPath].version, version)) { console.log( - "版本号不匹配?", - "src:", + '版本号不匹配?', + 'src:', pth, - "target:", + 'target:', targetPath, - "目标版本: ", + '目标版本: ', version, - "匹配到的版本: ", + '匹配到的版本: ', this.packageSet[targetPath].version - ); + ) } - callback(targetPath, dependenciesType.Dependencies); + callback(targetPath, dependenciesType.Dependencies) } - ); + ) // 遍历开发依赖 // 开发依赖数量庞大, 且除了根目录的不会被安装 @@ -131,13 +131,13 @@ class NpmResolver { iterateDependenciesMap( this.packageSet[pth].devDependencies, (name, version) => { - const targetPath = this.matchDependency(pth, name, version); + const targetPath = this.matchDependency(pth, name, version) if (targetPath === undefined) { - throw new Error(`${pth}的开发依赖${name}: ${version}未找到`); + throw new Error(`${pth}的开发依赖${name}: ${version}未找到`) } - callback(targetPath, dependenciesType.DevDependencies); + callback(targetPath, dependenciesType.DevDependencies) } - ); + ) } // 遍历可选依赖 @@ -145,63 +145,63 @@ class NpmResolver { iterateDependenciesMap( this.packageSet[pth].optionalDependencies, (name, version) => { - const targetPath = this.matchDependency(pth, name, version); + const targetPath = this.matchDependency(pth, name, version) if (targetPath !== undefined) { - callback(targetPath, dependenciesType.OptionalDependencies); + callback(targetPath, dependenciesType.OptionalDependencies) } } - ); + ) // 遍历同等依赖 iterateDependenciesMap( this.packageSet[pth].peerDependencies, (name, version) => { - const targetPath = this.matchDependency(pth, name, version); + const targetPath = this.matchDependency(pth, name, version) // peerDependencies必须匹配成功 if (targetPath === undefined) { - throw new Error(`${pth}的peer依赖${name}: ${version}未找到`); + throw new Error(`${pth}的peer依赖${name}: ${version}未找到`) } } - ); + ) } matchDependency(pth: string, target: string, version: string): string { - let result: string | undefined = undefined; - const option: string[] = []; + let result: string | undefined = undefined + const option: string[] = [] //为了找到当前包下面是否有 node_modules 文件夹,如果有的话那么 - const possibleDir = findSpecifiedDirectories(pth, "node_modules").concat([ - posixPathJoin(pth, "node_modules"), - ]); - console.log(possibleDir); + const possibleDir = findSpecifiedDirectories(pth, 'node_modules').concat([ + posixPathJoin(pth, 'node_modules') + ]) + console.log(possibleDir) possibleDir.forEach((dir) => { - const targetPath = posixPathJoin(dir, target); + const targetPath = posixPathJoin(dir, target) // 这一段就是匹配包 if (this.packageSet[targetPath] !== undefined) { if ( semver.satisfies(this.packageSet[targetPath].version, version) && result === undefined ) { - result = targetPath; + result = targetPath } - option.push(targetPath); + option.push(targetPath) } - }); + }) if (result !== undefined) { - return result; + return result } if (option.length === 1) { - return option[0]; + return option[0] } throw new Error( - `No dependencies matched, src: ${pth}, target: ${target + "@" + version}` - ); + `No dependencies matched, src: ${pth}, target: ${target + '@' + version}` + ) } getPackageSetOfPackageJson(): PackagesSet { - return this.packageSet; + return this.packageSet } } -export { NpmResolver }; +export { NpmResolver } diff --git a/packages/cli/src/core/dependencies/server/server.ts b/packages/cli/src/core/dependencies/server/server.ts index 1527de8..f7be9fb 100644 --- a/packages/cli/src/core/dependencies/server/server.ts +++ b/packages/cli/src/core/dependencies/server/server.ts @@ -1,143 +1,143 @@ -import express from "express"; -import chalk from "chalk"; -import { PackageAnalyzer } from "../Analyzer/analyzer"; -import portfinder from "portfinder"; -import * as process from "process"; -import open from "open"; +import express from 'express' +import chalk from 'chalk' +import { PackageAnalyzer } from '../Analyzer/analyzer' +import portfinder from 'portfinder' +import * as process from 'process' +import open from 'open' enum NPA_ENV { - Production = "production", - Development = "development", + Production = 'production', + Development = 'development' } -process.env.NPA_ENV = NPA_ENV.Development; +process.env.NPA_ENV = NPA_ENV.Development export function createDataServer(analyzer: PackageAnalyzer, ui: string) { - console.log(ui); + console.log(ui) - const app = express(); - const port = 3000; + const app = express() + const port = 3000 // 跨域, 前端开发时调试使用 - console.log(process.env.NPA_ENV); + console.log(process.env.NPA_ENV) if (process.env.NPA_ENV !== NPA_ENV.Development) { - console.log(NPA_ENV.Development); + console.log(NPA_ENV.Development) } else { - app.use("/", express.static(ui)); + app.use('/', express.static(ui)) } - app.get("/api/nodes", (req: express.Request, res: express.Response) => { - console.log(1223); + app.get('/api/nodes', (req: express.Request, res: express.Response) => { + console.log(1223) - res.json(analyzer.dependencyGraph.exportPackages()); - }); + res.json(analyzer.dependencyGraph.exportPackages()) + }) - app.get("/api/edges", (req: express.Request, res: express.Response) => { - console.log(1223); + app.get('/api/edges', (req: express.Request, res: express.Response) => { + console.log(1223) - res.json(analyzer.dependencyGraph.exportEdges()); - }); + res.json(analyzer.dependencyGraph.exportEdges()) + }) - app.get("/api/data", (req, res) => { - res.json(analyzer.getGraphData()); - }); + app.get('/api/data', (req, res) => { + res.json(analyzer.getGraphData()) + }) - app.get("/api/packageData", (req, res) => { + app.get('/api/packageData', (req, res) => { if (req.query.id === undefined) { - res.status(400).send("Invalid parameters"); + res.status(400).send('Invalid parameters') } - const id: number = parseInt(req.query.id as string); + const id: number = parseInt(req.query.id as string) try { - const pth = analyzer.dependencyGraph.packages[id].path; - const packageJson = analyzer.packages[pth]; + const pth = analyzer.dependencyGraph.packages[id].path + const packageJson = analyzer.packages[pth] const packageData = { path: pth, - packageJson: packageJson, - }; - res.json(packageData); + packageJson: packageJson + } + res.json(packageData) } catch (e) { - console.log(e); - res.status(500).send("Error"); + console.log(e) + res.status(500).send('Error') } - }); + }) - app.get("/api/dependencies", (req, res) => { - const packageId = parseInt(req.query.id as string); - const depth = parseInt(req.query.depth as string); + app.get('/api/dependencies', (req, res) => { + const packageId = parseInt(req.query.id as string) + const depth = parseInt(req.query.depth as string) if (isNaN(packageId) || isNaN(depth)) { - res.status(400).send("Invalid parameters"); - return; + res.status(400).send('Invalid parameters') + return } try { - res.json(analyzer.getPackageDependencies(packageId, depth)); + res.json(analyzer.getPackageDependencies(packageId, depth)) } catch (e) { - console.log(e); - res.status(500).send("Error"); + console.log(e) + res.status(500).send('Error') } - }); + }) - app.get("/api/directDependencyList", (req, res) => { - const packageId = parseInt(req.query.id as string); + app.get('/api/directDependencyList', (req, res) => { + const packageId = parseInt(req.query.id as string) if (isNaN(packageId)) { - res.status(400).send("Invalid parameters"); - return; + res.status(400).send('Invalid parameters') + return } try { - res.json(analyzer.dependencyGraph.getDirectDependency(packageId)); + res.json(analyzer.dependencyGraph.getDirectDependency(packageId)) } catch (e) { - console.log(e); - res.status(500).send("Error"); + console.log(e) + res.status(500).send('Error') } - }); + }) - app.get("/api/whyInstalled", (req, res) => { - const packageId = parseInt(req.query.id as string); + app.get('/api/whyInstalled', (req, res) => { + const packageId = parseInt(req.query.id as string) if (isNaN(packageId)) { - res.status(400).send("Invalid parameters"); - return; + res.status(400).send('Invalid parameters') + return } try { - res.json(analyzer.whyInstalledIt(packageId)); + res.json(analyzer.whyInstalledIt(packageId)) } catch (e) { - console.log(e); - res.status(500).send("Error"); + console.log(e) + res.status(500).send('Error') } - }); + }) - app.get("/api/searchPackage", (req, res) => { - const str = req.query.pattern; - if (typeof str !== "string") { - res.status(400).send("Invalid parameters"); - return; + app.get('/api/searchPackage', (req, res) => { + const str = req.query.pattern + if (typeof str !== 'string') { + res.status(400).send('Invalid parameters') + return } try { - res.json(analyzer.dependencyGraph.queryPackage(str)); + res.json(analyzer.dependencyGraph.queryPackage(str)) } catch (e) { - console.log(e); - res.status(500).send("Error"); + console.log(e) + res.status(500).send('Error') } - }); + }) // 端口被占用时, 递增寻找可用端口 - portfinder.setBasePort(port); + portfinder.setBasePort(port) portfinder .getPortPromise() .then((port) => { app.listen(port, () => { console.log( - ` ${chalk.green("->")} ${chalk.gray("Local: ")} ${chalk.blue.underline(`http://localhost:${port}`)}` - ); + ` ${chalk.green('->')} ${chalk.gray('Local: ')} ${chalk.blue.underline(`http://localhost:${port}`)}` + ) console.log( - ` ${chalk.red("->")} press Ctrl+C to terminate the process` - ); + ` ${chalk.red('->')} press Ctrl+C to terminate the process` + ) if (process.env.NPA_ENV === NPA_ENV.Production) { - open(`http://localhost:${port}`); + open(`http://localhost:${port}`) } - }); + }) }) .catch((err) => { - console.log(err); - }); + console.log(err) + }) } diff --git a/packages/cli/src/core/dependencies/ui/components.d.ts b/packages/cli/src/core/dependencies/ui/components.d.ts index 83ae8b1..4b7f41b 100644 --- a/packages/cli/src/core/dependencies/ui/components.d.ts +++ b/packages/cli/src/core/dependencies/ui/components.d.ts @@ -7,10 +7,10 @@ export {} declare module 'vue' { export interface GlobalComponents { - AInputSearch: typeof import('ant-design-vue/es')['InputSearch'] - AStyleProvider: typeof import('ant-design-vue/es')['StyleProvider'] - RouterLink: typeof import('vue-router')['RouterLink'] - RouterView: typeof import('vue-router')['RouterView'] - Svg: typeof import('./src/components/Svg/index.vue')['default'] + AInputSearch: (typeof import('ant-design-vue/es'))['InputSearch'] + AStyleProvider: (typeof import('ant-design-vue/es'))['StyleProvider'] + RouterLink: (typeof import('vue-router'))['RouterLink'] + RouterView: (typeof import('vue-router'))['RouterView'] + Svg: (typeof import('./src/components/Svg/index.vue'))['default'] } } diff --git a/packages/cli/src/core/dependencies/ui/package.json b/packages/cli/src/core/dependencies/ui/package.json index e6846ad..95350fd 100644 --- a/packages/cli/src/core/dependencies/ui/package.json +++ b/packages/cli/src/core/dependencies/ui/package.json @@ -72,4 +72,4 @@ "cz-customizable": { "config": ".cz-config.js" } -} \ No newline at end of file +} diff --git a/packages/cli/src/core/dependencies/ui/tsconfig.json b/packages/cli/src/core/dependencies/ui/tsconfig.json index 5a36b41..7e68bf0 100644 --- a/packages/cli/src/core/dependencies/ui/tsconfig.json +++ b/packages/cli/src/core/dependencies/ui/tsconfig.json @@ -40,7 +40,7 @@ "src/**/*.tsx", "src/**/*.vue", "src/components.d.ts", - "babel.config.cjs", + "babel.config.cjs" ], "exclude": [], "references": [{ "path": "./tsconfig.node.json" }] diff --git a/packages/cli/src/core/node-template/inquirery/inquirery.ts b/packages/cli/src/core/node-template/inquirery/inquirery.ts index 154a7c2..ca8cf25 100644 --- a/packages/cli/src/core/node-template/inquirery/inquirery.ts +++ b/packages/cli/src/core/node-template/inquirery/inquirery.ts @@ -1,38 +1,37 @@ -import inquirer, { PromptModule } from "inquirer"; -import { questions } from "./questions"; -import { ESdirname, posixPathJoin } from "../../../utils/pathUtils"; +import inquirer, { PromptModule } from 'inquirer' +import { questions } from './questions' +import { ESdirname, posixPathJoin } from '../../../utils/pathUtils' import { ensureDirExtra, readJsonFile, - copyFileEx, - mkDirEx, -} from "../../../utils/fsUtils"; -import { PackageJson } from "../../../types/PackageJson"; + copyFileEx +} from '../../../utils/fsUtils' +import { PackageJson } from '../../../types/PackageJson' class NodeTemplate { - prompt: PromptModule; - targetTemplate: string; - targetPath: string; - root: string; + prompt: PromptModule + targetTemplate: string + targetPath: string + root: string constructor(root: string) { - this.prompt = inquirer.createPromptModule(); - this.root = root; - this.targetTemplate = "node-template"; + this.prompt = inquirer.createPromptModule() + this.root = root + this.targetTemplate = 'node-template' this.targetPath = posixPathJoin( ESdirname(), `../template/${this.targetTemplate}` - ); + ) } runPrompt() { - ensureDirExtra(this.root); + ensureDirExtra(this.root) const packageJson = readJsonFile( - posixPathJoin(this.targetPath, "package.json") - ); + posixPathJoin(this.targetPath, 'package.json') + ) this.prompt(questions).then((res) => { - packageJson.name = res.name; - this.root = posixPathJoin(this.root, res.name); - copyFileEx(this.targetPath, this.root); - }); + packageJson.name = res.name + this.root = posixPathJoin(this.root, res.name) + copyFileEx(this.targetPath, this.root) + }) } } -export { NodeTemplate }; +export { NodeTemplate } diff --git a/packages/cli/src/core/node-template/inquirery/questions.ts b/packages/cli/src/core/node-template/inquirery/questions.ts index 30259a3..b7408ba 100644 --- a/packages/cli/src/core/node-template/inquirery/questions.ts +++ b/packages/cli/src/core/node-template/inquirery/questions.ts @@ -1,9 +1,9 @@ export const questions = [ { - type: "input", - message: "Give your project a name", - name: "name", - prefix: "🌈", - default: "node-template", - }, -]; + type: 'input', + message: 'Give your project a name', + name: 'name', + prefix: '🌈', + default: 'node-template' + } +] diff --git a/packages/cli/src/core/vite-template/copyTemplate.ts b/packages/cli/src/core/vite-template/copyTemplate.ts index 740252a..600f5c4 100644 --- a/packages/cli/src/core/vite-template/copyTemplate.ts +++ b/packages/cli/src/core/vite-template/copyTemplate.ts @@ -1,51 +1,51 @@ -import path from "path"; -import fs from "fs-extra"; +import path from 'path' +import fs from 'fs-extra' -import { readJsonFile } from "../../utils/fsUtils"; -import { PackageJson } from "../../types/PackageJson"; -import { ESdirname } from "../../utils/pathUtils"; +import { readJsonFile } from '../../utils/fsUtils' +import { PackageJson } from '../../types/PackageJson' +import { ESdirname } from '../../utils/pathUtils' // 🌸 生成模版文件 async function init(tarPath: string, temp: string) { - const cwd = process.cwd(); + const cwd = process.cwd() // 🌸 获取目标路径 - const targetDir = tarPath ? tarPath : "./"; - const targetPath = path.join(cwd, targetDir); + const targetDir = tarPath ? tarPath : './' + const targetPath = path.join(cwd, targetDir) // 🌸 获取目标模版 - const tempDir = path.join(ESdirname(), `../template/${temp}`); + const tempDir = path.join(ESdirname(), `../template/${temp}`) // 🌸 确保目标文件夹存在,也就是说如果不存在就创建一个 - await fs.ensureDir(targetPath); + await fs.ensureDir(targetPath) fs.readdir(targetPath, (err, files) => { if (files.length > 0) { - console.log("\n📁 Such directory is not empty!\n"); - throw Error("Such directory is not empty!"); - return; + console.log('\n📁 Such directory is not empty!\n') + throw Error('Such directory is not empty!') + return } - }); + }) // 🌸 获取 const writeFile = (file: string, content?: string) => { - const targetTempPath = path.join(tempDir, file); - const targetFilePath = path.join(targetDir, file); + const targetTempPath = path.join(tempDir, file) + const targetFilePath = path.join(targetDir, file) if (content) { - fs.writeFile(targetFilePath, content); + fs.writeFile(targetFilePath, content) } else { - fs.copy(targetTempPath, targetFilePath); + fs.copy(targetTempPath, targetFilePath) } - }; - let fileArr = await fs.readdir(tempDir); - for (let file of fileArr.filter((item) => item !== "package.json")) { - writeFile(file); + } + const fileArr = await fs.readdir(tempDir) + for (const file of fileArr.filter((item) => item !== 'package.json')) { + writeFile(file) } // 🌸 获取package.json - const pkg = readJsonFile(path.join(tempDir, "package.json")); - pkg.name = path.basename(targetPath); - writeFile("package.json", JSON.stringify(pkg, null, 2)); + const pkg = readJsonFile(path.join(tempDir, 'package.json')) + pkg.name = path.basename(targetPath) + writeFile('package.json', JSON.stringify(pkg, null, 2)) if (targetDir !== cwd) { - console.log(`\n ⬆️ cd ${path.relative(cwd, targetDir)} \n`); + console.log(`\n ⬆️ cd ${path.relative(cwd, targetDir)} \n`) } - console.log(`\n ⬇️ npm install \n`); - console.log(`\n ⬇️ npm run dev \n`); + console.log(`\n ⬇️ npm install \n`) + console.log(`\n ⬇️ npm run dev \n`) } -export default init; +export default init diff --git a/packages/cli/src/core/vite-template/inquirerCommand.ts b/packages/cli/src/core/vite-template/inquirerCommand.ts index b78114b..074d3f6 100644 --- a/packages/cli/src/core/vite-template/inquirerCommand.ts +++ b/packages/cli/src/core/vite-template/inquirerCommand.ts @@ -1,38 +1,38 @@ // 执行 // const argv = require("minimist")(process.argv.slice(2)); // 🌸 定义问题数组 -import init from "./copyTemplate"; -import inquirer from "inquirer"; -const prompt = inquirer.createPromptModule(); -import { questions } from "../../utils/getInquirerData"; +import init from './copyTemplate' +import inquirer from 'inquirer' +const prompt = inquirer.createPromptModule() +import { questions } from '../../utils/getInquirerData' function inquirerCommand() { - let template: string; + let template: string prompt(questions).then((answers) => { - const path = `./${answers.name}`; + const path = `./${answers.name}` const lintStyle = (tempPrefix: string) => { switch (answers.css) { - case "Tailwind CSS": - template = `${tempPrefix}-tailwind`; - break; - case "Scss": - template = `${tempPrefix}-scss`; - break; - case "Less": - template = `${tempPrefix}-less`; - break; + case 'Tailwind CSS': + template = `${tempPrefix}-tailwind` + break + case 'Scss': + template = `${tempPrefix}-scss` + break + case 'Less': + template = `${tempPrefix}-less` + break } if (answers.aliOss) { - template += "-ali"; + template += '-ali' } - }; - if (answers.framework == "Vue+Ts") { - lintStyle("vite-vue3"); + } + if (answers.framework == 'Vue+Ts') { + lintStyle('vite-vue3') } else { - lintStyle("vite-react"); + lintStyle('vite-react') } - init(path, template); - }); + init(path, template) + }) } -export default inquirerCommand; +export default inquirerCommand diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index a9ff5dc..3b117a9 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -1,75 +1,90 @@ #!/usr/bin/env node -import { program } from "commander"; -import inquirerCommand from "./core/vite-template/inquirerCommand"; -import { AnalyzerFactory } from "./core/dependencies/Analyzer/analyzer"; -import { - ESdirname, - getPwdPath, - joinPath, - posixPathJoin, -} from "./utils/pathUtils"; -import { createDataServer } from "./core/dependencies/server/server"; -import { parseConfig } from "./config/dependencyConfig"; -import { readJsonFile } from "./utils/fsUtils"; -import { PackageJson } from "./types/packageType"; -import { PackageFile } from "./core/cz/packageFile/PackageFile"; -import { NodeTemplate } from "./core/node-template/inquirery/inquirery"; -import { Doctor } from "./core/cz/doctor/doctor"; - +import { program } from 'commander' +import inquirerCommand from './core/vite-template/inquirerCommand' +import { AnalyzerFactory } from './core/dependencies/Analyzer/analyzer' +import { ESdirname, joinPath, posixPathJoin } from './utils/pathUtils' +import { createDataServer } from './core/dependencies/server/server' +import { parseConfig } from './config/dependencyConfig' +import { readJsonFile } from './utils/fsUtils' +import { PackageJson } from './types/packageType' +import { PackageFile } from './core/cz/packageFile/PackageFile' +import { NodeTemplate } from './core/node-template/inquirery/inquirery' +import { confirm } from '@inquirer/prompts' +import inquirer from 'inquirer' +const prompt = inquirer.createPromptModule() function createProgram() { program - .name("🌸 Full-Featured 🌸") - .version("🌈 1.3.3", "-v,--version") + .name('🌸 Full-Featured 🌸') + .version('🌈 1.3.3', '-v,--version') .description( - "🚀 A full-featured front-end enterprise-class scaffolding, the frame encapsulates all the functions that \nenterprise-level scaffolding should have, and does not require you to re-encapsulate. There are two \nframework options: Vue and React." - ); + '🚀 A full-featured front-end enterprise-class scaffolding, the frame encapsulates all the functions that \nenterprise-level scaffolding should have, and does not require you to re-encapsulate. There are two \nframework options: Vue and React.' + ) program.option( - "-p,--path ", - "confirm your path to save your template file", - "./{project name}" - ); + '-p,--path ', + 'confirm your path to save your template file', + './{project name}' + ) program - .command("init") - .option("--vite", "Generate a full-featured Vite template") - .option("--node", "Generate a full-featured Node template") - .option("--commit", "Add an out-of-the-box code commit check scheme") - .description("Initialize a full-featured project as prompted") + .command('init') + .option('--vite', 'Generate a full-featured Vite template') + .option('--node', 'Generate a full-featured Node template') + .option('--commit', 'Add an out-of-the-box code commit check scheme') + .description('Initialize a full-featured project as prompted') .action((opt) => { if (opt.vite) { - inquirerCommand(); + inquirerCommand() } else if (opt.node) { - const nodeTemp = new NodeTemplate(process.cwd()); - nodeTemp.runPrompt(); + const nodeTemp = new NodeTemplate(process.cwd()) + nodeTemp.runPrompt() } else if (opt.commit) { - const packageJson = readJsonFile( - joinPath(process.cwd(), "package.json") - ); - const packageFile = new PackageFile(packageJson); - packageFile.addScript(); + prompt([ + { + type: 'confirm', + name: 'isGit', + message: 'Are you going to use git in your project?', + default: true + }, + { + type: 'confirm', + name: 'isEslintAndPrettier', + message: + 'Are you going to use Eslint and Prettier in your project?', + default: true + } + ]).then((res) => { + const packageJson = readJsonFile( + joinPath(process.cwd(), 'package.json') + ) + console.log(res) + + const packageFile = new PackageFile( + packageJson, + res.isGit, + res.isEslintAndPrettier + ) + packageFile.addScript() + }) } - }); + }) program - .command("analyze") - .description("Analyze the dependencies in your project") - .option("--root [root]", "Input your root path") - .option("--depth ", "Input your root path") + .command('analyze') + .description('Analyze the dependencies in your project') + .option('--root [root]', 'Input your root path') + .option('--depth ', 'Input your root path') .action(({ root, path }) => { - const config = parseConfig(root, path); + const config = parseConfig(root, path) // // 🌸 获取当前进程路径 - const dependencyGraph = AnalyzerFactory(config.root, config.depth); + const dependencyGraph = AnalyzerFactory(config.root, config.depth) if (dependencyGraph) { - createDataServer( - dependencyGraph, - posixPathJoin(ESdirname(), "../dist") - ); + createDataServer(dependencyGraph, posixPathJoin(ESdirname(), '../dist')) } - }); + }) - return program; + return program } function main() { - createProgram().parse(); + createProgram().parse() } -export default main; +export default main diff --git a/packages/cli/src/types/GraphData.ts b/packages/cli/src/types/GraphData.ts index 22583b7..4054b98 100644 --- a/packages/cli/src/types/GraphData.ts +++ b/packages/cli/src/types/GraphData.ts @@ -1,18 +1,18 @@ -import { PackageInfo } from "./PackageJson"; -import { dependenciesType } from "../core/dependencies/enums/dependenciesType"; +import { PackageInfo } from './PackageJson' +import { dependenciesType } from '../core/dependencies/enums/dependenciesType' interface Edge { - from: number; - to: number; - info: dependenciesType; + from: number + to: number + info: dependenciesType } interface GraphData { - nodes: PackageInfo[]; - edges: Edge[]; + nodes: PackageInfo[] + edges: Edge[] licenses: { - [name: string]: number; - }; + [name: string]: number + } } -export { GraphData }; +export { GraphData } diff --git a/packages/cli/src/types/JsonData.ts b/packages/cli/src/types/JsonData.ts index 3f141c6..e0bbb8e 100644 --- a/packages/cli/src/types/JsonData.ts +++ b/packages/cli/src/types/JsonData.ts @@ -1,10 +1,9 @@ - // 将依赖关系保存为json时, 数据的结构 // 借鉴了package.lock.json export interface JsonData { - [path: string]: { - name: string, - version: string, - dependencies: string [] - } + [path: string]: { + name: string + version: string + dependencies: string[] + } } diff --git a/packages/cli/src/types/PackageJson.ts b/packages/cli/src/types/PackageJson.ts index f5c97d9..9dc0b70 100644 --- a/packages/cli/src/types/PackageJson.ts +++ b/packages/cli/src/types/PackageJson.ts @@ -1,27 +1,27 @@ -import { dependenciesType } from "../core/dependencies/enums/dependenciesType"; +import { dependenciesType } from '../core/dependencies/enums/dependenciesType' -export const Root: string = ""; -export type PackagesSet = { [path: string]: T }; -type DependenciesMap = { [packageName: string]: string }; +export const Root: string = '' +export type PackagesSet = { [path: string]: T } +type DependenciesMap = { [packageName: string]: string } interface PackageJson { - name: string; - version: string; - workspaces?: string[]; - license?: string | object[]; - [dependenciesType.Dependencies]?: DependenciesMap; - [dependenciesType.DevDependencies]?: DependenciesMap; - [dependenciesType.PeerDependencies]: DependenciesMap; - [dependenciesType.OptionalDependencies]?: DependenciesMap; - bundledDependencies?: string[]; - depth?: number; - dev?: boolean; + name: string + version: string + workspaces?: string[] + license?: string | object[] + [dependenciesType.Dependencies]?: DependenciesMap + [dependenciesType.DevDependencies]?: DependenciesMap + [dependenciesType.PeerDependencies]: DependenciesMap + [dependenciesType.OptionalDependencies]?: DependenciesMap + bundledDependencies?: string[] + depth?: number + dev?: boolean } interface PackageInfo { - name: string; - version: string; - path: string; - depth: number; - id: number; + name: string + version: string + path: string + depth: number + id: number } -export { PackageJson, PackageInfo, DependenciesMap }; +export { PackageJson, PackageInfo, DependenciesMap } diff --git a/packages/cli/src/types/packageType.ts b/packages/cli/src/types/packageType.ts index 2b3af0d..7d2feca 100644 --- a/packages/cli/src/types/packageType.ts +++ b/packages/cli/src/types/packageType.ts @@ -1,9 +1,9 @@ -export type ScriptMap = { [name: string]: string }; +export type ScriptMap = { [name: string]: string } export interface PackageJson { - name: string; - version: string; - script: string; - license?: string | object[]; - scripts: ScriptMap; - husky?: ScriptMap; + name: string + version: string + script: string + license?: string | object[] + scripts: ScriptMap + husky?: ScriptMap } diff --git a/packages/cli/src/utils/errorToast.ts b/packages/cli/src/utils/errorToast.ts index 4180ef3..b8a00ac 100644 --- a/packages/cli/src/utils/errorToast.ts +++ b/packages/cli/src/utils/errorToast.ts @@ -1,16 +1,16 @@ -import chalk from "chalk"; +import chalk from 'chalk' function errorToast(msg: string) { - console.error(chalk.red(`Error:${msg}!`)); - process.exit(); + console.error(chalk.red(`Error:${msg}!`)) + process.exit() } function warningToast(msg: string) { - console.log(chalk.yellow(`Warning:${msg}!`)); + console.log(chalk.yellow(`Warning:${msg}!`)) } function successToast(msg: string) { - console.log(chalk.green(`Warning:${msg}!`)); + console.log(chalk.green(`Warning:${msg}!`)) } -export { errorToast, warningToast, successToast }; +export { errorToast, warningToast, successToast } diff --git a/packages/cli/src/utils/fsUtils.ts b/packages/cli/src/utils/fsUtils.ts index 9ceaf3d..5208148 100644 --- a/packages/cli/src/utils/fsUtils.ts +++ b/packages/cli/src/utils/fsUtils.ts @@ -1,51 +1,54 @@ -import fs from "fs"; -import { errorToast, successToast } from "./errorToast"; -import fsEx from "fs-extra"; +import fs from 'fs' +import { errorToast, successToast } from './errorToast' +import fsEx from 'fs-extra' function ensureDirExtra(path: string) { try { - fsEx.ensureDir(path); + fsEx.ensureDir(path) } catch (error) { - errorToast("No such file ro directory found"); - process.exit(); + errorToast('No such file ro directory found') + process.exit() } } function isFileExists(root: string, PackageManager: string) { try { - const filePath = `${root}/${PackageManager}`; - fs.accessSync(filePath, fs.constants.F_OK); - return true; + const filePath = `${root}/${PackageManager}` + fs.accessSync(filePath, fs.constants.F_OK) + return true } catch (error) { - return false; + return false } } function isDirectoryExists(pth: string) { try { - const isExists = fs.existsSync(pth); + const isExists = fs.existsSync(pth) if (!isExists) { - errorToast("such directory does not exists"); + errorToast('such directory does not exists') } - return true; + return true } catch (error) { - return false; + return false } } function writeFile(path: string, data: string) { try { - fs.writeFile(path, data, () => {}); - successToast("Write file success!"); - } catch (error) {} + fs.writeFile(path, data, () => {}) + successToast('Write file success!') + } catch (error) { + errorToast('failed to write') + process.exit() + } } function readJsonFile(root: string) { - const data = fs.readFileSync(root).toString(); - return JSON.parse(data) as T; + const data = fs.readFileSync(root).toString() + return JSON.parse(data) as T } function copyFileEx(temp: string, target: string) { - fsEx.copy(temp, target); + fsEx.copy(temp, target) } function mkDirEx(path: string) { - fsEx.mkdir(path); + fsEx.mkdir(path) } export { mkDirEx, @@ -54,5 +57,5 @@ export { isDirectoryExists, writeFile, ensureDirExtra, - copyFileEx, -}; + copyFileEx +} diff --git a/packages/cli/src/utils/getDependencies.ts b/packages/cli/src/utils/getDependencies.ts index 0e827d3..c081d3f 100644 --- a/packages/cli/src/utils/getDependencies.ts +++ b/packages/cli/src/utils/getDependencies.ts @@ -1,22 +1,27 @@ -import { globSync } from "glob"; -import { dependenciesDirectory } from "../core/cz/denpendencyRules/dependcyDiretory"; -import { posixGetBasename } from "./pathUtils"; +import { globSync } from 'glob' +import { dependenciesDirectory } from '../core/cz/denpendencyRules/dependcyDiretory' +import { posixGetBasename } from './pathUtils' function getDependencies(arr: string[]) { - let dependencies: string[] = []; + const dependencies: string[] = [] + dependenciesDirectory.forEach((rule) => { globSync(rule).forEach((path) => { - dependencies.push(posixGetBasename(path)); - }); - }); - const filterDependencies = arr.filter((depend) => { - let flag: Boolean = true; - dependencies.forEach((item) => { - if (item === depend) { - flag = false; - } - }); - return flag; - }); - return filterDependencies; + dependencies.push(posixGetBasename(path)) + }) + }) + if (dependencies.length == 0) { + return arr + } else { + const filterDependencies = arr.filter((depend) => { + let flag: boolean = true + dependencies.forEach((item) => { + if (item === depend) { + flag = false + } + }) + return flag + }) + return filterDependencies + } } -export { getDependencies }; +export { getDependencies } diff --git a/packages/cli/src/utils/getInquirerData.ts b/packages/cli/src/utils/getInquirerData.ts index 28cc900..b2a3728 100644 --- a/packages/cli/src/utils/getInquirerData.ts +++ b/packages/cli/src/utils/getInquirerData.ts @@ -1,33 +1,33 @@ export const questions = [ { - type: "input", - message: "Give your project a name", - name: "name", - prefix: "🌈", - default: "full-featured", + type: 'input', + message: 'Give your project a name', + name: 'name', + prefix: '🌈', + default: 'full-featured' }, { - type: "list", - name: "framework", - message: "Which framework do you want to use?", - prefix: "🌈", - choices: ["React+Tsx", "Vue+Ts"], - default: "Vue+Ts", + type: 'list', + name: 'framework', + message: 'Which framework do you want to use?', + prefix: '🌈', + choices: ['React+Tsx', 'Vue+Ts'], + default: 'Vue+Ts' }, { - type: "list", - name: "css", - prefix: "🌈", - message: "Select the CSS preprocessor you want", - choices: ["Tailwind CSS", "Scss", "Less"], - default: "Tailwind CSS", + type: 'list', + name: 'css', + prefix: '🌈', + message: 'Select the CSS preprocessor you want', + choices: ['Tailwind CSS', 'Scss', 'Less'], + default: 'Tailwind CSS' }, { - type: "confirm", - name: "aliOss", - prefix: "🌈", + type: 'confirm', + name: 'aliOss', + prefix: '🌈', message: - "Specifies whether to use the file upload function encapsulated by Alibaba Cloud OSS", - default: true, - }, -]; + 'Specifies whether to use the file upload function encapsulated by Alibaba Cloud OSS', + default: true + } +] diff --git a/packages/cli/src/utils/measureTime.ts b/packages/cli/src/utils/measureTime.ts index 85df88c..87f5224 100644 --- a/packages/cli/src/utils/measureTime.ts +++ b/packages/cli/src/utils/measureTime.ts @@ -1,9 +1,9 @@ -import hirestime from "hirestime"; +import hirestime from 'hirestime' export function measureExecutionTime( run: () => T, callback: (time: number, ret?: T) => void ) { - const getElapsed = hirestime(); - const ret = run(); - callback(getElapsed(), ret); + const getElapsed = hirestime() + const ret = run() + callback(getElapsed(), ret) } diff --git a/packages/cli/src/utils/packageJsonUtils.ts b/packages/cli/src/utils/packageJsonUtils.ts index bade75c..a2845b2 100644 --- a/packages/cli/src/utils/packageJsonUtils.ts +++ b/packages/cli/src/utils/packageJsonUtils.ts @@ -1,15 +1,15 @@ // 遍历包的一种依赖 // 产生(包名, 版本)为参数的回调 -import { DependenciesMap, PackageJson } from "../types/PackageJson"; +import { DependenciesMap, PackageJson } from '../types/PackageJson' -import { dependenciesType } from "../core/dependencies/enums/dependenciesType"; +import { dependenciesType } from '../core/dependencies/enums/dependenciesType' export function iterateDependenciesMap( dependencies: DependenciesMap | undefined, callback: (name: string, version: string) => void ): void { if (dependencies === undefined) { - return; + return } for (const packageName of Object.getOwnPropertyNames(dependencies)) { // 版本号有很多格式, 其中semver只能解析正常的版本号 @@ -18,12 +18,12 @@ export function iterateDependenciesMap( // 详见(https://docs.npmjs.com/cli/v8/configuring-npm/package-json?v=true#dependencies) // 对于特殊格式, 实际的依赖可能需要解析才能得到, 如A: npm:B@^1.0.0, 存储的目录以及引用时看似是A包, 但其实真正安装使用的是B包 // 是否需要去解析? 目前的做法是, npm链接可以准确的得到包名和版本, 可以解析一下正确, 免得检查报错 - const version = dependencies[packageName]; - if (version.startsWith("npm:")) { - const split = version.split("@"); - callback(packageName, split[1]); + const version = dependencies[packageName] + if (version.startsWith('npm:')) { + const split = version.split('@') + callback(packageName, split[1]) } else { - callback(packageName, version); + callback(packageName, version) } } } @@ -36,35 +36,35 @@ export function addDependency( type: dependenciesType ) { if (packageJson[type] === undefined) { - packageJson[type] = {}; + packageJson[type] = {} } - (packageJson[type] as DependenciesMap)[pkgName] = pkgVersion; + (packageJson[type] as DependenciesMap)[pkgName] = pkgVersion } // export function getDependencyMap( packageJson: PackageJson ): Map { - const result = new Map(); + const result = new Map() if (packageJson[dependenciesType.Dependencies] !== undefined) { Object.getOwnPropertyNames( packageJson[dependenciesType.Dependencies] - ).forEach((e) => result.set(e, dependenciesType.Dependencies)); + ).forEach((e) => result.set(e, dependenciesType.Dependencies)) } if (packageJson[dependenciesType.DevDependencies] !== undefined) { Object.getOwnPropertyNames( packageJson[dependenciesType.DevDependencies] - ).forEach((e) => result.set(e, dependenciesType.DevDependencies)); + ).forEach((e) => result.set(e, dependenciesType.DevDependencies)) } if (packageJson[dependenciesType.OptionalDependencies] !== undefined) { Object.getOwnPropertyNames( packageJson[dependenciesType.OptionalDependencies] - ).forEach((e) => result.set(e, dependenciesType.OptionalDependencies)); + ).forEach((e) => result.set(e, dependenciesType.OptionalDependencies)) } if (packageJson[dependenciesType.PeerDependencies] !== undefined) { Object.getOwnPropertyNames( packageJson[dependenciesType.PeerDependencies] - ).forEach((e) => result.set(e, dependenciesType.PeerDependencies)); + ).forEach((e) => result.set(e, dependenciesType.PeerDependencies)) } - return result; + return result } diff --git a/packages/cli/src/utils/pathUtils.ts b/packages/cli/src/utils/pathUtils.ts index 0b38644..386b921 100644 --- a/packages/cli/src/utils/pathUtils.ts +++ b/packages/cli/src/utils/pathUtils.ts @@ -1,42 +1,42 @@ -import path from "path"; -import { fileURLToPath } from "url"; +import path from 'path' +import { fileURLToPath } from 'url' function getPwdPath() { - return process.cwd(); + return process.cwd() } function posixGetBasename(pth: string): string { - return path.posix.basename(pth); + return path.posix.basename(pth) } function joinPath(...filepath: string[]) { - return path.join(...filepath); + return path.join(...filepath) } function posixDirname(filepath: string) { - return path.posix.dirname(filepath); + return path.posix.dirname(filepath) } function splitPosixPath(pth: string) { - return pth.split(path.posix.sep); + return pth.split(path.posix.sep) } function posixPathJoin(...pth: string[]) { - return path.posix.join(...pth); + return path.posix.join(...pth) } function findSpecifiedDirectories(pth: string, target: string): string[] { - const dirs = splitPosixPath(pth); - const res: string[] = []; - let parent = ""; + const dirs = splitPosixPath(pth) + const res: string[] = [] + let parent = '' dirs.forEach((dir) => { - parent = posixPathJoin(parent, dir); + parent = posixPathJoin(parent, dir) if (dir === target) { - res.push(parent); + res.push(parent) } - }); - console.log(res); - return res; + }) + console.log(res) + return res } function ESdirname() { - const __filenameNew = fileURLToPath(import.meta.url); + const __filenameNew = fileURLToPath(import.meta.url) - return path.dirname(__filenameNew); + return path.dirname(__filenameNew) } export { @@ -47,5 +47,5 @@ export { posixPathJoin, splitPosixPath, ESdirname, - posixGetBasename, -}; + posixGetBasename +} diff --git a/packages/cli/template/node-template/.commitlintrc.js b/packages/cli/template/node-template/.commitlintrc.js index 3010f3c..43fd938 100644 --- a/packages/cli/template/node-template/.commitlintrc.js +++ b/packages/cli/template/node-template/.commitlintrc.js @@ -1,84 +1,85 @@ export default { - extends: ["./node_modules/commitlint-config-gitmoji", "cz"], - rules: { - "type-empty": [ - 2, - "never", - [ - ":art:", - ":newspaper:", - ":pencil:", - ":memo:", - ":zap:", - ":fire:", - ":books:", - ":bug:", - ":ambulance:", - ":penguin:", - ":apple:", - ":checkered_flag:", - ":robot:", - ":green_ale:", - ":tractor:", - ":recycle:", - ":white_check_mark:", - ":microscope:", - ":green_heart:", - ":lock:", - ":arrow_up:", - ":arrow_down:", - ":fast_forward:", - ":rewind:", - ":rotating_light:", - ":lipstick:", - ":wheelchair:", - ":globe_with_meridians:", - ":construction:", - ":gem:", - ":bookmark:", - ":tada:", - ":loud_sound:", - ":mute:", - ":sparkles:", - ":speech_balloon:", - ":bulb:", - ":construction_worker:", - ":chart_with_upwards_trend:", - ":ribbon:", - ":rocket:", - ":heavy_minus_sign:", - ":heavy_plus_sign:", - ":wrench:", - ":hankey:", - ":leaves:", - ":bank:", - ":whale:", - ":twisted_rightwards_arrows:", - ":pushpin:", - ":busts_in_silhouette:", - ":children_crossing:", - ":iphone:", - ":clown_face:", - ":ok_hand:", - ":boom:", - ":bento:", - ":pencil2:", - ":package:", - ":alien:", - ":truck:", - ":age_facing_up:", - ":busts_in_silhouette:", - ":card_file_box:", - ":loud-sound:", - ":mute:", - ":egg:", - ":see-no-evil:", - ":camera-flash:", - ":alembic:", - ":mag:", - ":wheel-of-dharma:", - ":label:", - ], - ], - "subject-empty": [2, "never"], - }} \ No newline at end of file + extends: ['./node_modules/commitlint-config-gitmoji', 'cz'], + rules: { + 'type-empty': [ + 2, + 'never', + [ + ':art:', + ':newspaper:', + ':pencil:', + ':memo:', + ':zap:', + ':fire:', + ':books:', + ':bug:', + ':ambulance:', + ':penguin:', + ':apple:', + ':checkered_flag:', + ':robot:', + ':green_ale:', + ':tractor:', + ':recycle:', + ':white_check_mark:', + ':microscope:', + ':green_heart:', + ':lock:', + ':arrow_up:', + ':arrow_down:', + ':fast_forward:', + ':rewind:', + ':rotating_light:', + ':lipstick:', + ':wheelchair:', + ':globe_with_meridians:', + ':construction:', + ':gem:', + ':bookmark:', + ':tada:', + ':loud_sound:', + ':mute:', + ':sparkles:', + ':speech_balloon:', + ':bulb:', + ':construction_worker:', + ':chart_with_upwards_trend:', + ':ribbon:', + ':rocket:', + ':heavy_minus_sign:', + ':heavy_plus_sign:', + ':wrench:', + ':hankey:', + ':leaves:', + ':bank:', + ':whale:', + ':twisted_rightwards_arrows:', + ':pushpin:', + ':busts_in_silhouette:', + ':children_crossing:', + ':iphone:', + ':clown_face:', + ':ok_hand:', + ':boom:', + ':bento:', + ':pencil2:', + ':package:', + ':alien:', + ':truck:', + ':age_facing_up:', + ':busts_in_silhouette:', + ':card_file_box:', + ':loud-sound:', + ':mute:', + ':egg:', + ':see-no-evil:', + ':camera-flash:', + ':alembic:', + ':mag:', + ':wheel-of-dharma:', + ':label:' + ] + ], + 'subject-empty': [2, 'never'] + } +} diff --git a/packages/cli/template/node-template/.eslintrc b/packages/cli/template/node-template/.eslintrc new file mode 100644 index 0000000..8b5a1c8 --- /dev/null +++ b/packages/cli/template/node-template/.eslintrc @@ -0,0 +1,19 @@ +{ + "root": true, + "parser": "@typescript-eslint/parser", + "plugins": [ + "@typescript-eslint" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/eslint-recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + "no-console": "off" + }, + // set eslint env + "env": { + "node": true + } +} diff --git a/packages/cli/template/node-template/.prettierrc.js b/packages/cli/template/node-template/.prettierrc.js new file mode 100644 index 0000000..3783816 --- /dev/null +++ b/packages/cli/template/node-template/.prettierrc.js @@ -0,0 +1,17 @@ +export default { + // 一行的字符数,如果超过会进行换行,默认为80 + printWidth: 80, + // 一个tab代表几个空格数,默认为2 + tabWidth: 2, + // 是否使用tab进行缩进,默认为false,表示用空格进行缩减 + useTabs: false, + // 字符串是否使用单引号,默认为false,使用双引号 + singleQuote: true, + // 行位是否使用分号,默认为true + semi: false, + + // 是否使用尾逗号,有三个可选值"" + trailingComma: 'none', + // 对象大括号直接是否有空格,默认为true,效果:{ foo: bar } + bracketSpacing: true +} diff --git a/packages/cli/template/node-template/bin/main.js b/packages/cli/template/node-template/bin/main.js index f08a326..9198861 100644 --- a/packages/cli/template/node-template/bin/main.js +++ b/packages/cli/template/node-template/bin/main.js @@ -1,2 +1,2 @@ -import { main } from "../lib/index.js"; -main(); +import { main } from '../lib/index.js' +main() diff --git a/packages/cli/template/node-template/index.ts b/packages/cli/template/node-template/index.ts index b762c2e..ecdf0da 100644 --- a/packages/cli/template/node-template/index.ts +++ b/packages/cli/template/node-template/index.ts @@ -1,6 +1,6 @@ -import chalk from "chalk"; +import chalk from 'chalk' function main() { - console.log(chalk.red("Hello Full-Featured")); + console.log(chalk.red('Hello Full-Featured')) } -export { main }; +export { main } diff --git a/packages/cli/template/node-template/package.json b/packages/cli/template/node-template/package.json index c99077c..cde02e1 100644 --- a/packages/cli/template/node-template/package.json +++ b/packages/cli/template/node-template/package.json @@ -20,9 +20,13 @@ "@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-replace": "^5.0.5", "@rollup/plugin-terser": "^0.4.4", + "@typescript-eslint/eslint-plugin": "^7.7.0", + "@typescript-eslint/parser": "^7.7.0", "commitlint-config-gitmoji": "^2.3.1", + "eslint": "^9.0.0", "full-featured-cz": "^0.0.1-development", "husky": "^9.0.11", + "prettier": "^3.2.5", "rollup": "^4.14.0", "rollup-plugin-esbuild": "^6.1.1", "typescript": "^5.4.5" @@ -30,4 +34,4 @@ "dependencies": { "chalk": "^5.3.0" } -} \ No newline at end of file +} diff --git a/packages/cli/template/node-template/rollup.config.default.js b/packages/cli/template/node-template/rollup.config.default.js index e6207a6..43f90fa 100644 --- a/packages/cli/template/node-template/rollup.config.default.js +++ b/packages/cli/template/node-template/rollup.config.default.js @@ -1,28 +1,28 @@ -import { defineConfig } from "rollup"; -import resolver from "@rollup/plugin-node-resolve"; -import commonjs from "@rollup/plugin-commonjs"; -import json from "@rollup/plugin-json"; -import terser from "@rollup/plugin-terser"; -import esbuild from "rollup-plugin-esbuild"; -const input = ["index.ts"]; +import { defineConfig } from 'rollup' +import resolver from '@rollup/plugin-node-resolve' +import commonjs from '@rollup/plugin-commonjs' +import json from '@rollup/plugin-json' +import terser from '@rollup/plugin-terser' +import esbuild from 'rollup-plugin-esbuild' +const input = ['index.ts'] const plugins = [ resolver({ - preferBuiltins: true, + preferBuiltins: true }), commonjs(), json(), terser(), - esbuild(), -]; + esbuild() +] const config = [ ...input.map((input) => ({ input, output: { - file: input.replace("src/", "lib/").replace(".ts", ".js"), - format: "esm", + file: input.replace('src/', 'lib/').replace('.ts', '.js'), + format: 'esm' }, plugins, - external: ["chalk"], - })), -]; -export default config; + external: ['chalk'] + })) +] +export default config diff --git a/packages/cli/template/node-template/rollup.config.dev.js b/packages/cli/template/node-template/rollup.config.dev.js index fdc5b57..5556566 100644 --- a/packages/cli/template/node-template/rollup.config.dev.js +++ b/packages/cli/template/node-template/rollup.config.dev.js @@ -1,18 +1,18 @@ -import config from "./rollup.config.default.js"; -import replace from "@rollup/plugin-replace"; +import config from './rollup.config.default.js' +import replace from '@rollup/plugin-replace' export const devConfig = () => { config.map((conf) => { conf.plugins.push( replace({ values: { - "process.env.NODE_ENV": JSON.stringify("development"), + 'process.env.NODE_ENV': JSON.stringify('development') // 🌸 防止字符串后面有等号然后进行替换 }, - preventAssignment: true, + preventAssignment: true }) - ); - }); - return config; -}; + ) + }) + return config +} -export default devConfig; +export default devConfig diff --git a/packages/cli/template/node-template/rollup.config.prod.js b/packages/cli/template/node-template/rollup.config.prod.js index 15008a8..9401a48 100644 --- a/packages/cli/template/node-template/rollup.config.prod.js +++ b/packages/cli/template/node-template/rollup.config.prod.js @@ -1,18 +1,18 @@ -import config from "./rollup.config.default.js"; -import replace from "@rollup/plugin-replace"; +import config from './rollup.config.default.js' +import replace from '@rollup/plugin-replace' export const devConfig = () => { config.map((conf) => { conf.plugins.push( replace({ values: { - "process.env.NODE_ENV": JSON.stringify("production"), + 'process.env.NODE_ENV': JSON.stringify('production') // 🌸 防止字符串后面有等号然后进行替换 }, - preventAssignment: true, + preventAssignment: true }) - ); - }); - return config; -}; + ) + }) + return config +} -export default devConfig; +export default devConfig diff --git a/packages/cli/template/node-template/tsconfig.json b/packages/cli/template/node-template/tsconfig.json index ff44813..bb2f7f6 100644 --- a/packages/cli/template/node-template/tsconfig.json +++ b/packages/cli/template/node-template/tsconfig.json @@ -1,8 +1,7 @@ { - "compilerOptions": { /* Visit https://aka.ms/tsconfig to read more about this file */ - + /* Projects */ // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ @@ -12,7 +11,7 @@ // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ /* Language and Environment */ - "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + "target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ // "jsx": "preserve", /* Specify what JSX code is generated. */ // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ @@ -26,7 +25,7 @@ // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ /* Modules */ - "module": "commonjs", /* Specify what module code is generated. */ + "module": "commonjs" /* Specify what module code is generated. */, // "rootDir": "./", /* Specify the root folder within your source files. */ // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ @@ -78,12 +77,12 @@ // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, /* Type Checking */ - "strict": true, /* Enable all strict type-checking options. */ + "strict": true /* Enable all strict type-checking options. */, // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ @@ -105,6 +104,6 @@ /* Completeness */ // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ } } diff --git a/packages/cli/template/vite-react-tailwind-ali/.commitlintrc.js b/packages/cli/template/vite-react-tailwind-ali/.commitlintrc.js index 3010f3c..43fd938 100644 --- a/packages/cli/template/vite-react-tailwind-ali/.commitlintrc.js +++ b/packages/cli/template/vite-react-tailwind-ali/.commitlintrc.js @@ -1,84 +1,85 @@ export default { - extends: ["./node_modules/commitlint-config-gitmoji", "cz"], - rules: { - "type-empty": [ - 2, - "never", - [ - ":art:", - ":newspaper:", - ":pencil:", - ":memo:", - ":zap:", - ":fire:", - ":books:", - ":bug:", - ":ambulance:", - ":penguin:", - ":apple:", - ":checkered_flag:", - ":robot:", - ":green_ale:", - ":tractor:", - ":recycle:", - ":white_check_mark:", - ":microscope:", - ":green_heart:", - ":lock:", - ":arrow_up:", - ":arrow_down:", - ":fast_forward:", - ":rewind:", - ":rotating_light:", - ":lipstick:", - ":wheelchair:", - ":globe_with_meridians:", - ":construction:", - ":gem:", - ":bookmark:", - ":tada:", - ":loud_sound:", - ":mute:", - ":sparkles:", - ":speech_balloon:", - ":bulb:", - ":construction_worker:", - ":chart_with_upwards_trend:", - ":ribbon:", - ":rocket:", - ":heavy_minus_sign:", - ":heavy_plus_sign:", - ":wrench:", - ":hankey:", - ":leaves:", - ":bank:", - ":whale:", - ":twisted_rightwards_arrows:", - ":pushpin:", - ":busts_in_silhouette:", - ":children_crossing:", - ":iphone:", - ":clown_face:", - ":ok_hand:", - ":boom:", - ":bento:", - ":pencil2:", - ":package:", - ":alien:", - ":truck:", - ":age_facing_up:", - ":busts_in_silhouette:", - ":card_file_box:", - ":loud-sound:", - ":mute:", - ":egg:", - ":see-no-evil:", - ":camera-flash:", - ":alembic:", - ":mag:", - ":wheel-of-dharma:", - ":label:", - ], - ], - "subject-empty": [2, "never"], - }} \ No newline at end of file + extends: ['./node_modules/commitlint-config-gitmoji', 'cz'], + rules: { + 'type-empty': [ + 2, + 'never', + [ + ':art:', + ':newspaper:', + ':pencil:', + ':memo:', + ':zap:', + ':fire:', + ':books:', + ':bug:', + ':ambulance:', + ':penguin:', + ':apple:', + ':checkered_flag:', + ':robot:', + ':green_ale:', + ':tractor:', + ':recycle:', + ':white_check_mark:', + ':microscope:', + ':green_heart:', + ':lock:', + ':arrow_up:', + ':arrow_down:', + ':fast_forward:', + ':rewind:', + ':rotating_light:', + ':lipstick:', + ':wheelchair:', + ':globe_with_meridians:', + ':construction:', + ':gem:', + ':bookmark:', + ':tada:', + ':loud_sound:', + ':mute:', + ':sparkles:', + ':speech_balloon:', + ':bulb:', + ':construction_worker:', + ':chart_with_upwards_trend:', + ':ribbon:', + ':rocket:', + ':heavy_minus_sign:', + ':heavy_plus_sign:', + ':wrench:', + ':hankey:', + ':leaves:', + ':bank:', + ':whale:', + ':twisted_rightwards_arrows:', + ':pushpin:', + ':busts_in_silhouette:', + ':children_crossing:', + ':iphone:', + ':clown_face:', + ':ok_hand:', + ':boom:', + ':bento:', + ':pencil2:', + ':package:', + ':alien:', + ':truck:', + ':age_facing_up:', + ':busts_in_silhouette:', + ':card_file_box:', + ':loud-sound:', + ':mute:', + ':egg:', + ':see-no-evil:', + ':camera-flash:', + ':alembic:', + ':mag:', + ':wheel-of-dharma:', + ':label:' + ] + ], + 'subject-empty': [2, 'never'] + } +} diff --git a/packages/cli/template/vite-react-tailwind-ali/README.md b/packages/cli/template/vite-react-tailwind-ali/README.md index 0d6babe..3c7e321 100644 --- a/packages/cli/template/vite-react-tailwind-ali/README.md +++ b/packages/cli/template/vite-react-tailwind-ali/README.md @@ -20,8 +20,8 @@ export default { ecmaVersion: 'latest', sourceType: 'module', project: ['./tsconfig.json', './tsconfig.node.json'], - tsconfigRootDir: __dirname, - }, + tsconfigRootDir: __dirname + } } ``` diff --git a/packages/cli/template/vite-react-tailwind-ali/package.json b/packages/cli/template/vite-react-tailwind-ali/package.json index 9f6c5e8..fd5909a 100644 --- a/packages/cli/template/vite-react-tailwind-ali/package.json +++ b/packages/cli/template/vite-react-tailwind-ali/package.json @@ -29,4 +29,4 @@ "typescript": "^5.2.2", "vite": "^5.2.0" } -} \ No newline at end of file +} diff --git a/packages/cli/template/vite-react-tailwind-ali/vite.config.ts b/packages/cli/template/vite-react-tailwind-ali/vite.config.ts index 9cc50ea..b1b5f91 100644 --- a/packages/cli/template/vite-react-tailwind-ali/vite.config.ts +++ b/packages/cli/template/vite-react-tailwind-ali/vite.config.ts @@ -1,7 +1,7 @@ -import { defineConfig } from "vite"; -import react from "@vitejs/plugin-react"; +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' // https://vitejs.dev/config/ export default defineConfig({ - plugins: [react()], -}); + plugins: [react()] +}) diff --git a/packages/cli/template/vite-vue3-less-ali/components.d.ts b/packages/cli/template/vite-vue3-less-ali/components.d.ts index 9c4d2a8..125ab6e 100644 --- a/packages/cli/template/vite-vue3-less-ali/components.d.ts +++ b/packages/cli/template/vite-vue3-less-ali/components.d.ts @@ -7,15 +7,15 @@ export {} declare module 'vue' { export interface GlobalComponents { - AButton: typeof import('ant-design-vue/es')['Button'] - AInputSearch: typeof import('ant-design-vue/es')['InputSearch'] - ASelect: typeof import('ant-design-vue/es')['Select'] - ASelectOption: typeof import('ant-design-vue/es')['SelectOption'] - AStyleProvider: typeof import('ant-design-vue/es')['StyleProvider'] - ATable: typeof import('ant-design-vue/es')['Table'] - AUpload: typeof import('ant-design-vue/es')['Upload'] - RouterLink: typeof import('vue-router')['RouterLink'] - RouterView: typeof import('vue-router')['RouterView'] - Svg: typeof import('./src/components/Svg/index.vue')['default'] + AButton: (typeof import('ant-design-vue/es'))['Button'] + AInputSearch: (typeof import('ant-design-vue/es'))['InputSearch'] + ASelect: (typeof import('ant-design-vue/es'))['Select'] + ASelectOption: (typeof import('ant-design-vue/es'))['SelectOption'] + AStyleProvider: (typeof import('ant-design-vue/es'))['StyleProvider'] + ATable: (typeof import('ant-design-vue/es'))['Table'] + AUpload: (typeof import('ant-design-vue/es'))['Upload'] + RouterLink: (typeof import('vue-router'))['RouterLink'] + RouterView: (typeof import('vue-router'))['RouterView'] + Svg: (typeof import('./src/components/Svg/index.vue'))['default'] } } diff --git a/packages/cli/tsconfig.json b/packages/cli/tsconfig.json index f75bf70..bb972ae 100644 --- a/packages/cli/tsconfig.json +++ b/packages/cli/tsconfig.json @@ -2,7 +2,7 @@ "compilerOptions": { "baseUrl": ".", "moduleResolution": "Node", - "module" : "ESNext", + "module": "ESNext", /* Visit https://aka.ms/tsconfig to read more about this file */ /* Projects */ @@ -14,7 +14,7 @@ // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ /* Language and Environment */ - "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + "target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ // "jsx": "preserve", /* Specify what JSX code is generated. */ // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ @@ -79,12 +79,12 @@ // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, /* Type Checking */ - "strict": true, /* Enable all strict type-checking options. */ + "strict": true /* Enable all strict type-checking options. */, // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ @@ -106,8 +106,7 @@ /* Completeness */ // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true, - /* Skip type checking all .d.ts files. */ - }, - + "skipLibCheck": true + /* Skip type checking all .d.ts files. */ + } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 30bdfbb..f411ec9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -49,8 +49,8 @@ importers: packages/cli: dependencies: '@inquirer/prompts': - specifier: ^4.3.1 - version: 4.3.1 + specifier: ^4.3.3 + version: 4.3.3 '@types/express': specifier: ^4.17.17 version: 4.17.21 @@ -136,9 +136,18 @@ importers: '@types/serve-static': specifier: ^1.15.7 version: 1.15.7 + '@typescript-eslint/parser': + specifier: ^7.7.0 + version: 7.7.0(eslint@8.46.0)(typescript@5.4.5) + eslint: + specifier: ^8.46.0 + version: 8.46.0 glob: specifier: ^10.3.12 version: 10.3.12 + prettier: + specifier: ^3.2.5 + version: 3.2.5 rimraf: specifier: ^5.0.5 version: 5.0.5 @@ -324,15 +333,27 @@ importers: '@rollup/plugin-terser': specifier: ^0.4.4 version: 0.4.4(rollup@4.14.0) + '@typescript-eslint/eslint-plugin': + specifier: ^7.7.0 + version: 7.7.0(@typescript-eslint/parser@7.7.0)(eslint@9.0.0)(typescript@5.4.5) + '@typescript-eslint/parser': + specifier: ^7.7.0 + version: 7.7.0(eslint@9.0.0)(typescript@5.4.5) commitlint-config-gitmoji: specifier: ^2.3.1 version: 2.3.1 + eslint: + specifier: ^9.0.0 + version: 9.0.0 full-featured-cz: specifier: ^0.0.1-development version: 0.0.1-development husky: specifier: ^9.0.11 version: 9.0.11 + prettier: + specifier: ^3.2.5 + version: 3.2.5 rollup: specifier: ^4.14.0 version: 4.14.0 @@ -1741,7 +1762,7 @@ packages: dependencies: '@ant-design/colors': 6.0.0 '@ant-design/icons-svg': 4.4.2 - vue: 3.4.21(typescript@5.4.5) + vue: 3.4.21(typescript@5.4.2) dev: false /@antfu/utils@0.7.7: @@ -4022,6 +4043,16 @@ packages: dev: true optional: true + /@eslint-community/eslint-utils@4.4.0(eslint@8.46.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.46.0 + eslint-visitor-keys: 3.4.3 + dev: true + /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4032,6 +4063,16 @@ packages: eslint-visitor-keys: 3.4.3 dev: true + /@eslint-community/eslint-utils@4.4.0(eslint@9.0.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 9.0.0 + eslint-visitor-keys: 3.4.3 + dev: true + /@eslint-community/regexpp@4.10.0: resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -4054,11 +4095,33 @@ packages: - supports-color dev: true + /@eslint/eslintrc@3.0.2: + resolution: {integrity: sha512-wV19ZEGEMAC1eHgrS7UQPqsdEiCIbTKTasEfcXAigzoXICcqZSjBZEHlZwNVvKg6UBCjSlos84XiLqsRJnIcIg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 10.0.1 + globals: 14.0.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + /@eslint/js@8.57.0: resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /@eslint/js@9.0.0: + resolution: {integrity: sha512-RThY/MnKrhubF6+s1JflwUjPEsnCEmYCWwqa/aRISKWNXGZ9epUwft4bUMM35SdKF9xvBrLydAM1RDHd1Z//ZQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dev: true + /@gitmoji/commit-types@1.1.5: resolution: {integrity: sha512-8D3FZMRY+gtYpTcHG1SOGmm9CFqxNh6rI9xDoCydxHxnWgqInbdF3nk9gibW5gXA58Hf2cVcJaLEcGOKLRAtmw==} dev: true @@ -4080,7 +4143,18 @@ packages: resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} dependencies: - '@humanwhocodes/object-schema': 2.0.2 + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/config-array@0.12.3: + resolution: {integrity: sha512-jsNnTBlMWuTpDkeE3on7+dWJi0D6fdDfeANj/w7MpS8ztROCoLvIO2nG0CcFj+E4k8j4QrSTh4Oryi3i2G669g==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 2.0.3 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: @@ -4092,120 +4166,144 @@ packages: engines: {node: '>=12.22'} dev: true - /@humanwhocodes/object-schema@2.0.2: - resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} + /@humanwhocodes/object-schema@2.0.3: + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} dev: true - /@inquirer/checkbox@2.2.1: - resolution: {integrity: sha512-eYdhZWZMOaliMBPOL/AO3uId58lp+zMyrJdoZ2xw9hfUY4IYJlIMvgW80RJdvCY3q9fGMUyZI5GwguH2tO51ew==} + /@inquirer/checkbox@2.3.1: + resolution: {integrity: sha512-w0B2PhvIh6SFA5uMh32FE+7xSuv1P2o/qjBb5jxgi1DB8VBFjSD3gHDsgiGDeSmfTaQDyR7/beDllIvKeA+YDw==} engines: {node: '>=18'} dependencies: - '@inquirer/core': 7.1.1 - '@inquirer/type': 1.2.1 + '@inquirer/core': 8.0.1 + '@inquirer/figures': 1.0.1 + '@inquirer/type': 1.3.0 ansi-escapes: 4.3.2 chalk: 4.1.2 - figures: 3.2.0 dev: false - /@inquirer/confirm@3.1.1: - resolution: {integrity: sha512-epf2RVHJJxX5qF85U41PBq9qq2KTJW9sKNLx6+bb2/i2rjXgeoHVGUm8kJxZHavrESgXgBLKCABcfOJYIso8cQ==} + /@inquirer/confirm@3.1.5: + resolution: {integrity: sha512-6+dwZrpko5vr5EFEQmUbfBVhtu6IsnB8lQNsLHgO9S9fbfS5J6MuUj+NY0h98pPpYZXEazLR7qzypEDqVzf6aQ==} engines: {node: '>=18'} dependencies: - '@inquirer/core': 7.1.1 - '@inquirer/type': 1.2.1 + '@inquirer/core': 8.0.1 + '@inquirer/type': 1.3.0 dev: false - /@inquirer/core@7.1.1: - resolution: {integrity: sha512-rD1UI3eARN9qJBcLRXPOaZu++Bg+xsk0Tuz1EUOXEW+UbYif1sGjr0Tw7lKejHzKD9IbXE1CEtZ+xR/DrNlQGQ==} + /@inquirer/core@7.1.3: + resolution: {integrity: sha512-MbHUe32W0DRtuw3Hlt+vLWy3c0Vw7wVHSJyYZ16IGVXyxs31BTyo2MOFKzNnzBBAWhsqn+iHO1r84FXIzs39HQ==} engines: {node: '>=18'} dependencies: - '@inquirer/type': 1.2.1 + '@inquirer/figures': 1.0.1 + '@inquirer/type': 1.3.0 '@types/mute-stream': 0.0.4 - '@types/node': 20.11.30 + '@types/node': 20.12.7 + '@types/wrap-ansi': 3.0.0 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-spinners: 2.9.2 + cli-width: 4.1.0 + mute-stream: 1.0.0 + signal-exit: 4.1.0 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + dev: false + + /@inquirer/core@8.0.1: + resolution: {integrity: sha512-qJRk1y51Os2ARc11Bg2N6uIwiQ9qBSrmZeuMonaQ/ntFpb4+VlcQ8Gl1TFH67mJLz3HA2nvuave0nbv6Lu8pbg==} + engines: {node: '>=18'} + dependencies: + '@inquirer/figures': 1.0.1 + '@inquirer/type': 1.3.0 + '@types/mute-stream': 0.0.4 + '@types/node': 20.12.7 '@types/wrap-ansi': 3.0.0 ansi-escapes: 4.3.2 chalk: 4.1.2 cli-spinners: 2.9.2 cli-width: 4.1.0 - figures: 3.2.0 mute-stream: 1.0.0 signal-exit: 4.1.0 strip-ansi: 6.0.1 wrap-ansi: 6.2.0 dev: false - /@inquirer/editor@2.1.1: - resolution: {integrity: sha512-SGVAmSKY2tt62+5KUySYFeMwJEXX866Ws5MyjwbrbB+WqC8iZAtPcK0pz8KVsO0ak/DB3/vCZw0k2nl7TifV5g==} + /@inquirer/editor@2.1.5: + resolution: {integrity: sha512-wzMc/lTt79gOCPbBH7LVCrsn36+JHwYPXchDPATYphFTS/XLy50DuM2D79/dn0VIZHfNSw4C8RZNLDUH/3YmpA==} engines: {node: '>=18'} dependencies: - '@inquirer/core': 7.1.1 - '@inquirer/type': 1.2.1 + '@inquirer/core': 8.0.1 + '@inquirer/type': 1.3.0 external-editor: 3.1.0 dev: false - /@inquirer/expand@2.1.1: - resolution: {integrity: sha512-FTHf56CgE24CtweB+3sF4mOFa6Q7H8NfTO+SvYio3CgQwhIWylSNueEeJ7sYBnWaXHNUfiX883akgvSbWqSBoQ==} + /@inquirer/expand@2.1.5: + resolution: {integrity: sha512-XWMJWHtH4qHbr4Zxms8qq0QxzFtwGOVnQX8QnuA5HT1Ew19H6moy48pN5od2PxcZ8NuIKxsW8vSTiCidpzri9Q==} engines: {node: '>=18'} dependencies: - '@inquirer/core': 7.1.1 - '@inquirer/type': 1.2.1 + '@inquirer/core': 8.0.1 + '@inquirer/type': 1.3.0 chalk: 4.1.2 dev: false - /@inquirer/input@2.1.1: - resolution: {integrity: sha512-Ag5PDh3/V3B68WGD/5LKXDqbdWKlF7zyfPAlstzu0NoZcZGBbZFjfgXlZIcb6Gs+AfdSi7wNf7soVAaMGH7moQ==} + /@inquirer/figures@1.0.1: + resolution: {integrity: sha512-mtup3wVKia3ZwULPHcbs4Mor8Voi+iIXEWD7wCNbIO6lYR62oPCTQyrddi5OMYVXHzeCSoneZwJuS8sBvlEwDw==} + engines: {node: '>=18'} + dev: false + + /@inquirer/input@2.1.5: + resolution: {integrity: sha512-z4l1ISps86JZXo1OsWt8IAh4nnyXjXwcu/na2pKFkDud6DC9TLxvDPWxHmq25T40/WZCULhMQuCMDV+VccVG+A==} engines: {node: '>=18'} dependencies: - '@inquirer/core': 7.1.1 - '@inquirer/type': 1.2.1 + '@inquirer/core': 8.0.1 + '@inquirer/type': 1.3.0 dev: false - /@inquirer/password@2.1.1: - resolution: {integrity: sha512-R5R6NVXDKXEjAOGBqgRGrchFlfdZIx/qiDvH63m1u1NQVOQFUMfHth9VzVwuTZ2LHzbb9UrYpBumh2YytFE9iQ==} + /@inquirer/password@2.1.5: + resolution: {integrity: sha512-uQ7zG/yOpO+OqeBg+W+Z1DY1gt+ZOW+pFGsYpqwHVIbTr17zOiUOFiInDXTWfiOk7r+hTAI7CqcJpZj/Zx6c6Q==} engines: {node: '>=18'} dependencies: - '@inquirer/core': 7.1.1 - '@inquirer/type': 1.2.1 + '@inquirer/core': 8.0.1 + '@inquirer/type': 1.3.0 ansi-escapes: 4.3.2 dev: false - /@inquirer/prompts@4.3.1: - resolution: {integrity: sha512-FI8jhVm3GRJ/z40qf7YZnSP0TfPKDPdIYZT9W6hmiYuaSmAXL66YMXqonKyysE5DwtKQBhIqt0oSoTKp7FCvQQ==} + /@inquirer/prompts@4.3.3: + resolution: {integrity: sha512-QLn4tTeLKH3Foqlof0+dY0kLoCGQvvR4MDkHAooPI0rLGPOjUwoiVeEalcMtJTGulqJ76it2UW4++j88WO6KLQ==} engines: {node: '>=18'} dependencies: - '@inquirer/checkbox': 2.2.1 - '@inquirer/confirm': 3.1.1 - '@inquirer/core': 7.1.1 - '@inquirer/editor': 2.1.1 - '@inquirer/expand': 2.1.1 - '@inquirer/input': 2.1.1 - '@inquirer/password': 2.1.1 - '@inquirer/rawlist': 2.1.1 - '@inquirer/select': 2.2.1 + '@inquirer/checkbox': 2.3.1 + '@inquirer/confirm': 3.1.5 + '@inquirer/core': 7.1.3 + '@inquirer/editor': 2.1.5 + '@inquirer/expand': 2.1.5 + '@inquirer/input': 2.1.5 + '@inquirer/password': 2.1.5 + '@inquirer/rawlist': 2.1.5 + '@inquirer/select': 2.3.1 dev: false - /@inquirer/rawlist@2.1.1: - resolution: {integrity: sha512-PIpJdNqVhjnl2bDz8iUKqMmgGdspN4s7EZiuNPnNrqZLP+LRUDDHVyd7X7xjiEMulBt3lt2id4SjTbra+v/Ajg==} + /@inquirer/rawlist@2.1.5: + resolution: {integrity: sha512-gy/vHQYGGU9r/6dUvPKv5nBKcgxXvX+wnLJy6C5A0arMvC5rjgqf9/6fnvM1fQcjoRr6HReIoSrrzw7pqF57BQ==} engines: {node: '>=18'} dependencies: - '@inquirer/core': 7.1.1 - '@inquirer/type': 1.2.1 + '@inquirer/core': 8.0.1 + '@inquirer/type': 1.3.0 chalk: 4.1.2 dev: false - /@inquirer/select@2.2.1: - resolution: {integrity: sha512-JR4FeHvuxPSPWQy8DzkIvoIsJ4SWtSFb4xVLvLto84dL+jkv12lm8ILtuax4bMHvg5MBj3wYUF6Tk9izJ07gdw==} + /@inquirer/select@2.3.1: + resolution: {integrity: sha512-UagbSdmSjeoukHLXqkDQi2ewiGEogUyxaOeKeH34Ngmc/2z+S8u4JsJWToMJNKIHjEtoTFdlYpFrxCxapp06nQ==} engines: {node: '>=18'} dependencies: - '@inquirer/core': 7.1.1 - '@inquirer/type': 1.2.1 + '@inquirer/core': 8.0.1 + '@inquirer/figures': 1.0.1 + '@inquirer/type': 1.3.0 ansi-escapes: 4.3.2 chalk: 4.1.2 - figures: 3.2.0 dev: false - /@inquirer/type@1.2.1: - resolution: {integrity: sha512-xwMfkPAxeo8Ji/IxfUSqzRi0/+F2GIqJmpc5/thelgMGsjNZcjDDRBO9TLXT1s/hdx/mK5QbVIvgoLIFgXhTMQ==} + /@inquirer/type@1.3.0: + resolution: {integrity: sha512-RW4Zf6RCTnInRaOZuRHTqAUl+v6VJuQGglir7nW2BkT3OXOphMhkIFhvFRjorBx2l0VwtC/M4No8vYR65TdN9Q==} engines: {node: '>=18'} dev: false @@ -5213,7 +5311,7 @@ packages: /@types/mute-stream@0.0.4: resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==} dependencies: - '@types/node': 20.11.30 + '@types/node': 20.12.7 dev: false /@types/node@20.11.28: @@ -5227,6 +5325,12 @@ packages: dependencies: undici-types: 5.26.5 + /@types/node@20.12.7: + resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} + dependencies: + undici-types: 5.26.5 + dev: false + /@types/normalize-package-data@2.4.4: resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} dev: true @@ -5411,6 +5515,35 @@ packages: - supports-color dev: true + /@typescript-eslint/eslint-plugin@7.7.0(@typescript-eslint/parser@7.7.0)(eslint@9.0.0)(typescript@5.4.5): + resolution: {integrity: sha512-GJWR0YnfrKnsRoluVO3PRb9r5aMZriiMMM/RHj5nnTrBy1/wIgk76XCtCKcnXGjpZQJQRFtGV9/0JJ6n30uwpQ==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + '@typescript-eslint/parser': ^7.0.0 + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 7.7.0(eslint@9.0.0)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 7.7.0 + '@typescript-eslint/type-utils': 7.7.0(eslint@9.0.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.7.0(eslint@9.0.0)(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.7.0 + debug: 4.3.4 + eslint: 9.0.0 + graphemer: 1.4.0 + ignore: 5.3.1 + natural-compare: 1.4.0 + semver: 7.6.0 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.2): resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -5474,6 +5607,48 @@ packages: - supports-color dev: true + /@typescript-eslint/parser@7.7.0(eslint@8.46.0)(typescript@5.4.5): + resolution: {integrity: sha512-fNcDm3wSwVM8QYL4HKVBggdIPAy9Q41vcvC/GtDobw3c4ndVT3K6cqudUmjHPw8EAp4ufax0o58/xvWaP2FmTg==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 7.7.0 + '@typescript-eslint/types': 7.7.0 + '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.7.0 + debug: 4.3.4 + eslint: 8.46.0 + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser@7.7.0(eslint@9.0.0)(typescript@5.4.5): + resolution: {integrity: sha512-fNcDm3wSwVM8QYL4HKVBggdIPAy9Q41vcvC/GtDobw3c4ndVT3K6cqudUmjHPw8EAp4ufax0o58/xvWaP2FmTg==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 7.7.0 + '@typescript-eslint/types': 7.7.0 + '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.7.0 + debug: 4.3.4 + eslint: 9.0.0 + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/scope-manager@6.21.0: resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} engines: {node: ^16.0.0 || >=18.0.0} @@ -5490,6 +5665,14 @@ packages: '@typescript-eslint/visitor-keys': 7.6.0 dev: true + /@typescript-eslint/scope-manager@7.7.0: + resolution: {integrity: sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==} + engines: {node: ^18.18.0 || >=20.0.0} + dependencies: + '@typescript-eslint/types': 7.7.0 + '@typescript-eslint/visitor-keys': 7.7.0 + dev: true + /@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.4.2): resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} engines: {node: ^16.0.0 || >=18.0.0} @@ -5550,6 +5733,26 @@ packages: - supports-color dev: true + /@typescript-eslint/type-utils@7.7.0(eslint@9.0.0)(typescript@5.4.5): + resolution: {integrity: sha512-bOp3ejoRYrhAlnT/bozNQi3nio9tIgv3U5C0mVDdZC7cpcQEDZXvq8inrHYghLVwuNABRqrMW5tzAv88Vy77Sg==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.5) + '@typescript-eslint/utils': 7.7.0(eslint@9.0.0)(typescript@5.4.5) + debug: 4.3.4 + eslint: 9.0.0 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/types@6.21.0: resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} engines: {node: ^16.0.0 || >=18.0.0} @@ -5560,6 +5763,11 @@ packages: engines: {node: ^18.18.0 || >=20.0.0} dev: true + /@typescript-eslint/types@7.7.0: + resolution: {integrity: sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==} + engines: {node: ^18.18.0 || >=20.0.0} + dev: true + /@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.2): resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -5626,6 +5834,28 @@ packages: - supports-color dev: true + /@typescript-eslint/typescript-estree@7.7.0(typescript@5.4.5): + resolution: {integrity: sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 7.7.0 + '@typescript-eslint/visitor-keys': 7.7.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.4 + semver: 7.6.0 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.4.2): resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -5683,6 +5913,25 @@ packages: - typescript dev: true + /@typescript-eslint/utils@7.7.0(eslint@9.0.0)(typescript@5.4.5): + resolution: {integrity: sha512-LKGAXMPQs8U/zMRFXDZOzmMKgFv3COlxUQ+2NMPhbqgVm6R1w+nU1i4836Pmxu9jZAuIeyySNrN/6Rc657ggig==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 7.7.0 + '@typescript-eslint/types': 7.7.0 + '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.5) + eslint: 9.0.0 + semver: 7.6.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + /@typescript-eslint/visitor-keys@6.21.0: resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} engines: {node: ^16.0.0 || >=18.0.0} @@ -5699,6 +5948,14 @@ packages: eslint-visitor-keys: 3.4.3 dev: true + /@typescript-eslint/visitor-keys@7.7.0: + resolution: {integrity: sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==} + engines: {node: ^18.18.0 || >=20.0.0} + dependencies: + '@typescript-eslint/types': 7.7.0 + eslint-visitor-keys: 3.4.3 + dev: true + /@ungap/structured-clone@1.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true @@ -6011,7 +6268,7 @@ packages: dependencies: '@vue/compiler-ssr': 3.4.21 '@vue/shared': 3.4.21 - vue: 3.4.21(typescript@5.4.5) + vue: 3.4.21(typescript@5.4.2) /@vue/shared@3.4.21: resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==} @@ -6418,7 +6675,7 @@ packages: shallow-equal: 1.2.1 stylis: 4.3.1 throttle-debounce: 5.0.0 - vue: 3.4.21(typescript@5.4.5) + vue: 3.4.21(typescript@5.4.2) vue-types: 3.0.2(vue@3.4.21) warning: 4.0.3 dev: false @@ -8659,7 +8916,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.2) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 @@ -8689,7 +8946,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.2) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.4 array.prototype.flat: 1.3.2 @@ -8814,11 +9071,70 @@ packages: estraverse: 5.3.0 dev: true + /eslint-scope@8.0.1: + resolution: {integrity: sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + /eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /eslint-visitor-keys@4.0.0: + resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dev: true + + /eslint@8.46.0: + resolution: {integrity: sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.46.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.0 + '@humanwhocodes/config-array': 0.11.14 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.1 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + /eslint@8.57.0: resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -8866,6 +9182,58 @@ packages: - supports-color dev: true + /eslint@9.0.0: + resolution: {integrity: sha512-IMryZ5SudxzQvuod6rUdIUz29qFItWx281VhtFVc2Psy/ZhlCeD/5DT6lBIJ4H3G+iamGJoTln1v+QSuPw0p7Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.0.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 3.0.2 + '@eslint/js': 9.0.0 + '@humanwhocodes/config-array': 0.12.3 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + escape-string-regexp: 4.0.0 + eslint-scope: 8.0.1 + eslint-visitor-keys: 4.0.0 + espree: 10.0.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + graphemer: 1.4.0 + ignore: 5.3.1 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /espree@10.0.1: + resolution: {integrity: sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) + eslint-visitor-keys: 4.0.0 + dev: true + /espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -9182,6 +9550,13 @@ packages: flat-cache: 3.2.0 dev: true + /file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + dependencies: + flat-cache: 4.0.1 + dev: true + /fill-range@4.0.0: resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} engines: {node: '>=0.10.0'} @@ -9278,6 +9653,14 @@ packages: rimraf: 3.0.2 dev: true + /flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + dev: true + /flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} dev: true @@ -9668,6 +10051,11 @@ packages: type-fest: 0.20.2 dev: true + /globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + dev: true + /globalthis@1.0.3: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} @@ -14641,7 +15029,7 @@ packages: minimatch: 9.0.3 resolve: 1.22.8 unplugin: 1.10.0 - vue: 3.4.21(typescript@5.4.5) + vue: 3.4.21(typescript@5.4.2) transitivePeerDependencies: - rollup - supports-color @@ -14999,7 +15387,7 @@ packages: vue: '>=3.2.13' dependencies: svgo: 3.2.0 - vue: 3.4.21(typescript@5.4.5) + vue: 3.4.21(typescript@5.4.2) dev: true /vite@5.1.6(@types/node@20.11.30)(less@4.2.0)(terser@5.29.2): @@ -15181,7 +15569,7 @@ packages: '@vue/composition-api': optional: true dependencies: - vue: 3.4.21(typescript@5.4.5) + vue: 3.4.21(typescript@5.4.2) /vue-eslint-parser@9.4.2(eslint@8.57.0): resolution: {integrity: sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==} @@ -15213,7 +15601,7 @@ packages: '@intlify/core-base': 9.10.2 '@intlify/shared': 9.10.2 '@vue/devtools-api': 6.6.1 - vue: 3.4.21(typescript@5.4.5) + vue: 3.4.21(typescript@5.4.2) dev: false /vue-loader@15.11.1(css-loader@6.10.0)(prettier@3.2.5)(react-dom@18.2.0)(react@18.2.0)(webpack@5.90.3): @@ -15304,7 +15692,7 @@ packages: vue: ^3.2.0 dependencies: '@vue/devtools-api': 6.6.1 - vue: 3.4.21(typescript@5.4.5) + vue: 3.4.21(typescript@5.4.2) dev: false /vue-style-loader@4.1.3: @@ -15354,7 +15742,7 @@ packages: vue: ^3.0.0 dependencies: is-plain-object: 3.0.1 - vue: 3.4.21(typescript@5.4.5) + vue: 3.4.21(typescript@5.4.2) dev: false /vue@3.4.21(typescript@5.4.2):