zixulu 1.44.0 → 1.45.0

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.
@@ -1,4 +1,4 @@
1
- export declare const prettierConfigText = "module.exports = {\n semi: false,\n tabWidth: 4,\n arrowParens: \"avoid\",\n printWidth: 160,\n trailingComma: \"none\"\n}\n";
2
- export declare const prettierConfigTextWithTailwind = "module.exports = {\n plugins: [\"prettier-plugin-tailwindcss\"],\n semi: false,\n tabWidth: 4,\n arrowParens: \"avoid\",\n printWidth: 160,\n trailingComma: \"none\"\n}\n";
1
+ export declare const prettierConfigText = "module.exports = {\n semi: false,\n tabWidth: 4,\n arrowParens: \"avoid\",\n printWidth: 160\n}\n";
2
+ export declare const prettierConfigTextWithTailwind = "module.exports = {\n plugins: [\"prettier-plugin-tailwindcss\"],\n semi: false,\n tabWidth: 4,\n arrowParens: \"avoid\",\n printWidth: 160\n}\n";
3
3
  /** 添加 prettier */
4
4
  export declare function addPrettier(): Promise<void>;
@@ -42,8 +42,7 @@ var prettierConfigText = `module.exports = {
42
42
  semi: false,
43
43
  tabWidth: 4,
44
44
  arrowParens: "avoid",
45
- printWidth: 160,
46
- trailingComma: "none"
45
+ printWidth: 160
47
46
  }
48
47
  `;
49
48
  var prettierConfigTextWithTailwind = `module.exports = {
@@ -51,8 +50,7 @@ var prettierConfigTextWithTailwind = `module.exports = {
51
50
  semi: false,
52
51
  tabWidth: 4,
53
52
  arrowParens: "avoid",
54
- printWidth: 160,
55
- trailingComma: "none"
53
+ printWidth: 160
56
54
  }
57
55
  `;
58
56
  async function addPrettier() {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/addPrettier.ts"],
4
- "sourcesContent": ["import consola from \"consola\"\r\nimport { writeFile } from \"fs/promises\"\r\nimport { AddDependenciesConfig, addDependency } from \"./addDependency\"\r\nimport { readPackageJson } from \"./readPackageJson\"\r\n\r\nexport const prettierConfigText = `module.exports = {\r\n semi: false,\r\n tabWidth: 4,\r\n arrowParens: \"avoid\",\r\n printWidth: 160,\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: 160,\r\n trailingComma: \"none\"\r\n}\r\n`\r\n\r\n/** 添加 prettier */\r\nexport async function addPrettier() {\r\n consola.start(\"开始添加 prettier 配置\")\r\n const packageJson = await readPackageJson()\r\n const tailwind = Object.keys(packageJson.dependencies ?? {}).includes(\"tailwindcss\") || Object.keys(packageJson.devDependencies ?? {}).includes(\"tailwindcss\")\r\n await writeFile(\"./prettier.config.cjs\", tailwind ? prettierConfigTextWithTailwind : prettierConfigText)\r\n const config: AddDependenciesConfig = {\r\n package: [\"prettier\"],\r\n type: \"devDependencies\"\r\n }\r\n if (tailwind) (config.package as string[]).push(\"prettier-plugin-tailwindcss\")\r\n await addDependency(config)\r\n consola.success(\"添加 prettier 配置成功\")\r\n}\r\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAoB;AACpB,sBAA0B;AAC1B,2BAAqD;AACrD,6BAAgC;AAEzB,IAAM,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAS3B,IAAM,iCAAiC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAW9C,eAAsB,cAAc;AAChC,iBAAAA,QAAQ,MAAM,kBAAkB;AAChC,QAAM,cAAc,UAAM,wCAAgB;AAC1C,QAAM,WAAW,OAAO,KAAK,YAAY,gBAAgB,CAAC,CAAC,EAAE,SAAS,aAAa,KAAK,OAAO,KAAK,YAAY,mBAAmB,CAAC,CAAC,EAAE,SAAS,aAAa;AAC7J,YAAM,2BAAU,yBAAyB,WAAW,iCAAiC,kBAAkB;AACvG,QAAM,SAAgC;AAAA,IAClC,SAAS,CAAC,UAAU;AAAA,IACpB,MAAM;AAAA,EACV;AACA,MAAI;AAAU,IAAC,OAAO,QAAqB,KAAK,6BAA6B;AAC7E,YAAM,oCAAc,MAAM;AAC1B,iBAAAA,QAAQ,QAAQ,kBAAkB;AACtC;",
4
+ "sourcesContent": ["import consola from \"consola\"\r\nimport { writeFile } from \"fs/promises\"\r\nimport { AddDependenciesConfig, addDependency } from \"./addDependency\"\r\nimport { readPackageJson } from \"./readPackageJson\"\r\n\r\nexport const prettierConfigText = `module.exports = {\r\n semi: false,\r\n tabWidth: 4,\r\n arrowParens: \"avoid\",\r\n printWidth: 160\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: 160\r\n}\r\n`\r\n\r\n/** 添加 prettier */\r\nexport async function addPrettier() {\r\n consola.start(\"开始添加 prettier 配置\")\r\n const packageJson = await readPackageJson()\r\n const tailwind = Object.keys(packageJson.dependencies ?? {}).includes(\"tailwindcss\") || Object.keys(packageJson.devDependencies ?? {}).includes(\"tailwindcss\")\r\n await writeFile(\"./prettier.config.cjs\", tailwind ? prettierConfigTextWithTailwind : prettierConfigText)\r\n const config: AddDependenciesConfig = {\r\n package: [\"prettier\"],\r\n type: \"devDependencies\"\r\n }\r\n if (tailwind) (config.package as string[]).push(\"prettier-plugin-tailwindcss\")\r\n await addDependency(config)\r\n consola.success(\"添加 prettier 配置成功\")\r\n}\r\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAoB;AACpB,sBAA0B;AAC1B,2BAAqD;AACrD,6BAAgC;AAEzB,IAAM,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQ3B,IAAM,iCAAiC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAU9C,eAAsB,cAAc;AAChC,iBAAAA,QAAQ,MAAM,kBAAkB;AAChC,QAAM,cAAc,UAAM,wCAAgB;AAC1C,QAAM,WAAW,OAAO,KAAK,YAAY,gBAAgB,CAAC,CAAC,EAAE,SAAS,aAAa,KAAK,OAAO,KAAK,YAAY,mBAAmB,CAAC,CAAC,EAAE,SAAS,aAAa;AAC7J,YAAM,2BAAU,yBAAyB,WAAW,iCAAiC,kBAAkB;AACvG,QAAM,SAAgC;AAAA,IAClC,SAAS,CAAC,UAAU;AAAA,IACpB,MAAM;AAAA,EACV;AACA,MAAI;AAAU,IAAC,OAAO,QAAqB,KAAK,6BAA6B;AAC7E,YAAM,oCAAc,MAAM;AAC1B,iBAAAA,QAAQ,QAAQ,kBAAkB;AACtC;",
6
6
  "names": ["consola"]
7
7
  }
@@ -69,8 +69,7 @@ var prettierConfig = {
69
69
  semi: false,
70
70
  tabWidth: 4,
71
71
  arrowParens: "avoid",
72
- printWidth: 160,
73
- trailingComma: "none"
72
+ printWidth: 160
74
73
  };
75
74
  function getFilename(headers) {
76
75
  const disposition = headers.get("content-disposition");
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/index.ts"],
4
- "sourcesContent": ["import { agent } from \"@constant/index\"\r\nimport consola from \"consola\"\r\nimport { createWriteStream, existsSync } from \"fs\"\r\nimport { mkdir, readFile, readdir, rename, rm, writeFile } from \"fs/promises\"\r\nimport { type Headers as NodeFetchHeaders } from \"node-fetch\"\r\nimport { homedir } from \"os\"\r\nimport { join } from \"path\"\r\nimport { Config } from \"prettier\"\r\nimport { execAsync, unzip } from \"soda-nodejs\"\r\nimport { Readable } from \"stream\"\r\nimport YAML from \"yaml\"\r\nimport { retry } from \"./retry\"\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 const prettierConfig: Config = {\r\n semi: false,\r\n tabWidth: 4,\r\n arrowParens: \"avoid\",\r\n printWidth: 160,\r\n trailingComma: \"none\"\r\n}\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 downloadFromWinget({\r\n name: \"VSCode\",\r\n id: \"Microsoft.VisualStudioCode\",\r\n dir,\r\n filter: item => item.Architecture === \"x64\" && item.Scope === \"machine\"\r\n })\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 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 InstallerLocale?: string\r\n InstallerType?: 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 filter: (item: Winget.Installer, index: number, arr: Winget.Installer[]) => boolean\r\n}\r\n\r\nexport async function downloadFromWinget({ name, id, dir, filter }: 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(\r\n `https://raw.githubusercontent.com/microsoft/winget-pkgs/master/manifests/${firstLetter}/${path}/${stables[0].name}/${id}.installer.yaml`,\r\n { agent }\r\n )\r\n const yaml = await response2.text()\r\n const pkg: Winget.Package = YAML.parse(yaml)\r\n\r\n const installers = filter ? pkg.Installers.filter(filter) : pkg.Installers\r\n\r\n if (installers.length === 0) {\r\n consola.warn(`未找到 ${name} 的安装程序`)\r\n return\r\n }\r\n\r\n const result: WingetItem[] = []\r\n\r\n for (const { InstallerUrl, Architecture } of installers) {\r\n const filename = await download(InstallerUrl, dir)\r\n result.push({ filename, version: pkg.PackageVersion, ext: new URL(InstallerUrl).pathname.endsWith(\".exe\") ? \"exe\" : \"msi\", architecture: Architecture })\r\n }\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 filter: item => item.Architecture === \"x64\"\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 filter: item => item.Architecture === \"x64\"\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 filter: item => item.Architecture === \"x64\" && item.InstallerType === \"exe\"\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 filter: item => item.Architecture === \"x64\" && item.Scope === \"machine\"\r\n })\r\n}\r\n\r\nexport async function downloadDeskGo(dir: string) {\r\n await downloadFromPCQQ(dir, 3318, 23125)\r\n const dir2 = await readdir(dir)\r\n const file = dir2.find(item => item.startsWith(\"DeskGo\"))!\r\n await rename(\r\n join(dir, file),\r\n join(\r\n dir,\r\n file.replace(/^DeskGo_(.+)_full\\.exe$/, (match, arg) => `DeskGo-${arg.replace(/\\_/g, \".\")}-x64.exe`)\r\n )\r\n )\r\n}\r\n\r\nexport async function downloadGeekUninstaller(dir: string) {\r\n await download(`https://geekuninstaller.com/geek.zip`, dir)\r\n await unzip({\r\n input: join(dir, \"geek.zip\"),\r\n output: dir\r\n })\r\n await rm(join(dir, \"geek.zip\"), { force: true })\r\n const response = await fetch(\"https://geekuninstaller.com/download\")\r\n const text = await response.text()\r\n const version = text.match(/<b>(.+?)<\\/b>/)![1]\r\n await rename(join(dir, \"geek.exe\"), join(dir, `Geek-${version}-x64.exe`))\r\n}\r\n\r\nexport async function getVscodeExtInfo(ext: string): Promise<VscodeExt> {\r\n const { default: fetch } = await import(\"node-fetch\")\r\n const response = await fetch(`https://marketplace.visualstudio.com/items?itemName=${ext}`, { agent })\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`), 4)\r\n }\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 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"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { agent } from \"@constant/index\"\r\nimport consola from \"consola\"\r\nimport { createWriteStream, existsSync } from \"fs\"\r\nimport { mkdir, readFile, readdir, rename, rm, writeFile } from \"fs/promises\"\r\nimport { type Headers as NodeFetchHeaders } from \"node-fetch\"\r\nimport { homedir } from \"os\"\r\nimport { join } from \"path\"\r\nimport { Config } from \"prettier\"\r\nimport { execAsync, unzip } from \"soda-nodejs\"\r\nimport { Readable } from \"stream\"\r\nimport YAML from \"yaml\"\r\nimport { retry } from \"./retry\"\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 const prettierConfig: Config = {\r\n semi: false,\r\n tabWidth: 4,\r\n arrowParens: \"avoid\",\r\n printWidth: 160\r\n}\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 downloadFromWinget({\r\n name: \"VSCode\",\r\n id: \"Microsoft.VisualStudioCode\",\r\n dir,\r\n filter: item => item.Architecture === \"x64\" && item.Scope === \"machine\"\r\n })\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 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 InstallerLocale?: string\r\n InstallerType?: 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 filter: (item: Winget.Installer, index: number, arr: Winget.Installer[]) => boolean\r\n}\r\n\r\nexport async function downloadFromWinget({ name, id, dir, filter }: 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(\r\n `https://raw.githubusercontent.com/microsoft/winget-pkgs/master/manifests/${firstLetter}/${path}/${stables[0].name}/${id}.installer.yaml`,\r\n { agent }\r\n )\r\n const yaml = await response2.text()\r\n const pkg: Winget.Package = YAML.parse(yaml)\r\n\r\n const installers = filter ? pkg.Installers.filter(filter) : pkg.Installers\r\n\r\n if (installers.length === 0) {\r\n consola.warn(`未找到 ${name} 的安装程序`)\r\n return\r\n }\r\n\r\n const result: WingetItem[] = []\r\n\r\n for (const { InstallerUrl, Architecture } of installers) {\r\n const filename = await download(InstallerUrl, dir)\r\n result.push({ filename, version: pkg.PackageVersion, ext: new URL(InstallerUrl).pathname.endsWith(\".exe\") ? \"exe\" : \"msi\", architecture: Architecture })\r\n }\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 filter: item => item.Architecture === \"x64\"\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 filter: item => item.Architecture === \"x64\"\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 filter: item => item.Architecture === \"x64\" && item.InstallerType === \"exe\"\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 filter: item => item.Architecture === \"x64\" && item.Scope === \"machine\"\r\n })\r\n}\r\n\r\nexport async function downloadDeskGo(dir: string) {\r\n await downloadFromPCQQ(dir, 3318, 23125)\r\n const dir2 = await readdir(dir)\r\n const file = dir2.find(item => item.startsWith(\"DeskGo\"))!\r\n await rename(\r\n join(dir, file),\r\n join(\r\n dir,\r\n file.replace(/^DeskGo_(.+)_full\\.exe$/, (match, arg) => `DeskGo-${arg.replace(/\\_/g, \".\")}-x64.exe`)\r\n )\r\n )\r\n}\r\n\r\nexport async function downloadGeekUninstaller(dir: string) {\r\n await download(`https://geekuninstaller.com/geek.zip`, dir)\r\n await unzip({\r\n input: join(dir, \"geek.zip\"),\r\n output: dir\r\n })\r\n await rm(join(dir, \"geek.zip\"), { force: true })\r\n const response = await fetch(\"https://geekuninstaller.com/download\")\r\n const text = await response.text()\r\n const version = text.match(/<b>(.+?)<\\/b>/)![1]\r\n await rename(join(dir, \"geek.exe\"), join(dir, `Geek-${version}-x64.exe`))\r\n}\r\n\r\nexport async function getVscodeExtInfo(ext: string): Promise<VscodeExt> {\r\n const { default: fetch } = await import(\"node-fetch\")\r\n const response = await fetch(`https://marketplace.visualstudio.com/items?itemName=${ext}`, { agent })\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`), 4)\r\n }\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 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"],
5
+ "mappings": "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",
6
6
  "names": ["fetch", "YAML", "consola"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zixulu",
3
- "version": "1.44.0",
3
+ "version": "1.45.0",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "bin": {
@@ -7,8 +7,7 @@ export const prettierConfigText = `module.exports = {
7
7
  semi: false,
8
8
  tabWidth: 4,
9
9
  arrowParens: "avoid",
10
- printWidth: 160,
11
- trailingComma: "none"
10
+ printWidth: 160
12
11
  }
13
12
  `
14
13
 
@@ -17,8 +16,7 @@ export const prettierConfigTextWithTailwind = `module.exports = {
17
16
  semi: false,
18
17
  tabWidth: 4,
19
18
  arrowParens: "avoid",
20
- printWidth: 160,
21
- trailingComma: "none"
19
+ printWidth: 160
22
20
  }
23
21
  `
24
22
 
@@ -19,8 +19,7 @@ export const prettierConfig: Config = {
19
19
  semi: false,
20
20
  tabWidth: 4,
21
21
  arrowParens: "avoid",
22
- printWidth: 160,
23
- trailingComma: "none"
22
+ printWidth: 160
24
23
  }
25
24
 
26
25
  export function getFilename(headers: Headers | NodeFetchHeaders) {