zixulu 1.7.4 → 1.9.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 +60 -15
- package/dist/index.js.map +3 -3
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.js +63 -5
- package/dist/utils/index.js.map +3 -3
- package/package.json +39 -39
- package/src/index.ts +68 -17
- package/src/utils/index.ts +56 -6
package/dist/index.js
CHANGED
|
@@ -108,21 +108,7 @@ program.command("npm").description("一键添加 npm 包").action(async () => {
|
|
|
108
108
|
await (latest ? import_utils.addLatestDependencies : import_utils.addDependencies)(packageJson, pkg2);
|
|
109
109
|
}
|
|
110
110
|
(0, import_utils.writePackageJson)(packageJson);
|
|
111
|
-
|
|
112
|
-
type: "select",
|
|
113
|
-
options: ["yarn", "pnpm", "npm", "no"],
|
|
114
|
-
initial: "yarn"
|
|
115
|
-
});
|
|
116
|
-
if (install !== "no") {
|
|
117
|
-
import_consola.default.start("正在安装");
|
|
118
|
-
(0, import_child_process.exec)(`${install} install`, (err) => {
|
|
119
|
-
if (err) {
|
|
120
|
-
import_consola.default.error(err);
|
|
121
|
-
} else {
|
|
122
|
-
import_consola.default.success("安装成功");
|
|
123
|
-
}
|
|
124
|
-
});
|
|
125
|
-
}
|
|
111
|
+
(0, import_utils.install)();
|
|
126
112
|
});
|
|
127
113
|
program.command("father").description("修改 father 项目配置").action(async () => {
|
|
128
114
|
let packageJson = (0, import_utils.readPackageJson)();
|
|
@@ -191,5 +177,64 @@ export default defineConfig({
|
|
|
191
177
|
(0, import_fs.writeFileSync)(".gitignore", gitignore.join("\n"));
|
|
192
178
|
(0, import_utils.setTsConfig)("target", import_utils.Target.ESNext);
|
|
193
179
|
});
|
|
180
|
+
program.command("upgrade").description("升级所有依赖").action(async () => {
|
|
181
|
+
const level = await import_consola.default.prompt("请选择升级的级别", {
|
|
182
|
+
type: "select",
|
|
183
|
+
options: ["major", "minor", "patch"]
|
|
184
|
+
});
|
|
185
|
+
const packageJson = (0, import_utils.readPackageJson)();
|
|
186
|
+
const upgrades = [];
|
|
187
|
+
if (packageJson.dependencies) {
|
|
188
|
+
const pkgs = Object.keys(packageJson.dependencies);
|
|
189
|
+
for (let i = 0; i < pkgs.length; i++) {
|
|
190
|
+
const pkg2 = pkgs[i];
|
|
191
|
+
const rv = packageJson.dependencies[pkg2];
|
|
192
|
+
const s = rv.match(/^\D*/)[0];
|
|
193
|
+
const cv = (0, import_utils.getVersionFromRequiredVersion)(rv);
|
|
194
|
+
const version = await (0, import_utils.getPackageUpgradeVersion)(pkg2, cv, level);
|
|
195
|
+
if (!version)
|
|
196
|
+
continue;
|
|
197
|
+
packageJson.dependencies[pkg2] = `${s}${version}`;
|
|
198
|
+
upgrades.push({ package: pkg2, oldVersion: cv, newVersion: version });
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
if (packageJson.devDependencies) {
|
|
202
|
+
const pkgs = Object.keys(packageJson.devDependencies);
|
|
203
|
+
for (let i = 0; i < pkgs.length; i++) {
|
|
204
|
+
const pkg2 = pkgs[i];
|
|
205
|
+
const rv = packageJson.devDependencies[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.devDependencies[pkg2] = `${s}${version}`;
|
|
212
|
+
upgrades.push({ package: pkg2, oldVersion: cv, newVersion: version });
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
upgrades.forEach((upgrade) => {
|
|
216
|
+
import_consola.default.success(`${upgrade.package} ${upgrade.oldVersion} => ${upgrade.newVersion}`);
|
|
217
|
+
});
|
|
218
|
+
(0, import_utils.writePackageJson)(packageJson);
|
|
219
|
+
(0, import_utils.install)();
|
|
220
|
+
});
|
|
221
|
+
var Registry = /* @__PURE__ */ ((Registry2) => {
|
|
222
|
+
Registry2["npm"] = "https://registry.npmjs.org/";
|
|
223
|
+
Registry2["taobao"] = "https://registry.npmmirror.com/";
|
|
224
|
+
Registry2["tencent"] = "https://mirrors.cloud.tencent.com/npm/";
|
|
225
|
+
return Registry2;
|
|
226
|
+
})(Registry || {});
|
|
227
|
+
program.command("registry").description("设置 npm registry").action(async () => {
|
|
228
|
+
const manager = await import_consola.default.prompt("请选择包管理器", {
|
|
229
|
+
type: "select",
|
|
230
|
+
options: ["npm", "yarn", "pnpm"]
|
|
231
|
+
});
|
|
232
|
+
const registry = await import_consola.default.prompt("请选择要更换的源", {
|
|
233
|
+
type: "select",
|
|
234
|
+
options: ["npm", "taobao", "tencent"]
|
|
235
|
+
});
|
|
236
|
+
const command = `${manager} config set registry ${Registry[registry]}`;
|
|
237
|
+
(0, import_child_process.spawn)(command, { shell: true, stdio: "inherit" });
|
|
238
|
+
});
|
|
194
239
|
program.parse();
|
|
195
240
|
//# 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 setTsConfig(\"target\", Target.ESNext)\r\n })\r\n\r\nprogram.parse()\r\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAEA,uBAAkC;AAClC,qBAAoB;AACpB,kBAAwB;AACxB,
|
|
6
|
-
"names": ["tailwind", "consola", "module", "pkg"]
|
|
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, install, readPackageJson, removeComment, removeESLint, setTsConfig, sortArrayOrObject, tailwind, vite, writePackageJson } from \"./utils\"\r\nimport { exec, spawn } 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 install()\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 install()\r\n })\r\n\r\nenum Registry {\r\n npm = \"https://registry.npmjs.org/\",\r\n taobao = \"https://registry.npmmirror.com/\",\r\n tencent = \"https://mirrors.cloud.tencent.com/npm/\"\r\n}\r\n\r\nprogram\r\n .command(\"registry\")\r\n .description(\"设置 npm registry\")\r\n .action(async () => {\r\n const manager = await consola.prompt(\"请选择包管理器\", {\r\n type: \"select\",\r\n options: [\"npm\", \"yarn\", \"pnpm\"]\r\n })\r\n const registry = await consola.prompt(\"请选择要更换的源\", {\r\n type: \"select\",\r\n options: [\"npm\", \"taobao\", \"tencent\"]\r\n })\r\n const command = `${manager} config set registry ${Registry[registry as keyof typeof Registry]}`\r\n spawn(command, { shell: true, stdio: \"inherit\" })\r\n })\r\n\r\nprogram.parse()\r\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["tailwind", "consola", "module", "pkg", "Registry"]
|
|
7
7
|
}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -7,6 +7,10 @@ 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 */
|
|
@@ -82,3 +86,4 @@ export declare enum ModuleResolution {
|
|
|
82
86
|
}
|
|
83
87
|
export declare function setTsConfig(key: string, value?: string | undefined): void;
|
|
84
88
|
export declare function sortArrayOrObject(data: any): any;
|
|
89
|
+
export declare function install(): Promise<void>;
|
package/dist/utils/index.js
CHANGED
|
@@ -43,7 +43,12 @@ __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,
|
|
51
|
+
install: () => install,
|
|
47
52
|
prettierConfig: () => prettierConfig,
|
|
48
53
|
prettierConfigText: () => prettierConfigText,
|
|
49
54
|
prettierConfigTextWithTailwind: () => prettierConfigTextWithTailwind,
|
|
@@ -58,11 +63,12 @@ __export(utils_exports, {
|
|
|
58
63
|
writePackageJson: () => writePackageJson
|
|
59
64
|
});
|
|
60
65
|
module.exports = __toCommonJS(utils_exports);
|
|
66
|
+
var import_child_process = require("child_process");
|
|
61
67
|
var import_consola = __toESM(require("consola"));
|
|
62
68
|
var import_fs = require("fs");
|
|
69
|
+
var JSON5 = __toESM(require("json5"));
|
|
63
70
|
var import_path = require("path");
|
|
64
71
|
var import_process = require("process");
|
|
65
|
-
var JSON5 = __toESM(require("json5"));
|
|
66
72
|
function getAbsolutePath(path) {
|
|
67
73
|
return (0, import_path.isAbsolute)(path) ? path : (0, import_path.join)((0, import_process.cwd)(), path);
|
|
68
74
|
}
|
|
@@ -74,21 +80,58 @@ function getTsConfigJsonPath(path) {
|
|
|
74
80
|
}
|
|
75
81
|
async function getPackageLatestVersion(packageName) {
|
|
76
82
|
try {
|
|
77
|
-
import_consola.default.start(`开始获取 ${packageName} 最新版本号...`);
|
|
78
83
|
const url = `https://registry.npmjs.org/${packageName}/latest`;
|
|
79
84
|
const response = await fetch(url);
|
|
80
85
|
const data = await response.json();
|
|
81
|
-
import_consola.default.success(`获取 ${packageName} 最新版本号成功`);
|
|
82
86
|
return data.version;
|
|
83
87
|
} catch (error) {
|
|
84
88
|
import_consola.default.fail(`获取 ${packageName} 最新版本号失败`);
|
|
85
89
|
(0, import_process.exit)();
|
|
86
90
|
}
|
|
87
91
|
}
|
|
92
|
+
async function getPackageVersions(packageName) {
|
|
93
|
+
try {
|
|
94
|
+
const url = `https://registry.npmjs.org/${packageName}`;
|
|
95
|
+
const response = await fetch(url);
|
|
96
|
+
const data = await response.json();
|
|
97
|
+
return Object.keys(data.versions);
|
|
98
|
+
} catch (error) {
|
|
99
|
+
import_consola.default.fail(`获取 ${packageName} 版本号失败`);
|
|
100
|
+
(0, import_process.exit)();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
function getVersionFromRequiredVersion(requiredVersion) {
|
|
104
|
+
return requiredVersion.replace(/^\D*/, "");
|
|
105
|
+
}
|
|
106
|
+
function getVersionNum(version) {
|
|
107
|
+
const nums = version.split(".").map(Number);
|
|
108
|
+
if (nums.some((num) => !Number.isInteger(num) || num < 0) || nums.length < 3) {
|
|
109
|
+
import_consola.default.fail(`无效的版本号 ${version}`);
|
|
110
|
+
(0, import_process.exit)();
|
|
111
|
+
}
|
|
112
|
+
return nums;
|
|
113
|
+
}
|
|
114
|
+
async function getPackageUpgradeVersion(packageName, version, level) {
|
|
115
|
+
if (level === "major") {
|
|
116
|
+
const latestVersion = await getPackageLatestVersion(packageName);
|
|
117
|
+
if (version === latestVersion)
|
|
118
|
+
return void 0;
|
|
119
|
+
return latestVersion;
|
|
120
|
+
}
|
|
121
|
+
const [major, minor, patch] = getVersionNum(version);
|
|
122
|
+
const versions = await getPackageVersions(packageName);
|
|
123
|
+
return versions.find((item, index) => {
|
|
124
|
+
const [a, b, c] = getVersionNum(item);
|
|
125
|
+
if (index === 0) {
|
|
126
|
+
if (a > major && level === "minor" || a >= major && b > minor && level === "patch")
|
|
127
|
+
import_consola.default.log(`发现 ${packageName} 的新版本 ${item}`);
|
|
128
|
+
}
|
|
129
|
+
return level === "minor" && a === major && b > minor || level === "patch" && a === major && b === minor && c > patch;
|
|
130
|
+
});
|
|
131
|
+
}
|
|
88
132
|
function readPackageJson(path) {
|
|
89
133
|
try {
|
|
90
134
|
const result = JSON.parse((0, import_fs.readFileSync)(getPackageJsonPath(path), "utf-8"));
|
|
91
|
-
import_consola.default.success("读取 package.json 成功");
|
|
92
135
|
return result;
|
|
93
136
|
} catch (error) {
|
|
94
137
|
import_consola.default.error(error);
|
|
@@ -99,7 +142,6 @@ function readPackageJson(path) {
|
|
|
99
142
|
function readTsConfigJSON(path) {
|
|
100
143
|
try {
|
|
101
144
|
const result = JSON5.parse((0, import_fs.readFileSync)(getTsConfigJsonPath(path), "utf-8"));
|
|
102
|
-
import_consola.default.success("读取 tsconfig.json 成功");
|
|
103
145
|
return result;
|
|
104
146
|
} catch (error) {
|
|
105
147
|
import_consola.default.error(error);
|
|
@@ -436,6 +478,17 @@ function sortArrayOrObject(data) {
|
|
|
436
478
|
}
|
|
437
479
|
return data;
|
|
438
480
|
}
|
|
481
|
+
async function install() {
|
|
482
|
+
const install2 = await import_consola.default.prompt("是否立即安装", {
|
|
483
|
+
type: "select",
|
|
484
|
+
options: ["yarn", "pnpm", "npm", "no"],
|
|
485
|
+
initial: "yarn"
|
|
486
|
+
});
|
|
487
|
+
if (install2 === "no")
|
|
488
|
+
return;
|
|
489
|
+
const child = (0, import_child_process.spawn)(`${install2} install`, { shell: true, stdio: "inherit" });
|
|
490
|
+
await new Promise((resolve) => child.on("close", resolve));
|
|
491
|
+
}
|
|
439
492
|
// Annotate the CommonJS export names for ESM import in node:
|
|
440
493
|
0 && (module.exports = {
|
|
441
494
|
Module,
|
|
@@ -452,7 +505,12 @@ function sortArrayOrObject(data) {
|
|
|
452
505
|
getFiles,
|
|
453
506
|
getPackageJsonPath,
|
|
454
507
|
getPackageLatestVersion,
|
|
508
|
+
getPackageUpgradeVersion,
|
|
509
|
+
getPackageVersions,
|
|
455
510
|
getTsConfigJsonPath,
|
|
511
|
+
getVersionFromRequiredVersion,
|
|
512
|
+
getVersionNum,
|
|
513
|
+
install,
|
|
456
514
|
prettierConfig,
|
|
457
515
|
prettierConfigText,
|
|
458
516
|
prettierConfigTextWithTailwind,
|
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;
|
|
6
|
-
"names": ["consola", "path", "judge", "depthOrOptions", "tailwind", "Target", "Module", "ModuleResolution", "t", "m", "mr"]
|
|
4
|
+
"sourcesContent": ["import { spawn } from \"child_process\"\r\nimport 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\r\nexport async function install() {\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\") return\r\n const child = spawn(`${install} install`, { shell: true, stdio: \"inherit\" })\r\n await new Promise(resolve => child.on(\"close\", resolve))\r\n}\r\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["consola", "path", "judge", "depthOrOptions", "tailwind", "Target", "Module", "ModuleResolution", "t", "m", "mr", "install"]
|
|
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.9.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,8 +3,8 @@
|
|
|
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"
|
|
7
|
-
import { exec } from "child_process"
|
|
6
|
+
import { Module, ModuleResolution, Target, addDependencies, addLatestDependencies, addPrettierConfig, getPackageUpgradeVersion, getVersionFromRequiredVersion, install, readPackageJson, removeComment, removeESLint, setTsConfig, sortArrayOrObject, tailwind, vite, writePackageJson } from "./utils"
|
|
7
|
+
import { exec, spawn } from "child_process"
|
|
8
8
|
import { readFileSync, writeFileSync } from "fs"
|
|
9
9
|
|
|
10
10
|
const program = new Command()
|
|
@@ -120,21 +120,7 @@ program
|
|
|
120
120
|
await (latest ? addLatestDependencies : addDependencies)(packageJson, pkg)
|
|
121
121
|
}
|
|
122
122
|
writePackageJson(packageJson)
|
|
123
|
-
|
|
124
|
-
type: "select",
|
|
125
|
-
options: ["yarn", "pnpm", "npm", "no"],
|
|
126
|
-
initial: "yarn"
|
|
127
|
-
})
|
|
128
|
-
if (install !== "no") {
|
|
129
|
-
consola.start("正在安装")
|
|
130
|
-
exec(`${install} install`, err => {
|
|
131
|
-
if (err) {
|
|
132
|
-
consola.error(err)
|
|
133
|
-
} else {
|
|
134
|
-
consola.success("安装成功")
|
|
135
|
-
}
|
|
136
|
-
})
|
|
137
|
-
}
|
|
123
|
+
install()
|
|
138
124
|
})
|
|
139
125
|
|
|
140
126
|
program
|
|
@@ -201,4 +187,69 @@ export default defineConfig({
|
|
|
201
187
|
setTsConfig("target", Target.ESNext)
|
|
202
188
|
})
|
|
203
189
|
|
|
190
|
+
program
|
|
191
|
+
.command("upgrade")
|
|
192
|
+
.description("升级所有依赖")
|
|
193
|
+
.action(async () => {
|
|
194
|
+
const level = (await consola.prompt("请选择升级的级别", {
|
|
195
|
+
type: "select",
|
|
196
|
+
options: ["major", "minor", "patch"]
|
|
197
|
+
})) as "major" | "minor" | "patch"
|
|
198
|
+
const packageJson = readPackageJson()
|
|
199
|
+
const upgrades: { package: string; oldVersion: string; newVersion: string }[] = []
|
|
200
|
+
if (packageJson.dependencies) {
|
|
201
|
+
const pkgs = Object.keys(packageJson.dependencies)
|
|
202
|
+
for (let i = 0; i < pkgs.length; i++) {
|
|
203
|
+
const pkg = pkgs[i]
|
|
204
|
+
const rv = packageJson.dependencies[pkg]
|
|
205
|
+
const s = rv.match(/^\D*/)![0]
|
|
206
|
+
const cv = getVersionFromRequiredVersion(rv)
|
|
207
|
+
const version = await getPackageUpgradeVersion(pkg, cv, level)
|
|
208
|
+
if (!version) continue
|
|
209
|
+
packageJson.dependencies[pkg] = `${s}${version}`
|
|
210
|
+
upgrades.push({ package: pkg, oldVersion: cv, newVersion: version })
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
if (packageJson.devDependencies) {
|
|
214
|
+
const pkgs = Object.keys(packageJson.devDependencies)
|
|
215
|
+
for (let i = 0; i < pkgs.length; i++) {
|
|
216
|
+
const pkg = pkgs[i]
|
|
217
|
+
const rv = packageJson.devDependencies[pkg]
|
|
218
|
+
const s = rv.match(/^\D*/)![0]
|
|
219
|
+
const cv = getVersionFromRequiredVersion(rv)
|
|
220
|
+
const version = await getPackageUpgradeVersion(pkg, cv, level)
|
|
221
|
+
if (!version) continue
|
|
222
|
+
packageJson.devDependencies[pkg] = `${s}${version}`
|
|
223
|
+
upgrades.push({ package: pkg, oldVersion: cv, newVersion: version })
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
upgrades.forEach(upgrade => {
|
|
227
|
+
consola.success(`${upgrade.package} ${upgrade.oldVersion} => ${upgrade.newVersion}`)
|
|
228
|
+
})
|
|
229
|
+
writePackageJson(packageJson)
|
|
230
|
+
install()
|
|
231
|
+
})
|
|
232
|
+
|
|
233
|
+
enum Registry {
|
|
234
|
+
npm = "https://registry.npmjs.org/",
|
|
235
|
+
taobao = "https://registry.npmmirror.com/",
|
|
236
|
+
tencent = "https://mirrors.cloud.tencent.com/npm/"
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
program
|
|
240
|
+
.command("registry")
|
|
241
|
+
.description("设置 npm registry")
|
|
242
|
+
.action(async () => {
|
|
243
|
+
const manager = await consola.prompt("请选择包管理器", {
|
|
244
|
+
type: "select",
|
|
245
|
+
options: ["npm", "yarn", "pnpm"]
|
|
246
|
+
})
|
|
247
|
+
const registry = await consola.prompt("请选择要更换的源", {
|
|
248
|
+
type: "select",
|
|
249
|
+
options: ["npm", "taobao", "tencent"]
|
|
250
|
+
})
|
|
251
|
+
const command = `${manager} config set registry ${Registry[registry as keyof typeof Registry]}`
|
|
252
|
+
spawn(command, { shell: true, stdio: "inherit" })
|
|
253
|
+
})
|
|
254
|
+
|
|
204
255
|
program.parse()
|
package/src/utils/index.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { spawn } from "child_process"
|
|
1
2
|
import consola from "consola"
|
|
2
3
|
import { Stats, readFileSync, readdirSync, statSync, unlinkSync, writeFileSync } from "fs"
|
|
4
|
+
import * as JSON5 from "json5"
|
|
3
5
|
import { ParsedPath, isAbsolute, join, parse } from "path"
|
|
4
6
|
import { Config } from "prettier"
|
|
5
7
|
import { cwd, exit } from "process"
|
|
6
|
-
import * as JSON5 from "json5"
|
|
7
8
|
|
|
8
9
|
function getAbsolutePath(path: string) {
|
|
9
10
|
return isAbsolute(path) ? path : join(cwd(), path)
|
|
@@ -20,11 +21,9 @@ export function getTsConfigJsonPath(path?: string) {
|
|
|
20
21
|
/** 获取包的最新版本 */
|
|
21
22
|
export async function getPackageLatestVersion(packageName: string) {
|
|
22
23
|
try {
|
|
23
|
-
consola.start(`开始获取 ${packageName} 最新版本号...`)
|
|
24
24
|
const url = `https://registry.npmjs.org/${packageName}/latest`
|
|
25
25
|
const response = await fetch(url)
|
|
26
26
|
const data = await response.json()
|
|
27
|
-
consola.success(`获取 ${packageName} 最新版本号成功`)
|
|
28
27
|
return data.version as string
|
|
29
28
|
} catch (error) {
|
|
30
29
|
consola.fail(`获取 ${packageName} 最新版本号失败`)
|
|
@@ -32,11 +31,52 @@ export async function getPackageLatestVersion(packageName: string) {
|
|
|
32
31
|
}
|
|
33
32
|
}
|
|
34
33
|
|
|
34
|
+
export async function getPackageVersions(packageName: string) {
|
|
35
|
+
try {
|
|
36
|
+
const url = `https://registry.npmjs.org/${packageName}`
|
|
37
|
+
const response = await fetch(url)
|
|
38
|
+
const data = await response.json()
|
|
39
|
+
return Object.keys(data.versions) as string[]
|
|
40
|
+
} catch (error) {
|
|
41
|
+
consola.fail(`获取 ${packageName} 版本号失败`)
|
|
42
|
+
exit()
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export function getVersionFromRequiredVersion(requiredVersion: string) {
|
|
47
|
+
return requiredVersion.replace(/^\D*/, "")
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export function getVersionNum(version: string) {
|
|
51
|
+
const nums = version.split(".").map(Number)
|
|
52
|
+
if (nums.some(num => !Number.isInteger(num) || num < 0) || nums.length < 3) {
|
|
53
|
+
consola.fail(`无效的版本号 ${version}`)
|
|
54
|
+
exit()
|
|
55
|
+
}
|
|
56
|
+
return nums
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export async function getPackageUpgradeVersion(packageName: string, version: string, level: "major" | "minor" | "patch") {
|
|
60
|
+
if (level === "major") {
|
|
61
|
+
const latestVersion = await getPackageLatestVersion(packageName)
|
|
62
|
+
if (version === latestVersion) return undefined
|
|
63
|
+
return latestVersion
|
|
64
|
+
}
|
|
65
|
+
const [major, minor, patch] = getVersionNum(version)
|
|
66
|
+
const versions = await getPackageVersions(packageName)
|
|
67
|
+
return versions.find((item, index) => {
|
|
68
|
+
const [a, b, c] = getVersionNum(item)
|
|
69
|
+
if (index === 0) {
|
|
70
|
+
if ((a > major && level === "minor") || (a >= major && b > minor && level === "patch")) consola.log(`发现 ${packageName} 的新版本 ${item}`)
|
|
71
|
+
}
|
|
72
|
+
return (level === "minor" && a === major && b > minor) || (level === "patch" && a === major && b === minor && c > patch)
|
|
73
|
+
})
|
|
74
|
+
}
|
|
75
|
+
|
|
35
76
|
/** 读取 package.json */
|
|
36
77
|
export function readPackageJson(path?: string): Record<string, any> {
|
|
37
78
|
try {
|
|
38
79
|
const result = JSON.parse(readFileSync(getPackageJsonPath(path), "utf-8"))
|
|
39
|
-
consola.success("读取 package.json 成功")
|
|
40
80
|
return result
|
|
41
81
|
} catch (error) {
|
|
42
82
|
consola.error(error)
|
|
@@ -49,7 +89,6 @@ export function readPackageJson(path?: string): Record<string, any> {
|
|
|
49
89
|
export function readTsConfigJSON(path?: string): Record<string, any> {
|
|
50
90
|
try {
|
|
51
91
|
const result = JSON5.parse(readFileSync(getTsConfigJsonPath(path), "utf-8"))
|
|
52
|
-
consola.success("读取 tsconfig.json 成功")
|
|
53
92
|
return result
|
|
54
93
|
} catch (error) {
|
|
55
94
|
consola.error(error)
|
|
@@ -417,4 +456,15 @@ export function sortArrayOrObject(data: any) {
|
|
|
417
456
|
return _data
|
|
418
457
|
}
|
|
419
458
|
return data
|
|
420
|
-
}
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
export async function install() {
|
|
462
|
+
const install = await consola.prompt("是否立即安装", {
|
|
463
|
+
type: "select",
|
|
464
|
+
options: ["yarn", "pnpm", "npm", "no"],
|
|
465
|
+
initial: "yarn"
|
|
466
|
+
})
|
|
467
|
+
if (install === "no") return
|
|
468
|
+
const child = spawn(`${install} install`, { shell: true, stdio: "inherit" })
|
|
469
|
+
await new Promise(resolve => child.on("close", resolve))
|
|
470
|
+
}
|