@sfmc-bds/bds-tools 0.1.0 → 0.2.0-beta.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.
Files changed (71) hide show
  1. package/dist/bds-manager.d.ts.map +1 -1
  2. package/dist/bds-manager.js +236 -263
  3. package/dist/bds-manager.js.map +7 -1
  4. package/dist/changelog.js +39 -50
  5. package/dist/changelog.js.map +7 -1
  6. package/dist/check-update.d.ts +2 -2
  7. package/dist/check-update.d.ts.map +1 -1
  8. package/dist/check-update.js +361 -401
  9. package/dist/check-update.js.map +7 -1
  10. package/dist/cli-pack-manager.d.ts +10 -6
  11. package/dist/cli-pack-manager.d.ts.map +1 -1
  12. package/dist/cli-pack-manager.js +226 -135
  13. package/dist/cli-pack-manager.js.map +7 -1
  14. package/dist/fsx.js +86 -100
  15. package/dist/fsx.js.map +7 -1
  16. package/dist/http.d.ts.map +1 -1
  17. package/dist/http.js +166 -185
  18. package/dist/http.js.map +7 -1
  19. package/dist/is-main.d.ts +17 -0
  20. package/dist/is-main.d.ts.map +1 -0
  21. package/dist/is-main.js +32 -0
  22. package/dist/is-main.js.map +7 -0
  23. package/dist/log.d.ts +2 -4
  24. package/dist/log.d.ts.map +1 -1
  25. package/dist/log.js +12 -19
  26. package/dist/log.js.map +7 -1
  27. package/dist/logger.js +6 -10
  28. package/dist/logger.js.map +7 -1
  29. package/dist/pack-manager.d.ts +88 -24
  30. package/dist/pack-manager.d.ts.map +1 -1
  31. package/dist/pack-manager.js +280 -245
  32. package/dist/pack-manager.js.map +7 -1
  33. package/dist/paths.d.ts +8 -3
  34. package/dist/paths.d.ts.map +1 -1
  35. package/dist/paths.js +53 -39
  36. package/dist/paths.js.map +7 -1
  37. package/dist/qqutil.d.ts.map +1 -1
  38. package/dist/qqutil.js +90 -87
  39. package/dist/qqutil.js.map +7 -1
  40. package/dist/recovery.js +26 -37
  41. package/dist/recovery.js.map +7 -1
  42. package/dist/rollback.d.ts +1 -1
  43. package/dist/rollback.js +55 -74
  44. package/dist/rollback.js.map +7 -1
  45. package/dist/server-properties.d.ts +12 -0
  46. package/dist/server-properties.d.ts.map +1 -0
  47. package/dist/server-properties.js +28 -0
  48. package/dist/server-properties.js.map +7 -0
  49. package/dist/taskbar.d.ts +2 -0
  50. package/dist/taskbar.d.ts.map +1 -1
  51. package/dist/taskbar.js +51 -82
  52. package/dist/taskbar.js.map +7 -1
  53. package/dist/types.js +1 -5
  54. package/dist/types.js.map +7 -1
  55. package/dist/update-result.d.ts +12 -0
  56. package/dist/update-result.d.ts.map +1 -0
  57. package/dist/update-result.js +15 -0
  58. package/dist/update-result.js.map +7 -0
  59. package/dist/upstream.js +94 -108
  60. package/dist/upstream.js.map +7 -1
  61. package/dist/version.js +63 -81
  62. package/dist/version.js.map +7 -1
  63. package/dist/world-packs.d.ts +112 -0
  64. package/dist/world-packs.d.ts.map +1 -0
  65. package/dist/world-packs.js +335 -0
  66. package/dist/world-packs.js.map +7 -0
  67. package/dist/zipx.d.ts +10 -0
  68. package/dist/zipx.d.ts.map +1 -0
  69. package/dist/zipx.js +48 -0
  70. package/dist/zipx.js.map +7 -0
  71. package/package.json +17 -6
@@ -1 +1,7 @@
1
- {"version":3,"file":"check-update.js","sourceRoot":"","sources":["../src/check-update.ts"],"names":[],"mappings":"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"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/check-update.ts"],
4
+ "sourcesContent": ["/**\n * check-update.ts \u2014 BDS \u81EA\u52A8\u66F4\u65B0\u5668 (\u4E3B\u6D41\u7A0B)\n *\n * 1. \u4E34\u65F6 staging \u76EE\u5F55 (mkdtempSync) - \u907F\u514D\u6C61\u67D3\u6570\u636E\u6839\n * 2. \u4E0B\u8F7D/\u89E3\u538B\u5931\u8D25 \u2192 \u81EA\u52A8\u4ECE\u5907\u4EFD\u56DE\u6EDA preserves\n * 3. \u6D41\u5F0F SHA256 \u6821\u9A8C - \u4E0D\u628A 250MB \u6587\u4EF6\u8BFB\u5165\u5185\u5B58\n * 4. \u517C\u5BB9\u7248\u672C\u767D\u540D\u5355 - \u4E0D\u5339\u914D\u5219\u8DF3\u8FC7\u5347\u7EA7\n * 5. QQ \u901A\u77E5\u7EDF\u4E00\u52A0 5s \u8D85\u65F6 - \u6C38\u8FDC\u4E0D\u963B\u585E\u4E3B\u6D41\u7A0B\n * 6. Rollback marker \u843D\u76D8\u5230 <ROOT>/.sfmc/ - \u8DE8\u8FDB\u7A0B / \u8DE8\u91CD\u542F\u53EF\u6062\u590D\n */\n\nimport {\n bindByteProgressToBar,\n createNodeServiceLogger,\n createTerminalProgress,\n} from \"@sfmc-bds/sdk/logs\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { createBdsManager } from \"./bds-manager.js\";\nimport { CHANGELOG_BASE, fetchChangelog } from \"./changelog.js\";\nimport { copyDirSync, emptyDirSync, hashFileAsync, rmSafe } from \"./fsx.js\";\nimport { httpDownload } from \"./http.js\";\nimport { isMainModule } from \"./is-main.js\";\nimport { loadConfig, LOG_PATH, resolvePaths } from \"./paths.js\";\nimport { sendText, sendWithImage } from \"./qqutil.js\";\nimport {\n clearRollbackMarker,\n getDirSize,\n rollbackFromBackup,\n verifyBdsInstall,\n writeRollbackMarker,\n} from \"./rollback.js\";\nimport { ensureEmitServerTelemetry } from \"./server-properties.js\";\nimport { clearTaskbarProgress, isTaskbarSupported, setTaskbarProgress } from \"./taskbar.js\";\nimport { emitUpdateResult } from \"./update-result.js\";\nimport {\n buildDownloadUrls,\n fetchVersionDetails,\n getVersionInfo,\n isVersionCompatible,\n verifyFileHash,\n} from \"./upstream.js\";\nimport { compareVersions, getCurrentVersionAsync, getCurrentVersionSync, saveVersionCache } from \"./version.js\";\nimport { extractZipFileToDir } from \"./zipx.js\";\n\n// \u72EC\u7ACB\u5165\u53E3:source = \"updater\",\u4E0E bds-manager \u7684 \"bds-tools\" \u533A\u5206;\u540C\u843D\u76D8 bds-update.log\nconst log = createNodeServiceLogger({ source: \"updater\", logPath: LOG_PATH });\nconst closeLog = (): void => log.close();\n\nfunction parseArgs(argv: string[]): Record<string, string | boolean> {\n const out: Record<string, string | boolean> = {};\n for (const a of argv) {\n const m = a.match(/^--([\\w-]+)(?:=(.+))?$/);\n if (m) out[m[1]!] = m[2] || true;\n }\n return out;\n}\n\ninterface UpdateContext {\n cfg: ReturnType<typeof loadConfig>;\n channel: \"release\" | \"preview\" | string;\n checkOnly: boolean;\n force: boolean;\n bdsPath: string;\n backupDir: string;\n preserve: string[];\n autoRestart: boolean;\n qqNotify: boolean;\n}\n\nfunction buildContext(): UpdateContext {\n const cfg = loadConfig();\n const args = parseArgs(process.argv.slice(2));\n const { bds_path, backup_dir, preserve } = resolvePaths(cfg);\n const channel = String(args[\"channel\"] || cfg.channel || \"release\");\n return {\n cfg,\n channel,\n checkOnly: !!args[\"check-only\"],\n force: !!args[\"force\"],\n bdsPath: bds_path,\n backupDir: backup_dir,\n preserve,\n autoRestart: !args[\"no-start\"] && cfg.auto_restart !== false,\n qqNotify: !!cfg.qq_notify,\n };\n}\n\nasync function doBackup(\n bdsPath: string,\n backupDir: string,\n preserve: string[]\n): Promise<{ path: string; size: number }> {\n const dateStr = new Date().toISOString().slice(0, 10);\n const dest = path.join(backupDir, dateStr);\n fs.mkdirSync(dest, { recursive: true });\n\n let anyCopied = false;\n for (const item of preserve) {\n const src = path.join(bdsPath, item);\n const target = path.join(dest, item);\n if (!fs.existsSync(src)) continue;\n fs.mkdirSync(path.dirname(target), { recursive: true });\n if (fs.statSync(src).isDirectory()) copyDirSync(src, target);\n else fs.copyFileSync(src, target);\n anyCopied = true;\n log.info(`\u5DF2\u5907\u4EFD: ${item}`);\n }\n\n // \u5373\u4F7F\u5168\u90E8 preserve \u90FD\u8DF3\u8FC7\uFF0C\u4E5F\u8BA9\u76EE\u5F55\u5B58\u5728\u4EE5\u4FBF\u8BB0\u5F55\u65F6\u95F4\u6233\n if (!anyCopied) {\n log.info(`\u6CA1\u6709\u9700\u8981\u5907\u4EFD\u7684\u6587\u4EF6 (preserve \u5217\u8868\u4E3A\u7A7A\u6216\u5168\u90E8\u7F3A\u5931)`);\n }\n return { path: dest, size: getDirSize(dest) };\n}\n\n/** \u5F02\u6B65\u6062\u590D preserves \u4ECE\u5907\u4EFD\u5230 BDS \u8DEF\u5F84 */\nasync function restorePreserves(bdsPath: string, backupDir: string, preserve: string[]): Promise<void> {\n for (const item of preserve) {\n const src = path.join(backupDir, item);\n const dest = path.join(bdsPath, item);\n if (!fs.existsSync(src)) continue;\n try {\n if (fs.statSync(src).isDirectory()) {\n if (fs.existsSync(dest)) emptyDirSync(dest);\n copyDirSync(src, dest);\n } else {\n fs.mkdirSync(path.dirname(dest), { recursive: true });\n fs.copyFileSync(src, dest);\n }\n log.info(`\u5DF2\u6062\u590D: ${item}`);\n } catch (e) {\n log.warn(`\u6062\u590D\u5931\u8D25 ${item}: ${(e as Error).message}`);\n }\n }\n}\n\n/** \u628A zip \u89E3\u538B\u5230 destDir (\u8986\u76D6) \u2014 \u7ECF zipx \u5B89\u5168\u89E3\u538B */\nasync function extractZipToBds(zipPath: string, destDir: string): Promise<void> {\n // \u62BD\u51FA\u5230\u4E34\u65F6\u76EE\u5F55\uFF0C\u907F\u514D\u65E7\u5185\u5BB9\u5E72\u6270\n const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), \"bds-extract-\"));\n try {\n await extractZipFileToDir(zipPath, tmpDir);\n // \u628A\u4E34\u65F6\u76EE\u5F55\u91CC\u7684\u5185\u5BB9\u590D\u5236\u5230 BDS \u8DEF\u5F84\n for (const entry of fs.readdirSync(tmpDir)) {\n const srcPath = path.join(tmpDir, entry);\n const destPath = path.join(destDir, entry);\n if (fs.statSync(srcPath).isDirectory()) {\n if (fs.existsSync(destPath)) emptyDirSync(destPath);\n copyDirSync(srcPath, destPath);\n } else {\n fs.copyFileSync(srcPath, destPath);\n }\n }\n } finally {\n rmSafe(tmpDir);\n }\n}\n\nexport async function runUpdate(): Promise<number> {\n const startTime = Date.now();\n const ctx = buildContext();\n const { cfg, channel, checkOnly, force, bdsPath, backupDir, preserve, autoRestart, qqNotify } = ctx;\n\n log.info(`===== \u5F00\u59CB\u68C0\u67E5\u66F4\u65B0 (${channel}) =====`);\n fs.mkdirSync(bdsPath, { recursive: true });\n fs.mkdirSync(backupDir, { recursive: true });\n\n // 1. \u5F53\u524D\u7248\u672C\n const exePath = path.join(bdsPath, \"bedrock_server.exe\");\n const currentVer = await getCurrentVersionAsync(exePath).catch(() => getCurrentVersionSync(exePath));\n log.info(`\u5F53\u524D\u7248\u672C: ${currentVer}`);\n\n // 2. \u83B7\u53D6\u6700\u65B0\u7248\u672C\n let latestVer: string;\n try {\n const info = await getVersionInfo(cfg, channel);\n latestVer = info.version;\n log.info(`\u6700\u65B0\u7248\u672C: ${latestVer}`);\n const cmp = compareVersions(latestVer, currentVer);\n if (cmp <= 0 && !force) {\n log.info(\"\u5DF2\u662F\u6700\u65B0\u7248\u672C\uFF0C\u65E0\u9700\u66F4\u65B0\");\n if (qqNotify) {\n await sendText(`\u2705 BDS \u5DF2\u662F\u6700\u65B0\u7248\u672C\\n\\n\u5F53\u524D: ${currentVer}\\n\u6700\u65B0: ${latestVer}`);\n }\n console.log(`CURRENT=${currentVer}`);\n console.log(`LATEST=${latestVer}`);\n emitUpdateResult(\"uptodate\");\n return 0;\n }\n } catch (e) {\n log.error(`\u83B7\u53D6\u7248\u672C\u4FE1\u606F\u5931\u8D25: ${(e as Error).message}`);\n await sendText(`\u274C BDS \u66F4\u65B0\u5931\u8D25\\n\\n\u65E0\u6CD5\u83B7\u53D6\u7248\u672C\u4FE1\u606F: ${(e as Error).message}`);\n return 1;\n }\n\n // \u517C\u5BB9\u6027\u68C0\u67E5\n if (!force && !isVersionCompatible(cfg, latestVer)) {\n log.warn(`${latestVer} \u4E0D\u5728\u517C\u5BB9\u7248\u672C\u767D\u540D\u5355\u4E2D\uFF0C\u8DF3\u8FC7\u5347\u7EA7`);\n if (qqNotify) {\n await sendText(`\u26A0\uFE0F BDS ${latestVer} \u4E0D\u5728\u517C\u5BB9\u6027\u767D\u540D\u5355\uFF0C\u5DF2\u8DF3\u8FC7\u5347\u7EA7\u3002\u8BF7\u4EBA\u5DE5\u786E\u8BA4\u3002`);\n }\n emitUpdateResult(\"skipped\");\n return 2;\n }\n\n // 3. \u53D6\u4E0B\u8F7D\u94FE\u63A5\n let downloadUrls: string[];\n let hash: { sha1: string; sha256: string };\n try {\n const details = await fetchVersionDetails(cfg, channel, latestVer);\n downloadUrls = buildDownloadUrls(cfg, channel, latestVer, details);\n hash = { sha1: details.sha1, sha256: details.sha256 };\n } catch (e) {\n log.error(`\u83B7\u53D6\u4E0B\u8F7D\u8BE6\u60C5\u5931\u8D25: ${(e as Error).message}`);\n await sendText(`\u274C BDS \u66F4\u65B0\u5931\u8D25\\n\\n\u4E0B\u8F7D\u8BE6\u60C5\u83B7\u53D6\u5931\u8D25: ${(e as Error).message}`);\n return 1;\n }\n\n if (checkOnly) {\n console.log(`CURRENT=${currentVer}`);\n console.log(`LATEST=${latestVer}`);\n console.log(`CHANNEL=${channel}`);\n console.log(`URLS=${downloadUrls.length}`);\n emitUpdateResult(\"check-only\");\n return 0;\n }\n\n log.info(`\u53D1\u73B0\u65B0\u7248\u672C: ${currentVer} \u2192 ${latestVer}`);\n\n // 4. QQ \u9884\u544A\n if (qqNotify) {\n await sendText(\n `\uD835\uDC0C\uD835\uDC22\uD835\uDC27\uD835\uDC1E\uD835\uDC1C\uD835\uDC2B\uD835\uDC1A\uD835\uDC1F\uD835\uDC2D \uD835\uDC01\uD835\uDC03\uD835\uDC12 \u66F4\u65B0\u901A\u77E5\\n\\n` +\n `\u68C0\u6D4B\u5230\u65B0\u7248\u672C\uFF01\\n\\n` +\n `\u5F53\u524D: ${currentVer}\\n` +\n `\u6700\u65B0: ${latestVer}\\n` +\n `\u9891\u9053: ${channel === \"preview\" ? \"\u9884\u89C8\u7248\" : \"\u6B63\u5F0F\u7248\"}\\n\\n` +\n `\u670D\u52A1\u5668\u5373\u5C06\u5F00\u59CB\u66F4\u65B0~ \u8BF7\u8010\u5FC3\u7B49\u5F85^(*\uFFE3(oo)\uFFE3)^`\n );\n const cl = await fetchChangelog(channel);\n if (cl) {\n const text = `\uD83D\uDCCB \u66F4\u65B0\u5185\u5BB9\u6982\u8981\\n\\n${cl.text.slice(0, 1500)}\\n\\n\u5B8C\u6574\u65E5\u5FD7: ${CHANGELOG_BASE}`;\n if (cl.imageBase64) await sendWithImage(text, cl.imageBase64);\n else await sendText(text);\n } else {\n await sendText(`\uD83D\uDCCB \u66F4\u65B0\u65E5\u5FD7: ${CHANGELOG_BASE}`);\n }\n }\n\n // 5. \u5907\u4EFD\n let backupInfo: { path: string; size: number };\n try {\n backupInfo = await doBackup(bdsPath, backupDir, preserve);\n log.info(`\u5907\u4EFD\u5B8C\u6210: ${backupInfo.path} (${(backupInfo.size / 1024 / 1024).toFixed(1)} MB)`);\n if (qqNotify) {\n await sendText(`\u2705 \u5907\u4EFD\u5B8C\u6210\\n\\n\u5927\u5C0F: ${(backupInfo.size / 1024 / 1024).toFixed(1)} MB\\n\u4F4D\u7F6E: ${backupInfo.path}`);\n }\n } catch (e) {\n log.error(`\u5907\u4EFD\u5931\u8D25: ${(e as Error).message}`);\n await sendText(`\u274C BDS \u66F4\u65B0\u5931\u8D25\\n\\n\u5907\u4EFD\u5931\u8D25: ${(e as Error).message}\\n\u64CD\u4F5C\u5DF2\u4E2D\u6B62`);\n return 1;\n }\n\n // 6. \u5199\u56DE\u6EDA\u6807\u8BB0 (\u8DE8\u8FDB\u7A0B\u53EF\u6062\u590D)\n writeRollbackMarker({\n timestamp: Date.now(),\n bds_path: bdsPath,\n backup_dir: backupInfo.path,\n preserve,\n previous_version: currentVer,\n });\n\n // 7. \u505C\u670D\n const bds = createBdsManager({ detached: true });\n try {\n log.info(\"\u505C\u6B62 BDS \u670D\u52A1...\");\n await bds.stop();\n log.info(\"BDS \u5DF2\u505C\u6B62\");\n } catch (e) {\n log.warn(`BDS \u505C\u6B62\u5F02\u5E38: ${(e as Error).message}`);\n }\n\n // 8. \u4E0B\u8F7D (\u5168\u90E8\u5931\u8D25\u5219\u56DE\u6EDA)\n // \u7528 mkdtempSync \u521B\u5EFA\u4E34\u65F6 staging \u76EE\u5F55 - \u907F\u514D\u6C61\u67D3 SCRIPT_DIR\n const stagingDir = fs.mkdtempSync(path.join(os.tmpdir(), \"bds-update-\"));\n const zipPath = path.join(stagingDir, `bedrock-server-${latestVer}.zip`);\n let downloaded = false;\n try {\n log.info(`\u5F00\u59CB\u4E0B\u8F7D ${latestVer}...`);\n if (qqNotify) await sendText(`\uD83D\uDCE5 \u6B63\u5728\u4E0B\u8F7D BDS ${latestVer}...`);\n\n let lastErr: Error | null = null;\n const downloadTimeoutMs = (cfg.download_timeout ?? 120) * 1000;\n /* stderr \u88AB pipe \u65F6\u4E0D\u753B bar\uFF1B\u7528\u6587\u672C\u8FDB\u5EA6\u7ED9 sfmc REPL \u7B49\u7236\u8FDB\u7A0B */\n if (isTaskbarSupported() && process.stdout.isTTY) {\n log.info(\"\u68C0\u6D4B\u5230 Windows Terminal,\u4EFB\u52A1\u680F\u8FDB\u5EA6\u5DF2\u542F\u7528 (OSC 9;4)\");\n }\n for (const url of downloadUrls) {\n /* \u6BCF\u6B21\u5C1D\u8BD5\u65B0\u5EFA bar + binder\uFF0C\u907F\u514D\u5931\u8D25\u91CD\u8BD5\u65F6 started \u72B6\u6001\u6B8B\u7559\uFF08LSP\uFF09 */\n const progressBar = createTerminalProgress({\n stream: process.stderr,\n logger: (msg) => log.info(msg.startsWith(\"\u8FDB\u5EA6\") ? `\u4E0B\u8F7D${msg.slice(2)}` : msg),\n format: \"\u4E0B\u8F7D\u8FDB\u5EA6 | {bar} | {percentage}% | {value}/{total} MB | \u901F\u5EA6: {speed}\",\n });\n const onByteProgress = bindByteProgressToBar(progressBar, {\n speedSampleMs: 0,\n onProgress: (dl, total) => {\n const pct = total > 0 ? (dl / total) * 100 : 0;\n setTaskbarProgress(pct);\n },\n });\n try {\n setTaskbarProgress(0);\n await httpDownload(url, zipPath, {\n totalTimeoutMs: Math.max(downloadTimeoutMs, 600_000), // \u4E0D\u5C11\u4E8E 10 \u5206\u949F\n onProgress: onByteProgress,\n });\n if (progressBar.active) progressBar.stop();\n // \u4E0B\u8F7D\u5B8C\u6210,\u4EFB\u52A1\u680F\u6536\u5230 100% \u7EFF\u6761\u540E\u6E05\u6389\n setTaskbarProgress(100);\n clearTaskbarProgress();\n downloaded = true;\n lastErr = null;\n break;\n } catch (e) {\n if (progressBar.active) progressBar.stop();\n // \u4E0B\u8F7D\u5931\u8D25,\u4EFB\u52A1\u680F\u4EAE\u7EA2\n setTaskbarProgress(100, \"error\");\n clearTaskbarProgress();\n lastErr = e as Error;\n log.warn(`${url} \u4E0D\u53EF\u7528: ${lastErr.message}\uFF0C\u5C1D\u8BD5\u5907\u7528\u5730\u5740...`);\n }\n }\n if (!downloaded && lastErr) throw lastErr;\n\n const zipSizeMB = (fs.statSync(zipPath).size / 1024 / 1024).toFixed(1);\n log.info(`\u4E0B\u8F7D\u5B8C\u6210 (${zipSizeMB} MB)`);\n\n // \u6D41\u5F0F\u54C8\u5E0C\u6821\u9A8C\n if (hash.sha1 || hash.sha256) {\n const algo = hash.sha256 ? \"SHA256\" : \"SHA1\";\n log.info(`\u6821\u9A8C\u6587\u4EF6\u5B8C\u6574\u6027 (${algo})...`);\n const ok = await verifyFileHash(zipPath, hash.sha1, hash.sha256);\n if (!ok) throw new Error(`${algo} \u6821\u9A8C\u4E0D\u901A\u8FC7\uFF0C\u6587\u4EF6\u53EF\u80FD\u635F\u574F`);\n log.info(`${algo} \u6821\u9A8C\u901A\u8FC7`);\n }\n } catch (e) {\n log.error(`\u4E0B\u8F7D\u5931\u8D25: ${(e as Error).message}`);\n await sendText(`\u274C BDS \u66F4\u65B0\u5931\u8D25\\n\\n\u4E0B\u8F7D\u5931\u8D25: ${(e as Error).message}\\nBDS \u5DF2\u505C\u6B62\uFF0C\u8BF7\u624B\u52A8\u6062\u590D`);\n // \u81EA\u52A8\u56DE\u6EDA\n rollbackFromBackup({\n timestamp: Date.now(),\n bds_path: bdsPath,\n backup_dir: backupInfo.path,\n preserve,\n previous_version: currentVer,\n });\n rmSafe(stagingDir);\n return 1;\n }\n\n // 9. \u89E3\u538B + \u90E8\u7F72\n try {\n log.info(\"\u89E3\u538B\u4E2D...\");\n // \u5148\u6E05\u7A7A BDS \u76EE\u5F55\n emptyDirSync(bdsPath);\n await extractZipToBds(zipPath, bdsPath);\n log.info(\"\u89E3\u538B\u5B8C\u6210\");\n } catch (e) {\n log.error(`\u89E3\u538B\u5931\u8D25: ${(e as Error).message}`);\n await sendText(`\u274C BDS \u66F4\u65B0\u5931\u8D25\\n\\n\u89E3\u538B\u5931\u8D25: ${(e as Error).message}\\nBDS \u5DF2\u505C\u6B62\uFF0C\u8BF7\u624B\u52A8\u6062\u590D`);\n // \u56DE\u6EDA: \u6E05\u7A7A + \u4ECE\u5907\u4EFD\u6062\u590D preserves\n emptyDirSync(bdsPath);\n await restorePreserves(bdsPath, backupInfo.path, preserve);\n rmSafe(stagingDir);\n return 1;\n } finally {\n rmSafe(zipPath); // \u6E05\u6389 staging zip\n }\n\n // 10. \u5B8C\u6574\u6027\u68C0\u67E5 (\u907F\u514D\u89E3\u538B\u51FA\u7A7A/\u7F3A\u6587\u4EF6\u7684\u75C5\u6001\u5305)\n const verify = verifyBdsInstall(bdsPath, [\n \"bedrock_server.exe\",\n /*\"bedrock_server_symbols.debug\",*/ \"permissions.json\",\n ]);\n if (!verify.ok) {\n log.error(`\u89E3\u538B\u540E\u7684 BDS \u4E0D\u5B8C\u6574\uFF0C\u7F3A\u5931\u6587\u4EF6: ${verify.missing.join(\", \")}`);\n await sendText(`\u274C BDS \u66F4\u65B0\u5931\u8D25\\n\\n\u90E8\u7F72\u540E\u7F3A\u5931\u5173\u952E\u6587\u4EF6: ${verify.missing.join(\", \")}`);\n emptyDirSync(bdsPath);\n await restorePreserves(bdsPath, backupInfo.path, preserve);\n rmSafe(stagingDir);\n return 1;\n }\n\n // 11. \u6062\u590D preserves (zip \u89E3\u538B\u65F6\u8FD9\u4E9B\u76EE\u5F55\u53EF\u80FD\u88AB\u8986\u76D6)\n await restorePreserves(bdsPath, backupInfo.path, preserve);\n\n // 11b. \u5B89\u88C5\u6536\u5C3E\uFF1A\u56E0 EULA \u5DF2\u540C\u610F\uFF0C\u786E\u4FDD\u9065\u6D4B\u5F00\u5173\uFF08\u5DF2\u6709\u5219\u8DF3\u8FC7\uFF09\n ensureEmitServerTelemetry(bdsPath, log);\n\n // 12. \u5199\u5165\u7248\u672C\u7F13\u5B58\n const newExeHash = await hashFileAsync(exePath, \"sha256\").catch(() => \"\");\n if (newExeHash) {\n saveVersionCache(latestVer, newExeHash);\n log.info(`\u5DF2\u8BB0\u5F55\u7248\u672C ${latestVer} \u7684 SHA256`);\n }\n\n // 13. \u542F\u52A8 BDS\n if (autoRestart) {\n try {\n log.info(\"\u542F\u52A8 BDS...\");\n await bds.start();\n } catch (e) {\n log.error(`\u542F\u52A8\u5931\u8D25: ${(e as Error).message}`);\n await sendText(`\u274C BDS \u66F4\u65B0\u5931\u8D25\\n\\n\u542F\u52A8\u5931\u8D25: ${(e as Error).message}\\n\u8BF7\u624B\u52A8\u542F\u52A8 BDS`);\n // \u6CE8\u610F: \u6B64\u65F6 BDS \u5DF2\u7ECF\u90E8\u7F72\u5B8C\u6210\uFF0C\u542F\u52A8\u5931\u8D25 \u2192 \u542F\u52A8\u95EE\u9898\uFF0C\u4E0D\u505A\u6587\u4EF6\u7EA7\u56DE\u6EDA\n rmSafe(stagingDir);\n clearRollbackMarker();\n return 1;\n }\n }\n\n rmSafe(stagingDir);\n clearRollbackMarker();\n\n // 14. QQ \u901A\u77E5\u7ED3\u679C\n const durationMs = Date.now() - startTime;\n if (qqNotify) {\n await sendText(\n `\u2705 BDS \u66F4\u65B0\u5B8C\u6210\\n\\n` +\n `${currentVer} \u2192 ${latestVer}\\n` +\n `\u8017\u65F6: ${(durationMs / 1000).toFixed(1)}s\\n` +\n `${autoRestart ? \"\u670D\u52A1\u5668\u5DF2\u91CD\u65B0\u542F\u52A8\" : \"\u8BF7\u624B\u52A8\u91CD\u542F\u670D\u52A1\u5668\"}`\n );\n }\n log.info(`===== \u66F4\u65B0\u5B8C\u6210 (${(durationMs / 1000).toFixed(1)}s) =====`);\n /* \u673A\u5668\u53EF\u8BFB\u7ED3\u679C\u6807\u8BB0\uFF1A\u4F9B sfmc \u7B49\u76D1\u7763\u5668\u5224\u65AD\u300C\u771F\u6B63\u5B8C\u6210\u90E8\u7F72\u300D\uFF0C\u52FF\u4F9D\u8D56\u672C\u5730\u5316\u65E5\u5FD7\u6587\u6848\u3002 */\n emitUpdateResult(\"deployed\");\n return 0;\n}\n\nfunction isMain(): boolean {\n // sfmc supervisor \u901A\u8FC7 SFMC_SERVICE \u62C9\u8D77\u5B50\u8FDB\u7A0B\u65F6\u4F18\u5148\u5224\u5B9A\n if (process.env.SFMC_SERVICE === \"update\") return true;\n return isMainModule(import.meta.url);\n}\n\nif (isMain()) {\n runUpdate()\n .then((code) => {\n closeLog();\n process.exit(code);\n })\n .catch((e) => {\n log.error(`\u672A\u6355\u83B7\u9519\u8BEF: ${(e as Error).message}`);\n closeLog();\n process.exit(1);\n });\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -3,16 +3,20 @@
3
3
  * pack-manager CLI — thin wrapper around the pack-manager pure functions
4
4
  * so spawnService can call it as a sub-process.
5
5
  *
6
- * node bds-tools/dist/pack-manager.js assemble-bp --src <dir> --out <dir> --name <name> [--version 1,0,0] [--description "..."] [--icon <png>]
7
- * node bds-tools/dist/pack-manager.js assemble-rp --modules-dir <dir> --out <dir> --name <name> [--version 1,0,0] [--description "..."]
8
- * node bds-tools/dist/pack-manager.js deploy --bds-root <dir> --level <name> --bp-src <dir> [--rp-src <dir>] --bp-name <name> [--rp-name <name>]
6
+ * node bds-tools/dist/pack-manager.js assemble-bp --src <dir> --out <dir> --name <name> [--uuid <uuid>] [--module-uuid <uuid>] [--version 1,0,0] [--description "..."] [--icon <png>]
7
+ * node bds-tools/dist/pack-manager.js assemble-rp (--modules-dir <dir>|--modules-json <file>) --out <dir> --name <name> [--uuid <uuid>] [--module-uuid <uuid>] [--version 1,0,0] [--description "..."]
8
+ * node bds-tools/dist/pack-manager.js deploy --bds-root <dir> --level <name> --bp-src <dir> [--rp-src <dir>] --bp-name <name> [--rp-name <name>] [--clear-rp]
9
9
  * node bds-tools/dist/pack-manager.js enable-pack --worlds-dir <dir> --level <name> --kind behavior|resource --pack-id <uuid> --version 1,0,0
10
10
  * node bds-tools/dist/pack-manager.js disable-pack --worlds-dir <dir> --level <name> --kind behavior|resource --pack-id <uuid>
11
+ * node bds-tools/dist/pack-manager.js ensure-permission --bds-root <dir> --pack-id <uuid>
11
12
  * node bds-tools/dist/pack-manager.js read-level --bds-root <dir>
13
+ * node bds-tools/dist/pack-manager.js read-manifest --pack-dir <dir>
14
+ * node bds-tools/dist/pack-manager.js has-pack --worlds-dir <dir> --level <name> --kind behavior|resource --pack-id <uuid>
15
+ * node bds-tools/dist/pack-manager.js list-packs --worlds-dir <dir> --level <name> --kind behavior|resource
12
16
  *
13
- * The pure-function API lives in pack-manager.ts. This CLI exists so the
14
- * SEA-launched child process doesn't have to deal with module resolution —
15
- * it just gets spawnService-injected SFMC_ROOT, finds its own dist sibling,
17
+ * The pure-function API lives in pack-manager.ts. This CLI exists so a
18
+ * spawnService child process doesn't have to deal with module resolution —
19
+ * it just gets SFMC_ROOT injected, finds its own dist sibling,
16
20
  * and reads JSON flags from argv.
17
21
  */
18
22
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"cli-pack-manager.d.ts","sourceRoot":"","sources":["../src/cli-pack-manager.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;GAeG"}
1
+ {"version":3,"file":"cli-pack-manager.d.ts","sourceRoot":"","sources":["../src/cli-pack-manager.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;GAmBG"}
@@ -1,154 +1,245 @@
1
1
  #!/usr/bin/env node
2
- /**
3
- * pack-manager CLI — thin wrapper around the pack-manager pure functions
4
- * so spawnService can call it as a sub-process.
5
- *
6
- * node bds-tools/dist/pack-manager.js assemble-bp --src <dir> --out <dir> --name <name> [--version 1,0,0] [--description "..."] [--icon <png>]
7
- * node bds-tools/dist/pack-manager.js assemble-rp --modules-dir <dir> --out <dir> --name <name> [--version 1,0,0] [--description "..."]
8
- * node bds-tools/dist/pack-manager.js deploy --bds-root <dir> --level <name> --bp-src <dir> [--rp-src <dir>] --bp-name <name> [--rp-name <name>]
9
- * node bds-tools/dist/pack-manager.js enable-pack --worlds-dir <dir> --level <name> --kind behavior|resource --pack-id <uuid> --version 1,0,0
10
- * node bds-tools/dist/pack-manager.js disable-pack --worlds-dir <dir> --level <name> --kind behavior|resource --pack-id <uuid>
11
- * node bds-tools/dist/pack-manager.js read-level --bds-root <dir>
12
- *
13
- * The pure-function API lives in pack-manager.ts. This CLI exists so the
14
- * SEA-launched child process doesn't have to deal with module resolution —
15
- * it just gets spawnService-injected SFMC_ROOT, finds its own dist sibling,
16
- * and reads JSON flags from argv.
17
- */
18
2
  import path from "node:path";
19
3
  import process from "node:process";
20
4
  import { readLevelName } from "./pack-manager.js";
21
5
  function die(msg, code = 1) {
22
- process.stderr.write(`[pack-manager] ${msg}\n`);
23
- process.exit(code);
6
+ process.stderr.write(`[pack-manager] ${msg}
7
+ `);
8
+ process.exit(code);
24
9
  }
25
10
  function parseArgs(argv) {
26
- const out = {};
27
- for (let i = 0; i < argv.length; i++) {
28
- const a = argv[i];
29
- if (a && a.startsWith("--")) {
30
- const key = a.slice(2);
31
- const next = argv[++i];
32
- out[key] = next;
33
- }
11
+ const out = {};
12
+ for (let i = 0; i < argv.length; i++) {
13
+ const a = argv[i];
14
+ if (a && a.startsWith("--")) {
15
+ const key = a.slice(2);
16
+ const next = argv[++i];
17
+ if (next === void 0 || next.startsWith("--")) {
18
+ out[key] = "1";
19
+ if (next !== void 0) i--;
20
+ } else {
21
+ out[key] = next;
22
+ }
34
23
  }
35
- return out;
24
+ }
25
+ return out;
36
26
  }
37
27
  function need(args, key) {
38
- const v = args[key];
39
- if (!v)
40
- die(`--${key} required`);
41
- return v;
28
+ const v = args[key];
29
+ if (!v) die(`--${key} required`);
30
+ return v;
42
31
  }
43
32
  function parseVersion(s) {
44
- if (!s)
45
- return [1, 0, 0];
46
- const parts = s.split(",").map((x) => Number(x.trim()));
47
- if (parts.length !== 3 || parts.some((n) => !Number.isInteger(n) || n < 0)) {
48
- die(`invalid --version (expected "M,m,p"): ${s}`);
49
- }
50
- return parts;
33
+ if (!s) return [1, 0, 0];
34
+ const parts = s.split(",").map((x) => Number(x.trim()));
35
+ if (parts.length !== 3 || parts.some((n) => !Number.isInteger(n) || n < 0)) {
36
+ die(`invalid --version (expected "M,m,p"): ${s}`);
37
+ }
38
+ return parts;
51
39
  }
52
40
  async function main() {
53
- const argv = process.argv.slice(2);
54
- if (argv.length === 0) {
55
- die("usage: pack-manager <verb> [--flags]");
41
+ const argv = process.argv.slice(2);
42
+ if (argv.length === 0) {
43
+ die("usage: pack-manager <verb> [--flags]");
44
+ }
45
+ const verb = argv[0];
46
+ const args = parseArgs(argv.slice(1));
47
+ const mod = await import("./pack-manager.js");
48
+ switch (verb) {
49
+ case "assemble-bp": {
50
+ const src = need(args, "src");
51
+ const out = need(args, "out");
52
+ const name = need(args, "name");
53
+ const icon = args["icon"];
54
+ await mod.assembleBehaviorPack({
55
+ srcDir: path.resolve(src),
56
+ outDir: path.resolve(out),
57
+ projectName: name,
58
+ version: parseVersion(args["version"]),
59
+ description: args["description"],
60
+ ...icon ? { iconSrc: path.resolve(icon) } : {},
61
+ ...args["uuid"] ? { uuid: args["uuid"] } : {},
62
+ ...args["module-uuid"] ? { moduleUuid: args["module-uuid"] } : {}
63
+ });
64
+ process.stdout.write(`[pack-manager] assembled BP at ${out}
65
+ `);
66
+ return;
67
+ }
68
+ case "assemble-rp": {
69
+ const out = need(args, "out");
70
+ const name = need(args, "name");
71
+ let map;
72
+ if (args["modules-json"]) {
73
+ map = mod.loadModuleResourcePackMap(path.resolve(args["modules-json"]));
74
+ } else {
75
+ const modulesDir = need(args, "modules-dir");
76
+ map = mod.scanModuleResourcePacks(path.resolve(modulesDir));
77
+ }
78
+ await mod.assembleResourcePack({
79
+ moduleResourceDirs: map,
80
+ outDir: path.resolve(out),
81
+ projectName: name,
82
+ version: parseVersion(args["version"]),
83
+ description: args["description"],
84
+ ...args["uuid"] ? { uuid: args["uuid"] } : {},
85
+ ...args["module-uuid"] ? { moduleUuid: args["module-uuid"] } : {}
86
+ });
87
+ process.stdout.write(`[pack-manager] assembled RP at ${out} (${Object.keys(map).length} modules)
88
+ `);
89
+ return;
90
+ }
91
+ case "deploy": {
92
+ const bdsRoot = need(args, "bds-root");
93
+ const level = need(args, "level");
94
+ const bpSrc = need(args, "bp-src");
95
+ const bpName = need(args, "bp-name");
96
+ const rpSrc = args["rp-src"];
97
+ const rpName = args["rp-name"];
98
+ const clearRp = args["clear-rp"] === "1" || args["clear-rp"] === "true";
99
+ await mod.deployToBDS({
100
+ bdsRoot: path.resolve(bdsRoot),
101
+ levelName: level,
102
+ behaviorPackSrc: path.resolve(bpSrc),
103
+ ...rpSrc ? { resourcePackSrc: path.resolve(rpSrc) } : {},
104
+ bpName,
105
+ ...rpName ? { rpName } : {},
106
+ ...clearRp ? { clearResourcePack: true } : {}
107
+ });
108
+ process.stdout.write(`[pack-manager] deployed to ${mod.bdsWorldLevelDir(path.resolve(bdsRoot), level)}
109
+ `);
110
+ return;
111
+ }
112
+ case "enable-pack": {
113
+ const worldsDir = need(args, "worlds-dir");
114
+ const level = need(args, "level");
115
+ const kind = need(args, "kind");
116
+ const packId = need(args, "pack-id");
117
+ await mod.enablePackInWorld({
118
+ worldsDir: path.resolve(worldsDir),
119
+ levelName: level,
120
+ kind,
121
+ packUuid: packId,
122
+ version: parseVersion(args["version"])
123
+ });
124
+ process.stdout.write(`[pack-manager] enabled ${kind} pack ${packId} in ${level}
125
+ `);
126
+ return;
127
+ }
128
+ case "disable-pack": {
129
+ const worldsDir = need(args, "worlds-dir");
130
+ const level = need(args, "level");
131
+ const kind = need(args, "kind");
132
+ const packId = need(args, "pack-id");
133
+ await mod.disablePackInWorld({
134
+ worldsDir: path.resolve(worldsDir),
135
+ levelName: level,
136
+ kind,
137
+ packUuid: packId,
138
+ version: parseVersion(args["version"] ?? "1,0,0")
139
+ });
140
+ process.stdout.write(`[pack-manager] disabled ${kind} pack ${packId} in ${level}
141
+ `);
142
+ return;
143
+ }
144
+ case "ensure-permission": {
145
+ const bdsRoot = need(args, "bds-root");
146
+ const packId = need(args, "pack-id");
147
+ const root = path.resolve(bdsRoot);
148
+ const wrote = await mod.ensureConfigPermission(root, packId);
149
+ const rel = path.relative(root, mod.configPermissionPath(root, packId));
150
+ process.stdout.write(
151
+ wrote ? `[pack-manager] wrote ${rel}
152
+ ` : `[pack-manager] ${rel} already exists \u2014 skipped
153
+ `
154
+ );
155
+ return;
156
+ }
157
+ case "read-level": {
158
+ const root = need(args, "bds-root");
159
+ const name = await readLevelName(path.resolve(root));
160
+ process.stdout.write(`${name}
161
+ `);
162
+ return;
163
+ }
164
+ case "read-manifest": {
165
+ const packDir = need(args, "pack-dir");
166
+ const header = mod.readPackManifestHeader(path.resolve(packDir));
167
+ if (!header) {
168
+ process.stdout.write("null\n");
169
+ return;
170
+ }
171
+ process.stdout.write(`${JSON.stringify(header)}
172
+ `);
173
+ return;
174
+ }
175
+ case "has-pack": {
176
+ const worldsDir = need(args, "worlds-dir");
177
+ const level = need(args, "level");
178
+ const kind = need(args, "kind");
179
+ const packId = need(args, "pack-id");
180
+ const ok = mod.worldPackListHas(path.resolve(worldsDir), level, kind, packId);
181
+ process.stdout.write(ok ? "1\n" : "0\n");
182
+ return;
183
+ }
184
+ case "list-packs": {
185
+ const worldsDir = need(args, "worlds-dir");
186
+ const level = need(args, "level");
187
+ const kind = need(args, "kind");
188
+ const list = mod.readWorldPackList(path.resolve(worldsDir), level, kind);
189
+ process.stdout.write(`${JSON.stringify(list)}
190
+ `);
191
+ return;
56
192
  }
57
- const verb = argv[0];
58
- const args = parseArgs(argv.slice(1));
59
- const mod = await import("./pack-manager.js");
60
- switch (verb) {
61
- case "assemble-bp": {
62
- const src = need(args, "src");
63
- const out = need(args, "out");
64
- const name = need(args, "name");
65
- const icon = args["icon"];
66
- await mod.assembleBehaviorPack({
67
- srcDir: path.resolve(src),
68
- outDir: path.resolve(out),
69
- projectName: name,
70
- version: parseVersion(args["version"]),
71
- description: args["description"],
72
- ...(icon ? { iconSrc: path.resolve(icon) } : {}),
73
- });
74
- process.stdout.write(`[pack-manager] assembled BP at ${out}\n`);
75
- return;
76
- }
77
- case "assemble-rp": {
78
- const modulesDir = need(args, "modules-dir");
79
- const out = need(args, "out");
80
- const name = need(args, "name");
81
- const map = mod.scanModuleResourcePacks(path.resolve(modulesDir));
82
- await mod.assembleResourcePack({
83
- moduleResourceDirs: map,
84
- outDir: path.resolve(out),
85
- projectName: name,
86
- version: parseVersion(args["version"]),
87
- description: args["description"],
88
- });
89
- process.stdout.write(`[pack-manager] assembled RP at ${out} (${Object.keys(map).length} modules)\n`);
90
- return;
91
- }
92
- case "deploy": {
93
- const bdsRoot = need(args, "bds-root");
94
- const level = need(args, "level");
95
- const bpSrc = need(args, "bp-src");
96
- const bpName = need(args, "bp-name");
97
- const rpSrc = args["rp-src"];
98
- const rpName = args["rp-name"];
99
- await mod.deployToBDS({
100
- bdsRoot: path.resolve(bdsRoot),
101
- levelName: level,
102
- behaviorPackSrc: path.resolve(bpSrc),
103
- ...(rpSrc ? { resourcePackSrc: path.resolve(rpSrc) } : {}),
104
- bpName,
105
- ...(rpName ? { rpName } : {}),
106
- });
107
- process.stdout.write(`[pack-manager] deployed to ${path.join(bdsRoot, "worlds", level)}\n`);
108
- return;
109
- }
110
- case "enable-pack": {
111
- const worldsDir = need(args, "worlds-dir");
112
- const level = need(args, "level");
113
- const kind = need(args, "kind");
114
- const packId = need(args, "pack-id");
115
- await mod.enablePackInWorld({
116
- worldsDir: path.resolve(worldsDir),
117
- levelName: level,
118
- kind,
119
- packUuid: packId,
120
- version: parseVersion(args["version"]),
121
- });
122
- process.stdout.write(`[pack-manager] enabled ${kind} pack ${packId} in ${level}\n`);
123
- return;
124
- }
125
- case "disable-pack": {
126
- const worldsDir = need(args, "worlds-dir");
127
- const level = need(args, "level");
128
- const kind = need(args, "kind");
129
- const packId = need(args, "pack-id");
130
- await mod.disablePackInWorld({
131
- worldsDir: path.resolve(worldsDir),
132
- levelName: level,
133
- kind,
134
- packUuid: packId,
135
- version: parseVersion(args["version"] ?? "1,0,0"),
136
- });
137
- process.stdout.write(`[pack-manager] disabled ${kind} pack ${packId} in ${level}\n`);
138
- return;
139
- }
140
- case "read-level": {
141
- const root = need(args, "bds-root");
142
- const name = await readLevelName(path.resolve(root));
143
- process.stdout.write(`${name}\n`);
144
- return;
145
- }
146
- default:
147
- die(`unknown verb: ${verb}`);
193
+ case "list-installed":
194
+ case "bump-version":
195
+ case "install-dir":
196
+ case "discover-packs": {
197
+ const wp = await import("./world-packs.js");
198
+ if (verb === "list-installed") {
199
+ const bdsRoot = need(args, "bds-root");
200
+ const level = need(args, "level");
201
+ const list = wp.listInstalledWorldPacks(path.resolve(bdsRoot), level);
202
+ process.stdout.write(`${JSON.stringify(list)}
203
+ `);
204
+ return;
205
+ }
206
+ if (verb === "bump-version") {
207
+ const packDir = need(args, "pack-dir");
208
+ const next = wp.bumpPackPatchVersion(path.resolve(packDir));
209
+ process.stdout.write(`${JSON.stringify({ version: next })}
210
+ `);
211
+ return;
212
+ }
213
+ if (verb === "install-dir") {
214
+ const src = need(args, "src");
215
+ const destParent = need(args, "dest-parent");
216
+ const force = !!args["force"];
217
+ const r = await wp.installPackDirectory({
218
+ srcDir: path.resolve(src),
219
+ destParent: path.resolve(destParent),
220
+ force,
221
+ ...args["folder-name"] ? { folderName: args["folder-name"] } : {}
222
+ });
223
+ process.stdout.write(`${JSON.stringify(r)}
224
+ `);
225
+ if (!r.ok && !r.conflict) process.exit(1);
226
+ return;
227
+ }
228
+ {
229
+ const root = need(args, "root");
230
+ const depth = args["max-depth"] ? Number(args["max-depth"]) : 2;
231
+ const roots = wp.discoverPackRoots(path.resolve(root), { maxDepth: depth });
232
+ process.stdout.write(`${JSON.stringify(roots)}
233
+ `);
234
+ return;
235
+ }
148
236
  }
237
+ default:
238
+ die(`unknown verb: ${verb}`);
239
+ }
149
240
  }
150
241
  main().catch((err) => {
151
- const msg = err instanceof Error ? (err.stack ?? err.message) : String(err);
152
- die(msg);
242
+ const msg = err instanceof Error ? err.stack ?? err.message : String(err);
243
+ die(msg);
153
244
  });
154
- //# sourceMappingURL=cli-pack-manager.js.map
245
+ //# sourceMappingURL=cli-pack-manager.js.map
@@ -1 +1,7 @@
1
- {"version":3,"file":"cli-pack-manager.js","sourceRoot":"","sources":["../src/cli-pack-manager.ts"],"names":[],"mappings":"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"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/cli-pack-manager.ts"],
4
+ "sourcesContent": ["#!/usr/bin/env node\n/**\n * pack-manager CLI \u2014 thin wrapper around the pack-manager pure functions\n * so spawnService can call it as a sub-process.\n *\n * node bds-tools/dist/pack-manager.js assemble-bp --src <dir> --out <dir> --name <name> [--uuid <uuid>] [--module-uuid <uuid>] [--version 1,0,0] [--description \"...\"] [--icon <png>]\n * node bds-tools/dist/pack-manager.js assemble-rp (--modules-dir <dir>|--modules-json <file>) --out <dir> --name <name> [--uuid <uuid>] [--module-uuid <uuid>] [--version 1,0,0] [--description \"...\"]\n * node bds-tools/dist/pack-manager.js deploy --bds-root <dir> --level <name> --bp-src <dir> [--rp-src <dir>] --bp-name <name> [--rp-name <name>] [--clear-rp]\n * node bds-tools/dist/pack-manager.js enable-pack --worlds-dir <dir> --level <name> --kind behavior|resource --pack-id <uuid> --version 1,0,0\n * node bds-tools/dist/pack-manager.js disable-pack --worlds-dir <dir> --level <name> --kind behavior|resource --pack-id <uuid>\n * node bds-tools/dist/pack-manager.js ensure-permission --bds-root <dir> --pack-id <uuid>\n * node bds-tools/dist/pack-manager.js read-level --bds-root <dir>\n * node bds-tools/dist/pack-manager.js read-manifest --pack-dir <dir>\n * node bds-tools/dist/pack-manager.js has-pack --worlds-dir <dir> --level <name> --kind behavior|resource --pack-id <uuid>\n * node bds-tools/dist/pack-manager.js list-packs --worlds-dir <dir> --level <name> --kind behavior|resource\n *\n * The pure-function API lives in pack-manager.ts. This CLI exists so a\n * spawnService child process doesn't have to deal with module resolution \u2014\n * it just gets SFMC_ROOT injected, finds its own dist sibling,\n * and reads JSON flags from argv.\n */\n\nimport path from \"node:path\";\nimport process from \"node:process\";\nimport { readLevelName } from \"./pack-manager.js\";\n\nfunction die(msg: string, code = 1): never {\n process.stderr.write(`[pack-manager] ${msg}\\n`);\n process.exit(code);\n}\n\nfunction parseArgs(argv: string[]): { [k: string]: string | undefined } {\n const out: { [k: string]: string | undefined } = {};\n for (let i = 0; i < argv.length; i++) {\n const a = argv[i];\n if (a && a.startsWith(\"--\")) {\n const key = a.slice(2);\n const next = argv[++i];\n /* \u5E03\u5C14\u65D7\u6807(\u65E0\u503C\u6216\u4E0B\u4E00\u53C2\u4E5F\u662F --xxx) */\n if (next === undefined || next.startsWith(\"--\")) {\n out[key] = \"1\";\n if (next !== undefined) i--;\n } else {\n out[key] = next;\n }\n }\n }\n return out;\n}\n\nfunction need(args: { [k: string]: string | undefined }, key: string): string {\n const v = args[key];\n if (!v) die(`--${key} required`);\n return v;\n}\n\nfunction parseVersion(s: string | undefined): [number, number, number] {\n if (!s) return [1, 0, 0];\n const parts = s.split(\",\").map((x) => Number(x.trim()));\n if (parts.length !== 3 || parts.some((n) => !Number.isInteger(n) || (n as number) < 0)) {\n die(`invalid --version (expected \"M,m,p\"): ${s}`);\n }\n return parts as [number, number, number];\n}\n\nasync function main(): Promise<void> {\n const argv = process.argv.slice(2);\n if (argv.length === 0) {\n die(\"usage: pack-manager <verb> [--flags]\");\n }\n const verb = argv[0];\n const args = parseArgs(argv.slice(1));\n\n const mod = await import(\"./pack-manager.js\");\n\n switch (verb) {\n case \"assemble-bp\": {\n const src = need(args, \"src\");\n const out = need(args, \"out\");\n const name = need(args, \"name\");\n const icon = args[\"icon\"];\n await mod.assembleBehaviorPack({\n srcDir: path.resolve(src),\n outDir: path.resolve(out),\n projectName: name,\n version: parseVersion(args[\"version\"]),\n description: args[\"description\"],\n ...(icon ? { iconSrc: path.resolve(icon) } : {}),\n ...(args[\"uuid\"] ? { uuid: args[\"uuid\"] } : {}),\n ...(args[\"module-uuid\"] ? { moduleUuid: args[\"module-uuid\"] } : {}),\n });\n process.stdout.write(`[pack-manager] assembled BP at ${out}\\n`);\n return;\n }\n case \"assemble-rp\": {\n const out = need(args, \"out\");\n const name = need(args, \"name\");\n /* OCP:\u663E\u5F0F map \u4F18\u5148;\u5426\u5219\u56DE\u9000\u626B\u63CF --modules-dir */\n let map: Record<string, string>;\n if (args[\"modules-json\"]) {\n map = mod.loadModuleResourcePackMap(path.resolve(args[\"modules-json\"]));\n } else {\n const modulesDir = need(args, \"modules-dir\");\n map = mod.scanModuleResourcePacks(path.resolve(modulesDir));\n }\n await mod.assembleResourcePack({\n moduleResourceDirs: map,\n outDir: path.resolve(out),\n projectName: name,\n version: parseVersion(args[\"version\"]),\n description: args[\"description\"],\n ...(args[\"uuid\"] ? { uuid: args[\"uuid\"] } : {}),\n ...(args[\"module-uuid\"] ? { moduleUuid: args[\"module-uuid\"] } : {}),\n });\n process.stdout.write(`[pack-manager] assembled RP at ${out} (${Object.keys(map).length} modules)\\n`);\n return;\n }\n case \"deploy\": {\n const bdsRoot = need(args, \"bds-root\");\n const level = need(args, \"level\");\n const bpSrc = need(args, \"bp-src\");\n const bpName = need(args, \"bp-name\");\n const rpSrc = args[\"rp-src\"];\n const rpName = args[\"rp-name\"];\n const clearRp = args[\"clear-rp\"] === \"1\" || args[\"clear-rp\"] === \"true\";\n await mod.deployToBDS({\n bdsRoot: path.resolve(bdsRoot),\n levelName: level,\n behaviorPackSrc: path.resolve(bpSrc),\n ...(rpSrc ? { resourcePackSrc: path.resolve(rpSrc) } : {}),\n bpName,\n ...(rpName ? { rpName } : {}),\n ...(clearRp ? { clearResourcePack: true } : {}),\n });\n process.stdout.write(`[pack-manager] deployed to ${mod.bdsWorldLevelDir(path.resolve(bdsRoot), level)}\\n`);\n return;\n }\n case \"enable-pack\": {\n const worldsDir = need(args, \"worlds-dir\");\n const level = need(args, \"level\");\n const kind = need(args, \"kind\") as \"behavior\" | \"resource\";\n const packId = need(args, \"pack-id\");\n await mod.enablePackInWorld({\n worldsDir: path.resolve(worldsDir),\n levelName: level,\n kind,\n packUuid: packId,\n version: parseVersion(args[\"version\"]),\n });\n process.stdout.write(`[pack-manager] enabled ${kind} pack ${packId} in ${level}\\n`);\n return;\n }\n case \"disable-pack\": {\n const worldsDir = need(args, \"worlds-dir\");\n const level = need(args, \"level\");\n const kind = need(args, \"kind\") as \"behavior\" | \"resource\";\n const packId = need(args, \"pack-id\");\n await mod.disablePackInWorld({\n worldsDir: path.resolve(worldsDir),\n levelName: level,\n kind,\n packUuid: packId,\n version: parseVersion(args[\"version\"] ?? \"1,0,0\"),\n });\n process.stdout.write(`[pack-manager] disabled ${kind} pack ${packId} in ${level}\\n`);\n return;\n }\n case \"ensure-permission\": {\n const bdsRoot = need(args, \"bds-root\");\n const packId = need(args, \"pack-id\");\n const root = path.resolve(bdsRoot);\n const wrote = await mod.ensureConfigPermission(root, packId);\n const rel = path.relative(root, mod.configPermissionPath(root, packId));\n process.stdout.write(\n wrote ? `[pack-manager] wrote ${rel}\\n` : `[pack-manager] ${rel} already exists \u2014 skipped\\n`\n );\n return;\n }\n case \"read-level\": {\n const root = need(args, \"bds-root\");\n const name = await readLevelName(path.resolve(root));\n process.stdout.write(`${name}\\n`);\n return;\n }\n case \"read-manifest\": {\n const packDir = need(args, \"pack-dir\");\n const header = mod.readPackManifestHeader(path.resolve(packDir));\n if (!header) {\n process.stdout.write(\"null\\n\");\n return;\n }\n process.stdout.write(`${JSON.stringify(header)}\\n`);\n return;\n }\n case \"has-pack\": {\n const worldsDir = need(args, \"worlds-dir\");\n const level = need(args, \"level\");\n const kind = need(args, \"kind\") as \"behavior\" | \"resource\";\n const packId = need(args, \"pack-id\");\n const ok = mod.worldPackListHas(path.resolve(worldsDir), level, kind, packId);\n process.stdout.write(ok ? \"1\\n\" : \"0\\n\");\n return;\n }\n case \"list-packs\": {\n /* \u6743\u5A01\u4E16\u754C\u6E05\u5355\u8BFB\u53D6 \u2014 \u8C03\u7528\u65B9\u52FF\u518D\u76F4\u63A5\u89E3\u6790 world_*_packs.json(Demeter/DRY) */\n const worldsDir = need(args, \"worlds-dir\");\n const level = need(args, \"level\");\n const kind = need(args, \"kind\") as \"behavior\" | \"resource\";\n const list = mod.readWorldPackList(path.resolve(worldsDir), level, kind);\n process.stdout.write(`${JSON.stringify(list)}\\n`);\n return;\n }\n case \"list-installed\":\n case \"bump-version\":\n case \"install-dir\":\n case \"discover-packs\": {\n /* OCP: world-packs \u52A8\u8BCD\u8868\u6269\u5C55\uFF0C\u907F\u514D\u6BCF case \u91CD\u590D dynamic import\uFF08DRY\uFF09 */\n const wp = await import(\"./world-packs.js\");\n if (verb === \"list-installed\") {\n const bdsRoot = need(args, \"bds-root\");\n const level = need(args, \"level\");\n const list = wp.listInstalledWorldPacks(path.resolve(bdsRoot), level);\n process.stdout.write(`${JSON.stringify(list)}\\n`);\n return;\n }\n if (verb === \"bump-version\") {\n const packDir = need(args, \"pack-dir\");\n const next = wp.bumpPackPatchVersion(path.resolve(packDir));\n process.stdout.write(`${JSON.stringify({ version: next })}\\n`);\n return;\n }\n if (verb === \"install-dir\") {\n const src = need(args, \"src\");\n const destParent = need(args, \"dest-parent\");\n const force = !!args[\"force\"];\n const r = await wp.installPackDirectory({\n srcDir: path.resolve(src),\n destParent: path.resolve(destParent),\n force,\n ...(args[\"folder-name\"] ? { folderName: args[\"folder-name\"] } : {}),\n });\n process.stdout.write(`${JSON.stringify(r)}\\n`);\n if (!r.ok && !r.conflict) process.exit(1);\n return;\n }\n {\n const root = need(args, \"root\");\n const depth = args[\"max-depth\"] ? Number(args[\"max-depth\"]) : 2;\n const roots = wp.discoverPackRoots(path.resolve(root), { maxDepth: depth });\n process.stdout.write(`${JSON.stringify(roots)}\\n`);\n return;\n }\n }\n default:\n die(`unknown verb: ${verb}`);\n }\n}\n\nmain().catch((err: unknown) => {\n const msg = err instanceof Error ? (err.stack ?? err.message) : String(err);\n die(msg);\n});\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }