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 +2 -2
- package/dist/index.js.map +2 -2
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.js +59 -27
- package/dist/utils/index.js.map +3 -3
- package/package.json +1 -1
- package/src/index.ts +2 -2
- package/src/utils/index.ts +54 -29
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": "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",
|
|
4
|
+
"sourcesContent": ["#!/usr/bin/env node\r\n\r\nimport { exec } from \"child_process\"\r\nimport { Argument, Command } from \"commander\"\r\nimport consola from \"consola\"\r\nimport { mkdir, readdir, readFile, rename, rm, writeFile } from \"fs/promises\"\r\nimport { join, resolve } from \"path\"\r\nimport { PackageManager, Registry, Software } from \"./constant\"\r\nimport { addAntd, addDependencies, addDevDependencies, addGitignore, addPostCSSConfig, addPrettier, addPrisma, addTailwind, addTailwindConfig, addTailwindToCSS, createIndexHtml, downloadVscodeExts, execAsync, getFiles, getPackageManager, getPackageUpgradeVersion, getPidInfoFromPort, getProcessInfoFromPid, getTypeInGenerics, getVersionFromRequiredVersion, installDependcies, 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
|
}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -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>;
|
package/dist/utils/index.js
CHANGED
|
@@ -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)(
|
|
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)(
|
|
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
|
-
|
|
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
|
-
|
|
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 (
|
|
412
|
-
const file = files[0]
|
|
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)(
|
|
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)(
|
|
522
|
+
const text = await (0, import_promises.readFile)(path, "utf-8");
|
|
489
523
|
const newText = text.replace(/^ *?\/\/.*?$/gm, "");
|
|
490
|
-
await (0, import_promises.writeFile)(
|
|
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)(
|
|
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
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
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");
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/utils/index.ts"],
|
|
4
|
-
"sourcesContent": ["import 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", "
|
|
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
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)
|
package/src/utils/index.ts
CHANGED
|
@@ -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,
|
|
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(
|
|
17
|
+
return join(path ?? cwd(), "package.json")
|
|
22
18
|
}
|
|
23
19
|
|
|
24
20
|
export function getTsConfigJsonPath(path?: string) {
|
|
25
|
-
return join(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
344
|
-
const file = files[0]
|
|
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(
|
|
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(
|
|
457
|
+
const text = await readFile(path, "utf-8")
|
|
429
458
|
const newText = text.replace(/^ *?\/\/.*?$/gm, "")
|
|
430
|
-
await writeFile(
|
|
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(
|
|
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
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
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 成功")
|