zixulu 1.7.3 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +41 -0
- package/dist/index.js.map +2 -2
- package/dist/utils/index.d.ts +5 -1
- package/dist/utils/index.js +53 -9
- package/dist/utils/index.js.map +2 -2
- package/package.json +39 -39
- package/src/index.ts +44 -1
- package/src/utils/index.ts +46 -8
package/dist/index.js
CHANGED
|
@@ -189,6 +189,47 @@ export default defineConfig({
|
|
|
189
189
|
(0, import_utils.writePackageJson)(packageJson);
|
|
190
190
|
(0, import_fs.writeFileSync)(".fatherrc.ts", fatherrcCode);
|
|
191
191
|
(0, import_fs.writeFileSync)(".gitignore", gitignore.join("\n"));
|
|
192
|
+
(0, import_utils.setTsConfig)("target", import_utils.Target.ESNext);
|
|
193
|
+
});
|
|
194
|
+
program.command("upgrade").description("升级所有依赖").action(async () => {
|
|
195
|
+
const level = await import_consola.default.prompt("请选择升级的级别", {
|
|
196
|
+
type: "select",
|
|
197
|
+
options: ["major", "minor", "patch"]
|
|
198
|
+
});
|
|
199
|
+
const packageJson = (0, import_utils.readPackageJson)();
|
|
200
|
+
const upgrades = [];
|
|
201
|
+
if (packageJson.dependencies) {
|
|
202
|
+
const pkgs = Object.keys(packageJson.dependencies);
|
|
203
|
+
for (let i = 0; i < pkgs.length; i++) {
|
|
204
|
+
const pkg2 = pkgs[i];
|
|
205
|
+
const rv = packageJson.dependencies[pkg2];
|
|
206
|
+
const s = rv.match(/^\D*/)[0];
|
|
207
|
+
const cv = (0, import_utils.getVersionFromRequiredVersion)(rv);
|
|
208
|
+
const version = await (0, import_utils.getPackageUpgradeVersion)(pkg2, cv, level);
|
|
209
|
+
if (!version)
|
|
210
|
+
continue;
|
|
211
|
+
packageJson.dependencies[pkg2] = `${s}${version}`;
|
|
212
|
+
upgrades.push({ package: pkg2, oldVersion: cv, newVersion: version });
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
if (packageJson.devDependencies) {
|
|
216
|
+
const pkgs = Object.keys(packageJson.devDependencies);
|
|
217
|
+
for (let i = 0; i < pkgs.length; i++) {
|
|
218
|
+
const pkg2 = pkgs[i];
|
|
219
|
+
const rv = packageJson.devDependencies[pkg2];
|
|
220
|
+
const s = rv.match(/^\D*/)[0];
|
|
221
|
+
const cv = (0, import_utils.getVersionFromRequiredVersion)(rv);
|
|
222
|
+
const version = await (0, import_utils.getPackageUpgradeVersion)(pkg2, cv, level);
|
|
223
|
+
if (!version)
|
|
224
|
+
continue;
|
|
225
|
+
packageJson.devDependencies[pkg2] = `${s}${version}`;
|
|
226
|
+
upgrades.push({ package: pkg2, oldVersion: cv, newVersion: version });
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
upgrades.forEach((upgrade) => {
|
|
230
|
+
import_consola.default.success(`${upgrade.package} ${upgrade.oldVersion} => ${upgrade.newVersion}`);
|
|
231
|
+
});
|
|
232
|
+
(0, import_utils.writePackageJson)(packageJson);
|
|
192
233
|
});
|
|
193
234
|
program.parse();
|
|
194
235
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["#!/usr/bin/env node\r\n\r\nimport { Argument, Command } from \"commander\"\r\nimport consola from \"consola\"\r\nimport { resolve } from \"path\"\r\nimport { Module, ModuleResolution, Target, addDependencies, addLatestDependencies, addPrettierConfig, readPackageJson, removeComment, removeESLint, setTsConfig, sortArrayOrObject, tailwind, vite, writePackageJson } from \"./utils\"\r\nimport { exec } from \"child_process\"\r\nimport { readFileSync, writeFileSync } from \"fs\"\r\n\r\nconst program = new Command()\r\n\r\nconst pkg = readPackageJson(resolve(__dirname, \"../\"))\r\n\r\nprogram.name(\"格数科技\").version(pkg.version)\r\n\r\nprogram.command(\"eslint\").description(\"删除 ESLint 配置文件\").action(removeESLint)\r\n\r\nprogram\r\n .command(\"prettier\")\r\n .description(\"添加 prettier 配置文件\")\r\n .option(\"-t, --tailwind\", \"是否添加 tailwind 插件\")\r\n .action(options => {\r\n const { tailwind } = options\r\n addPrettierConfig(tailwind)\r\n })\r\n\r\nprogram.command(\"vite\").description(\"删除 vite 模板中的某些配置\").action(vite)\r\n\r\nprogram.command(\"tailwind\").description(\"添加 tailwind 配置文件\").action(tailwind)\r\n\r\nprogram.command(\"remove-comment\").description(\"删除所有注释\").addArgument(new Argument(\"path\")).action(removeComment)\r\n\r\nprogram\r\n .command(\"ts-target\")\r\n .description(\"设置 tsconfig 中 target 字段\")\r\n .action(async () => {\r\n const target = await consola.prompt(\"Please choose a target\", {\r\n type: \"select\",\r\n options: Object.values(Target),\r\n initial: Target.ESNext\r\n })\r\n setTsConfig(\"target\", target)\r\n })\r\n\r\nprogram\r\n .command(\"ts-module\")\r\n .description(\"设置 tsconfig 中 module 字段\")\r\n .action(async () => {\r\n const module = await consola.prompt(\"Please choose a module\", {\r\n type: \"select\",\r\n options: Object.values(Module),\r\n initial: Module.ESNext\r\n })\r\n setTsConfig(\"module\", module)\r\n })\r\n\r\nprogram\r\n .command(\"ts-module-resolution\")\r\n .alias(\"ts-mr\")\r\n .description(\"设置 tsconfig 中 module 字段\")\r\n .action(async () => {\r\n const moduleResolution = await consola.prompt(\"Please choose a module resolution\", {\r\n type: \"select\",\r\n options: Object.values(ModuleResolution),\r\n initial: ModuleResolution.NodeNext\r\n })\r\n setTsConfig(\"moduleResolution\", moduleResolution)\r\n })\r\n\r\ninterface NpmPackage {\r\n name: string\r\n description: string\r\n}\r\n\r\nconst packages: NpmPackage[] = [\r\n {\r\n name: \"deepsea-tools\",\r\n description: \"格数工具库\"\r\n },\r\n {\r\n name: \"deepsea-components\",\r\n description: \"格数组件库\"\r\n },\r\n {\r\n name: \"react-soda\",\r\n description: \"简单的状态管理库\"\r\n },\r\n {\r\n name: \"type-request\",\r\n description: \"基于 TypeScript 和 fetch 的类型请求库\"\r\n },\r\n {\r\n name: \"use-abort-signal\",\r\n description: \"在 useEffect 中安全地取消 fetch 请求\"\r\n },\r\n {\r\n name: \"react-viewer-soda\",\r\n description: \"基于 viewerjs 的图片预览组件\"\r\n },\r\n {\r\n name: \"viewerjs-soda\",\r\n description: \"基于 viewerjs 的图片预览库\"\r\n }\r\n]\r\n\r\nprogram\r\n .command(\"npm\")\r\n .description(\"一键添加 npm 包\")\r\n .action(async () => {\r\n const packageNames = (await consola.prompt(\"请选择需要安装的包\", {\r\n type: \"multiselect\",\r\n options: packages.map(pkg => ({ label: pkg.name, value: pkg.name, hint: pkg.description }))\r\n })) as unknown as string[]\r\n const latest = await consola.prompt(\"是否安装最新版本\", {\r\n type: \"confirm\",\r\n initial: true\r\n })\r\n const packageJson = readPackageJson()\r\n for (const pkg of packageNames) {\r\n await (latest ? addLatestDependencies : addDependencies)(packageJson, pkg)\r\n }\r\n writePackageJson(packageJson)\r\n const install = await consola.prompt(\"是否立即安装\", {\r\n type: \"select\",\r\n options: [\"yarn\", \"pnpm\", \"npm\", \"no\"],\r\n initial: \"yarn\"\r\n })\r\n if (install !== \"no\") {\r\n consola.start(\"正在安装\")\r\n exec(`${install} install`, err => {\r\n if (err) {\r\n consola.error(err)\r\n } else {\r\n consola.success(\"安装成功\")\r\n }\r\n })\r\n }\r\n })\r\n\r\nprogram\r\n .command(\"father\")\r\n .description(\"修改 father 项目配置\")\r\n .action(async () => {\r\n let packageJson = readPackageJson()\r\n packageJson.publishConfig ??= {}\r\n packageJson.publishConfig.access = \"public\"\r\n packageJson.publishConfig.registry = \"https://registry.npmjs.org/\"\r\n packageJson.publishConfig = sortArrayOrObject(packageJson.publishConfig)\r\n packageJson.files ??= []\r\n if (!packageJson.files.includes(\"src\")) packageJson.files.push(\"src\")\r\n packageJson.files = sortArrayOrObject(packageJson.files)\r\n const dependencies = packageJson.dependencies\r\n const devDependencies = packageJson.devDependencies\r\n const peerDependencies = packageJson.peerDependencies\r\n if (packageJson.repository?.url && !packageJson.repository.url.startsWith(\"git+\")) packageJson.repository.url = `git+${packageJson.repository.url}.git`\r\n packageJson.repository ??= {}\r\n packageJson.repository.type ??= \"git\"\r\n packageJson.repository.url ??= `git+https://github.com/1adybug/${packageJson.name}.git`\r\n if (!packageJson.types) {\r\n packageJson = Object.entries(packageJson).reduce((prev: Record<string, any>, [key, value]) => {\r\n prev[key] = value\r\n if (Object.hasOwn(packageJson, \"module\")) {\r\n if (key === \"module\") prev.types = value.replace(/\\.js$/, \".d.ts\")\r\n } else if (Object.hasOwn(packageJson, \"main\")) {\r\n if (key === \"main\") prev.types = value.replace(/\\.js$/, \".d.ts\")\r\n }\r\n return prev\r\n }, {})\r\n }\r\n delete packageJson.dependencies\r\n delete packageJson.devDependencies\r\n delete packageJson.peerDependencies\r\n packageJson.dependencies = sortArrayOrObject(dependencies)\r\n packageJson.devDependencies = sortArrayOrObject(devDependencies)\r\n packageJson.peerDependencies = sortArrayOrObject(peerDependencies)\r\n const fatherrcCode = `import { defineConfig } from \"father\"\r\n\r\nexport default defineConfig({\r\n esm: {},\r\n cjs: {},\r\n targets: {\r\n node: 18,\r\n chrome: 100\r\n },\r\n sourcemap: true\r\n})\r\n`\r\n const gitignore = readFileSync(\".gitignore\", \"utf-8\")\r\n .split(\"\\n\")\r\n .map(line => line.trim())\r\n .filter(Boolean)\r\n if (!gitignore.some(line => /^\\/?dist$/.test(line))) gitignore.push(\"dist\")\r\n if (!gitignore.some(line => /^\\/?yarn\\.lock$/.test(line))) gitignore.push(\"yarn.lock\")\r\n if (!gitignore.some(line => /^\\/?pnpm-lock\\.yaml$/.test(line))) gitignore.push(\"pnpm-lock.yaml\")\r\n if (!gitignore.some(line => /^\\/?node_modules$/.test(line))) gitignore.push(\"node_modules\")\r\n if (!gitignore.some(line => /^\\/?package-lock\\.json$/.test(line))) gitignore.push(\"package-lock.json\")\r\n if (!gitignore.some(line => /^\\/?yarn-error\\.log$/.test(line))) gitignore.push(\"yarn-error.log\")\r\n writePackageJson(packageJson)\r\n writeFileSync(\".fatherrc.ts\", fatherrcCode)\r\n writeFileSync(\".gitignore\", gitignore.join(\"\\n\"))\r\n })\r\n\r\nprogram.parse()\r\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAEA,uBAAkC;AAClC,qBAAoB;AACpB,kBAAwB;AACxB,
|
|
4
|
+
"sourcesContent": ["#!/usr/bin/env node\r\n\r\nimport { Argument, Command } from \"commander\"\r\nimport consola from \"consola\"\r\nimport { resolve } from \"path\"\r\nimport { Module, ModuleResolution, Target, addDependencies, addLatestDependencies, addPrettierConfig, getPackageUpgradeVersion, getVersionFromRequiredVersion, readPackageJson, removeComment, removeESLint, setTsConfig, sortArrayOrObject, tailwind, vite, writePackageJson } from \"./utils\"\r\nimport { exec } from \"child_process\"\r\nimport { readFileSync, writeFileSync } from \"fs\"\r\n\r\nconst program = new Command()\r\n\r\nconst pkg = readPackageJson(resolve(__dirname, \"../\"))\r\n\r\nprogram.name(\"格数科技\").version(pkg.version)\r\n\r\nprogram.command(\"eslint\").description(\"删除 ESLint 配置文件\").action(removeESLint)\r\n\r\nprogram\r\n .command(\"prettier\")\r\n .description(\"添加 prettier 配置文件\")\r\n .option(\"-t, --tailwind\", \"是否添加 tailwind 插件\")\r\n .action(options => {\r\n const { tailwind } = options\r\n addPrettierConfig(tailwind)\r\n })\r\n\r\nprogram.command(\"vite\").description(\"删除 vite 模板中的某些配置\").action(vite)\r\n\r\nprogram.command(\"tailwind\").description(\"添加 tailwind 配置文件\").action(tailwind)\r\n\r\nprogram.command(\"remove-comment\").description(\"删除所有注释\").addArgument(new Argument(\"path\")).action(removeComment)\r\n\r\nprogram\r\n .command(\"ts-target\")\r\n .description(\"设置 tsconfig 中 target 字段\")\r\n .action(async () => {\r\n const target = await consola.prompt(\"Please choose a target\", {\r\n type: \"select\",\r\n options: Object.values(Target),\r\n initial: Target.ESNext\r\n })\r\n setTsConfig(\"target\", target)\r\n })\r\n\r\nprogram\r\n .command(\"ts-module\")\r\n .description(\"设置 tsconfig 中 module 字段\")\r\n .action(async () => {\r\n const module = await consola.prompt(\"Please choose a module\", {\r\n type: \"select\",\r\n options: Object.values(Module),\r\n initial: Module.ESNext\r\n })\r\n setTsConfig(\"module\", module)\r\n })\r\n\r\nprogram\r\n .command(\"ts-module-resolution\")\r\n .alias(\"ts-mr\")\r\n .description(\"设置 tsconfig 中 module 字段\")\r\n .action(async () => {\r\n const moduleResolution = await consola.prompt(\"Please choose a module resolution\", {\r\n type: \"select\",\r\n options: Object.values(ModuleResolution),\r\n initial: ModuleResolution.NodeNext\r\n })\r\n setTsConfig(\"moduleResolution\", moduleResolution)\r\n })\r\n\r\ninterface NpmPackage {\r\n name: string\r\n description: string\r\n}\r\n\r\nconst packages: NpmPackage[] = [\r\n {\r\n name: \"deepsea-tools\",\r\n description: \"格数工具库\"\r\n },\r\n {\r\n name: \"deepsea-components\",\r\n description: \"格数组件库\"\r\n },\r\n {\r\n name: \"react-soda\",\r\n description: \"简单的状态管理库\"\r\n },\r\n {\r\n name: \"type-request\",\r\n description: \"基于 TypeScript 和 fetch 的类型请求库\"\r\n },\r\n {\r\n name: \"use-abort-signal\",\r\n description: \"在 useEffect 中安全地取消 fetch 请求\"\r\n },\r\n {\r\n name: \"react-viewer-soda\",\r\n description: \"基于 viewerjs 的图片预览组件\"\r\n },\r\n {\r\n name: \"viewerjs-soda\",\r\n description: \"基于 viewerjs 的图片预览库\"\r\n }\r\n]\r\n\r\nprogram\r\n .command(\"npm\")\r\n .description(\"一键添加 npm 包\")\r\n .action(async () => {\r\n const packageNames = (await consola.prompt(\"请选择需要安装的包\", {\r\n type: \"multiselect\",\r\n options: packages.map(pkg => ({ label: pkg.name, value: pkg.name, hint: pkg.description }))\r\n })) as unknown as string[]\r\n const latest = await consola.prompt(\"是否安装最新版本\", {\r\n type: \"confirm\",\r\n initial: true\r\n })\r\n const packageJson = readPackageJson()\r\n for (const pkg of packageNames) {\r\n await (latest ? addLatestDependencies : addDependencies)(packageJson, pkg)\r\n }\r\n writePackageJson(packageJson)\r\n const install = await consola.prompt(\"是否立即安装\", {\r\n type: \"select\",\r\n options: [\"yarn\", \"pnpm\", \"npm\", \"no\"],\r\n initial: \"yarn\"\r\n })\r\n if (install !== \"no\") {\r\n consola.start(\"正在安装\")\r\n exec(`${install} install`, err => {\r\n if (err) {\r\n consola.error(err)\r\n } else {\r\n consola.success(\"安装成功\")\r\n }\r\n })\r\n }\r\n })\r\n\r\nprogram\r\n .command(\"father\")\r\n .description(\"修改 father 项目配置\")\r\n .action(async () => {\r\n let packageJson = readPackageJson()\r\n packageJson.publishConfig ??= {}\r\n packageJson.publishConfig.access = \"public\"\r\n packageJson.publishConfig.registry = \"https://registry.npmjs.org/\"\r\n packageJson.publishConfig = sortArrayOrObject(packageJson.publishConfig)\r\n packageJson.files ??= []\r\n if (!packageJson.files.includes(\"src\")) packageJson.files.push(\"src\")\r\n packageJson.files = sortArrayOrObject(packageJson.files)\r\n const dependencies = packageJson.dependencies\r\n const devDependencies = packageJson.devDependencies\r\n const peerDependencies = packageJson.peerDependencies\r\n if (packageJson.repository?.url && !packageJson.repository.url.startsWith(\"git+\")) packageJson.repository.url = `git+${packageJson.repository.url}.git`\r\n packageJson.repository ??= {}\r\n packageJson.repository.type ??= \"git\"\r\n packageJson.repository.url ??= `git+https://github.com/1adybug/${packageJson.name}.git`\r\n if (!packageJson.types) {\r\n packageJson = Object.entries(packageJson).reduce((prev: Record<string, any>, [key, value]) => {\r\n prev[key] = value\r\n if (Object.hasOwn(packageJson, \"module\")) {\r\n if (key === \"module\") prev.types = value.replace(/\\.js$/, \".d.ts\")\r\n } else if (Object.hasOwn(packageJson, \"main\")) {\r\n if (key === \"main\") prev.types = value.replace(/\\.js$/, \".d.ts\")\r\n }\r\n return prev\r\n }, {})\r\n }\r\n delete packageJson.dependencies\r\n delete packageJson.devDependencies\r\n delete packageJson.peerDependencies\r\n packageJson.dependencies = sortArrayOrObject(dependencies)\r\n packageJson.devDependencies = sortArrayOrObject(devDependencies)\r\n packageJson.peerDependencies = sortArrayOrObject(peerDependencies)\r\n const fatherrcCode = `import { defineConfig } from \"father\"\r\n\r\nexport default defineConfig({\r\n esm: {},\r\n cjs: {},\r\n targets: {\r\n node: 18,\r\n chrome: 100\r\n },\r\n sourcemap: true\r\n})\r\n`\r\n const gitignore = readFileSync(\".gitignore\", \"utf-8\")\r\n .split(\"\\n\")\r\n .map(line => line.trim())\r\n .filter(Boolean)\r\n if (!gitignore.some(line => /^\\/?dist$/.test(line))) gitignore.push(\"dist\")\r\n if (!gitignore.some(line => /^\\/?yarn\\.lock$/.test(line))) gitignore.push(\"yarn.lock\")\r\n if (!gitignore.some(line => /^\\/?pnpm-lock\\.yaml$/.test(line))) gitignore.push(\"pnpm-lock.yaml\")\r\n if (!gitignore.some(line => /^\\/?node_modules$/.test(line))) gitignore.push(\"node_modules\")\r\n if (!gitignore.some(line => /^\\/?package-lock\\.json$/.test(line))) gitignore.push(\"package-lock.json\")\r\n if (!gitignore.some(line => /^\\/?yarn-error\\.log$/.test(line))) gitignore.push(\"yarn-error.log\")\r\n writePackageJson(packageJson)\r\n writeFileSync(\".fatherrc.ts\", fatherrcCode)\r\n writeFileSync(\".gitignore\", gitignore.join(\"\\n\"))\r\n setTsConfig(\"target\", Target.ESNext)\r\n })\r\n\r\nprogram\r\n .command(\"upgrade\")\r\n .description(\"升级所有依赖\")\r\n .action(async () => {\r\n const level = (await consola.prompt(\"请选择升级的级别\", {\r\n type: \"select\",\r\n options: [\"major\", \"minor\", \"patch\"]\r\n })) as \"major\" | \"minor\" | \"patch\"\r\n const packageJson = readPackageJson()\r\n const upgrades: { package: string; oldVersion: string; newVersion: string }[] = []\r\n if (packageJson.dependencies) {\r\n const pkgs = Object.keys(packageJson.dependencies)\r\n for (let i = 0; i < pkgs.length; i++) {\r\n const pkg = pkgs[i]\r\n const rv = packageJson.dependencies[pkg]\r\n const s = rv.match(/^\\D*/)![0]\r\n const cv = getVersionFromRequiredVersion(rv)\r\n const version = await getPackageUpgradeVersion(pkg, cv, level)\r\n if (!version) continue\r\n packageJson.dependencies[pkg] = `${s}${version}`\r\n upgrades.push({ package: pkg, oldVersion: cv, newVersion: version })\r\n }\r\n }\r\n if (packageJson.devDependencies) {\r\n const pkgs = Object.keys(packageJson.devDependencies)\r\n for (let i = 0; i < pkgs.length; i++) {\r\n const pkg = pkgs[i]\r\n const rv = packageJson.devDependencies[pkg]\r\n const s = rv.match(/^\\D*/)![0]\r\n const cv = getVersionFromRequiredVersion(rv)\r\n const version = await getPackageUpgradeVersion(pkg, cv, level)\r\n if (!version) continue\r\n packageJson.devDependencies[pkg] = `${s}${version}`\r\n upgrades.push({ package: pkg, oldVersion: cv, newVersion: version })\r\n }\r\n }\r\n upgrades.forEach(upgrade => {\r\n consola.success(`${upgrade.package} ${upgrade.oldVersion} => ${upgrade.newVersion}`)\r\n })\r\n writePackageJson(packageJson)\r\n })\r\n\r\nprogram.parse()\r\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["tailwind", "consola", "module", "pkg"]
|
|
7
7
|
}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -7,10 +7,14 @@ export declare function getPackageJsonPath(path?: string): string;
|
|
|
7
7
|
export declare function getTsConfigJsonPath(path?: string): string;
|
|
8
8
|
/** 获取包的最新版本 */
|
|
9
9
|
export declare function getPackageLatestVersion(packageName: string): Promise<string>;
|
|
10
|
+
export declare function getPackageVersions(packageName: string): Promise<string[]>;
|
|
11
|
+
export declare function getVersionFromRequiredVersion(requiredVersion: string): string;
|
|
12
|
+
export declare function getVersionNum(version: string): number[];
|
|
13
|
+
export declare function getPackageUpgradeVersion(packageName: string, version: string, level: "major" | "minor" | "patch"): Promise<string | undefined>;
|
|
10
14
|
/** 读取 package.json */
|
|
11
15
|
export declare function readPackageJson(path?: string): Record<string, any>;
|
|
12
16
|
/** 读取 tsconfig.json */
|
|
13
|
-
export declare function
|
|
17
|
+
export declare function readTsConfigJSON(path?: string): Record<string, any>;
|
|
14
18
|
/** 写入依赖 */
|
|
15
19
|
export declare function addDependencies(packageJson: Record<string, any>, packageName: string, version?: string): Promise<void>;
|
|
16
20
|
/** 写入最新依赖 */
|
package/dist/utils/index.js
CHANGED
|
@@ -43,12 +43,16 @@ __export(utils_exports, {
|
|
|
43
43
|
getFiles: () => getFiles,
|
|
44
44
|
getPackageJsonPath: () => getPackageJsonPath,
|
|
45
45
|
getPackageLatestVersion: () => getPackageLatestVersion,
|
|
46
|
+
getPackageUpgradeVersion: () => getPackageUpgradeVersion,
|
|
47
|
+
getPackageVersions: () => getPackageVersions,
|
|
46
48
|
getTsConfigJsonPath: () => getTsConfigJsonPath,
|
|
49
|
+
getVersionFromRequiredVersion: () => getVersionFromRequiredVersion,
|
|
50
|
+
getVersionNum: () => getVersionNum,
|
|
47
51
|
prettierConfig: () => prettierConfig,
|
|
48
52
|
prettierConfigText: () => prettierConfigText,
|
|
49
53
|
prettierConfigTextWithTailwind: () => prettierConfigTextWithTailwind,
|
|
50
54
|
readPackageJson: () => readPackageJson,
|
|
51
|
-
|
|
55
|
+
readTsConfigJSON: () => readTsConfigJSON,
|
|
52
56
|
removeComment: () => removeComment,
|
|
53
57
|
removeESLint: () => removeESLint,
|
|
54
58
|
setTsConfig: () => setTsConfig,
|
|
@@ -60,9 +64,9 @@ __export(utils_exports, {
|
|
|
60
64
|
module.exports = __toCommonJS(utils_exports);
|
|
61
65
|
var import_consola = __toESM(require("consola"));
|
|
62
66
|
var import_fs = require("fs");
|
|
67
|
+
var JSON5 = __toESM(require("json5"));
|
|
63
68
|
var import_path = require("path");
|
|
64
69
|
var import_process = require("process");
|
|
65
|
-
var JSON5 = __toESM(require("json5"));
|
|
66
70
|
function getAbsolutePath(path) {
|
|
67
71
|
return (0, import_path.isAbsolute)(path) ? path : (0, import_path.join)((0, import_process.cwd)(), path);
|
|
68
72
|
}
|
|
@@ -74,21 +78,58 @@ function getTsConfigJsonPath(path) {
|
|
|
74
78
|
}
|
|
75
79
|
async function getPackageLatestVersion(packageName) {
|
|
76
80
|
try {
|
|
77
|
-
import_consola.default.start(`开始获取 ${packageName} 最新版本号...`);
|
|
78
81
|
const url = `https://registry.npmjs.org/${packageName}/latest`;
|
|
79
82
|
const response = await fetch(url);
|
|
80
83
|
const data = await response.json();
|
|
81
|
-
import_consola.default.success(`获取 ${packageName} 最新版本号成功`);
|
|
82
84
|
return data.version;
|
|
83
85
|
} catch (error) {
|
|
84
86
|
import_consola.default.fail(`获取 ${packageName} 最新版本号失败`);
|
|
85
87
|
(0, import_process.exit)();
|
|
86
88
|
}
|
|
87
89
|
}
|
|
90
|
+
async function getPackageVersions(packageName) {
|
|
91
|
+
try {
|
|
92
|
+
const url = `https://registry.npmjs.org/${packageName}`;
|
|
93
|
+
const response = await fetch(url);
|
|
94
|
+
const data = await response.json();
|
|
95
|
+
return Object.keys(data.versions);
|
|
96
|
+
} catch (error) {
|
|
97
|
+
import_consola.default.fail(`获取 ${packageName} 版本号失败`);
|
|
98
|
+
(0, import_process.exit)();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
function getVersionFromRequiredVersion(requiredVersion) {
|
|
102
|
+
return requiredVersion.replace(/^\D*/, "");
|
|
103
|
+
}
|
|
104
|
+
function getVersionNum(version) {
|
|
105
|
+
const nums = version.split(".").map(Number);
|
|
106
|
+
if (nums.some((num) => !Number.isInteger(num) || num < 0) || nums.length < 3) {
|
|
107
|
+
import_consola.default.fail(`无效的版本号 ${version}`);
|
|
108
|
+
(0, import_process.exit)();
|
|
109
|
+
}
|
|
110
|
+
return nums;
|
|
111
|
+
}
|
|
112
|
+
async function getPackageUpgradeVersion(packageName, version, level) {
|
|
113
|
+
if (level === "major") {
|
|
114
|
+
const latestVersion = await getPackageLatestVersion(packageName);
|
|
115
|
+
if (version === latestVersion)
|
|
116
|
+
return void 0;
|
|
117
|
+
return latestVersion;
|
|
118
|
+
}
|
|
119
|
+
const [major, minor, patch] = getVersionNum(version);
|
|
120
|
+
const versions = await getPackageVersions(packageName);
|
|
121
|
+
return versions.find((item, index) => {
|
|
122
|
+
const [a, b, c] = getVersionNum(item);
|
|
123
|
+
if (index === 0) {
|
|
124
|
+
if (a > major && level === "minor" || a >= major && b > minor && level === "patch")
|
|
125
|
+
import_consola.default.log(`发现 ${packageName} 的新版本 ${item}`);
|
|
126
|
+
}
|
|
127
|
+
return level === "minor" && a === major && b > minor || level === "patch" && a === major && b === minor && c > patch;
|
|
128
|
+
});
|
|
129
|
+
}
|
|
88
130
|
function readPackageJson(path) {
|
|
89
131
|
try {
|
|
90
132
|
const result = JSON.parse((0, import_fs.readFileSync)(getPackageJsonPath(path), "utf-8"));
|
|
91
|
-
import_consola.default.success("读取 package.json 成功");
|
|
92
133
|
return result;
|
|
93
134
|
} catch (error) {
|
|
94
135
|
import_consola.default.error(error);
|
|
@@ -96,10 +137,9 @@ function readPackageJson(path) {
|
|
|
96
137
|
(0, import_process.exit)();
|
|
97
138
|
}
|
|
98
139
|
}
|
|
99
|
-
function
|
|
140
|
+
function readTsConfigJSON(path) {
|
|
100
141
|
try {
|
|
101
142
|
const result = JSON5.parse((0, import_fs.readFileSync)(getTsConfigJsonPath(path), "utf-8"));
|
|
102
|
-
import_consola.default.success("读取 tsconfig.json 成功");
|
|
103
143
|
return result;
|
|
104
144
|
} catch (error) {
|
|
105
145
|
import_consola.default.error(error);
|
|
@@ -384,7 +424,7 @@ var ModuleResolution = /* @__PURE__ */ ((ModuleResolution2) => {
|
|
|
384
424
|
return ModuleResolution2;
|
|
385
425
|
})(ModuleResolution || {});
|
|
386
426
|
function setTsConfig(key, value) {
|
|
387
|
-
const tsconfig =
|
|
427
|
+
const tsconfig = readTsConfigJSON();
|
|
388
428
|
if (value === void 0) {
|
|
389
429
|
delete tsconfig.compilerOptions[key];
|
|
390
430
|
} else {
|
|
@@ -452,12 +492,16 @@ function sortArrayOrObject(data) {
|
|
|
452
492
|
getFiles,
|
|
453
493
|
getPackageJsonPath,
|
|
454
494
|
getPackageLatestVersion,
|
|
495
|
+
getPackageUpgradeVersion,
|
|
496
|
+
getPackageVersions,
|
|
455
497
|
getTsConfigJsonPath,
|
|
498
|
+
getVersionFromRequiredVersion,
|
|
499
|
+
getVersionNum,
|
|
456
500
|
prettierConfig,
|
|
457
501
|
prettierConfigText,
|
|
458
502
|
prettierConfigTextWithTailwind,
|
|
459
503
|
readPackageJson,
|
|
460
|
-
|
|
504
|
+
readTsConfigJSON,
|
|
461
505
|
removeComment,
|
|
462
506
|
removeESLint,
|
|
463
507
|
setTsConfig,
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/utils/index.ts"],
|
|
4
|
-
"sourcesContent": ["import consola from \"consola\"\r\nimport { Stats, readFileSync, readdirSync, statSync, unlinkSync, writeFileSync } from \"fs\"\r\nimport { ParsedPath, isAbsolute, join, parse } from \"path\"\r\nimport { Config } from \"prettier\"\r\nimport { cwd, exit } from \"process\"\r\nimport * as JSON5 from \"json5\"\r\n\r\nfunction getAbsolutePath(path: string) {\r\n return isAbsolute(path) ? path : join(cwd(), path)\r\n}\r\n\r\nexport function getPackageJsonPath(path?: string) {\r\n return join(getAbsolutePath(path ?? cwd()), \"package.json\")\r\n}\r\n\r\nexport function getTsConfigJsonPath(path?: string) {\r\n return join(getAbsolutePath(path ?? cwd()), \"tsconfig.json\")\r\n}\r\n\r\n/** 获取包的最新版本 */\r\nexport async function getPackageLatestVersion(packageName: string) {\r\n try {\r\n consola.start(`开始获取 ${packageName} 最新版本号...`)\r\n const url = `https://registry.npmjs.org/${packageName}/latest`\r\n const response = await fetch(url)\r\n const data = await response.json()\r\n consola.success(`获取 ${packageName} 最新版本号成功`)\r\n return data.version as string\r\n } catch (error) {\r\n consola.fail(`获取 ${packageName} 最新版本号失败`)\r\n exit()\r\n }\r\n}\r\n\r\n/** 读取 package.json */\r\nexport function readPackageJson(path?: string): Record<string, any> {\r\n try {\r\n const result = JSON.parse(readFileSync(getPackageJsonPath(path), \"utf-8\"))\r\n consola.success(\"读取 package.json 成功\")\r\n return result\r\n } catch (error) {\r\n consola.error(error)\r\n consola.fail(\"读取 package.json 失败\")\r\n exit()\r\n }\r\n}\r\n\r\n/** 读取 tsconfig.json */\r\nexport function readTsconfigJSON(path?: string): Record<string, any> {\r\n try {\r\n const result = JSON5.parse(readFileSync(getTsConfigJsonPath(path), \"utf-8\"))\r\n consola.success(\"读取 tsconfig.json 成功\")\r\n return result\r\n } catch (error) {\r\n consola.error(error)\r\n consola.fail(\"读取 tsconfig.json 失败\")\r\n exit()\r\n }\r\n}\r\n\r\n/** 写入依赖 */\r\nexport async function addDependencies(packageJson: Record<string, any>, packageName: string, version?: string) {\r\n try {\r\n packageJson.dependencies ??= {}\r\n packageJson.dependencies[packageName] ??= version?.trim() || `^${await getPackageLatestVersion(packageName)}`\r\n const keys = Object.keys(packageJson.dependencies)\r\n keys.sort()\r\n const sortedDependencies: Record<string, string> = {}\r\n for (const key of keys) {\r\n sortedDependencies[key] = packageJson.dependencies[key]\r\n }\r\n packageJson.dependencies = sortedDependencies\r\n consola.success(`添加 ${packageName} 至依赖成功`)\r\n } catch (error) {\r\n consola.fail(`添加 ${packageName} 至依赖失败`)\r\n exit()\r\n }\r\n}\r\n\r\n/** 写入最新依赖 */\r\nexport async function addLatestDependencies(packageJson: Record<string, any>, packageName: string) {\r\n try {\r\n packageJson.dependencies ??= {}\r\n packageJson.dependencies[packageName] = `^${await getPackageLatestVersion(packageName)}`\r\n const keys = Object.keys(packageJson.dependencies)\r\n keys.sort()\r\n const sortedDependencies: Record<string, string> = {}\r\n for (const key of keys) {\r\n sortedDependencies[key] = packageJson.dependencies[key]\r\n }\r\n packageJson.dependencies = sortedDependencies\r\n consola.success(`添加 ${packageName} 至依赖成功`)\r\n } catch (error) {\r\n consola.fail(`添加 ${packageName} 至依赖失败`)\r\n exit()\r\n }\r\n}\r\n\r\n/** 写入开发依赖 */\r\nexport async function addDevDependencies(packageJson: Record<string, any>, packageName: string, version?: string) {\r\n try {\r\n packageJson.devDependencies ??= {}\r\n packageJson.devDependencies[packageName] ??= version?.trim() || `^${await getPackageLatestVersion(packageName)}`\r\n const keys = Object.keys(packageJson.devDependencies)\r\n keys.sort()\r\n const sortedDevDependencies: Record<string, string> = {}\r\n for (const key of keys) {\r\n sortedDevDependencies[key] = packageJson.devDependencies[key]\r\n }\r\n packageJson.devDependencies = sortedDevDependencies\r\n consola.success(`添加 ${packageName} 至开发依赖成功`)\r\n } catch (error) {\r\n consola.fail(`添加 ${packageName} 至开发依赖失败`)\r\n exit()\r\n }\r\n}\r\n\r\n/** 写入最新开发依赖 */\r\nexport async function addLatestDevDependencies(packageJson: Record<string, any>, packageName: string) {\r\n try {\r\n packageJson.devDependencies ??= {}\r\n packageJson.devDependencies[packageName] = `^${await getPackageLatestVersion(packageName)}`\r\n const keys = Object.keys(packageJson.devDependencies)\r\n keys.sort()\r\n const sortedDevDependencies: Record<string, string> = {}\r\n for (const key of keys) {\r\n sortedDevDependencies[key] = packageJson.devDependencies[key]\r\n }\r\n packageJson.devDependencies = sortedDevDependencies\r\n consola.success(`添加 ${packageName} 至开发依赖成功`)\r\n } catch (error) {\r\n consola.fail(`添加 ${packageName} 至开发依赖失败`)\r\n exit()\r\n }\r\n}\r\n\r\n/** 写回 package.json */\r\nexport function writePackageJson(packageJson: Record<string, any>, path?: string) {\r\n try {\r\n writeFileSync(getPackageJsonPath(path), JSON.stringify(packageJson, undefined, 4), \"utf-8\")\r\n consola.success(\"修改 package.json 成功\")\r\n } catch (error) {\r\n consola.fail(\"修改 package.json 失败\")\r\n exit()\r\n }\r\n}\r\n\r\nexport interface GetFilesOptions {\r\n depth?: number\r\n exclude?: (path: ParsedPath, stats: Stats) => boolean\r\n}\r\n\r\nexport function getFiles(path: string, judge: (path: ParsedPath, stats: Stats) => boolean, depthOrOptions?: number | GetFilesOptions) {\r\n const result: string[] = []\r\n function _getFiles(path: string, judge: (path: ParsedPath, stats: Stats) => boolean, depthOrOptions?: number | GetFilesOptions) {\r\n const options: GetFilesOptions = typeof depthOrOptions === \"number\" ? { depth: depthOrOptions } : depthOrOptions ?? {}\r\n const { depth, exclude } = options\r\n path = getAbsolutePath(path)\r\n const files = readdirSync(path)\r\n for (const file of files) {\r\n const filePath = join(path, file)\r\n const parsedPath = parse(filePath)\r\n const stat = statSync(filePath)\r\n if (judge(parsedPath, stat)) {\r\n result.push(filePath)\r\n }\r\n if (stat.isDirectory() && (!exclude || exclude(parsedPath, stat)) && (depth === undefined || depth > 0)) {\r\n getFiles(filePath, judge, depth === undefined ? undefined : depth - 1)\r\n }\r\n }\r\n }\r\n _getFiles(path, judge, depthOrOptions)\r\n return result\r\n}\r\n\r\n/** 删除 ESLint 配置文件 */\r\nexport function removeESLint() {\r\n try {\r\n const files = getFiles(cwd(), (path, stats) => /\\.eslintrc\\.[cm]?js/.test(path.base) && stats.isFile(), {\r\n depth: 1,\r\n exclude: path => path.base !== \"node_modules\"\r\n })\r\n files.forEach(file => {\r\n try {\r\n unlinkSync(file)\r\n } catch (error) {\r\n consola.fail(`删除 ${file} 失败`)\r\n }\r\n })\r\n consola.success(\"删除 ESLint 配置文件成功\")\r\n } catch (error) {\r\n consola.error(error)\r\n consola.fail(\"获取 ESLint 配置文件列表失败\")\r\n }\r\n try {\r\n const pkg = readPackageJson()\r\n Object.keys(pkg.dependencies).forEach(key => {\r\n if (key.includes(\"eslint\")) delete pkg.dependencies[key]\r\n })\r\n Object.keys(pkg.devDependencies).forEach(key => {\r\n if (key.includes(\"eslint\")) delete pkg.devDependencies[key]\r\n })\r\n writePackageJson(pkg)\r\n consola.success(\"删除 ESLint 依赖成功\")\r\n } catch (error) {\r\n consola.fail(\"删除 ESLint 依赖失败\")\r\n }\r\n}\r\n\r\nexport function vite() {\r\n setTsConfig(\"noUnusedLocals\")\r\n setTsConfig(\"noUnusedParameters\")\r\n const pkg = readPackageJson()\r\n pkg.scripts.dev = \"vite --host\"\r\n writePackageJson(pkg)\r\n}\r\n\r\n/** 添加 tailwind.config.js 配置成功 */\r\nexport function addTailwindConfig() {\r\n try {\r\n writeFileSync(\r\n getAbsolutePath(\"tailwind.config.js\"),\r\n `/** @type {import('tailwindcss').Config} */\r\nexport default {\r\n content: [\r\n \"./index.html\",\r\n \"./src/**/*.{js,ts,jsx,tsx}\",\r\n ],\r\n theme: {\r\n extend: {},\r\n },\r\n plugins: [],\r\n}`,\r\n \"utf-8\"\r\n )\r\n consola.success(\"添加 tailwind.config.js 配置成功\")\r\n } catch (error) {\r\n consola.fail(\"添加 tailwind.config.js 配置失败\")\r\n }\r\n}\r\n\r\n/** 添加 postcss.config.js 配置成功 */\r\nexport function addPostCSSConfig() {\r\n try {\r\n writeFileSync(\r\n getAbsolutePath(\"postcss.config.js\"),\r\n `export default {\r\n plugins: {\r\n tailwindcss: {},\r\n autoprefixer: {}\r\n }\r\n }`,\r\n \"utf-8\"\r\n )\r\n consola.success(\"添加 postcss.config.js 配置成功\")\r\n } catch (error) {\r\n consola.fail(\"添加 postcss.config.js 配置失败\")\r\n }\r\n}\r\n\r\n/** 添加 tailwind 至 index.css 成功 */\r\nexport function addTailwindToCSS() {\r\n try {\r\n const css = readFileSync(getAbsolutePath(\"./src/index.css\"), \"utf-8\")\r\n writeFileSync(\r\n getAbsolutePath(\"./src/index.css\"),\r\n `@tailwind base; \r\n@tailwind components;\r\n@tailwind utilities;\r\n\r\n${css}`,\r\n \"utf-8\"\r\n )\r\n consola.success(\"添加 tailwind 至 index.css 成功\")\r\n } catch (error) {\r\n consola.fail(\"添加 tailwind 至 index.css 失败\")\r\n }\r\n}\r\n\r\nexport const prettierConfig: Config = {\r\n semi: false,\r\n tabWidth: 4,\r\n arrowParens: \"avoid\",\r\n printWidth: 800,\r\n trailingComma: \"none\"\r\n}\r\n\r\nexport const prettierConfigText = `module.exports = ${JSON.stringify(prettierConfig, undefined, 4)}`\r\n\r\nexport const prettierConfigTextWithTailwind = `module.exports = ${JSON.stringify({ plugins: [\"prettier-plugin-tailwindcss\"], ...prettierConfig }, undefined, 4)}`\r\n\r\n/** 添加 prettier 配置成功 */\r\nexport function addPrettierConfig(tailwind?: boolean) {\r\n try {\r\n writeFileSync(getAbsolutePath(\"./prettier.config.cjs\"), tailwind ? prettierConfigTextWithTailwind : prettierConfigText)\r\n consola.success(\"添加 prettier 配置成功\")\r\n } catch (error) {\r\n consola.fail(\"添加 prettier 配置失败\")\r\n }\r\n}\r\n\r\n/** 配置 tailwind */\r\nexport async function tailwind() {\r\n const pkg = readPackageJson()\r\n await addDevDependencies(pkg, \"tailwindcss\")\r\n await addDevDependencies(pkg, \"autoprefixer\")\r\n await addDevDependencies(pkg, \"postcss\")\r\n await addDevDependencies(pkg, \"prettier\")\r\n await addDevDependencies(pkg, \"prettier-plugin-tailwindcss\")\r\n writePackageJson(pkg)\r\n addTailwindConfig()\r\n addPostCSSConfig()\r\n addTailwindToCSS()\r\n addPrettierConfig(true)\r\n}\r\n\r\nexport function removeComment(path: string) {\r\n try {\r\n const text = readFileSync(getAbsolutePath(path), \"utf-8\")\r\n const newText = text.replace(/^ *?\\/\\/.*?$/gm, \"\")\r\n writeFileSync(getAbsolutePath(path), newText, \"utf-8\")\r\n consola.success(\"删除注释成功\")\r\n } catch (error) {\r\n consola.fail(\"删除注释失败\")\r\n }\r\n}\r\n\r\nexport enum Target {\r\n ES2015 = \"ES2015\",\r\n ES2016 = \"ES2016\",\r\n ES2017 = \"ES2017\",\r\n ES2018 = \"ES2018\",\r\n ES2019 = \"ES2019\",\r\n ES2020 = \"ES2020\",\r\n ES2021 = \"ES2021\",\r\n ES2022 = \"ES2022\",\r\n ES2023 = \"ES2023\",\r\n ES3 = \"ES3\",\r\n ES5 = \"ES5\",\r\n ES6 = \"ES6\",\r\n ESNext = \"ESNext\"\r\n}\r\n\r\nexport enum Module {\r\n AMD = \"AMD\",\r\n CommonJS = \"CommonJS\",\r\n ES2015 = \"ES2015\",\r\n ES2020 = \"ES2020\",\r\n ES2022 = \"ES2022\",\r\n ES6 = \"ES6\",\r\n ESNext = \"ESNext\",\r\n Node16 = \"Node16\",\r\n NodeNext = \"NodeNext\",\r\n None = \"None\",\r\n System = \"System\",\r\n UMD = \"UMD\"\r\n}\r\n\r\nexport enum ModuleResolution {\r\n Bundler = \"Bundler\",\r\n Classic = \"Classic\",\r\n Node = \"Node\",\r\n Node10 = \"Node10\",\r\n Node16 = \"Node16\",\r\n NodeNext = \"NodeNext\"\r\n}\r\n\r\nexport function setTsConfig(key: string, value?: string | undefined) {\r\n const tsconfig = readTsconfigJSON()\r\n if (value === undefined) {\r\n delete tsconfig.compilerOptions[key]\r\n } else {\r\n if (key === \"target\") {\r\n const t = Object.values(Target).find(t => t.toLowerCase() === value.trim().toLowerCase())\r\n if (!t) {\r\n consola.fail(\"无效的 target 选项\")\r\n exit()\r\n }\r\n tsconfig.compilerOptions.target = t\r\n } else if (key === \"module\") {\r\n const m = Object.values(Module).find(m => m.toLowerCase() === value.trim().toLowerCase())\r\n if (!m) {\r\n consola.fail(\"无效的 module 选项\")\r\n exit()\r\n }\r\n tsconfig.compilerOptions.module = m\r\n } else if (key === \"moduleResolution\") {\r\n const mr = Object.values(ModuleResolution).find(mr => mr.toLowerCase() === value.trim().toLowerCase())\r\n if (!mr) {\r\n consola.fail(\"无效的 moduleResolution 选项\")\r\n exit()\r\n }\r\n tsconfig.compilerOptions.moduleResolution = mr\r\n } else {\r\n consola.fail(`暂不支持 ${key} 项`)\r\n exit()\r\n }\r\n }\r\n writeFileSync(getTsConfigJsonPath(), JSON.stringify(tsconfig, undefined, 4), \"utf-8\")\r\n consola.success(`修改 ${key} 成功`)\r\n}\r\n\r\nexport function sortArrayOrObject(data: any) {\r\n if (typeof data !== \"object\" || data === null) return data\r\n if (Array.isArray(data)) {\r\n const _data = [...data]\r\n _data.sort()\r\n return _data\r\n }\r\n if (Object.getPrototypeOf(data) === Object.prototype) {\r\n const keys = Object.keys(data)\r\n keys.sort()\r\n const _data: Record<string, any> = {}\r\n for (const key of keys) {\r\n _data[key] = data[key]\r\n }\r\n return _data\r\n }\r\n return data\r\n}"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAoB;AACpB,gBAAsF;AACtF,kBAAoD;AAEpD,qBAA0B;
|
|
4
|
+
"sourcesContent": ["import consola from \"consola\"\r\nimport { Stats, readFileSync, readdirSync, statSync, unlinkSync, writeFileSync } from \"fs\"\r\nimport * as JSON5 from \"json5\"\r\nimport { ParsedPath, isAbsolute, join, parse } from \"path\"\r\nimport { Config } from \"prettier\"\r\nimport { cwd, exit } from \"process\"\r\n\r\nfunction getAbsolutePath(path: string) {\r\n return isAbsolute(path) ? path : join(cwd(), path)\r\n}\r\n\r\nexport function getPackageJsonPath(path?: string) {\r\n return join(getAbsolutePath(path ?? cwd()), \"package.json\")\r\n}\r\n\r\nexport function getTsConfigJsonPath(path?: string) {\r\n return join(getAbsolutePath(path ?? cwd()), \"tsconfig.json\")\r\n}\r\n\r\n/** 获取包的最新版本 */\r\nexport async function getPackageLatestVersion(packageName: string) {\r\n try {\r\n const url = `https://registry.npmjs.org/${packageName}/latest`\r\n const response = await fetch(url)\r\n const data = await response.json()\r\n return data.version as string\r\n } catch (error) {\r\n consola.fail(`获取 ${packageName} 最新版本号失败`)\r\n exit()\r\n }\r\n}\r\n\r\nexport async function getPackageVersions(packageName: string) {\r\n try {\r\n const url = `https://registry.npmjs.org/${packageName}`\r\n const response = await fetch(url)\r\n const data = await response.json()\r\n return Object.keys(data.versions) as string[]\r\n } catch (error) {\r\n consola.fail(`获取 ${packageName} 版本号失败`)\r\n exit()\r\n }\r\n}\r\n\r\nexport function getVersionFromRequiredVersion(requiredVersion: string) {\r\n return requiredVersion.replace(/^\\D*/, \"\")\r\n}\r\n\r\nexport function getVersionNum(version: string) {\r\n const nums = version.split(\".\").map(Number)\r\n if (nums.some(num => !Number.isInteger(num) || num < 0) || nums.length < 3) {\r\n consola.fail(`无效的版本号 ${version}`)\r\n exit()\r\n }\r\n return nums\r\n}\r\n\r\nexport async function getPackageUpgradeVersion(packageName: string, version: string, level: \"major\" | \"minor\" | \"patch\") {\r\n if (level === \"major\") {\r\n const latestVersion = await getPackageLatestVersion(packageName)\r\n if (version === latestVersion) return undefined\r\n return latestVersion\r\n }\r\n const [major, minor, patch] = getVersionNum(version)\r\n const versions = await getPackageVersions(packageName)\r\n return versions.find((item, index) => {\r\n const [a, b, c] = getVersionNum(item)\r\n if (index === 0) {\r\n if ((a > major && level === \"minor\") || (a >= major && b > minor && level === \"patch\")) consola.log(`发现 ${packageName} 的新版本 ${item}`)\r\n }\r\n return (level === \"minor\" && a === major && b > minor) || (level === \"patch\" && a === major && b === minor && c > patch)\r\n })\r\n}\r\n\r\n/** 读取 package.json */\r\nexport function readPackageJson(path?: string): Record<string, any> {\r\n try {\r\n const result = JSON.parse(readFileSync(getPackageJsonPath(path), \"utf-8\"))\r\n return result\r\n } catch (error) {\r\n consola.error(error)\r\n consola.fail(\"读取 package.json 失败\")\r\n exit()\r\n }\r\n}\r\n\r\n/** 读取 tsconfig.json */\r\nexport function readTsConfigJSON(path?: string): Record<string, any> {\r\n try {\r\n const result = JSON5.parse(readFileSync(getTsConfigJsonPath(path), \"utf-8\"))\r\n return result\r\n } catch (error) {\r\n consola.error(error)\r\n consola.fail(\"读取 tsconfig.json 失败\")\r\n exit()\r\n }\r\n}\r\n\r\n/** 写入依赖 */\r\nexport async function addDependencies(packageJson: Record<string, any>, packageName: string, version?: string) {\r\n try {\r\n packageJson.dependencies ??= {}\r\n packageJson.dependencies[packageName] ??= version?.trim() || `^${await getPackageLatestVersion(packageName)}`\r\n const keys = Object.keys(packageJson.dependencies)\r\n keys.sort()\r\n const sortedDependencies: Record<string, string> = {}\r\n for (const key of keys) {\r\n sortedDependencies[key] = packageJson.dependencies[key]\r\n }\r\n packageJson.dependencies = sortedDependencies\r\n consola.success(`添加 ${packageName} 至依赖成功`)\r\n } catch (error) {\r\n consola.fail(`添加 ${packageName} 至依赖失败`)\r\n exit()\r\n }\r\n}\r\n\r\n/** 写入最新依赖 */\r\nexport async function addLatestDependencies(packageJson: Record<string, any>, packageName: string) {\r\n try {\r\n packageJson.dependencies ??= {}\r\n packageJson.dependencies[packageName] = `^${await getPackageLatestVersion(packageName)}`\r\n const keys = Object.keys(packageJson.dependencies)\r\n keys.sort()\r\n const sortedDependencies: Record<string, string> = {}\r\n for (const key of keys) {\r\n sortedDependencies[key] = packageJson.dependencies[key]\r\n }\r\n packageJson.dependencies = sortedDependencies\r\n consola.success(`添加 ${packageName} 至依赖成功`)\r\n } catch (error) {\r\n consola.fail(`添加 ${packageName} 至依赖失败`)\r\n exit()\r\n }\r\n}\r\n\r\n/** 写入开发依赖 */\r\nexport async function addDevDependencies(packageJson: Record<string, any>, packageName: string, version?: string) {\r\n try {\r\n packageJson.devDependencies ??= {}\r\n packageJson.devDependencies[packageName] ??= version?.trim() || `^${await getPackageLatestVersion(packageName)}`\r\n const keys = Object.keys(packageJson.devDependencies)\r\n keys.sort()\r\n const sortedDevDependencies: Record<string, string> = {}\r\n for (const key of keys) {\r\n sortedDevDependencies[key] = packageJson.devDependencies[key]\r\n }\r\n packageJson.devDependencies = sortedDevDependencies\r\n consola.success(`添加 ${packageName} 至开发依赖成功`)\r\n } catch (error) {\r\n consola.fail(`添加 ${packageName} 至开发依赖失败`)\r\n exit()\r\n }\r\n}\r\n\r\n/** 写入最新开发依赖 */\r\nexport async function addLatestDevDependencies(packageJson: Record<string, any>, packageName: string) {\r\n try {\r\n packageJson.devDependencies ??= {}\r\n packageJson.devDependencies[packageName] = `^${await getPackageLatestVersion(packageName)}`\r\n const keys = Object.keys(packageJson.devDependencies)\r\n keys.sort()\r\n const sortedDevDependencies: Record<string, string> = {}\r\n for (const key of keys) {\r\n sortedDevDependencies[key] = packageJson.devDependencies[key]\r\n }\r\n packageJson.devDependencies = sortedDevDependencies\r\n consola.success(`添加 ${packageName} 至开发依赖成功`)\r\n } catch (error) {\r\n consola.fail(`添加 ${packageName} 至开发依赖失败`)\r\n exit()\r\n }\r\n}\r\n\r\n/** 写回 package.json */\r\nexport function writePackageJson(packageJson: Record<string, any>, path?: string) {\r\n try {\r\n writeFileSync(getPackageJsonPath(path), JSON.stringify(packageJson, undefined, 4), \"utf-8\")\r\n consola.success(\"修改 package.json 成功\")\r\n } catch (error) {\r\n consola.fail(\"修改 package.json 失败\")\r\n exit()\r\n }\r\n}\r\n\r\nexport interface GetFilesOptions {\r\n depth?: number\r\n exclude?: (path: ParsedPath, stats: Stats) => boolean\r\n}\r\n\r\nexport function getFiles(path: string, judge: (path: ParsedPath, stats: Stats) => boolean, depthOrOptions?: number | GetFilesOptions) {\r\n const result: string[] = []\r\n function _getFiles(path: string, judge: (path: ParsedPath, stats: Stats) => boolean, depthOrOptions?: number | GetFilesOptions) {\r\n const options: GetFilesOptions = typeof depthOrOptions === \"number\" ? { depth: depthOrOptions } : depthOrOptions ?? {}\r\n const { depth, exclude } = options\r\n path = getAbsolutePath(path)\r\n const files = readdirSync(path)\r\n for (const file of files) {\r\n const filePath = join(path, file)\r\n const parsedPath = parse(filePath)\r\n const stat = statSync(filePath)\r\n if (judge(parsedPath, stat)) {\r\n result.push(filePath)\r\n }\r\n if (stat.isDirectory() && (!exclude || exclude(parsedPath, stat)) && (depth === undefined || depth > 0)) {\r\n getFiles(filePath, judge, depth === undefined ? undefined : depth - 1)\r\n }\r\n }\r\n }\r\n _getFiles(path, judge, depthOrOptions)\r\n return result\r\n}\r\n\r\n/** 删除 ESLint 配置文件 */\r\nexport function removeESLint() {\r\n try {\r\n const files = getFiles(cwd(), (path, stats) => /\\.eslintrc\\.[cm]?js/.test(path.base) && stats.isFile(), {\r\n depth: 1,\r\n exclude: path => path.base !== \"node_modules\"\r\n })\r\n files.forEach(file => {\r\n try {\r\n unlinkSync(file)\r\n } catch (error) {\r\n consola.fail(`删除 ${file} 失败`)\r\n }\r\n })\r\n consola.success(\"删除 ESLint 配置文件成功\")\r\n } catch (error) {\r\n consola.error(error)\r\n consola.fail(\"获取 ESLint 配置文件列表失败\")\r\n }\r\n try {\r\n const pkg = readPackageJson()\r\n Object.keys(pkg.dependencies).forEach(key => {\r\n if (key.includes(\"eslint\")) delete pkg.dependencies[key]\r\n })\r\n Object.keys(pkg.devDependencies).forEach(key => {\r\n if (key.includes(\"eslint\")) delete pkg.devDependencies[key]\r\n })\r\n writePackageJson(pkg)\r\n consola.success(\"删除 ESLint 依赖成功\")\r\n } catch (error) {\r\n consola.fail(\"删除 ESLint 依赖失败\")\r\n }\r\n}\r\n\r\nexport function vite() {\r\n setTsConfig(\"noUnusedLocals\")\r\n setTsConfig(\"noUnusedParameters\")\r\n const pkg = readPackageJson()\r\n pkg.scripts.dev = \"vite --host\"\r\n writePackageJson(pkg)\r\n}\r\n\r\n/** 添加 tailwind.config.js 配置成功 */\r\nexport function addTailwindConfig() {\r\n try {\r\n writeFileSync(\r\n getAbsolutePath(\"tailwind.config.js\"),\r\n `/** @type {import('tailwindcss').Config} */\r\nexport default {\r\n content: [\r\n \"./index.html\",\r\n \"./src/**/*.{js,ts,jsx,tsx}\",\r\n ],\r\n theme: {\r\n extend: {},\r\n },\r\n plugins: [],\r\n}`,\r\n \"utf-8\"\r\n )\r\n consola.success(\"添加 tailwind.config.js 配置成功\")\r\n } catch (error) {\r\n consola.fail(\"添加 tailwind.config.js 配置失败\")\r\n }\r\n}\r\n\r\n/** 添加 postcss.config.js 配置成功 */\r\nexport function addPostCSSConfig() {\r\n try {\r\n writeFileSync(\r\n getAbsolutePath(\"postcss.config.js\"),\r\n `export default {\r\n plugins: {\r\n tailwindcss: {},\r\n autoprefixer: {}\r\n }\r\n }`,\r\n \"utf-8\"\r\n )\r\n consola.success(\"添加 postcss.config.js 配置成功\")\r\n } catch (error) {\r\n consola.fail(\"添加 postcss.config.js 配置失败\")\r\n }\r\n}\r\n\r\n/** 添加 tailwind 至 index.css 成功 */\r\nexport function addTailwindToCSS() {\r\n try {\r\n const css = readFileSync(getAbsolutePath(\"./src/index.css\"), \"utf-8\")\r\n writeFileSync(\r\n getAbsolutePath(\"./src/index.css\"),\r\n `@tailwind base; \r\n@tailwind components;\r\n@tailwind utilities;\r\n\r\n${css}`,\r\n \"utf-8\"\r\n )\r\n consola.success(\"添加 tailwind 至 index.css 成功\")\r\n } catch (error) {\r\n consola.fail(\"添加 tailwind 至 index.css 失败\")\r\n }\r\n}\r\n\r\nexport const prettierConfig: Config = {\r\n semi: false,\r\n tabWidth: 4,\r\n arrowParens: \"avoid\",\r\n printWidth: 800,\r\n trailingComma: \"none\"\r\n}\r\n\r\nexport const prettierConfigText = `module.exports = ${JSON.stringify(prettierConfig, undefined, 4)}`\r\n\r\nexport const prettierConfigTextWithTailwind = `module.exports = ${JSON.stringify({ plugins: [\"prettier-plugin-tailwindcss\"], ...prettierConfig }, undefined, 4)}`\r\n\r\n/** 添加 prettier 配置成功 */\r\nexport function addPrettierConfig(tailwind?: boolean) {\r\n try {\r\n writeFileSync(getAbsolutePath(\"./prettier.config.cjs\"), tailwind ? prettierConfigTextWithTailwind : prettierConfigText)\r\n consola.success(\"添加 prettier 配置成功\")\r\n } catch (error) {\r\n consola.fail(\"添加 prettier 配置失败\")\r\n }\r\n}\r\n\r\n/** 配置 tailwind */\r\nexport async function tailwind() {\r\n const pkg = readPackageJson()\r\n await addDevDependencies(pkg, \"tailwindcss\")\r\n await addDevDependencies(pkg, \"autoprefixer\")\r\n await addDevDependencies(pkg, \"postcss\")\r\n await addDevDependencies(pkg, \"prettier\")\r\n await addDevDependencies(pkg, \"prettier-plugin-tailwindcss\")\r\n writePackageJson(pkg)\r\n addTailwindConfig()\r\n addPostCSSConfig()\r\n addTailwindToCSS()\r\n addPrettierConfig(true)\r\n}\r\n\r\nexport function removeComment(path: string) {\r\n try {\r\n const text = readFileSync(getAbsolutePath(path), \"utf-8\")\r\n const newText = text.replace(/^ *?\\/\\/.*?$/gm, \"\")\r\n writeFileSync(getAbsolutePath(path), newText, \"utf-8\")\r\n consola.success(\"删除注释成功\")\r\n } catch (error) {\r\n consola.fail(\"删除注释失败\")\r\n }\r\n}\r\n\r\nexport enum Target {\r\n ES2015 = \"ES2015\",\r\n ES2016 = \"ES2016\",\r\n ES2017 = \"ES2017\",\r\n ES2018 = \"ES2018\",\r\n ES2019 = \"ES2019\",\r\n ES2020 = \"ES2020\",\r\n ES2021 = \"ES2021\",\r\n ES2022 = \"ES2022\",\r\n ES2023 = \"ES2023\",\r\n ES3 = \"ES3\",\r\n ES5 = \"ES5\",\r\n ES6 = \"ES6\",\r\n ESNext = \"ESNext\"\r\n}\r\n\r\nexport enum Module {\r\n AMD = \"AMD\",\r\n CommonJS = \"CommonJS\",\r\n ES2015 = \"ES2015\",\r\n ES2020 = \"ES2020\",\r\n ES2022 = \"ES2022\",\r\n ES6 = \"ES6\",\r\n ESNext = \"ESNext\",\r\n Node16 = \"Node16\",\r\n NodeNext = \"NodeNext\",\r\n None = \"None\",\r\n System = \"System\",\r\n UMD = \"UMD\"\r\n}\r\n\r\nexport enum ModuleResolution {\r\n Bundler = \"Bundler\",\r\n Classic = \"Classic\",\r\n Node = \"Node\",\r\n Node10 = \"Node10\",\r\n Node16 = \"Node16\",\r\n NodeNext = \"NodeNext\"\r\n}\r\n\r\nexport function setTsConfig(key: string, value?: string | undefined) {\r\n const tsconfig = readTsConfigJSON()\r\n if (value === undefined) {\r\n delete tsconfig.compilerOptions[key]\r\n } else {\r\n if (key === \"target\") {\r\n const t = Object.values(Target).find(t => t.toLowerCase() === value.trim().toLowerCase())\r\n if (!t) {\r\n consola.fail(\"无效的 target 选项\")\r\n exit()\r\n }\r\n tsconfig.compilerOptions.target = t\r\n } else if (key === \"module\") {\r\n const m = Object.values(Module).find(m => m.toLowerCase() === value.trim().toLowerCase())\r\n if (!m) {\r\n consola.fail(\"无效的 module 选项\")\r\n exit()\r\n }\r\n tsconfig.compilerOptions.module = m\r\n } else if (key === \"moduleResolution\") {\r\n const mr = Object.values(ModuleResolution).find(mr => mr.toLowerCase() === value.trim().toLowerCase())\r\n if (!mr) {\r\n consola.fail(\"无效的 moduleResolution 选项\")\r\n exit()\r\n }\r\n tsconfig.compilerOptions.moduleResolution = mr\r\n } else {\r\n consola.fail(`暂不支持 ${key} 项`)\r\n exit()\r\n }\r\n }\r\n writeFileSync(getTsConfigJsonPath(), JSON.stringify(tsconfig, undefined, 4), \"utf-8\")\r\n consola.success(`修改 ${key} 成功`)\r\n}\r\n\r\nexport function sortArrayOrObject(data: any) {\r\n if (typeof data !== \"object\" || data === null) return data\r\n if (Array.isArray(data)) {\r\n const _data = [...data]\r\n _data.sort()\r\n return _data\r\n }\r\n if (Object.getPrototypeOf(data) === Object.prototype) {\r\n const keys = Object.keys(data)\r\n keys.sort()\r\n const _data: Record<string, any> = {}\r\n for (const key of keys) {\r\n _data[key] = data[key]\r\n }\r\n return _data\r\n }\r\n return data\r\n}\r\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["consola", "path", "judge", "depthOrOptions", "tailwind", "Target", "Module", "ModuleResolution", "t", "m", "mr"]
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "zixulu",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"main": "dist/index.js",
|
|
5
|
-
"types": "dist/index.d.ts",
|
|
6
|
-
"bin": "dist/index.js",
|
|
7
|
-
"scripts": {
|
|
8
|
-
"dev": "father dev",
|
|
9
|
-
"build": "father build",
|
|
10
|
-
"build:deps": "father prebundle",
|
|
11
|
-
"prepublishOnly": "father doctor && npm run build"
|
|
12
|
-
},
|
|
13
|
-
"keywords": [],
|
|
14
|
-
"authors": [],
|
|
15
|
-
"license": "MIT",
|
|
16
|
-
"files": [
|
|
17
|
-
"compiled",
|
|
18
|
-
"dist",
|
|
19
|
-
"src"
|
|
20
|
-
],
|
|
21
|
-
"publishConfig": {
|
|
22
|
-
"access": "public",
|
|
23
|
-
"registry": "https://registry.npmjs.org/"
|
|
24
|
-
},
|
|
25
|
-
"repository": {
|
|
26
|
-
"type": "git",
|
|
27
|
-
"url": "git+https://github.com/1adybug/zixulu.git"
|
|
28
|
-
},
|
|
29
|
-
"dependencies": {
|
|
30
|
-
"commander": "^
|
|
31
|
-
"consola": "^3.2.3",
|
|
32
|
-
"json5": "^2.2.3",
|
|
33
|
-
"prettier": "^3.
|
|
34
|
-
},
|
|
35
|
-
"devDependencies": {
|
|
36
|
-
"@types/node": "^20.
|
|
37
|
-
"father": "^4.
|
|
38
|
-
}
|
|
39
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "zixulu",
|
|
3
|
+
"version": "1.8.0",
|
|
4
|
+
"main": "dist/index.js",
|
|
5
|
+
"types": "dist/index.d.ts",
|
|
6
|
+
"bin": "dist/index.js",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"dev": "father dev",
|
|
9
|
+
"build": "father build",
|
|
10
|
+
"build:deps": "father prebundle",
|
|
11
|
+
"prepublishOnly": "father doctor && npm run build"
|
|
12
|
+
},
|
|
13
|
+
"keywords": [],
|
|
14
|
+
"authors": [],
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"files": [
|
|
17
|
+
"compiled",
|
|
18
|
+
"dist",
|
|
19
|
+
"src"
|
|
20
|
+
],
|
|
21
|
+
"publishConfig": {
|
|
22
|
+
"access": "public",
|
|
23
|
+
"registry": "https://registry.npmjs.org/"
|
|
24
|
+
},
|
|
25
|
+
"repository": {
|
|
26
|
+
"type": "git",
|
|
27
|
+
"url": "git+https://github.com/1adybug/zixulu.git"
|
|
28
|
+
},
|
|
29
|
+
"dependencies": {
|
|
30
|
+
"commander": "^12.0.0",
|
|
31
|
+
"consola": "^3.2.3",
|
|
32
|
+
"json5": "^2.2.3",
|
|
33
|
+
"prettier": "^3.2.5"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@types/node": "^20.11.19",
|
|
37
|
+
"father": "^4.4.0"
|
|
38
|
+
}
|
|
39
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { Argument, Command } from "commander"
|
|
4
4
|
import consola from "consola"
|
|
5
5
|
import { resolve } from "path"
|
|
6
|
-
import { Module, ModuleResolution, Target, addDependencies, addLatestDependencies, addPrettierConfig, readPackageJson, removeComment, removeESLint, setTsConfig, sortArrayOrObject, tailwind, vite, writePackageJson } from "./utils"
|
|
6
|
+
import { Module, ModuleResolution, Target, addDependencies, addLatestDependencies, addPrettierConfig, getPackageUpgradeVersion, getVersionFromRequiredVersion, readPackageJson, removeComment, removeESLint, setTsConfig, sortArrayOrObject, tailwind, vite, writePackageJson } from "./utils"
|
|
7
7
|
import { exec } from "child_process"
|
|
8
8
|
import { readFileSync, writeFileSync } from "fs"
|
|
9
9
|
|
|
@@ -198,6 +198,49 @@ export default defineConfig({
|
|
|
198
198
|
writePackageJson(packageJson)
|
|
199
199
|
writeFileSync(".fatherrc.ts", fatherrcCode)
|
|
200
200
|
writeFileSync(".gitignore", gitignore.join("\n"))
|
|
201
|
+
setTsConfig("target", Target.ESNext)
|
|
202
|
+
})
|
|
203
|
+
|
|
204
|
+
program
|
|
205
|
+
.command("upgrade")
|
|
206
|
+
.description("升级所有依赖")
|
|
207
|
+
.action(async () => {
|
|
208
|
+
const level = (await consola.prompt("请选择升级的级别", {
|
|
209
|
+
type: "select",
|
|
210
|
+
options: ["major", "minor", "patch"]
|
|
211
|
+
})) as "major" | "minor" | "patch"
|
|
212
|
+
const packageJson = readPackageJson()
|
|
213
|
+
const upgrades: { package: string; oldVersion: string; newVersion: string }[] = []
|
|
214
|
+
if (packageJson.dependencies) {
|
|
215
|
+
const pkgs = Object.keys(packageJson.dependencies)
|
|
216
|
+
for (let i = 0; i < pkgs.length; i++) {
|
|
217
|
+
const pkg = pkgs[i]
|
|
218
|
+
const rv = packageJson.dependencies[pkg]
|
|
219
|
+
const s = rv.match(/^\D*/)![0]
|
|
220
|
+
const cv = getVersionFromRequiredVersion(rv)
|
|
221
|
+
const version = await getPackageUpgradeVersion(pkg, cv, level)
|
|
222
|
+
if (!version) continue
|
|
223
|
+
packageJson.dependencies[pkg] = `${s}${version}`
|
|
224
|
+
upgrades.push({ package: pkg, oldVersion: cv, newVersion: version })
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
if (packageJson.devDependencies) {
|
|
228
|
+
const pkgs = Object.keys(packageJson.devDependencies)
|
|
229
|
+
for (let i = 0; i < pkgs.length; i++) {
|
|
230
|
+
const pkg = pkgs[i]
|
|
231
|
+
const rv = packageJson.devDependencies[pkg]
|
|
232
|
+
const s = rv.match(/^\D*/)![0]
|
|
233
|
+
const cv = getVersionFromRequiredVersion(rv)
|
|
234
|
+
const version = await getPackageUpgradeVersion(pkg, cv, level)
|
|
235
|
+
if (!version) continue
|
|
236
|
+
packageJson.devDependencies[pkg] = `${s}${version}`
|
|
237
|
+
upgrades.push({ package: pkg, oldVersion: cv, newVersion: version })
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
upgrades.forEach(upgrade => {
|
|
241
|
+
consola.success(`${upgrade.package} ${upgrade.oldVersion} => ${upgrade.newVersion}`)
|
|
242
|
+
})
|
|
243
|
+
writePackageJson(packageJson)
|
|
201
244
|
})
|
|
202
245
|
|
|
203
246
|
program.parse()
|
package/src/utils/index.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import consola from "consola"
|
|
2
2
|
import { Stats, readFileSync, readdirSync, statSync, unlinkSync, writeFileSync } from "fs"
|
|
3
|
+
import * as JSON5 from "json5"
|
|
3
4
|
import { ParsedPath, isAbsolute, join, parse } from "path"
|
|
4
5
|
import { Config } from "prettier"
|
|
5
6
|
import { cwd, exit } from "process"
|
|
6
|
-
import * as JSON5 from "json5"
|
|
7
7
|
|
|
8
8
|
function getAbsolutePath(path: string) {
|
|
9
9
|
return isAbsolute(path) ? path : join(cwd(), path)
|
|
@@ -20,11 +20,9 @@ export function getTsConfigJsonPath(path?: string) {
|
|
|
20
20
|
/** 获取包的最新版本 */
|
|
21
21
|
export async function getPackageLatestVersion(packageName: string) {
|
|
22
22
|
try {
|
|
23
|
-
consola.start(`开始获取 ${packageName} 最新版本号...`)
|
|
24
23
|
const url = `https://registry.npmjs.org/${packageName}/latest`
|
|
25
24
|
const response = await fetch(url)
|
|
26
25
|
const data = await response.json()
|
|
27
|
-
consola.success(`获取 ${packageName} 最新版本号成功`)
|
|
28
26
|
return data.version as string
|
|
29
27
|
} catch (error) {
|
|
30
28
|
consola.fail(`获取 ${packageName} 最新版本号失败`)
|
|
@@ -32,11 +30,52 @@ export async function getPackageLatestVersion(packageName: string) {
|
|
|
32
30
|
}
|
|
33
31
|
}
|
|
34
32
|
|
|
33
|
+
export async function getPackageVersions(packageName: string) {
|
|
34
|
+
try {
|
|
35
|
+
const url = `https://registry.npmjs.org/${packageName}`
|
|
36
|
+
const response = await fetch(url)
|
|
37
|
+
const data = await response.json()
|
|
38
|
+
return Object.keys(data.versions) as string[]
|
|
39
|
+
} catch (error) {
|
|
40
|
+
consola.fail(`获取 ${packageName} 版本号失败`)
|
|
41
|
+
exit()
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export function getVersionFromRequiredVersion(requiredVersion: string) {
|
|
46
|
+
return requiredVersion.replace(/^\D*/, "")
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export function getVersionNum(version: string) {
|
|
50
|
+
const nums = version.split(".").map(Number)
|
|
51
|
+
if (nums.some(num => !Number.isInteger(num) || num < 0) || nums.length < 3) {
|
|
52
|
+
consola.fail(`无效的版本号 ${version}`)
|
|
53
|
+
exit()
|
|
54
|
+
}
|
|
55
|
+
return nums
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export async function getPackageUpgradeVersion(packageName: string, version: string, level: "major" | "minor" | "patch") {
|
|
59
|
+
if (level === "major") {
|
|
60
|
+
const latestVersion = await getPackageLatestVersion(packageName)
|
|
61
|
+
if (version === latestVersion) return undefined
|
|
62
|
+
return latestVersion
|
|
63
|
+
}
|
|
64
|
+
const [major, minor, patch] = getVersionNum(version)
|
|
65
|
+
const versions = await getPackageVersions(packageName)
|
|
66
|
+
return versions.find((item, index) => {
|
|
67
|
+
const [a, b, c] = getVersionNum(item)
|
|
68
|
+
if (index === 0) {
|
|
69
|
+
if ((a > major && level === "minor") || (a >= major && b > minor && level === "patch")) consola.log(`发现 ${packageName} 的新版本 ${item}`)
|
|
70
|
+
}
|
|
71
|
+
return (level === "minor" && a === major && b > minor) || (level === "patch" && a === major && b === minor && c > patch)
|
|
72
|
+
})
|
|
73
|
+
}
|
|
74
|
+
|
|
35
75
|
/** 读取 package.json */
|
|
36
76
|
export function readPackageJson(path?: string): Record<string, any> {
|
|
37
77
|
try {
|
|
38
78
|
const result = JSON.parse(readFileSync(getPackageJsonPath(path), "utf-8"))
|
|
39
|
-
consola.success("读取 package.json 成功")
|
|
40
79
|
return result
|
|
41
80
|
} catch (error) {
|
|
42
81
|
consola.error(error)
|
|
@@ -46,10 +85,9 @@ export function readPackageJson(path?: string): Record<string, any> {
|
|
|
46
85
|
}
|
|
47
86
|
|
|
48
87
|
/** 读取 tsconfig.json */
|
|
49
|
-
export function
|
|
88
|
+
export function readTsConfigJSON(path?: string): Record<string, any> {
|
|
50
89
|
try {
|
|
51
90
|
const result = JSON5.parse(readFileSync(getTsConfigJsonPath(path), "utf-8"))
|
|
52
|
-
consola.success("读取 tsconfig.json 成功")
|
|
53
91
|
return result
|
|
54
92
|
} catch (error) {
|
|
55
93
|
consola.error(error)
|
|
@@ -366,7 +404,7 @@ export enum ModuleResolution {
|
|
|
366
404
|
}
|
|
367
405
|
|
|
368
406
|
export function setTsConfig(key: string, value?: string | undefined) {
|
|
369
|
-
const tsconfig =
|
|
407
|
+
const tsconfig = readTsConfigJSON()
|
|
370
408
|
if (value === undefined) {
|
|
371
409
|
delete tsconfig.compilerOptions[key]
|
|
372
410
|
} else {
|
|
@@ -417,4 +455,4 @@ export function sortArrayOrObject(data: any) {
|
|
|
417
455
|
return _data
|
|
418
456
|
}
|
|
419
457
|
return data
|
|
420
|
-
}
|
|
458
|
+
}
|