zixulu 1.26.1 → 1.26.3

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
@@ -590,7 +590,7 @@ program.command("init").action(async () => {
590
590
  const { modules } = await inquirer.prompt({
591
591
  type: "checkbox",
592
592
  name: "modules",
593
- message: "请选择",
593
+ message: "请选择要添加的模块",
594
594
  choices,
595
595
  default: choices
596
596
  });
@@ -611,7 +611,7 @@ program.command("init").action(async () => {
611
611
  await (0, import_utils.addPrettier)();
612
612
  let installed = false;
613
613
  if (modules.includes("prisma")) {
614
- await (0, import_utils.addPrisma)();
614
+ await (0, import_utils.addPrisma)(manager);
615
615
  installed = true;
616
616
  }
617
617
  if (!installed)
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()\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,mBAAuoB;AAEvoB,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,QAAM,SAAS,UAAM,wBAAU,YAAY;AAE3C,MAAI,WAAW,wEAAwE;AACnF,mBAAAA,QAAQ,KAAK,cAAc;AAAA,EAC/B,WAAW,CAAC,OAAO,SAAS,uCAAuC,GAAG;AAClE,mBAAAA,QAAQ,KAAK,cAAc;AAC3B;AAAA,EACJ;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,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,YAAM,UAAU,SAAS,KAAK,CAAAC,aAAWA,SAAQ,YAAYD,IAAG;AAChE,kBAAY,IAAI,EAAEA,IAAG,IAAI,QAAQ;AAAA,IACrC,CAAC;AAAA,EACL;AAEA,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;AAChB,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;",
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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",
6
6
  "names": ["consola", "module", "pkg", "upgrade", "index"]
7
7
  }
@@ -227,6 +227,6 @@ export declare function getPidInfoFromPort(port: number): Promise<{
227
227
  }[]>;
228
228
  export declare function zipDir(sourceDir: string, outPath: string): Promise<void>;
229
229
  export declare function addAntd(): Promise<void>;
230
- export declare function addPrisma(): Promise<void>;
230
+ export declare function addPrisma(manager?: PackageManager): Promise<void>;
231
231
  export declare function getPackageManager(): Promise<PackageManager>;
232
232
  export declare function isCommandExisted(command: string): Promise<boolean>;
@@ -110,14 +110,11 @@ var import_process = require("process");
110
110
  var import_stream = require("stream");
111
111
  var import_yaml = __toESM(require("yaml"));
112
112
  var import_constant = require("../constant");
113
- function getAbsolutePath(path) {
114
- return (0, import_path.isAbsolute)(path) ? path : (0, import_path.join)((0, import_process.cwd)(), path);
115
- }
116
113
  function getPackageJsonPath(path) {
117
- return (0, import_path.join)(getAbsolutePath(path ?? (0, import_process.cwd)()), "package.json");
114
+ return (0, import_path.join)(path ?? (0, import_process.cwd)(), "package.json");
118
115
  }
119
116
  function getTsConfigJsonPath(path) {
120
- return (0, import_path.join)(getAbsolutePath(path ?? (0, import_process.cwd)()), "tsconfig.json");
117
+ return (0, import_path.join)(path ?? (0, import_process.cwd)(), "tsconfig.json");
121
118
  }
122
119
  async function getPackageLatestVersion(packageName) {
123
120
  try {
@@ -360,12 +357,15 @@ async function vite() {
360
357
  async function addTailwindConfig() {
361
358
  try {
362
359
  await (0, import_promises.writeFile)(
363
- getAbsolutePath("tailwind.config.js"),
360
+ "tailwind.config.js",
364
361
  `/** @type {import('tailwindcss').Config} */
365
362
  export default {
366
363
  content: [
367
364
  "./index.html",
365
+ "./public/index.html",
368
366
  "./src/**/*.{js,ts,jsx,tsx}",
367
+ "./app/**/*.{js,ts,jsx,tsx}",
368
+ "./components/**/*.{js,ts,jsx,tsx}",
369
369
  ],
370
370
  theme: {
371
371
  extend: {},
@@ -385,7 +385,7 @@ async function addPostCSSConfig() {
385
385
  const packageJson = await readPackageJson();
386
386
  const autoprefixer = Object.keys(packageJson.dependencies).includes("autoprefixer") || Object.keys(packageJson.devDependencies).includes("autoprefixer");
387
387
  await (0, import_promises.writeFile)(
388
- getAbsolutePath("postcss.config.js"),
388
+ "postcss.config.cjs",
389
389
  `module.exports = {
390
390
  plugins: {
391
391
  tailwindcss: {}${autoprefixer ? `,
@@ -400,6 +400,40 @@ async function addPostCSSConfig() {
400
400
  import_consola.default.fail("添加 postcss.config.js 配置失败");
401
401
  }
402
402
  }
403
+ async function getEntryCssPath(path) {
404
+ const dir = await (0, import_promises.readdir)(path);
405
+ if (dir.includes("app")) {
406
+ const stats = await (0, import_promises.stat)((0, import_path.join)(path, "app"));
407
+ if (stats.isDirectory())
408
+ return getEntryCssPath((0, import_path.join)(path, "app"));
409
+ }
410
+ if (dir.includes("src")) {
411
+ const stats = await (0, import_promises.stat)((0, import_path.join)(path, "src"));
412
+ if (stats.isDirectory())
413
+ return getEntryCssPath((0, import_path.join)(path, "src"));
414
+ }
415
+ return path;
416
+ }
417
+ async function createEntryCss() {
418
+ const path = await getEntryCssPath("./");
419
+ const dir = await (0, import_promises.readdir)(path);
420
+ let hasIndex = false;
421
+ let hasApp = false;
422
+ for (const item of dir) {
423
+ const parsedPath = (0, import_path.parse)(item);
424
+ if (!(parsedPath.ext === "ts" || parsedPath.ext === "tsx" || parsedPath.ext === "js" || parsedPath.ext === "jsx"))
425
+ continue;
426
+ if (parsedPath.name.toLowerCase() === "index" || parsedPath.name.toLowerCase() === "main")
427
+ hasIndex = true;
428
+ if (parsedPath.name.toLowerCase() === "app")
429
+ hasApp = true;
430
+ if (hasIndex && hasApp)
431
+ break;
432
+ }
433
+ const cssPath = hasIndex || !hasApp ? (0, import_path.join)(path, "index.css") : (0, import_path.join)(path, "app.css");
434
+ await (0, import_promises.writeFile)(cssPath, "");
435
+ return cssPath;
436
+ }
403
437
  async function addTailwindToCSS() {
404
438
  try {
405
439
  const files = await getFiles({
@@ -408,8 +442,8 @@ async function addTailwindToCSS() {
408
442
  exclude: (path, stats) => path.base === "node_modules" && stats.isDirectory()
409
443
  });
410
444
  if (files.length === 0)
411
- await (0, import_promises.writeFile)("index.css", "");
412
- const file = files[0] || "index.css";
445
+ files.push(await createEntryCss());
446
+ const file = files[0];
413
447
  const { base } = (0, import_path.parse)(file);
414
448
  const css = await (0, import_promises.readFile)(file, "utf-8");
415
449
  if (css.includes("@tailwind")) {
@@ -459,7 +493,7 @@ async function addPrettier() {
459
493
  try {
460
494
  const packageJson = await readPackageJson();
461
495
  const tailwind = Object.keys(packageJson.dependencies).includes("tailwindcss") || Object.keys(packageJson.devDependencies).includes("tailwindcss");
462
- await (0, import_promises.writeFile)(getAbsolutePath("./prettier.config.cjs"), tailwind ? prettierConfigTextWithTailwind : prettierConfigText);
496
+ await (0, import_promises.writeFile)("./prettier.config.cjs", tailwind ? prettierConfigTextWithTailwind : prettierConfigText);
463
497
  await addDevDependencies("prettier");
464
498
  await addDevDependencies("prettier-plugin-tailwindcss");
465
499
  import_consola.default.success("添加 prettier 配置成功");
@@ -485,9 +519,9 @@ async function addTailwind() {
485
519
  }
486
520
  async function removeComment(path) {
487
521
  try {
488
- const text = await (0, import_promises.readFile)(getAbsolutePath(path), "utf-8");
522
+ const text = await (0, import_promises.readFile)(path, "utf-8");
489
523
  const newText = text.replace(/^ *?\/\/.*?$/gm, "");
490
- await (0, import_promises.writeFile)(getAbsolutePath(path), newText, "utf-8");
524
+ await (0, import_promises.writeFile)(path, newText, "utf-8");
491
525
  import_consola.default.success("删除注释成功");
492
526
  } catch (error) {
493
527
  import_consola.default.fail("删除注释失败");
@@ -693,7 +727,7 @@ export default defineConfig({
693
727
  })
694
728
  `;
695
729
  async function writeRsbuildConfig() {
696
- await (0, import_promises.writeFile)(getAbsolutePath("rsbuild.config.ts"), rsbuildConfig, "utf-8");
730
+ await (0, import_promises.writeFile)("rsbuild.config.ts", rsbuildConfig, "utf-8");
697
731
  }
698
732
  var indexHtml = `<!doctype html>
699
733
  <html lang="zh">
@@ -710,19 +744,17 @@ var indexHtml = `<!doctype html>
710
744
  </html>
711
745
  `;
712
746
  async function createIndexHtml() {
713
- try {
714
- await (0, import_promises.writeFile)(getAbsolutePath("public/index.html"), indexHtml, "utf-8");
715
- import_consola.default.success("创建 index.html 成功");
716
- } catch (error) {
717
- await (0, import_promises.mkdir)(getAbsolutePath("public"));
718
- try {
719
- await (0, import_promises.writeFile)(getAbsolutePath("public/index.html"), indexHtml, "utf-8");
720
- import_consola.default.success("创建 index.html 成功");
721
- } catch (error2) {
722
- import_consola.default.fail("创建 index.html 失败");
723
- (0, import_process.exit)();
724
- }
747
+ const dir = await (0, import_promises.readdir)("./");
748
+ let hasPublic = false;
749
+ if (dir.includes("public")) {
750
+ const stats = await (0, import_promises.stat)("public");
751
+ if (stats.isDirectory())
752
+ hasPublic = true;
725
753
  }
754
+ if (!hasPublic)
755
+ await (0, import_promises.mkdir)("public", { recursive: true });
756
+ await (0, import_promises.writeFile)("public/index.html", indexHtml, "utf-8");
757
+ import_consola.default.success("创建 index.html 成功");
726
758
  }
727
759
  var addedRules = ["package-lock.json", "yarn.lock", "node_modules", "dist", "build", "pnpm-lock.yaml", "yarn-error.log", "test.js", "test.mjs", "test.ts"];
728
760
  async function addGitignore() {
@@ -1043,7 +1075,7 @@ export default AntdRegistry
1043
1075
  import_consola.default.fail("添加 antd 失败");
1044
1076
  }
1045
1077
  }
1046
- async function addPrisma() {
1078
+ async function addPrisma(manager) {
1047
1079
  try {
1048
1080
  await addDependencies("@prisma/client");
1049
1081
  await addDevDependencies("prisma");
@@ -1051,7 +1083,7 @@ async function addPrisma() {
1051
1083
  await addDevDependencies("@types/node");
1052
1084
  await addDevDependencies("typescript");
1053
1085
  const dir = await (0, import_promises.readdir)("./");
1054
- await installDependcies(true);
1086
+ await installDependcies(true, manager);
1055
1087
  if (!dir.includes("tsconfig.json"))
1056
1088
  await spawnAsync("npx tsc --init");
1057
1089
  await spawnAsync("npx prisma init --datasource-provider sqlite");
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/index.ts"],
4
- "sourcesContent": ["import archiver from \"archiver\"\r\nimport { 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 { PackageManager, 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(packageName: string, version?: string): Promise<void> {\r\n try {\r\n const packageJson = await readPackageJson()\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 await writePackageJson(packageJson)\r\n } catch (error) {\r\n consola.error(error)\r\n consola.fail(`添加 ${packageName} 至依赖失败`)\r\n exit()\r\n }\r\n}\r\n\r\n/** 写入依赖 */\r\nexport async function addDevDependencies(packageName: string, version?: string): Promise<void> {\r\n try {\r\n const packageJson = await readPackageJson()\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 await writePackageJson(packageJson)\r\n } catch (error) {\r\n consola.error(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 function isPositiveInteger(value: any, allowZero = false): value is number {\r\n return Number.isInteger(value) && (allowZero ? value >= 0 : value > 0)\r\n}\r\n\r\nexport interface GetFilesOptions {\r\n path?: string\r\n match: (path: ParsedPath, stats: Stats) => boolean\r\n count?: number\r\n depth?: number\r\n exclude?: (path: ParsedPath, stats: Stats) => boolean\r\n}\r\n\r\nexport async function getFiles(options: GetFilesOptions) {\r\n const { path = \"./\", match, count, depth, exclude } = options\r\n if (count !== undefined && !isPositiveInteger(count)) throw new Error(\"count 必须是正整数\")\r\n if (depth !== undefined && !isPositiveInteger(depth)) throw new Error(\"depth 必须是正整数\")\r\n const result: string[] = []\r\n const e = Symbol()\r\n async function _getFiles(path: string, depth: number | undefined) {\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 (match(parsedPath, stats)) {\r\n const length = result.push(filePath)\r\n if (count !== undefined && length >= count) throw e\r\n }\r\n if (!stats.isDirectory()) continue\r\n if (exclude && exclude(parsedPath, stats)) continue\r\n if (depth === 1) continue\r\n await _getFiles(filePath, depth && depth - 1)\r\n }\r\n }\r\n try {\r\n await _getFiles(path, depth)\r\n } catch (error) {\r\n if (error !== e) throw error\r\n }\r\n return result\r\n}\r\n\r\n/** 删除 ESLint 配置文件 */\r\nexport async function removeESLint() {\r\n try {\r\n const { default: inquirer } = await import(\"inquirer\")\r\n const files = await getFiles({\r\n match: (path, stats) => path.base.toLowerCase().includes(\"eslint\") && stats.isFile(),\r\n exclude: (path, stats) => path.base === \"node_modules\" && stats.isDirectory()\r\n })\r\n const { selectedFiles } = await inquirer.prompt({\r\n type: \"checkbox\",\r\n name: \"selectedFiles\",\r\n message: \"选择要删除的文件\",\r\n choices: files,\r\n default: files\r\n })\r\n\r\n for (const file of selectedFiles) {\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 files = await getFiles({\r\n match: (path, stats) => (path.base.toLowerCase() === \"index.css\" || path.base.toLowerCase() === \"app.css\" || path.base.toLowerCase() === \"globals.css\") && stats.isFile(),\r\n count: 1,\r\n exclude: (path, stats) => path.base === \"node_modules\" && stats.isDirectory()\r\n })\r\n if (files.length === 0) await writeFile(\"index.css\", \"\")\r\n const file = files[0] || \"index.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 addPrettier() {\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(\"prettier\")\r\n await addDevDependencies(\"prettier-plugin-tailwindcss\")\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 addTailwind() {\r\n try {\r\n await addDevDependencies(\"tailwindcss\")\r\n await addDevDependencies(\"autoprefixer\")\r\n await addDevDependencies(\"postcss\")\r\n await addDevDependencies(\"prettier\")\r\n await addDevDependencies(\"prettier-plugin-tailwindcss\")\r\n await addTailwindConfig()\r\n await addPostCSSConfig()\r\n await addTailwindToCSS()\r\n await addPrettier()\r\n consola.success(\"添加 tailwind 成功\")\r\n } catch (error) {\r\n consola.fail(\"添加 tailwind 失败\")\r\n }\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 installDependcies(silent?: boolean, manager?: PackageManager): Promise<boolean> {\r\n if (!silent) {\r\n const { default: inquirer } = await import(\"inquirer\")\r\n const { install } = await inquirer.prompt({\r\n type: \"confirm\",\r\n name: \"install\",\r\n message: \"安装依赖\"\r\n })\r\n if (install === false) return false\r\n }\r\n manager ??= await getPackageManager()\r\n await spawnAsync(`${manager} install`)\r\n return true\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 ExecAsyncOptions = {\r\n cwd?: string | URL | undefined\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, options?: ExecAsyncOptions) {\r\n consola.log(command)\r\n const { cwd } = options || {}\r\n return new Promise<string>((resolve, reject) => {\r\n exec(command, { cwd }, (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\", \"test.js\", \"test.mjs\", \"test.ts\"]\r\n\r\nexport async function addGitignore() {\r\n const dir = await readdir(\"./\")\r\n if (!dir.includes(\".gitignore\")) return await writeFile(\".gitignore\", addedRules.join(\"\\n\"), \"utf-8\")\r\n const gitignore = await readFile(\".gitignore\", \"utf-8\")\r\n const rules = gitignore.split(\"\\n\").map(v => v.trim())\r\n for (const rule of addedRules) {\r\n if (rules.includes(rule)) continue\r\n rules.push(rule)\r\n }\r\n await writeFile(\".gitignore\", rules.join(\"\\n\"), \"utf-8\")\r\n consola.success(\"添加 .gitignore 成功\")\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\r\nexport function zipDir(sourceDir: string, outPath: string) {\r\n const archive = archiver(\"zip\", { zlib: { level: 0 } }) // 设置压缩级别\r\n const stream = createWriteStream(outPath)\r\n\r\n return new Promise<void>((resolve, reject) => {\r\n archive\r\n .directory(sourceDir, false) // 添加整个目录到压缩文件\r\n .on(\"error\", err => reject(err))\r\n .pipe(stream)\r\n\r\n stream.on(\"close\", () => resolve())\r\n archive.finalize()\r\n })\r\n}\r\n\r\nexport async function addAntd() {\r\n try {\r\n await addDependencies(\"@ant-design/cssinjs\")\r\n await addDependencies(\"@ant-design/icons\")\r\n await addDependencies(\"ahooks\")\r\n await addDependencies(\"antd\")\r\n const dir = await readdir(\"./\")\r\n const componentDir = dir.includes(\"src\") ? \"src/components\" : \"components\"\r\n await mkdir(componentDir, { recursive: true })\r\n const packageJson = await readPackageJson()\r\n if (packageJson.dependencies.next) {\r\n await addDependencies(\"@ant-design/nextjs-registry\")\r\n await writeFile(\r\n join(componentDir, \"AntdNextRegistry.tsx\"),\r\n `\"use client\"\r\nimport { StyleProvider } from \"@ant-design/cssinjs\"\r\nimport { AntdRegistry } from \"@ant-design/nextjs-registry\"\r\nimport { ConfigProvider } from \"antd\"\r\nimport zhCN from \"antd/locale/zh_CN\"\r\nimport { FC, ReactNode } from \"react\"\r\n\r\nexport type AntdNextRegistryProps = {\r\n children?: ReactNode\r\n}\r\n\r\nconst AntdNextRegistry: FC<AntdNextRegistryProps> = props => {\r\n const { children } = props\r\n\r\n return (\r\n <AntdRegistry>\r\n <ConfigProvider locale={zhCN}>\r\n <StyleProvider hashPriority=\"high\">{children}</StyleProvider>\r\n </ConfigProvider>\r\n </AntdRegistry>\r\n )\r\n}\r\n\r\nexport default AntdNextRegistry\r\n`\r\n )\r\n } else {\r\n await writeFile(\r\n join(componentDir, \"AntdRegistry.tsx\"),\r\n `\"use client\"\r\nimport { StyleProvider } from \"@ant-design/cssinjs\"\r\nimport { ConfigProvider } from \"antd\"\r\nimport zhCN from \"antd/locale/zh_CN\"\r\nimport { FC, ReactNode } from \"react\"\r\n\r\nexport type AntdRegistryProps = {\r\n children?: ReactNode\r\n}\r\n\r\nconst AntdRegistry: FC<AntdRegistryProps> = props => {\r\n const { children } = props\r\n\r\n return (\r\n <ConfigProvider locale={zhCN}>\r\n <StyleProvider hashPriority=\"high\">{children}</StyleProvider>\r\n </ConfigProvider>\r\n )\r\n}\r\n\r\nexport default AntdRegistry\r\n`\r\n )\r\n }\r\n consola.success(\"添加 antd 成功\")\r\n } catch (error) {\r\n consola.fail(\"添加 antd 失败\")\r\n }\r\n}\r\n\r\nexport async function addPrisma() {\r\n try {\r\n await addDependencies(\"@prisma/client\")\r\n await addDevDependencies(\"prisma\")\r\n await addDevDependencies(\"ts-node\")\r\n await addDevDependencies(\"@types/node\")\r\n await addDevDependencies(\"typescript\")\r\n const dir = await readdir(\"./\")\r\n await installDependcies(true)\r\n if (!dir.includes(\"tsconfig.json\")) await spawnAsync(\"npx tsc --init\")\r\n await spawnAsync(\"npx prisma init --datasource-provider sqlite\")\r\n consola.success(\"添加 Prisma 成功\")\r\n } catch (error) {\r\n consola.fail(\"添加 Prisma 失败\")\r\n }\r\n}\r\n\r\nexport async function getPackageManager(): Promise<PackageManager> {\r\n const dir = await readdir(\"./\")\r\n if (dir.includes(\"yarn.lock\")) return PackageManager.yarn\r\n if (dir.includes(\"package-lock.json\")) return PackageManager.npm\r\n if (dir.includes(\"pnpm-lock.yaml\")) return PackageManager.pnpm\r\n if (dir.includes(\"bun.lockb\")) return PackageManager.bun\r\n const { default: inquirer } = await import(\"inquirer\")\r\n const { manager } = await inquirer.prompt({\r\n type: \"list\",\r\n name: \"manager\",\r\n message: \"请选择包管理器\",\r\n choices: [\"yarn\", \"npm\", \"pnpm\", \"bun\"]\r\n })\r\n return manager as PackageManager\r\n}\r\n\r\nexport async function isCommandExisted(command: string): Promise<boolean> {\r\n return new Promise<boolean>(resolve => {\r\n exec(`command ${command}`, err => {\r\n resolve(!err)\r\n })\r\n })\r\n}\r\n"],
5
- "mappings": "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",
6
- "names": ["consola", "path", "depth", "Target", "Module", "ModuleResolution", "t", "m", "mr", "cwd", "error", "fetch", "YAML", "architecture", "archiver"]
4
+ "sourcesContent": ["import archiver from \"archiver\"\r\nimport { 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, 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 { PackageManager, Software } from \"../constant\"\r\n\r\nexport function getPackageJsonPath(path?: string) {\r\n return join(path ?? cwd(), \"package.json\")\r\n}\r\n\r\nexport function getTsConfigJsonPath(path?: string) {\r\n return join(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(packageName: string, version?: string): Promise<void> {\r\n try {\r\n const packageJson = await readPackageJson()\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 await writePackageJson(packageJson)\r\n } catch (error) {\r\n consola.error(error)\r\n consola.fail(`添加 ${packageName} 至依赖失败`)\r\n exit()\r\n }\r\n}\r\n\r\n/** 写入依赖 */\r\nexport async function addDevDependencies(packageName: string, version?: string): Promise<void> {\r\n try {\r\n const packageJson = await readPackageJson()\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 await writePackageJson(packageJson)\r\n } catch (error) {\r\n consola.error(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 function isPositiveInteger(value: any, allowZero = false): value is number {\r\n return Number.isInteger(value) && (allowZero ? value >= 0 : value > 0)\r\n}\r\n\r\nexport interface GetFilesOptions {\r\n path?: string\r\n match: (path: ParsedPath, stats: Stats) => boolean\r\n count?: number\r\n depth?: number\r\n exclude?: (path: ParsedPath, stats: Stats) => boolean\r\n}\r\n\r\nexport async function getFiles(options: GetFilesOptions) {\r\n const { path = \"./\", match, count, depth, exclude } = options\r\n if (count !== undefined && !isPositiveInteger(count)) throw new Error(\"count 必须是正整数\")\r\n if (depth !== undefined && !isPositiveInteger(depth)) throw new Error(\"depth 必须是正整数\")\r\n const result: string[] = []\r\n const e = Symbol()\r\n async function _getFiles(path: string, depth: number | undefined) {\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 (match(parsedPath, stats)) {\r\n const length = result.push(filePath)\r\n if (count !== undefined && length >= count) throw e\r\n }\r\n if (!stats.isDirectory()) continue\r\n if (exclude && exclude(parsedPath, stats)) continue\r\n if (depth === 1) continue\r\n await _getFiles(filePath, depth && depth - 1)\r\n }\r\n }\r\n try {\r\n await _getFiles(path, depth)\r\n } catch (error) {\r\n if (error !== e) throw error\r\n }\r\n return result\r\n}\r\n\r\n/** 删除 ESLint 配置文件 */\r\nexport async function removeESLint() {\r\n try {\r\n const { default: inquirer } = await import(\"inquirer\")\r\n const files = await getFiles({\r\n match: (path, stats) => path.base.toLowerCase().includes(\"eslint\") && stats.isFile(),\r\n exclude: (path, stats) => path.base === \"node_modules\" && stats.isDirectory()\r\n })\r\n const { selectedFiles } = await inquirer.prompt({\r\n type: \"checkbox\",\r\n name: \"selectedFiles\",\r\n message: \"选择要删除的文件\",\r\n choices: files,\r\n default: files\r\n })\r\n\r\n for (const file of selectedFiles) {\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 \"tailwind.config.js\",\r\n `/** @type {import('tailwindcss').Config} */\r\nexport default {\r\n content: [\r\n \"./index.html\",\r\n \"./public/index.html\",\r\n \"./src/**/*.{js,ts,jsx,tsx}\",\r\n \"./app/**/*.{js,ts,jsx,tsx}\",\r\n \"./components/**/*.{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 \"postcss.config.cjs\",\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\nasync function getEntryCssPath(path: string): Promise<string> {\r\n const dir = await readdir(path)\r\n if (dir.includes(\"app\")) {\r\n const stats = await stat(join(path, \"app\"))\r\n if (stats.isDirectory()) return getEntryCssPath(join(path, \"app\"))\r\n }\r\n if (dir.includes(\"src\")) {\r\n const stats = await stat(join(path, \"src\"))\r\n if (stats.isDirectory()) return getEntryCssPath(join(path, \"src\"))\r\n }\r\n return path\r\n}\r\n\r\nasync function createEntryCss() {\r\n const path = await getEntryCssPath(\"./\")\r\n const dir = await readdir(path)\r\n let hasIndex = false\r\n let hasApp = false\r\n for (const item of dir) {\r\n const parsedPath = parse(item)\r\n if (!(parsedPath.ext === \"ts\" || parsedPath.ext === \"tsx\" || parsedPath.ext === \"js\" || parsedPath.ext === \"jsx\")) continue\r\n if (parsedPath.name.toLowerCase() === \"index\" || parsedPath.name.toLowerCase() === \"main\") hasIndex = true\r\n if (parsedPath.name.toLowerCase() === \"app\") hasApp = true\r\n if (hasIndex && hasApp) break\r\n }\r\n const cssPath = hasIndex || !hasApp ? join(path, \"index.css\") : join(path, \"app.css\")\r\n await writeFile(cssPath, \"\")\r\n return cssPath\r\n}\r\n\r\n/** 添加 tailwind 至 index.css 成功 */\r\nexport async function addTailwindToCSS() {\r\n try {\r\n const files = await getFiles({\r\n match: (path, stats) => (path.base.toLowerCase() === \"index.css\" || path.base.toLowerCase() === \"app.css\" || path.base.toLowerCase() === \"globals.css\") && stats.isFile(),\r\n count: 1,\r\n exclude: (path, stats) => path.base === \"node_modules\" && stats.isDirectory()\r\n })\r\n if (files.length === 0) files.push(await createEntryCss())\r\n const file = files[0]\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 addPrettier() {\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(\"./prettier.config.cjs\", tailwind ? prettierConfigTextWithTailwind : prettierConfigText)\r\n await addDevDependencies(\"prettier\")\r\n await addDevDependencies(\"prettier-plugin-tailwindcss\")\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 addTailwind() {\r\n try {\r\n await addDevDependencies(\"tailwindcss\")\r\n await addDevDependencies(\"autoprefixer\")\r\n await addDevDependencies(\"postcss\")\r\n await addDevDependencies(\"prettier\")\r\n await addDevDependencies(\"prettier-plugin-tailwindcss\")\r\n await addTailwindConfig()\r\n await addPostCSSConfig()\r\n await addTailwindToCSS()\r\n await addPrettier()\r\n consola.success(\"添加 tailwind 成功\")\r\n } catch (error) {\r\n consola.fail(\"添加 tailwind 失败\")\r\n }\r\n}\r\n\r\nexport async function removeComment(path: string) {\r\n try {\r\n const text = await readFile(path, \"utf-8\")\r\n const newText = text.replace(/^ *?\\/\\/.*?$/gm, \"\")\r\n await writeFile(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 installDependcies(silent?: boolean, manager?: PackageManager): Promise<boolean> {\r\n if (!silent) {\r\n const { default: inquirer } = await import(\"inquirer\")\r\n const { install } = await inquirer.prompt({\r\n type: \"confirm\",\r\n name: \"install\",\r\n message: \"安装依赖\"\r\n })\r\n if (install === false) return false\r\n }\r\n manager ??= await getPackageManager()\r\n await spawnAsync(`${manager} install`)\r\n return true\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 ExecAsyncOptions = {\r\n cwd?: string | URL | undefined\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, options?: ExecAsyncOptions) {\r\n consola.log(command)\r\n const { cwd } = options || {}\r\n return new Promise<string>((resolve, reject) => {\r\n exec(command, { cwd }, (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(\"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 const dir = await readdir(\"./\")\r\n let hasPublic = false\r\n if (dir.includes(\"public\")) {\r\n const stats = await stat(\"public\")\r\n if (stats.isDirectory()) hasPublic = true\r\n }\r\n if (!hasPublic) await mkdir(\"public\", { recursive: true })\r\n await writeFile(\"public/index.html\", indexHtml, \"utf-8\")\r\n consola.success(\"创建 index.html 成功\")\r\n}\r\n\r\nexport const addedRules = [\"package-lock.json\", \"yarn.lock\", \"node_modules\", \"dist\", \"build\", \"pnpm-lock.yaml\", \"yarn-error.log\", \"test.js\", \"test.mjs\", \"test.ts\"]\r\n\r\nexport async function addGitignore() {\r\n const dir = await readdir(\"./\")\r\n if (!dir.includes(\".gitignore\")) return await writeFile(\".gitignore\", addedRules.join(\"\\n\"), \"utf-8\")\r\n const gitignore = await readFile(\".gitignore\", \"utf-8\")\r\n const rules = gitignore.split(\"\\n\").map(v => v.trim())\r\n for (const rule of addedRules) {\r\n if (rules.includes(rule)) continue\r\n rules.push(rule)\r\n }\r\n await writeFile(\".gitignore\", rules.join(\"\\n\"), \"utf-8\")\r\n consola.success(\"添加 .gitignore 成功\")\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\r\nexport function zipDir(sourceDir: string, outPath: string) {\r\n const archive = archiver(\"zip\", { zlib: { level: 0 } }) // 设置压缩级别\r\n const stream = createWriteStream(outPath)\r\n\r\n return new Promise<void>((resolve, reject) => {\r\n archive\r\n .directory(sourceDir, false) // 添加整个目录到压缩文件\r\n .on(\"error\", err => reject(err))\r\n .pipe(stream)\r\n\r\n stream.on(\"close\", () => resolve())\r\n archive.finalize()\r\n })\r\n}\r\n\r\nexport async function addAntd() {\r\n try {\r\n await addDependencies(\"@ant-design/cssinjs\")\r\n await addDependencies(\"@ant-design/icons\")\r\n await addDependencies(\"ahooks\")\r\n await addDependencies(\"antd\")\r\n const dir = await readdir(\"./\")\r\n const componentDir = dir.includes(\"src\") ? \"src/components\" : \"components\"\r\n await mkdir(componentDir, { recursive: true })\r\n const packageJson = await readPackageJson()\r\n if (packageJson.dependencies.next) {\r\n await addDependencies(\"@ant-design/nextjs-registry\")\r\n await writeFile(\r\n join(componentDir, \"AntdNextRegistry.tsx\"),\r\n `\"use client\"\r\nimport { StyleProvider } from \"@ant-design/cssinjs\"\r\nimport { AntdRegistry } from \"@ant-design/nextjs-registry\"\r\nimport { ConfigProvider } from \"antd\"\r\nimport zhCN from \"antd/locale/zh_CN\"\r\nimport { FC, ReactNode } from \"react\"\r\n\r\nexport type AntdNextRegistryProps = {\r\n children?: ReactNode\r\n}\r\n\r\nconst AntdNextRegistry: FC<AntdNextRegistryProps> = props => {\r\n const { children } = props\r\n\r\n return (\r\n <AntdRegistry>\r\n <ConfigProvider locale={zhCN}>\r\n <StyleProvider hashPriority=\"high\">{children}</StyleProvider>\r\n </ConfigProvider>\r\n </AntdRegistry>\r\n )\r\n}\r\n\r\nexport default AntdNextRegistry\r\n`\r\n )\r\n } else {\r\n await writeFile(\r\n join(componentDir, \"AntdRegistry.tsx\"),\r\n `\"use client\"\r\nimport { StyleProvider } from \"@ant-design/cssinjs\"\r\nimport { ConfigProvider } from \"antd\"\r\nimport zhCN from \"antd/locale/zh_CN\"\r\nimport { FC, ReactNode } from \"react\"\r\n\r\nexport type AntdRegistryProps = {\r\n children?: ReactNode\r\n}\r\n\r\nconst AntdRegistry: FC<AntdRegistryProps> = props => {\r\n const { children } = props\r\n\r\n return (\r\n <ConfigProvider locale={zhCN}>\r\n <StyleProvider hashPriority=\"high\">{children}</StyleProvider>\r\n </ConfigProvider>\r\n )\r\n}\r\n\r\nexport default AntdRegistry\r\n`\r\n )\r\n }\r\n consola.success(\"添加 antd 成功\")\r\n } catch (error) {\r\n consola.fail(\"添加 antd 失败\")\r\n }\r\n}\r\n\r\nexport async function addPrisma(manager?: PackageManager) {\r\n try {\r\n await addDependencies(\"@prisma/client\")\r\n await addDevDependencies(\"prisma\")\r\n await addDevDependencies(\"ts-node\")\r\n await addDevDependencies(\"@types/node\")\r\n await addDevDependencies(\"typescript\")\r\n const dir = await readdir(\"./\")\r\n await installDependcies(true, manager)\r\n if (!dir.includes(\"tsconfig.json\")) await spawnAsync(\"npx tsc --init\")\r\n await spawnAsync(\"npx prisma init --datasource-provider sqlite\")\r\n consola.success(\"添加 Prisma 成功\")\r\n } catch (error) {\r\n consola.fail(\"添加 Prisma 失败\")\r\n }\r\n}\r\n\r\nexport async function getPackageManager(): Promise<PackageManager> {\r\n const dir = await readdir(\"./\")\r\n if (dir.includes(\"yarn.lock\")) return PackageManager.yarn\r\n if (dir.includes(\"package-lock.json\")) return PackageManager.npm\r\n if (dir.includes(\"pnpm-lock.yaml\")) return PackageManager.pnpm\r\n if (dir.includes(\"bun.lockb\")) return PackageManager.bun\r\n const { default: inquirer } = await import(\"inquirer\")\r\n const { manager } = await inquirer.prompt({\r\n type: \"list\",\r\n name: \"manager\",\r\n message: \"请选择包管理器\",\r\n choices: [\"yarn\", \"npm\", \"pnpm\", \"bun\"]\r\n })\r\n return manager as PackageManager\r\n}\r\n\r\nexport async function isCommandExisted(command: string): Promise<boolean> {\r\n return new Promise<boolean>(resolve => {\r\n exec(`command ${command}`, err => {\r\n resolve(!err)\r\n })\r\n })\r\n}\r\n"],
5
+ "mappings": "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",
6
+ "names": ["consola", "path", "depth", "Target", "Module", "ModuleResolution", "t", "m", "mr", "cwd", "fetch", "YAML", "architecture", "archiver"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zixulu",
3
- "version": "1.26.1",
3
+ "version": "1.26.3",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "bin": {
package/src/index.ts CHANGED
@@ -697,7 +697,7 @@ program.command("init").action(async () => {
697
697
  const { modules } = await inquirer.prompt({
698
698
  type: "checkbox",
699
699
  name: "modules",
700
- message: "请选择",
700
+ message: "请选择要添加的模块",
701
701
  choices,
702
702
  default: choices
703
703
  })
@@ -711,7 +711,7 @@ program.command("init").action(async () => {
711
711
  await addPrettier()
712
712
  let installed = false
713
713
  if (modules.includes("prisma")) {
714
- await addPrisma()
714
+ await addPrisma(manager)
715
715
  installed = true
716
716
  }
717
717
  if (!installed) await installDependcies(true, manager)
@@ -6,23 +6,19 @@ import { mkdir, readFile, readdir, rename, rm, stat, writeFile } from "fs/promis
6
6
  import { HttpsProxyAgent } from "https-proxy-agent"
7
7
  import * as JSON5 from "json5"
8
8
  import { type Headers as NodeFetchHeaders } from "node-fetch"
9
- import { ParsedPath, isAbsolute, join, parse } from "path"
9
+ import { ParsedPath, join, parse } from "path"
10
10
  import { Config } from "prettier"
11
11
  import { cwd, exit } from "process"
12
12
  import { Readable } from "stream"
13
13
  import YAML from "yaml"
14
14
  import { PackageManager, Software } from "../constant"
15
15
 
16
- function getAbsolutePath(path: string) {
17
- return isAbsolute(path) ? path : join(cwd(), path)
18
- }
19
-
20
16
  export function getPackageJsonPath(path?: string) {
21
- return join(getAbsolutePath(path ?? cwd()), "package.json")
17
+ return join(path ?? cwd(), "package.json")
22
18
  }
23
19
 
24
20
  export function getTsConfigJsonPath(path?: string) {
25
- return join(getAbsolutePath(path ?? cwd()), "tsconfig.json")
21
+ return join(path ?? cwd(), "tsconfig.json")
26
22
  }
27
23
 
28
24
  /** 获取包的最新版本 */
@@ -285,12 +281,15 @@ export async function vite() {
285
281
  export async function addTailwindConfig() {
286
282
  try {
287
283
  await writeFile(
288
- getAbsolutePath("tailwind.config.js"),
284
+ "tailwind.config.js",
289
285
  `/** @type {import('tailwindcss').Config} */
290
286
  export default {
291
287
  content: [
292
288
  "./index.html",
289
+ "./public/index.html",
293
290
  "./src/**/*.{js,ts,jsx,tsx}",
291
+ "./app/**/*.{js,ts,jsx,tsx}",
292
+ "./components/**/*.{js,ts,jsx,tsx}",
294
293
  ],
295
294
  theme: {
296
295
  extend: {},
@@ -312,7 +311,7 @@ export async function addPostCSSConfig() {
312
311
  const packageJson = await readPackageJson()
313
312
  const autoprefixer = Object.keys(packageJson.dependencies).includes("autoprefixer") || Object.keys(packageJson.devDependencies).includes("autoprefixer")
314
313
  await writeFile(
315
- getAbsolutePath("postcss.config.js"),
314
+ "postcss.config.cjs",
316
315
  `module.exports = {
317
316
  plugins: {
318
317
  tailwindcss: {}${
@@ -332,6 +331,36 @@ export async function addPostCSSConfig() {
332
331
  }
333
332
  }
334
333
 
334
+ async function getEntryCssPath(path: string): Promise<string> {
335
+ const dir = await readdir(path)
336
+ if (dir.includes("app")) {
337
+ const stats = await stat(join(path, "app"))
338
+ if (stats.isDirectory()) return getEntryCssPath(join(path, "app"))
339
+ }
340
+ if (dir.includes("src")) {
341
+ const stats = await stat(join(path, "src"))
342
+ if (stats.isDirectory()) return getEntryCssPath(join(path, "src"))
343
+ }
344
+ return path
345
+ }
346
+
347
+ async function createEntryCss() {
348
+ const path = await getEntryCssPath("./")
349
+ const dir = await readdir(path)
350
+ let hasIndex = false
351
+ let hasApp = false
352
+ for (const item of dir) {
353
+ const parsedPath = parse(item)
354
+ if (!(parsedPath.ext === "ts" || parsedPath.ext === "tsx" || parsedPath.ext === "js" || parsedPath.ext === "jsx")) continue
355
+ if (parsedPath.name.toLowerCase() === "index" || parsedPath.name.toLowerCase() === "main") hasIndex = true
356
+ if (parsedPath.name.toLowerCase() === "app") hasApp = true
357
+ if (hasIndex && hasApp) break
358
+ }
359
+ const cssPath = hasIndex || !hasApp ? join(path, "index.css") : join(path, "app.css")
360
+ await writeFile(cssPath, "")
361
+ return cssPath
362
+ }
363
+
335
364
  /** 添加 tailwind 至 index.css 成功 */
336
365
  export async function addTailwindToCSS() {
337
366
  try {
@@ -340,8 +369,8 @@ export async function addTailwindToCSS() {
340
369
  count: 1,
341
370
  exclude: (path, stats) => path.base === "node_modules" && stats.isDirectory()
342
371
  })
343
- if (files.length === 0) await writeFile("index.css", "")
344
- const file = files[0] || "index.css"
372
+ if (files.length === 0) files.push(await createEntryCss())
373
+ const file = files[0]
345
374
  const { base } = parse(file)
346
375
  const css = await readFile(file, "utf-8")
347
376
  if (css.includes("@tailwind")) {
@@ -396,7 +425,7 @@ export async function addPrettier() {
396
425
  try {
397
426
  const packageJson = await readPackageJson()
398
427
  const tailwind = Object.keys(packageJson.dependencies).includes("tailwindcss") || Object.keys(packageJson.devDependencies).includes("tailwindcss")
399
- await writeFile(getAbsolutePath("./prettier.config.cjs"), tailwind ? prettierConfigTextWithTailwind : prettierConfigText)
428
+ await writeFile("./prettier.config.cjs", tailwind ? prettierConfigTextWithTailwind : prettierConfigText)
400
429
  await addDevDependencies("prettier")
401
430
  await addDevDependencies("prettier-plugin-tailwindcss")
402
431
  consola.success("添加 prettier 配置成功")
@@ -425,9 +454,9 @@ export async function addTailwind() {
425
454
 
426
455
  export async function removeComment(path: string) {
427
456
  try {
428
- const text = await readFile(getAbsolutePath(path), "utf-8")
457
+ const text = await readFile(path, "utf-8")
429
458
  const newText = text.replace(/^ *?\/\/.*?$/gm, "")
430
- await writeFile(getAbsolutePath(path), newText, "utf-8")
459
+ await writeFile(path, newText, "utf-8")
431
460
  consola.success("删除注释成功")
432
461
  } catch (error) {
433
462
  consola.fail("删除注释失败")
@@ -645,7 +674,7 @@ export default defineConfig({
645
674
  `
646
675
 
647
676
  export async function writeRsbuildConfig() {
648
- await writeFile(getAbsolutePath("rsbuild.config.ts"), rsbuildConfig, "utf-8")
677
+ await writeFile("rsbuild.config.ts", rsbuildConfig, "utf-8")
649
678
  }
650
679
 
651
680
  export const indexHtml = `<!doctype html>
@@ -664,19 +693,15 @@ export const indexHtml = `<!doctype html>
664
693
  `
665
694
 
666
695
  export async function createIndexHtml() {
667
- try {
668
- await writeFile(getAbsolutePath("public/index.html"), indexHtml, "utf-8")
669
- consola.success("创建 index.html 成功")
670
- } catch (error) {
671
- await mkdir(getAbsolutePath("public"))
672
- try {
673
- await writeFile(getAbsolutePath("public/index.html"), indexHtml, "utf-8")
674
- consola.success("创建 index.html 成功")
675
- } catch (error) {
676
- consola.fail("创建 index.html 失败")
677
- exit()
678
- }
696
+ const dir = await readdir("./")
697
+ let hasPublic = false
698
+ if (dir.includes("public")) {
699
+ const stats = await stat("public")
700
+ if (stats.isDirectory()) hasPublic = true
679
701
  }
702
+ if (!hasPublic) await mkdir("public", { recursive: true })
703
+ await writeFile("public/index.html", indexHtml, "utf-8")
704
+ consola.success("创建 index.html 成功")
680
705
  }
681
706
 
682
707
  export const addedRules = ["package-lock.json", "yarn.lock", "node_modules", "dist", "build", "pnpm-lock.yaml", "yarn-error.log", "test.js", "test.mjs", "test.ts"]
@@ -1130,7 +1155,7 @@ export default AntdRegistry
1130
1155
  }
1131
1156
  }
1132
1157
 
1133
- export async function addPrisma() {
1158
+ export async function addPrisma(manager?: PackageManager) {
1134
1159
  try {
1135
1160
  await addDependencies("@prisma/client")
1136
1161
  await addDevDependencies("prisma")
@@ -1138,7 +1163,7 @@ export async function addPrisma() {
1138
1163
  await addDevDependencies("@types/node")
1139
1164
  await addDevDependencies("typescript")
1140
1165
  const dir = await readdir("./")
1141
- await installDependcies(true)
1166
+ await installDependcies(true, manager)
1142
1167
  if (!dir.includes("tsconfig.json")) await spawnAsync("npx tsc --init")
1143
1168
  await spawnAsync("npx prisma init --datasource-provider sqlite")
1144
1169
  consola.success("添加 Prisma 成功")