zixulu 1.19.0 → 1.19.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
@@ -23,13 +23,13 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
23
23
  ));
24
24
 
25
25
  // src/index.ts
26
+ var import_child_process = require("child_process");
26
27
  var import_commander = require("commander");
27
28
  var import_consola = __toESM(require("consola"));
28
29
  var import_promises = require("fs/promises");
29
30
  var import_path = require("path");
30
31
  var import_constant = require("./constant");
31
32
  var import_utils = require("./utils");
32
- var import_child_process = require("child_process");
33
33
  var program = new import_commander.Command();
34
34
  var pkg = (0, import_utils.readPackageJsonSync)((0, import_path.resolve)(__dirname, "../"));
35
35
  program.name("格数科技").version(pkg.version);
@@ -138,7 +138,21 @@ export default defineConfig({
138
138
  await (0, import_utils.setTsConfig)("target", import_utils.Target.ESNext);
139
139
  });
140
140
  program.command("upgrade-dependency").alias("ud").description("升级所有依赖").action(async () => {
141
- import_consola.default.warn("请在使用本功能前提交或备份代码");
141
+ const status = await new Promise((resolve2, reject) => {
142
+ (0, import_child_process.exec)("git status", (error, stdout, stderr) => {
143
+ if (error)
144
+ return reject(error);
145
+ if (stderr)
146
+ return reject(stderr);
147
+ resolve2(stdout);
148
+ });
149
+ });
150
+ if (status === "fatal: not a git repository (or any of the parent directories): .git") {
151
+ import_consola.default.warn("请在使用本功能前备份代码");
152
+ } else if (!status.includes("nothing to commit, working tree clean")) {
153
+ import_consola.default.warn("请在使用本功能前提交代码");
154
+ return;
155
+ }
142
156
  const { default: inquirer } = await import("inquirer");
143
157
  const packageJson = await (0, import_utils.readPackageJson)();
144
158
  const { types } = await inquirer.prompt({
@@ -180,7 +194,20 @@ program.command("upgrade-dependency").alias("ud").description("升级所有依
180
194
  });
181
195
  }
182
196
  await (0, import_utils.writePackageJson)(packageJson);
183
- (0, import_utils.install)();
197
+ const status1 = await (0, import_utils.execAsync)("git status");
198
+ const reg = /modified: *package\.json/m;
199
+ try {
200
+ await (0, import_utils.execAsync)("npx tsc --noEmit");
201
+ } catch (error) {
202
+ import_consola.default.error("TypeScript 错误,请手动解决");
203
+ return;
204
+ }
205
+ if (reg.test(status1)) {
206
+ import_consola.default.start("提交代码");
207
+ await (0, import_utils.execAsync)("git add package.json");
208
+ await (0, import_utils.execAsync)(`git commit -m "✨feature: upgrade dependencies"`);
209
+ await (0, import_utils.install)();
210
+ }
184
211
  });
185
212
  program.command("registry").description("设置 npm registry").action(async () => {
186
213
  const { default: inquirer } = await import("inquirer");
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 { mkdir, readFile, writeFile } from \"fs/promises\"\r\nimport { resolve } from \"path\"\r\nimport { Manager, Registry, Software } from \"./constant\"\r\nimport { Module, ModuleResolution, SoftwareDownloadMap, Target, addDependencies, addDevDependencies, addGitignore, addLatestDependencies, addPostCSSConfig, addPrettierConfig, addTailwindConfig, addTailwindToCSS, createIndexHtml, downloadVscodeExts, getFiles, getPackageUpgradeVersion, getPidInfoFromPort, getProcessInfoFromPid, getTypeInGenerics, getVersionFromRequiredVersion, install, readPackageJson, readPackageJsonSync, removeComment, removeESLint, setTsConfig, sortArrayOrObject, spawnAsync, splitExtendsType, tailwind, vite, writeInstallVscodeExtScript, writePackageJson, writeRsbuildConfig } from \"./utils\"\r\nimport pidFromPort from \"pid-from-port\"\r\nimport { exec } from \"child_process\"\r\n\r\nconst program = new Command()\r\n\r\nconst pkg = readPackageJsonSync(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 await 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 await 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 await setTsConfig(\"moduleResolution\", moduleResolution)\r\n })\r\n\r\n// interface NpmPackage {\r\n// name: string\r\n// description: string\r\n// }\r\n\r\n// const 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\n// program\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 = await readPackageJson()\r\n// for (const pkg of packageNames) {\r\n// await (latest ? addLatestDependencies : addDependencies)(packageJson, pkg)\r\n// }\r\n// await writePackageJson(packageJson)\r\n// install()\r\n// })\r\n\r\nprogram\r\n .command(\"father-setting\")\r\n .alias(\"fs\")\r\n .description(\"修改 father 项目配置\")\r\n .action(async () => {\r\n let packageJson = await 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 packageJson.scripts ??= {}\r\n packageJson.scripts.prepublishOnly = \"npx zixulu upgrade && father doctor && npm run build\"\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 await writePackageJson(packageJson)\r\n await writeFile(\".fatherrc.ts\", fatherrcCode)\r\n await writeFile(\".gitignore\", gitignore.join(\"\\n\"))\r\n await setTsConfig(\"target\", Target.ESNext)\r\n })\r\n\r\nprogram\r\n .command(\"upgrade-dependency\")\r\n .alias(\"ud\")\r\n .description(\"升级所有依赖\")\r\n .action(async () => {\r\n consola.warn(\"请在使用本功能前提交或备份代码\")\r\n const { default: inquirer } = await import(\"inquirer\")\r\n\r\n const packageJson = await 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 await 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-package-json\")\r\n .alias(\"spj\")\r\n .description(\"对 package.json 中的依赖进行排序\")\r\n .action(async () => {\r\n const packageJson = await 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 await 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(\"arrow-to-function\")\r\n .alias(\"a2f\")\r\n .description(\"将箭头函数组件转换为函数组件\")\r\n .action(async () => {\r\n consola.warn(\"请在使用本功能前提交或备份代码\")\r\n const { default: inquirer } = await import(\"inquirer\")\r\n const files = await 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-to-type\")\r\n .alias(\"i2t\")\r\n .description(\"将 interface 转换为 type\")\r\n .action(async () => {\r\n consola.warn(\"请在使用本功能前提交或备份代码\")\r\n\r\n const files = await 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 { default: inquirer } = await import(\"inquirer\")\r\n\r\n const { ifContinue } = await inquirer.prompt({\r\n type: \"confirm\",\r\n name: \"ifContinue\",\r\n message: \"是否继续\"\r\n })\r\n\r\n if (!ifContinue) return\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 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(\"检查项目是否存在 TypeScript 错误\")\r\n\r\n await spawnAsync(\"npx tsc --noEmit\")\r\n })\r\n\r\nprogram.command(\"gitignore\").description(\"添加 .gitignore 文件\").action(addGitignore)\r\n\r\nprogram\r\n .command(\"rsbuild-setting\")\r\n .alias(\"rs\")\r\n .description(\"rsbuild 常用设置\")\r\n .action(async () => {\r\n await writeRsbuildConfig()\r\n await createIndexHtml()\r\n await setTsConfig(\"noEmit\", true)\r\n await addGitignore()\r\n const packageJson = await readPackageJson()\r\n await addDependencies(packageJson, \"@ant-design/cssinjs\")\r\n await addDependencies(packageJson, \"@ant-design/icons\")\r\n await addDependencies(packageJson, \"@emotion/css\")\r\n await addDependencies(packageJson, \"ahooks\")\r\n await addDependencies(packageJson, \"antd\")\r\n await addDependencies(packageJson, \"deepsea-components\")\r\n await addDependencies(packageJson, \"deepsea-tools\")\r\n await addDependencies(packageJson, \"react-router-dom\")\r\n await addDependencies(packageJson, \"react-soda\")\r\n await addDevDependencies(packageJson, \"@types/node\")\r\n await addDevDependencies(packageJson, \"prettier\")\r\n await addDevDependencies(packageJson, \"prettier-plugin-tailwindcss\")\r\n await addDevDependencies(packageJson, \"tailwindcss\")\r\n await writePackageJson(packageJson)\r\n await addTailwindConfig()\r\n await addPostCSSConfig()\r\n await addTailwindToCSS()\r\n await addPrettierConfig()\r\n await install()\r\n })\r\n\r\nprogram\r\n .command(\"git-proxy\")\r\n .alias(\"gp\")\r\n .description(\"设置 git 代理\")\r\n .action(async () => {\r\n const { default: inquirer } = await import(\"inquirer\")\r\n const { global } = await inquirer.prompt({\r\n type: \"list\",\r\n name: \"global\",\r\n message: \"请选择\",\r\n choices: [\r\n {\r\n name: \"全局代理\",\r\n value: true\r\n },\r\n {\r\n name: \"当前项目\",\r\n value: false\r\n }\r\n ]\r\n })\r\n const { open } = await inquirer.prompt({\r\n type: \"list\",\r\n name: \"open\",\r\n message: \"请选择\",\r\n choices: [\r\n {\r\n name: \"打开代理\",\r\n value: true\r\n },\r\n {\r\n name: \"关闭代理\",\r\n value: false\r\n }\r\n ]\r\n })\r\n if (!open) {\r\n try {\r\n await spawnAsync(`git config${global ? \" --global\" : \"\"} --unset http.proxy`)\r\n } catch (error) {}\r\n try {\r\n await spawnAsync(`git config${global ? \" --global\" : \"\"} --unset https.proxy`)\r\n } catch (error) {}\r\n return\r\n }\r\n const { proxy } = await inquirer.prompt({\r\n type: \"input\",\r\n name: \"proxy\",\r\n message: \"请输入代理地址\",\r\n default: \"http://localhost:7890\"\r\n })\r\n await spawnAsync(`git config${global ? \" --global\" : \"\"} http.proxy ${proxy}`)\r\n await spawnAsync(`git config${global ? \" --global\" : \"\"} https.proxy ${proxy}`)\r\n })\r\n\r\nprogram\r\n .command(\"shell-proxy\")\r\n .alias(\"sp\")\r\n .description(\"设置 powershell 代理\")\r\n .action(async () => {\r\n const { default: inquirer } = await import(\"inquirer\")\r\n const { open } = await inquirer.prompt({\r\n type: \"list\",\r\n name: \"open\",\r\n message: \"请选择\",\r\n choices: [\r\n {\r\n name: \"打开代理\",\r\n value: true\r\n },\r\n {\r\n name: \"关闭代理\",\r\n value: false\r\n }\r\n ]\r\n })\r\n if (!open) return await spawnAsync(`netsh winhttp reset proxy`)\r\n const { proxy } = await inquirer.prompt({\r\n type: \"input\",\r\n name: \"proxy\",\r\n message: \"请输入代理地址\",\r\n default: \"http://localhost:7890\"\r\n })\r\n await spawnAsync(`netsh winhttp set proxy \"${proxy}\" \"<local>\"`)\r\n })\r\n\r\nprogram\r\n .command(\"download-software\")\r\n .alias(\"ds\")\r\n .description(\"下载最新版软件\")\r\n .action(async () => {\r\n const { default: inquirer } = await import(\"inquirer\")\r\n const dir = `softwares-${Date.now()}`\r\n const { softwares } = await inquirer.prompt({\r\n type: \"checkbox\",\r\n name: \"softwares\",\r\n message: \"请选择要下载的软件\",\r\n choices: Object.values(Software),\r\n default: Object.values(Software)\r\n })\r\n if (softwares.length === 0) return\r\n await mkdir(dir, { recursive: true })\r\n for (const software of softwares) {\r\n consola.start(`正在下载 ${software}`)\r\n await SoftwareDownloadMap[software as Software](dir)\r\n }\r\n })\r\n\r\nprogram\r\n .command(\"download-vscode-extension\")\r\n .alias(\"dve\")\r\n .description(\"下载 VS Code 插件\")\r\n .action(async () => {\r\n const dir = `vscode-${Date.now()}`\r\n await mkdir(dir, { recursive: true })\r\n await downloadVscodeExts(dir)\r\n await writeInstallVscodeExtScript(dir)\r\n })\r\n\r\nprogram\r\n .command(\"port\")\r\n .argument(\"port\", \"端口号\")\r\n .action(async port => {\r\n const { default: inquirer } = await import(\"inquirer\")\r\n const pidInfos = await getPidInfoFromPort(parseInt(port))\r\n const choices: { name: string; value: number }[] = []\r\n for (const { pid, info } of pidInfos) {\r\n const name = await getProcessInfoFromPid(pid)\r\n if (name) choices.push({ name: `${info} ${name}`, value: pid })\r\n }\r\n const { chosenPids } = await inquirer.prompt({\r\n type: \"checkbox\",\r\n name: \"chosenPids\",\r\n message: \"请选择要结束的进程\",\r\n choices,\r\n default: choices.map(choice => choice.value)\r\n })\r\n for (const pid of chosenPids) {\r\n exec(`taskkill /f /pid ${pid}`)\r\n }\r\n })\r\n\r\nprogram.parse()\r\n"],
5
- "mappings": "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",
6
- "names": ["consola", "module", "pkg", "upgrade", "index"]
4
+ "sourcesContent": ["#!/usr/bin/env node\r\n\r\nimport { exec } from \"child_process\"\r\nimport { Argument, Command } from \"commander\"\r\nimport consola from \"consola\"\r\nimport { mkdir, readFile, writeFile } from \"fs/promises\"\r\nimport { resolve } from \"path\"\r\nimport { Manager, Registry, Software } from \"./constant\"\r\nimport { Module, ModuleResolution, SoftwareDownloadMap, Target, addDependencies, addDevDependencies, addGitignore, addPostCSSConfig, addPrettierConfig, addTailwindConfig, addTailwindToCSS, createIndexHtml, downloadVscodeExts, execAsync, getFiles, getPackageUpgradeVersion, getPidInfoFromPort, getProcessInfoFromPid, getTypeInGenerics, getVersionFromRequiredVersion, install, readPackageJson, readPackageJsonSync, removeComment, removeESLint, setTsConfig, sortArrayOrObject, spawnAsync, splitExtendsType, tailwind, vite, writeInstallVscodeExtScript, writePackageJson, writeRsbuildConfig } from \"./utils\"\r\n\r\nconst program = new Command()\r\n\r\nconst pkg = readPackageJsonSync(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 await 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 await 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 await setTsConfig(\"moduleResolution\", moduleResolution)\r\n })\r\n\r\n// interface NpmPackage {\r\n// name: string\r\n// description: string\r\n// }\r\n\r\n// const 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\n// program\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 = await readPackageJson()\r\n// for (const pkg of packageNames) {\r\n// await (latest ? addLatestDependencies : addDependencies)(packageJson, pkg)\r\n// }\r\n// await writePackageJson(packageJson)\r\n// install()\r\n// })\r\n\r\nprogram\r\n .command(\"father-setting\")\r\n .alias(\"fs\")\r\n .description(\"修改 father 项目配置\")\r\n .action(async () => {\r\n let packageJson = await 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 packageJson.scripts ??= {}\r\n packageJson.scripts.prepublishOnly = \"npx zixulu upgrade && father doctor && npm run build\"\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 await writePackageJson(packageJson)\r\n await writeFile(\".fatherrc.ts\", fatherrcCode)\r\n await writeFile(\".gitignore\", gitignore.join(\"\\n\"))\r\n await setTsConfig(\"target\", Target.ESNext)\r\n })\r\n\r\nprogram\r\n .command(\"upgrade-dependency\")\r\n .alias(\"ud\")\r\n .description(\"升级所有依赖\")\r\n .action(async () => {\r\n const status = await new Promise<string>((resolve, reject) => {\r\n exec(\"git status\", (error, stdout, stderr) => {\r\n if (error) return reject(error)\r\n if (stderr) return reject(stderr)\r\n resolve(stdout)\r\n })\r\n })\r\n\r\n if (status === \"fatal: not a git repository (or any of the parent directories): .git\") {\r\n consola.warn(\"请在使用本功能前备份代码\")\r\n } else if (!status.includes(\"nothing to commit, working tree clean\")) {\r\n consola.warn(\"请在使用本功能前提交代码\")\r\n return\r\n }\r\n\r\n const { default: inquirer } = await import(\"inquirer\")\r\n\r\n const packageJson = await 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 await writePackageJson(packageJson)\r\n\r\n const status1 = await execAsync(\"git status\")\r\n\r\n const reg = /modified: *package\\.json/m\r\n\r\n try {\r\n await execAsync(\"npx tsc --noEmit\")\r\n } catch (error) {\r\n consola.error(\"TypeScript 错误,请手动解决\")\r\n return\r\n }\r\n\r\n if (reg.test(status1)) {\r\n consola.start(\"提交代码\")\r\n await execAsync(\"git add package.json\")\r\n await execAsync(`git commit -m \"✨feature: upgrade dependencies\"`)\r\n await install()\r\n }\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-package-json\")\r\n .alias(\"spj\")\r\n .description(\"对 package.json 中的依赖进行排序\")\r\n .action(async () => {\r\n const packageJson = await 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 await 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(\"arrow-to-function\")\r\n .alias(\"a2f\")\r\n .description(\"将箭头函数组件转换为函数组件\")\r\n .action(async () => {\r\n consola.warn(\"请在使用本功能前提交或备份代码\")\r\n const { default: inquirer } = await import(\"inquirer\")\r\n const files = await 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-to-type\")\r\n .alias(\"i2t\")\r\n .description(\"将 interface 转换为 type\")\r\n .action(async () => {\r\n consola.warn(\"请在使用本功能前提交或备份代码\")\r\n\r\n const files = await 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 { default: inquirer } = await import(\"inquirer\")\r\n\r\n const { ifContinue } = await inquirer.prompt({\r\n type: \"confirm\",\r\n name: \"ifContinue\",\r\n message: \"是否继续\"\r\n })\r\n\r\n if (!ifContinue) return\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 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(\"检查项目是否存在 TypeScript 错误\")\r\n\r\n await spawnAsync(\"npx tsc --noEmit\")\r\n })\r\n\r\nprogram.command(\"gitignore\").description(\"添加 .gitignore 文件\").action(addGitignore)\r\n\r\nprogram\r\n .command(\"rsbuild-setting\")\r\n .alias(\"rs\")\r\n .description(\"rsbuild 常用设置\")\r\n .action(async () => {\r\n await writeRsbuildConfig()\r\n await createIndexHtml()\r\n await setTsConfig(\"noEmit\", true)\r\n await addGitignore()\r\n const packageJson = await readPackageJson()\r\n await addDependencies(packageJson, \"@ant-design/cssinjs\")\r\n await addDependencies(packageJson, \"@ant-design/icons\")\r\n await addDependencies(packageJson, \"@emotion/css\")\r\n await addDependencies(packageJson, \"ahooks\")\r\n await addDependencies(packageJson, \"antd\")\r\n await addDependencies(packageJson, \"deepsea-components\")\r\n await addDependencies(packageJson, \"deepsea-tools\")\r\n await addDependencies(packageJson, \"react-router-dom\")\r\n await addDependencies(packageJson, \"react-soda\")\r\n await addDevDependencies(packageJson, \"@types/node\")\r\n await addDevDependencies(packageJson, \"prettier\")\r\n await addDevDependencies(packageJson, \"prettier-plugin-tailwindcss\")\r\n await addDevDependencies(packageJson, \"tailwindcss\")\r\n await writePackageJson(packageJson)\r\n await addTailwindConfig()\r\n await addPostCSSConfig()\r\n await addTailwindToCSS()\r\n await addPrettierConfig()\r\n await install()\r\n })\r\n\r\nprogram\r\n .command(\"git-proxy\")\r\n .alias(\"gp\")\r\n .description(\"设置 git 代理\")\r\n .action(async () => {\r\n const { default: inquirer } = await import(\"inquirer\")\r\n const { global } = await inquirer.prompt({\r\n type: \"list\",\r\n name: \"global\",\r\n message: \"请选择\",\r\n choices: [\r\n {\r\n name: \"全局代理\",\r\n value: true\r\n },\r\n {\r\n name: \"当前项目\",\r\n value: false\r\n }\r\n ]\r\n })\r\n const { open } = await inquirer.prompt({\r\n type: \"list\",\r\n name: \"open\",\r\n message: \"请选择\",\r\n choices: [\r\n {\r\n name: \"打开代理\",\r\n value: true\r\n },\r\n {\r\n name: \"关闭代理\",\r\n value: false\r\n }\r\n ]\r\n })\r\n if (!open) {\r\n try {\r\n await spawnAsync(`git config${global ? \" --global\" : \"\"} --unset http.proxy`)\r\n } catch (error) {}\r\n try {\r\n await spawnAsync(`git config${global ? \" --global\" : \"\"} --unset https.proxy`)\r\n } catch (error) {}\r\n return\r\n }\r\n const { proxy } = await inquirer.prompt({\r\n type: \"input\",\r\n name: \"proxy\",\r\n message: \"请输入代理地址\",\r\n default: \"http://localhost:7890\"\r\n })\r\n await spawnAsync(`git config${global ? \" --global\" : \"\"} http.proxy ${proxy}`)\r\n await spawnAsync(`git config${global ? \" --global\" : \"\"} https.proxy ${proxy}`)\r\n })\r\n\r\nprogram\r\n .command(\"shell-proxy\")\r\n .alias(\"sp\")\r\n .description(\"设置 powershell 代理\")\r\n .action(async () => {\r\n const { default: inquirer } = await import(\"inquirer\")\r\n const { open } = await inquirer.prompt({\r\n type: \"list\",\r\n name: \"open\",\r\n message: \"请选择\",\r\n choices: [\r\n {\r\n name: \"打开代理\",\r\n value: true\r\n },\r\n {\r\n name: \"关闭代理\",\r\n value: false\r\n }\r\n ]\r\n })\r\n if (!open) return await spawnAsync(`netsh winhttp reset proxy`)\r\n const { proxy } = await inquirer.prompt({\r\n type: \"input\",\r\n name: \"proxy\",\r\n message: \"请输入代理地址\",\r\n default: \"http://localhost:7890\"\r\n })\r\n await spawnAsync(`netsh winhttp set proxy \"${proxy}\" \"<local>\"`)\r\n })\r\n\r\nprogram\r\n .command(\"download-software\")\r\n .alias(\"ds\")\r\n .description(\"下载最新版软件\")\r\n .action(async () => {\r\n const { default: inquirer } = await import(\"inquirer\")\r\n const dir = `softwares-${Date.now()}`\r\n const { softwares } = await inquirer.prompt({\r\n type: \"checkbox\",\r\n name: \"softwares\",\r\n message: \"请选择要下载的软件\",\r\n choices: Object.values(Software),\r\n default: Object.values(Software)\r\n })\r\n if (softwares.length === 0) return\r\n await mkdir(dir, { recursive: true })\r\n for (const software of softwares) {\r\n consola.start(`正在下载 ${software}`)\r\n await SoftwareDownloadMap[software as Software](dir)\r\n }\r\n })\r\n\r\nprogram\r\n .command(\"download-vscode-extension\")\r\n .alias(\"dve\")\r\n .description(\"下载 VS Code 插件\")\r\n .action(async () => {\r\n const dir = `vscode-${Date.now()}`\r\n await mkdir(dir, { recursive: true })\r\n await downloadVscodeExts(dir)\r\n await writeInstallVscodeExtScript(dir)\r\n })\r\n\r\nprogram\r\n .command(\"port\")\r\n .argument(\"port\", \"端口号\")\r\n .action(async port => {\r\n const { default: inquirer } = await import(\"inquirer\")\r\n const pidInfos = await getPidInfoFromPort(parseInt(port))\r\n const choices: { name: string; value: number }[] = []\r\n for (const { pid, info } of pidInfos) {\r\n const name = await getProcessInfoFromPid(pid)\r\n if (name) choices.push({ name: `${info} ${name}`, value: pid })\r\n }\r\n const { chosenPids } = await inquirer.prompt({\r\n type: \"checkbox\",\r\n name: \"chosenPids\",\r\n message: \"请选择要结束的进程\",\r\n choices,\r\n default: choices.map(choice => choice.value)\r\n })\r\n for (const pid of chosenPids) {\r\n exec(`taskkill /f /pid ${pid}`)\r\n }\r\n })\r\n\r\nprogram.parse()\r\n"],
5
+ "mappings": "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",
6
+ "names": ["consola", "module", "resolve", "pkg", "upgrade", "index"]
7
7
  }
@@ -96,6 +96,7 @@ export type SpawnAsyncOptions = {
96
96
  ignoreError?: boolean;
97
97
  cwd?: string | URL | undefined;
98
98
  };
99
+ export declare function execAsync(command: string): Promise<string>;
99
100
  export declare function spawnAsync(command: string, options?: SpawnAsyncOptions): Promise<void>;
100
101
  export declare function splitExtendsType(str: string): string[];
101
102
  export declare const rsbuildConfig = "import { defineConfig } from \"@rsbuild/core\"\nimport { pluginReact } from \"@rsbuild/plugin-react\"\n\nexport default defineConfig({\n html: {\n template: \"public/index.html\"\n },\n plugins: [pluginReact()],\n server: {\n port: 5173\n },\n source: {\n define: {}\n }\n})\n";
@@ -217,4 +218,7 @@ export type PidInfo = {
217
218
  pid: number;
218
219
  info: string;
219
220
  };
220
- export declare function getPidInfoFromPort(port: number): Promise<PidInfo[]>;
221
+ export declare function getPidInfoFromPort(port: number): Promise<{
222
+ pid: number;
223
+ info: string;
224
+ }[]>;
@@ -57,6 +57,7 @@ __export(utils_exports, {
57
57
  downloadVscode: () => downloadVscode,
58
58
  downloadVscodeExt: () => downloadVscodeExt,
59
59
  downloadVscodeExts: () => downloadVscodeExts,
60
+ execAsync: () => execAsync,
60
61
  getFilename: () => getFilename,
61
62
  getFiles: () => getFiles,
62
63
  getPackageJsonPath: () => getPackageJsonPath,
@@ -621,8 +622,20 @@ function getTypeInGenerics(str, start = 0) {
621
622
  throw new Error("无效的泛型");
622
623
  return str.slice(start + 1, index);
623
624
  }
625
+ function execAsync(command) {
626
+ import_consola.default.log(command);
627
+ return new Promise((resolve, reject) => {
628
+ (0, import_child_process.exec)(command, (error, stdout, stderr) => {
629
+ if (error)
630
+ return reject(error);
631
+ if (stderr)
632
+ import_consola.default.warn(stderr);
633
+ resolve(stdout);
634
+ });
635
+ });
636
+ }
624
637
  function spawnAsync(command, options) {
625
- console.log(command);
638
+ import_consola.default.log(command);
626
639
  const { ignoreError = false, cwd: cwd2 } = options || {};
627
640
  return new Promise((resolve, reject) => {
628
641
  const child = (0, import_child_process.spawn)(command, { shell: true, stdio: "inherit", cwd: cwd2 });
@@ -912,48 +925,32 @@ main()`;
912
925
  }
913
926
  async function getProcessInfoFromPid(pid) {
914
927
  try {
915
- return await new Promise((resolve, reject) => {
916
- (0, import_child_process.exec)(`tasklist | findstr ${pid}`, (error, stdout, stderr) => {
917
- if (error !== null)
918
- return reject(error);
919
- if (stderr !== "")
920
- return reject(stderr);
921
- const reg = new RegExp(`( +)${pid}( (Services|Console) +)`);
922
- return resolve(
923
- stdout.split(/[\n\r]/).find((line) => reg.test(line))?.replace(reg, "$1$2")?.replace(/ +/g, " ")
924
- );
925
- });
926
- });
928
+ const stdout = await execAsync(`tasklist | findstr ${pid}`);
929
+ const reg = new RegExp(`( +)${pid}( (Services|Console) +)`);
930
+ return stdout.split(/[\n\r]/).find((line) => reg.test(line))?.replace(reg, "$1$2")?.replace(/ +/g, " ");
927
931
  } catch (error) {
928
932
  return void 0;
929
933
  }
930
934
  }
931
935
  async function getPidInfoFromPort(port) {
932
936
  try {
933
- return await new Promise((resolve, reject) => {
934
- (0, import_child_process.exec)(`netstat -ano | findstr :${port}`, (error, stdout, stderr) => {
935
- if (error !== null)
936
- return reject(error);
937
- if (stderr !== "")
938
- return reject(stderr);
939
- const reg = new RegExp(` (\\[::\\]|(\\d{1,3}\\.){3}\\d{1,3}):${port} `);
940
- const result = Array.from(
941
- new Set(
942
- stdout.split(/[\n\r]/).filter((line) => reg.test(line)).map((line) => ({ pid: parseInt(line.match(reg)[1]), info: line }))
943
- )
944
- );
945
- for (let i = 0; ; ) {
946
- if (result.some(({ info }) => info[i] === void 0))
947
- break;
948
- if (result.some(({ info }) => info[i] !== " " || info[i + 1] !== " ")) {
949
- i++;
950
- continue;
951
- }
952
- result.forEach((item) => item.info = `${item.info.slice(0, i)}${item.info.slice(i + 1)}`);
953
- }
954
- resolve(result);
955
- });
956
- });
937
+ const stdout = await execAsync(`netstat -ano | findstr :${port}`);
938
+ const reg = new RegExp(` (\\[::\\]|(\\d{1,3}\\.){3}\\d{1,3}):${port} `);
939
+ const result = Array.from(
940
+ new Set(
941
+ stdout.split(/[\n\r]/).filter((line) => reg.test(line)).map((line) => ({ pid: parseInt(line.match(reg)[1]), info: line }))
942
+ )
943
+ );
944
+ for (let i = 0; ; ) {
945
+ if (result.some(({ info }) => info[i] === void 0))
946
+ break;
947
+ if (result.some(({ info }) => info[i] !== " " || info[i + 1] !== " ")) {
948
+ i++;
949
+ continue;
950
+ }
951
+ result.forEach((item) => item.info = `${item.info.slice(0, i)}${item.info.slice(i + 1)}`);
952
+ }
953
+ return result;
957
954
  } catch (error) {
958
955
  return [];
959
956
  }
@@ -988,6 +985,7 @@ async function getPidInfoFromPort(port) {
988
985
  downloadVscode,
989
986
  downloadVscodeExt,
990
987
  downloadVscodeExts,
988
+ execAsync,
991
989
  getFilename,
992
990
  getFiles,
993
991
  getPackageJsonPath,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/index.ts"],
4
- "sourcesContent": ["import { exec, spawn } from \"child_process\"\r\nimport consola from \"consola\"\r\nimport { Stats, createWriteStream, readFileSync } from \"fs\"\r\nimport { mkdir, readFile, readdir, rename, rm, stat, writeFile } from \"fs/promises\"\r\nimport { HttpsProxyAgent } from \"https-proxy-agent\"\r\nimport * as JSON5 from \"json5\"\r\nimport { type Headers as NodeFetchHeaders } from \"node-fetch\"\r\nimport { ParsedPath, isAbsolute, join, parse } from \"path\"\r\nimport { Config } from \"prettier\"\r\nimport { cwd, exit } from \"process\"\r\nimport { Readable } from \"stream\"\r\nimport YAML from \"yaml\"\r\nimport { Software } from \"../constant\"\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 reg = /^(\\d+)(\\.\\d+)?(\\.\\d+)?/\r\n const result = version.match(reg)\r\n if (!result) throw new Error(\"无效的版本号\")\r\n return Array.from(result)\r\n .slice(1)\r\n .map(str => (str ? parseInt(str.replace(/^\\./, \"\")) : 0))\r\n}\r\n\r\nexport async function getPackageUpgradeVersion(packageName: string, version: string, level: \"major\" | \"minor\" | \"patch\") {\r\n const current = getVersionNum(version)\r\n const versions = await getPackageVersions(packageName)\r\n const reg = /^\\d+\\.\\d+\\.\\d+$/\r\n const result = versions\r\n .filter(item => {\r\n if (!reg.test(item)) return false\r\n const latest = getVersionNum(item)\r\n let index = -1\r\n for (let i = 0; i < latest.length; i++) {\r\n const cv = current[i]\r\n const lv = latest[i]\r\n if (lv < cv) break\r\n if (lv > cv) {\r\n index = i\r\n break\r\n }\r\n }\r\n if (index === -1) return false\r\n if (level === \"major\") return index >= 0\r\n if (level === \"minor\") return index >= 1\r\n if (level === \"patch\") return index >= 2\r\n })\r\n .map(item => getVersionNum(item))\r\n result.sort((a, b) => {\r\n for (let i = 0; i < a.length; i++) {\r\n if (a[i] < b[i]) return 1\r\n if (a[i] > b[i]) return -1\r\n }\r\n return 0\r\n })\r\n return result[0]?.join(\".\")\r\n}\r\n\r\n/** 读取 package.json */\r\nexport function readPackageJsonSync(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/** 读取 package.json */\r\nexport async function readPackageJson(path?: string): Promise<Record<string, any>> {\r\n try {\r\n const result = JSON.parse(await readFile(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 async function readTsConfigJSON(path?: string): Promise<Record<string, any>> {\r\n try {\r\n const result = JSON5.parse(await readFile(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 async function writePackageJson(packageJson: Record<string, any>, path?: string) {\r\n try {\r\n await writeFile(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 async function getFiles(path: string, judge: (path: ParsedPath, stats: Stats) => boolean, depthOrOptions?: number | GetFilesOptions) {\r\n const result: string[] = []\r\n async 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 = await readdir(path)\r\n for (const file of files) {\r\n const filePath = join(path, file)\r\n const parsedPath = parse(filePath)\r\n const stats = await stat(filePath)\r\n if (judge(parsedPath, stats)) {\r\n result.push(filePath)\r\n }\r\n if (stats.isDirectory() && (!exclude || !exclude(parsedPath, stats)) && (depth === undefined || depth > 0)) {\r\n await _getFiles(filePath, {\r\n depth: depth === undefined ? undefined : depth - 1,\r\n exclude\r\n })\r\n }\r\n }\r\n }\r\n await _getFiles(path, depthOrOptions)\r\n return result\r\n}\r\n\r\n/** 删除 ESLint 配置文件 */\r\nexport async function removeESLint() {\r\n try {\r\n const files = await 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 for (const file of files) {\r\n try {\r\n await rm(file, { force: true, recursive: true })\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 = await 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 await writePackageJson(pkg)\r\n consola.success(\"删除 ESLint 依赖成功\")\r\n } catch (error) {\r\n consola.fail(\"删除 ESLint 依赖失败\")\r\n }\r\n}\r\n\r\nexport async function vite() {\r\n await setTsConfig(\"noUnusedLocals\")\r\n await setTsConfig(\"noUnusedParameters\")\r\n const pkg = await readPackageJson()\r\n pkg.scripts.dev = \"vite --host\"\r\n await writePackageJson(pkg)\r\n}\r\n\r\n/** 添加 tailwind.config.js 配置成功 */\r\nexport async function addTailwindConfig() {\r\n try {\r\n await writeFile(\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`,\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 async function addPostCSSConfig() {\r\n try {\r\n const packageJson = await readPackageJson()\r\n const autoprefixer = Object.keys(packageJson.dependencies).includes(\"autoprefixer\") || Object.keys(packageJson.devDependencies).includes(\"autoprefixer\")\r\n await writeFile(\r\n getAbsolutePath(\"postcss.config.js\"),\r\n `module.exports = {\r\n plugins: {\r\n tailwindcss: {}${\r\n autoprefixer\r\n ? `,\r\n autoprefixer: {}`\r\n : \"\"\r\n }\r\n }\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 async function addTailwindToCSS() {\r\n try {\r\n const dir = getAbsolutePath(\"./src\")\r\n const files = await 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 = await readFile(file, \"utf-8\")\r\n if (css.includes(\"@tailwind\")) {\r\n consola.warn(`${base} 已经包含 tailwind`)\r\n return\r\n }\r\n await writeFile(\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 = await readPackageJson()\r\n const tailwind = Object.keys(packageJson.dependencies).includes(\"tailwindcss\") || Object.keys(packageJson.devDependencies).includes(\"tailwindcss\")\r\n await writeFile(getAbsolutePath(\"./prettier.config.cjs\"), tailwind ? prettierConfigTextWithTailwind : prettierConfigText)\r\n await addDevDependencies(packageJson, \"prettier\")\r\n await addDevDependencies(packageJson, \"prettier-plugin-tailwindcss\")\r\n await writePackageJson(packageJson)\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 packageJson = await readPackageJson()\r\n await addDevDependencies(packageJson, \"tailwindcss\")\r\n await addDevDependencies(packageJson, \"autoprefixer\")\r\n await addDevDependencies(packageJson, \"postcss\")\r\n await addDevDependencies(packageJson, \"prettier\")\r\n await addDevDependencies(packageJson, \"prettier-plugin-tailwindcss\")\r\n await writePackageJson(packageJson)\r\n await addTailwindConfig()\r\n await addPostCSSConfig()\r\n await addTailwindToCSS()\r\n await addPrettierConfig()\r\n}\r\n\r\nexport async function removeComment(path: string) {\r\n try {\r\n const text = await readFile(getAbsolutePath(path), \"utf-8\")\r\n const newText = text.replace(/^ *?\\/\\/.*?$/gm, \"\")\r\n await writeFile(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 async function setTsConfig(key: string, value?: any) {\r\n const tsconfig = await readTsConfigJSON()\r\n if (value === undefined) {\r\n delete tsconfig.compilerOptions[key]\r\n } else {\r\n switch (key) {\r\n case \"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 break\r\n case \"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 break\r\n case \"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 break\r\n case \"noEmit\":\r\n tsconfig.compilerOptions.noEmit = !!value\r\n break\r\n default:\r\n consola.fail(`暂不支持 ${key} 项`)\r\n exit()\r\n }\r\n }\r\n await writeFile(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 console.log(command)\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\r\nexport const rsbuildConfig = `import { defineConfig } from \"@rsbuild/core\"\r\nimport { pluginReact } from \"@rsbuild/plugin-react\"\r\n\r\nexport default defineConfig({\r\n html: {\r\n template: \"public/index.html\"\r\n },\r\n plugins: [pluginReact()],\r\n server: {\r\n port: 5173\r\n },\r\n source: {\r\n define: {}\r\n }\r\n})\r\n`\r\n\r\nexport async function writeRsbuildConfig() {\r\n await writeFile(getAbsolutePath(\"rsbuild.config.ts\"), rsbuildConfig, \"utf-8\")\r\n}\r\n\r\nexport const indexHtml = `<!doctype html>\r\n<html lang=\"zh\">\r\n <head>\r\n <meta charset=\"UTF-8\" />\r\n <link rel=\"icon\" href=\"/logo.webp\" />\r\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n <meta name=\"description\" content=\"江苏格数科技有限公司\" />\r\n <title>Hello, World!</title>\r\n </head>\r\n <body>\r\n <div id=\"root\"></div>\r\n </body>\r\n</html>\r\n`\r\n\r\nexport async function createIndexHtml() {\r\n try {\r\n await writeFile(getAbsolutePath(\"public/index.html\"), indexHtml, \"utf-8\")\r\n consola.success(\"创建 index.html 成功\")\r\n } catch (error) {\r\n await mkdir(getAbsolutePath(\"public\"))\r\n try {\r\n await writeFile(getAbsolutePath(\"public/index.html\"), indexHtml, \"utf-8\")\r\n consola.success(\"创建 index.html 成功\")\r\n } catch (error) {\r\n consola.fail(\"创建 index.html 失败\")\r\n exit()\r\n }\r\n }\r\n}\r\n\r\nexport const addedRules = [\"package-lock.json\", \"yarn.lock\", \"node_modules\", \"dist\", \"build\", \"pnpm-lock.yaml\", \"yarn-error.log\"]\r\n\r\nexport async function addGitignore() {\r\n try {\r\n const files = await getFiles(cwd(), (path, stats) => path.base === \".gitignore\" && stats.isFile(), { depth: 1 })\r\n const file = files.at(0)\r\n if (file) {\r\n const gitignore = await readFile(getAbsolutePath(\".gitignore\"), \"utf-8\")\r\n const newGitignore = `${gitignore}\\n${addedRules.join(\"\\n\")}`\r\n await writeFile(getAbsolutePath(\".gitignore\"), newGitignore, \"utf-8\")\r\n } else {\r\n await writeFile(getAbsolutePath(\".gitignore\"), addedRules.join(\"\\n\"), \"utf-8\")\r\n }\r\n } catch (error) {\r\n consola.fail(\"添加 .gitignore 失败\")\r\n exit()\r\n }\r\n}\r\n\r\nconst agent = new HttpsProxyAgent(\"http://localhost:7890\")\r\n\r\nexport function getFilename(headers: Headers | NodeFetchHeaders) {\r\n const disposition = headers.get(\"content-disposition\")\r\n if (!disposition) return undefined\r\n const reg = /filename=(.+?);/\r\n const result = disposition.match(reg)\r\n if (!result) return undefined\r\n return result[1]\r\n}\r\n\r\nexport async function download(url: string, dir: string, filename?: string) {\r\n const { default: fetch } = await import(\"node-fetch\")\r\n const response = await fetch(url, { agent })\r\n filename = getFilename(response.headers) || filename || new URL(url).pathname.split(\"/\").at(-1)!\r\n const writeable = createWriteStream(join(dir, filename))\r\n await new Promise((resolve, reject) => Readable.from(response.body!).pipe(writeable).on(\"finish\", resolve).on(\"error\", reject))\r\n return filename\r\n}\r\n\r\nexport async function downloadVscode(dir: string) {\r\n await download(\"https://code.visualstudio.com/sha/download?build=stable&os=win32-x64\", dir, \"vscode.exe\")\r\n}\r\n\r\nexport async function sleep(ms: number) {\r\n return new Promise(resolve => setTimeout(resolve, ms))\r\n}\r\n\r\nexport async function downloadSupermium(dir: string) {\r\n const response = await fetch(\"https://win32subsystem.live/supermium/\")\r\n const html = await response.text()\r\n const reg = /href=\".+?setup\\.exe\"/g\r\n const matches = Array.from(html.match(reg) || [])\r\n const reg2 = /<b>Supermium (\\d+(\\.\\d+)*)/\r\n const version = html.match(reg2)![1]\r\n for (let i = 0; i < matches.length; i++) {\r\n const str = matches[i]\r\n const url = new URL(str.slice(6, -1), \"https://win32subsystem.live\").href\r\n const filename = await download(url, dir)\r\n await sleep(100)\r\n await rename(join(dir, filename), join(dir, `Supermium_${version}_${filename.endsWith(\"64_setup.exe\") ? \"x64\" : \"x86\"}.exe`))\r\n }\r\n}\r\n\r\nexport namespace PCQQ {\r\n export interface Result {\r\n resp: Resp\r\n }\r\n\r\n export interface Resp {\r\n soft_list: Softlist[]\r\n retCode: number\r\n }\r\n\r\n export interface Softlist {\r\n soft_id: number\r\n os_type: number\r\n os_bit: number\r\n display_name: string\r\n nick_ver: string\r\n ver_name: string\r\n file_size: string\r\n file_name: string\r\n publish_date: string\r\n download_url: string\r\n download_https_url: string\r\n }\r\n}\r\n\r\nexport async function downloadFromPCQQ(dir: string, cmdid: number, soft_id_list: number) {\r\n const data = new URLSearchParams()\r\n data.set(\"cmdid\", cmdid.toString())\r\n data.set(\"jprxReq[req][soft_id_list][]\", soft_id_list.toString())\r\n const headers = new Headers()\r\n headers.set(\"Content-Type\", \"application/x-www-form-urlencoded\")\r\n const response = await fetch(`https://luban.m.qq.com/api/public/software-manager/softwareProxy`, { method: \"POST\", headers, body: data.toString() })\r\n const result: PCQQ.Result = await response.json()\r\n await download(result.resp.soft_list[0].download_https_url, dir, result.resp.soft_list[0].file_name)\r\n}\r\n\r\nexport namespace Winget {\r\n export interface Package {\r\n PackageIdentifier: string\r\n PackageVersion: string\r\n InstallerType: string\r\n InstallModes: string[]\r\n InstallerSwitches: InstallerSwitches\r\n ExpectedReturnCodes: ExpectedReturnCode[]\r\n UpgradeBehavior: string\r\n Protocols: string[]\r\n FileExtensions: string[]\r\n AppsAndFeaturesEntries: AppsAndFeaturesEntry[]\r\n Installers: Installer[]\r\n ManifestType: string\r\n ManifestVersion: string\r\n }\r\n\r\n export interface Installer {\r\n Architecture: string\r\n Scope: string\r\n InstallerUrl: string\r\n InstallerSha256: string\r\n InstallerSwitches: InstallerSwitches2\r\n ProductCode: string\r\n }\r\n\r\n export interface InstallerSwitches2 {\r\n Custom: string\r\n }\r\n\r\n export interface AppsAndFeaturesEntry {\r\n UpgradeCode: string\r\n InstallerType: string\r\n }\r\n\r\n export interface ExpectedReturnCode {\r\n InstallerReturnCode: number\r\n ReturnResponse: string\r\n }\r\n\r\n export interface InstallerSwitches {\r\n Log: string\r\n }\r\n}\r\n\r\nexport type WingetItem = {\r\n filename: string\r\n version: string\r\n ext: string\r\n architecture: string\r\n}\r\n\r\nexport type WingetDownloadInfo = {\r\n name: string\r\n id: string\r\n dir: string\r\n architecture?: \"x64\" | \"x86\" | \"all\"\r\n}\r\n\r\nexport async function downloadFromWinget({ name, id, dir, architecture = \"x64\" }: WingetDownloadInfo) {\r\n const { default: fetch } = await import(\"node-fetch\")\r\n const firstLetter = id[0].toLowerCase()\r\n const path = id.replace(/\\./g, \"/\")\r\n const response = await fetch(`https://api.github.com/repos/microsoft/winget-pkgs/contents/manifests/${firstLetter}/${path}`, { agent })\r\n const data: GithubContent[] = (await response.json()) as any\r\n const reg2 = /^\\d+(\\.\\d+?)*$/\r\n const stables = data.filter(item => reg2.test(item.name))\r\n stables.sort((a, b) => {\r\n const avs = a.name.split(\".\")\r\n const bvs = b.name.split(\".\")\r\n const max = Math.max(avs.length, bvs.length)\r\n for (let i = 0; i < max; i++) {\r\n const av = avs[i] ? parseInt(avs[i]) : 0\r\n const bv = bvs[i] ? parseInt(bvs[i]) : 0\r\n if (av < bv) return 1\r\n if (av > bv) return -1\r\n }\r\n return 0\r\n })\r\n const response2 = await fetch(`https://raw.githubusercontent.com/microsoft/winget-pkgs/master/manifests/${firstLetter}/${path}/${stables[0].name}/${id}.installer.yaml`, { agent })\r\n const yaml = await response2.text()\r\n const pkg: Winget.Package = YAML.parse(yaml)\r\n const installers = pkg.Installers.filter((item, index) => {\r\n if (item.Architecture !== \"x64\" && item.Architecture !== \"x86\") return false\r\n if (architecture !== \"all\" && item.Architecture !== architecture) return false\r\n if (!item.InstallerUrl.endsWith(\".exe\") && !item.InstallerUrl.endsWith(\".msi\")) return false\r\n if (item.InstallerUrl.endsWith(\".msi\") && pkg.Installers.some(item2 => item2.Architecture === item.Architecture && item2.InstallerUrl.endsWith(\".exe\"))) return false\r\n if (pkg.Installers.findIndex(item2 => item2.Architecture === item.Architecture) !== index) return false\r\n return true\r\n })\r\n const result: WingetItem[] = []\r\n for (const { InstallerUrl, Architecture } of installers) {\r\n if (Architecture !== \"x64\" && Architecture !== \"x86\") continue\r\n const filename = await download(InstallerUrl, dir)\r\n result.push({ filename, version: pkg.PackageVersion, ext: InstallerUrl.endsWith(\".exe\") ? \"exe\" : \"msi\", architecture: Architecture })\r\n }\r\n for (const { version, filename, architecture, ext } of result) {\r\n await sleep(100)\r\n await rename(join(dir, filename), join(dir, `${name}_${version}_${architecture}.${ext}`))\r\n }\r\n}\r\n\r\nexport interface GithubContent {\r\n name: string\r\n path: string\r\n sha: string\r\n size: number\r\n url: string\r\n html_url: string\r\n git_url: string\r\n download_url?: string | null\r\n type: string\r\n _links: Links\r\n}\r\n\r\nexport interface Links {\r\n self: string\r\n git: string\r\n html: string\r\n}\r\n\r\nexport async function downloadChrome(dir: string) {\r\n await downloadFromWinget({\r\n name: \"Chrome\",\r\n id: \"Google.Chrome\",\r\n dir,\r\n architecture: \"all\"\r\n })\r\n}\r\n\r\nexport async function downloadNodeJS(dir: string) {\r\n await downloadFromWinget({\r\n name: \"NodeJS\",\r\n id: \"OpenJS.NodeJS.LTS\",\r\n dir\r\n })\r\n}\r\n\r\nexport async function download7Zip(dir: string) {\r\n await downloadFromWinget({\r\n name: \"7Zip\",\r\n id: \"7zip.7zip\",\r\n dir,\r\n architecture: \"all\"\r\n })\r\n}\r\n\r\nexport async function downloadGit(dir: string) {\r\n await downloadFromWinget({\r\n name: \"Git\",\r\n id: \"Git.Git\",\r\n dir\r\n })\r\n}\r\n\r\nexport async function downloadDeskGo(dir: string) {\r\n await downloadFromPCQQ(dir, 3318, 23125)\r\n}\r\n\r\nexport async function downloadGeekUninstaller(dir: string) {\r\n await download(`https://geekuninstaller.com/geek.zip`, dir)\r\n}\r\n\r\nexport const vscodeExts: string[] = [\"MS-CEINTL.vscode-language-pack-zh-hans\", \"russell.any-rule\", \"russell.any-type\", \"formulahendry.code-runner\", \"dsznajder.es7-react-js-snippets\", \"ms-vscode.vscode-typescript-next\", \"bierner.lit-html\", \"ritwickdey.LiveServer\", \"yzhang.markdown-all-in-one\", \"bierner.markdown-preview-github-styles\", \"mervin.markdown-formatter\", \"DavidAnson.vscode-markdownlint\", \"PKief.material-icon-theme\", \"techer.open-in-browser\", \"esbenp.prettier-vscode\", \"Prisma.prisma\", \"bradlc.vscode-tailwindcss\", \"styled-components.vscode-styled-components\", \"rioukkevin.vscode-git-commit\"]\r\n\r\nexport async function downloadVscodeExt(dir: string, ext: string) {\r\n const response = await fetch(`https://marketplace.visualstudio.com/items?itemName=${ext}`)\r\n const html = await response.text()\r\n const reg = /^(.+?)\\.(.+?)$/\r\n const [, author, name] = ext.match(reg)!\r\n const reg2 = /\"Version\":\"(.+?)\"/\r\n const version = html.match(reg2)![1]\r\n const reg3 = /<span class=\"ux-item-name\">(.+?)<\\/span>/\r\n const displayName = html.match(reg3)![1]\r\n consola.start(`正在下载 ${displayName}`)\r\n const url = `https://marketplace.visualstudio.com/_apis/public/gallery/publishers/${author}/vsextensions/${name}/${version}/vspackage`\r\n await download(url, dir, `${ext}-${version}.vsix`)\r\n}\r\n\r\nexport async function downloadVscodeExts(dir: string) {\r\n await mkdir(dir, { recursive: true })\r\n for (const ext of vscodeExts) {\r\n await downloadVscodeExt(dir, ext)\r\n }\r\n}\r\n\r\nexport const SoftwareDownloadMap: Record<Software, (dir: string) => Promise<void>> = {\r\n [Software.Chrome]: downloadChrome,\r\n [Software.NodeJS]: downloadNodeJS,\r\n [Software[\"7zip\"]]: download7Zip,\r\n [Software.Git]: downloadGit,\r\n [Software.DeskGo]: downloadDeskGo,\r\n [Software[\"Geek Uninstaller\"]]: downloadGeekUninstaller,\r\n [Software[\"VS Code\"]]: downloadVscode,\r\n [Software.Supermium]: downloadSupermium\r\n}\r\n\r\nexport async function writeInstallVscodeExtScript(dir: string) {\r\n const script = `const { readdir } = require(\"fs/promises\")\r\nconst { spawn } = require(\"child_process\")\r\n\r\nfunction spawnAsync(command) {\r\n return new Promise((resolve, reject) => {\r\n const child = spawn(command, { shell: true, stdio: \"inherit\" })\r\n child.on(\"exit\", code => {\r\n if (code !== 0) return reject(new Error(\\`Command failed with code \\${code}\\`))\r\n resolve()\r\n })\r\n })\r\n}\r\n\r\nasync function main() {\r\n const dir = await readdir(\"./\")\r\n const exts = dir.filter(name => name.endsWith(\".vsix\"))\r\n for (const ext of exts) {\r\n await spawnAsync(\\`code --install-extension \"\\${ext}\"\\`)\r\n }\r\n}\r\n\r\nmain()`\r\n await writeFile(join(dir, \"install.js\"), script, \"utf-8\")\r\n}\r\n\r\nexport async function getProcessInfoFromPid(pid: number) {\r\n try {\r\n return await new Promise<string | undefined>((resolve, reject) => {\r\n exec(`tasklist | findstr ${pid}`, (error, stdout, stderr) => {\r\n if (error !== null) return reject(error)\r\n if (stderr !== \"\") return reject(stderr)\r\n const reg = new RegExp(`( +)${pid}( (Services|Console) +)`)\r\n return resolve(\r\n stdout\r\n .split(/[\\n\\r]/)\r\n .find(line => reg.test(line))\r\n ?.replace(reg, \"$1$2\")\r\n ?.replace(/ +/g, \" \")\r\n )\r\n })\r\n })\r\n } catch (error) {\r\n return undefined\r\n }\r\n}\r\n\r\nexport type PidInfo = {\r\n pid: number\r\n info: string\r\n}\r\n\r\nexport async function getPidInfoFromPort(port: number) {\r\n try {\r\n return await new Promise<PidInfo[]>((resolve, reject) => {\r\n exec(`netstat -ano | findstr :${port}`, (error, stdout, stderr) => {\r\n if (error !== null) return reject(error)\r\n if (stderr !== \"\") return reject(stderr)\r\n const reg = new RegExp(` (\\\\[::\\\\]|(\\\\d{1,3}\\\\.){3}\\\\d{1,3}):${port} `)\r\n const result = Array.from(\r\n new Set(\r\n stdout\r\n .split(/[\\n\\r]/)\r\n .filter(line => reg.test(line))\r\n .map(line => ({ pid: parseInt(line.match(reg)![1]), info: line }))\r\n )\r\n )\r\n for (let i = 0; ; ) {\r\n if (result.some(({ info }) => info[i] === undefined)) break\r\n if (result.some(({ info }) => info[i] !== \" \" || info[i + 1] !== \" \")) {\r\n i++\r\n continue\r\n }\r\n result.forEach(item => (item.info = `${item.info.slice(0, i)}${item.info.slice(i + 1)}`))\r\n }\r\n resolve(result)\r\n })\r\n })\r\n } catch (error) {\r\n return []\r\n }\r\n}\r\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { exec, spawn } from \"child_process\"\r\nimport consola from \"consola\"\r\nimport { Stats, createWriteStream, readFileSync } from \"fs\"\r\nimport { mkdir, readFile, readdir, rename, rm, stat, writeFile } from \"fs/promises\"\r\nimport { HttpsProxyAgent } from \"https-proxy-agent\"\r\nimport * as JSON5 from \"json5\"\r\nimport { type Headers as NodeFetchHeaders } from \"node-fetch\"\r\nimport { ParsedPath, isAbsolute, join, parse } from \"path\"\r\nimport { Config } from \"prettier\"\r\nimport { cwd, exit } from \"process\"\r\nimport { Readable } from \"stream\"\r\nimport YAML from \"yaml\"\r\nimport { Software } from \"../constant\"\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 reg = /^(\\d+)(\\.\\d+)?(\\.\\d+)?/\r\n const result = version.match(reg)\r\n if (!result) throw new Error(\"无效的版本号\")\r\n return Array.from(result)\r\n .slice(1)\r\n .map(str => (str ? parseInt(str.replace(/^\\./, \"\")) : 0))\r\n}\r\n\r\nexport async function getPackageUpgradeVersion(packageName: string, version: string, level: \"major\" | \"minor\" | \"patch\") {\r\n const current = getVersionNum(version)\r\n const versions = await getPackageVersions(packageName)\r\n const reg = /^\\d+\\.\\d+\\.\\d+$/\r\n const result = versions\r\n .filter(item => {\r\n if (!reg.test(item)) return false\r\n const latest = getVersionNum(item)\r\n let index = -1\r\n for (let i = 0; i < latest.length; i++) {\r\n const cv = current[i]\r\n const lv = latest[i]\r\n if (lv < cv) break\r\n if (lv > cv) {\r\n index = i\r\n break\r\n }\r\n }\r\n if (index === -1) return false\r\n if (level === \"major\") return index >= 0\r\n if (level === \"minor\") return index >= 1\r\n if (level === \"patch\") return index >= 2\r\n })\r\n .map(item => getVersionNum(item))\r\n result.sort((a, b) => {\r\n for (let i = 0; i < a.length; i++) {\r\n if (a[i] < b[i]) return 1\r\n if (a[i] > b[i]) return -1\r\n }\r\n return 0\r\n })\r\n return result[0]?.join(\".\")\r\n}\r\n\r\n/** 读取 package.json */\r\nexport function readPackageJsonSync(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/** 读取 package.json */\r\nexport async function readPackageJson(path?: string): Promise<Record<string, any>> {\r\n try {\r\n const result = JSON.parse(await readFile(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 async function readTsConfigJSON(path?: string): Promise<Record<string, any>> {\r\n try {\r\n const result = JSON5.parse(await readFile(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 async function writePackageJson(packageJson: Record<string, any>, path?: string) {\r\n try {\r\n await writeFile(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 async function getFiles(path: string, judge: (path: ParsedPath, stats: Stats) => boolean, depthOrOptions?: number | GetFilesOptions) {\r\n const result: string[] = []\r\n async 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 = await readdir(path)\r\n for (const file of files) {\r\n const filePath = join(path, file)\r\n const parsedPath = parse(filePath)\r\n const stats = await stat(filePath)\r\n if (judge(parsedPath, stats)) {\r\n result.push(filePath)\r\n }\r\n if (stats.isDirectory() && (!exclude || !exclude(parsedPath, stats)) && (depth === undefined || depth > 0)) {\r\n await _getFiles(filePath, {\r\n depth: depth === undefined ? undefined : depth - 1,\r\n exclude\r\n })\r\n }\r\n }\r\n }\r\n await _getFiles(path, depthOrOptions)\r\n return result\r\n}\r\n\r\n/** 删除 ESLint 配置文件 */\r\nexport async function removeESLint() {\r\n try {\r\n const files = await 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 for (const file of files) {\r\n try {\r\n await rm(file, { force: true, recursive: true })\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 = await 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 await writePackageJson(pkg)\r\n consola.success(\"删除 ESLint 依赖成功\")\r\n } catch (error) {\r\n consola.fail(\"删除 ESLint 依赖失败\")\r\n }\r\n}\r\n\r\nexport async function vite() {\r\n await setTsConfig(\"noUnusedLocals\")\r\n await setTsConfig(\"noUnusedParameters\")\r\n const pkg = await readPackageJson()\r\n pkg.scripts.dev = \"vite --host\"\r\n await writePackageJson(pkg)\r\n}\r\n\r\n/** 添加 tailwind.config.js 配置成功 */\r\nexport async function addTailwindConfig() {\r\n try {\r\n await writeFile(\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`,\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 async function addPostCSSConfig() {\r\n try {\r\n const packageJson = await readPackageJson()\r\n const autoprefixer = Object.keys(packageJson.dependencies).includes(\"autoprefixer\") || Object.keys(packageJson.devDependencies).includes(\"autoprefixer\")\r\n await writeFile(\r\n getAbsolutePath(\"postcss.config.js\"),\r\n `module.exports = {\r\n plugins: {\r\n tailwindcss: {}${\r\n autoprefixer\r\n ? `,\r\n autoprefixer: {}`\r\n : \"\"\r\n }\r\n }\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 async function addTailwindToCSS() {\r\n try {\r\n const dir = getAbsolutePath(\"./src\")\r\n const files = await 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 = await readFile(file, \"utf-8\")\r\n if (css.includes(\"@tailwind\")) {\r\n consola.warn(`${base} 已经包含 tailwind`)\r\n return\r\n }\r\n await writeFile(\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 = await readPackageJson()\r\n const tailwind = Object.keys(packageJson.dependencies).includes(\"tailwindcss\") || Object.keys(packageJson.devDependencies).includes(\"tailwindcss\")\r\n await writeFile(getAbsolutePath(\"./prettier.config.cjs\"), tailwind ? prettierConfigTextWithTailwind : prettierConfigText)\r\n await addDevDependencies(packageJson, \"prettier\")\r\n await addDevDependencies(packageJson, \"prettier-plugin-tailwindcss\")\r\n await writePackageJson(packageJson)\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 packageJson = await readPackageJson()\r\n await addDevDependencies(packageJson, \"tailwindcss\")\r\n await addDevDependencies(packageJson, \"autoprefixer\")\r\n await addDevDependencies(packageJson, \"postcss\")\r\n await addDevDependencies(packageJson, \"prettier\")\r\n await addDevDependencies(packageJson, \"prettier-plugin-tailwindcss\")\r\n await writePackageJson(packageJson)\r\n await addTailwindConfig()\r\n await addPostCSSConfig()\r\n await addTailwindToCSS()\r\n await addPrettierConfig()\r\n}\r\n\r\nexport async function removeComment(path: string) {\r\n try {\r\n const text = await readFile(getAbsolutePath(path), \"utf-8\")\r\n const newText = text.replace(/^ *?\\/\\/.*?$/gm, \"\")\r\n await writeFile(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 async function setTsConfig(key: string, value?: any) {\r\n const tsconfig = await readTsConfigJSON()\r\n if (value === undefined) {\r\n delete tsconfig.compilerOptions[key]\r\n } else {\r\n switch (key) {\r\n case \"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 break\r\n case \"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 break\r\n case \"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 break\r\n case \"noEmit\":\r\n tsconfig.compilerOptions.noEmit = !!value\r\n break\r\n default:\r\n consola.fail(`暂不支持 ${key} 项`)\r\n exit()\r\n }\r\n }\r\n await writeFile(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 execAsync(command: string) {\r\n consola.log(command)\r\n return new Promise<string>((resolve, reject) => {\r\n exec(command, (error, stdout, stderr) => {\r\n if (error) return reject(error)\r\n if (stderr) consola.warn(stderr)\r\n resolve(stdout)\r\n })\r\n })\r\n}\r\n\r\nexport function spawnAsync(command: string, options?: SpawnAsyncOptions) {\r\n consola.log(command)\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\r\nexport const rsbuildConfig = `import { defineConfig } from \"@rsbuild/core\"\r\nimport { pluginReact } from \"@rsbuild/plugin-react\"\r\n\r\nexport default defineConfig({\r\n html: {\r\n template: \"public/index.html\"\r\n },\r\n plugins: [pluginReact()],\r\n server: {\r\n port: 5173\r\n },\r\n source: {\r\n define: {}\r\n }\r\n})\r\n`\r\n\r\nexport async function writeRsbuildConfig() {\r\n await writeFile(getAbsolutePath(\"rsbuild.config.ts\"), rsbuildConfig, \"utf-8\")\r\n}\r\n\r\nexport const indexHtml = `<!doctype html>\r\n<html lang=\"zh\">\r\n <head>\r\n <meta charset=\"UTF-8\" />\r\n <link rel=\"icon\" href=\"/logo.webp\" />\r\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n <meta name=\"description\" content=\"江苏格数科技有限公司\" />\r\n <title>Hello, World!</title>\r\n </head>\r\n <body>\r\n <div id=\"root\"></div>\r\n </body>\r\n</html>\r\n`\r\n\r\nexport async function createIndexHtml() {\r\n try {\r\n await writeFile(getAbsolutePath(\"public/index.html\"), indexHtml, \"utf-8\")\r\n consola.success(\"创建 index.html 成功\")\r\n } catch (error) {\r\n await mkdir(getAbsolutePath(\"public\"))\r\n try {\r\n await writeFile(getAbsolutePath(\"public/index.html\"), indexHtml, \"utf-8\")\r\n consola.success(\"创建 index.html 成功\")\r\n } catch (error) {\r\n consola.fail(\"创建 index.html 失败\")\r\n exit()\r\n }\r\n }\r\n}\r\n\r\nexport const addedRules = [\"package-lock.json\", \"yarn.lock\", \"node_modules\", \"dist\", \"build\", \"pnpm-lock.yaml\", \"yarn-error.log\"]\r\n\r\nexport async function addGitignore() {\r\n try {\r\n const files = await getFiles(cwd(), (path, stats) => path.base === \".gitignore\" && stats.isFile(), { depth: 1 })\r\n const file = files.at(0)\r\n if (file) {\r\n const gitignore = await readFile(getAbsolutePath(\".gitignore\"), \"utf-8\")\r\n const newGitignore = `${gitignore}\\n${addedRules.join(\"\\n\")}`\r\n await writeFile(getAbsolutePath(\".gitignore\"), newGitignore, \"utf-8\")\r\n } else {\r\n await writeFile(getAbsolutePath(\".gitignore\"), addedRules.join(\"\\n\"), \"utf-8\")\r\n }\r\n } catch (error) {\r\n consola.fail(\"添加 .gitignore 失败\")\r\n exit()\r\n }\r\n}\r\n\r\nconst agent = new HttpsProxyAgent(\"http://localhost:7890\")\r\n\r\nexport function getFilename(headers: Headers | NodeFetchHeaders) {\r\n const disposition = headers.get(\"content-disposition\")\r\n if (!disposition) return undefined\r\n const reg = /filename=(.+?);/\r\n const result = disposition.match(reg)\r\n if (!result) return undefined\r\n return result[1]\r\n}\r\n\r\nexport async function download(url: string, dir: string, filename?: string) {\r\n const { default: fetch } = await import(\"node-fetch\")\r\n const response = await fetch(url, { agent })\r\n filename = getFilename(response.headers) || filename || new URL(url).pathname.split(\"/\").at(-1)!\r\n const writeable = createWriteStream(join(dir, filename))\r\n await new Promise((resolve, reject) => Readable.from(response.body!).pipe(writeable).on(\"finish\", resolve).on(\"error\", reject))\r\n return filename\r\n}\r\n\r\nexport async function downloadVscode(dir: string) {\r\n await download(\"https://code.visualstudio.com/sha/download?build=stable&os=win32-x64\", dir, \"vscode.exe\")\r\n}\r\n\r\nexport async function sleep(ms: number) {\r\n return new Promise(resolve => setTimeout(resolve, ms))\r\n}\r\n\r\nexport async function downloadSupermium(dir: string) {\r\n const response = await fetch(\"https://win32subsystem.live/supermium/\")\r\n const html = await response.text()\r\n const reg = /href=\".+?setup\\.exe\"/g\r\n const matches = Array.from(html.match(reg) || [])\r\n const reg2 = /<b>Supermium (\\d+(\\.\\d+)*)/\r\n const version = html.match(reg2)![1]\r\n for (let i = 0; i < matches.length; i++) {\r\n const str = matches[i]\r\n const url = new URL(str.slice(6, -1), \"https://win32subsystem.live\").href\r\n const filename = await download(url, dir)\r\n await sleep(100)\r\n await rename(join(dir, filename), join(dir, `Supermium_${version}_${filename.endsWith(\"64_setup.exe\") ? \"x64\" : \"x86\"}.exe`))\r\n }\r\n}\r\n\r\nexport namespace PCQQ {\r\n export interface Result {\r\n resp: Resp\r\n }\r\n\r\n export interface Resp {\r\n soft_list: Softlist[]\r\n retCode: number\r\n }\r\n\r\n export interface Softlist {\r\n soft_id: number\r\n os_type: number\r\n os_bit: number\r\n display_name: string\r\n nick_ver: string\r\n ver_name: string\r\n file_size: string\r\n file_name: string\r\n publish_date: string\r\n download_url: string\r\n download_https_url: string\r\n }\r\n}\r\n\r\nexport async function downloadFromPCQQ(dir: string, cmdid: number, soft_id_list: number) {\r\n const data = new URLSearchParams()\r\n data.set(\"cmdid\", cmdid.toString())\r\n data.set(\"jprxReq[req][soft_id_list][]\", soft_id_list.toString())\r\n const headers = new Headers()\r\n headers.set(\"Content-Type\", \"application/x-www-form-urlencoded\")\r\n const response = await fetch(`https://luban.m.qq.com/api/public/software-manager/softwareProxy`, { method: \"POST\", headers, body: data.toString() })\r\n const result: PCQQ.Result = await response.json()\r\n await download(result.resp.soft_list[0].download_https_url, dir, result.resp.soft_list[0].file_name)\r\n}\r\n\r\nexport namespace Winget {\r\n export interface Package {\r\n PackageIdentifier: string\r\n PackageVersion: string\r\n InstallerType: string\r\n InstallModes: string[]\r\n InstallerSwitches: InstallerSwitches\r\n ExpectedReturnCodes: ExpectedReturnCode[]\r\n UpgradeBehavior: string\r\n Protocols: string[]\r\n FileExtensions: string[]\r\n AppsAndFeaturesEntries: AppsAndFeaturesEntry[]\r\n Installers: Installer[]\r\n ManifestType: string\r\n ManifestVersion: string\r\n }\r\n\r\n export interface Installer {\r\n Architecture: string\r\n Scope: string\r\n InstallerUrl: string\r\n InstallerSha256: string\r\n InstallerSwitches: InstallerSwitches2\r\n ProductCode: string\r\n }\r\n\r\n export interface InstallerSwitches2 {\r\n Custom: string\r\n }\r\n\r\n export interface AppsAndFeaturesEntry {\r\n UpgradeCode: string\r\n InstallerType: string\r\n }\r\n\r\n export interface ExpectedReturnCode {\r\n InstallerReturnCode: number\r\n ReturnResponse: string\r\n }\r\n\r\n export interface InstallerSwitches {\r\n Log: string\r\n }\r\n}\r\n\r\nexport type WingetItem = {\r\n filename: string\r\n version: string\r\n ext: string\r\n architecture: string\r\n}\r\n\r\nexport type WingetDownloadInfo = {\r\n name: string\r\n id: string\r\n dir: string\r\n architecture?: \"x64\" | \"x86\" | \"all\"\r\n}\r\n\r\nexport async function downloadFromWinget({ name, id, dir, architecture = \"x64\" }: WingetDownloadInfo) {\r\n const { default: fetch } = await import(\"node-fetch\")\r\n const firstLetter = id[0].toLowerCase()\r\n const path = id.replace(/\\./g, \"/\")\r\n const response = await fetch(`https://api.github.com/repos/microsoft/winget-pkgs/contents/manifests/${firstLetter}/${path}`, { agent })\r\n const data: GithubContent[] = (await response.json()) as any\r\n const reg2 = /^\\d+(\\.\\d+?)*$/\r\n const stables = data.filter(item => reg2.test(item.name))\r\n stables.sort((a, b) => {\r\n const avs = a.name.split(\".\")\r\n const bvs = b.name.split(\".\")\r\n const max = Math.max(avs.length, bvs.length)\r\n for (let i = 0; i < max; i++) {\r\n const av = avs[i] ? parseInt(avs[i]) : 0\r\n const bv = bvs[i] ? parseInt(bvs[i]) : 0\r\n if (av < bv) return 1\r\n if (av > bv) return -1\r\n }\r\n return 0\r\n })\r\n const response2 = await fetch(`https://raw.githubusercontent.com/microsoft/winget-pkgs/master/manifests/${firstLetter}/${path}/${stables[0].name}/${id}.installer.yaml`, { agent })\r\n const yaml = await response2.text()\r\n const pkg: Winget.Package = YAML.parse(yaml)\r\n const installers = pkg.Installers.filter((item, index) => {\r\n if (item.Architecture !== \"x64\" && item.Architecture !== \"x86\") return false\r\n if (architecture !== \"all\" && item.Architecture !== architecture) return false\r\n if (!item.InstallerUrl.endsWith(\".exe\") && !item.InstallerUrl.endsWith(\".msi\")) return false\r\n if (item.InstallerUrl.endsWith(\".msi\") && pkg.Installers.some(item2 => item2.Architecture === item.Architecture && item2.InstallerUrl.endsWith(\".exe\"))) return false\r\n if (pkg.Installers.findIndex(item2 => item2.Architecture === item.Architecture) !== index) return false\r\n return true\r\n })\r\n const result: WingetItem[] = []\r\n for (const { InstallerUrl, Architecture } of installers) {\r\n if (Architecture !== \"x64\" && Architecture !== \"x86\") continue\r\n const filename = await download(InstallerUrl, dir)\r\n result.push({ filename, version: pkg.PackageVersion, ext: InstallerUrl.endsWith(\".exe\") ? \"exe\" : \"msi\", architecture: Architecture })\r\n }\r\n for (const { version, filename, architecture, ext } of result) {\r\n await sleep(100)\r\n await rename(join(dir, filename), join(dir, `${name}_${version}_${architecture}.${ext}`))\r\n }\r\n}\r\n\r\nexport interface GithubContent {\r\n name: string\r\n path: string\r\n sha: string\r\n size: number\r\n url: string\r\n html_url: string\r\n git_url: string\r\n download_url?: string | null\r\n type: string\r\n _links: Links\r\n}\r\n\r\nexport interface Links {\r\n self: string\r\n git: string\r\n html: string\r\n}\r\n\r\nexport async function downloadChrome(dir: string) {\r\n await downloadFromWinget({\r\n name: \"Chrome\",\r\n id: \"Google.Chrome\",\r\n dir,\r\n architecture: \"all\"\r\n })\r\n}\r\n\r\nexport async function downloadNodeJS(dir: string) {\r\n await downloadFromWinget({\r\n name: \"NodeJS\",\r\n id: \"OpenJS.NodeJS.LTS\",\r\n dir\r\n })\r\n}\r\n\r\nexport async function download7Zip(dir: string) {\r\n await downloadFromWinget({\r\n name: \"7Zip\",\r\n id: \"7zip.7zip\",\r\n dir,\r\n architecture: \"all\"\r\n })\r\n}\r\n\r\nexport async function downloadGit(dir: string) {\r\n await downloadFromWinget({\r\n name: \"Git\",\r\n id: \"Git.Git\",\r\n dir\r\n })\r\n}\r\n\r\nexport async function downloadDeskGo(dir: string) {\r\n await downloadFromPCQQ(dir, 3318, 23125)\r\n}\r\n\r\nexport async function downloadGeekUninstaller(dir: string) {\r\n await download(`https://geekuninstaller.com/geek.zip`, dir)\r\n}\r\n\r\nexport const vscodeExts: string[] = [\"MS-CEINTL.vscode-language-pack-zh-hans\", \"russell.any-rule\", \"russell.any-type\", \"formulahendry.code-runner\", \"dsznajder.es7-react-js-snippets\", \"ms-vscode.vscode-typescript-next\", \"bierner.lit-html\", \"ritwickdey.LiveServer\", \"yzhang.markdown-all-in-one\", \"bierner.markdown-preview-github-styles\", \"mervin.markdown-formatter\", \"DavidAnson.vscode-markdownlint\", \"PKief.material-icon-theme\", \"techer.open-in-browser\", \"esbenp.prettier-vscode\", \"Prisma.prisma\", \"bradlc.vscode-tailwindcss\", \"styled-components.vscode-styled-components\", \"rioukkevin.vscode-git-commit\"]\r\n\r\nexport async function downloadVscodeExt(dir: string, ext: string) {\r\n const response = await fetch(`https://marketplace.visualstudio.com/items?itemName=${ext}`)\r\n const html = await response.text()\r\n const reg = /^(.+?)\\.(.+?)$/\r\n const [, author, name] = ext.match(reg)!\r\n const reg2 = /\"Version\":\"(.+?)\"/\r\n const version = html.match(reg2)![1]\r\n const reg3 = /<span class=\"ux-item-name\">(.+?)<\\/span>/\r\n const displayName = html.match(reg3)![1]\r\n consola.start(`正在下载 ${displayName}`)\r\n const url = `https://marketplace.visualstudio.com/_apis/public/gallery/publishers/${author}/vsextensions/${name}/${version}/vspackage`\r\n await download(url, dir, `${ext}-${version}.vsix`)\r\n}\r\n\r\nexport async function downloadVscodeExts(dir: string) {\r\n await mkdir(dir, { recursive: true })\r\n for (const ext of vscodeExts) {\r\n await downloadVscodeExt(dir, ext)\r\n }\r\n}\r\n\r\nexport const SoftwareDownloadMap: Record<Software, (dir: string) => Promise<void>> = {\r\n [Software.Chrome]: downloadChrome,\r\n [Software.NodeJS]: downloadNodeJS,\r\n [Software[\"7zip\"]]: download7Zip,\r\n [Software.Git]: downloadGit,\r\n [Software.DeskGo]: downloadDeskGo,\r\n [Software[\"Geek Uninstaller\"]]: downloadGeekUninstaller,\r\n [Software[\"VS Code\"]]: downloadVscode,\r\n [Software.Supermium]: downloadSupermium\r\n}\r\n\r\nexport async function writeInstallVscodeExtScript(dir: string) {\r\n const script = `const { readdir } = require(\"fs/promises\")\r\nconst { spawn } = require(\"child_process\")\r\n\r\nfunction spawnAsync(command) {\r\n return new Promise((resolve, reject) => {\r\n const child = spawn(command, { shell: true, stdio: \"inherit\" })\r\n child.on(\"exit\", code => {\r\n if (code !== 0) return reject(new Error(\\`Command failed with code \\${code}\\`))\r\n resolve()\r\n })\r\n })\r\n}\r\n\r\nasync function main() {\r\n const dir = await readdir(\"./\")\r\n const exts = dir.filter(name => name.endsWith(\".vsix\"))\r\n for (const ext of exts) {\r\n await spawnAsync(\\`code --install-extension \"\\${ext}\"\\`)\r\n }\r\n}\r\n\r\nmain()`\r\n await writeFile(join(dir, \"install.js\"), script, \"utf-8\")\r\n}\r\n\r\nexport async function getProcessInfoFromPid(pid: number) {\r\n try {\r\n const stdout = await execAsync(`tasklist | findstr ${pid}`)\r\n const reg = new RegExp(`( +)${pid}( (Services|Console) +)`)\r\n return stdout\r\n .split(/[\\n\\r]/)\r\n .find(line => reg.test(line))\r\n ?.replace(reg, \"$1$2\")\r\n ?.replace(/ +/g, \" \")\r\n } catch (error) {\r\n return undefined\r\n }\r\n}\r\n\r\nexport type PidInfo = {\r\n pid: number\r\n info: string\r\n}\r\n\r\nexport async function getPidInfoFromPort(port: number) {\r\n try {\r\n const stdout = await execAsync(`netstat -ano | findstr :${port}`)\r\n const reg = new RegExp(` (\\\\[::\\\\]|(\\\\d{1,3}\\\\.){3}\\\\d{1,3}):${port} `)\r\n const result = Array.from(\r\n new Set(\r\n stdout\r\n .split(/[\\n\\r]/)\r\n .filter(line => reg.test(line))\r\n .map(line => ({ pid: parseInt(line.match(reg)![1]), info: line }))\r\n )\r\n )\r\n for (let i = 0; ; ) {\r\n if (result.some(({ info }) => info[i] === undefined)) break\r\n if (result.some(({ info }) => info[i] !== \" \" || info[i + 1] !== \" \")) {\r\n i++\r\n continue\r\n }\r\n result.forEach(item => (item.info = `${item.info.slice(0, i)}${item.info.slice(i + 1)}`))\r\n }\r\n return result\r\n } catch (error) {\r\n return []\r\n }\r\n}\r\n"],
5
+ "mappings": "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",
6
6
  "names": ["consola", "path", "depthOrOptions", "tailwind", "Target", "Module", "ModuleResolution", "t", "m", "mr", "install", "cwd", "error", "fetch", "YAML", "architecture"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zixulu",
3
- "version": "1.19.0",
3
+ "version": "1.19.2",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "bin": "dist/index.js",
@@ -30,7 +30,7 @@
30
30
  "commander": "^12.0.0",
31
31
  "consola": "^3.2.3",
32
32
  "https-proxy-agent": "^7.0.4",
33
- "inquirer": "^9.2.16",
33
+ "inquirer": "^9.2.19",
34
34
  "json5": "^2.2.3",
35
35
  "node-fetch": "^3.3.2",
36
36
  "prettier": "^3.2.5",
@@ -38,7 +38,7 @@
38
38
  },
39
39
  "devDependencies": {
40
40
  "@types/inquirer": "^9.0.7",
41
- "@types/node": "^20.11.27",
41
+ "@types/node": "^20.12.7",
42
42
  "father": "^4.4.0"
43
43
  }
44
44
  }
package/src/index.ts CHANGED
@@ -1,13 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
 
3
+ import { exec } from "child_process"
3
4
  import { Argument, Command } from "commander"
4
5
  import consola from "consola"
5
6
  import { mkdir, readFile, writeFile } from "fs/promises"
6
7
  import { resolve } from "path"
7
8
  import { Manager, Registry, Software } from "./constant"
8
- import { Module, ModuleResolution, SoftwareDownloadMap, Target, addDependencies, addDevDependencies, addGitignore, addLatestDependencies, addPostCSSConfig, addPrettierConfig, addTailwindConfig, addTailwindToCSS, createIndexHtml, downloadVscodeExts, getFiles, getPackageUpgradeVersion, getPidInfoFromPort, getProcessInfoFromPid, getTypeInGenerics, getVersionFromRequiredVersion, install, readPackageJson, readPackageJsonSync, removeComment, removeESLint, setTsConfig, sortArrayOrObject, spawnAsync, splitExtendsType, tailwind, vite, writeInstallVscodeExtScript, writePackageJson, writeRsbuildConfig } from "./utils"
9
- import pidFromPort from "pid-from-port"
10
- import { exec } from "child_process"
9
+ import { Module, ModuleResolution, SoftwareDownloadMap, Target, addDependencies, addDevDependencies, addGitignore, addPostCSSConfig, addPrettierConfig, addTailwindConfig, addTailwindToCSS, createIndexHtml, downloadVscodeExts, execAsync, getFiles, getPackageUpgradeVersion, getPidInfoFromPort, getProcessInfoFromPid, getTypeInGenerics, getVersionFromRequiredVersion, install, readPackageJson, readPackageJsonSync, removeComment, removeESLint, setTsConfig, sortArrayOrObject, spawnAsync, splitExtendsType, tailwind, vite, writeInstallVscodeExtScript, writePackageJson, writeRsbuildConfig } from "./utils"
11
10
 
12
11
  const program = new Command()
13
12
 
@@ -202,7 +201,21 @@ program
202
201
  .alias("ud")
203
202
  .description("升级所有依赖")
204
203
  .action(async () => {
205
- consola.warn("请在使用本功能前提交或备份代码")
204
+ const status = await new Promise<string>((resolve, reject) => {
205
+ exec("git status", (error, stdout, stderr) => {
206
+ if (error) return reject(error)
207
+ if (stderr) return reject(stderr)
208
+ resolve(stdout)
209
+ })
210
+ })
211
+
212
+ if (status === "fatal: not a git repository (or any of the parent directories): .git") {
213
+ consola.warn("请在使用本功能前备份代码")
214
+ } else if (!status.includes("nothing to commit, working tree clean")) {
215
+ consola.warn("请在使用本功能前提交代码")
216
+ return
217
+ }
218
+
206
219
  const { default: inquirer } = await import("inquirer")
207
220
 
208
221
  const packageJson = await readPackageJson()
@@ -252,7 +265,23 @@ program
252
265
 
253
266
  await writePackageJson(packageJson)
254
267
 
255
- install()
268
+ const status1 = await execAsync("git status")
269
+
270
+ const reg = /modified: *package\.json/m
271
+
272
+ try {
273
+ await execAsync("npx tsc --noEmit")
274
+ } catch (error) {
275
+ consola.error("TypeScript 错误,请手动解决")
276
+ return
277
+ }
278
+
279
+ if (reg.test(status1)) {
280
+ consola.start("提交代码")
281
+ await execAsync("git add package.json")
282
+ await execAsync(`git commit -m "✨feature: upgrade dependencies"`)
283
+ await install()
284
+ }
256
285
  })
257
286
 
258
287
  program
@@ -578,8 +578,19 @@ export type SpawnAsyncOptions = {
578
578
  cwd?: string | URL | undefined
579
579
  }
580
580
 
581
+ export function execAsync(command: string) {
582
+ consola.log(command)
583
+ return new Promise<string>((resolve, reject) => {
584
+ exec(command, (error, stdout, stderr) => {
585
+ if (error) return reject(error)
586
+ if (stderr) consola.warn(stderr)
587
+ resolve(stdout)
588
+ })
589
+ })
590
+ }
591
+
581
592
  export function spawnAsync(command: string, options?: SpawnAsyncOptions) {
582
- console.log(command)
593
+ consola.log(command)
583
594
  const { ignoreError = false, cwd } = options || {}
584
595
  return new Promise<void>((resolve, reject) => {
585
596
  const child = spawn(command, { shell: true, stdio: "inherit", cwd })
@@ -988,20 +999,13 @@ main()`
988
999
 
989
1000
  export async function getProcessInfoFromPid(pid: number) {
990
1001
  try {
991
- return await new Promise<string | undefined>((resolve, reject) => {
992
- exec(`tasklist | findstr ${pid}`, (error, stdout, stderr) => {
993
- if (error !== null) return reject(error)
994
- if (stderr !== "") return reject(stderr)
995
- const reg = new RegExp(`( +)${pid}( (Services|Console) +)`)
996
- return resolve(
997
- stdout
998
- .split(/[\n\r]/)
999
- .find(line => reg.test(line))
1000
- ?.replace(reg, "$1$2")
1001
- ?.replace(/ +/g, " ")
1002
- )
1003
- })
1004
- })
1002
+ const stdout = await execAsync(`tasklist | findstr ${pid}`)
1003
+ const reg = new RegExp(`( +)${pid}( (Services|Console) +)`)
1004
+ return stdout
1005
+ .split(/[\n\r]/)
1006
+ .find(line => reg.test(line))
1007
+ ?.replace(reg, "$1$2")
1008
+ ?.replace(/ +/g, " ")
1005
1009
  } catch (error) {
1006
1010
  return undefined
1007
1011
  }
@@ -1014,30 +1018,25 @@ export type PidInfo = {
1014
1018
 
1015
1019
  export async function getPidInfoFromPort(port: number) {
1016
1020
  try {
1017
- return await new Promise<PidInfo[]>((resolve, reject) => {
1018
- exec(`netstat -ano | findstr :${port}`, (error, stdout, stderr) => {
1019
- if (error !== null) return reject(error)
1020
- if (stderr !== "") return reject(stderr)
1021
- const reg = new RegExp(` (\\[::\\]|(\\d{1,3}\\.){3}\\d{1,3}):${port} `)
1022
- const result = Array.from(
1023
- new Set(
1024
- stdout
1025
- .split(/[\n\r]/)
1026
- .filter(line => reg.test(line))
1027
- .map(line => ({ pid: parseInt(line.match(reg)![1]), info: line }))
1028
- )
1029
- )
1030
- for (let i = 0; ; ) {
1031
- if (result.some(({ info }) => info[i] === undefined)) break
1032
- if (result.some(({ info }) => info[i] !== " " || info[i + 1] !== " ")) {
1033
- i++
1034
- continue
1035
- }
1036
- result.forEach(item => (item.info = `${item.info.slice(0, i)}${item.info.slice(i + 1)}`))
1037
- }
1038
- resolve(result)
1039
- })
1040
- })
1021
+ const stdout = await execAsync(`netstat -ano | findstr :${port}`)
1022
+ const reg = new RegExp(` (\\[::\\]|(\\d{1,3}\\.){3}\\d{1,3}):${port} `)
1023
+ const result = Array.from(
1024
+ new Set(
1025
+ stdout
1026
+ .split(/[\n\r]/)
1027
+ .filter(line => reg.test(line))
1028
+ .map(line => ({ pid: parseInt(line.match(reg)![1]), info: line }))
1029
+ )
1030
+ )
1031
+ for (let i = 0; ; ) {
1032
+ if (result.some(({ info }) => info[i] === undefined)) break
1033
+ if (result.some(({ info }) => info[i] !== " " || info[i + 1] !== " ")) {
1034
+ i++
1035
+ continue
1036
+ }
1037
+ result.forEach(item => (item.info = `${item.info.slice(0, i)}${item.info.slice(i + 1)}`))
1038
+ }
1039
+ return result
1041
1040
  } catch (error) {
1042
1041
  return []
1043
1042
  }