zixulu 1.30.1 → 1.30.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -330,9 +330,9 @@ export default {
330
330
  }
331
331
  async function addPostCSSConfig() {
332
332
  try {
333
- await (0, import_promises.rm)("postcss.config.js", { recursive: true });
334
- await (0, import_promises.rm)("postcss.config.mjs", { recursive: true });
335
- await (0, import_promises.rm)("postcss.config.cjs", { recursive: true });
333
+ await (0, import_promises.rm)("postcss.config.js", { force: true });
334
+ await (0, import_promises.rm)("postcss.config.mjs", { force: true });
335
+ await (0, import_promises.rm)("postcss.config.cjs", { force: true });
336
336
  await (0, import_promises.writeFile)(
337
337
  "postcss.config.mjs",
338
338
  `/** @type {import("postcss-load-config").Config} */
@@ -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, 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 { CommitType, CommitTypeMap, 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/** 添加 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 await rm(\"postcss.config.js\", { recursive: true })\r\n await rm(\"postcss.config.mjs\", { recursive: true })\r\n await rm(\"postcss.config.cjs\", { recursive: true })\r\n await writeFile(\r\n \"postcss.config.mjs\",\r\n `/** @type {import(\"postcss-load-config\").Config} */\r\nconst config = {\r\n plugins: {\r\n tailwindcss: {},\r\n autoprefixer: {},\r\n }\r\n}\r\n\r\nexport default config \r\n`,\r\n \"utf-8\"\r\n )\r\n consola.success(\"添加 postcss.config.mjs 配置成功\")\r\n } catch (error) {\r\n consola.fail(\"添加 postcss.config.mjs 配置失败\")\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\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})\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 type CreateIndexHtmlConfig = {\r\n title: string\r\n description: string\r\n entryId: string\r\n}\r\n\r\nexport async function createIndexHtml(config: CreateIndexHtmlConfig) {\r\n const { title, description, entryId } = config\r\n 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=\"${description}\" />\r\n <title>${title}</title>\r\n </head>\r\n <body>\r\n <div id=\"${entryId}\"></div>\r\n </body>\r\n </html>\r\n `\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\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 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(`powershell -command command ${command}`, err => {\r\n resolve(!err)\r\n })\r\n })\r\n}\r\n\r\nexport async function ifContinue() {\r\n const { default: inquirer } = await import(\"inquirer\")\r\n const { continue: c } = await inquirer.prompt({\r\n type: \"confirm\",\r\n name: \"continue\",\r\n message: \"是否继续\"\r\n })\r\n if (!c) exit()\r\n}\r\n\r\nexport async function isRepo() {\r\n try {\r\n await execAsync(\"git status\")\r\n return true\r\n } catch (error) {\r\n return false\r\n }\r\n}\r\n\r\nexport async function backupFirst(forceRepo = false) {\r\n if (!(await isRepo())) {\r\n if (forceRepo) {\r\n consola.error(\"git 不可用\")\r\n exit()\r\n }\r\n consola.warn(\"请先备份代码\")\r\n await ifContinue()\r\n return\r\n }\r\n const status = await execAsync(\"git status\")\r\n if (!status.includes(\"nothing to commit, working tree clean\")) {\r\n consola.error(\"请先提交代码\")\r\n exit()\r\n }\r\n}\r\n\r\nexport async function addGitCommit(message: string) {\r\n consola.start(\"提交代码\")\r\n await execAsync(\"git add .\")\r\n await execAsync(`git commit -m \"${message}\"`)\r\n}\r\n\r\nexport function actionWithBackup<T extends (...args: any[]) => Promise<string>>(action: T, message?: string): (...args: Parameters<T>) => Promise<void>\r\nexport function actionWithBackup<T extends (...args: any[]) => Promise<void>>(action: T, message: string): (...args: Parameters<T>) => Promise<void>\r\nexport function actionWithBackup(action: (...args: any[]) => Promise<string | void>, message?: string) {\r\n return async (...args: any[]) => {\r\n await backupFirst()\r\n const msg = await action(...args)\r\n if (!(await isRepo())) return\r\n const { default: inquirer } = await import(\"inquirer\")\r\n const { commit } = await inquirer.prompt({\r\n type: \"confirm\",\r\n name: \"commit\",\r\n message: \"是否自动提交代码\",\r\n default: true\r\n })\r\n if (!commit) return\r\n let commitMessage: string\r\n if (typeof message === \"string\") commitMessage = message\r\n else if (typeof msg === \"string\") commitMessage = msg\r\n else {\r\n consola.warn(\"请提供提交信息\")\r\n exit()\r\n }\r\n await addGitCommit(commitMessage)\r\n }\r\n}\r\n\r\nexport function getCommitMessage(type: CommitType, message: string) {\r\n return `${CommitTypeMap[type]}${message}`\r\n}\r\n"],
5
- "mappings": "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",
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 { CommitType, CommitTypeMap, 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/** 添加 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 await rm(\"postcss.config.js\", { force: true })\r\n await rm(\"postcss.config.mjs\", { force: true })\r\n await rm(\"postcss.config.cjs\", { force: true })\r\n await writeFile(\r\n \"postcss.config.mjs\",\r\n `/** @type {import(\"postcss-load-config\").Config} */\r\nconst config = {\r\n plugins: {\r\n tailwindcss: {},\r\n autoprefixer: {},\r\n }\r\n}\r\n\r\nexport default config \r\n`,\r\n \"utf-8\"\r\n )\r\n consola.success(\"添加 postcss.config.mjs 配置成功\")\r\n } catch (error) {\r\n consola.fail(\"添加 postcss.config.mjs 配置失败\")\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\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})\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 type CreateIndexHtmlConfig = {\r\n title: string\r\n description: string\r\n entryId: string\r\n}\r\n\r\nexport async function createIndexHtml(config: CreateIndexHtmlConfig) {\r\n const { title, description, entryId } = config\r\n 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=\"${description}\" />\r\n <title>${title}</title>\r\n </head>\r\n <body>\r\n <div id=\"${entryId}\"></div>\r\n </body>\r\n </html>\r\n `\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\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 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(`powershell -command command ${command}`, err => {\r\n resolve(!err)\r\n })\r\n })\r\n}\r\n\r\nexport async function ifContinue() {\r\n const { default: inquirer } = await import(\"inquirer\")\r\n const { continue: c } = await inquirer.prompt({\r\n type: \"confirm\",\r\n name: \"continue\",\r\n message: \"是否继续\"\r\n })\r\n if (!c) exit()\r\n}\r\n\r\nexport async function isRepo() {\r\n try {\r\n await execAsync(\"git status\")\r\n return true\r\n } catch (error) {\r\n return false\r\n }\r\n}\r\n\r\nexport async function backupFirst(forceRepo = false) {\r\n if (!(await isRepo())) {\r\n if (forceRepo) {\r\n consola.error(\"git 不可用\")\r\n exit()\r\n }\r\n consola.warn(\"请先备份代码\")\r\n await ifContinue()\r\n return\r\n }\r\n const status = await execAsync(\"git status\")\r\n if (!status.includes(\"nothing to commit, working tree clean\")) {\r\n consola.error(\"请先提交代码\")\r\n exit()\r\n }\r\n}\r\n\r\nexport async function addGitCommit(message: string) {\r\n consola.start(\"提交代码\")\r\n await execAsync(\"git add .\")\r\n await execAsync(`git commit -m \"${message}\"`)\r\n}\r\n\r\nexport function actionWithBackup<T extends (...args: any[]) => Promise<string>>(action: T, message?: string): (...args: Parameters<T>) => Promise<void>\r\nexport function actionWithBackup<T extends (...args: any[]) => Promise<void>>(action: T, message: string): (...args: Parameters<T>) => Promise<void>\r\nexport function actionWithBackup(action: (...args: any[]) => Promise<string | void>, message?: string) {\r\n return async (...args: any[]) => {\r\n await backupFirst()\r\n const msg = await action(...args)\r\n if (!(await isRepo())) return\r\n const { default: inquirer } = await import(\"inquirer\")\r\n const { commit } = await inquirer.prompt({\r\n type: \"confirm\",\r\n name: \"commit\",\r\n message: \"是否自动提交代码\",\r\n default: true\r\n })\r\n if (!commit) return\r\n let commitMessage: string\r\n if (typeof message === \"string\") commitMessage = message\r\n else if (typeof msg === \"string\") commitMessage = msg\r\n else {\r\n consola.warn(\"请提供提交信息\")\r\n exit()\r\n }\r\n await addGitCommit(commitMessage)\r\n }\r\n}\r\n\r\nexport function getCommitMessage(type: CommitType, message: string) {\r\n return `${CommitTypeMap[type]}${message}`\r\n}\r\n"],
5
+ "mappings": "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",
6
6
  "names": ["consola", "path", "depth", "Target", "Module", "ModuleResolution", "t", "m", "mr", "cwd", "fetch", "YAML", "architecture", "archiver"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zixulu",
3
- "version": "1.30.1",
3
+ "version": "1.30.2",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "bin": {
@@ -257,9 +257,9 @@ export default {
257
257
  /** 添加 postcss.config.js 配置 */
258
258
  export async function addPostCSSConfig() {
259
259
  try {
260
- await rm("postcss.config.js", { recursive: true })
261
- await rm("postcss.config.mjs", { recursive: true })
262
- await rm("postcss.config.cjs", { recursive: true })
260
+ await rm("postcss.config.js", { force: true })
261
+ await rm("postcss.config.mjs", { force: true })
262
+ await rm("postcss.config.cjs", { force: true })
263
263
  await writeFile(
264
264
  "postcss.config.mjs",
265
265
  `/** @type {import("postcss-load-config").Config} */