@sfmc-bds/cli 0.2.0-beta.1 → 0.2.0-beta.6
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/argv-parse.d.ts +13 -0
- package/dist/argv-parse.d.ts.map +1 -0
- package/dist/argv-parse.js +32 -0
- package/dist/argv-parse.js.map +7 -0
- package/dist/cli-gate.d.ts +11 -0
- package/dist/cli-gate.d.ts.map +1 -0
- package/dist/cli-gate.js +48 -0
- package/dist/cli-gate.js.map +7 -0
- package/dist/cmd-remote.d.ts +13 -0
- package/dist/cmd-remote.d.ts.map +1 -0
- package/dist/cmd-remote.js +38 -0
- package/dist/cmd-remote.js.map +7 -0
- package/dist/command-palette.d.ts +61 -0
- package/dist/command-palette.d.ts.map +1 -0
- package/dist/command-palette.js +352 -0
- package/dist/command-palette.js.map +7 -0
- package/dist/command-surface.d.ts +92 -0
- package/dist/command-surface.d.ts.map +1 -0
- package/dist/command-surface.js +350 -0
- package/dist/command-surface.js.map +7 -0
- package/dist/commands-reload.js +2 -2
- package/dist/commands-reload.js.map +2 -2
- package/dist/commands.d.ts +1 -1
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +79 -17
- package/dist/commands.js.map +2 -2
- package/dist/debug-command.d.ts +5 -0
- package/dist/debug-command.d.ts.map +1 -0
- package/dist/debug-command.js +118 -0
- package/dist/debug-command.js.map +7 -0
- package/dist/help-text.d.ts +3 -0
- package/dist/help-text.d.ts.map +1 -0
- package/dist/help-text.js +168 -0
- package/dist/help-text.js.map +7 -0
- package/dist/i18n/locales/en.d.ts +101 -20
- package/dist/i18n/locales/en.d.ts.map +1 -1
- package/dist/i18n/locales/en.js +105 -20
- package/dist/i18n/locales/en.js.map +2 -2
- package/dist/i18n/locales/zh-CN.d.ts.map +1 -1
- package/dist/i18n/locales/zh-CN.js +153 -62
- package/dist/i18n/locales/zh-CN.js.map +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +2 -2
- package/dist/logs.d.ts +16 -1
- package/dist/logs.d.ts.map +1 -1
- package/dist/logs.js +80 -11
- package/dist/logs.js.map +2 -2
- package/dist/main.js +58 -44
- package/dist/main.js.map +2 -2
- package/dist/module-commands.d.ts +29 -33
- package/dist/module-commands.d.ts.map +1 -1
- package/dist/module-commands.js +101 -37
- package/dist/module-commands.js.map +2 -2
- package/dist/module-pack-build.d.ts +10 -0
- package/dist/module-pack-build.d.ts.map +1 -0
- package/dist/module-pack-build.js +430 -0
- package/dist/module-pack-build.js.map +7 -0
- package/dist/module-publish.d.ts +69 -0
- package/dist/module-publish.d.ts.map +1 -0
- package/dist/module-publish.js +478 -0
- package/dist/module-publish.js.map +7 -0
- package/dist/module-watch.d.ts +32 -0
- package/dist/module-watch.d.ts.map +1 -0
- package/dist/module-watch.js +171 -0
- package/dist/module-watch.js.map +7 -0
- package/dist/module-wizard.d.ts +4 -6
- package/dist/module-wizard.d.ts.map +1 -1
- package/dist/module-wizard.js +108 -124
- package/dist/module-wizard.js.map +2 -2
- package/dist/pack-lifecycle.d.ts +1 -1
- package/dist/pack-lifecycle.d.ts.map +1 -1
- package/dist/pack-lifecycle.js +3 -3
- package/dist/pack-lifecycle.js.map +2 -2
- package/dist/pack-update/index.d.ts +18 -0
- package/dist/pack-update/index.d.ts.map +1 -0
- package/dist/pack-update/index.js +113 -0
- package/dist/pack-update/index.js.map +7 -0
- package/dist/registry.d.ts +6 -3
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +15 -3
- package/dist/registry.js.map +2 -2
- package/dist/remote-agent.d.ts.map +1 -1
- package/dist/remote-agent.js +7 -5
- package/dist/remote-agent.js.map +2 -2
- package/dist/repl-windows/format-display.d.ts +10 -0
- package/dist/repl-windows/format-display.d.ts.map +1 -0
- package/dist/repl-windows/format-display.js +57 -0
- package/dist/repl-windows/format-display.js.map +7 -0
- package/dist/repl-windows/host.d.ts +60 -0
- package/dist/repl-windows/host.d.ts.map +1 -0
- package/dist/repl-windows/host.js +179 -0
- package/dist/repl-windows/host.js.map +7 -0
- package/dist/repl-windows/index.d.ts +9 -0
- package/dist/repl-windows/index.d.ts.map +1 -0
- package/dist/repl-windows/index.js +13 -0
- package/dist/repl-windows/index.js.map +7 -0
- package/dist/repl-windows/logs-filter-window.d.ts +15 -0
- package/dist/repl-windows/logs-filter-window.d.ts.map +1 -0
- package/dist/repl-windows/logs-filter-window.js +77 -0
- package/dist/repl-windows/logs-filter-window.js.map +7 -0
- package/dist/repl-windows/service-window.d.ts +4 -0
- package/dist/repl-windows/service-window.d.ts.map +1 -0
- package/dist/repl-windows/service-window.js +28 -0
- package/dist/repl-windows/service-window.js.map +7 -0
- package/dist/repl-windows/types.d.ts +56 -0
- package/dist/repl-windows/types.d.ts.map +1 -0
- package/dist/repl-windows/types.js +1 -0
- package/dist/repl-windows/types.js.map +7 -0
- package/dist/repl.d.ts +7 -8
- package/dist/repl.d.ts.map +1 -1
- package/dist/repl.js +722 -412
- package/dist/repl.js.map +3 -3
- package/dist/runtime.d.ts +2 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +4 -0
- package/dist/runtime.js.map +2 -2
- package/dist/send-target.d.ts +11 -0
- package/dist/send-target.d.ts.map +1 -0
- package/dist/send-target.js +38 -0
- package/dist/send-target.js.map +7 -0
- package/dist/services.d.ts +21 -1
- package/dist/services.d.ts.map +1 -1
- package/dist/services.js +146 -7
- package/dist/services.js.map +2 -2
- package/dist/theme.js +1 -1
- package/dist/theme.js.map +2 -2
- package/dist/wizard.d.ts.map +1 -1
- package/dist/wizard.js +11 -9
- package/dist/wizard.js.map +2 -2
- package/dist/world-packs.d.ts.map +1 -1
- package/dist/world-packs.js +6 -3
- package/dist/world-packs.js.map +2 -2
- package/package.json +16 -16
- package/dist/pack-update/bindings.d.ts +0 -12
- package/dist/pack-update/bindings.d.ts.map +0 -1
- package/dist/pack-update/bindings.js +0 -64
- package/dist/pack-update/bindings.js.map +0 -7
- package/dist/pack-update/config.d.ts +0 -22
- package/dist/pack-update/config.d.ts.map +0 -1
- package/dist/pack-update/config.js +0 -141
- package/dist/pack-update/config.js.map +0 -7
- package/dist/pack-update/providers/curseforge.d.ts +0 -23
- package/dist/pack-update/providers/curseforge.d.ts.map +0 -1
- package/dist/pack-update/providers/curseforge.js +0 -229
- package/dist/pack-update/providers/curseforge.js.map +0 -7
- package/dist/pack-update/providers/index.d.ts +0 -16
- package/dist/pack-update/providers/index.d.ts.map +0 -1
- package/dist/pack-update/providers/index.js +0 -37
- package/dist/pack-update/providers/index.js.map +0 -7
- package/dist/pack-update/service.d.ts +0 -21
- package/dist/pack-update/service.d.ts.map +0 -1
- package/dist/pack-update/service.js +0 -572
- package/dist/pack-update/service.js.map +0 -7
- package/dist/pack-update/types.d.ts +0 -126
- package/dist/pack-update/types.d.ts.map +0 -1
- package/dist/pack-update/types.js +0 -8
- package/dist/pack-update/types.js.map +0 -7
- package/dist/pack-update/version-policy.d.ts +0 -81
- package/dist/pack-update/version-policy.d.ts.map +0 -1
- package/dist/pack-update/version-policy.js +0 -210
- package/dist/pack-update/version-policy.js.map +0 -7
|
@@ -0,0 +1,430 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
3
|
+
import fs from "node:fs/promises";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import process from "node:process";
|
|
6
|
+
import { writeJson } from "@sfmc-bds/sdk/node/config";
|
|
7
|
+
import {
|
|
8
|
+
BP_NAME,
|
|
9
|
+
RP_NAME,
|
|
10
|
+
DEPLOY_CATALOG_NAME,
|
|
11
|
+
bpOut,
|
|
12
|
+
bpSrc,
|
|
13
|
+
rpOut,
|
|
14
|
+
buildRoot,
|
|
15
|
+
computeDesiredCatalog,
|
|
16
|
+
readDeployedCatalog,
|
|
17
|
+
catalogsEqual,
|
|
18
|
+
resolveBdsContext,
|
|
19
|
+
deployedBpDir,
|
|
20
|
+
formatPackLoadInfo,
|
|
21
|
+
scanLocalModules
|
|
22
|
+
} from "./pack-lifecycle.js";
|
|
23
|
+
import { ROOT, resolveServiceScript } from "./runtime.js";
|
|
24
|
+
import { c } from "./theme.js";
|
|
25
|
+
import { t } from "./i18n/index.js";
|
|
26
|
+
import { pushLog } from "./logs.js";
|
|
27
|
+
function spawnPackManager(args) {
|
|
28
|
+
return new Promise((resolve) => {
|
|
29
|
+
const script = resolveServiceScript("pack-manager");
|
|
30
|
+
const proc = spawn(process.execPath, [script, ...args], {
|
|
31
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
32
|
+
env: { ...process.env, SFMC_ROOT: ROOT, SFMC_SERVICE: "pack-manager" }
|
|
33
|
+
});
|
|
34
|
+
let output = "";
|
|
35
|
+
proc.stdout?.on("data", (d) => {
|
|
36
|
+
output += d.toString();
|
|
37
|
+
});
|
|
38
|
+
proc.stderr?.on("data", (d) => {
|
|
39
|
+
output += d.toString();
|
|
40
|
+
});
|
|
41
|
+
proc.on("exit", (code) => resolve({ code, output }));
|
|
42
|
+
proc.on("error", (e) => resolve({ code: 1, output: `${output}${e.message}` }));
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
async function bundleBehaviorPackScript() {
|
|
46
|
+
const mods = await scanLocalModules();
|
|
47
|
+
const entries = mods.filter((m) => m.enabled && m.entryPath).map((m) => m.entryPath);
|
|
48
|
+
const outFile = path.join(bpSrc(), "scripts", "main.js");
|
|
49
|
+
await fs.mkdir(path.dirname(outFile), { recursive: true });
|
|
50
|
+
if (entries.length === 0) {
|
|
51
|
+
await fs.writeFile(outFile, "/* no modules enabled */\n", "utf8");
|
|
52
|
+
pushLog("no enabled SAPI modules \u2014 empty main.js", "pack", "warn");
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const { build } = await import("esbuild");
|
|
56
|
+
const sdkRoot = await resolveSdkRootForEsbuild();
|
|
57
|
+
await build({
|
|
58
|
+
entryPoints: entries,
|
|
59
|
+
outfile: outFile,
|
|
60
|
+
bundle: true,
|
|
61
|
+
platform: "neutral",
|
|
62
|
+
format: "esm",
|
|
63
|
+
target: "es2022",
|
|
64
|
+
logLevel: "warning",
|
|
65
|
+
sourcemap: false,
|
|
66
|
+
external: ["@minecraft/*"],
|
|
67
|
+
tsconfigRaw: JSON.stringify({
|
|
68
|
+
compilerOptions: {
|
|
69
|
+
module: "ESNext",
|
|
70
|
+
moduleResolution: "bundler",
|
|
71
|
+
target: "ES2022",
|
|
72
|
+
strict: true,
|
|
73
|
+
skipLibCheck: true
|
|
74
|
+
}
|
|
75
|
+
}),
|
|
76
|
+
plugins: [createSdkResolvePlugin(sdkRoot)]
|
|
77
|
+
});
|
|
78
|
+
pushLog(`esbuild bundled ${entries.length} entr(y/ies)`, "pack", "info");
|
|
79
|
+
}
|
|
80
|
+
async function resolveSdkRootForEsbuild() {
|
|
81
|
+
const { resolveSdkPackageRoot } = await import("./runtime.js");
|
|
82
|
+
return resolveSdkPackageRoot();
|
|
83
|
+
}
|
|
84
|
+
function createSdkResolvePlugin(sdkRoot) {
|
|
85
|
+
const pkg = JSON.parse(readFileSync(path.join(sdkRoot, "package.json"), "utf8"));
|
|
86
|
+
const exportsMap = pkg.exports ?? {};
|
|
87
|
+
function resolveExportSubpath(subpath) {
|
|
88
|
+
const key = subpath === "" ? "." : `./${subpath}`;
|
|
89
|
+
const entry = exportsMap[key];
|
|
90
|
+
if (!entry) return null;
|
|
91
|
+
const rel = typeof entry === "string" ? entry : entry.import ?? entry.default;
|
|
92
|
+
if (!rel || typeof rel !== "string") return null;
|
|
93
|
+
const abs = path.join(sdkRoot, rel);
|
|
94
|
+
return existsSync(abs) ? abs : null;
|
|
95
|
+
}
|
|
96
|
+
return {
|
|
97
|
+
name: "sfmc-sdk-resolve",
|
|
98
|
+
setup(build) {
|
|
99
|
+
build.onResolve({ filter: /^@sfmc(?:-bds)?\/sdk(?:\/|$)/ }, (args) => {
|
|
100
|
+
const normalized = args.path.replace(/^@sfmc\/sdk/, "@sfmc-bds/sdk");
|
|
101
|
+
const sub = normalized === "@sfmc-bds/sdk" ? "" : normalized.slice("@sfmc-bds/sdk/".length);
|
|
102
|
+
const resolved = resolveExportSubpath(sub);
|
|
103
|
+
if (!resolved) {
|
|
104
|
+
return {
|
|
105
|
+
errors: [
|
|
106
|
+
{
|
|
107
|
+
text: `Cannot resolve ${args.path} under SDK at ${sdkRoot} (export "./${sub || "."}" missing or file absent; run sdk:build?)`
|
|
108
|
+
}
|
|
109
|
+
]
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
return { path: resolved };
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
async function spawnAssembleBp(catalog) {
|
|
118
|
+
const args = [
|
|
119
|
+
"assemble-bp",
|
|
120
|
+
"--src",
|
|
121
|
+
bpSrc(),
|
|
122
|
+
"--out",
|
|
123
|
+
bpOut(),
|
|
124
|
+
"--name",
|
|
125
|
+
BP_NAME,
|
|
126
|
+
"--uuid",
|
|
127
|
+
catalog.bpUuid,
|
|
128
|
+
"--version",
|
|
129
|
+
catalog.bpVersion.join(",")
|
|
130
|
+
];
|
|
131
|
+
if (catalog.bpModuleUuid) args.push("--module-uuid", catalog.bpModuleUuid);
|
|
132
|
+
const r = await spawnPackManager(args);
|
|
133
|
+
if (r.code === 0) {
|
|
134
|
+
pushLog(`assembled BP uuid=${catalog.bpUuid}`, "pack", "info");
|
|
135
|
+
}
|
|
136
|
+
return r;
|
|
137
|
+
}
|
|
138
|
+
async function spawnAssembleRp(catalog, rpDirs) {
|
|
139
|
+
if (!catalog.rpUuid || Object.keys(rpDirs).length === 0) {
|
|
140
|
+
await fs.rm(rpOut(), { recursive: true, force: true });
|
|
141
|
+
pushLog("no enabled resource packs \u2014 RP skipped", "pack", "info");
|
|
142
|
+
return { code: 0, output: "[pack-manager] no enabled resource packs \u2014 RP skipped\n" };
|
|
143
|
+
}
|
|
144
|
+
const mapFile = path.join(buildRoot(), "rp-map.json");
|
|
145
|
+
await fs.mkdir(buildRoot(), { recursive: true });
|
|
146
|
+
await fs.writeFile(mapFile, JSON.stringify(rpDirs), "utf8");
|
|
147
|
+
const args = [
|
|
148
|
+
"assemble-rp",
|
|
149
|
+
"--modules-json",
|
|
150
|
+
mapFile,
|
|
151
|
+
"--out",
|
|
152
|
+
rpOut(),
|
|
153
|
+
"--name",
|
|
154
|
+
RP_NAME,
|
|
155
|
+
"--uuid",
|
|
156
|
+
catalog.rpUuid,
|
|
157
|
+
"--version",
|
|
158
|
+
(catalog.rpVersion ?? [1, 0, 0]).join(",")
|
|
159
|
+
];
|
|
160
|
+
if (catalog.rpModuleUuid) args.push("--module-uuid", catalog.rpModuleUuid);
|
|
161
|
+
const r = await spawnPackManager(args);
|
|
162
|
+
if (r.code === 0) {
|
|
163
|
+
pushLog(
|
|
164
|
+
`assembled RP uuid=${catalog.rpUuid} (${Object.keys(rpDirs).length} modules)`,
|
|
165
|
+
"pack",
|
|
166
|
+
"info"
|
|
167
|
+
);
|
|
168
|
+
}
|
|
169
|
+
return r;
|
|
170
|
+
}
|
|
171
|
+
async function spawnDeploy(catalog) {
|
|
172
|
+
const { bdsRoot, levelName } = resolveBdsContext();
|
|
173
|
+
const args = [
|
|
174
|
+
"deploy",
|
|
175
|
+
"--bds-root",
|
|
176
|
+
bdsRoot,
|
|
177
|
+
"--level",
|
|
178
|
+
levelName,
|
|
179
|
+
"--bp-src",
|
|
180
|
+
bpOut(),
|
|
181
|
+
"--bp-name",
|
|
182
|
+
BP_NAME,
|
|
183
|
+
"--rp-name",
|
|
184
|
+
RP_NAME
|
|
185
|
+
];
|
|
186
|
+
if (catalog.rpUuid && existsSync(rpOut())) {
|
|
187
|
+
args.push("--rp-src", rpOut());
|
|
188
|
+
} else {
|
|
189
|
+
args.push("--clear-rp");
|
|
190
|
+
}
|
|
191
|
+
const r = await spawnPackManager(args);
|
|
192
|
+
if (r.code === 0) {
|
|
193
|
+
pushLog(`deployed to worlds/${levelName}`, "pack", "info");
|
|
194
|
+
}
|
|
195
|
+
return r;
|
|
196
|
+
}
|
|
197
|
+
async function spawnEnablePacks(catalog) {
|
|
198
|
+
const { bdsRoot, levelName } = resolveBdsContext();
|
|
199
|
+
const worldsDir = path.join(bdsRoot, "worlds");
|
|
200
|
+
let output = "";
|
|
201
|
+
const bpArgs = [
|
|
202
|
+
"enable-pack",
|
|
203
|
+
"--worlds-dir",
|
|
204
|
+
worldsDir,
|
|
205
|
+
"--level",
|
|
206
|
+
levelName,
|
|
207
|
+
"--kind",
|
|
208
|
+
"behavior",
|
|
209
|
+
"--pack-id",
|
|
210
|
+
catalog.bpUuid,
|
|
211
|
+
"--version",
|
|
212
|
+
catalog.bpVersion.join(",")
|
|
213
|
+
];
|
|
214
|
+
const bpR = await spawnPackManager(bpArgs);
|
|
215
|
+
output += bpR.output;
|
|
216
|
+
if (bpR.code !== 0) return { code: bpR.code, output };
|
|
217
|
+
pushLog(
|
|
218
|
+
`enabled behavior pack ${catalog.bpUuid} in world list`,
|
|
219
|
+
"pack",
|
|
220
|
+
"info"
|
|
221
|
+
);
|
|
222
|
+
if (catalog.rpUuid && catalog.rpVersion) {
|
|
223
|
+
const rpArgs = [
|
|
224
|
+
"enable-pack",
|
|
225
|
+
"--worlds-dir",
|
|
226
|
+
worldsDir,
|
|
227
|
+
"--level",
|
|
228
|
+
levelName,
|
|
229
|
+
"--kind",
|
|
230
|
+
"resource",
|
|
231
|
+
"--pack-id",
|
|
232
|
+
catalog.rpUuid,
|
|
233
|
+
"--version",
|
|
234
|
+
catalog.rpVersion.join(",")
|
|
235
|
+
];
|
|
236
|
+
const rpR = await spawnPackManager(rpArgs);
|
|
237
|
+
output += rpR.output;
|
|
238
|
+
if (rpR.code !== 0) return { code: rpR.code, output };
|
|
239
|
+
pushLog(
|
|
240
|
+
`enabled resource pack ${catalog.rpUuid} in world list`,
|
|
241
|
+
"pack",
|
|
242
|
+
"info"
|
|
243
|
+
);
|
|
244
|
+
}
|
|
245
|
+
return { code: 0, output };
|
|
246
|
+
}
|
|
247
|
+
async function spawnDisableStale(current, bdsRoot, levelName) {
|
|
248
|
+
const previous = await collectDeployedPackUuids(bdsRoot, levelName);
|
|
249
|
+
const worldsDir = path.join(bdsRoot, "worlds");
|
|
250
|
+
for (const staleRp of previous.rp) {
|
|
251
|
+
if (staleRp === (current.rpUuid ?? null)) continue;
|
|
252
|
+
const r = await spawnPackManager([
|
|
253
|
+
"disable-pack",
|
|
254
|
+
"--worlds-dir",
|
|
255
|
+
worldsDir,
|
|
256
|
+
"--level",
|
|
257
|
+
levelName,
|
|
258
|
+
"--kind",
|
|
259
|
+
"resource",
|
|
260
|
+
"--pack-id",
|
|
261
|
+
staleRp,
|
|
262
|
+
"--version",
|
|
263
|
+
"1,0,0"
|
|
264
|
+
]);
|
|
265
|
+
if (r.code === 0) {
|
|
266
|
+
pushLog(`disabled stale resource pack ${staleRp}`, "pack", "info");
|
|
267
|
+
} else {
|
|
268
|
+
pushLog(
|
|
269
|
+
`disable stale RP ${staleRp} failed: ${r.output.trim()}`,
|
|
270
|
+
"pack",
|
|
271
|
+
"warn"
|
|
272
|
+
);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
for (const staleBp of previous.bp) {
|
|
276
|
+
if (staleBp === current.bpUuid) continue;
|
|
277
|
+
const r = await spawnPackManager([
|
|
278
|
+
"disable-pack",
|
|
279
|
+
"--worlds-dir",
|
|
280
|
+
worldsDir,
|
|
281
|
+
"--level",
|
|
282
|
+
levelName,
|
|
283
|
+
"--kind",
|
|
284
|
+
"behavior",
|
|
285
|
+
"--pack-id",
|
|
286
|
+
staleBp,
|
|
287
|
+
"--version",
|
|
288
|
+
"1,0,0"
|
|
289
|
+
]);
|
|
290
|
+
if (r.code === 0) {
|
|
291
|
+
pushLog(`disabled stale behavior pack ${staleBp}`, "pack", "info");
|
|
292
|
+
} else {
|
|
293
|
+
pushLog(
|
|
294
|
+
`disable stale BP ${staleBp} failed: ${r.output.trim()}`,
|
|
295
|
+
"pack",
|
|
296
|
+
"warn"
|
|
297
|
+
);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
async function collectDeployedPackUuids(bdsRoot, levelName) {
|
|
302
|
+
const bp = /* @__PURE__ */ new Set();
|
|
303
|
+
const rp = /* @__PURE__ */ new Set();
|
|
304
|
+
const cat = readDeployedCatalog(bdsRoot, levelName);
|
|
305
|
+
if (cat?.bpUuid) bp.add(cat.bpUuid);
|
|
306
|
+
if (cat?.rpUuid) rp.add(cat.rpUuid);
|
|
307
|
+
const bpDir = path.join(bdsRoot, "worlds", levelName, "behavior_packs", BP_NAME);
|
|
308
|
+
const rpDir = path.join(bdsRoot, "worlds", levelName, "resource_packs", RP_NAME);
|
|
309
|
+
const bpR = await spawnPackManager(["read-manifest", "--pack-dir", bpDir]);
|
|
310
|
+
if (bpR.code === 0) {
|
|
311
|
+
try {
|
|
312
|
+
const j = JSON.parse(bpR.output.trim());
|
|
313
|
+
if (j?.uuid) bp.add(j.uuid);
|
|
314
|
+
} catch {
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
const rpR = await spawnPackManager(["read-manifest", "--pack-dir", rpDir]);
|
|
318
|
+
if (rpR.code === 0) {
|
|
319
|
+
try {
|
|
320
|
+
const j = JSON.parse(rpR.output.trim());
|
|
321
|
+
if (j?.uuid) rp.add(j.uuid);
|
|
322
|
+
} catch {
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
return { bp, rp };
|
|
326
|
+
}
|
|
327
|
+
async function spawnEnsurePermission(catalog) {
|
|
328
|
+
const { bdsRoot } = resolveBdsContext();
|
|
329
|
+
const r = await spawnPackManager([
|
|
330
|
+
"ensure-permission",
|
|
331
|
+
"--bds-root",
|
|
332
|
+
bdsRoot,
|
|
333
|
+
"--pack-id",
|
|
334
|
+
catalog.bpUuid
|
|
335
|
+
]);
|
|
336
|
+
return r;
|
|
337
|
+
}
|
|
338
|
+
async function cmdModuleBuild(_args) {
|
|
339
|
+
try {
|
|
340
|
+
const { bdsRoot, levelName } = resolveBdsContext();
|
|
341
|
+
const deployed = readDeployedCatalog(bdsRoot, levelName);
|
|
342
|
+
const desired = await computeDesiredCatalog(deployed ? reusePackIds(deployed) : void 0);
|
|
343
|
+
if (deployed && catalogsEqual(desired, deployed)) {
|
|
344
|
+
return formatPackLoadInfo(desired, false);
|
|
345
|
+
}
|
|
346
|
+
pushLog(
|
|
347
|
+
`building BP/RP (modules=${Object.keys(desired.modules).length})\u2026`,
|
|
348
|
+
"pack",
|
|
349
|
+
"info"
|
|
350
|
+
);
|
|
351
|
+
await bundleBehaviorPackScript();
|
|
352
|
+
const mods = await scanLocalModules();
|
|
353
|
+
const rpDirs = {};
|
|
354
|
+
for (const m of mods) {
|
|
355
|
+
if (!m.enabled || !m.hasResourcePack) continue;
|
|
356
|
+
rpDirs[m.folderId] = path.join("modules", "packages", m.folderId, "resource_pack");
|
|
357
|
+
}
|
|
358
|
+
const bpR = await spawnAssembleBp(desired);
|
|
359
|
+
if (bpR.code !== 0) return c.red(bpR.output.trim() || `assemble-bp exit ${bpR.code}`);
|
|
360
|
+
const rpR = await spawnAssembleRp(desired, rpDirs);
|
|
361
|
+
if (rpR.code !== 0) return c.red(rpR.output.trim() || `assemble-rp exit ${rpR.code}`);
|
|
362
|
+
desired.generatedAt = Date.now();
|
|
363
|
+
if (Object.keys(rpDirs).length === 0) {
|
|
364
|
+
desired.rpUuid = null;
|
|
365
|
+
desired.rpVersion = null;
|
|
366
|
+
}
|
|
367
|
+
writeJson(path.join(bpOut(), DEPLOY_CATALOG_NAME), desired);
|
|
368
|
+
return c.green(t("pack.built", { path: bpOut() })) + "\n" + formatPackLoadInfo(desired, true);
|
|
369
|
+
} catch (e) {
|
|
370
|
+
return c.red(e.message);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
async function cmdModuleReload(args) {
|
|
374
|
+
const buildOnly = args.includes("--build-only");
|
|
375
|
+
const parts = [];
|
|
376
|
+
const buildMsg = await cmdModuleBuild([]);
|
|
377
|
+
parts.push(buildMsg.trimEnd());
|
|
378
|
+
if (buildMsg.startsWith(c.red(""))) return parts.join("\n") + "\n";
|
|
379
|
+
try {
|
|
380
|
+
const { bdsRoot, levelName } = resolveBdsContext();
|
|
381
|
+
const desired = await computeDesiredCatalog();
|
|
382
|
+
const depR = await spawnDeploy(desired);
|
|
383
|
+
if (depR.code !== 0) {
|
|
384
|
+
return parts.join("\n") + "\n" + c.red(depR.output.trim() || `deploy exit ${depR.code}`);
|
|
385
|
+
}
|
|
386
|
+
parts.push(depR.output.trimEnd());
|
|
387
|
+
writeJson(path.join(deployedBpDir(bdsRoot, levelName), DEPLOY_CATALOG_NAME), desired);
|
|
388
|
+
await spawnDisableStale(desired, bdsRoot, levelName);
|
|
389
|
+
const enR = await spawnEnablePacks(desired);
|
|
390
|
+
if (enR.code !== 0) {
|
|
391
|
+
return parts.join("\n") + "\n" + c.red(enR.output.trim() || `enable-pack exit ${enR.code}`);
|
|
392
|
+
}
|
|
393
|
+
parts.push(enR.output.trimEnd());
|
|
394
|
+
const perR = await spawnEnsurePermission(desired);
|
|
395
|
+
if (perR.code !== 0) {
|
|
396
|
+
return parts.join("\n") + "\n" + c.red(perR.output.trim() || `ensure-permission exit ${perR.code}`);
|
|
397
|
+
}
|
|
398
|
+
parts.push(perR.output.trimEnd());
|
|
399
|
+
} catch (e) {
|
|
400
|
+
return parts.join("\n") + "\n" + c.red(e.message);
|
|
401
|
+
}
|
|
402
|
+
if (buildOnly) {
|
|
403
|
+
parts.push(c.dim(t("reload.buildOnly")));
|
|
404
|
+
return parts.join("\n") + "\n";
|
|
405
|
+
}
|
|
406
|
+
const { isServiceRunning } = await import("./services.js");
|
|
407
|
+
if (!await isServiceRunning("bds")) {
|
|
408
|
+
parts.push(c.yellow(t("reload.bdsNotRunning")));
|
|
409
|
+
return parts.join("\n") + "\n";
|
|
410
|
+
}
|
|
411
|
+
const { cmdSend } = await import("./commands.js");
|
|
412
|
+
parts.push((await cmdSend("bds", "reload")).trimEnd());
|
|
413
|
+
parts.push(c.green(t("reload.sent")));
|
|
414
|
+
return parts.join("\n") + "\n";
|
|
415
|
+
}
|
|
416
|
+
function reusePackIds(deployed) {
|
|
417
|
+
return {
|
|
418
|
+
bpUuid: deployed.bpUuid,
|
|
419
|
+
rpUuid: deployed.rpUuid,
|
|
420
|
+
bpVersion: deployed.bpVersion,
|
|
421
|
+
rpVersion: deployed.rpVersion,
|
|
422
|
+
...deployed.bpModuleUuid ? { bpModuleUuid: deployed.bpModuleUuid } : {},
|
|
423
|
+
...deployed.rpModuleUuid ? { rpModuleUuid: deployed.rpModuleUuid } : {}
|
|
424
|
+
};
|
|
425
|
+
}
|
|
426
|
+
export {
|
|
427
|
+
cmdModuleBuild,
|
|
428
|
+
cmdModuleReload
|
|
429
|
+
};
|
|
430
|
+
//# sourceMappingURL=module-pack-build.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/module-pack-build.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * module-pack-build.ts \u2014 `mod build` / `mod reload` \u7684 spawn-based \u5B9E\u73B0\n *\n * CLI \u6D3E\u53D1\u7684 module build / reload \u5B50\u547D\u4EE4\u8D70\u8FD9\u91CC\uFF1Bpack-lifecycle.ts \u4FDD\u7559\n * ensurePacksReady \u542F\u52A8\u94A9\u5B50\u4E0E wizard \u5185\u90E8\u6D88\u8D39\u65B9\u7684 in-process \u5165\u53E3\u3002\n *\n * \u5B9E\u9645\u6587\u4EF6\u5199\u5165\uFF08assemble-bp / assemble-rp / deploy / enable-pack / disable-pack /\n * ensure-permission\uFF09\u901A\u8FC7 spawn bds-tools/cli-pack-manager.ts \u7684 verb \u6267\u884C\uFF1B\n * \u4E0E module install/uninstall\uFF08\u2192 tools/fetch-module.mjs\uFF09\u3001module create\n * \uFF08\u2192 tools/new-module.mjs\uFF09\u4FDD\u6301\u540C\u4E00\u67B6\u6784\uFF1ACLI \u662F thin wrapper\uFF0C\u5DE5\u4F5C\u5728\u5916\u90E8\u5DE5\u5177\u3002\n *\n * \u552F\u4E00\u6743\u5A01\uFF1A\u672C\u6587\u4EF6 = `sfmc mod build|reload` \u7684\u6D3E\u53D1\u5165\u53E3\uFF1B\u5176\u4ED6\u6587\u4EF6\u4E0D\u5F97\u518D\n * \u76F4\u63A5 import pack-lifecycle \u7684 cmdPackBuild / deployPacks\uFF08\u786E\u4FDD\u53EA\u6709\u4E00\u4E2A spawn \u5165\u53E3\uFF09\u3002\n */\nimport { spawn } from \"node:child_process\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport process from \"node:process\";\nimport { writeJson } from \"@sfmc-bds/sdk/node/config\";\nimport {\n BP_NAME,\n RP_NAME,\n DEPLOY_CATALOG_NAME,\n bpOut,\n bpSrc,\n rpOut,\n buildRoot,\n computeDesiredCatalog,\n readDeployedCatalog,\n catalogsEqual,\n resolveBdsContext,\n deployedBpDir,\n formatPackLoadInfo,\n scanLocalModules,\n type DeployCatalog,\n} from \"./pack-lifecycle.js\";\nimport { ROOT, resolveServiceScript } from \"./runtime.js\";\nimport { c } from \"./theme.js\";\nimport { t } from \"./i18n/index.js\";\nimport { pushLog } from \"./logs.js\";\n\ntype SpawnResult = { code: number | null; output: string };\n\n/** spawn bds-tools/cli-pack-manager.ts \u5B50\u8FDB\u7A0B\uFF1B\u6355\u83B7 stdout+stderr\u3002 */\nfunction spawnPackManager(args: string[]): Promise<SpawnResult> {\n return new Promise((resolve) => {\n const script = resolveServiceScript(\"pack-manager\");\n const proc = spawn(process.execPath, [script, ...args], {\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n env: { ...process.env, SFMC_ROOT: ROOT, SFMC_SERVICE: \"pack-manager\" },\n });\n let output = \"\";\n proc.stdout?.on(\"data\", (d: Buffer) => {\n output += d.toString();\n });\n proc.stderr?.on(\"data\", (d: Buffer) => {\n output += d.toString();\n });\n proc.on(\"exit\", (code) => resolve({ code, output }));\n proc.on(\"error\", (e) => resolve({ code: 1, output: `${output}${e.message}` }));\n });\n}\n\n/* esbuild bundle \u2014\u2014 JS bundler \u662F in-process \u5E93\uFF0C\u4E0D\u8D70 spawn\u3002 */\nasync function bundleBehaviorPackScript(): Promise<void> {\n const mods = await scanLocalModules();\n const entries = mods.filter((m) => m.enabled && m.entryPath).map((m) => m.entryPath!);\n const outFile = path.join(bpSrc(), \"scripts\", \"main.js\");\n await fs.mkdir(path.dirname(outFile), { recursive: true });\n\n if (entries.length === 0) {\n await fs.writeFile(outFile, \"/* no modules enabled */\\n\", \"utf8\");\n pushLog(\"no enabled SAPI modules \u2014 empty main.js\", \"pack\", \"warn\");\n return;\n }\n\n const { build } = await import(\"esbuild\");\n const sdkRoot = await resolveSdkRootForEsbuild();\n await build({\n entryPoints: entries,\n outfile: outFile,\n bundle: true,\n platform: \"neutral\",\n format: \"esm\",\n target: \"es2022\",\n logLevel: \"warning\",\n sourcemap: false,\n external: [\"@minecraft/*\"],\n tsconfigRaw: JSON.stringify({\n compilerOptions: {\n module: \"ESNext\",\n moduleResolution: \"bundler\",\n target: \"ES2022\",\n strict: true,\n skipLibCheck: true,\n },\n }),\n plugins: [createSdkResolvePlugin(sdkRoot)],\n });\n pushLog(`esbuild bundled ${entries.length} entr(y/ies)`, \"pack\", \"info\");\n}\n\nasync function resolveSdkRootForEsbuild(): Promise<string> {\n const { resolveSdkPackageRoot } = await import(\"./runtime.js\");\n return resolveSdkPackageRoot();\n}\n\n/** esbuild \u63D2\u4EF6\uFF1A\u89E3\u6790 @sfmc-bds/sdk \u7684 exports \u5B57\u6BB5\uFF08\u4E0E pack-lifecycle.ts \u5185\u90E8\u5B9E\u73B0\u540C\u6B65\uFF09\u3002 */\nfunction createSdkResolvePlugin(sdkRoot: string): import(\"esbuild\").Plugin {\n const pkg = JSON.parse(readFileSync(path.join(sdkRoot, \"package.json\"), \"utf8\")) as {\n exports?: Record<string, string | { import?: string; default?: string; types?: string }>;\n };\n const exportsMap = pkg.exports ?? {};\n\n function resolveExportSubpath(subpath: string): string | null {\n const key = subpath === \"\" ? \".\" : `./${subpath}`;\n const entry = exportsMap[key];\n if (!entry) return null;\n const rel = typeof entry === \"string\" ? entry : (entry.import ?? entry.default);\n if (!rel || typeof rel !== \"string\") return null;\n const abs = path.join(sdkRoot, rel);\n return existsSync(abs) ? abs : null;\n }\n\n return {\n name: \"sfmc-sdk-resolve\",\n setup(build) {\n build.onResolve({ filter: /^@sfmc(?:-bds)?\\/sdk(?:\\/|$)/ }, (args) => {\n const normalized = args.path.replace(/^@sfmc\\/sdk/, \"@sfmc-bds/sdk\");\n const sub = normalized === \"@sfmc-bds/sdk\" ? \"\" : normalized.slice(\"@sfmc-bds/sdk/\".length);\n const resolved = resolveExportSubpath(sub);\n if (!resolved) {\n return {\n errors: [\n {\n text: `Cannot resolve ${args.path} under SDK at ${sdkRoot} (export \"./${sub || \".\"}\" missing or file absent; run sdk:build?)`,\n },\n ],\n };\n }\n return { path: resolved };\n });\n },\n };\n}\n\n/** spawn assemble-bp verb\u3002 */\nasync function spawnAssembleBp(catalog: DeployCatalog): Promise<SpawnResult> {\n const args = [\n \"assemble-bp\",\n \"--src\",\n bpSrc(),\n \"--out\",\n bpOut(),\n \"--name\",\n BP_NAME,\n \"--uuid\",\n catalog.bpUuid,\n \"--version\",\n catalog.bpVersion.join(\",\"),\n ];\n if (catalog.bpModuleUuid) args.push(\"--module-uuid\", catalog.bpModuleUuid);\n const r = await spawnPackManager(args);\n if (r.code === 0) {\n pushLog(`assembled BP uuid=${catalog.bpUuid}`, \"pack\", \"info\");\n }\n return r;\n}\n\n/** spawn assemble-rp verb\uFF1B\u65E0 RP \u65F6\u6E05\u7406\u65E7\u4EA7\u7269\u3002 */\nasync function spawnAssembleRp(\n catalog: DeployCatalog,\n rpDirs: Record<string, string>\n): Promise<SpawnResult> {\n if (!catalog.rpUuid || Object.keys(rpDirs).length === 0) {\n await fs.rm(rpOut(), { recursive: true, force: true });\n pushLog(\"no enabled resource packs \u2014 RP skipped\", \"pack\", \"info\");\n return { code: 0, output: \"[pack-manager] no enabled resource packs \u2014 RP skipped\\n\" };\n }\n const mapFile = path.join(buildRoot(), \"rp-map.json\");\n await fs.mkdir(buildRoot(), { recursive: true });\n await fs.writeFile(mapFile, JSON.stringify(rpDirs), \"utf8\");\n const args = [\n \"assemble-rp\",\n \"--modules-json\",\n mapFile,\n \"--out\",\n rpOut(),\n \"--name\",\n RP_NAME,\n \"--uuid\",\n catalog.rpUuid,\n \"--version\",\n (catalog.rpVersion ?? [1, 0, 0]).join(\",\"),\n ];\n if (catalog.rpModuleUuid) args.push(\"--module-uuid\", catalog.rpModuleUuid);\n const r = await spawnPackManager(args);\n if (r.code === 0) {\n pushLog(\n `assembled RP uuid=${catalog.rpUuid} (${Object.keys(rpDirs).length} modules)`,\n \"pack\",\n \"info\"\n );\n }\n return r;\n}\n\n/** spawn deploy verb\uFF1B\u65E0 RP \u65F6\u5E26 --clear-rp\u3002 */\nasync function spawnDeploy(catalog: DeployCatalog): Promise<SpawnResult> {\n const { bdsRoot, levelName } = resolveBdsContext();\n const args = [\n \"deploy\",\n \"--bds-root\",\n bdsRoot,\n \"--level\",\n levelName,\n \"--bp-src\",\n bpOut(),\n \"--bp-name\",\n BP_NAME,\n \"--rp-name\",\n RP_NAME,\n ];\n if (catalog.rpUuid && existsSync(rpOut())) {\n args.push(\"--rp-src\", rpOut());\n } else {\n args.push(\"--clear-rp\");\n }\n const r = await spawnPackManager(args);\n if (r.code === 0) {\n pushLog(`deployed to worlds/${levelName}`, \"pack\", \"info\");\n }\n return r;\n}\n\n/** spawn enable-pack verb\uFF1ABP \u5FC5\u987B\uFF0CRP \u4EC5\u5728\u6709 UUID \u65F6\u3002 */\nasync function spawnEnablePacks(catalog: DeployCatalog): Promise<SpawnResult> {\n const { bdsRoot, levelName } = resolveBdsContext();\n const worldsDir = path.join(bdsRoot, \"worlds\");\n let output = \"\";\n const bpArgs = [\n \"enable-pack\",\n \"--worlds-dir\",\n worldsDir,\n \"--level\",\n levelName,\n \"--kind\",\n \"behavior\",\n \"--pack-id\",\n catalog.bpUuid,\n \"--version\",\n catalog.bpVersion.join(\",\"),\n ];\n const bpR = await spawnPackManager(bpArgs);\n output += bpR.output;\n if (bpR.code !== 0) return { code: bpR.code, output };\n pushLog(\n `enabled behavior pack ${catalog.bpUuid} in world list`,\n \"pack\",\n \"info\"\n );\n if (catalog.rpUuid && catalog.rpVersion) {\n const rpArgs = [\n \"enable-pack\",\n \"--worlds-dir\",\n worldsDir,\n \"--level\",\n levelName,\n \"--kind\",\n \"resource\",\n \"--pack-id\",\n catalog.rpUuid,\n \"--version\",\n catalog.rpVersion.join(\",\"),\n ];\n const rpR = await spawnPackManager(rpArgs);\n output += rpR.output;\n if (rpR.code !== 0) return { code: rpR.code, output };\n pushLog(\n `enabled resource pack ${catalog.rpUuid} in world list`,\n \"pack\",\n \"info\"\n );\n }\n return { code: 0, output };\n}\n\n/** spawn disable-pack verb\uFF1A\u6E05\u7406\u8FC7\u671F UUID\uFF08uuid \u8F6E\u6362 / \u4E0D\u518D\u63D0\u4F9B RP\uFF09\u3002 */\nasync function spawnDisableStale(\n current: DeployCatalog,\n bdsRoot: string,\n levelName: string\n): Promise<void> {\n const previous = await collectDeployedPackUuids(bdsRoot, levelName);\n const worldsDir = path.join(bdsRoot, \"worlds\");\n for (const staleRp of previous.rp) {\n if (staleRp === (current.rpUuid ?? null)) continue;\n const r = await spawnPackManager([\n \"disable-pack\",\n \"--worlds-dir\",\n worldsDir,\n \"--level\",\n levelName,\n \"--kind\",\n \"resource\",\n \"--pack-id\",\n staleRp,\n \"--version\",\n \"1,0,0\",\n ]);\n if (r.code === 0) {\n pushLog(`disabled stale resource pack ${staleRp}`, \"pack\", \"info\");\n } else {\n pushLog(\n `disable stale RP ${staleRp} failed: ${r.output.trim()}`,\n \"pack\",\n \"warn\"\n );\n }\n }\n for (const staleBp of previous.bp) {\n if (staleBp === current.bpUuid) continue;\n const r = await spawnPackManager([\n \"disable-pack\",\n \"--worlds-dir\",\n worldsDir,\n \"--level\",\n levelName,\n \"--kind\",\n \"behavior\",\n \"--pack-id\",\n staleBp,\n \"--version\",\n \"1,0,0\",\n ]);\n if (r.code === 0) {\n pushLog(`disabled stale behavior pack ${staleBp}`, \"pack\", \"info\");\n } else {\n pushLog(\n `disable stale BP ${staleBp} failed: ${r.output.trim()}`,\n \"pack\",\n \"warn\"\n );\n }\n }\n}\n\n/** \u901A\u8FC7 bds-tools \u7684 list-installed + read-manifest \u62FF\u5230 deployed UUID\uFF08spawn\uFF09\u3002 */\nasync function collectDeployedPackUuids(\n bdsRoot: string,\n levelName: string\n): Promise<{ bp: Set<string>; rp: Set<string> }> {\n const bp = new Set<string>();\n const rp = new Set<string>();\n const cat = readDeployedCatalog(bdsRoot, levelName);\n if (cat?.bpUuid) bp.add(cat.bpUuid);\n if (cat?.rpUuid) rp.add(cat.rpUuid);\n // \u901A\u8FC7 read-manifest \u770B\u4E16\u754C\u78C1\u76D8 BP/RP manifest \u7684 uuid\uFF0C\u4F5C\u4E3A catalog \u7F3A\u5931\u65F6\u7684\u515C\u5E95\u3002\n const bpDir = path.join(bdsRoot, \"worlds\", levelName, \"behavior_packs\", BP_NAME);\n const rpDir = path.join(bdsRoot, \"worlds\", levelName, \"resource_packs\", RP_NAME);\n const bpR = await spawnPackManager([\"read-manifest\", \"--pack-dir\", bpDir]);\n if (bpR.code === 0) {\n try {\n const j = JSON.parse(bpR.output.trim()) as { uuid?: string } | null;\n if (j?.uuid) bp.add(j.uuid);\n } catch {\n /* ignore */\n }\n }\n const rpR = await spawnPackManager([\"read-manifest\", \"--pack-dir\", rpDir]);\n if (rpR.code === 0) {\n try {\n const j = JSON.parse(rpR.output.trim()) as { uuid?: string } | null;\n if (j?.uuid) rp.add(j.uuid);\n } catch {\n /* ignore */\n }\n }\n return { bp, rp };\n}\n\n/** spawn ensure-permission verb\u3002 */\nasync function spawnEnsurePermission(catalog: DeployCatalog): Promise<SpawnResult> {\n const { bdsRoot } = resolveBdsContext();\n const r = await spawnPackManager([\n \"ensure-permission\",\n \"--bds-root\",\n bdsRoot,\n \"--pack-id\",\n catalog.bpUuid,\n ]);\n return r;\n}\n\n/**\n * `sfmc mod build` \u2014\u2014 \u7EC4\u88C5 BP + RP\uFF08\u4E0D\u90E8\u7F72\uFF09\u3002\n * \u4EC5\u5F53 catalog \u4E0E\u4E16\u754C\u5185\u5DF2\u90E8\u7F72\u4E0D\u4E00\u81F4\u65F6\u6267\u884C\uFF1B\u5426\u5219\u76F4\u63A5\u6253\"\u5DF2\u540C\u6B65\"\u3002\n */\nexport async function cmdModuleBuild(_args: string[]): Promise<string> {\n try {\n const { bdsRoot, levelName } = resolveBdsContext();\n const deployed = readDeployedCatalog(bdsRoot, levelName);\n const desired = await computeDesiredCatalog(deployed ? reusePackIds(deployed) : undefined);\n\n if (deployed && catalogsEqual(desired, deployed)) {\n return formatPackLoadInfo(desired, false);\n }\n\n pushLog(\n `building BP/RP (modules=${Object.keys(desired.modules).length})\u2026`,\n \"pack\",\n \"info\"\n );\n await bundleBehaviorPackScript();\n\n const mods = await scanLocalModules();\n const rpDirs: Record<string, string> = {};\n for (const m of mods) {\n if (!m.enabled || !m.hasResourcePack) continue;\n rpDirs[m.folderId] = path.join(\"modules\", \"packages\", m.folderId, \"resource_pack\");\n }\n\n const bpR = await spawnAssembleBp(desired);\n if (bpR.code !== 0) return c.red(bpR.output.trim() || `assemble-bp exit ${bpR.code}`);\n const rpR = await spawnAssembleRp(desired, rpDirs);\n if (rpR.code !== 0) return c.red(rpR.output.trim() || `assemble-rp exit ${rpR.code}`);\n\n desired.generatedAt = Date.now();\n if (Object.keys(rpDirs).length === 0) {\n desired.rpUuid = null;\n desired.rpVersion = null;\n }\n writeJson(path.join(bpOut(), DEPLOY_CATALOG_NAME), desired);\n\n return c.green(t(\"pack.built\", { path: bpOut() })) + \"\\n\" + formatPackLoadInfo(desired, true);\n } catch (e) {\n return c.red((e as Error).message);\n }\n}\n\n/**\n * `sfmc mod reload [--build-only]` \u2014\u2014 \u7EC4\u88C5 + \u90E8\u7F72 + \u6E05\u7406\u8FC7\u671F + \u5199\u6743\u9650 + \uFF08\u9ED8\u8BA4\uFF09\u53D1 reload \u5230 BDS\u3002\n */\nexport async function cmdModuleReload(args: string[]): Promise<string> {\n const buildOnly = args.includes(\"--build-only\");\n const parts: string[] = [];\n\n const buildMsg = await cmdModuleBuild([]);\n parts.push(buildMsg.trimEnd());\n if (buildMsg.startsWith(c.red(\"\"))) return parts.join(\"\\n\") + \"\\n\";\n\n try {\n const { bdsRoot, levelName } = resolveBdsContext();\n const desired = await computeDesiredCatalog();\n\n const depR = await spawnDeploy(desired);\n if (depR.code !== 0) {\n return parts.join(\"\\n\") + \"\\n\" + c.red(depR.output.trim() || `deploy exit ${depR.code}`);\n }\n parts.push(depR.output.trimEnd());\n\n writeJson(path.join(deployedBpDir(bdsRoot, levelName), DEPLOY_CATALOG_NAME), desired);\n\n await spawnDisableStale(desired, bdsRoot, levelName);\n\n const enR = await spawnEnablePacks(desired);\n if (enR.code !== 0) {\n return parts.join(\"\\n\") + \"\\n\" + c.red(enR.output.trim() || `enable-pack exit ${enR.code}`);\n }\n parts.push(enR.output.trimEnd());\n\n const perR = await spawnEnsurePermission(desired);\n if (perR.code !== 0) {\n return parts.join(\"\\n\") + \"\\n\" + c.red(perR.output.trim() || `ensure-permission exit ${perR.code}`);\n }\n parts.push(perR.output.trimEnd());\n } catch (e) {\n return parts.join(\"\\n\") + \"\\n\" + c.red((e as Error).message);\n }\n\n if (buildOnly) {\n parts.push(c.dim(t(\"reload.buildOnly\")));\n return parts.join(\"\\n\") + \"\\n\";\n }\n\n const { isServiceRunning } = await import(\"./services.js\");\n if (!(await isServiceRunning(\"bds\"))) {\n parts.push(c.yellow(t(\"reload.bdsNotRunning\")));\n return parts.join(\"\\n\") + \"\\n\";\n }\n const { cmdSend } = await import(\"./commands.js\");\n parts.push((await cmdSend(\"bds\", \"reload\")).trimEnd());\n parts.push(c.green(t(\"reload.sent\")));\n return parts.join(\"\\n\") + \"\\n\";\n}\n\nfunction reusePackIds(\n deployed: DeployCatalog\n): Parameters<typeof computeDesiredCatalog>[0] {\n return {\n bpUuid: deployed.bpUuid,\n rpUuid: deployed.rpUuid,\n bpVersion: deployed.bpVersion,\n rpVersion: deployed.rpVersion,\n ...(deployed.bpModuleUuid ? { bpModuleUuid: deployed.bpModuleUuid } : {}),\n ...(deployed.rpModuleUuid ? { rpModuleUuid: deployed.rpModuleUuid } : {}),\n };\n}"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
export interface PublishFlags {
|
|
2
|
+
dryRun: boolean;
|
|
3
|
+
bump: "patch" | "minor" | "major" | "custom" | null;
|
|
4
|
+
customVersion: string | null;
|
|
5
|
+
scope: string | null;
|
|
6
|
+
skipIndexPr: boolean;
|
|
7
|
+
tag: string;
|
|
8
|
+
access: "public" | "restricted";
|
|
9
|
+
ghRepo: string;
|
|
10
|
+
ghPush: boolean;
|
|
11
|
+
ghForkRemote: string;
|
|
12
|
+
}
|
|
13
|
+
export declare const DEFAULT_GH_REPO = "Tanya7z/sfmc-modules";
|
|
14
|
+
export declare function parsePublishFlags(args: string[]): PublishFlags;
|
|
15
|
+
export declare function detectNpmUser(): Promise<{
|
|
16
|
+
ok: true;
|
|
17
|
+
user: string;
|
|
18
|
+
} | {
|
|
19
|
+
ok: false;
|
|
20
|
+
stderr: string;
|
|
21
|
+
}>;
|
|
22
|
+
export declare function defaultScopeFor(user: string): string;
|
|
23
|
+
export declare function translateNpmPublishError(pkgName: string, stderr: string): string;
|
|
24
|
+
export interface PrecheckResult {
|
|
25
|
+
ok: boolean;
|
|
26
|
+
warnings: string[];
|
|
27
|
+
errors: string[];
|
|
28
|
+
/** npm pack --dry-run 解析出的 tarball 内容(包内文件清单)。 */
|
|
29
|
+
tarballFiles: string[];
|
|
30
|
+
}
|
|
31
|
+
export declare function runPrecheck(cwd: string): Promise<PrecheckResult>;
|
|
32
|
+
export declare function bumpSemver(current: string, level: PublishFlags["bump"], custom: string | null): string;
|
|
33
|
+
export declare function writePackageVersion(cwd: string, next: string): Promise<void>;
|
|
34
|
+
export declare function readPackageVersion(cwd: string): Promise<string>;
|
|
35
|
+
export declare function runNpmPublish(cwd: string, pkgName: string, flags: PublishFlags): Promise<{
|
|
36
|
+
ok: boolean;
|
|
37
|
+
code: number | null;
|
|
38
|
+
message: string;
|
|
39
|
+
}>;
|
|
40
|
+
/** 把 `OWNER/REPO` 拆成 [owner, repo]。 */
|
|
41
|
+
export declare function splitOwnerRepo(s: string): [string, string] | null;
|
|
42
|
+
/** 计算 index.json 新条目(语义单一:仅为新版本加一条;已有则跳过)。 */
|
|
43
|
+
export declare function indexEntryFor(pkgName: string, version: string, sdkRange?: string): {
|
|
44
|
+
id: string;
|
|
45
|
+
npm: string;
|
|
46
|
+
version: string;
|
|
47
|
+
sdk: string;
|
|
48
|
+
timestamp: number;
|
|
49
|
+
};
|
|
50
|
+
export declare function openIndexPr(pkgName: string, version: string, opts: {
|
|
51
|
+
dryRun: boolean;
|
|
52
|
+
skipIndexPr: boolean;
|
|
53
|
+
ghPush: boolean;
|
|
54
|
+
ghRepo: string;
|
|
55
|
+
ghForkRemote: string;
|
|
56
|
+
}): Promise<{
|
|
57
|
+
ok: boolean;
|
|
58
|
+
skipped: boolean;
|
|
59
|
+
intent: string[];
|
|
60
|
+
message: string;
|
|
61
|
+
prUrl?: string;
|
|
62
|
+
}>;
|
|
63
|
+
/** 在现有 index.json 上 upsert 一条(map v2);缺文件则建空 map。兼容旧数组并迁移。 */
|
|
64
|
+
export declare function patchIndexFile(indexPath: string, entry: ReturnType<typeof indexEntryFor>): Promise<{
|
|
65
|
+
ok: boolean;
|
|
66
|
+
error?: string;
|
|
67
|
+
}>;
|
|
68
|
+
export declare function cmdModulePublish(args: string[]): Promise<string>;
|
|
69
|
+
//# sourceMappingURL=module-publish.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module-publish.d.ts","sourceRoot":"","sources":["../src/module-publish.ts"],"names":[],"mappings":"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"}
|