zixulu 1.26.3 → 1.26.4

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
@@ -125,12 +125,16 @@ export default defineConfig({
125
125
  await (0, import_utils.setTsConfig)("target", import_utils.Target.ESNext);
126
126
  });
127
127
  program.command("upgrade-dependency").alias("ud").description("升级所有依赖").action(async () => {
128
- const status = await (0, import_utils.execAsync)("git status");
129
- if (status === "fatal: not a git repository (or any of the parent directories): .git") {
128
+ if (await (0, import_utils.isCommandExisted)("git")) {
129
+ const status = await (0, import_utils.execAsync)("git status");
130
+ if (status === "fatal: not a git repository (or any of the parent directories): .git") {
131
+ import_consola.default.warn("请在使用本功能前备份代码");
132
+ } else if (!status.includes("nothing to commit, working tree clean")) {
133
+ import_consola.default.warn("请在使用本功能前提交代码");
134
+ return;
135
+ }
136
+ } else {
130
137
  import_consola.default.warn("请在使用本功能前备份代码");
131
- } else if (!status.includes("nothing to commit, working tree clean")) {
132
- import_consola.default.warn("请在使用本功能前提交代码");
133
- return;
134
138
  }
135
139
  const { default: inquirer } = await import("inquirer");
136
140
  const packageJson = await (0, import_utils.readPackageJson)();
@@ -146,6 +150,7 @@ program.command("upgrade-dependency").alias("ud").description("升级所有依
146
150
  message: "请选择升级的级别",
147
151
  choices: ["major", "minor", "patch"]
148
152
  });
153
+ let hasUpgrade = false;
149
154
  for (const type of types) {
150
155
  const upgrades = [];
151
156
  const allPkgs = Object.keys(packageJson[type]);
@@ -168,10 +173,13 @@ program.command("upgrade-dependency").alias("ud").description("升级所有依
168
173
  choices: upgrades.map((upgrade) => ({ name: `${upgrade.package} ${upgrade.oldVersion} => ${upgrade.newVersion}`, value: upgrade.package }))
169
174
  });
170
175
  pkgs.forEach((pkg2) => {
176
+ hasUpgrade = true;
171
177
  const upgrade = upgrades.find((upgrade2) => upgrade2.package === pkg2);
172
178
  packageJson[type][pkg2] = upgrade.strVersion;
173
179
  });
174
180
  }
181
+ if (!hasUpgrade)
182
+ return;
175
183
  await (0, import_utils.writePackageJson)(packageJson);
176
184
  const status1 = await (0, import_utils.execAsync)("git status");
177
185
  const reg = /modified: *package\.json/m;
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 { exec } from \"child_process\"\r\nimport { Argument, Command } from \"commander\"\r\nimport consola from \"consola\"\r\nimport { mkdir, readdir, readFile, rename, rm, writeFile } from \"fs/promises\"\r\nimport { join, resolve } from \"path\"\r\nimport { PackageManager, Registry, Software } from \"./constant\"\r\nimport { addAntd, addDependencies, addDevDependencies, addGitignore, addPostCSSConfig, addPrettier, addPrisma, addTailwind, addTailwindConfig, addTailwindToCSS, createIndexHtml, downloadVscodeExts, execAsync, getFiles, getPackageManager, getPackageUpgradeVersion, getPidInfoFromPort, getProcessInfoFromPid, getTypeInGenerics, getVersionFromRequiredVersion, installDependcies, Module, ModuleResolution, readPackageJson, readPackageJsonSync, removeComment, removeESLint, setTsConfig, SoftwareDownloadMap, sortArrayOrObject, spawnAsync, splitExtendsType, Target, vite, writeInstallVscodeExtScript, writePackageJson, writeRsbuildConfig, zipDir } 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 addPrettier()\r\n await installDependcies()\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 addTailwind()\r\n await installDependcies()\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\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 await addGitignore()\r\n await writePackageJson(packageJson)\r\n await writeFile(\".fatherrc.ts\", fatherrcCode)\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 execAsync(\"git status\")\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 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 const result = await installDependcies()\r\n if (result) exec(\"npx tsc --noEmit\")\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(PackageManager)\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({\r\n path: \"./src\",\r\n match: (path, stats) => path.ext === \".tsx\" && stats.isFile()\r\n })\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 addPrettier()\r\n\r\n await installDependcies(true)\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({\r\n match: (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 await addDependencies(\"@ant-design/cssinjs\")\r\n await addDependencies(\"@ant-design/icons\")\r\n await addDependencies(\"@emotion/css\")\r\n await addDependencies(\"ahooks\")\r\n await addDependencies(\"antd\")\r\n await addDependencies(\"deepsea-components\")\r\n await addDependencies(\"deepsea-tools\")\r\n await addDependencies(\"react-router-dom\")\r\n await addDependencies(\"react-soda\")\r\n await addDevDependencies(\"@types/node\")\r\n await addDevDependencies(\"prettier\")\r\n await addDevDependencies(\"prettier-plugin-tailwindcss\")\r\n await addDevDependencies(\"tailwindcss\")\r\n await addTailwindConfig()\r\n await addPostCSSConfig()\r\n await addTailwindToCSS()\r\n await addPrettier()\r\n await installDependcies()\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 if (choices.length === 0) {\r\n consola.warn(\"没有找到对应的进程\")\r\n return\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\r\n .command(\"rm-git\")\r\n .argument(\"path\")\r\n .option(\"-r, --recursive\", \"适用于文件夹\")\r\n .action(async (path, options) => {\r\n await execAsync(`git filter-branch --force --index-filter \"git rm${options.recursive ? \" -r\" : \"\"} --cached --ignore-unmatch ${path}\" --prune-empty --tag-name-filter cat -- --all`)\r\n })\r\n\r\nprogram\r\n .command(\"npm-download\")\r\n .alias(\"nd\")\r\n .argument(\"name\")\r\n .action(async name => {\r\n const folder = `.${name}`\r\n const file = `${name}.zip`\r\n const dir = await readdir(\".\")\r\n if (dir.includes(folder)) {\r\n consola.warn(\"文件夹已存在\")\r\n return\r\n }\r\n if (dir.includes(file)) {\r\n consola.warn(\"文件已存在\")\r\n return\r\n }\r\n await mkdir(folder, { recursive: true })\r\n await execAsync(`npm init -y`, { cwd: folder })\r\n await execAsync(`npm install ${name}`, { cwd: folder })\r\n await mkdir(join(folder, \"node_modules\", name, \"node_modules\"))\r\n const dir1 = await readdir(join(folder, \"node_modules\"))\r\n for (const d of dir1) {\r\n if (d === name) continue\r\n if (d.startsWith(\".\")) {\r\n await rm(join(folder, \"node_modules\", d), { recursive: true })\r\n continue\r\n }\r\n await rename(join(folder, \"node_modules\", d), join(folder, \"node_modules\", name, \"node_modules\", d))\r\n }\r\n await zipDir(join(folder, \"node_modules\"), file)\r\n await rm(folder, { recursive: true })\r\n })\r\n\r\nprogram.command(\"prisma\").description(\"添加 prisma 配置\").action(addPrisma)\r\n\r\nprogram\r\n .command(\"prisma-generate\")\r\n .alias(\"pg\")\r\n .description(\"生成 prisma client\")\r\n .action(async () => {\r\n await spawnAsync(\"npx prisma db push && npx prisma generate\")\r\n })\r\n\r\nprogram.command(\"antd\").description(\"添加 antd 配置\").action(addAntd)\r\n\r\nprogram.command(\"init\").action(async () => {\r\n const { default: inquirer } = await import(\"inquirer\")\r\n await addGitignore()\r\n const manager = await getPackageManager()\r\n const packageJson = await readPackageJson()\r\n const allDependcies = Object.keys(packageJson.dependencies || {}).concat(Object.keys(packageJson.devDependencies || {}))\r\n if (allDependcies.some(item => item.includes(\"eslint\"))) {\r\n const { removeEslintConfig } = await inquirer.prompt({\r\n type: \"confirm\",\r\n name: \"removeEslintConfig\",\r\n message: \"是否删除 ESLint 配置文件\",\r\n default: true\r\n })\r\n if (removeEslintConfig) await removeESLint()\r\n }\r\n const isFullStack = allDependcies.some(item => item === \"next\" || item.startsWith(\"@remix-run/\"))\r\n const choices = isFullStack ? [\"antd\", \"dayjs\", \"deepsea-components\", \"deepsea-tools\", \"prisma\", \"stable-hash\", \"tailwind\", \"zod\"] : [\"antd\", \"dayjs\", \"deepsea-components\", \"deepsea-tools\", \"stable-hash\", \"tailwind\"]\r\n const { modules } = await inquirer.prompt({\r\n type: \"checkbox\",\r\n name: \"modules\",\r\n message: \"请选择要添加的模块\",\r\n choices,\r\n default: choices\r\n })\r\n if (modules.includes(\"antd\")) await addAntd()\r\n if (modules.includes(\"tailwind\")) await addTailwind()\r\n if (modules.includes(\"dayjs\")) await addDependencies(\"dayjs\")\r\n if (modules.includes(\"deepsea-components\")) await addDependencies(\"deepsea-components\")\r\n if (modules.includes(\"deepsea-tools\")) await addDependencies(\"deepsea-tools\")\r\n if (modules.includes(\"stable-hash\")) await addDependencies(\"stable-hash\")\r\n if (modules.includes(\"zod\")) await addDependencies(\"zod\")\r\n await addPrettier()\r\n let installed = false\r\n if (modules.includes(\"prisma\")) {\r\n await addPrisma(manager)\r\n installed = true\r\n }\r\n if (!installed) await installDependcies(true, manager)\r\n})\r\n\r\nprogram\r\n .command(\"tsc\")\r\n .description(\"类型检查\")\r\n .action(async () => await spawnAsync(\"npx tsc --noEmit\"))\r\n\r\nprogram.parse()\r\n"],
5
- "mappings": "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",
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, readdir, readFile, rename, rm, writeFile } from \"fs/promises\"\r\nimport { join, resolve } from \"path\"\r\nimport { PackageManager, Registry, Software } from \"./constant\"\r\nimport { addAntd, addDependencies, addDevDependencies, addGitignore, addPostCSSConfig, addPrettier, addPrisma, addTailwind, addTailwindConfig, addTailwindToCSS, createIndexHtml, downloadVscodeExts, execAsync, getFiles, getPackageManager, getPackageUpgradeVersion, getPidInfoFromPort, getProcessInfoFromPid, getTypeInGenerics, getVersionFromRequiredVersion, installDependcies, isCommandExisted, Module, ModuleResolution, readPackageJson, readPackageJsonSync, removeComment, removeESLint, setTsConfig, SoftwareDownloadMap, sortArrayOrObject, spawnAsync, splitExtendsType, Target, vite, writeInstallVscodeExtScript, writePackageJson, writeRsbuildConfig, zipDir } 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 addPrettier()\r\n await installDependcies()\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 addTailwind()\r\n await installDependcies()\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\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 await addGitignore()\r\n await writePackageJson(packageJson)\r\n await writeFile(\".fatherrc.ts\", fatherrcCode)\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 if (await isCommandExisted(\"git\")) {\r\n const status = await execAsync(\"git status\")\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 } else {\r\n consola.warn(\"请在使用本功能前备份代码\")\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 let hasUpgrade = false\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 hasUpgrade = true\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 if (!hasUpgrade) return\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 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 const result = await installDependcies()\r\n if (result) exec(\"npx tsc --noEmit\")\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(PackageManager)\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({\r\n path: \"./src\",\r\n match: (path, stats) => path.ext === \".tsx\" && stats.isFile()\r\n })\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 addPrettier()\r\n\r\n await installDependcies(true)\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({\r\n match: (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 await addDependencies(\"@ant-design/cssinjs\")\r\n await addDependencies(\"@ant-design/icons\")\r\n await addDependencies(\"@emotion/css\")\r\n await addDependencies(\"ahooks\")\r\n await addDependencies(\"antd\")\r\n await addDependencies(\"deepsea-components\")\r\n await addDependencies(\"deepsea-tools\")\r\n await addDependencies(\"react-router-dom\")\r\n await addDependencies(\"react-soda\")\r\n await addDevDependencies(\"@types/node\")\r\n await addDevDependencies(\"prettier\")\r\n await addDevDependencies(\"prettier-plugin-tailwindcss\")\r\n await addDevDependencies(\"tailwindcss\")\r\n await addTailwindConfig()\r\n await addPostCSSConfig()\r\n await addTailwindToCSS()\r\n await addPrettier()\r\n await installDependcies()\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 if (choices.length === 0) {\r\n consola.warn(\"没有找到对应的进程\")\r\n return\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\r\n .command(\"rm-git\")\r\n .argument(\"path\")\r\n .option(\"-r, --recursive\", \"适用于文件夹\")\r\n .action(async (path, options) => {\r\n await execAsync(`git filter-branch --force --index-filter \"git rm${options.recursive ? \" -r\" : \"\"} --cached --ignore-unmatch ${path}\" --prune-empty --tag-name-filter cat -- --all`)\r\n })\r\n\r\nprogram\r\n .command(\"npm-download\")\r\n .alias(\"nd\")\r\n .argument(\"name\")\r\n .action(async name => {\r\n const folder = `.${name}`\r\n const file = `${name}.zip`\r\n const dir = await readdir(\".\")\r\n if (dir.includes(folder)) {\r\n consola.warn(\"文件夹已存在\")\r\n return\r\n }\r\n if (dir.includes(file)) {\r\n consola.warn(\"文件已存在\")\r\n return\r\n }\r\n await mkdir(folder, { recursive: true })\r\n await execAsync(`npm init -y`, { cwd: folder })\r\n await execAsync(`npm install ${name}`, { cwd: folder })\r\n await mkdir(join(folder, \"node_modules\", name, \"node_modules\"))\r\n const dir1 = await readdir(join(folder, \"node_modules\"))\r\n for (const d of dir1) {\r\n if (d === name) continue\r\n if (d.startsWith(\".\")) {\r\n await rm(join(folder, \"node_modules\", d), { recursive: true })\r\n continue\r\n }\r\n await rename(join(folder, \"node_modules\", d), join(folder, \"node_modules\", name, \"node_modules\", d))\r\n }\r\n await zipDir(join(folder, \"node_modules\"), file)\r\n await rm(folder, { recursive: true })\r\n })\r\n\r\nprogram.command(\"prisma\").description(\"添加 prisma 配置\").action(addPrisma)\r\n\r\nprogram\r\n .command(\"prisma-generate\")\r\n .alias(\"pg\")\r\n .description(\"生成 prisma client\")\r\n .action(async () => {\r\n await spawnAsync(\"npx prisma db push && npx prisma generate\")\r\n })\r\n\r\nprogram.command(\"antd\").description(\"添加 antd 配置\").action(addAntd)\r\n\r\nprogram.command(\"init\").action(async () => {\r\n const { default: inquirer } = await import(\"inquirer\")\r\n await addGitignore()\r\n const manager = await getPackageManager()\r\n const packageJson = await readPackageJson()\r\n const allDependcies = Object.keys(packageJson.dependencies || {}).concat(Object.keys(packageJson.devDependencies || {}))\r\n if (allDependcies.some(item => item.includes(\"eslint\"))) {\r\n const { removeEslintConfig } = await inquirer.prompt({\r\n type: \"confirm\",\r\n name: \"removeEslintConfig\",\r\n message: \"是否删除 ESLint 配置文件\",\r\n default: true\r\n })\r\n if (removeEslintConfig) await removeESLint()\r\n }\r\n const isFullStack = allDependcies.some(item => item === \"next\" || item.startsWith(\"@remix-run/\"))\r\n const choices = isFullStack ? [\"antd\", \"dayjs\", \"deepsea-components\", \"deepsea-tools\", \"prisma\", \"stable-hash\", \"tailwind\", \"zod\"] : [\"antd\", \"dayjs\", \"deepsea-components\", \"deepsea-tools\", \"stable-hash\", \"tailwind\"]\r\n const { modules } = await inquirer.prompt({\r\n type: \"checkbox\",\r\n name: \"modules\",\r\n message: \"请选择要添加的模块\",\r\n choices,\r\n default: choices\r\n })\r\n if (modules.includes(\"antd\")) await addAntd()\r\n if (modules.includes(\"tailwind\")) await addTailwind()\r\n if (modules.includes(\"dayjs\")) await addDependencies(\"dayjs\")\r\n if (modules.includes(\"deepsea-components\")) await addDependencies(\"deepsea-components\")\r\n if (modules.includes(\"deepsea-tools\")) await addDependencies(\"deepsea-tools\")\r\n if (modules.includes(\"stable-hash\")) await addDependencies(\"stable-hash\")\r\n if (modules.includes(\"zod\")) await addDependencies(\"zod\")\r\n await addPrettier()\r\n let installed = false\r\n if (modules.includes(\"prisma\")) {\r\n await addPrisma(manager)\r\n installed = true\r\n }\r\n if (!installed) await installDependcies(true, manager)\r\n})\r\n\r\nprogram\r\n .command(\"tsc\")\r\n .description(\"类型检查\")\r\n .action(async () => await spawnAsync(\"npx tsc --noEmit\"))\r\n\r\nprogram.parse()\r\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAEA,2BAAqB;AACrB,uBAAkC;AAClC,qBAAoB;AACpB,sBAAgE;AAChE,kBAA8B;AAC9B,sBAAmD;AACnD,mBAAypB;AAEzpB,IAAM,UAAU,IAAI,yBAAQ;AAE5B,IAAM,UAAM,sCAAoB,qBAAQ,WAAW,KAAK,CAAC;AAEzD,QAAQ,KAAK,MAAM,EAAE,QAAQ,IAAI,OAAO;AAExC,QAAQ,QAAQ,QAAQ,EAAE,YAAY,gBAAgB,EAAE,OAAO,yBAAY;AAE3E,QACK,QAAQ,UAAU,EAClB,YAAY,kBAAkB,EAC9B,OAAO,YAAY;AAChB,YAAM,0BAAY;AAClB,YAAM,gCAAkB;AAC5B,CAAC;AAEL,QAAQ,QAAQ,MAAM,EAAE,YAAY,kBAAkB,EAAE,OAAO,iBAAI;AAEnE,QACK,QAAQ,UAAU,EAClB,YAAY,kBAAkB,EAC9B,OAAO,YAAY;AAChB,YAAM,0BAAY;AAClB,YAAM,gCAAkB;AAC5B,CAAC;AAEL,QAAQ,QAAQ,gBAAgB,EAAE,YAAY,QAAQ,EAAE,YAAY,IAAI,0BAAS,MAAM,CAAC,EAAE,OAAO,0BAAa;AAE9G,QACK,QAAQ,WAAW,EACnB,YAAY,yBAAyB,EACrC,OAAO,YAAY;AAChB,QAAM,SAAS,MAAM,eAAAA,QAAQ,OAAO,0BAA0B;AAAA,IAC1D,MAAM;AAAA,IACN,SAAS,OAAO,OAAO,mBAAM;AAAA,IAC7B,SAAS,oBAAO;AAAA,EACpB,CAAC;AACD,YAAM,0BAAY,UAAU,MAAM;AACtC,CAAC;AAEL,QACK,QAAQ,WAAW,EACnB,YAAY,yBAAyB,EACrC,OAAO,YAAY;AAChB,QAAMC,UAAS,MAAM,eAAAD,QAAQ,OAAO,0BAA0B;AAAA,IAC1D,MAAM;AAAA,IACN,SAAS,OAAO,OAAO,mBAAM;AAAA,IAC7B,SAAS,oBAAO;AAAA,EACpB,CAAC;AACD,YAAM,0BAAY,UAAUC,OAAM;AACtC,CAAC;AAEL,QACK,QAAQ,sBAAsB,EAC9B,MAAM,OAAO,EACb,YAAY,yBAAyB,EACrC,OAAO,YAAY;AAChB,QAAM,mBAAmB,MAAM,eAAAD,QAAQ,OAAO,qCAAqC;AAAA,IAC/E,MAAM;AAAA,IACN,SAAS,OAAO,OAAO,6BAAgB;AAAA,IACvC,SAAS,8BAAiB;AAAA,EAC9B,CAAC;AACD,YAAM,0BAAY,oBAAoB,gBAAgB;AAC1D,CAAC;AAEL,QACK,QAAQ,gBAAgB,EACxB,MAAM,IAAI,EACV,YAAY,gBAAgB,EAC5B,OAAO,YAAY;AAChB,MAAI,cAAc,UAAM,8BAAgB;AACxC,cAAY,kBAAkB,CAAC;AAC/B,cAAY,cAAc,SAAS;AACnC,cAAY,cAAc,WAAW;AACrC,cAAY,oBAAgB,gCAAkB,YAAY,aAAa;AACvE,cAAY,UAAU,CAAC;AACvB,MAAI,CAAC,YAAY,MAAM,SAAS,KAAK;AAAG,gBAAY,MAAM,KAAK,KAAK;AACpE,cAAY,YAAQ,gCAAkB,YAAY,KAAK;AACvD,QAAM,eAAe,YAAY;AACjC,QAAM,kBAAkB,YAAY;AACpC,QAAM,mBAAmB,YAAY;AACrC,MAAI,YAAY,YAAY,OAAO,CAAC,YAAY,WAAW,IAAI,WAAW,MAAM;AAAG,gBAAY,WAAW,MAAM,OAAO,YAAY,WAAW;AAC9I,cAAY,eAAe,CAAC;AAC5B,cAAY,WAAW,SAAS;AAChC,cAAY,WAAW,QAAQ,kCAAkC,YAAY;AAC7E,MAAI,CAAC,YAAY,OAAO;AACpB,kBAAc,OAAO,QAAQ,WAAW,EAAE,OAAO,CAAC,MAA2B,CAAC,KAAK,KAAK,MAAM;AAC1F,WAAK,GAAG,IAAI;AACZ,UAAI,OAAO,OAAO,aAAa,QAAQ,GAAG;AACtC,YAAI,QAAQ;AAAU,eAAK,QAAQ,MAAM,QAAQ,SAAS,OAAO;AAAA,MACrE,WAAW,OAAO,OAAO,aAAa,MAAM,GAAG;AAC3C,YAAI,QAAQ;AAAQ,eAAK,QAAQ,MAAM,QAAQ,SAAS,OAAO;AAAA,MACnE;AACA,aAAO;AAAA,IACX,GAAG,CAAC,CAAC;AAAA,EACT;AACA,cAAY,YAAY,CAAC;AACzB,cAAY,QAAQ,iBAAiB;AACrC,SAAO,YAAY;AACnB,SAAO,YAAY;AACnB,SAAO,YAAY;AACnB,cAAY,mBAAe,gCAAkB,YAAY;AACzD,cAAY,sBAAkB,gCAAkB,eAAe;AAC/D,cAAY,uBAAmB,gCAAkB,gBAAgB;AACjE,QAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYrB,YAAM,2BAAa;AACnB,YAAM,+BAAiB,WAAW;AAClC,YAAM,2BAAU,gBAAgB,YAAY;AAC5C,YAAM,0BAAY,UAAU,oBAAO,MAAM;AAC7C,CAAC;AAEL,QACK,QAAQ,oBAAoB,EAC5B,MAAM,IAAI,EACV,YAAY,QAAQ,EACpB,OAAO,YAAY;AAChB,MAAI,UAAM,+BAAiB,KAAK,GAAG;AAC/B,UAAM,SAAS,UAAM,wBAAU,YAAY;AAC3C,QAAI,WAAW,wEAAwE;AACnF,qBAAAA,QAAQ,KAAK,cAAc;AAAA,IAC/B,WAAW,CAAC,OAAO,SAAS,uCAAuC,GAAG;AAClE,qBAAAA,QAAQ,KAAK,cAAc;AAC3B;AAAA,IACJ;AAAA,EACJ,OAAO;AACH,mBAAAA,QAAQ,KAAK,cAAc;AAAA,EAC/B;AAEA,QAAM,EAAE,SAAS,SAAS,IAAI,MAAM,OAAO,UAAU;AAErD,QAAM,cAAc,UAAM,8BAAgB;AAE1C,QAAM,EAAE,MAAM,IAAI,MAAM,SAAS,OAAO;AAAA,IACpC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS,CAAC,gBAAgB,iBAAiB,EAAE,OAAO,UAAQ,CAAC,CAAC,YAAY,IAAI,CAAC;AAAA,EACnF,CAAC;AAED,QAAM,EAAE,MAAM,IAAI,MAAM,SAAS,OAAO;AAAA,IACpC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS,CAAC,SAAS,SAAS,OAAO;AAAA,EACvC,CAAC;AAED,MAAI,aAAa;AAEjB,aAAW,QAAQ,OAAO;AACtB,UAAM,WAA8F,CAAC;AACrG,UAAM,UAAU,OAAO,KAAK,YAAY,IAAI,CAAC;AAE7C,aAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACrC,YAAME,OAAM,QAAQ,CAAC;AACrB,YAAM,KAAK,YAAY,IAAI,EAAEA,IAAG;AAChC,YAAM,IAAI,GAAG,MAAM,MAAM,EAAG,CAAC;AAC7B,YAAM,SAAK,4CAA8B,EAAE;AAC3C,YAAM,UAAU,UAAM,uCAAyBA,MAAK,IAAI,KAAK;AAC7D,UAAI,CAAC;AAAS;AACd,eAAS,KAAK,EAAE,SAASA,MAAK,YAAY,IAAI,YAAY,SAAS,YAAY,GAAG,IAAI,UAAU,CAAC;AAAA,IACrG;AAEA,QAAI,SAAS,WAAW;AAAG;AAE3B,UAAM,EAAE,KAAK,IAAI,MAAM,SAAS,OAAO;AAAA,MACnC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS,SAAS,IAAI,cAAY,EAAE,MAAM,GAAG,QAAQ,WAAW,QAAQ,iBAAiB,QAAQ,cAAc,OAAO,QAAQ,QAAQ,EAAE;AAAA,IAC5I,CAAC;AAED,SAAK,QAAQ,CAACA,SAAgB;AAC1B,mBAAa;AACb,YAAM,UAAU,SAAS,KAAK,CAAAC,aAAWA,SAAQ,YAAYD,IAAG;AAChE,kBAAY,IAAI,EAAEA,IAAG,IAAI,QAAQ;AAAA,IACrC,CAAC;AAAA,EACL;AAEA,MAAI,CAAC;AAAY;AAEjB,YAAM,+BAAiB,WAAW;AAElC,QAAM,UAAU,UAAM,wBAAU,YAAY;AAE5C,QAAM,MAAM;AAEZ,MAAI,IAAI,KAAK,OAAO,GAAG;AACnB,mBAAAF,QAAQ,MAAM,MAAM;AACpB,cAAM,wBAAU,sBAAsB;AACtC,cAAM,wBAAU,gDAAgD;AAChE,UAAM,SAAS,UAAM,gCAAkB;AACvC,QAAI;AAAQ,qCAAK,kBAAkB;AAAA,EACvC;AACJ,CAAC;AAEL,QACK,QAAQ,UAAU,EAClB,YAAY,iBAAiB,EAC7B,OAAO,YAAY;AAChB,QAAM,EAAE,SAAS,SAAS,IAAI,MAAM,OAAO,UAAU;AAErD,QAAM,EAAE,QAAQ,IAAI,MAAM,SAAS,OAAO;AAAA,IACtC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS,OAAO,KAAK,8BAAc;AAAA,EACvC,CAAC;AAED,QAAM,EAAE,SAAS,IAAI,MAAM,SAAS,OAAO;AAAA,IACvC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS,OAAO,KAAK,wBAAQ;AAAA,EACjC,CAAC;AAED,QAAM,UAAU,GAAG,+BAA+B,yBAAS,QAAiC;AAC5F,YAAM,yBAAW,OAAO;AAC5B,CAAC;AAEL,QACK,QAAQ,mBAAmB,EAC3B,MAAM,KAAK,EACX,YAAY,yBAAyB,EACrC,OAAO,YAAY;AAChB,QAAM,cAAc,UAAM,8BAAgB;AAC1C,cAAY,mBAAe,gCAAkB,YAAY,YAAY;AACrE,cAAY,sBAAkB,gCAAkB,YAAY,eAAe;AAC3E,cAAY,uBAAmB,gCAAkB,YAAY,gBAAgB;AAC7E,cAAY,0BAAsB,gCAAkB,YAAY,mBAAmB;AACnF,YAAM,+BAAiB,WAAW;AACtC,CAAC;AASL,QACK,QAAQ,mBAAmB,EAC3B,MAAM,KAAK,EACX,YAAY,gBAAgB,EAC5B,OAAO,YAAY;AAChB,iBAAAA,QAAQ,KAAK,iBAAiB;AAC9B,QAAM,EAAE,SAAS,SAAS,IAAI,MAAM,OAAO,UAAU;AACrD,QAAM,QAAQ,UAAM,uBAAS;AAAA,IACzB,MAAM;AAAA,IACN,OAAO,CAAC,MAAM,UAAU,KAAK,QAAQ,UAAU,MAAM,OAAO;AAAA,EAChE,CAAC;AACD,QAAM,MAAM;AACZ,QAAM,EAAE,KAAK,IAAI,MAAM,SAAS,OAAO;AAAA,IACnC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,EACb,CAAC;AAED,QAAM,YAAyB,oBAAI,IAAI;AACvC,QAAM,gBAA6B,oBAAI,IAAI;AAE3C,MAAI,MAAM;AACN,eAAW,QAAQ,OAAO;AACtB,UAAI,OAAO,UAAM,0BAAS,MAAM,OAAO;AACvC,UAAI,mBAAuC;AAC3C,aAAO,KAAK,QAAQ,KAAK,WAAS;AAC9B,YAAI,MAAM,SAAS,OAAO,KAAK,MAAM,SAAS,aAAa,GAAG;AAC1D,oBAAU,IAAI,IAAI;AAClB,iBAAO;AAAA,QACX;AACA,sBAAc,IAAI,IAAI;AACtB,cAAM,YAAY,MAAM,WAAW,SAAS;AAC5C,cAAM,OAAO,MAAM,MAAM,eAAe,EAAG,CAAC;AAC5C,cAAM,QAAQ,IAAI,OAAO,mBAAmB,SAAS,GAAG;AACxD,YAAI,mBAAmB;AACvB,YAAI,CAAC,oBAAoB,CAAC,aAAa,MAAM,KAAK,IAAI,GAAG;AACrD,6BAAmB;AACnB,6BAAmB;AAAA,QACvB;AACA,cAAM,YAAY,MAAM,QAAQ,KAAK;AACrC,YAAI,YAAY,GAAG;AACf,gBAAM,WAAO,gCAAkB,OAAO,YAAY,CAAC;AACnD,iBAAO,GAAG,YAAY,YAAY,KAAK,mBAAmB,oBAAoB,cAAc,eAAe;AAAA,QAC/G;AACA,eAAO,GAAG,YAAY,YAAY,KAAK,mBAAmB,oBAAoB,cAAc;AAAA,MAChG,CAAC;AACD,UAAI;AAAkB,eAAO,KAAK,QAAQ,kBAAkB,EAAE;AAC9D,gBAAM,2BAAU,MAAM,MAAM,OAAO;AAAA,IACvC;AAAA,EACJ,OAAO;AACH,eAAW,QAAQ,OAAO;AACtB,UAAI,OAAO,UAAM,0BAAS,MAAM,OAAO;AACvC,YAAM,UAAU,KAAK,MAAM,GAAG;AAC9B,UAAI,CAAC;AAAS;AACd,qBAAAA,QAAQ,MAAM,IAAI;AAClB,YAAM,UAAU,MAAM,KAAK,OAAO,EAAE,OAAO,CAAC,MAAgB,OAAOI,WAAU;AACzE,YAAI,MAAM,SAAS,OAAO,KAAK,MAAM,SAAS,aAAa,GAAG;AAC1D,oBAAU,IAAI,IAAI;AAClB,iBAAO;AAAA,QACX;AACA,sBAAc,IAAI,IAAI;AACtB,cAAM,YAAY,MAAM,WAAW,SAAS;AAC5C,cAAM,UAAU,MAAM,MAAM,eAAe,EAAG,CAAC;AAC/C,cAAM,YAAY,MAAM,QAAQ,KAAK;AACrC,YAAI,YAAY,GAAG;AACf,gBAAM,WAAO,gCAAkB,OAAO,YAAY,CAAC;AACnD,gBAAM,OAAO,KAAK;AAAA,SACjC,YAAY,YAAY,cAAc,kBAAkB;AACzC,eAAK,KAAK,EAAE,OAAOA,OAAM,SAAS,GAAG,OAAO,SAAS,MAAM,SAAS,KAAK,CAAC;AAAA,QAC9E,OAAO;AACH,gBAAM,OAAO,KAAK;AAAA,SACjC,YAAY,YAAY,cAAc;AACvB,eAAK,KAAK,EAAE,OAAOA,OAAM,SAAS,GAAG,OAAO,SAAS,MAAM,SAAS,KAAK,CAAC;AAAA,QAC9E;AAEA,eAAO;AAAA,MACX,GAAG,CAAC,CAAC;AAEL,YAAM,SAAS,QAAQ,OAAO,SAAS,EAAE;AAEzC,cAAQ,QAAQ,CAAC,QAAQA,WAAU;AAC/B,YAAI,QAAQ;AACZ,eAAO,OAAO,OAAO,KAAK,QAAQ,MAAM,MAAM;AAC1C,cAAI,OAAO;AACP,oBAAQ;AACR,mBAAO,MAAMA,SAAQ,GAAG,SAAS,EAAE,SAAS,QAAQ,GAAG;AAAA,UAC3D;AACA,iBAAO,GAAG,SAAS,SAAS,GAAG,GAAG;AAAA,QACtC,CAAC;AAAA,MACL,CAAC;AAED,YAAM,EAAE,OAAO,IAAI,MAAM,SAAS,OAAO;AAAA,QACrC,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS,SAAS,QAAQ,mBAAmB,QAAQ,SAAS,IAAI,MAAM;AAAA,QACxE;AAAA,MACJ,CAAC;AAED,UAAI,QAAQ;AAEZ,UAAI,mBAAuC;AAE3C,aAAO,KAAK,QAAQ,KAAK,WAAS;AAC9B,YAAI,CAAC,OAAO,SAAS,MAAM,SAAS,CAAC;AAAG,iBAAO;AAC/C,cAAM,YAAY,MAAM,WAAW,SAAS;AAC5C,cAAM,OAAO,MAAM,MAAM,eAAe,EAAG,CAAC;AAC5C,cAAM,QAAQ,IAAI,OAAO,mBAAmB,SAAS,GAAG;AACxD,YAAI,mBAAmB;AACvB,YAAI,CAAC,oBAAoB,CAAC,aAAa,MAAM,KAAK,IAAI,GAAG;AACrD,6BAAmB;AACnB,6BAAmB;AAAA,QACvB;AACA,cAAM,YAAY,MAAM,QAAQ,KAAK;AACrC,YAAI,YAAY,GAAG;AACf,gBAAM,WAAO,gCAAkB,OAAO,YAAY,CAAC;AACnD,iBAAO,GAAG,YAAY,YAAY,KAAK,mBAAmB,oBAAoB,cAAc,eAAe;AAAA,QAC/G;AACA,eAAO,GAAG,YAAY,YAAY,KAAK,mBAAmB,oBAAoB,cAAc;AAAA,MAChG,CAAC;AAED,UAAI;AAAkB,eAAO,KAAK,QAAQ,kBAAkB,EAAE;AAE9D,cAAQ,IAAI;AAEZ,gBAAM,2BAAU,MAAM,MAAM,OAAO;AAAA,IACvC;AAAA,EACJ;AAEA,MAAI,cAAc,OAAO;AAAG,mBAAAJ,QAAQ,QAAQ;AAAA;AAAA,EAA6B,MAAM,KAAK,aAAa,EAAE,KAAK,IAAI,GAAG;AAE/G,MAAI,UAAU,OAAO;AAAG,mBAAAA,QAAQ,KAAK;AAAA;AAAA,EAAuC,MAAM,KAAK,SAAS,EAAE,KAAK,IAAI,GAAG;AAE9G,iBAAAA,QAAQ,MAAM,OAAO;AAErB,YAAM,0BAAY;AAElB,YAAM,gCAAkB,IAAI;AAE5B,YAAM,yBAAW,4BAA4B;AAE7C,iBAAAA,QAAQ,MAAM,wBAAwB;AAEtC,YAAM,yBAAW,kBAAkB;AACvC,CAAC;AAEL,QACK,QAAQ,mBAAmB,EAC3B,MAAM,KAAK,EACX,YAAY,sBAAsB,EAClC,OAAO,YAAY;AAChB,iBAAAA,QAAQ,KAAK,iBAAiB;AAE9B,QAAM,QAAQ,UAAM,uBAAS;AAAA,IACzB,OAAO,CAAC,MAAM,WAAW,KAAK,QAAQ,UAAU,KAAK,QAAQ,UAAU,CAAC,KAAK,KAAK,SAAS,OAAO,KAAK,MAAM,OAAO;AAAA,IACpH,SAAS,CAAC,MAAM,UAAU,MAAM,YAAY,KAAK,KAAK,SAAS;AAAA,EACnE,CAAC;AAED,QAAM,EAAE,SAAS,SAAS,IAAI,MAAM,OAAO,UAAU;AAErD,QAAM,EAAE,WAAW,IAAI,MAAM,SAAS,OAAO;AAAA,IACzC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,EACb,CAAC;AAED,MAAI,CAAC;AAAY;AAEjB,QAAM,MAAM;AACZ,QAAM,OAAO;AACb,QAAM,OAAO;AACb,QAAM,gBAA6B,oBAAI,IAAI;AAE3C,aAAW,QAAQ,OAAO;AACtB,UAAM,OAAO,UAAM,0BAAS,MAAM,OAAO;AACzC,UAAM,UAAU,KAAK,QAAQ,KAAK,WAAS;AACvC,oBAAc,IAAI,IAAI;AACtB,YAAM,YAAY,KAAK,KAAK,KAAK;AACjC,YAAM,KAAK,MAAM,QAAQ,KAAK,IAAI;AAClC,YAAM,UAAU,GAAG,MAAM,IAAI;AAC7B,UAAI,SAAS;AACT,cAAM,OAAO,QAAQ,CAAC;AACtB,cAAM,mBAAe,+BAAiB,QAAQ,CAAC,CAAC,EAAE,KAAK,KAAK;AAE5D,eAAO,GAAG,YAAY,YAAY,UAAU,UAAU;AAAA,MAC1D;AACA,aAAO,GAAG,YAAY,YAAY,UAAU;AAAA,IAChD,CAAC;AACD,cAAM,2BAAU,MAAM,SAAS,OAAO;AAAA,EAC1C;AAEA,MAAI,cAAc,OAAO;AAAG,mBAAAA,QAAQ,QAAQ;AAAA;AAAA,EAAmC,MAAM,KAAK,aAAa,EAAE,KAAK,IAAI,GAAG;AAErH,iBAAAA,QAAQ,MAAM,wBAAwB;AAEtC,YAAM,yBAAW,kBAAkB;AACvC,CAAC;AAEL,QAAQ,QAAQ,WAAW,EAAE,YAAY,kBAAkB,EAAE,OAAO,yBAAY;AAEhF,QACK,QAAQ,iBAAiB,EACzB,MAAM,IAAI,EACV,YAAY,cAAc,EAC1B,OAAO,YAAY;AAChB,YAAM,iCAAmB;AACzB,YAAM,8BAAgB;AACtB,YAAM,0BAAY,UAAU,IAAI;AAChC,YAAM,2BAAa;AACnB,YAAM,8BAAgB,qBAAqB;AAC3C,YAAM,8BAAgB,mBAAmB;AACzC,YAAM,8BAAgB,cAAc;AACpC,YAAM,8BAAgB,QAAQ;AAC9B,YAAM,8BAAgB,MAAM;AAC5B,YAAM,8BAAgB,oBAAoB;AAC1C,YAAM,8BAAgB,eAAe;AACrC,YAAM,8BAAgB,kBAAkB;AACxC,YAAM,8BAAgB,YAAY;AAClC,YAAM,iCAAmB,aAAa;AACtC,YAAM,iCAAmB,UAAU;AACnC,YAAM,iCAAmB,6BAA6B;AACtD,YAAM,iCAAmB,aAAa;AACtC,YAAM,gCAAkB;AACxB,YAAM,+BAAiB;AACvB,YAAM,+BAAiB;AACvB,YAAM,0BAAY;AAClB,YAAM,gCAAkB;AAC5B,CAAC;AAEL,QACK,QAAQ,WAAW,EACnB,MAAM,IAAI,EACV,YAAY,WAAW,EACvB,OAAO,YAAY;AAChB,QAAM,EAAE,SAAS,SAAS,IAAI,MAAM,OAAO,UAAU;AACrD,QAAM,EAAE,OAAO,IAAI,MAAM,SAAS,OAAO;AAAA,IACrC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,MACL;AAAA,QACI,MAAM;AAAA,QACN,OAAO;AAAA,MACX;AAAA,MACA;AAAA,QACI,MAAM;AAAA,QACN,OAAO;AAAA,MACX;AAAA,IACJ;AAAA,EACJ,CAAC;AACD,QAAM,EAAE,KAAK,IAAI,MAAM,SAAS,OAAO;AAAA,IACnC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,MACL;AAAA,QACI,MAAM;AAAA,QACN,OAAO;AAAA,MACX;AAAA,MACA;AAAA,QACI,MAAM;AAAA,QACN,OAAO;AAAA,MACX;AAAA,IACJ;AAAA,EACJ,CAAC;AACD,MAAI,CAAC,MAAM;AACP,QAAI;AACA,gBAAM,yBAAW,aAAa,SAAS,cAAc,uBAAuB;AAAA,IAChF,SAAS,OAAP;AAAA,IAAe;AACjB,QAAI;AACA,gBAAM,yBAAW,aAAa,SAAS,cAAc,wBAAwB;AAAA,IACjF,SAAS,OAAP;AAAA,IAAe;AACjB;AAAA,EACJ;AACA,QAAM,EAAE,MAAM,IAAI,MAAM,SAAS,OAAO;AAAA,IACpC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,EACb,CAAC;AACD,YAAM,yBAAW,aAAa,SAAS,cAAc,iBAAiB,OAAO;AAC7E,YAAM,yBAAW,aAAa,SAAS,cAAc,kBAAkB,OAAO;AAClF,CAAC;AAEL,QACK,QAAQ,aAAa,EACrB,MAAM,IAAI,EACV,YAAY,kBAAkB,EAC9B,OAAO,YAAY;AAChB,QAAM,EAAE,SAAS,SAAS,IAAI,MAAM,OAAO,UAAU;AACrD,QAAM,EAAE,KAAK,IAAI,MAAM,SAAS,OAAO;AAAA,IACnC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,MACL;AAAA,QACI,MAAM;AAAA,QACN,OAAO;AAAA,MACX;AAAA,MACA;AAAA,QACI,MAAM;AAAA,QACN,OAAO;AAAA,MACX;AAAA,IACJ;AAAA,EACJ,CAAC;AACD,MAAI,CAAC;AAAM,WAAO,UAAM,yBAAW,2BAA2B;AAC9D,QAAM,EAAE,MAAM,IAAI,MAAM,SAAS,OAAO;AAAA,IACpC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,EACb,CAAC;AACD,YAAM,yBAAW,4BAA4B,kBAAkB;AACnE,CAAC;AAEL,QACK,QAAQ,mBAAmB,EAC3B,MAAM,IAAI,EACV,YAAY,SAAS,EACrB,OAAO,YAAY;AAChB,QAAM,EAAE,SAAS,SAAS,IAAI,MAAM,OAAO,UAAU;AACrD,QAAM,MAAM,aAAa,KAAK,IAAI;AAClC,QAAM,EAAE,UAAU,IAAI,MAAM,SAAS,OAAO;AAAA,IACxC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS,OAAO,OAAO,wBAAQ;AAAA,IAC/B,SAAS,OAAO,OAAO,wBAAQ;AAAA,EACnC,CAAC;AACD,MAAI,UAAU,WAAW;AAAG;AAC5B,YAAM,uBAAM,KAAK,EAAE,WAAW,KAAK,CAAC;AACpC,aAAW,YAAY,WAAW;AAC9B,mBAAAA,QAAQ,MAAM,QAAQ,UAAU;AAChC,UAAM,iCAAoB,QAAoB,EAAE,GAAG;AAAA,EACvD;AACJ,CAAC;AAEL,QACK,QAAQ,2BAA2B,EACnC,MAAM,KAAK,EACX,YAAY,eAAe,EAC3B,OAAO,YAAY;AAChB,QAAM,MAAM,UAAU,KAAK,IAAI;AAC/B,YAAM,uBAAM,KAAK,EAAE,WAAW,KAAK,CAAC;AACpC,YAAM,iCAAmB,GAAG;AAC5B,YAAM,0CAA4B,GAAG;AACzC,CAAC;AAEL,QACK,QAAQ,MAAM,EACd,SAAS,QAAQ,KAAK,EACtB,OAAO,OAAM,SAAQ;AAClB,QAAM,EAAE,SAAS,SAAS,IAAI,MAAM,OAAO,UAAU;AACrD,QAAM,WAAW,UAAM,iCAAmB,SAAS,IAAI,CAAC;AACxD,QAAM,UAA6C,CAAC;AACpD,aAAW,EAAE,KAAK,KAAK,KAAK,UAAU;AAClC,UAAM,OAAO,UAAM,oCAAsB,GAAG;AAC5C,QAAI;AAAM,cAAQ,KAAK,EAAE,MAAM,GAAG,QAAQ,QAAQ,OAAO,IAAI,CAAC;AAAA,EAClE;AACA,MAAI,QAAQ,WAAW,GAAG;AACtB,mBAAAA,QAAQ,KAAK,WAAW;AACxB;AAAA,EACJ;AACA,QAAM,EAAE,WAAW,IAAI,MAAM,SAAS,OAAO;AAAA,IACzC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT;AAAA,IACA,SAAS,QAAQ,IAAI,YAAU,OAAO,KAAK;AAAA,EAC/C,CAAC;AACD,aAAW,OAAO,YAAY;AAC1B,mCAAK,oBAAoB,KAAK;AAAA,EAClC;AACJ,CAAC;AAEL,QACK,QAAQ,QAAQ,EAChB,SAAS,MAAM,EACf,OAAO,mBAAmB,QAAQ,EAClC,OAAO,OAAO,MAAM,YAAY;AAC7B,YAAM,wBAAU,mDAAmD,QAAQ,YAAY,QAAQ,gCAAgC,oDAAoD;AACvL,CAAC;AAEL,QACK,QAAQ,cAAc,EACtB,MAAM,IAAI,EACV,SAAS,MAAM,EACf,OAAO,OAAM,SAAQ;AAClB,QAAM,SAAS,IAAI;AACnB,QAAM,OAAO,GAAG;AAChB,QAAM,MAAM,UAAM,yBAAQ,GAAG;AAC7B,MAAI,IAAI,SAAS,MAAM,GAAG;AACtB,mBAAAA,QAAQ,KAAK,QAAQ;AACrB;AAAA,EACJ;AACA,MAAI,IAAI,SAAS,IAAI,GAAG;AACpB,mBAAAA,QAAQ,KAAK,OAAO;AACpB;AAAA,EACJ;AACA,YAAM,uBAAM,QAAQ,EAAE,WAAW,KAAK,CAAC;AACvC,YAAM,wBAAU,eAAe,EAAE,KAAK,OAAO,CAAC;AAC9C,YAAM,wBAAU,eAAe,QAAQ,EAAE,KAAK,OAAO,CAAC;AACtD,YAAM,2BAAM,kBAAK,QAAQ,gBAAgB,MAAM,cAAc,CAAC;AAC9D,QAAM,OAAO,UAAM,6BAAQ,kBAAK,QAAQ,cAAc,CAAC;AACvD,aAAW,KAAK,MAAM;AAClB,QAAI,MAAM;AAAM;AAChB,QAAI,EAAE,WAAW,GAAG,GAAG;AACnB,gBAAM,wBAAG,kBAAK,QAAQ,gBAAgB,CAAC,GAAG,EAAE,WAAW,KAAK,CAAC;AAC7D;AAAA,IACJ;AACA,cAAM,4BAAO,kBAAK,QAAQ,gBAAgB,CAAC,OAAG,kBAAK,QAAQ,gBAAgB,MAAM,gBAAgB,CAAC,CAAC;AAAA,EACvG;AACA,YAAM,yBAAO,kBAAK,QAAQ,cAAc,GAAG,IAAI;AAC/C,YAAM,oBAAG,QAAQ,EAAE,WAAW,KAAK,CAAC;AACxC,CAAC;AAEL,QAAQ,QAAQ,QAAQ,EAAE,YAAY,cAAc,EAAE,OAAO,sBAAS;AAEtE,QACK,QAAQ,iBAAiB,EACzB,MAAM,IAAI,EACV,YAAY,kBAAkB,EAC9B,OAAO,YAAY;AAChB,YAAM,yBAAW,2CAA2C;AAChE,CAAC;AAEL,QAAQ,QAAQ,MAAM,EAAE,YAAY,YAAY,EAAE,OAAO,oBAAO;AAEhE,QAAQ,QAAQ,MAAM,EAAE,OAAO,YAAY;AACvC,QAAM,EAAE,SAAS,SAAS,IAAI,MAAM,OAAO,UAAU;AACrD,YAAM,2BAAa;AACnB,QAAM,UAAU,UAAM,gCAAkB;AACxC,QAAM,cAAc,UAAM,8BAAgB;AAC1C,QAAM,gBAAgB,OAAO,KAAK,YAAY,gBAAgB,CAAC,CAAC,EAAE,OAAO,OAAO,KAAK,YAAY,mBAAmB,CAAC,CAAC,CAAC;AACvH,MAAI,cAAc,KAAK,UAAQ,KAAK,SAAS,QAAQ,CAAC,GAAG;AACrD,UAAM,EAAE,mBAAmB,IAAI,MAAM,SAAS,OAAO;AAAA,MACjD,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,IACb,CAAC;AACD,QAAI;AAAoB,gBAAM,2BAAa;AAAA,EAC/C;AACA,QAAM,cAAc,cAAc,KAAK,UAAQ,SAAS,UAAU,KAAK,WAAW,aAAa,CAAC;AAChG,QAAM,UAAU,cAAc,CAAC,QAAQ,SAAS,sBAAsB,iBAAiB,UAAU,eAAe,YAAY,KAAK,IAAI,CAAC,QAAQ,SAAS,sBAAsB,iBAAiB,eAAe,UAAU;AACvN,QAAM,EAAE,QAAQ,IAAI,MAAM,SAAS,OAAO;AAAA,IACtC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT;AAAA,IACA,SAAS;AAAA,EACb,CAAC;AACD,MAAI,QAAQ,SAAS,MAAM;AAAG,cAAM,sBAAQ;AAC5C,MAAI,QAAQ,SAAS,UAAU;AAAG,cAAM,0BAAY;AACpD,MAAI,QAAQ,SAAS,OAAO;AAAG,cAAM,8BAAgB,OAAO;AAC5D,MAAI,QAAQ,SAAS,oBAAoB;AAAG,cAAM,8BAAgB,oBAAoB;AACtF,MAAI,QAAQ,SAAS,eAAe;AAAG,cAAM,8BAAgB,eAAe;AAC5E,MAAI,QAAQ,SAAS,aAAa;AAAG,cAAM,8BAAgB,aAAa;AACxE,MAAI,QAAQ,SAAS,KAAK;AAAG,cAAM,8BAAgB,KAAK;AACxD,YAAM,0BAAY;AAClB,MAAI,YAAY;AAChB,MAAI,QAAQ,SAAS,QAAQ,GAAG;AAC5B,cAAM,wBAAU,OAAO;AACvB,gBAAY;AAAA,EAChB;AACA,MAAI,CAAC;AAAW,cAAM,gCAAkB,MAAM,OAAO;AACzD,CAAC;AAED,QACK,QAAQ,KAAK,EACb,YAAY,MAAM,EAClB,OAAO,YAAY,UAAM,yBAAW,kBAAkB,CAAC;AAE5D,QAAQ,MAAM;",
6
6
  "names": ["consola", "module", "pkg", "upgrade", "index"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zixulu",
3
- "version": "1.26.3",
3
+ "version": "1.26.4",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "bin": {
package/src/index.ts CHANGED
@@ -6,7 +6,7 @@ import consola from "consola"
6
6
  import { mkdir, readdir, readFile, rename, rm, writeFile } from "fs/promises"
7
7
  import { join, resolve } from "path"
8
8
  import { PackageManager, Registry, Software } from "./constant"
9
- import { addAntd, addDependencies, addDevDependencies, addGitignore, addPostCSSConfig, addPrettier, addPrisma, addTailwind, addTailwindConfig, addTailwindToCSS, createIndexHtml, downloadVscodeExts, execAsync, getFiles, getPackageManager, getPackageUpgradeVersion, getPidInfoFromPort, getProcessInfoFromPid, getTypeInGenerics, getVersionFromRequiredVersion, installDependcies, Module, ModuleResolution, readPackageJson, readPackageJsonSync, removeComment, removeESLint, setTsConfig, SoftwareDownloadMap, sortArrayOrObject, spawnAsync, splitExtendsType, Target, vite, writeInstallVscodeExtScript, writePackageJson, writeRsbuildConfig, zipDir } from "./utils"
9
+ import { addAntd, addDependencies, addDevDependencies, addGitignore, addPostCSSConfig, addPrettier, addPrisma, addTailwind, addTailwindConfig, addTailwindToCSS, createIndexHtml, downloadVscodeExts, execAsync, getFiles, getPackageManager, getPackageUpgradeVersion, getPidInfoFromPort, getProcessInfoFromPid, getTypeInGenerics, getVersionFromRequiredVersion, installDependcies, isCommandExisted, Module, ModuleResolution, readPackageJson, readPackageJsonSync, removeComment, removeESLint, setTsConfig, SoftwareDownloadMap, sortArrayOrObject, spawnAsync, splitExtendsType, Target, vite, writeInstallVscodeExtScript, writePackageJson, writeRsbuildConfig, zipDir } from "./utils"
10
10
 
11
11
  const program = new Command()
12
12
 
@@ -135,13 +135,16 @@ program
135
135
  .alias("ud")
136
136
  .description("升级所有依赖")
137
137
  .action(async () => {
138
- const status = await execAsync("git status")
139
-
140
- if (status === "fatal: not a git repository (or any of the parent directories): .git") {
138
+ if (await isCommandExisted("git")) {
139
+ const status = await execAsync("git status")
140
+ if (status === "fatal: not a git repository (or any of the parent directories): .git") {
141
+ consola.warn("请在使用本功能前备份代码")
142
+ } else if (!status.includes("nothing to commit, working tree clean")) {
143
+ consola.warn("请在使用本功能前提交代码")
144
+ return
145
+ }
146
+ } else {
141
147
  consola.warn("请在使用本功能前备份代码")
142
- } else if (!status.includes("nothing to commit, working tree clean")) {
143
- consola.warn("请在使用本功能前提交代码")
144
- return
145
148
  }
146
149
 
147
150
  const { default: inquirer } = await import("inquirer")
@@ -162,6 +165,8 @@ program
162
165
  choices: ["major", "minor", "patch"]
163
166
  })
164
167
 
168
+ let hasUpgrade = false
169
+
165
170
  for (const type of types) {
166
171
  const upgrades: { package: string; oldVersion: string; newVersion: string; strVersion: string }[] = []
167
172
  const allPkgs = Object.keys(packageJson[type])
@@ -186,11 +191,14 @@ program
186
191
  })
187
192
 
188
193
  pkgs.forEach((pkg: string) => {
194
+ hasUpgrade = true
189
195
  const upgrade = upgrades.find(upgrade => upgrade.package === pkg)!
190
196
  packageJson[type][pkg] = upgrade.strVersion
191
197
  })
192
198
  }
193
199
 
200
+ if (!hasUpgrade) return
201
+
194
202
  await writePackageJson(packageJson)
195
203
 
196
204
  const status1 = await execAsync("git status")