zixulu 1.34.0 → 1.34.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +2 -2
- package/dist/utils/rollup.js +11 -99
- package/dist/utils/rollup.js.map +2 -2
- package/dist/utils/setFatherConfig.js +18 -15
- package/dist/utils/setFatherConfig.js.map +2 -2
- package/package.json +1 -1
- package/src/utils/index.ts +1 -0
- package/src/utils/rollup.ts +9 -99
- package/src/utils/setFatherConfig.ts +21 -17
package/dist/utils/index.js
CHANGED
|
@@ -586,6 +586,8 @@ async function downloadFromWinget({ name, id, dir, architecture = "x64" }) {
|
|
|
586
586
|
const path = id.replace(/\./g, "/");
|
|
587
587
|
const response = await fetch2(`https://api.github.com/repos/microsoft/winget-pkgs/contents/manifests/${firstLetter}/${path}`, { agent });
|
|
588
588
|
const data = await response.json();
|
|
589
|
+
if (!Array.isArray(data))
|
|
590
|
+
throw new Error(data.message);
|
|
589
591
|
const reg2 = /^\d+(\.\d+?)*$/;
|
|
590
592
|
const stables = data.filter((item) => reg2.test(item.name));
|
|
591
593
|
stables.sort((a, b) => {
|
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 { CommitType, CommitTypeMap, PackageManager, Software } from \"@constant/index\"\r\nimport archiver from \"archiver\"\r\nimport { exec, spawn } from \"child_process\"\r\nimport consola from \"consola\"\r\nimport { Stats, createWriteStream, existsSync, readFileSync } from \"fs\"\r\nimport { mkdir, readFile, readdir, rename, rm, stat, writeFile } from \"fs/promises\"\r\nimport { HttpsProxyAgent } from \"https-proxy-agent\"\r\nimport { type Headers as NodeFetchHeaders } from \"node-fetch\"\r\nimport { homedir } from \"os\"\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 { hasChangeNoCommit } from \"./hasChangeNoCommit\"\r\n\r\nexport function getPackageJsonPath(path?: string) {\r\n return join(path ?? cwd(), \"package.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/** 写入依赖 */\r\nexport async function addDependencies(...packages: string[]): Promise<void> {\r\n try {\r\n const packageJson = await readPackageJson()\r\n packageJson.dependencies ??= {}\r\n for (const name of packages) {\r\n packageJson.dependencies[name] ??= `^${await getPackageLatestVersion(name)}`\r\n consola.success(`添加 ${name} 至依赖成功`)\r\n }\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 await writePackageJson(packageJson)\r\n } catch (error) {\r\n consola.error(error)\r\n exit()\r\n }\r\n}\r\n\r\n/** 写入开发依赖 */\r\nexport async function addDevDependencies(...packages: string[]): Promise<void> {\r\n try {\r\n const packageJson = await readPackageJson()\r\n packageJson.devDependencies ??= {}\r\n for (const name of packages) {\r\n packageJson.devDependencies[name] ??= `^${await getPackageLatestVersion(name)}`\r\n consola.success(`添加 ${name} 至开发依赖成功`)\r\n }\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 await writePackageJson(packageJson)\r\n } catch (error) {\r\n consola.error(error)\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.ts\",\r\n `import type { Config } from \"tailwindcss\"\r\nconst config: Config = {\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\nexport default config\r\n`,\r\n \"utf-8\"\r\n )\r\n consola.success(\"添加 tailwind.config.ts 配置成功\")\r\n } catch (error) {\r\n consola.fail(\"添加 tailwind.config.ts 配置失败\")\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 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 addedRules = [\"package-lock.json\", \"yarn.lock\", \"node_modules\", \"dist\", \"build\", \"pnpm-lock.yaml\", \"yarn-error.log\", \"test.js\", \"test.mjs\", \"test.ts\", \"test\"]\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 getVscodeExtInfo(ext: string): Promise<VscodeExt> {\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 const url = `https://marketplace.visualstudio.com/_apis/public/gallery/publishers/${author}/vsextensions/${name}/${version}/vspackage`\r\n return { id: ext, name: displayName, version, url }\r\n // await download(url, dir, `${ext}-${version}.vsix`)\r\n}\r\n\r\nexport interface VscodeExt {\r\n id: string\r\n name: string\r\n version: string\r\n url: string\r\n}\r\n\r\nexport async function downloadVscodeExts(dir: string) {\r\n await mkdir(dir, { recursive: true })\r\n const { default: inquirer } = await import(\"inquirer\")\r\n consola.start(\"正在获取 VS Code 扩展列表\")\r\n const extList = await execAsync(\"code --list-extensions\")\r\n const exts = await Promise.all(\r\n extList\r\n .split(/[\\n\\r]/)\r\n .filter(Boolean)\r\n .map(ext => getVscodeExtInfo(ext))\r\n )\r\n const setting = await getSetting()\r\n const vscodeExts = setting?.vscodeExts as string[] | undefined\r\n const exts2 = await inquirer.prompt({\r\n type: \"checkbox\",\r\n name: \"exts\",\r\n message: \"选择需要下载的扩展\",\r\n choices: exts.map(ext => ({ name: ext.name, value: ext.id })),\r\n default: vscodeExts?.filter(ext => exts.some(item => item.id === ext)) || exts.map(ext => ext.id)\r\n })\r\n setting.vscodeExts = exts2.exts\r\n await setSetting(setting)\r\n for (const ext of exts) {\r\n if (!exts2.exts.includes(ext.id)) continue\r\n consola.start(`正在下载 ${ext.name}`)\r\n await retry(() => download(ext.url, dir, `${ext.id}-${ext.version}.vsix`), 2)\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 writeSyncVscodeScript(dir: string) {\r\n const script = `// @ts-check\r\nimport { spawn } from \"child_process\"\r\nimport { readdir, copyFile, rm } from \"fs/promises\"\r\nimport { homedir } from \"os\"\r\nimport { join } from \"path\"\r\n\r\n/** \r\n * @param {string} command\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(0)\r\n })\r\n })\r\n}\r\n\r\nasync function main() {\r\n const dir = await readdir(\"./extensions\")\r\n for (const ext of dir) {\r\n await spawnAsync(\\`code --install-extension \"./extensions/\\${ext}\"\\`)\r\n }\r\n const userDir = homedir()\r\n const setting = join(userDir, \"AppData/Roaming/Code/User/settings.json\")\r\n await rm(setting, { force: true })\r\n await copyFile(\"./settings.json\", setting)\r\n const snippetTarget = join(userDir, \"AppData/Roaming/Code/User/snippets\")\r\n const dir2 = await readdir(\"./snippets\")\r\n for (const file of dir2) {\r\n await rm(join(snippetTarget, file), { force: true })\r\n await copyFile(join(\"./snippets\", file), join(snippetTarget, file))\r\n }\r\n}\r\n\r\nmain()`\r\n await writeFile(join(dir, \"syncVscode.mjs\"), 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(message = \"是否继续\"): Promise<boolean> {\r\n const { default: inquirer } = await import(\"inquirer\")\r\n const { continue: cont } = await inquirer.prompt({\r\n type: \"confirm\",\r\n name: \"continue\",\r\n message\r\n })\r\n return cont\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\n/**\r\n * @param [forceRepo=false] 是否强制认为是 git 目录\r\n * @returns 如果是 git 目录且检测到未提交的更改,选择继续,则返回 true,否则返回 undefined\r\n */\r\nexport async function backupFirst(forceRepo = false): Promise<true | void> {\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 const cont = await ifContinue()\r\n if (!cont) exit()\r\n return\r\n }\r\n if (await hasChangeNoCommit()) {\r\n const { default: inquirer } = await import(\"inquirer\")\r\n consola.warn(\"强烈建议使用前提交代码\")\r\n const cont = await ifContinue()\r\n if (!cont) exit()\r\n return true\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 const skip = await backupFirst()\r\n const msg = await action(...args)\r\n if (!(await isRepo()) || skip || !(await hasChangeNoCommit())) 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\r\nexport async function getSetting() {\r\n const userDir = homedir()\r\n const settingPath = join(userDir, \".zixulu.json\")\r\n if (existsSync(settingPath)) {\r\n const setting = JSON.parse(await readFile(settingPath, \"utf-8\"))\r\n return setting\r\n }\r\n return {}\r\n}\r\n\r\nexport async function setSetting(setting: Record<string, any>) {\r\n const userDir = homedir()\r\n const settingPath = join(userDir, \".zixulu.json\")\r\n await writeFile(settingPath, JSON.stringify(setting, undefined, 4), \"utf-8\")\r\n}\r\n\r\nexport async function retry<T>(callback: () => Promise<T>, times = 1) {\r\n try {\r\n return await callback()\r\n } catch (error) {\r\n if (times === 0) throw error\r\n return await retry(callback, times - 1)\r\n }\r\n}\r\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { CommitType, CommitTypeMap, PackageManager, Software } from \"@constant/index\"\r\nimport archiver from \"archiver\"\r\nimport { exec, spawn } from \"child_process\"\r\nimport consola from \"consola\"\r\nimport { Stats, createWriteStream, existsSync, readFileSync } from \"fs\"\r\nimport { mkdir, readFile, readdir, rename, rm, stat, writeFile } from \"fs/promises\"\r\nimport { HttpsProxyAgent } from \"https-proxy-agent\"\r\nimport { type Headers as NodeFetchHeaders } from \"node-fetch\"\r\nimport { homedir } from \"os\"\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 { hasChangeNoCommit } from \"./hasChangeNoCommit\"\r\n\r\nexport function getPackageJsonPath(path?: string) {\r\n return join(path ?? cwd(), \"package.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/** 写入依赖 */\r\nexport async function addDependencies(...packages: string[]): Promise<void> {\r\n try {\r\n const packageJson = await readPackageJson()\r\n packageJson.dependencies ??= {}\r\n for (const name of packages) {\r\n packageJson.dependencies[name] ??= `^${await getPackageLatestVersion(name)}`\r\n consola.success(`添加 ${name} 至依赖成功`)\r\n }\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 await writePackageJson(packageJson)\r\n } catch (error) {\r\n consola.error(error)\r\n exit()\r\n }\r\n}\r\n\r\n/** 写入开发依赖 */\r\nexport async function addDevDependencies(...packages: string[]): Promise<void> {\r\n try {\r\n const packageJson = await readPackageJson()\r\n packageJson.devDependencies ??= {}\r\n for (const name of packages) {\r\n packageJson.devDependencies[name] ??= `^${await getPackageLatestVersion(name)}`\r\n consola.success(`添加 ${name} 至开发依赖成功`)\r\n }\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 await writePackageJson(packageJson)\r\n } catch (error) {\r\n consola.error(error)\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.ts\",\r\n `import type { Config } from \"tailwindcss\"\r\nconst config: Config = {\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\nexport default config\r\n`,\r\n \"utf-8\"\r\n )\r\n consola.success(\"添加 tailwind.config.ts 配置成功\")\r\n } catch (error) {\r\n consola.fail(\"添加 tailwind.config.ts 配置失败\")\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 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 addedRules = [\"package-lock.json\", \"yarn.lock\", \"node_modules\", \"dist\", \"build\", \"pnpm-lock.yaml\", \"yarn-error.log\", \"test.js\", \"test.mjs\", \"test.ts\", \"test\"]\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 if (!Array.isArray(data)) throw new Error((data as any).message)\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 getVscodeExtInfo(ext: string): Promise<VscodeExt> {\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 const url = `https://marketplace.visualstudio.com/_apis/public/gallery/publishers/${author}/vsextensions/${name}/${version}/vspackage`\r\n return { id: ext, name: displayName, version, url }\r\n // await download(url, dir, `${ext}-${version}.vsix`)\r\n}\r\n\r\nexport interface VscodeExt {\r\n id: string\r\n name: string\r\n version: string\r\n url: string\r\n}\r\n\r\nexport async function downloadVscodeExts(dir: string) {\r\n await mkdir(dir, { recursive: true })\r\n const { default: inquirer } = await import(\"inquirer\")\r\n consola.start(\"正在获取 VS Code 扩展列表\")\r\n const extList = await execAsync(\"code --list-extensions\")\r\n const exts = await Promise.all(\r\n extList\r\n .split(/[\\n\\r]/)\r\n .filter(Boolean)\r\n .map(ext => getVscodeExtInfo(ext))\r\n )\r\n const setting = await getSetting()\r\n const vscodeExts = setting?.vscodeExts as string[] | undefined\r\n const exts2 = await inquirer.prompt({\r\n type: \"checkbox\",\r\n name: \"exts\",\r\n message: \"选择需要下载的扩展\",\r\n choices: exts.map(ext => ({ name: ext.name, value: ext.id })),\r\n default: vscodeExts?.filter(ext => exts.some(item => item.id === ext)) || exts.map(ext => ext.id)\r\n })\r\n setting.vscodeExts = exts2.exts\r\n await setSetting(setting)\r\n for (const ext of exts) {\r\n if (!exts2.exts.includes(ext.id)) continue\r\n consola.start(`正在下载 ${ext.name}`)\r\n await retry(() => download(ext.url, dir, `${ext.id}-${ext.version}.vsix`), 2)\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 writeSyncVscodeScript(dir: string) {\r\n const script = `// @ts-check\r\nimport { spawn } from \"child_process\"\r\nimport { readdir, copyFile, rm } from \"fs/promises\"\r\nimport { homedir } from \"os\"\r\nimport { join } from \"path\"\r\n\r\n/** \r\n * @param {string} command\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(0)\r\n })\r\n })\r\n}\r\n\r\nasync function main() {\r\n const dir = await readdir(\"./extensions\")\r\n for (const ext of dir) {\r\n await spawnAsync(\\`code --install-extension \"./extensions/\\${ext}\"\\`)\r\n }\r\n const userDir = homedir()\r\n const setting = join(userDir, \"AppData/Roaming/Code/User/settings.json\")\r\n await rm(setting, { force: true })\r\n await copyFile(\"./settings.json\", setting)\r\n const snippetTarget = join(userDir, \"AppData/Roaming/Code/User/snippets\")\r\n const dir2 = await readdir(\"./snippets\")\r\n for (const file of dir2) {\r\n await rm(join(snippetTarget, file), { force: true })\r\n await copyFile(join(\"./snippets\", file), join(snippetTarget, file))\r\n }\r\n}\r\n\r\nmain()`\r\n await writeFile(join(dir, \"syncVscode.mjs\"), 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(message = \"是否继续\"): Promise<boolean> {\r\n const { default: inquirer } = await import(\"inquirer\")\r\n const { continue: cont } = await inquirer.prompt({\r\n type: \"confirm\",\r\n name: \"continue\",\r\n message\r\n })\r\n return cont\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\n/**\r\n * @param [forceRepo=false] 是否强制认为是 git 目录\r\n * @returns 如果是 git 目录且检测到未提交的更改,选择继续,则返回 true,否则返回 undefined\r\n */\r\nexport async function backupFirst(forceRepo = false): Promise<true | void> {\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 const cont = await ifContinue()\r\n if (!cont) exit()\r\n return\r\n }\r\n if (await hasChangeNoCommit()) {\r\n const { default: inquirer } = await import(\"inquirer\")\r\n consola.warn(\"强烈建议使用前提交代码\")\r\n const cont = await ifContinue()\r\n if (!cont) exit()\r\n return true\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 const skip = await backupFirst()\r\n const msg = await action(...args)\r\n if (!(await isRepo()) || skip || !(await hasChangeNoCommit())) 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\r\nexport async function getSetting() {\r\n const userDir = homedir()\r\n const settingPath = join(userDir, \".zixulu.json\")\r\n if (existsSync(settingPath)) {\r\n const setting = JSON.parse(await readFile(settingPath, \"utf-8\"))\r\n return setting\r\n }\r\n return {}\r\n}\r\n\r\nexport async function setSetting(setting: Record<string, any>) {\r\n const userDir = homedir()\r\n const settingPath = join(userDir, \".zixulu.json\")\r\n await writeFile(settingPath, JSON.stringify(setting, undefined, 4), \"utf-8\")\r\n}\r\n\r\nexport async function retry<T>(callback: () => Promise<T>, times = 1) {\r\n try {\r\n return await callback()\r\n } catch (error) {\r\n if (times === 0) throw error\r\n return await retry(callback, times - 1)\r\n }\r\n}\r\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["consola", "path", "depth", "cwd", "fetch", "YAML", "architecture", "vscodeExts", "archiver"]
|
|
7
7
|
}
|
package/dist/utils/rollup.js
CHANGED
|
@@ -35,8 +35,8 @@ import { RollupOptions } from "rollup"
|
|
|
35
35
|
const config: RollupOptions = {
|
|
36
36
|
input: "src/index.ts",
|
|
37
37
|
output: {
|
|
38
|
-
file: "dist/index.
|
|
39
|
-
format: "
|
|
38
|
+
file: "dist/index.js",
|
|
39
|
+
format: "cjs"
|
|
40
40
|
},
|
|
41
41
|
plugins: [typescript(), resolve(), commonjs(), json()]
|
|
42
42
|
}
|
|
@@ -45,109 +45,21 @@ export default config
|
|
|
45
45
|
`;
|
|
46
46
|
var tsconfig = `{
|
|
47
47
|
"compilerOptions": {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
// "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
|
|
54
|
-
// "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
|
|
55
|
-
// "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
|
|
56
|
-
/* Language and Environment */
|
|
57
|
-
"target": "ESNext", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
|
|
58
|
-
// "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
|
|
59
|
-
// "jsx": "preserve", /* Specify what JSX code is generated. */
|
|
60
|
-
// "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */
|
|
61
|
-
// "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
|
|
62
|
-
// "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
|
|
63
|
-
// "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
|
|
64
|
-
// "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
|
|
65
|
-
// "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
|
|
66
|
-
// "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
|
|
67
|
-
// "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
|
|
68
|
-
// "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
|
|
69
|
-
/* Modules */
|
|
70
|
-
"module": "ESNext", /* Specify what module code is generated. */
|
|
71
|
-
// "rootDir": "./", /* Specify the root folder within your source files. */
|
|
72
|
-
"moduleResolution": "Bundler", /* Specify how TypeScript looks up a file from a given module specifier. */
|
|
73
|
-
// "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
|
|
74
|
-
// "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
|
|
75
|
-
// "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
|
|
76
|
-
// "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
|
|
77
|
-
// "types": [], /* Specify type package names to be included without being referenced in a source file. */
|
|
78
|
-
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
|
|
79
|
-
// "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
|
|
80
|
-
// "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */
|
|
81
|
-
// "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */
|
|
82
|
-
// "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */
|
|
83
|
-
// "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */
|
|
84
|
-
// "resolveJsonModule": true, /* Enable importing .json files. */
|
|
85
|
-
// "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */
|
|
86
|
-
// "noResolve": true, /* Disallow 'import's, 'require's or '<reference>'s from expanding the number of files TypeScript should add to a project. */
|
|
87
|
-
/* JavaScript Support */
|
|
88
|
-
// "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
|
|
89
|
-
// "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
|
|
90
|
-
// "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
|
|
91
|
-
/* Emit */
|
|
92
|
-
// "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
|
|
93
|
-
// "declarationMap": true, /* Create sourcemaps for d.ts files. */
|
|
94
|
-
// "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
|
|
95
|
-
// "sourceMap": true, /* Create source map files for emitted JavaScript files. */
|
|
96
|
-
// "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
|
|
97
|
-
// "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
|
|
98
|
-
// "outDir": "./", /* Specify an output folder for all emitted files. */
|
|
99
|
-
// "removeComments": true, /* Disable emitting comments. */
|
|
100
|
-
// "noEmit": true, /* Disable emitting files from a compilation. */
|
|
101
|
-
// "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
|
|
102
|
-
// "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
|
|
103
|
-
// "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
|
|
104
|
-
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
|
|
105
|
-
// "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
|
|
106
|
-
// "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
|
|
107
|
-
// "newLine": "crlf", /* Set the newline character for emitting files. */
|
|
108
|
-
// "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
|
|
109
|
-
// "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
|
|
110
|
-
// "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
|
|
111
|
-
// "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
|
|
112
|
-
// "declarationDir": "./", /* Specify the output directory for generated declaration files. */
|
|
113
|
-
/* Interop Constraints */
|
|
114
|
-
// "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
|
|
115
|
-
// "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */
|
|
116
|
-
// "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */
|
|
117
|
-
// "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
|
|
118
|
-
"esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
|
|
119
|
-
// "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
|
|
120
|
-
"forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
|
|
121
|
-
/* Type Checking */
|
|
122
|
-
"strict": true, /* Enable all strict type-checking options. */
|
|
123
|
-
// "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
|
|
124
|
-
// "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
|
|
125
|
-
// "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
|
|
126
|
-
// "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
|
|
127
|
-
// "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
|
|
128
|
-
// "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
|
|
129
|
-
// "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
|
|
130
|
-
// "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
|
|
131
|
-
// "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
|
|
132
|
-
// "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
|
|
133
|
-
// "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
|
|
134
|
-
// "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
|
|
135
|
-
// "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
|
|
136
|
-
// "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
|
|
137
|
-
// "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
|
|
138
|
-
// "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
|
|
139
|
-
// "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
|
|
140
|
-
// "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
|
|
141
|
-
/* Completeness */
|
|
142
|
-
// "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
|
|
143
|
-
"skipLibCheck": true /* Skip type checking all .d.ts files. */
|
|
48
|
+
"target": "ESNext",
|
|
49
|
+
"module": "EsNext",
|
|
50
|
+
"moduleResolution": "Bundler",
|
|
51
|
+
"strict": true,
|
|
52
|
+
"skipLibCheck": true
|
|
144
53
|
}
|
|
145
54
|
}
|
|
146
55
|
`;
|
|
147
56
|
async function rollup() {
|
|
148
57
|
await (0, import__.addDevDependencies)("@rollup/plugin-commonjs", "@rollup/plugin-json", "@rollup/plugin-node-resolve", "@rollup/plugin-typescript", "rollup", "typescript");
|
|
149
58
|
const packageJson = await (0, import__.readPackageJson)();
|
|
150
|
-
packageJson.scripts.build
|
|
59
|
+
if (packageJson.scripts.build)
|
|
60
|
+
packageJson.scripts["build:rollup"] = "rollup -c rollup.config.ts --configPlugin @rollup/plugin-typescript";
|
|
61
|
+
else
|
|
62
|
+
packageJson.scripts.build = "rollup -c rollup.config.ts --configPlugin @rollup/plugin-typescript";
|
|
151
63
|
await (0, import__.writePackageJson)(packageJson);
|
|
152
64
|
await (0, import_promises.writeFile)("rollup.config.ts", rollupConfig, "utf-8");
|
|
153
65
|
if ((0, import_fs.existsSync)("tsconfig.json")) {
|
package/dist/utils/rollup.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/utils/rollup.ts"],
|
|
4
|
-
"sourcesContent": ["import { existsSync } from \"fs\"\r\nimport { writeFile } from \"fs/promises\"\r\nimport { addDevDependencies, installDependcies, readPackageJson, writePackageJson } from \".\"\r\nimport { Module, ModuleResolution, setTsConfig, Target } from \"./setTsConfig\"\r\n\r\nconst rollupConfig = `import commonjs from \"@rollup/plugin-commonjs\"\r\nimport json from \"@rollup/plugin-json\"\r\nimport resolve from \"@rollup/plugin-node-resolve\"\r\nimport typescript from \"@rollup/plugin-typescript\"\r\nimport { RollupOptions } from \"rollup\"\r\n\r\nconst config: RollupOptions = {\r\n input: \"src/index.ts\",\r\n output: {\r\n file: \"dist/index.mjs\",\r\n format: \"esm\"\r\n },\r\n plugins: [typescript(), resolve(), commonjs(), json()]\r\n}\r\n\r\nexport default config\r\n`\r\n\r\nconst tsconfig = `{\r\n \"compilerOptions\": {\r\n /* Visit https://aka.ms/tsconfig to read more about this file */\r\n /* Projects */\r\n // \"incremental\": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */\r\n // \"composite\": true, /* Enable constraints that allow a TypeScript project to be used with project references. */\r\n // \"tsBuildInfoFile\": \"./.tsbuildinfo\", /* Specify the path to .tsbuildinfo incremental compilation file. */\r\n // \"disableSourceOfProjectReferenceRedirect\": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */\r\n // \"disableSolutionSearching\": true, /* Opt a project out of multi-project reference checking when editing. */\r\n // \"disableReferencedProjectLoad\": true, /* Reduce the number of projects loaded automatically by TypeScript. */\r\n /* Language and Environment */\r\n \"target\": \"ESNext\", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */\r\n // \"lib\": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */\r\n // \"jsx\": \"preserve\", /* Specify what JSX code is generated. */\r\n // \"experimentalDecorators\": true, /* Enable experimental support for legacy experimental decorators. */\r\n // \"emitDecoratorMetadata\": true, /* Emit design-type metadata for decorated declarations in source files. */\r\n // \"jsxFactory\": \"\", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */\r\n // \"jsxFragmentFactory\": \"\", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */\r\n // \"jsxImportSource\": \"\", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */\r\n // \"reactNamespace\": \"\", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */\r\n // \"noLib\": true, /* Disable including any library files, including the default lib.d.ts. */\r\n // \"useDefineForClassFields\": true, /* Emit ECMAScript-standard-compliant class fields. */\r\n // \"moduleDetection\": \"auto\", /* Control what method is used to detect module-format JS files. */\r\n /* Modules */\r\n \"module\": \"ESNext\", /* Specify what module code is generated. */\r\n // \"rootDir\": \"./\", /* Specify the root folder within your source files. */\r\n \"moduleResolution\": \"Bundler\", /* Specify how TypeScript looks up a file from a given module specifier. */\r\n // \"baseUrl\": \"./\", /* Specify the base directory to resolve non-relative module names. */\r\n // \"paths\": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */\r\n // \"rootDirs\": [], /* Allow multiple folders to be treated as one when resolving modules. */\r\n // \"typeRoots\": [], /* Specify multiple folders that act like './node_modules/@types'. */\r\n // \"types\": [], /* Specify type package names to be included without being referenced in a source file. */\r\n // \"allowUmdGlobalAccess\": true, /* Allow accessing UMD globals from modules. */\r\n // \"moduleSuffixes\": [], /* List of file name suffixes to search when resolving a module. */\r\n // \"allowImportingTsExtensions\": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */\r\n // \"resolvePackageJsonExports\": true, /* Use the package.json 'exports' field when resolving package imports. */\r\n // \"resolvePackageJsonImports\": true, /* Use the package.json 'imports' field when resolving imports. */\r\n // \"customConditions\": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */\r\n // \"resolveJsonModule\": true, /* Enable importing .json files. */\r\n // \"allowArbitraryExtensions\": true, /* Enable importing files with any extension, provided a declaration file is present. */\r\n // \"noResolve\": true, /* Disallow 'import's, 'require's or '<reference>'s from expanding the number of files TypeScript should add to a project. */\r\n /* JavaScript Support */\r\n // \"allowJs\": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */\r\n // \"checkJs\": true, /* Enable error reporting in type-checked JavaScript files. */\r\n // \"maxNodeModuleJsDepth\": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */\r\n /* Emit */\r\n // \"declaration\": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */\r\n // \"declarationMap\": true, /* Create sourcemaps for d.ts files. */\r\n // \"emitDeclarationOnly\": true, /* Only output d.ts files and not JavaScript files. */\r\n // \"sourceMap\": true, /* Create source map files for emitted JavaScript files. */\r\n // \"inlineSourceMap\": true, /* Include sourcemap files inside the emitted JavaScript. */\r\n // \"outFile\": \"./\", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */\r\n // \"outDir\": \"./\", /* Specify an output folder for all emitted files. */\r\n // \"removeComments\": true, /* Disable emitting comments. */\r\n // \"noEmit\": true, /* Disable emitting files from a compilation. */\r\n // \"importHelpers\": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */\r\n // \"downlevelIteration\": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */\r\n // \"sourceRoot\": \"\", /* Specify the root path for debuggers to find the reference source code. */\r\n // \"mapRoot\": \"\", /* Specify the location where debugger should locate map files instead of generated locations. */\r\n // \"inlineSources\": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */\r\n // \"emitBOM\": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */\r\n // \"newLine\": \"crlf\", /* Set the newline character for emitting files. */\r\n // \"stripInternal\": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */\r\n // \"noEmitHelpers\": true, /* Disable generating custom helper functions like '__extends' in compiled output. */\r\n // \"noEmitOnError\": true, /* Disable emitting files if any type checking errors are reported. */\r\n // \"preserveConstEnums\": true, /* Disable erasing 'const enum' declarations in generated code. */\r\n // \"declarationDir\": \"./\", /* Specify the output directory for generated declaration files. */\r\n /* Interop Constraints */\r\n // \"isolatedModules\": true, /* Ensure that each file can be safely transpiled without relying on other imports. */\r\n // \"verbatimModuleSyntax\": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */\r\n // \"isolatedDeclarations\": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */\r\n // \"allowSyntheticDefaultImports\": true, /* Allow 'import x from y' when a module doesn't have a default export. */\r\n \"esModuleInterop\": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */\r\n // \"preserveSymlinks\": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */\r\n \"forceConsistentCasingInFileNames\": true, /* Ensure that casing is correct in imports. */\r\n /* Type Checking */\r\n \"strict\": true, /* Enable all strict type-checking options. */\r\n // \"noImplicitAny\": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */\r\n // \"strictNullChecks\": true, /* When type checking, take into account 'null' and 'undefined'. */\r\n // \"strictFunctionTypes\": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */\r\n // \"strictBindCallApply\": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */\r\n // \"strictPropertyInitialization\": true, /* Check for class properties that are declared but not set in the constructor. */\r\n // \"noImplicitThis\": true, /* Enable error reporting when 'this' is given the type 'any'. */\r\n // \"useUnknownInCatchVariables\": true, /* Default catch clause variables as 'unknown' instead of 'any'. */\r\n // \"alwaysStrict\": true, /* Ensure 'use strict' is always emitted. */\r\n // \"noUnusedLocals\": true, /* Enable error reporting when local variables aren't read. */\r\n // \"noUnusedParameters\": true, /* Raise an error when a function parameter isn't read. */\r\n // \"exactOptionalPropertyTypes\": true, /* Interpret optional property types as written, rather than adding 'undefined'. */\r\n // \"noImplicitReturns\": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */\r\n // \"noFallthroughCasesInSwitch\": true, /* Enable error reporting for fallthrough cases in switch statements. */\r\n // \"noUncheckedIndexedAccess\": true, /* Add 'undefined' to a type when accessed using an index. */\r\n // \"noImplicitOverride\": true, /* Ensure overriding members in derived classes are marked with an override modifier. */\r\n // \"noPropertyAccessFromIndexSignature\": true, /* Enforces using indexed accessors for keys declared using an indexed type. */\r\n // \"allowUnusedLabels\": true, /* Disable error reporting for unused labels. */\r\n // \"allowUnreachableCode\": true, /* Disable error reporting for unreachable code. */\r\n /* Completeness */\r\n // \"skipDefaultLibCheck\": true, /* Skip type checking .d.ts files that are included with TypeScript. */\r\n \"skipLibCheck\": true /* Skip type checking all .d.ts files. */\r\n }\r\n}\r\n`\r\n\r\nexport async function rollup() {\r\n await addDevDependencies(\"@rollup/plugin-commonjs\", \"@rollup/plugin-json\", \"@rollup/plugin-node-resolve\", \"@rollup/plugin-typescript\", \"rollup\", \"typescript\")\r\n const packageJson = await readPackageJson()\r\n packageJson.scripts.build = \"rollup -c rollup.config.ts --configPlugin @rollup/plugin-typescript\"\r\n await writePackageJson(packageJson)\r\n await writeFile(\"rollup.config.ts\", rollupConfig, \"utf-8\")\r\n if (existsSync(\"tsconfig.json\")) {\r\n await setTsConfig(\"target\", Target.ESNext)\r\n await setTsConfig(\"module\", Module.ESNext)\r\n await setTsConfig(\"moduleResolution\", ModuleResolution.Bundler)\r\n } else {\r\n await writeFile(\"tsconfig.json\", tsconfig, \"utf-8\")\r\n }\r\n await installDependcies()\r\n}\r\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAA2B;AAC3B,sBAA0B;AAC1B,eAAyF;AACzF,yBAA8D;AAE9D,IAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBrB,IAAM,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
4
|
+
"sourcesContent": ["import { existsSync } from \"fs\"\r\nimport { writeFile } from \"fs/promises\"\r\nimport { addDevDependencies, installDependcies, readPackageJson, writePackageJson } from \".\"\r\nimport { Module, ModuleResolution, setTsConfig, Target } from \"./setTsConfig\"\r\n\r\nconst rollupConfig = `import commonjs from \"@rollup/plugin-commonjs\"\r\nimport json from \"@rollup/plugin-json\"\r\nimport resolve from \"@rollup/plugin-node-resolve\"\r\nimport typescript from \"@rollup/plugin-typescript\"\r\nimport { RollupOptions } from \"rollup\"\r\n\r\nconst config: RollupOptions = {\r\n input: \"src/index.ts\",\r\n output: {\r\n file: \"dist/index.js\",\r\n format: \"cjs\"\r\n },\r\n plugins: [typescript(), resolve(), commonjs(), json()]\r\n}\r\n\r\nexport default config\r\n`\r\n\r\nconst tsconfig = `{\r\n \"compilerOptions\": {\r\n \"target\": \"ESNext\",\r\n \"module\": \"EsNext\",\r\n \"moduleResolution\": \"Bundler\",\r\n \"strict\": true,\r\n \"skipLibCheck\": true\r\n }\r\n}\r\n`\r\n\r\nexport async function rollup() {\r\n await addDevDependencies(\"@rollup/plugin-commonjs\", \"@rollup/plugin-json\", \"@rollup/plugin-node-resolve\", \"@rollup/plugin-typescript\", \"rollup\", \"typescript\")\r\n const packageJson = await readPackageJson()\r\n if (packageJson.scripts.build) packageJson.scripts[\"build:rollup\"] = \"rollup -c rollup.config.ts --configPlugin @rollup/plugin-typescript\"\r\n else packageJson.scripts.build = \"rollup -c rollup.config.ts --configPlugin @rollup/plugin-typescript\"\r\n await writePackageJson(packageJson)\r\n await writeFile(\"rollup.config.ts\", rollupConfig, \"utf-8\")\r\n if (existsSync(\"tsconfig.json\")) {\r\n await setTsConfig(\"target\", Target.ESNext)\r\n await setTsConfig(\"module\", Module.ESNext)\r\n await setTsConfig(\"moduleResolution\", ModuleResolution.Bundler)\r\n } else {\r\n await writeFile(\"tsconfig.json\", tsconfig, \"utf-8\")\r\n }\r\n await installDependcies()\r\n}\r\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAA2B;AAC3B,sBAA0B;AAC1B,eAAyF;AACzF,yBAA8D;AAE9D,IAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBrB,IAAM,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWjB,eAAsB,SAAS;AAC3B,YAAM,6BAAmB,2BAA2B,uBAAuB,+BAA+B,6BAA6B,UAAU,YAAY;AAC7J,QAAM,cAAc,UAAM,0BAAgB;AAC1C,MAAI,YAAY,QAAQ;AAAO,gBAAY,QAAQ,cAAc,IAAI;AAAA;AAChE,gBAAY,QAAQ,QAAQ;AACjC,YAAM,2BAAiB,WAAW;AAClC,YAAM,2BAAU,oBAAoB,cAAc,OAAO;AACzD,UAAI,sBAAW,eAAe,GAAG;AAC7B,cAAM,gCAAY,UAAU,0BAAO,MAAM;AACzC,cAAM,gCAAY,UAAU,0BAAO,MAAM;AACzC,cAAM,gCAAY,oBAAoB,oCAAiB,OAAO;AAAA,EAClE,OAAO;AACH,cAAM,2BAAU,iBAAiB,UAAU,OAAO;AAAA,EACtD;AACA,YAAM,4BAAkB;AAC5B;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -32,11 +32,23 @@ __export(setFatherConfig_exports, {
|
|
|
32
32
|
setFatherConfig: () => setFatherConfig
|
|
33
33
|
});
|
|
34
34
|
module.exports = __toCommonJS(setFatherConfig_exports);
|
|
35
|
+
var import_consola = __toESM(require("consola"));
|
|
35
36
|
var import_promises = require("fs/promises");
|
|
36
37
|
var import__ = require(".");
|
|
37
38
|
var import_addGitignore = require("./addGitignore");
|
|
38
|
-
var import_consola = __toESM(require("consola"));
|
|
39
39
|
var import_setTsConfig = require("./setTsConfig");
|
|
40
|
+
var fatherrcCode = `import { defineConfig } from "father"
|
|
41
|
+
|
|
42
|
+
export default defineConfig({
|
|
43
|
+
esm: {},
|
|
44
|
+
cjs: {},
|
|
45
|
+
targets: {
|
|
46
|
+
node: 18,
|
|
47
|
+
chrome: 100
|
|
48
|
+
},
|
|
49
|
+
sourcemap: true
|
|
50
|
+
})
|
|
51
|
+
`;
|
|
40
52
|
async function setFatherConfig() {
|
|
41
53
|
import_consola.default.start("开始设置 father 配置");
|
|
42
54
|
let packageJson = await (0, import__.readPackageJson)();
|
|
@@ -69,30 +81,21 @@ async function setFatherConfig() {
|
|
|
69
81
|
return prev;
|
|
70
82
|
}, {});
|
|
71
83
|
}
|
|
72
|
-
packageJson.scripts ??= {};
|
|
73
|
-
packageJson.scripts.prepublishOnly = "npx zixulu upgrade && father doctor && npm run build";
|
|
74
84
|
delete packageJson.dependencies;
|
|
75
85
|
delete packageJson.devDependencies;
|
|
76
86
|
delete packageJson.peerDependencies;
|
|
77
87
|
packageJson.dependencies = (0, import__.sortArrayOrObject)(dependencies);
|
|
78
88
|
packageJson.devDependencies = (0, import__.sortArrayOrObject)(devDependencies);
|
|
79
89
|
packageJson.peerDependencies = (0, import__.sortArrayOrObject)(peerDependencies);
|
|
80
|
-
const fatherrcCode = `import { defineConfig } from "father"
|
|
81
|
-
|
|
82
|
-
export default defineConfig({
|
|
83
|
-
esm: {},
|
|
84
|
-
cjs: {},
|
|
85
|
-
targets: {
|
|
86
|
-
node: 18,
|
|
87
|
-
chrome: 100
|
|
88
|
-
},
|
|
89
|
-
sourcemap: true
|
|
90
|
-
})
|
|
91
|
-
`;
|
|
92
90
|
await (0, import_addGitignore.addGitignore)();
|
|
93
91
|
await (0, import__.writePackageJson)(packageJson);
|
|
94
92
|
await (0, import_promises.writeFile)(".fatherrc.ts", fatherrcCode);
|
|
95
93
|
await (0, import_setTsConfig.setTsConfig)("target", import_setTsConfig.Target.ESNext);
|
|
94
|
+
await (0, import_setTsConfig.setTsConfig)("module", import_setTsConfig.Module.ESNext);
|
|
95
|
+
await (0, import_setTsConfig.setTsConfig)("moduleResolution", import_setTsConfig.ModuleResolution.Bundler);
|
|
96
|
+
await (0, import_promises.rm)("src/client", { recursive: true, force: true });
|
|
97
|
+
await (0, import_promises.rm)("src/server", { recursive: true, force: true });
|
|
98
|
+
await (0, import_promises.writeFile)("src/index.ts", "");
|
|
96
99
|
import_consola.default.success("设置 father 配置成功");
|
|
97
100
|
}
|
|
98
101
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/utils/setFatherConfig.ts"],
|
|
4
|
-
"sourcesContent": ["import { writeFile } from \"fs/promises\"\r\nimport { readPackageJson, sortArrayOrObject, writePackageJson } from \".\"\r\nimport { addGitignore } from \"./addGitignore\"\r\nimport
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,
|
|
4
|
+
"sourcesContent": ["import consola from \"consola\"\r\nimport { rm, writeFile } from \"fs/promises\"\r\nimport { readPackageJson, sortArrayOrObject, writePackageJson } from \".\"\r\nimport { addGitignore } from \"./addGitignore\"\r\nimport { Module, ModuleResolution, setTsConfig, Target } from \"./setTsConfig\"\r\n\r\nconst 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\r\nexport async function setFatherConfig() {\r\n consola.start(\"开始设置 father 配置\")\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 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 await addGitignore()\r\n await writePackageJson(packageJson)\r\n await writeFile(\".fatherrc.ts\", fatherrcCode)\r\n await setTsConfig(\"target\", Target.ESNext)\r\n await setTsConfig(\"module\", Module.ESNext)\r\n await setTsConfig(\"moduleResolution\", ModuleResolution.Bundler)\r\n await rm(\"src/client\", { recursive: true, force: true })\r\n await rm(\"src/server\", { recursive: true, force: true })\r\n await writeFile(\"src/index.ts\", \"\")\r\n consola.success(\"设置 father 配置成功\")\r\n}\r\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAoB;AACpB,sBAA8B;AAC9B,eAAqE;AACrE,0BAA6B;AAC7B,yBAA8D;AAE9D,IAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAarB,eAAsB,kBAAkB;AACpC,iBAAAA,QAAQ,MAAM,gBAAgB;AAC9B,MAAI,cAAc,UAAM,0BAAgB;AACxC,cAAY,kBAAkB,CAAC;AAC/B,cAAY,cAAc,SAAS;AACnC,cAAY,cAAc,WAAW;AACrC,cAAY,oBAAgB,4BAAkB,YAAY,aAAa;AACvE,cAAY,UAAU,CAAC;AACvB,MAAI,CAAC,YAAY,MAAM,SAAS,KAAK;AAAG,gBAAY,MAAM,KAAK,KAAK;AACpE,cAAY,YAAQ,4BAAkB,YAAY,KAAK;AACvD,QAAM,eAAe,YAAY;AACjC,QAAM,kBAAkB,YAAY;AACpC,QAAM,mBAAmB,YAAY;AACrC,MAAI,YAAY,YAAY,OAAO,CAAC,YAAY,WAAW,IAAI,WAAW,MAAM;AAAG,gBAAY,WAAW,MAAM,OAAO,YAAY,WAAW;AAC9I,cAAY,eAAe,CAAC;AAC5B,cAAY,WAAW,SAAS;AAChC,cAAY,WAAW,QAAQ,kCAAkC,YAAY;AAC7E,MAAI,CAAC,YAAY,OAAO;AACpB,kBAAc,OAAO,QAAQ,WAAW,EAAE,OAAO,CAAC,MAA2B,CAAC,KAAK,KAAK,MAAM;AAC1F,WAAK,GAAG,IAAI;AACZ,UAAI,OAAO,OAAO,aAAa,QAAQ,GAAG;AACtC,YAAI,QAAQ;AAAU,eAAK,QAAQ,MAAM,QAAQ,SAAS,OAAO;AAAA,MACrE,WAAW,OAAO,OAAO,aAAa,MAAM,GAAG;AAC3C,YAAI,QAAQ;AAAQ,eAAK,QAAQ,MAAM,QAAQ,SAAS,OAAO;AAAA,MACnE;AACA,aAAO;AAAA,IACX,GAAG,CAAC,CAAC;AAAA,EACT;AACA,SAAO,YAAY;AACnB,SAAO,YAAY;AACnB,SAAO,YAAY;AACnB,cAAY,mBAAe,4BAAkB,YAAY;AACzD,cAAY,sBAAkB,4BAAkB,eAAe;AAC/D,cAAY,uBAAmB,4BAAkB,gBAAgB;AACjE,YAAM,kCAAa;AACnB,YAAM,2BAAiB,WAAW;AAClC,YAAM,2BAAU,gBAAgB,YAAY;AAC5C,YAAM,gCAAY,UAAU,0BAAO,MAAM;AACzC,YAAM,gCAAY,UAAU,0BAAO,MAAM;AACzC,YAAM,gCAAY,oBAAoB,oCAAiB,OAAO;AAC9D,YAAM,oBAAG,cAAc,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AACvD,YAAM,oBAAG,cAAc,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AACvD,YAAM,2BAAU,gBAAgB,EAAE;AAClC,iBAAAA,QAAQ,QAAQ,gBAAgB;AACpC;",
|
|
6
6
|
"names": ["consola"]
|
|
7
7
|
}
|
package/package.json
CHANGED
package/src/utils/index.ts
CHANGED
|
@@ -616,6 +616,7 @@ export async function downloadFromWinget({ name, id, dir, architecture = "x64" }
|
|
|
616
616
|
const path = id.replace(/\./g, "/")
|
|
617
617
|
const response = await fetch(`https://api.github.com/repos/microsoft/winget-pkgs/contents/manifests/${firstLetter}/${path}`, { agent })
|
|
618
618
|
const data: GithubContent[] = (await response.json()) as any
|
|
619
|
+
if (!Array.isArray(data)) throw new Error((data as any).message)
|
|
619
620
|
const reg2 = /^\d+(\.\d+?)*$/
|
|
620
621
|
const stables = data.filter(item => reg2.test(item.name))
|
|
621
622
|
stables.sort((a, b) => {
|
package/src/utils/rollup.ts
CHANGED
|
@@ -12,8 +12,8 @@ import { RollupOptions } from "rollup"
|
|
|
12
12
|
const config: RollupOptions = {
|
|
13
13
|
input: "src/index.ts",
|
|
14
14
|
output: {
|
|
15
|
-
file: "dist/index.
|
|
16
|
-
format: "
|
|
15
|
+
file: "dist/index.js",
|
|
16
|
+
format: "cjs"
|
|
17
17
|
},
|
|
18
18
|
plugins: [typescript(), resolve(), commonjs(), json()]
|
|
19
19
|
}
|
|
@@ -23,102 +23,11 @@ export default config
|
|
|
23
23
|
|
|
24
24
|
const tsconfig = `{
|
|
25
25
|
"compilerOptions": {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
// "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
|
|
32
|
-
// "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
|
|
33
|
-
// "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
|
|
34
|
-
/* Language and Environment */
|
|
35
|
-
"target": "ESNext", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
|
|
36
|
-
// "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
|
|
37
|
-
// "jsx": "preserve", /* Specify what JSX code is generated. */
|
|
38
|
-
// "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */
|
|
39
|
-
// "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
|
|
40
|
-
// "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
|
|
41
|
-
// "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
|
|
42
|
-
// "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
|
|
43
|
-
// "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
|
|
44
|
-
// "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
|
|
45
|
-
// "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
|
|
46
|
-
// "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
|
|
47
|
-
/* Modules */
|
|
48
|
-
"module": "ESNext", /* Specify what module code is generated. */
|
|
49
|
-
// "rootDir": "./", /* Specify the root folder within your source files. */
|
|
50
|
-
"moduleResolution": "Bundler", /* Specify how TypeScript looks up a file from a given module specifier. */
|
|
51
|
-
// "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
|
|
52
|
-
// "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
|
|
53
|
-
// "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
|
|
54
|
-
// "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
|
|
55
|
-
// "types": [], /* Specify type package names to be included without being referenced in a source file. */
|
|
56
|
-
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
|
|
57
|
-
// "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
|
|
58
|
-
// "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */
|
|
59
|
-
// "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */
|
|
60
|
-
// "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */
|
|
61
|
-
// "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */
|
|
62
|
-
// "resolveJsonModule": true, /* Enable importing .json files. */
|
|
63
|
-
// "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */
|
|
64
|
-
// "noResolve": true, /* Disallow 'import's, 'require's or '<reference>'s from expanding the number of files TypeScript should add to a project. */
|
|
65
|
-
/* JavaScript Support */
|
|
66
|
-
// "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
|
|
67
|
-
// "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
|
|
68
|
-
// "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
|
|
69
|
-
/* Emit */
|
|
70
|
-
// "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
|
|
71
|
-
// "declarationMap": true, /* Create sourcemaps for d.ts files. */
|
|
72
|
-
// "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
|
|
73
|
-
// "sourceMap": true, /* Create source map files for emitted JavaScript files. */
|
|
74
|
-
// "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
|
|
75
|
-
// "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
|
|
76
|
-
// "outDir": "./", /* Specify an output folder for all emitted files. */
|
|
77
|
-
// "removeComments": true, /* Disable emitting comments. */
|
|
78
|
-
// "noEmit": true, /* Disable emitting files from a compilation. */
|
|
79
|
-
// "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
|
|
80
|
-
// "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
|
|
81
|
-
// "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
|
|
82
|
-
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
|
|
83
|
-
// "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
|
|
84
|
-
// "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
|
|
85
|
-
// "newLine": "crlf", /* Set the newline character for emitting files. */
|
|
86
|
-
// "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
|
|
87
|
-
// "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
|
|
88
|
-
// "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
|
|
89
|
-
// "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
|
|
90
|
-
// "declarationDir": "./", /* Specify the output directory for generated declaration files. */
|
|
91
|
-
/* Interop Constraints */
|
|
92
|
-
// "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
|
|
93
|
-
// "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */
|
|
94
|
-
// "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */
|
|
95
|
-
// "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
|
|
96
|
-
"esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
|
|
97
|
-
// "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
|
|
98
|
-
"forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
|
|
99
|
-
/* Type Checking */
|
|
100
|
-
"strict": true, /* Enable all strict type-checking options. */
|
|
101
|
-
// "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
|
|
102
|
-
// "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
|
|
103
|
-
// "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
|
|
104
|
-
// "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
|
|
105
|
-
// "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
|
|
106
|
-
// "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
|
|
107
|
-
// "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
|
|
108
|
-
// "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
|
|
109
|
-
// "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
|
|
110
|
-
// "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
|
|
111
|
-
// "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
|
|
112
|
-
// "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
|
|
113
|
-
// "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
|
|
114
|
-
// "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
|
|
115
|
-
// "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
|
|
116
|
-
// "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
|
|
117
|
-
// "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
|
|
118
|
-
// "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
|
|
119
|
-
/* Completeness */
|
|
120
|
-
// "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
|
|
121
|
-
"skipLibCheck": true /* Skip type checking all .d.ts files. */
|
|
26
|
+
"target": "ESNext",
|
|
27
|
+
"module": "EsNext",
|
|
28
|
+
"moduleResolution": "Bundler",
|
|
29
|
+
"strict": true,
|
|
30
|
+
"skipLibCheck": true
|
|
122
31
|
}
|
|
123
32
|
}
|
|
124
33
|
`
|
|
@@ -126,7 +35,8 @@ const tsconfig = `{
|
|
|
126
35
|
export async function rollup() {
|
|
127
36
|
await addDevDependencies("@rollup/plugin-commonjs", "@rollup/plugin-json", "@rollup/plugin-node-resolve", "@rollup/plugin-typescript", "rollup", "typescript")
|
|
128
37
|
const packageJson = await readPackageJson()
|
|
129
|
-
packageJson.scripts.build = "rollup -c rollup.config.ts --configPlugin @rollup/plugin-typescript"
|
|
38
|
+
if (packageJson.scripts.build) packageJson.scripts["build:rollup"] = "rollup -c rollup.config.ts --configPlugin @rollup/plugin-typescript"
|
|
39
|
+
else packageJson.scripts.build = "rollup -c rollup.config.ts --configPlugin @rollup/plugin-typescript"
|
|
130
40
|
await writePackageJson(packageJson)
|
|
131
41
|
await writeFile("rollup.config.ts", rollupConfig, "utf-8")
|
|
132
42
|
if (existsSync("tsconfig.json")) {
|
|
@@ -1,8 +1,21 @@
|
|
|
1
|
-
import
|
|
1
|
+
import consola from "consola"
|
|
2
|
+
import { rm, writeFile } from "fs/promises"
|
|
2
3
|
import { readPackageJson, sortArrayOrObject, writePackageJson } from "."
|
|
3
4
|
import { addGitignore } from "./addGitignore"
|
|
4
|
-
import
|
|
5
|
-
|
|
5
|
+
import { Module, ModuleResolution, setTsConfig, Target } from "./setTsConfig"
|
|
6
|
+
|
|
7
|
+
const fatherrcCode = `import { defineConfig } from "father"
|
|
8
|
+
|
|
9
|
+
export default defineConfig({
|
|
10
|
+
esm: {},
|
|
11
|
+
cjs: {},
|
|
12
|
+
targets: {
|
|
13
|
+
node: 18,
|
|
14
|
+
chrome: 100
|
|
15
|
+
},
|
|
16
|
+
sourcemap: true
|
|
17
|
+
})
|
|
18
|
+
`
|
|
6
19
|
|
|
7
20
|
export async function setFatherConfig() {
|
|
8
21
|
consola.start("开始设置 father 配置")
|
|
@@ -32,29 +45,20 @@ export async function setFatherConfig() {
|
|
|
32
45
|
return prev
|
|
33
46
|
}, {})
|
|
34
47
|
}
|
|
35
|
-
packageJson.scripts ??= {}
|
|
36
|
-
packageJson.scripts.prepublishOnly = "npx zixulu upgrade && father doctor && npm run build"
|
|
37
48
|
delete packageJson.dependencies
|
|
38
49
|
delete packageJson.devDependencies
|
|
39
50
|
delete packageJson.peerDependencies
|
|
40
51
|
packageJson.dependencies = sortArrayOrObject(dependencies)
|
|
41
52
|
packageJson.devDependencies = sortArrayOrObject(devDependencies)
|
|
42
53
|
packageJson.peerDependencies = sortArrayOrObject(peerDependencies)
|
|
43
|
-
const fatherrcCode = `import { defineConfig } from "father"
|
|
44
|
-
|
|
45
|
-
export default defineConfig({
|
|
46
|
-
esm: {},
|
|
47
|
-
cjs: {},
|
|
48
|
-
targets: {
|
|
49
|
-
node: 18,
|
|
50
|
-
chrome: 100
|
|
51
|
-
},
|
|
52
|
-
sourcemap: true
|
|
53
|
-
})
|
|
54
|
-
`
|
|
55
54
|
await addGitignore()
|
|
56
55
|
await writePackageJson(packageJson)
|
|
57
56
|
await writeFile(".fatherrc.ts", fatherrcCode)
|
|
58
57
|
await setTsConfig("target", Target.ESNext)
|
|
58
|
+
await setTsConfig("module", Module.ESNext)
|
|
59
|
+
await setTsConfig("moduleResolution", ModuleResolution.Bundler)
|
|
60
|
+
await rm("src/client", { recursive: true, force: true })
|
|
61
|
+
await rm("src/server", { recursive: true, force: true })
|
|
62
|
+
await writeFile("src/index.ts", "")
|
|
59
63
|
consola.success("设置 father 配置成功")
|
|
60
64
|
}
|