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.
- package/dist/index.js +110 -57
- package/dist/index.js.map +1 -1
- package/dist/src/utils/syncVscode.d.ts +10 -5
- package/package.json +1 -1
- package/src/utils/addTailwind.ts +21 -21
- package/src/utils/checkTailwind.ts +9 -9
- package/src/utils/checkType.ts +9 -9
- package/src/utils/clearDockerLog.ts +8 -8
- package/src/utils/download7Zip.ts +14 -14
- package/src/utils/downloadAnydesk.ts +14 -14
- package/src/utils/downloadChrome.ts +14 -14
- package/src/utils/downloadFirefox.ts +14 -14
- package/src/utils/downloadGit.ts +14 -14
- package/src/utils/downloadHoneyview.ts +9 -9
- package/src/utils/downloadNodeJS.ts +14 -14
- package/src/utils/downloadPeazip.ts +14 -14
- package/src/utils/downloadPotPlayer.ts +14 -14
- package/src/utils/downloadPowerToys.ts +14 -14
- package/src/utils/downloadVscode.ts +14 -14
- package/src/utils/getDependcy.ts +16 -16
- package/src/utils/getPackageUpgradeVersion.ts +43 -43
- package/src/utils/getPackageVersionFromRange.ts +8 -8
- package/src/utils/getRelativePath.ts +11 -11
- package/src/utils/hasChangeNoCommit.ts +6 -6
- package/src/utils/isAsset.ts +26 -26
- package/src/utils/isShellProxy.ts +12 -12
- package/src/utils/isStableVersion.ts +3 -3
- package/src/utils/isUrl.ts +5 -5
- package/src/utils/next.ts +12 -12
- package/src/utils/replaceCommitAuthor.ts +57 -57
- package/src/utils/setBun.ts +10 -10
- package/src/utils/setEnv.ts +24 -24
- package/src/utils/sleep.ts +3 -3
- package/src/utils/sortPackageJson.ts +16 -16
- package/src/utils/sudoCommand.ts +17 -17
- package/src/utils/syncVscode.ts +128 -74
- package/src/utils/unique.ts +3 -3
- 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
|
-
|
|
5289
|
-
|
|
5290
|
-
|
|
5291
|
-
|
|
5292
|
-
|
|
5293
|
-
|
|
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(
|
|
5392
|
+
choices: getEnumEntries(VscodeSyncOption).map(([name, value])=>({
|
|
5301
5393
|
name,
|
|
5302
5394
|
value
|
|
5303
5395
|
})),
|
|
5304
|
-
default: getEnumValues(
|
|
5396
|
+
default: getEnumValues(VscodeSyncOption)
|
|
5305
5397
|
})).options;
|
|
5306
5398
|
if (0 === options.length) return;
|
|
5307
5399
|
const userDir = homedir();
|
|
5308
|
-
const
|
|
5309
|
-
const
|
|
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(
|
|
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(
|
|
5419
|
+
if (options.includes(VscodeSyncOption.插件)) {
|
|
5327
5420
|
await downloadVscodeExts(join(dir, "extensions"));
|
|
5328
5421
|
consola.success("下载最新 VSCode 插件完成");
|
|
5329
5422
|
}
|
|
5330
|
-
if (options.includes(
|
|
5331
|
-
const script =
|
|
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(
|
|
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(
|
|
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");
|