zixulu 1.13.0 → 1.13.2

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 CHANGED
@@ -25,7 +25,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
25
25
  // src/index.ts
26
26
  var import_commander = require("commander");
27
27
  var import_consola = __toESM(require("consola"));
28
- var import_fs = require("fs");
28
+ var import_promises = require("fs/promises");
29
29
  var import_path = require("path");
30
30
  var import_constant = require("./constant");
31
31
  var import_utils = require("./utils");
@@ -162,7 +162,7 @@ export default defineConfig({
162
162
  sourcemap: true
163
163
  })
164
164
  `;
165
- const gitignore = (0, import_fs.readFileSync)(".gitignore", "utf-8").split("\n").map((line) => line.trim()).filter(Boolean);
165
+ const gitignore = (await (0, import_promises.readFile)(".gitignore", "utf-8")).split("\n").map((line) => line.trim()).filter(Boolean);
166
166
  if (!gitignore.some((line) => /^\/?dist$/.test(line)))
167
167
  gitignore.push("dist");
168
168
  if (!gitignore.some((line) => /^\/?yarn\.lock$/.test(line)))
@@ -176,8 +176,8 @@ export default defineConfig({
176
176
  if (!gitignore.some((line) => /^\/?yarn-error\.log$/.test(line)))
177
177
  gitignore.push("yarn-error.log");
178
178
  (0, import_utils.writePackageJson)(packageJson);
179
- (0, import_fs.writeFileSync)(".fatherrc.ts", fatherrcCode);
180
- (0, import_fs.writeFileSync)(".gitignore", gitignore.join("\n"));
179
+ await (0, import_promises.writeFile)(".fatherrc.ts", fatherrcCode);
180
+ await (0, import_promises.writeFile)(".gitignore", gitignore.join("\n"));
181
181
  (0, import_utils.setTsConfig)("target", import_utils.Target.ESNext);
182
182
  });
183
183
  program.command("upgrade").description("升级所有依赖").action(async () => {
@@ -239,7 +239,7 @@ program.command("registry").description("设置 npm registry").action(async () =
239
239
  choices: Object.keys(import_constant.Registry)
240
240
  });
241
241
  const command = `${manager} config set registry ${import_constant.Registry[registry]}`;
242
- await (0, import_utils.spawnShell)(command);
242
+ await (0, import_utils.spawnAsync)(command);
243
243
  });
244
244
  program.command("sort").description("对 package.json 中的依赖进行排序").action(() => {
245
245
  const packageJson = (0, import_utils.readPackageJson)();
@@ -263,7 +263,7 @@ program.command("experimental-arrow").description("将箭头函数组件转换
263
263
  const modifiedFiles = /* @__PURE__ */ new Set();
264
264
  if (auto) {
265
265
  for (const file of files) {
266
- let code = (0, import_fs.readFileSync)(file, "utf-8");
266
+ let code = await (0, import_promises.readFile)(file, "utf-8");
267
267
  let exportDefaultReg = void 0;
268
268
  code = code.replace(reg, (match) => {
269
269
  if (match.includes("memo(") || match.includes("forwardRef(")) {
@@ -288,11 +288,11 @@ program.command("experimental-arrow").description("将箭头函数组件转换
288
288
  });
289
289
  if (exportDefaultReg)
290
290
  code = code.replace(exportDefaultReg, "");
291
- (0, import_fs.writeFileSync)(file, code, "utf-8");
291
+ await (0, import_promises.writeFile)(file, code, "utf-8");
292
292
  }
293
293
  } else {
294
294
  for (const file of files) {
295
- let code = (0, import_fs.readFileSync)(file, "utf-8");
295
+ let code = await (0, import_promises.readFile)(file, "utf-8");
296
296
  const matches = code.match(reg);
297
297
  if (!matches)
298
298
  continue;
@@ -358,7 +358,7 @@ program.command("experimental-arrow").description("将箭头函数组件转换
358
358
  if (exportDefaultReg)
359
359
  code = code.replace(exportDefaultReg, "");
360
360
  console.log();
361
- (0, import_fs.writeFileSync)(file, code, "utf-8");
361
+ await (0, import_promises.writeFile)(file, code, "utf-8");
362
362
  }
363
363
  }
364
364
  if (modifiedFiles.size > 0)
@@ -371,10 +371,10 @@ ${Array.from(modifiedFiles).join("\n")}`);
371
371
  ${Array.from(warnFiles).join("\n")}`);
372
372
  import_consola.default.start("格式化代码");
373
373
  await (0, import_utils.addPrettierConfig)();
374
- await (0, import_utils.spawnShell)("yarn");
375
- await (0, import_utils.spawnShell)("npx prettier --write ./src");
374
+ await (0, import_utils.spawnAsync)("yarn");
375
+ await (0, import_utils.spawnAsync)("npx prettier --write ./src");
376
376
  import_consola.default.start("检查项目是否存在 TypeScript 错误");
377
- await (0, import_utils.spawnShell)("npx tsc --noEmit");
377
+ await (0, import_utils.spawnAsync)("npx tsc --noEmit");
378
378
  });
379
379
  program.command("interface").description("将 interface 转换为 type").action(async () => {
380
380
  import_consola.default.warn("请在使用本功能前提交或备份代码");
@@ -387,10 +387,10 @@ program.command("interface").description("将 interface 转换为 type").action(
387
387
  const modifiedFiles = /* @__PURE__ */ new Set();
388
388
  import_consola.default.start("格式化代码");
389
389
  await (0, import_utils.addPrettierConfig)();
390
- await (0, import_utils.spawnShell)("yarn");
391
- await (0, import_utils.spawnShell)("npx prettier --write ./src");
390
+ await (0, import_utils.spawnAsync)("yarn");
391
+ await (0, import_utils.spawnAsync)("npx prettier --write ./src");
392
392
  for (const file of files) {
393
- const code = (0, import_fs.readFileSync)(file, "utf-8");
393
+ const code = await (0, import_promises.readFile)(file, "utf-8");
394
394
  const newCode = code.replace(reg, (match) => {
395
395
  modifiedFiles.add(file);
396
396
  const hasExport = reg1.test(match);
@@ -403,16 +403,16 @@ program.command("interface").description("将 interface 转换为 type").action(
403
403
  }
404
404
  return `${hasExport ? "export " : ""}type ${$2} = {`;
405
405
  });
406
- (0, import_fs.writeFileSync)(file, newCode, "utf-8");
406
+ await (0, import_promises.writeFile)(file, newCode, "utf-8");
407
407
  }
408
408
  if (modifiedFiles.size > 0)
409
409
  import_consola.default.success(`以下文件中的 interface 已经转换为 type:
410
410
 
411
411
  ${Array.from(modifiedFiles).join("\n")}`);
412
412
  import_consola.default.start("格式化代码");
413
- await (0, import_utils.spawnShell)("npx prettier --write ./src");
413
+ await (0, import_utils.spawnAsync)("npx prettier --write ./src");
414
414
  import_consola.default.start("检查项目是否存在 TypeScript 错误");
415
- await (0, import_utils.spawnShell)("npx tsc --noEmit");
415
+ await (0, import_utils.spawnAsync)("npx tsc --noEmit");
416
416
  });
417
417
  program.parse();
418
418
  //# 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 { readFileSync, writeFileSync } from \"fs\"\r\nimport { resolve } from \"path\"\r\nimport { Manager, Registry } from \"./constant\"\r\nimport { Module, ModuleResolution, Target, addDependencies, addLatestDependencies, addPrettierConfig, getFiles, getPackageUpgradeVersion, getTypeInGenerics, getVersionFromRequiredVersion, install, readPackageJson, removeComment, removeESLint, setTsConfig, sortArrayOrObject, spawnShell, splitExtendsType, tailwind, vite, writePackageJson } from \"./utils\"\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 .action(async () => {\r\n await addPrettierConfig()\r\n await install()\r\n })\r\n\r\nprogram.command(\"vite\").description(\"删除 vite 模板中的某些配置\").action(vite)\r\n\r\nprogram\r\n .command(\"tailwind\")\r\n .description(\"添加 tailwind 配置文件\")\r\n .action(async () => {\r\n await tailwind()\r\n await install()\r\n })\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 { default: inquirer } = await import(\"inquirer\")\r\n\r\n const packageJson = readPackageJson()\r\n\r\n const { types } = await inquirer.prompt({\r\n type: \"checkbox\",\r\n name: \"types\",\r\n message: \"请选择要升级的依赖类型\",\r\n choices: [\"dependencies\", \"devDependencies\"].filter(type => !!packageJson[type])\r\n })\r\n\r\n const { level } = await inquirer.prompt({\r\n type: \"list\",\r\n name: \"level\",\r\n message: \"请选择升级的级别\",\r\n choices: [\"major\", \"minor\", \"patch\"]\r\n })\r\n\r\n for (const type of types) {\r\n const upgrades: { package: string; oldVersion: string; newVersion: string; strVersion: string }[] = []\r\n const allPkgs = Object.keys(packageJson[type])\r\n\r\n for (let i = 0; i < allPkgs.length; i++) {\r\n const pkg = allPkgs[i]\r\n const rv = packageJson[type][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 upgrades.push({ package: pkg, oldVersion: cv, newVersion: version, strVersion: `${s}${version}` })\r\n }\r\n\r\n if (upgrades.length === 0) continue\r\n\r\n const { pkgs } = await inquirer.prompt({\r\n type: \"checkbox\",\r\n name: \"pkgs\",\r\n message: \"请选择要升级的包\",\r\n choices: upgrades.map(upgrade => ({ name: `${upgrade.package} ${upgrade.oldVersion} => ${upgrade.newVersion}`, value: upgrade.package }))\r\n })\r\n\r\n pkgs.forEach((pkg: string) => {\r\n const upgrade = upgrades.find(upgrade => upgrade.package === pkg)!\r\n packageJson[type][pkg] = upgrade.strVersion\r\n })\r\n }\r\n\r\n writePackageJson(packageJson)\r\n\r\n install()\r\n })\r\n\r\nprogram\r\n .command(\"registry\")\r\n .description(\"设置 npm registry\")\r\n .action(async () => {\r\n const { default: inquirer } = await import(\"inquirer\")\r\n\r\n const { manager } = await inquirer.prompt({\r\n type: \"list\",\r\n name: \"manager\",\r\n message: \"请选择包管理器\",\r\n choices: Object.keys(Manager)\r\n })\r\n\r\n const { registry } = await inquirer.prompt({\r\n type: \"list\",\r\n name: \"registry\",\r\n message: \"请选择要更换的源\",\r\n choices: Object.keys(Registry)\r\n })\r\n\r\n const command = `${manager} config set registry ${Registry[registry as keyof typeof Registry]}`\r\n await spawnShell(command)\r\n })\r\n\r\nprogram\r\n .command(\"sort\")\r\n .description(\"对 package.json 中的依赖进行排序\")\r\n .action(() => {\r\n const packageJson = readPackageJson()\r\n packageJson.dependencies = sortArrayOrObject(packageJson.dependencies)\r\n packageJson.devDependencies = sortArrayOrObject(packageJson.devDependencies)\r\n packageJson.peerDependencies = sortArrayOrObject(packageJson.peerDependencies)\r\n packageJson.peerDevDependencies = sortArrayOrObject(packageJson.peerDevDependencies)\r\n writePackageJson(packageJson)\r\n })\r\n\r\ntype Choice = {\r\n value: string\r\n short: string\r\n name: string\r\n checked: boolean\r\n}\r\n\r\nprogram\r\n .command(\"experimental-arrow\")\r\n .description(\"将箭头函数组件转换为函数组件\")\r\n .action(async () => {\r\n consola.warn(\"请在使用本功能前提交或备份代码\")\r\n const { default: inquirer } = await import(\"inquirer\")\r\n const files = getFiles(\"./src\", (path, stats) => path.ext === \".tsx\" && stats.isFile())\r\n const reg = /^(export )?const \\w+?: FC.+?$/gm\r\n const { auto } = await inquirer.prompt({\r\n type: \"confirm\",\r\n name: \"auto\",\r\n message: \"是否自动选择要转换的组件\"\r\n })\r\n\r\n const warnFiles: Set<string> = new Set()\r\n const modifiedFiles: Set<string> = new Set()\r\n\r\n if (auto) {\r\n for (const file of files) {\r\n let code = readFileSync(file, \"utf-8\")\r\n let exportDefaultReg: RegExp | undefined = undefined\r\n code = code.replace(reg, match => {\r\n if (match.includes(\"memo(\") || match.includes(\"forwardRef(\")) {\r\n warnFiles.add(file)\r\n return match\r\n }\r\n modifiedFiles.add(file)\r\n const hasExport = match.startsWith(\"export \")\r\n const name = match.match(/const (\\w+?):/)![1]\r\n const edReg = new RegExp(`^export default ${name}$`, \"m\")\r\n let hasExportDefault = false\r\n if (!exportDefaultReg && !hasExport && edReg.test(code)) {\r\n exportDefaultReg = edReg\r\n hasExportDefault = true\r\n }\r\n const typeIndex = match.indexOf(\"FC<\")\r\n if (typeIndex > 0) {\r\n const type = getTypeInGenerics(match, typeIndex + 2)\r\n return `${hasExport ? \"export \" : \"\"}${hasExportDefault ? \"export default \" : \"\"}function ${name}(props: ${type}) {`\r\n }\r\n return `${hasExport ? \"export \" : \"\"}${hasExportDefault ? \"export default \" : \"\"}function ${name}() {`\r\n })\r\n if (exportDefaultReg) code = code.replace(exportDefaultReg, \"\")\r\n writeFileSync(file, code, \"utf-8\")\r\n }\r\n } else {\r\n for (const file of files) {\r\n let code = readFileSync(file, \"utf-8\")\r\n const matches = code.match(reg)\r\n if (!matches) continue\r\n consola.start(file)\r\n const choices = Array.from(matches).reduce((prev: Choice[], match, index) => {\r\n if (match.includes(\"memo(\") || match.includes(\"forwardRef(\")) {\r\n warnFiles.add(file)\r\n return prev\r\n }\r\n modifiedFiles.add(file)\r\n const hasExport = match.startsWith(\"export \")\r\n const funName = match.match(/const (\\w+?):/)![1]\r\n const typeIndex = match.indexOf(\"FC<\")\r\n if (typeIndex > 0) {\r\n const type = getTypeInGenerics(match, typeIndex + 2)\r\n const name = `◆ ${match}\r\n ◆ ${hasExport ? \"export \" : \"\"}function ${funName}(props: ${type}) {`\r\n prev.push({ value: index.toString(), short: funName, name, checked: true })\r\n } else {\r\n const name = `◆ ${match}\r\n ◆ ${hasExport ? \"export \" : \"\"}function ${funName}() {`\r\n prev.push({ value: index.toString(), short: funName, name, checked: true })\r\n }\r\n\r\n return prev\r\n }, [])\r\n\r\n const length = choices.length.toString().length\r\n\r\n choices.forEach((choice, index) => {\r\n let first = true\r\n choice.name = choice.name.replace(/◆/g, () => {\r\n if (first) {\r\n first = false\r\n return `◆ ${(index + 1).toString().padStart(length, \"0\")}.`\r\n }\r\n return \"\".padStart(length + 3, \" \")\r\n })\r\n })\r\n\r\n const { indexs } = await inquirer.prompt({\r\n type: \"checkbox\",\r\n name: \"indexs\",\r\n message: `total ${choices.length} component${choices.length > 1 ? \"s\" : \"\"}`,\r\n choices\r\n })\r\n\r\n let index = 0\r\n\r\n let exportDefaultReg: RegExp | undefined = undefined\r\n\r\n code = code.replace(reg, match => {\r\n if (!indexs.includes(index.toString())) return match\r\n const hasExport = match.startsWith(\"export \")\r\n const name = match.match(/const (\\w+?):/)![1]\r\n const edReg = new RegExp(`^export default ${name}$`, \"m\")\r\n let hasExportDefault = false\r\n if (!exportDefaultReg && !hasExport && edReg.test(code)) {\r\n exportDefaultReg = edReg\r\n hasExportDefault = true\r\n }\r\n const typeIndex = match.indexOf(\"FC<\")\r\n if (typeIndex > 0) {\r\n const type = getTypeInGenerics(match, typeIndex + 2)\r\n return `${hasExport ? \"export \" : \"\"}${hasExportDefault ? \"export default \" : \"\"}function ${name}(props: ${type}) {`\r\n }\r\n return `${hasExport ? \"export \" : \"\"}${hasExportDefault ? \"export default \" : \"\"}function ${name}() {`\r\n })\r\n\r\n if (exportDefaultReg) code = code.replace(exportDefaultReg, \"\")\r\n\r\n console.log()\r\n\r\n writeFileSync(file, code, \"utf-8\")\r\n }\r\n }\r\n\r\n if (modifiedFiles.size > 0) consola.success(`以下文件中的箭头函数组件已经转换为函数组件:\\n\\n${Array.from(modifiedFiles).join(\"\\n\")}`)\r\n\r\n if (warnFiles.size > 0) consola.warn(`以下文件中存在 memo 或 forwardRef,请手动转换:\\n\\n${Array.from(warnFiles).join(\"\\n\")}`)\r\n\r\n consola.start(\"格式化代码\")\r\n\r\n await addPrettierConfig()\r\n\r\n await spawnShell(\"yarn\")\r\n\r\n await spawnShell(\"npx prettier --write ./src\")\r\n\r\n consola.start(\"检查项目是否存在 TypeScript 错误\")\r\n\r\n await spawnShell(\"npx tsc --noEmit\")\r\n })\r\n\r\nprogram\r\n .command(\"interface\")\r\n .description(\"将 interface 转换为 type\")\r\n .action(async () => {\r\n consola.warn(\"请在使用本功能前提交或备份代码\")\r\n const files = getFiles(\".\", (path, stats) => (path.ext === \".tsx\" || path.ext === \".ts\") && !path.base.endsWith(\".d.ts\") && stats.isFile(), {\r\n exclude: (path, stats) => stats.isDirectory() && path.base === \"node_modules\"\r\n })\r\n\r\n const reg = /(export )?interface (.+?) {/gm\r\n const reg1 = /\\bexport\\b/\r\n const reg2 = /(\\w+?) extends (.+)/\r\n const modifiedFiles: Set<string> = new Set()\r\n\r\n consola.start(\"格式化代码\")\r\n\r\n await addPrettierConfig()\r\n\r\n await spawnShell(\"yarn\")\r\n\r\n await spawnShell(\"npx prettier --write ./src\")\r\n\r\n for (const file of files) {\r\n const code = readFileSync(file, \"utf-8\")\r\n const newCode = code.replace(reg, match => {\r\n modifiedFiles.add(file)\r\n const hasExport = reg1.test(match)\r\n const $2 = match.replace(reg, \"$2\")\r\n const matches = $2.match(reg2)\r\n if (matches) {\r\n const name = matches[1]\r\n const extendsTypes = splitExtendsType(matches[2]).join(\" & \")\r\n\r\n return `${hasExport ? \"export \" : \"\"}type ${name} = ${extendsTypes} & {`\r\n }\r\n return `${hasExport ? \"export \" : \"\"}type ${$2} = {`\r\n })\r\n writeFileSync(file, newCode, \"utf-8\")\r\n }\r\n\r\n if (modifiedFiles.size > 0) consola.success(`以下文件中的 interface 已经转换为 type:\\n\\n${Array.from(modifiedFiles).join(\"\\n\")}`)\r\n\r\n consola.start(\"格式化代码\")\r\n\r\n await spawnShell(\"npx prettier --write ./src\")\r\n\r\n consola.start(\"检查项目是否存在 TypeScript 错误\")\r\n\r\n await spawnShell(\"npx tsc --noEmit\")\r\n })\r\n\r\nprogram.parse()\r\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["#!/usr/bin/env node\r\n\r\nimport { Argument, Command } from \"commander\"\r\nimport consola from \"consola\"\r\nimport { readFile, writeFile } from \"fs/promises\"\r\nimport { resolve } from \"path\"\r\nimport { Manager, Registry } from \"./constant\"\r\nimport { Module, ModuleResolution, Target, addDependencies, addLatestDependencies, addPrettierConfig, getFiles, getPackageUpgradeVersion, getTypeInGenerics, getVersionFromRequiredVersion, install, readPackageJson, removeComment, removeESLint, setTsConfig, sortArrayOrObject, spawnAsync, splitExtendsType, tailwind, vite, writePackageJson } from \"./utils\"\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 .action(async () => {\r\n await addPrettierConfig()\r\n await install()\r\n })\r\n\r\nprogram.command(\"vite\").description(\"删除 vite 模板中的某些配置\").action(vite)\r\n\r\nprogram\r\n .command(\"tailwind\")\r\n .description(\"添加 tailwind 配置文件\")\r\n .action(async () => {\r\n await tailwind()\r\n await install()\r\n })\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 = (await readFile(\".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 await writeFile(\".fatherrc.ts\", fatherrcCode)\r\n await writeFile(\".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 { default: inquirer } = await import(\"inquirer\")\r\n\r\n const packageJson = readPackageJson()\r\n\r\n const { types } = await inquirer.prompt({\r\n type: \"checkbox\",\r\n name: \"types\",\r\n message: \"请选择要升级的依赖类型\",\r\n choices: [\"dependencies\", \"devDependencies\"].filter(type => !!packageJson[type])\r\n })\r\n\r\n const { level } = await inquirer.prompt({\r\n type: \"list\",\r\n name: \"level\",\r\n message: \"请选择升级的级别\",\r\n choices: [\"major\", \"minor\", \"patch\"]\r\n })\r\n\r\n for (const type of types) {\r\n const upgrades: { package: string; oldVersion: string; newVersion: string; strVersion: string }[] = []\r\n const allPkgs = Object.keys(packageJson[type])\r\n\r\n for (let i = 0; i < allPkgs.length; i++) {\r\n const pkg = allPkgs[i]\r\n const rv = packageJson[type][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 upgrades.push({ package: pkg, oldVersion: cv, newVersion: version, strVersion: `${s}${version}` })\r\n }\r\n\r\n if (upgrades.length === 0) continue\r\n\r\n const { pkgs } = await inquirer.prompt({\r\n type: \"checkbox\",\r\n name: \"pkgs\",\r\n message: \"请选择要升级的包\",\r\n choices: upgrades.map(upgrade => ({ name: `${upgrade.package} ${upgrade.oldVersion} => ${upgrade.newVersion}`, value: upgrade.package }))\r\n })\r\n\r\n pkgs.forEach((pkg: string) => {\r\n const upgrade = upgrades.find(upgrade => upgrade.package === pkg)!\r\n packageJson[type][pkg] = upgrade.strVersion\r\n })\r\n }\r\n\r\n writePackageJson(packageJson)\r\n\r\n install()\r\n })\r\n\r\nprogram\r\n .command(\"registry\")\r\n .description(\"设置 npm registry\")\r\n .action(async () => {\r\n const { default: inquirer } = await import(\"inquirer\")\r\n\r\n const { manager } = await inquirer.prompt({\r\n type: \"list\",\r\n name: \"manager\",\r\n message: \"请选择包管理器\",\r\n choices: Object.keys(Manager)\r\n })\r\n\r\n const { registry } = await inquirer.prompt({\r\n type: \"list\",\r\n name: \"registry\",\r\n message: \"请选择要更换的源\",\r\n choices: Object.keys(Registry)\r\n })\r\n\r\n const command = `${manager} config set registry ${Registry[registry as keyof typeof Registry]}`\r\n await spawnAsync(command)\r\n })\r\n\r\nprogram\r\n .command(\"sort\")\r\n .description(\"对 package.json 中的依赖进行排序\")\r\n .action(() => {\r\n const packageJson = readPackageJson()\r\n packageJson.dependencies = sortArrayOrObject(packageJson.dependencies)\r\n packageJson.devDependencies = sortArrayOrObject(packageJson.devDependencies)\r\n packageJson.peerDependencies = sortArrayOrObject(packageJson.peerDependencies)\r\n packageJson.peerDevDependencies = sortArrayOrObject(packageJson.peerDevDependencies)\r\n writePackageJson(packageJson)\r\n })\r\n\r\ntype Choice = {\r\n value: string\r\n short: string\r\n name: string\r\n checked: boolean\r\n}\r\n\r\nprogram\r\n .command(\"experimental-arrow\")\r\n .description(\"将箭头函数组件转换为函数组件\")\r\n .action(async () => {\r\n consola.warn(\"请在使用本功能前提交或备份代码\")\r\n const { default: inquirer } = await import(\"inquirer\")\r\n const files = getFiles(\"./src\", (path, stats) => path.ext === \".tsx\" && stats.isFile())\r\n const reg = /^(export )?const \\w+?: FC.+?$/gm\r\n const { auto } = await inquirer.prompt({\r\n type: \"confirm\",\r\n name: \"auto\",\r\n message: \"是否自动选择要转换的组件\"\r\n })\r\n\r\n const warnFiles: Set<string> = new Set()\r\n const modifiedFiles: Set<string> = new Set()\r\n\r\n if (auto) {\r\n for (const file of files) {\r\n let code = await readFile(file, \"utf-8\")\r\n let exportDefaultReg: RegExp | undefined = undefined\r\n code = code.replace(reg, match => {\r\n if (match.includes(\"memo(\") || match.includes(\"forwardRef(\")) {\r\n warnFiles.add(file)\r\n return match\r\n }\r\n modifiedFiles.add(file)\r\n const hasExport = match.startsWith(\"export \")\r\n const name = match.match(/const (\\w+?):/)![1]\r\n const edReg = new RegExp(`^export default ${name}$`, \"m\")\r\n let hasExportDefault = false\r\n if (!exportDefaultReg && !hasExport && edReg.test(code)) {\r\n exportDefaultReg = edReg\r\n hasExportDefault = true\r\n }\r\n const typeIndex = match.indexOf(\"FC<\")\r\n if (typeIndex > 0) {\r\n const type = getTypeInGenerics(match, typeIndex + 2)\r\n return `${hasExport ? \"export \" : \"\"}${hasExportDefault ? \"export default \" : \"\"}function ${name}(props: ${type}) {`\r\n }\r\n return `${hasExport ? \"export \" : \"\"}${hasExportDefault ? \"export default \" : \"\"}function ${name}() {`\r\n })\r\n if (exportDefaultReg) code = code.replace(exportDefaultReg, \"\")\r\n await writeFile(file, code, \"utf-8\")\r\n }\r\n } else {\r\n for (const file of files) {\r\n let code = await readFile(file, \"utf-8\")\r\n const matches = code.match(reg)\r\n if (!matches) continue\r\n consola.start(file)\r\n const choices = Array.from(matches).reduce((prev: Choice[], match, index) => {\r\n if (match.includes(\"memo(\") || match.includes(\"forwardRef(\")) {\r\n warnFiles.add(file)\r\n return prev\r\n }\r\n modifiedFiles.add(file)\r\n const hasExport = match.startsWith(\"export \")\r\n const funName = match.match(/const (\\w+?):/)![1]\r\n const typeIndex = match.indexOf(\"FC<\")\r\n if (typeIndex > 0) {\r\n const type = getTypeInGenerics(match, typeIndex + 2)\r\n const name = `◆ ${match}\r\n ◆ ${hasExport ? \"export \" : \"\"}function ${funName}(props: ${type}) {`\r\n prev.push({ value: index.toString(), short: funName, name, checked: true })\r\n } else {\r\n const name = `◆ ${match}\r\n ◆ ${hasExport ? \"export \" : \"\"}function ${funName}() {`\r\n prev.push({ value: index.toString(), short: funName, name, checked: true })\r\n }\r\n\r\n return prev\r\n }, [])\r\n\r\n const length = choices.length.toString().length\r\n\r\n choices.forEach((choice, index) => {\r\n let first = true\r\n choice.name = choice.name.replace(/◆/g, () => {\r\n if (first) {\r\n first = false\r\n return `◆ ${(index + 1).toString().padStart(length, \"0\")}.`\r\n }\r\n return \"\".padStart(length + 3, \" \")\r\n })\r\n })\r\n\r\n const { indexs } = await inquirer.prompt({\r\n type: \"checkbox\",\r\n name: \"indexs\",\r\n message: `total ${choices.length} component${choices.length > 1 ? \"s\" : \"\"}`,\r\n choices\r\n })\r\n\r\n let index = 0\r\n\r\n let exportDefaultReg: RegExp | undefined = undefined\r\n\r\n code = code.replace(reg, match => {\r\n if (!indexs.includes(index.toString())) return match\r\n const hasExport = match.startsWith(\"export \")\r\n const name = match.match(/const (\\w+?):/)![1]\r\n const edReg = new RegExp(`^export default ${name}$`, \"m\")\r\n let hasExportDefault = false\r\n if (!exportDefaultReg && !hasExport && edReg.test(code)) {\r\n exportDefaultReg = edReg\r\n hasExportDefault = true\r\n }\r\n const typeIndex = match.indexOf(\"FC<\")\r\n if (typeIndex > 0) {\r\n const type = getTypeInGenerics(match, typeIndex + 2)\r\n return `${hasExport ? \"export \" : \"\"}${hasExportDefault ? \"export default \" : \"\"}function ${name}(props: ${type}) {`\r\n }\r\n return `${hasExport ? \"export \" : \"\"}${hasExportDefault ? \"export default \" : \"\"}function ${name}() {`\r\n })\r\n\r\n if (exportDefaultReg) code = code.replace(exportDefaultReg, \"\")\r\n\r\n console.log()\r\n\r\n await writeFile(file, code, \"utf-8\")\r\n }\r\n }\r\n\r\n if (modifiedFiles.size > 0) consola.success(`以下文件中的箭头函数组件已经转换为函数组件:\\n\\n${Array.from(modifiedFiles).join(\"\\n\")}`)\r\n\r\n if (warnFiles.size > 0) consola.warn(`以下文件中存在 memo 或 forwardRef,请手动转换:\\n\\n${Array.from(warnFiles).join(\"\\n\")}`)\r\n\r\n consola.start(\"格式化代码\")\r\n\r\n await addPrettierConfig()\r\n\r\n await spawnAsync(\"yarn\")\r\n\r\n await spawnAsync(\"npx prettier --write ./src\")\r\n\r\n consola.start(\"检查项目是否存在 TypeScript 错误\")\r\n\r\n await spawnAsync(\"npx tsc --noEmit\")\r\n })\r\n\r\nprogram\r\n .command(\"interface\")\r\n .description(\"将 interface 转换为 type\")\r\n .action(async () => {\r\n consola.warn(\"请在使用本功能前提交或备份代码\")\r\n const files = getFiles(\".\", (path, stats) => (path.ext === \".tsx\" || path.ext === \".ts\") && !path.base.endsWith(\".d.ts\") && stats.isFile(), {\r\n exclude: (path, stats) => stats.isDirectory() && path.base === \"node_modules\"\r\n })\r\n\r\n const reg = /(export )?interface (.+?) {/gm\r\n const reg1 = /\\bexport\\b/\r\n const reg2 = /(\\w+?) extends (.+)/\r\n const modifiedFiles: Set<string> = new Set()\r\n\r\n consola.start(\"格式化代码\")\r\n\r\n await addPrettierConfig()\r\n\r\n await spawnAsync(\"yarn\")\r\n\r\n await spawnAsync(\"npx prettier --write ./src\")\r\n\r\n for (const file of files) {\r\n const code = await readFile(file, \"utf-8\")\r\n const newCode = code.replace(reg, match => {\r\n modifiedFiles.add(file)\r\n const hasExport = reg1.test(match)\r\n const $2 = match.replace(reg, \"$2\")\r\n const matches = $2.match(reg2)\r\n if (matches) {\r\n const name = matches[1]\r\n const extendsTypes = splitExtendsType(matches[2]).join(\" & \")\r\n\r\n return `${hasExport ? \"export \" : \"\"}type ${name} = ${extendsTypes} & {`\r\n }\r\n return `${hasExport ? \"export \" : \"\"}type ${$2} = {`\r\n })\r\n await writeFile(file, newCode, \"utf-8\")\r\n }\r\n\r\n if (modifiedFiles.size > 0) consola.success(`以下文件中的 interface 已经转换为 type:\\n\\n${Array.from(modifiedFiles).join(\"\\n\")}`)\r\n\r\n consola.start(\"格式化代码\")\r\n\r\n await spawnAsync(\"npx prettier --write ./src\")\r\n\r\n consola.start(\"检查项目是否存在 TypeScript 错误\")\r\n\r\n await spawnAsync(\"npx tsc --noEmit\")\r\n })\r\n\r\nprogram.parse()\r\n"],
5
+ "mappings": "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",
6
6
  "names": ["consola", "module", "pkg", "upgrade", "index"]
7
7
  }
@@ -88,5 +88,9 @@ export declare function setTsConfig(key: string, value?: string | undefined): vo
88
88
  export declare function sortArrayOrObject(data: any): any;
89
89
  export declare function install(): Promise<void>;
90
90
  export declare function getTypeInGenerics(str: string, start?: number): string;
91
- export declare function spawnShell(command: string): Promise<void>;
91
+ export type SpawnAsyncOptions = {
92
+ ignoreError?: boolean;
93
+ cwd?: string | URL | undefined;
94
+ };
95
+ export declare function spawnAsync(command: string, options?: SpawnAsyncOptions): Promise<void>;
92
96
  export declare function splitExtendsType(str: string): string[];
@@ -59,7 +59,7 @@ __export(utils_exports, {
59
59
  removeESLint: () => removeESLint,
60
60
  setTsConfig: () => setTsConfig,
61
61
  sortArrayOrObject: () => sortArrayOrObject,
62
- spawnShell: () => spawnShell,
62
+ spawnAsync: () => spawnAsync,
63
63
  splitExtendsType: () => splitExtendsType,
64
64
  tailwind: () => tailwind,
65
65
  vite: () => vite,
@@ -525,7 +525,7 @@ async function install() {
525
525
  });
526
526
  if (install2 === "no")
527
527
  return;
528
- await spawnShell(`${install2} install`);
528
+ await spawnAsync(`${install2} install`);
529
529
  }
530
530
  function getTypeInGenerics(str, start = 0) {
531
531
  if (str[start] !== "<")
@@ -550,10 +550,17 @@ function getTypeInGenerics(str, start = 0) {
550
550
  throw new Error("无效的泛型");
551
551
  return str.slice(start + 1, index);
552
552
  }
553
- function spawnShell(command) {
554
- return new Promise((resolve) => {
555
- const child = (0, import_child_process.spawn)(command, { shell: true, stdio: "inherit" });
556
- child.on("close", resolve);
553
+ function spawnAsync(command, options) {
554
+ const { ignoreError = false, cwd: cwd2 } = options || {};
555
+ return new Promise((resolve, reject) => {
556
+ const child = (0, import_child_process.spawn)(command, { shell: true, stdio: "inherit", cwd: cwd2 });
557
+ child.on("exit", (code) => {
558
+ if (code !== 0 && !ignoreError) {
559
+ reject(new Error(`Command failed with code ${code}`));
560
+ return;
561
+ }
562
+ resolve();
563
+ });
557
564
  });
558
565
  }
559
566
  function splitExtendsType(str) {
@@ -606,7 +613,7 @@ function splitExtendsType(str) {
606
613
  removeESLint,
607
614
  setTsConfig,
608
615
  sortArrayOrObject,
609
- spawnShell,
616
+ spawnAsync,
610
617
  splitExtendsType,
611
618
  tailwind,
612
619
  vite,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/index.ts"],
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, 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, {\r\n depth: depth === undefined ? undefined : depth - 1,\r\n exclude\r\n })\r\n }\r\n }\r\n }\r\n _getFiles(path, 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.cjs\"),\r\n `module.exports = {\r\n plugins: {\r\n tailwindcss: {},\r\n autoprefixer: {}\r\n }\r\n}\r\n`,\r\n \"utf-8\"\r\n )\r\n consola.success(\"添加 postcss.config.cjs 配置成功\")\r\n } catch (error) {\r\n consola.fail(\"添加 postcss.config.cjs 配置失败\")\r\n }\r\n}\r\n\r\n/** 添加 tailwind 至 index.css 成功 */\r\nexport function addTailwindToCSS() {\r\n try {\r\n const dir = getAbsolutePath(\"./src\")\r\n const files = getFiles(dir, (path, stats) => (path.base.toLowerCase() === \"index.css\" || path.base.toLowerCase() === \"app.css\") && stats.isFile(), { depth: 1 })\r\n if (files.length === 0) throw new Error(\"未找到 index.css 或 app.css\")\r\n const file = files.find(item => item.toLowerCase().endsWith(\"index.css\")) || files.find(item => item.toLowerCase().endsWith(\"app.css\"))!\r\n const { base } = parse(file)\r\n const css = readFileSync(file, \"utf-8\")\r\n if (css.includes(\"@tailwind\")) {\r\n consola.warn(`${base} 已经包含 tailwind`)\r\n return\r\n }\r\n writeFileSync(\r\n file,\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 成功`)\r\n } catch (error) {\r\n console.log(error)\r\n consola.fail(`添加 tailwind 失败`)\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 = {\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\n\r\nexport const prettierConfigTextWithTailwind = `module.exports = {\r\n plugins: [\"prettier-plugin-tailwindcss\"],\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\n\r\n/** 添加 prettier 配置成功 */\r\nexport async function addPrettierConfig() {\r\n try {\r\n const packageJson = readPackageJson()\r\n const tailwind = Object.keys(packageJson.dependencies).includes(\"tailwindcss\") || Object.keys(packageJson.devDependencies).includes(\"tailwindcss\")\r\n writeFileSync(getAbsolutePath(\"./prettier.config.cjs\"), tailwind ? prettierConfigTextWithTailwind : prettierConfigText)\r\n const pkg = readPackageJson()\r\n await addDevDependencies(pkg, \"prettier\")\r\n await addDevDependencies(pkg, \"prettier-plugin-tailwindcss\")\r\n writePackageJson(pkg)\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 await addPrettierConfig()\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 await spawnShell(`${install} install`)\r\n}\r\n\r\nexport function getTypeInGenerics(str: string, start = 0) {\r\n if (str[start] !== \"<\") throw new Error(\"无效的泛型\")\r\n let count = 1\r\n let index: number | undefined = undefined\r\n for (let i = start + 1; i < str.length; i++) {\r\n const w = str[i]\r\n if (w === \"<\") {\r\n count++\r\n continue\r\n }\r\n if (w === \">\") {\r\n count--\r\n if (count === 0) {\r\n index = i\r\n break\r\n }\r\n }\r\n }\r\n if (index === undefined) throw new Error(\"无效的泛型\")\r\n return str.slice(start + 1, index)\r\n}\r\n\r\nexport function spawnShell(command: string) {\r\n return new Promise<void>(resolve => {\r\n const child = spawn(command, { shell: true, stdio: \"inherit\" })\r\n child.on(\"close\", resolve)\r\n })\r\n}\r\n\r\nexport function splitExtendsType(str: string) {\r\n const types: string[] = []\r\n let index = 0\r\n for (let i = 0; i < str.length; i++) {\r\n const w = str[i]\r\n if (w === \"<\") {\r\n const type = getTypeInGenerics(str, i)\r\n i += type.length + 1\r\n continue\r\n }\r\n if (w === \",\") {\r\n types.push(str.slice(index, i))\r\n index = i + 1\r\n }\r\n }\r\n types.push(str.slice(index))\r\n return types.map(v => v.trim()).filter(v => v)\r\n}\r\n"],
5
- "mappings": "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",
6
- "names": ["consola", "path", "depthOrOptions", "tailwind", "Target", "Module", "ModuleResolution", "t", "m", "mr", "install"]
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, 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, {\r\n depth: depth === undefined ? undefined : depth - 1,\r\n exclude\r\n })\r\n }\r\n }\r\n }\r\n _getFiles(path, 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.cjs\"),\r\n `module.exports = {\r\n plugins: {\r\n tailwindcss: {},\r\n autoprefixer: {}\r\n }\r\n}\r\n`,\r\n \"utf-8\"\r\n )\r\n consola.success(\"添加 postcss.config.cjs 配置成功\")\r\n } catch (error) {\r\n consola.fail(\"添加 postcss.config.cjs 配置失败\")\r\n }\r\n}\r\n\r\n/** 添加 tailwind 至 index.css 成功 */\r\nexport function addTailwindToCSS() {\r\n try {\r\n const dir = getAbsolutePath(\"./src\")\r\n const files = getFiles(dir, (path, stats) => (path.base.toLowerCase() === \"index.css\" || path.base.toLowerCase() === \"app.css\") && stats.isFile(), { depth: 1 })\r\n if (files.length === 0) throw new Error(\"未找到 index.css 或 app.css\")\r\n const file = files.find(item => item.toLowerCase().endsWith(\"index.css\")) || files.find(item => item.toLowerCase().endsWith(\"app.css\"))!\r\n const { base } = parse(file)\r\n const css = readFileSync(file, \"utf-8\")\r\n if (css.includes(\"@tailwind\")) {\r\n consola.warn(`${base} 已经包含 tailwind`)\r\n return\r\n }\r\n writeFileSync(\r\n file,\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 成功`)\r\n } catch (error) {\r\n console.log(error)\r\n consola.fail(`添加 tailwind 失败`)\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 = {\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\n\r\nexport const prettierConfigTextWithTailwind = `module.exports = {\r\n plugins: [\"prettier-plugin-tailwindcss\"],\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\n\r\n/** 添加 prettier 配置成功 */\r\nexport async function addPrettierConfig() {\r\n try {\r\n const packageJson = readPackageJson()\r\n const tailwind = Object.keys(packageJson.dependencies).includes(\"tailwindcss\") || Object.keys(packageJson.devDependencies).includes(\"tailwindcss\")\r\n writeFileSync(getAbsolutePath(\"./prettier.config.cjs\"), tailwind ? prettierConfigTextWithTailwind : prettierConfigText)\r\n const pkg = readPackageJson()\r\n await addDevDependencies(pkg, \"prettier\")\r\n await addDevDependencies(pkg, \"prettier-plugin-tailwindcss\")\r\n writePackageJson(pkg)\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 await addPrettierConfig()\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 await spawnAsync(`${install} install`)\r\n}\r\n\r\nexport function getTypeInGenerics(str: string, start = 0) {\r\n if (str[start] !== \"<\") throw new Error(\"无效的泛型\")\r\n let count = 1\r\n let index: number | undefined = undefined\r\n for (let i = start + 1; i < str.length; i++) {\r\n const w = str[i]\r\n if (w === \"<\") {\r\n count++\r\n continue\r\n }\r\n if (w === \">\") {\r\n count--\r\n if (count === 0) {\r\n index = i\r\n break\r\n }\r\n }\r\n }\r\n if (index === undefined) throw new Error(\"无效的泛型\")\r\n return str.slice(start + 1, index)\r\n}\r\n\r\nexport type SpawnAsyncOptions = {\r\n ignoreError?: boolean\r\n cwd?: string | URL | undefined\r\n}\r\n\r\nexport function spawnAsync(command: string, options?: SpawnAsyncOptions) {\r\n const { ignoreError = false, cwd } = options || {}\r\n return new Promise<void>((resolve, reject) => {\r\n const child = spawn(command, { shell: true, stdio: \"inherit\", cwd })\r\n child.on(\"exit\", code => {\r\n if (code !== 0 && !ignoreError) {\r\n reject(new Error(`Command failed with code ${code}`))\r\n return\r\n }\r\n resolve()\r\n })\r\n })\r\n}\r\n\r\nexport function splitExtendsType(str: string) {\r\n const types: string[] = []\r\n let index = 0\r\n for (let i = 0; i < str.length; i++) {\r\n const w = str[i]\r\n if (w === \"<\") {\r\n const type = getTypeInGenerics(str, i)\r\n i += type.length + 1\r\n continue\r\n }\r\n if (w === \",\") {\r\n types.push(str.slice(index, i))\r\n index = i + 1\r\n }\r\n }\r\n types.push(str.slice(index))\r\n return types.map(v => v.trim()).filter(v => v)\r\n}\r\n"],
5
+ "mappings": "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",
6
+ "names": ["consola", "path", "depthOrOptions", "tailwind", "Target", "Module", "ModuleResolution", "t", "m", "mr", "install", "cwd"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zixulu",
3
- "version": "1.13.0",
3
+ "version": "1.13.2",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "bin": "dist/index.js",
@@ -29,13 +29,13 @@
29
29
  "dependencies": {
30
30
  "commander": "^12.0.0",
31
31
  "consola": "^3.2.3",
32
- "inquirer": "^9.2.15",
32
+ "inquirer": "^9.2.16",
33
33
  "json5": "^2.2.3",
34
34
  "prettier": "^3.2.5"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@types/inquirer": "^9.0.7",
38
- "@types/node": "^20.11.19",
38
+ "@types/node": "^20.11.27",
39
39
  "father": "^4.4.0"
40
40
  }
41
41
  }
package/src/index.ts CHANGED
@@ -2,10 +2,10 @@
2
2
 
3
3
  import { Argument, Command } from "commander"
4
4
  import consola from "consola"
5
- import { readFileSync, writeFileSync } from "fs"
5
+ import { readFile, writeFile } from "fs/promises"
6
6
  import { resolve } from "path"
7
7
  import { Manager, Registry } from "./constant"
8
- import { Module, ModuleResolution, Target, addDependencies, addLatestDependencies, addPrettierConfig, getFiles, getPackageUpgradeVersion, getTypeInGenerics, getVersionFromRequiredVersion, install, readPackageJson, removeComment, removeESLint, setTsConfig, sortArrayOrObject, spawnShell, splitExtendsType, tailwind, vite, writePackageJson } from "./utils"
8
+ import { Module, ModuleResolution, Target, addDependencies, addLatestDependencies, addPrettierConfig, getFiles, getPackageUpgradeVersion, getTypeInGenerics, getVersionFromRequiredVersion, install, readPackageJson, removeComment, removeESLint, setTsConfig, sortArrayOrObject, spawnAsync, splitExtendsType, tailwind, vite, writePackageJson } from "./utils"
9
9
 
10
10
  const program = new Command()
11
11
 
@@ -176,7 +176,7 @@ export default defineConfig({
176
176
  sourcemap: true
177
177
  })
178
178
  `
179
- const gitignore = readFileSync(".gitignore", "utf-8")
179
+ const gitignore = (await readFile(".gitignore", "utf-8"))
180
180
  .split("\n")
181
181
  .map(line => line.trim())
182
182
  .filter(Boolean)
@@ -187,8 +187,8 @@ export default defineConfig({
187
187
  if (!gitignore.some(line => /^\/?package-lock\.json$/.test(line))) gitignore.push("package-lock.json")
188
188
  if (!gitignore.some(line => /^\/?yarn-error\.log$/.test(line))) gitignore.push("yarn-error.log")
189
189
  writePackageJson(packageJson)
190
- writeFileSync(".fatherrc.ts", fatherrcCode)
191
- writeFileSync(".gitignore", gitignore.join("\n"))
190
+ await writeFile(".fatherrc.ts", fatherrcCode)
191
+ await writeFile(".gitignore", gitignore.join("\n"))
192
192
  setTsConfig("target", Target.ESNext)
193
193
  })
194
194
 
@@ -269,7 +269,7 @@ program
269
269
  })
270
270
 
271
271
  const command = `${manager} config set registry ${Registry[registry as keyof typeof Registry]}`
272
- await spawnShell(command)
272
+ await spawnAsync(command)
273
273
  })
274
274
 
275
275
  program
@@ -310,7 +310,7 @@ program
310
310
 
311
311
  if (auto) {
312
312
  for (const file of files) {
313
- let code = readFileSync(file, "utf-8")
313
+ let code = await readFile(file, "utf-8")
314
314
  let exportDefaultReg: RegExp | undefined = undefined
315
315
  code = code.replace(reg, match => {
316
316
  if (match.includes("memo(") || match.includes("forwardRef(")) {
@@ -334,11 +334,11 @@ program
334
334
  return `${hasExport ? "export " : ""}${hasExportDefault ? "export default " : ""}function ${name}() {`
335
335
  })
336
336
  if (exportDefaultReg) code = code.replace(exportDefaultReg, "")
337
- writeFileSync(file, code, "utf-8")
337
+ await writeFile(file, code, "utf-8")
338
338
  }
339
339
  } else {
340
340
  for (const file of files) {
341
- let code = readFileSync(file, "utf-8")
341
+ let code = await readFile(file, "utf-8")
342
342
  const matches = code.match(reg)
343
343
  if (!matches) continue
344
344
  consola.start(file)
@@ -411,7 +411,7 @@ program
411
411
 
412
412
  console.log()
413
413
 
414
- writeFileSync(file, code, "utf-8")
414
+ await writeFile(file, code, "utf-8")
415
415
  }
416
416
  }
417
417
 
@@ -423,13 +423,13 @@ program
423
423
 
424
424
  await addPrettierConfig()
425
425
 
426
- await spawnShell("yarn")
426
+ await spawnAsync("yarn")
427
427
 
428
- await spawnShell("npx prettier --write ./src")
428
+ await spawnAsync("npx prettier --write ./src")
429
429
 
430
430
  consola.start("检查项目是否存在 TypeScript 错误")
431
431
 
432
- await spawnShell("npx tsc --noEmit")
432
+ await spawnAsync("npx tsc --noEmit")
433
433
  })
434
434
 
435
435
  program
@@ -450,12 +450,12 @@ program
450
450
 
451
451
  await addPrettierConfig()
452
452
 
453
- await spawnShell("yarn")
453
+ await spawnAsync("yarn")
454
454
 
455
- await spawnShell("npx prettier --write ./src")
455
+ await spawnAsync("npx prettier --write ./src")
456
456
 
457
457
  for (const file of files) {
458
- const code = readFileSync(file, "utf-8")
458
+ const code = await readFile(file, "utf-8")
459
459
  const newCode = code.replace(reg, match => {
460
460
  modifiedFiles.add(file)
461
461
  const hasExport = reg1.test(match)
@@ -469,18 +469,18 @@ program
469
469
  }
470
470
  return `${hasExport ? "export " : ""}type ${$2} = {`
471
471
  })
472
- writeFileSync(file, newCode, "utf-8")
472
+ await writeFile(file, newCode, "utf-8")
473
473
  }
474
474
 
475
475
  if (modifiedFiles.size > 0) consola.success(`以下文件中的 interface 已经转换为 type:\n\n${Array.from(modifiedFiles).join("\n")}`)
476
476
 
477
477
  consola.start("格式化代码")
478
478
 
479
- await spawnShell("npx prettier --write ./src")
479
+ await spawnAsync("npx prettier --write ./src")
480
480
 
481
481
  consola.start("检查项目是否存在 TypeScript 错误")
482
482
 
483
- await spawnShell("npx tsc --noEmit")
483
+ await spawnAsync("npx tsc --noEmit")
484
484
  })
485
485
 
486
486
  program.parse()
@@ -500,7 +500,7 @@ export async function install() {
500
500
  initial: "yarn"
501
501
  })
502
502
  if (install === "no") return
503
- await spawnShell(`${install} install`)
503
+ await spawnAsync(`${install} install`)
504
504
  }
505
505
 
506
506
  export function getTypeInGenerics(str: string, start = 0) {
@@ -525,10 +525,22 @@ export function getTypeInGenerics(str: string, start = 0) {
525
525
  return str.slice(start + 1, index)
526
526
  }
527
527
 
528
- export function spawnShell(command: string) {
529
- return new Promise<void>(resolve => {
530
- const child = spawn(command, { shell: true, stdio: "inherit" })
531
- child.on("close", resolve)
528
+ export type SpawnAsyncOptions = {
529
+ ignoreError?: boolean
530
+ cwd?: string | URL | undefined
531
+ }
532
+
533
+ export function spawnAsync(command: string, options?: SpawnAsyncOptions) {
534
+ const { ignoreError = false, cwd } = options || {}
535
+ return new Promise<void>((resolve, reject) => {
536
+ const child = spawn(command, { shell: true, stdio: "inherit", cwd })
537
+ child.on("exit", code => {
538
+ if (code !== 0 && !ignoreError) {
539
+ reject(new Error(`Command failed with code ${code}`))
540
+ return
541
+ }
542
+ resolve()
543
+ })
532
544
  })
533
545
  }
534
546