zixulu 1.80.0 → 1.80.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.
Files changed (38) hide show
  1. package/dist/index.js +110 -57
  2. package/dist/index.js.map +1 -1
  3. package/dist/src/utils/syncVscode.d.ts +10 -5
  4. package/package.json +1 -1
  5. package/src/utils/addTailwind.ts +21 -21
  6. package/src/utils/checkTailwind.ts +9 -9
  7. package/src/utils/checkType.ts +9 -9
  8. package/src/utils/clearDockerLog.ts +8 -8
  9. package/src/utils/download7Zip.ts +14 -14
  10. package/src/utils/downloadAnydesk.ts +14 -14
  11. package/src/utils/downloadChrome.ts +14 -14
  12. package/src/utils/downloadFirefox.ts +14 -14
  13. package/src/utils/downloadGit.ts +14 -14
  14. package/src/utils/downloadHoneyview.ts +9 -9
  15. package/src/utils/downloadNodeJS.ts +14 -14
  16. package/src/utils/downloadPeazip.ts +14 -14
  17. package/src/utils/downloadPotPlayer.ts +14 -14
  18. package/src/utils/downloadPowerToys.ts +14 -14
  19. package/src/utils/downloadVscode.ts +14 -14
  20. package/src/utils/getDependcy.ts +16 -16
  21. package/src/utils/getPackageUpgradeVersion.ts +43 -43
  22. package/src/utils/getPackageVersionFromRange.ts +8 -8
  23. package/src/utils/getRelativePath.ts +11 -11
  24. package/src/utils/hasChangeNoCommit.ts +6 -6
  25. package/src/utils/isAsset.ts +26 -26
  26. package/src/utils/isShellProxy.ts +12 -12
  27. package/src/utils/isStableVersion.ts +3 -3
  28. package/src/utils/isUrl.ts +5 -5
  29. package/src/utils/next.ts +12 -12
  30. package/src/utils/replaceCommitAuthor.ts +57 -57
  31. package/src/utils/setBun.ts +10 -10
  32. package/src/utils/setEnv.ts +24 -24
  33. package/src/utils/sleep.ts +3 -3
  34. package/src/utils/sortPackageJson.ts +16 -16
  35. package/src/utils/sudoCommand.ts +17 -17
  36. package/src/utils/syncVscode.ts +128 -74
  37. package/src/utils/unique.ts +3 -3
  38. package/src/utils/vite.ts +15 -15
package/dist/index.js CHANGED
@@ -5285,34 +5285,127 @@ async function downloadVscodeExts(dir) {
5285
5285
  await writeZixuluSetting(setting);
5286
5286
  await Promise.all(exts.filter((ext)=>exts2.exts.includes(ext.id)).map((ext)=>retry(()=>download_download(ext.url, dir, `${ext.id}-${ext.version}.vsix`), 4)));
5287
5287
  }
5288
- var syncVscode_VscodeSyncOption = /*#__PURE__*/ function(VscodeSyncOption) {
5289
- VscodeSyncOption["配置"] = "SETTING";
5290
- VscodeSyncOption["插件"] = "EXTENSION";
5291
- VscodeSyncOption["软件"] = "SOFTWARE";
5292
- VscodeSyncOption["PowerShell"] = "POWERSHELL";
5293
- return VscodeSyncOption;
5294
- }({});
5288
+ const VscodeSyncOption = {
5289
+ 配置: "SETTING",
5290
+ 插件: "EXTENSION",
5291
+ 软件: "SOFTWARE",
5292
+ PowerShell: "POWERSHELL"
5293
+ };
5294
+ function createSyncVscodeScript(options) {
5295
+ const needUserDir = options.includes(VscodeSyncOption.配置) || options.includes(VscodeSyncOption.PowerShell);
5296
+ return `// @ts-check
5297
+
5298
+ import { spawn } from "node:child_process"
5299
+ import { access, copyFile, mkdir, readdir, rm } from "node:fs/promises"
5300
+ import { homedir } from "node:os"
5301
+ import { delimiter, join } from "node:path"
5302
+
5303
+ /**
5304
+ * @param {string} path
5305
+ */
5306
+ async function pathExists(path) {
5307
+ try {
5308
+ await access(path)
5309
+ return true
5310
+ } catch {
5311
+ return false
5312
+ }
5313
+ }
5314
+
5315
+ // Windows 上优先查找真实的 code.cmd,避免 shell 拼命令时的路径问题
5316
+ async function resolveCodeCli() {
5317
+ if (process.platform !== "win32") return "code"
5318
+
5319
+ const candidates = new Set()
5320
+ const localAppData = process.env.LOCALAPPDATA ?? join(homedir(), "AppData", "Local")
5321
+ const programFiles = process.env.ProgramFiles ?? "C:/Program Files"
5322
+ const programFilesX86 = process.env["ProgramFiles(x86)"] ?? "C:/Program Files (x86)"
5323
+
5324
+ candidates.add(join(localAppData, "Programs", "Microsoft VS Code", "bin", "code.cmd"))
5325
+ candidates.add(join(programFiles, "Microsoft VS Code", "bin", "code.cmd"))
5326
+ candidates.add(join(programFilesX86, "Microsoft VS Code", "bin", "code.cmd"))
5327
+
5328
+ const pathDirs = process.env.PATH?.split(delimiter).filter(Boolean) ?? []
5329
+ for (const dir of pathDirs) {
5330
+ candidates.add(join(dir, "code.cmd"))
5331
+ candidates.add(join(dir, "code.exe"))
5332
+ candidates.add(join(dir, "code"))
5333
+ }
5334
+
5335
+ for (const candidate of candidates) {
5336
+ if (await pathExists(candidate)) return candidate
5337
+ }
5338
+
5339
+ throw new Error("未找到 VS Code 命令行工具,请先安装 VS Code,并确认安装时勾选了“添加到 PATH”")
5340
+ }
5341
+
5342
+ /**
5343
+ * @param {string} command
5344
+ * @param {string[]} args
5345
+ */
5346
+ function spawnAsync(command, args) {
5347
+ return new Promise((resolve, reject) => {
5348
+ const child = spawn(command, args, { stdio: "inherit" })
5349
+ child.on("error", reject)
5350
+ child.on("exit", code => {
5351
+ if (code !== 0) return reject(new Error(\`Command failed with code \${code}: \${command} \${args.join(" ")}\`))
5352
+ resolve(0)
5353
+ })
5354
+ })
5355
+ }
5356
+
5357
+ async function main() {
5358
+ const workspaceDir = process.cwd()
5359
+ ${needUserDir ? ` const userDir = homedir()
5360
+ ` : ""}${options.includes(VscodeSyncOption.插件) ? ` const extensionsDir = join(workspaceDir, "extensions")
5361
+ const codeCli = await resolveCodeCli()
5362
+ const dir = await readdir(extensionsDir)
5363
+ for (const ext of dir) {
5364
+ await spawnAsync(codeCli, ["--install-extension", join(extensionsDir, ext)])
5365
+ }
5366
+ ` : ""}${options.includes(VscodeSyncOption.配置) ? ` const codeUserDir = join(userDir, "AppData", "Roaming", "Code", "User")
5367
+ await mkdir(codeUserDir, { recursive: true })
5368
+ const setting = join(codeUserDir, "settings.json")
5369
+ await rm(setting, { force: true })
5370
+ await copyFile(join(workspaceDir, "settings.json"), setting)
5371
+ const snippetTarget = join(codeUserDir, "snippets")
5372
+ await mkdir(snippetTarget, { recursive: true })
5373
+ const dir2 = await readdir(join(workspaceDir, "snippets"))
5374
+ for (const file of dir2) {
5375
+ await rm(join(snippetTarget, file), { force: true })
5376
+ await copyFile(join(workspaceDir, "snippets", file), join(snippetTarget, file))
5377
+ }` : ""}${options.includes(VscodeSyncOption.PowerShell) ? `
5378
+ const profileDir = join(userDir, "Documents", "PowerShell")
5379
+ await mkdir(profileDir, { recursive: true })
5380
+ const profile = join(profileDir, "Microsoft.PowerShell_profile.ps1")
5381
+ await copyFile(join(workspaceDir, "Microsoft.PowerShell_profile.ps1"), profile)` : ""}
5382
+ }
5383
+
5384
+ main()
5385
+ `;
5386
+ }
5295
5387
  async function syncVscode() {
5296
5388
  const options = (await inquirer_0.prompt({
5297
5389
  type: "checkbox",
5298
5390
  name: "options",
5299
5391
  message: "请选择要同步的内容",
5300
- choices: getEnumEntries(syncVscode_VscodeSyncOption).map(([name, value])=>({
5392
+ choices: getEnumEntries(VscodeSyncOption).map(([name, value])=>({
5301
5393
  name,
5302
5394
  value
5303
5395
  })),
5304
- default: getEnumValues(syncVscode_VscodeSyncOption)
5396
+ default: getEnumValues(VscodeSyncOption)
5305
5397
  })).options;
5306
5398
  if (0 === options.length) return;
5307
5399
  const userDir = homedir();
5308
- const snippetSource = join(userDir, "AppData/Roaming/Code/User/snippets");
5309
- const setting = (await readFile(join(userDir, "AppData/Roaming/Code/User/settings.json"), "utf-8")).replace(/}[ \n\r]*$/, ` "chat.disableAIFeatures": true,\n}`);
5400
+ const codeUserDir = join(userDir, "AppData", "Roaming", "Code", "User");
5401
+ const snippetSource = join(codeUserDir, "snippets");
5402
+ const setting = (await readFile(join(codeUserDir, "settings.json"), "utf-8")).replace(/}[ \n\r]*$/, ` "chat.disableAIFeatures": true,\n}`);
5310
5403
  const dir = `vscode-${dayjs().format("YYYYMMDDHHmmss")}`;
5311
5404
  try {
5312
5405
  await mkdir(dir, {
5313
5406
  recursive: true
5314
5407
  });
5315
- if (options.includes("SETTING")) {
5408
+ if (options.includes(VscodeSyncOption.配置)) {
5316
5409
  const snippetTarget = join(dir, "snippets");
5317
5410
  await mkdir(snippetTarget, {
5318
5411
  recursive: true
@@ -5323,60 +5416,20 @@ async function syncVscode() {
5323
5416
  for (const file of files)await copyFile(join(snippetSource, file), join(snippetTarget, file));
5324
5417
  consola.success("下载最新 VSCode 配置完成");
5325
5418
  }
5326
- if (options.includes("EXTENSION")) {
5419
+ if (options.includes(VscodeSyncOption.插件)) {
5327
5420
  await downloadVscodeExts(join(dir, "extensions"));
5328
5421
  consola.success("下载最新 VSCode 插件完成");
5329
5422
  }
5330
- if (options.includes("SETTING") || options.includes("EXTENSION")) {
5331
- const script = `// @ts-check
5332
-
5333
- import { spawn } from "node:child_process"
5334
- import { readdir, copyFile, rm } from "node:fs/promises"
5335
- import { homedir } from "node:os"
5336
- import { join } from "node:path"
5337
-
5338
- /**
5339
- * @param {string} command
5340
- */
5341
- function spawnAsync(command) {
5342
- return new Promise((resolve, reject) => {
5343
- const child = spawn(command, { shell: true, stdio: "inherit" })
5344
- child.on("exit", code => {
5345
- if (code !== 0) return reject(new Error(\`Command failed with code \${code}\`))
5346
- resolve(0)
5347
- })
5348
- })
5349
- }
5350
-
5351
- async function main() {
5352
- ${options.includes("EXTENSION") ? ` const dir = await readdir("./extensions")
5353
- for (const ext of dir) {
5354
- await spawnAsync(\`code --install-extension "./extensions/\${ext}"\`)
5355
- }
5356
- ` : ""}${options.includes("SETTING") ? ` const userDir = homedir()
5357
- const setting = join(userDir, "AppData/Roaming/Code/User/settings.json")
5358
- await rm(setting, { force: true })
5359
- await copyFile("./settings.json", setting)
5360
- const snippetTarget = join(userDir, "AppData/Roaming/Code/User/snippets")
5361
- const dir2 = await readdir("./snippets")
5362
- for (const file of dir2) {
5363
- await rm(join(snippetTarget, file), { force: true })
5364
- await copyFile(join("./snippets", file), join(snippetTarget, file))
5365
- }` : ""}${options.includes("POWERSHELL") ? `
5366
- ${options.includes("SETTING") ? "" : `const userDir = homedir()
5367
- `}const profile = join(userDir, "Documents/PowerShell/Microsoft.PowerShell_profile.ps1")
5368
- await copyFile("./Microsoft.PowerShell_profile.ps1", profile)` : ""}
5369
- }
5370
-
5371
- main()`;
5423
+ if (options.includes(VscodeSyncOption.配置) || options.includes(VscodeSyncOption.插件) || options.includes(VscodeSyncOption.PowerShell)) {
5424
+ const script = createSyncVscodeScript(options);
5372
5425
  await writeFile(join(dir, "syncVscode.mjs"), script, "utf-8");
5373
5426
  }
5374
- if (options.includes("SOFTWARE")) {
5427
+ if (options.includes(VscodeSyncOption.软件)) {
5375
5428
  consola.start("开始下载最新 VSCode");
5376
5429
  await download_download("https://code.visualstudio.com/sha/download?build=stable&os=win32-x64", dir);
5377
5430
  consola.success("下载最新 VSCode 完成");
5378
5431
  }
5379
- if (options.includes("POWERSHELL")) {
5432
+ if (options.includes(VscodeSyncOption.PowerShell)) {
5380
5433
  consola.start("开始同步 PowerShell 配置");
5381
5434
  const userDir = homedir();
5382
5435
  const profile = join(userDir, "Documents/PowerShell/Microsoft.PowerShell_profile.ps1");