@sfmc-bds/cli 0.2.0-beta.5 → 0.2.0-beta.7
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 +95 -0
- package/dist/command-surface.d.ts.map +1 -0
- package/dist/command-surface.js +324 -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 +164 -0
- package/dist/help-text.js.map +7 -0
- package/dist/i18n/locales/en.d.ts +93 -68
- package/dist/i18n/locales/en.d.ts.map +1 -1
- package/dist/i18n/locales/en.js +97 -69
- 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 +140 -106
- 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 +25 -35
- package/dist/module-commands.d.ts.map +1 -1
- package/dist/module-commands.js +107 -65
- 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/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 +707 -417
- 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 +5 -5
- package/dist/module-wizard.d.ts +0 -14
- package/dist/module-wizard.d.ts.map +0 -1
- package/dist/module-wizard.js +0 -313
- package/dist/module-wizard.js.map +0 -7
- 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
package/dist/module-wizard.js
DELETED
|
@@ -1,313 +0,0 @@
|
|
|
1
|
-
import { confirm, intro, isCancel, note, outro, select, tasks, text } from "@clack/prompts";
|
|
2
|
-
import { spawn } from "node:child_process";
|
|
3
|
-
import { existsSync } from "node:fs";
|
|
4
|
-
import path from "node:path";
|
|
5
|
-
import process from "node:process";
|
|
6
|
-
import { t } from "./i18n/index.js";
|
|
7
|
-
import { cmdModuleEnable } from "./module-commands.js";
|
|
8
|
-
import { pickDirectory, resolveUserPath } from "./interactive-prompts.js";
|
|
9
|
-
import { ROOT, resolveFetchModule, resolveNewModule } from "./runtime.js";
|
|
10
|
-
import {
|
|
11
|
-
listSfmcModulePackages,
|
|
12
|
-
packageDirForId,
|
|
13
|
-
persistSfmcModulesRoot,
|
|
14
|
-
resolveSfmcModulesRoot
|
|
15
|
-
} from "./sfmc-modules-root.js";
|
|
16
|
-
import { c } from "./theme.js";
|
|
17
|
-
function isInteractive() {
|
|
18
|
-
return Boolean(process.stdin.isTTY);
|
|
19
|
-
}
|
|
20
|
-
function cancelMessage() {
|
|
21
|
-
return c.dim(t("common.cancelled"));
|
|
22
|
-
}
|
|
23
|
-
function spawnTool(script, args) {
|
|
24
|
-
return new Promise((resolve) => {
|
|
25
|
-
const proc = spawn(process.execPath, [script, ...args], {
|
|
26
|
-
stdio: ["ignore", "pipe", "pipe"],
|
|
27
|
-
env: { ...process.env, SFMC_ROOT: ROOT }
|
|
28
|
-
});
|
|
29
|
-
let output = "";
|
|
30
|
-
proc.stdout?.on("data", (d) => {
|
|
31
|
-
output += d.toString();
|
|
32
|
-
});
|
|
33
|
-
proc.stderr?.on("data", (d) => {
|
|
34
|
-
output += d.toString();
|
|
35
|
-
});
|
|
36
|
-
proc.on("exit", (code) => resolve({ code, output }));
|
|
37
|
-
proc.on("error", (e) => resolve({ code: 1, output: `${output}${e.message}` }));
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
async function ensureSfmcModulesRoot() {
|
|
41
|
-
let modulesRoot = resolveSfmcModulesRoot();
|
|
42
|
-
if (modulesRoot) {
|
|
43
|
-
note(c.text(t("modwiz.sfmcModulesPath", { path: modulesRoot })), t("common.path"));
|
|
44
|
-
return modulesRoot;
|
|
45
|
-
}
|
|
46
|
-
const defaultGuess = path.resolve(ROOT, "..", "sfmc-modules");
|
|
47
|
-
const picked = await pickDirectory(t("modwiz.pickModulesRoot"), defaultGuess);
|
|
48
|
-
modulesRoot = resolveUserPath(picked, ROOT);
|
|
49
|
-
if (!existsSync(path.join(modulesRoot, "packages"))) {
|
|
50
|
-
outro(c.red(t("modwiz.noPackages", { path: modulesRoot })));
|
|
51
|
-
return null;
|
|
52
|
-
}
|
|
53
|
-
persistSfmcModulesRoot(modulesRoot);
|
|
54
|
-
return modulesRoot;
|
|
55
|
-
}
|
|
56
|
-
async function runFetchModuleLink(folderId, pkgPath) {
|
|
57
|
-
const fetchScript = resolveFetchModule();
|
|
58
|
-
if (!fetchScript) {
|
|
59
|
-
return { ok: false, output: c.red(t("modwiz.noFetch")) };
|
|
60
|
-
}
|
|
61
|
-
const fromArg = `dir:${path.resolve(pkgPath)}`;
|
|
62
|
-
const { code, output } = await spawnTool(fetchScript, ["install", folderId, "--from", fromArg, "--link"]);
|
|
63
|
-
return { ok: code === 0, output };
|
|
64
|
-
}
|
|
65
|
-
async function maybeEnableModule(folderId) {
|
|
66
|
-
const enable = await confirm({ message: t("modwiz.enableModule"), initialValue: true });
|
|
67
|
-
if (isCancel(enable) || !enable) return void 0;
|
|
68
|
-
return (await cmdModuleEnable([folderId])).message;
|
|
69
|
-
}
|
|
70
|
-
async function maybeBuildDeploy() {
|
|
71
|
-
const buildDeploy = await confirm({
|
|
72
|
-
message: t("modwiz.buildDeploy"),
|
|
73
|
-
initialValue: true
|
|
74
|
-
});
|
|
75
|
-
if (isCancel(buildDeploy) || !buildDeploy) return;
|
|
76
|
-
const { cmdBehaviorPackBuild, cmdBehaviorPackDeploy } = await import("./commands-behavior-pack.js");
|
|
77
|
-
await tasks([
|
|
78
|
-
{
|
|
79
|
-
title: t("modwiz.task.build"),
|
|
80
|
-
task: async () => {
|
|
81
|
-
const r = await cmdBehaviorPackBuild([]);
|
|
82
|
-
if (!r.ok) throw new Error(r.message.trim());
|
|
83
|
-
return t("common.done");
|
|
84
|
-
}
|
|
85
|
-
},
|
|
86
|
-
{
|
|
87
|
-
title: t("modwiz.task.deploy"),
|
|
88
|
-
task: async () => {
|
|
89
|
-
const r = await cmdBehaviorPackDeploy([]);
|
|
90
|
-
if (!r.ok) throw new Error(r.message.trim());
|
|
91
|
-
return t("common.done");
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
]);
|
|
95
|
-
note(c.yellow(t("modwiz.reloadHint")), t("common.hint"));
|
|
96
|
-
}
|
|
97
|
-
function validateFolderId(value) {
|
|
98
|
-
if (!value?.trim()) return t("common.required");
|
|
99
|
-
if (!/^[a-z][a-z0-9]*(-[a-z0-9]+)*$/.test(value.trim())) {
|
|
100
|
-
return t("modwiz.kebab");
|
|
101
|
-
}
|
|
102
|
-
return void 0;
|
|
103
|
-
}
|
|
104
|
-
async function runModuleCreateWizard() {
|
|
105
|
-
if (!isInteractive()) {
|
|
106
|
-
return c.yellow(t("modwiz.needTty.create"));
|
|
107
|
-
}
|
|
108
|
-
intro(c.bold(t("modwiz.createIntro")));
|
|
109
|
-
const modulesRoot = await ensureSfmcModulesRoot();
|
|
110
|
-
if (!modulesRoot) return cancelMessage();
|
|
111
|
-
const idRaw = await text({
|
|
112
|
-
message: t("modwiz.folderId"),
|
|
113
|
-
placeholder: "my-feature",
|
|
114
|
-
validate: validateFolderId
|
|
115
|
-
});
|
|
116
|
-
if (isCancel(idRaw) || !idRaw) {
|
|
117
|
-
outro(cancelMessage());
|
|
118
|
-
return cancelMessage();
|
|
119
|
-
}
|
|
120
|
-
const folderId = idRaw.trim();
|
|
121
|
-
const target = packageDirForId(modulesRoot, folderId);
|
|
122
|
-
if (existsSync(target)) {
|
|
123
|
-
outro(c.red(t("modwiz.dirExists", { path: target })));
|
|
124
|
-
return c.red(t("modwiz.dirExists", { path: target }));
|
|
125
|
-
}
|
|
126
|
-
const nameRaw = await text({
|
|
127
|
-
message: t("modwiz.displayName"),
|
|
128
|
-
initialValue: folderId,
|
|
129
|
-
validate: (v) => !v?.trim() ? t("common.required") : void 0
|
|
130
|
-
});
|
|
131
|
-
if (isCancel(nameRaw) || !nameRaw) {
|
|
132
|
-
outro(cancelMessage());
|
|
133
|
-
return cancelMessage();
|
|
134
|
-
}
|
|
135
|
-
const template = await select({
|
|
136
|
-
message: t("modwiz.template"),
|
|
137
|
-
options: [
|
|
138
|
-
{ value: "minimal", label: t("modwiz.tpl.minimal"), hint: t("modwiz.tpl.minimalHint") },
|
|
139
|
-
{ value: "db", label: t("modwiz.tpl.db"), hint: t("modwiz.tpl.dbHint") }
|
|
140
|
-
]
|
|
141
|
-
});
|
|
142
|
-
if (isCancel(template)) {
|
|
143
|
-
outro(cancelMessage());
|
|
144
|
-
return cancelMessage();
|
|
145
|
-
}
|
|
146
|
-
const siblingNewModule = path.join(modulesRoot, "tools", "new-module.mjs");
|
|
147
|
-
const platformNewModule = resolveNewModule();
|
|
148
|
-
const useSibling = existsSync(siblingNewModule) && template === "minimal";
|
|
149
|
-
const newModuleScript = useSibling ? siblingNewModule : platformNewModule;
|
|
150
|
-
if (!newModuleScript) {
|
|
151
|
-
outro(c.red(t("modwiz.noNewModule")));
|
|
152
|
-
return c.red(t("modwiz.noNewModule"));
|
|
153
|
-
}
|
|
154
|
-
let scaffoldOutput = "";
|
|
155
|
-
try {
|
|
156
|
-
await tasks([
|
|
157
|
-
{
|
|
158
|
-
title: t("modwiz.genPackage", { id: folderId }),
|
|
159
|
-
task: async () => {
|
|
160
|
-
const spawnArgs = useSibling ? [folderId, nameRaw.trim()] : [folderId, "--name", nameRaw.trim(), "--root", modulesRoot, "--template", String(template)];
|
|
161
|
-
const { code, output } = await spawnTool(newModuleScript, spawnArgs);
|
|
162
|
-
scaffoldOutput = output;
|
|
163
|
-
if (code !== 0) throw new Error(output.trim() || `exit ${code}`);
|
|
164
|
-
return t("modwiz.skeletonWritten");
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
]);
|
|
168
|
-
} catch (e) {
|
|
169
|
-
outro(c.red(e.message));
|
|
170
|
-
return c.red(e.message);
|
|
171
|
-
}
|
|
172
|
-
note(scaffoldOutput.trim() || c.green(t("modwiz.createdNote", { path: target })), t("modwiz.createIntro"));
|
|
173
|
-
const doLink = await confirm({
|
|
174
|
-
message: t("modwiz.linkAsk"),
|
|
175
|
-
initialValue: true
|
|
176
|
-
});
|
|
177
|
-
if (!isCancel(doLink) && doLink) {
|
|
178
|
-
const { ok, output } = await runFetchModuleLink(folderId, target);
|
|
179
|
-
note(output.trim(), ok ? t("modwiz.link") : t("modwiz.linkFailed"));
|
|
180
|
-
if (ok) {
|
|
181
|
-
const enableMsg = await maybeEnableModule(folderId);
|
|
182
|
-
if (enableMsg) note(enableMsg, t("modwiz.enable"));
|
|
183
|
-
await maybeBuildDeploy();
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
outro(c.green(t("modwiz.createDone", { path: target })));
|
|
187
|
-
return c.green(t("modwiz.moduleCreated", { id: folderId }));
|
|
188
|
-
}
|
|
189
|
-
async function runModuleLinkWizard() {
|
|
190
|
-
if (!isInteractive()) {
|
|
191
|
-
return c.yellow(t("modwiz.needTty.link"));
|
|
192
|
-
}
|
|
193
|
-
intro(c.bold(t("modwiz.linkIntro")));
|
|
194
|
-
const modulesRoot = await ensureSfmcModulesRoot();
|
|
195
|
-
if (!modulesRoot) return cancelMessage();
|
|
196
|
-
const packages = listSfmcModulePackages(modulesRoot);
|
|
197
|
-
if (packages.length === 0) {
|
|
198
|
-
outro(c.yellow(t("modwiz.noLinkable", { path: modulesRoot })));
|
|
199
|
-
return c.yellow(t("modwiz.noLinkableShort"));
|
|
200
|
-
}
|
|
201
|
-
const picked = await select({
|
|
202
|
-
message: t("modwiz.pickLink"),
|
|
203
|
-
options: packages.map((p) => ({
|
|
204
|
-
value: p.id,
|
|
205
|
-
label: p.id,
|
|
206
|
-
hint: `${p.name} \xB7 ${p.logicalId}`
|
|
207
|
-
}))
|
|
208
|
-
});
|
|
209
|
-
if (isCancel(picked)) {
|
|
210
|
-
outro(cancelMessage());
|
|
211
|
-
return cancelMessage();
|
|
212
|
-
}
|
|
213
|
-
const pkg = packages.find((p) => p.id === picked);
|
|
214
|
-
let linkOutput = "";
|
|
215
|
-
try {
|
|
216
|
-
await tasks([
|
|
217
|
-
{
|
|
218
|
-
title: t("modwiz.linking", { id: pkg.id }),
|
|
219
|
-
task: async () => {
|
|
220
|
-
const { ok, output } = await runFetchModuleLink(pkg.id, pkg.path);
|
|
221
|
-
linkOutput = output;
|
|
222
|
-
if (!ok) throw new Error(output.trim() || t("modwiz.linkFailed"));
|
|
223
|
-
return t("modwiz.linkSynced");
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
]);
|
|
227
|
-
} catch (e) {
|
|
228
|
-
outro(c.red(e.message));
|
|
229
|
-
return c.red(e.message);
|
|
230
|
-
}
|
|
231
|
-
note(linkOutput.trim(), t("modwiz.link"));
|
|
232
|
-
const enableMsg = await maybeEnableModule(pkg.id);
|
|
233
|
-
if (enableMsg) note(enableMsg, t("modwiz.enable"));
|
|
234
|
-
outro(c.green(t("modwiz.linked", { id: pkg.id })));
|
|
235
|
-
return c.green(t("modwiz.linked", { id: pkg.id }));
|
|
236
|
-
}
|
|
237
|
-
async function runModuleDevWizard() {
|
|
238
|
-
if (!isInteractive()) {
|
|
239
|
-
return c.yellow(t("modwiz.needTty.dev"));
|
|
240
|
-
}
|
|
241
|
-
intro(c.bold(t("modwiz.devIntro")));
|
|
242
|
-
const modulesRoot = await ensureSfmcModulesRoot();
|
|
243
|
-
if (!modulesRoot) return cancelMessage();
|
|
244
|
-
const packages = listSfmcModulePackages(modulesRoot);
|
|
245
|
-
if (packages.length === 0) {
|
|
246
|
-
outro(c.yellow(t("modwiz.noDevPackages", { path: modulesRoot })));
|
|
247
|
-
return c.yellow(t("modwiz.noDevShort"));
|
|
248
|
-
}
|
|
249
|
-
const picked = await select({
|
|
250
|
-
message: t("modwiz.pickDev"),
|
|
251
|
-
options: packages.map((p) => ({
|
|
252
|
-
value: p.id,
|
|
253
|
-
label: p.id,
|
|
254
|
-
hint: `${p.name} \xB7 ${p.logicalId}`
|
|
255
|
-
}))
|
|
256
|
-
});
|
|
257
|
-
if (isCancel(picked)) {
|
|
258
|
-
outro(cancelMessage());
|
|
259
|
-
return cancelMessage();
|
|
260
|
-
}
|
|
261
|
-
const pkg = packages.find((p) => p.id === picked);
|
|
262
|
-
try {
|
|
263
|
-
await tasks([
|
|
264
|
-
{
|
|
265
|
-
title: t("modwiz.linking", { id: pkg.id }),
|
|
266
|
-
task: async () => {
|
|
267
|
-
const { ok, output } = await runFetchModuleLink(pkg.id, pkg.path);
|
|
268
|
-
if (!ok) throw new Error(output.trim() || t("modwiz.linkFailed"));
|
|
269
|
-
return output.trim().split("\n").pop() ?? "linked";
|
|
270
|
-
}
|
|
271
|
-
},
|
|
272
|
-
{
|
|
273
|
-
title: t("modwiz.enabling", { id: pkg.id }),
|
|
274
|
-
task: async () => {
|
|
275
|
-
const r = await cmdModuleEnable([pkg.id]);
|
|
276
|
-
if (!r.ok) throw new Error(r.message.trim());
|
|
277
|
-
return r.message.trim();
|
|
278
|
-
}
|
|
279
|
-
},
|
|
280
|
-
{
|
|
281
|
-
title: t("modwiz.task.build"),
|
|
282
|
-
task: async () => {
|
|
283
|
-
const { cmdBehaviorPackBuild } = await import("./commands-behavior-pack.js");
|
|
284
|
-
const r = await cmdBehaviorPackBuild([]);
|
|
285
|
-
if (!r.ok) throw new Error(r.message.trim());
|
|
286
|
-
return t("common.done");
|
|
287
|
-
}
|
|
288
|
-
},
|
|
289
|
-
{
|
|
290
|
-
title: t("modwiz.task.deploy"),
|
|
291
|
-
task: async () => {
|
|
292
|
-
const { cmdBehaviorPackDeploy } = await import("./commands-behavior-pack.js");
|
|
293
|
-
const r = await cmdBehaviorPackDeploy([]);
|
|
294
|
-
if (!r.ok) throw new Error(r.message.trim());
|
|
295
|
-
return t("common.done");
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
]);
|
|
299
|
-
} catch (e) {
|
|
300
|
-
outro(c.red(e.message));
|
|
301
|
-
return c.red(e.message);
|
|
302
|
-
}
|
|
303
|
-
note(c.yellow(t("modwiz.devHint")), t("common.hint"));
|
|
304
|
-
outro(c.green(t("modwiz.devDone", { id: pkg.id })));
|
|
305
|
-
return c.green(t("modwiz.devReady", { id: pkg.id }));
|
|
306
|
-
}
|
|
307
|
-
export {
|
|
308
|
-
isInteractive as isModuleWizardInteractive,
|
|
309
|
-
runModuleCreateWizard,
|
|
310
|
-
runModuleDevWizard,
|
|
311
|
-
runModuleLinkWizard
|
|
312
|
-
};
|
|
313
|
-
//# sourceMappingURL=module-wizard.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/module-wizard.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * module-wizard.ts \u2014 \u6A21\u5757\u811A\u624B\u67B6 / \u672C\u5730\u8054\u8C03\u4EA4\u4E92\u5411\u5BFC\n *\n * \u590D\u7528 @clack/prompts \u4E0E init \u5411\u5BFC\u76F8\u540C\u4F9D\u8D56\uFF1B\u8584\u5305\u88C5 tools/new-module.mjs\u3001fetch-module.mjs\u3002\n */\n\nimport { confirm, intro, isCancel, note, outro, select, tasks, text } from \"@clack/prompts\";\nimport { spawn } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport process from \"node:process\";\nimport { t } from \"./i18n/index.js\";\nimport { cmdModuleEnable } from \"./module-commands.js\";\nimport { pickDirectory, resolveUserPath } from \"./interactive-prompts.js\";\nimport { ROOT, resolveFetchModule, resolveNewModule } from \"./runtime.js\";\nimport {\n listSfmcModulePackages,\n packageDirForId,\n persistSfmcModulesRoot,\n resolveSfmcModulesRoot,\n} from \"./sfmc-modules-root.js\";\nimport { c } from \"./theme.js\";\n\nfunction isInteractive(): boolean {\n return Boolean(process.stdin.isTTY);\n}\n\nfunction cancelMessage(): string {\n return c.dim(t(\"common.cancelled\"));\n}\n\n/** \u5B50\u8FDB\u7A0B\u6267\u884C\u5DE5\u5177\u811A\u672C\uFF1B\u7528\u53C2\u6570\u6570\u7EC4\u907F\u514D Windows \u542B # \u8DEF\u5F84\u88AB shell \u8BEF\u89E3\u6790\u3002 */\nfunction spawnTool(script: string, args: string[]): Promise<{ code: number | null; output: string }> {\n return new Promise((resolve) => {\n const proc = spawn(process.execPath, [script, ...args], {\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n env: { ...process.env, SFMC_ROOT: ROOT },\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\nasync function ensureSfmcModulesRoot(): Promise<string | null> {\n let modulesRoot = resolveSfmcModulesRoot();\n if (modulesRoot) {\n note(c.text(t(\"modwiz.sfmcModulesPath\", { path: modulesRoot })), t(\"common.path\"));\n return modulesRoot;\n }\n\n const defaultGuess = path.resolve(ROOT, \"..\", \"sfmc-modules\");\n const picked = await pickDirectory(t(\"modwiz.pickModulesRoot\"), defaultGuess);\n modulesRoot = resolveUserPath(picked, ROOT);\n if (!existsSync(path.join(modulesRoot, \"packages\"))) {\n outro(c.red(t(\"modwiz.noPackages\", { path: modulesRoot })));\n return null;\n }\n persistSfmcModulesRoot(modulesRoot);\n return modulesRoot;\n}\n\nasync function runFetchModuleLink(folderId: string, pkgPath: string): Promise<{ ok: boolean; output: string }> {\n const fetchScript = resolveFetchModule();\n if (!fetchScript) {\n return { ok: false, output: c.red(t(\"modwiz.noFetch\")) };\n }\n const fromArg = `dir:${path.resolve(pkgPath)}`;\n const { code, output } = await spawnTool(fetchScript, [\"install\", folderId, \"--from\", fromArg, \"--link\"]);\n return { ok: code === 0, output };\n}\n\nasync function maybeEnableModule(folderId: string): Promise<string | undefined> {\n const enable = await confirm({ message: t(\"modwiz.enableModule\"), initialValue: true });\n if (isCancel(enable) || !enable) return undefined;\n return (await cmdModuleEnable([folderId])).message;\n}\n\nasync function maybeBuildDeploy(): Promise<void> {\n const buildDeploy = await confirm({\n message: t(\"modwiz.buildDeploy\"),\n initialValue: true,\n });\n if (isCancel(buildDeploy) || !buildDeploy) return;\n\n const { cmdBehaviorPackBuild, cmdBehaviorPackDeploy } = await import(\"./commands-behavior-pack.js\");\n await tasks([\n {\n title: t(\"modwiz.task.build\"),\n task: async () => {\n const r = await cmdBehaviorPackBuild([]);\n if (!r.ok) throw new Error(r.message.trim());\n return t(\"common.done\");\n },\n },\n {\n title: t(\"modwiz.task.deploy\"),\n task: async () => {\n const r = await cmdBehaviorPackDeploy([]);\n if (!r.ok) throw new Error(r.message.trim());\n return t(\"common.done\");\n },\n },\n ]);\n note(c.yellow(t(\"modwiz.reloadHint\")), t(\"common.hint\"));\n}\n\nfunction validateFolderId(value: string | undefined): string | undefined {\n if (!value?.trim()) return t(\"common.required\");\n if (!/^[a-z][a-z0-9]*(-[a-z0-9]+)*$/.test(value.trim())) {\n return t(\"modwiz.kebab\");\n }\n return undefined;\n}\n\n/** \u4EA4\u4E92\u5F0F\u521B\u5EFA\u6A21\u5757\u5305\u5E76\u53EF\u9009 link / enable / build+deploy\u3002 */\nexport async function runModuleCreateWizard(): Promise<string> {\n if (!isInteractive()) {\n return c.yellow(t(\"modwiz.needTty.create\"));\n }\n\n intro(c.bold(t(\"modwiz.createIntro\")));\n\n const modulesRoot = await ensureSfmcModulesRoot();\n if (!modulesRoot) return cancelMessage();\n\n const idRaw = await text({\n message: t(\"modwiz.folderId\"),\n placeholder: \"my-feature\",\n validate: validateFolderId,\n });\n if (isCancel(idRaw) || !idRaw) {\n outro(cancelMessage());\n return cancelMessage();\n }\n const folderId = idRaw.trim();\n\n const target = packageDirForId(modulesRoot, folderId);\n if (existsSync(target)) {\n outro(c.red(t(\"modwiz.dirExists\", { path: target })));\n return c.red(t(\"modwiz.dirExists\", { path: target }));\n }\n\n const nameRaw = await text({\n message: t(\"modwiz.displayName\"),\n initialValue: folderId,\n validate: (v) => (!v?.trim() ? t(\"common.required\") : undefined),\n });\n if (isCancel(nameRaw) || !nameRaw) {\n outro(cancelMessage());\n return cancelMessage();\n }\n\n const template = await select({\n message: t(\"modwiz.template\"),\n options: [\n { value: \"minimal\", label: t(\"modwiz.tpl.minimal\"), hint: t(\"modwiz.tpl.minimalHint\") },\n { value: \"db\", label: t(\"modwiz.tpl.db\"), hint: t(\"modwiz.tpl.dbHint\") },\n ],\n });\n if (isCancel(template)) {\n outro(cancelMessage());\n return cancelMessage();\n }\n\n const siblingNewModule = path.join(modulesRoot, \"tools\", \"new-module.mjs\");\n const platformNewModule = resolveNewModule();\n const useSibling = existsSync(siblingNewModule) && template === \"minimal\";\n const newModuleScript = useSibling ? siblingNewModule : platformNewModule;\n if (!newModuleScript) {\n outro(c.red(t(\"modwiz.noNewModule\")));\n return c.red(t(\"modwiz.noNewModule\"));\n }\n\n let scaffoldOutput = \"\";\n try {\n await tasks([\n {\n title: t(\"modwiz.genPackage\", { id: folderId }),\n task: async () => {\n const spawnArgs = useSibling\n ? [folderId, nameRaw.trim()]\n : [folderId, \"--name\", nameRaw.trim(), \"--root\", modulesRoot, \"--template\", String(template)];\n const { code, output } = await spawnTool(newModuleScript, spawnArgs);\n scaffoldOutput = output;\n if (code !== 0) throw new Error(output.trim() || `exit ${code}`);\n return t(\"modwiz.skeletonWritten\");\n },\n },\n ]);\n } catch (e) {\n outro(c.red((e as Error).message));\n return c.red((e as Error).message);\n }\n\n note(scaffoldOutput.trim() || c.green(t(\"modwiz.createdNote\", { path: target })), t(\"modwiz.createIntro\"));\n\n const doLink = await confirm({\n message: t(\"modwiz.linkAsk\"),\n initialValue: true,\n });\n if (!isCancel(doLink) && doLink) {\n const { ok, output } = await runFetchModuleLink(folderId, target);\n note(output.trim(), ok ? t(\"modwiz.link\") : t(\"modwiz.linkFailed\"));\n if (ok) {\n const enableMsg = await maybeEnableModule(folderId);\n if (enableMsg) note(enableMsg, t(\"modwiz.enable\"));\n await maybeBuildDeploy();\n }\n }\n\n outro(c.green(t(\"modwiz.createDone\", { path: target })));\n return c.green(t(\"modwiz.moduleCreated\", { id: folderId }));\n}\n\n/** \u4ECE sfmc-modules/packages \u9009\u62E9\u5E76 --link \u5B89\u88C5\u3002 */\nexport async function runModuleLinkWizard(): Promise<string> {\n if (!isInteractive()) {\n return c.yellow(t(\"modwiz.needTty.link\"));\n }\n\n intro(c.bold(t(\"modwiz.linkIntro\")));\n\n const modulesRoot = await ensureSfmcModulesRoot();\n if (!modulesRoot) return cancelMessage();\n\n const packages = listSfmcModulePackages(modulesRoot);\n if (packages.length === 0) {\n outro(c.yellow(t(\"modwiz.noLinkable\", { path: modulesRoot })));\n return c.yellow(t(\"modwiz.noLinkableShort\"));\n }\n\n const picked = await select({\n message: t(\"modwiz.pickLink\"),\n options: packages.map((p) => ({\n value: p.id,\n label: p.id,\n hint: `${p.name} \u00B7 ${p.logicalId}`,\n })),\n });\n if (isCancel(picked)) {\n outro(cancelMessage());\n return cancelMessage();\n }\n\n const pkg = packages.find((p) => p.id === picked)!;\n let linkOutput = \"\";\n try {\n await tasks([\n {\n title: t(\"modwiz.linking\", { id: pkg.id }),\n task: async () => {\n const { ok, output } = await runFetchModuleLink(pkg.id, pkg.path);\n linkOutput = output;\n if (!ok) throw new Error(output.trim() || t(\"modwiz.linkFailed\"));\n return t(\"modwiz.linkSynced\");\n },\n },\n ]);\n } catch (e) {\n outro(c.red((e as Error).message));\n return c.red((e as Error).message);\n }\n\n note(linkOutput.trim(), t(\"modwiz.link\"));\n const enableMsg = await maybeEnableModule(pkg.id);\n if (enableMsg) note(enableMsg, t(\"modwiz.enable\"));\n\n outro(c.green(t(\"modwiz.linked\", { id: pkg.id })));\n return c.green(t(\"modwiz.linked\", { id: pkg.id }));\n}\n\n/** \u94FE\u63A5 + \u542F\u7528 + \u6784\u5EFA\u90E8\u7F72\uFF08\u672C\u5730\u5F00\u53D1\u4E00\u952E\u6D41\uFF09\u3002 */\nexport async function runModuleDevWizard(): Promise<string> {\n if (!isInteractive()) {\n return c.yellow(t(\"modwiz.needTty.dev\"));\n }\n\n intro(c.bold(t(\"modwiz.devIntro\")));\n\n const modulesRoot = await ensureSfmcModulesRoot();\n if (!modulesRoot) return cancelMessage();\n\n const packages = listSfmcModulePackages(modulesRoot);\n if (packages.length === 0) {\n outro(c.yellow(t(\"modwiz.noDevPackages\", { path: modulesRoot })));\n return c.yellow(t(\"modwiz.noDevShort\"));\n }\n\n const picked = await select({\n message: t(\"modwiz.pickDev\"),\n options: packages.map((p) => ({\n value: p.id,\n label: p.id,\n hint: `${p.name} \u00B7 ${p.logicalId}`,\n })),\n });\n if (isCancel(picked)) {\n outro(cancelMessage());\n return cancelMessage();\n }\n\n const pkg = packages.find((p) => p.id === picked)!;\n\n try {\n await tasks([\n {\n title: t(\"modwiz.linking\", { id: pkg.id }),\n task: async () => {\n const { ok, output } = await runFetchModuleLink(pkg.id, pkg.path);\n if (!ok) throw new Error(output.trim() || t(\"modwiz.linkFailed\"));\n return output.trim().split(\"\\n\").pop() ?? \"linked\";\n },\n },\n {\n title: t(\"modwiz.enabling\", { id: pkg.id }),\n task: async () => {\n const r = await cmdModuleEnable([pkg.id]);\n if (!r.ok) throw new Error(r.message.trim());\n return r.message.trim();\n },\n },\n {\n title: t(\"modwiz.task.build\"),\n task: async () => {\n const { cmdBehaviorPackBuild } = await import(\"./commands-behavior-pack.js\");\n const r = await cmdBehaviorPackBuild([]);\n if (!r.ok) throw new Error(r.message.trim());\n return t(\"common.done\");\n },\n },\n {\n title: t(\"modwiz.task.deploy\"),\n task: async () => {\n const { cmdBehaviorPackDeploy } = await import(\"./commands-behavior-pack.js\");\n const r = await cmdBehaviorPackDeploy([]);\n if (!r.ok) throw new Error(r.message.trim());\n return t(\"common.done\");\n },\n },\n ]);\n } catch (e) {\n outro(c.red((e as Error).message));\n return c.red((e as Error).message);\n }\n\n note(c.yellow(t(\"modwiz.devHint\")), t(\"common.hint\"));\n outro(c.green(t(\"modwiz.devDone\", { id: pkg.id })));\n return c.green(t(\"modwiz.devReady\", { id: pkg.id }));\n}\n\nexport { isInteractive as isModuleWizardInteractive };\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { PackSourceBinding, PackSourcesFile } from "./types.js";
|
|
2
|
-
export declare function packSourcesPath(): string;
|
|
3
|
-
export declare function readPackSources(): PackSourcesFile;
|
|
4
|
-
export declare function writePackSources(data: PackSourcesFile): void;
|
|
5
|
-
export declare function getBinding(bpUuid: string): PackSourceBinding | null;
|
|
6
|
-
export declare function setBinding(bpUuid: string, binding: PackSourceBinding): void;
|
|
7
|
-
export declare function removeBinding(bpUuid: string): boolean;
|
|
8
|
-
export declare function listBindings(): Array<{
|
|
9
|
-
bpUuid: string;
|
|
10
|
-
binding: PackSourceBinding;
|
|
11
|
-
}>;
|
|
12
|
-
//# sourceMappingURL=bindings.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bindings.d.ts","sourceRoot":"","sources":["../../src/pack-update/bindings.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAErE,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,eAAe,IAAI,eAAe,CASjD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CAK5D;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAGnE;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAS3E;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAYrD;AAED,wBAAgB,YAAY,IAAI,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,CAAC,CAGpF"}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { withConfigSchema } from "@sfmc-bds/sdk/node/config";
|
|
2
|
-
import fs from "node:fs";
|
|
3
|
-
import path from "node:path";
|
|
4
|
-
import { ROOT } from "../runtime.js";
|
|
5
|
-
function packSourcesPath() {
|
|
6
|
-
return path.join(ROOT, "packs", "pack-sources.json");
|
|
7
|
-
}
|
|
8
|
-
function readPackSources() {
|
|
9
|
-
const file = packSourcesPath();
|
|
10
|
-
if (!fs.existsSync(file)) return { bindings: {} };
|
|
11
|
-
try {
|
|
12
|
-
const raw = JSON.parse(fs.readFileSync(file, "utf8"));
|
|
13
|
-
return { bindings: raw.bindings ?? {} };
|
|
14
|
-
} catch {
|
|
15
|
-
return { bindings: {} };
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
function writePackSources(data) {
|
|
19
|
-
const file = packSourcesPath();
|
|
20
|
-
fs.mkdirSync(path.dirname(file), { recursive: true });
|
|
21
|
-
const body = withConfigSchema({ bindings: data.bindings ?? {} }, "pack_sources", "packs");
|
|
22
|
-
fs.writeFileSync(file, `${JSON.stringify(body, null, 2)}
|
|
23
|
-
`, "utf8");
|
|
24
|
-
}
|
|
25
|
-
function getBinding(bpUuid) {
|
|
26
|
-
const all = readPackSources();
|
|
27
|
-
return all.bindings[bpUuid.toLowerCase()] ?? all.bindings[bpUuid] ?? null;
|
|
28
|
-
}
|
|
29
|
-
function setBinding(bpUuid, binding) {
|
|
30
|
-
const all = readPackSources();
|
|
31
|
-
const key = bpUuid.toLowerCase();
|
|
32
|
-
for (const k of Object.keys(all.bindings)) {
|
|
33
|
-
if (k.toLowerCase() === key) delete all.bindings[k];
|
|
34
|
-
}
|
|
35
|
-
all.bindings[key] = binding;
|
|
36
|
-
writePackSources(all);
|
|
37
|
-
}
|
|
38
|
-
function removeBinding(bpUuid) {
|
|
39
|
-
const all = readPackSources();
|
|
40
|
-
const key = bpUuid.toLowerCase();
|
|
41
|
-
let removed = false;
|
|
42
|
-
for (const k of Object.keys(all.bindings)) {
|
|
43
|
-
if (k.toLowerCase() === key) {
|
|
44
|
-
delete all.bindings[k];
|
|
45
|
-
removed = true;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
if (removed) writePackSources(all);
|
|
49
|
-
return removed;
|
|
50
|
-
}
|
|
51
|
-
function listBindings() {
|
|
52
|
-
const all = readPackSources();
|
|
53
|
-
return Object.entries(all.bindings).map(([bpUuid, binding]) => ({ bpUuid, binding }));
|
|
54
|
-
}
|
|
55
|
-
export {
|
|
56
|
-
getBinding,
|
|
57
|
-
listBindings,
|
|
58
|
-
packSourcesPath,
|
|
59
|
-
readPackSources,
|
|
60
|
-
removeBinding,
|
|
61
|
-
setBinding,
|
|
62
|
-
writePackSources
|
|
63
|
-
};
|
|
64
|
-
//# sourceMappingURL=bindings.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/pack-update/bindings.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * packs/pack-sources.json \u2014 \u4E16\u754C\u5305\u8FDC\u7A0B\u6E90\u7ED1\u5B9A\n */\nimport { withConfigSchema } from \"@sfmc-bds/sdk/node/config\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { ROOT } from \"../runtime.js\";\nimport type { PackSourceBinding, PackSourcesFile } from \"./types.js\";\n\nexport function packSourcesPath(): string {\n return path.join(ROOT, \"packs\", \"pack-sources.json\");\n}\n\nexport function readPackSources(): PackSourcesFile {\n const file = packSourcesPath();\n if (!fs.existsSync(file)) return { bindings: {} };\n try {\n const raw = JSON.parse(fs.readFileSync(file, \"utf8\")) as PackSourcesFile & { $schema?: string };\n return { bindings: raw.bindings ?? {} };\n } catch {\n return { bindings: {} };\n }\n}\n\nexport function writePackSources(data: PackSourcesFile): void {\n const file = packSourcesPath();\n fs.mkdirSync(path.dirname(file), { recursive: true });\n const body = withConfigSchema({ bindings: data.bindings ?? {} }, \"pack_sources\", \"packs\");\n fs.writeFileSync(file, `${JSON.stringify(body, null, 2)}\\n`, \"utf8\");\n}\n\nexport function getBinding(bpUuid: string): PackSourceBinding | null {\n const all = readPackSources();\n return all.bindings[bpUuid.toLowerCase()] ?? all.bindings[bpUuid] ?? null;\n}\n\nexport function setBinding(bpUuid: string, binding: PackSourceBinding): void {\n const all = readPackSources();\n const key = bpUuid.toLowerCase();\n /* \u6E05\u7406\u65E7\u5927\u5C0F\u5199\u952E */\n for (const k of Object.keys(all.bindings)) {\n if (k.toLowerCase() === key) delete all.bindings[k];\n }\n all.bindings[key] = binding;\n writePackSources(all);\n}\n\nexport function removeBinding(bpUuid: string): boolean {\n const all = readPackSources();\n const key = bpUuid.toLowerCase();\n let removed = false;\n for (const k of Object.keys(all.bindings)) {\n if (k.toLowerCase() === key) {\n delete all.bindings[k];\n removed = true;\n }\n }\n if (removed) writePackSources(all);\n return removed;\n}\n\nexport function listBindings(): Array<{ bpUuid: string; binding: PackSourceBinding }> {\n const all = readPackSources();\n return Object.entries(all.bindings).map(([bpUuid, binding]) => ({ bpUuid, binding }));\n}\n"],
|
|
5
|
-
"mappings": "AAGA,SAAS,wBAAwB;AACjC,OAAO,QAAQ;AACf,OAAO,UAAU;AACjB,SAAS,YAAY;AAGd,SAAS,kBAA0B;AACxC,SAAO,KAAK,KAAK,MAAM,SAAS,mBAAmB;AACrD;AAEO,SAAS,kBAAmC;AACjD,QAAM,OAAO,gBAAgB;AAC7B,MAAI,CAAC,GAAG,WAAW,IAAI,EAAG,QAAO,EAAE,UAAU,CAAC,EAAE;AAChD,MAAI;AACF,UAAM,MAAM,KAAK,MAAM,GAAG,aAAa,MAAM,MAAM,CAAC;AACpD,WAAO,EAAE,UAAU,IAAI,YAAY,CAAC,EAAE;AAAA,EACxC,QAAQ;AACN,WAAO,EAAE,UAAU,CAAC,EAAE;AAAA,EACxB;AACF;AAEO,SAAS,iBAAiB,MAA6B;AAC5D,QAAM,OAAO,gBAAgB;AAC7B,KAAG,UAAU,KAAK,QAAQ,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;AACpD,QAAM,OAAO,iBAAiB,EAAE,UAAU,KAAK,YAAY,CAAC,EAAE,GAAG,gBAAgB,OAAO;AACxF,KAAG,cAAc,MAAM,GAAG,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC;AAAA,GAAM,MAAM;AACrE;AAEO,SAAS,WAAW,QAA0C;AACnE,QAAM,MAAM,gBAAgB;AAC5B,SAAO,IAAI,SAAS,OAAO,YAAY,CAAC,KAAK,IAAI,SAAS,MAAM,KAAK;AACvE;AAEO,SAAS,WAAW,QAAgB,SAAkC;AAC3E,QAAM,MAAM,gBAAgB;AAC5B,QAAM,MAAM,OAAO,YAAY;AAE/B,aAAW,KAAK,OAAO,KAAK,IAAI,QAAQ,GAAG;AACzC,QAAI,EAAE,YAAY,MAAM,IAAK,QAAO,IAAI,SAAS,CAAC;AAAA,EACpD;AACA,MAAI,SAAS,GAAG,IAAI;AACpB,mBAAiB,GAAG;AACtB;AAEO,SAAS,cAAc,QAAyB;AACrD,QAAM,MAAM,gBAAgB;AAC5B,QAAM,MAAM,OAAO,YAAY;AAC/B,MAAI,UAAU;AACd,aAAW,KAAK,OAAO,KAAK,IAAI,QAAQ,GAAG;AACzC,QAAI,EAAE,YAAY,MAAM,KAAK;AAC3B,aAAO,IAAI,SAAS,CAAC;AACrB,gBAAU;AAAA,IACZ;AAAA,EACF;AACA,MAAI,QAAS,kBAAiB,GAAG;AACjC,SAAO;AACT;AAEO,SAAS,eAAsE;AACpF,QAAM,MAAM,gBAAgB;AAC5B,SAAO,OAAO,QAAQ,IAAI,QAAQ,EAAE,IAAI,CAAC,CAAC,QAAQ,OAAO,OAAO,EAAE,QAAQ,QAAQ,EAAE;AACtF;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import type { PackUpdateConfig, PackUpdateMatchConfig } from "./types.js";
|
|
2
|
-
export declare function packUpdateConfigPath(): string;
|
|
3
|
-
export declare function loadPackUpdateConfig(): PackUpdateConfig;
|
|
4
|
-
/** 匹配策略访问器:编排层只读顶层 match,勿挖 providers.*(Demeter) */
|
|
5
|
-
export declare function getPackMatchConfig(cfg: PackUpdateConfig): PackUpdateMatchConfig;
|
|
6
|
-
/** 卸载回收站绝对路径(相对 SFMC_ROOT;缺省走 DEFAULT_PACK_UNINSTALL) */
|
|
7
|
-
export declare function resolvePackTrashDir(cfg?: PackUpdateConfig): string;
|
|
8
|
-
/** 是否使用卸载回收站 */
|
|
9
|
-
export declare function isPackUninstallRecycleBin(cfg?: PackUpdateConfig): boolean;
|
|
10
|
-
/**
|
|
11
|
-
* 解析本次卸载的 trash 目标(DRY:purge + recycleBin 只在一处组合)。
|
|
12
|
-
* 返回 null 表示直接删除。
|
|
13
|
-
*/
|
|
14
|
-
export declare function resolveUninstallTrashDir(opts?: {
|
|
15
|
-
purge?: boolean;
|
|
16
|
-
cfg?: PackUpdateConfig;
|
|
17
|
-
}): string | null;
|
|
18
|
-
/**
|
|
19
|
-
* 确保 configs/pack-update.json 存在;缺失则写入内置 DEFAULTS + $schema。
|
|
20
|
-
*/
|
|
21
|
-
export declare function ensurePackUpdateConfigFile(): string;
|
|
22
|
-
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/pack-update/config.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAA4B,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AA4DpG,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAwBD,wBAAgB,oBAAoB,IAAI,gBAAgB,CAoCvD;AAED,oDAAoD;AACpD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,gBAAgB,GAAG,qBAAqB,CAE/E;AAED,yDAAyD;AACzD,wBAAgB,mBAAmB,CAAC,GAAG,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAKlE;AAED,gBAAgB;AAChB,wBAAgB,yBAAyB,CAAC,GAAG,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAGzE;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,CAAC,EAAE;IAC9C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,gBAAgB,CAAC;CACxB,GAAG,MAAM,GAAG,IAAI,CAIhB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,CAOnD"}
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
import { withConfigSchema } from "@sfmc-bds/sdk/node/config";
|
|
2
|
-
import fs from "node:fs";
|
|
3
|
-
import path from "node:path";
|
|
4
|
-
import { ROOT } from "../runtime.js";
|
|
5
|
-
import { DEFAULT_PACK_UNINSTALL } from "./types.js";
|
|
6
|
-
const DEFAULT_MATCH = {
|
|
7
|
-
nameMinScore: 0.6,
|
|
8
|
-
stripFolderTags: true
|
|
9
|
-
};
|
|
10
|
-
const DEFAULTS = {
|
|
11
|
-
enabled: true,
|
|
12
|
-
checkOnBdsStart: true,
|
|
13
|
-
applyOnBdsStart: true,
|
|
14
|
-
askConfirmOnBind: true,
|
|
15
|
-
probeSourceAfterInstall: true,
|
|
16
|
-
/* 探测绑定默认关闭,避免误更新;可在 pack-update.json 改为 true */
|
|
17
|
-
defaultBindingEnabled: false,
|
|
18
|
-
match: { ...DEFAULT_MATCH },
|
|
19
|
-
providers: {
|
|
20
|
-
curseforge: {
|
|
21
|
-
enabled: true,
|
|
22
|
-
apiKey: "",
|
|
23
|
-
baseUrl: "https://api.curseforge.com",
|
|
24
|
-
searchBaseUrl: "https://api.curse.tools/v1/cf",
|
|
25
|
-
gameId: 78022,
|
|
26
|
-
classId: 4984,
|
|
27
|
-
pageSize: 10,
|
|
28
|
-
preferredReleaseTypes: ["release", "beta", "alpha"]
|
|
29
|
-
}
|
|
30
|
-
},
|
|
31
|
-
versionPolicy: {
|
|
32
|
-
authority: "behavior_pack",
|
|
33
|
-
onUpdateOverwriteBoth: true,
|
|
34
|
-
rpBumpWhenSameMajor: true,
|
|
35
|
-
rpBumpComponent: "patch",
|
|
36
|
-
majorHigherSkipRpBump: true
|
|
37
|
-
},
|
|
38
|
-
startup: {
|
|
39
|
-
sequential: true,
|
|
40
|
-
delayMsBetweenPacks: 0,
|
|
41
|
-
skipDisabledBindings: true,
|
|
42
|
-
failMode: "continue"
|
|
43
|
-
},
|
|
44
|
-
uninstall: { ...DEFAULT_PACK_UNINSTALL }
|
|
45
|
-
};
|
|
46
|
-
function deepMerge(base, over) {
|
|
47
|
-
const out = { ...base };
|
|
48
|
-
for (const [k, v] of Object.entries(over)) {
|
|
49
|
-
if (v && typeof v === "object" && !Array.isArray(v) && typeof base[k] === "object") {
|
|
50
|
-
out[k] = deepMerge(
|
|
51
|
-
base[k],
|
|
52
|
-
v
|
|
53
|
-
);
|
|
54
|
-
} else if (v !== void 0) {
|
|
55
|
-
out[k] = v;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
return out;
|
|
59
|
-
}
|
|
60
|
-
function packUpdateConfigPath() {
|
|
61
|
-
return path.join(ROOT, "configs", "pack-update.json");
|
|
62
|
-
}
|
|
63
|
-
function hoistLegacyMatch(raw) {
|
|
64
|
-
const top = raw.match;
|
|
65
|
-
const providers = raw.providers;
|
|
66
|
-
const cf = providers?.curseforge;
|
|
67
|
-
const nested = cf?.match;
|
|
68
|
-
const pick = top && typeof top === "object" && !Array.isArray(top) ? top : nested && typeof nested === "object" && !Array.isArray(nested) ? nested : void 0;
|
|
69
|
-
if (!pick) return void 0;
|
|
70
|
-
return deepMerge(
|
|
71
|
-
DEFAULT_MATCH,
|
|
72
|
-
pick
|
|
73
|
-
);
|
|
74
|
-
}
|
|
75
|
-
function loadPackUpdateConfig() {
|
|
76
|
-
const cfgPath = packUpdateConfigPath();
|
|
77
|
-
let raw = {};
|
|
78
|
-
if (fs.existsSync(cfgPath)) {
|
|
79
|
-
try {
|
|
80
|
-
raw = JSON.parse(fs.readFileSync(cfgPath, "utf8"));
|
|
81
|
-
} catch {
|
|
82
|
-
raw = {};
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
delete raw.$schema;
|
|
86
|
-
const legacyMatch = hoistLegacyMatch(raw);
|
|
87
|
-
const merged = deepMerge(
|
|
88
|
-
DEFAULTS,
|
|
89
|
-
raw
|
|
90
|
-
);
|
|
91
|
-
if (legacyMatch) {
|
|
92
|
-
merged.match = legacyMatch;
|
|
93
|
-
}
|
|
94
|
-
const envKey = process.env.CURSEFORGE_API_KEY?.trim();
|
|
95
|
-
if (envKey) {
|
|
96
|
-
merged.providers.curseforge.apiKey = envKey;
|
|
97
|
-
}
|
|
98
|
-
const cf = merged.providers.curseforge;
|
|
99
|
-
delete cf.match;
|
|
100
|
-
const match = merged.match;
|
|
101
|
-
delete match.byUuidInArchive;
|
|
102
|
-
delete match.byName;
|
|
103
|
-
return merged;
|
|
104
|
-
}
|
|
105
|
-
function getPackMatchConfig(cfg) {
|
|
106
|
-
return cfg.match;
|
|
107
|
-
}
|
|
108
|
-
function resolvePackTrashDir(cfg) {
|
|
109
|
-
const c = cfg ?? loadPackUpdateConfig();
|
|
110
|
-
const fallback = DEFAULT_PACK_UNINSTALL.trashRelativeDir;
|
|
111
|
-
const rel = (c.uninstall?.trashRelativeDir || fallback).trim() || fallback;
|
|
112
|
-
return path.isAbsolute(rel) ? rel : path.join(ROOT, rel);
|
|
113
|
-
}
|
|
114
|
-
function isPackUninstallRecycleBin(cfg) {
|
|
115
|
-
const c = cfg ?? loadPackUpdateConfig();
|
|
116
|
-
return c.uninstall?.recycleBin !== false;
|
|
117
|
-
}
|
|
118
|
-
function resolveUninstallTrashDir(opts) {
|
|
119
|
-
const cfg = opts?.cfg ?? loadPackUpdateConfig();
|
|
120
|
-
if (opts?.purge || !isPackUninstallRecycleBin(cfg)) return null;
|
|
121
|
-
return resolvePackTrashDir(cfg);
|
|
122
|
-
}
|
|
123
|
-
function ensurePackUpdateConfigFile() {
|
|
124
|
-
const dest = packUpdateConfigPath();
|
|
125
|
-
if (fs.existsSync(dest)) return dest;
|
|
126
|
-
fs.mkdirSync(path.dirname(dest), { recursive: true });
|
|
127
|
-
const seeded = withConfigSchema({ ...DEFAULTS }, "pack_update");
|
|
128
|
-
fs.writeFileSync(dest, `${JSON.stringify(seeded, null, 2)}
|
|
129
|
-
`, "utf8");
|
|
130
|
-
return dest;
|
|
131
|
-
}
|
|
132
|
-
export {
|
|
133
|
-
ensurePackUpdateConfigFile,
|
|
134
|
-
getPackMatchConfig,
|
|
135
|
-
isPackUninstallRecycleBin,
|
|
136
|
-
loadPackUpdateConfig,
|
|
137
|
-
packUpdateConfigPath,
|
|
138
|
-
resolvePackTrashDir,
|
|
139
|
-
resolveUninstallTrashDir
|
|
140
|
-
};
|
|
141
|
-
//# sourceMappingURL=config.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/pack-update/config.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * pack-update \u914D\u7F6E\u52A0\u8F7D\n */\nimport { withConfigSchema } from \"@sfmc-bds/sdk/node/config\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { ROOT } from \"../runtime.js\";\nimport type { CurseForgeProviderConfig, PackUpdateConfig, PackUpdateMatchConfig } from \"./types.js\";\nimport { DEFAULT_PACK_UNINSTALL } from \"./types.js\";\n\nconst DEFAULT_MATCH: PackUpdateMatchConfig = {\n nameMinScore: 0.6,\n stripFolderTags: true,\n};\n\nconst DEFAULTS: PackUpdateConfig = {\n enabled: true,\n checkOnBdsStart: true,\n applyOnBdsStart: true,\n askConfirmOnBind: true,\n probeSourceAfterInstall: true,\n /* \u63A2\u6D4B\u7ED1\u5B9A\u9ED8\u8BA4\u5173\u95ED\uFF0C\u907F\u514D\u8BEF\u66F4\u65B0\uFF1B\u53EF\u5728 pack-update.json \u6539\u4E3A true */\n defaultBindingEnabled: false,\n match: { ...DEFAULT_MATCH },\n providers: {\n curseforge: {\n enabled: true,\n apiKey: \"\",\n baseUrl: \"https://api.curseforge.com\",\n searchBaseUrl: \"https://api.curse.tools/v1/cf\",\n gameId: 78022,\n classId: 4984,\n pageSize: 10,\n preferredReleaseTypes: [\"release\", \"beta\", \"alpha\"],\n },\n },\n versionPolicy: {\n authority: \"behavior_pack\",\n onUpdateOverwriteBoth: true,\n rpBumpWhenSameMajor: true,\n rpBumpComponent: \"patch\",\n majorHigherSkipRpBump: true,\n },\n startup: {\n sequential: true,\n delayMsBetweenPacks: 0,\n skipDisabledBindings: true,\n failMode: \"continue\",\n },\n uninstall: { ...DEFAULT_PACK_UNINSTALL },\n};\n\nfunction deepMerge<T extends Record<string, unknown>>(base: T, over: Partial<T>): T {\n const out = { ...base };\n for (const [k, v] of Object.entries(over)) {\n if (v && typeof v === \"object\" && !Array.isArray(v) && typeof (base as Record<string, unknown>)[k] === \"object\") {\n (out as Record<string, unknown>)[k] = deepMerge(\n (base as Record<string, unknown>)[k] as Record<string, unknown>,\n v as Record<string, unknown>\n );\n } else if (v !== undefined) {\n (out as Record<string, unknown>)[k] = v;\n }\n }\n return out;\n}\n\nexport function packUpdateConfigPath(): string {\n return path.join(ROOT, \"configs\", \"pack-update.json\");\n}\n\n/**\n * \u5C06\u65E7\u7248\u6302\u5728 providers.curseforge.match \u7684\u5B57\u6BB5\u63D0\u5347\u5230\u9876\u5C42 match\uFF08\u517C\u5BB9\u4E00\u7248\uFF09\u3002\n * \u9876\u5C42\u663E\u5F0F\u914D\u7F6E\u4F18\u5148\u4E8E\u5D4C\u5957\u9057\u7559\u3002\n */\nfunction hoistLegacyMatch(raw: Record<string, unknown>): PackUpdateMatchConfig | undefined {\n const top = raw.match;\n const providers = raw.providers as Record<string, unknown> | undefined;\n const cf = providers?.curseforge as Record<string, unknown> | undefined;\n const nested = cf?.match;\n const pick =\n top && typeof top === \"object\" && !Array.isArray(top)\n ? (top as Partial<PackUpdateMatchConfig>)\n : nested && typeof nested === \"object\" && !Array.isArray(nested)\n ? (nested as Partial<PackUpdateMatchConfig>)\n : undefined;\n if (!pick) return undefined;\n return deepMerge(\n DEFAULT_MATCH as unknown as Record<string, unknown>,\n pick as Record<string, unknown>\n ) as unknown as PackUpdateMatchConfig;\n}\n\nexport function loadPackUpdateConfig(): PackUpdateConfig {\n const cfgPath = packUpdateConfigPath();\n let raw: Record<string, unknown> = {};\n if (fs.existsSync(cfgPath)) {\n try {\n raw = JSON.parse(fs.readFileSync(cfgPath, \"utf8\")) as Record<string, unknown>;\n } catch {\n raw = {};\n }\n }\n\n delete raw.$schema;\n\n const legacyMatch = hoistLegacyMatch(raw);\n const merged = deepMerge(\n DEFAULTS as unknown as Record<string, unknown>,\n raw as Record<string, unknown>\n ) as unknown as PackUpdateConfig;\n\n if (legacyMatch) {\n merged.match = legacyMatch;\n }\n\n const envKey = process.env.CURSEFORGE_API_KEY?.trim();\n if (envKey) {\n merged.providers.curseforge.apiKey = envKey;\n }\n\n /* \u5265\u79BB\u66FE\u6302\u5728 CF \u4E0B\u7684 match / \u672A\u63A5\u7EBF\u6B7B\u5B57\u6BB5\uFF0C\u907F\u514D\u810F\u914D\u7F6E\u6E17\u5165 Provider\uFF08Demeter/\u5951\u7EA6\uFF09 */\n const cf = merged.providers.curseforge as CurseForgeProviderConfig & Record<string, unknown>;\n delete cf.match;\n const match = merged.match as PackUpdateMatchConfig & Record<string, unknown>;\n delete match.byUuidInArchive;\n delete match.byName;\n\n return merged;\n}\n\n/** \u5339\u914D\u7B56\u7565\u8BBF\u95EE\u5668\uFF1A\u7F16\u6392\u5C42\u53EA\u8BFB\u9876\u5C42 match\uFF0C\u52FF\u6316 providers.*\uFF08Demeter\uFF09 */\nexport function getPackMatchConfig(cfg: PackUpdateConfig): PackUpdateMatchConfig {\n return cfg.match;\n}\n\n/** \u5378\u8F7D\u56DE\u6536\u7AD9\u7EDD\u5BF9\u8DEF\u5F84\uFF08\u76F8\u5BF9 SFMC_ROOT\uFF1B\u7F3A\u7701\u8D70 DEFAULT_PACK_UNINSTALL\uFF09 */\nexport function resolvePackTrashDir(cfg?: PackUpdateConfig): string {\n const c = cfg ?? loadPackUpdateConfig();\n const fallback = DEFAULT_PACK_UNINSTALL.trashRelativeDir;\n const rel = (c.uninstall?.trashRelativeDir || fallback).trim() || fallback;\n return path.isAbsolute(rel) ? rel : path.join(ROOT, rel);\n}\n\n/** \u662F\u5426\u4F7F\u7528\u5378\u8F7D\u56DE\u6536\u7AD9 */\nexport function isPackUninstallRecycleBin(cfg?: PackUpdateConfig): boolean {\n const c = cfg ?? loadPackUpdateConfig();\n return c.uninstall?.recycleBin !== false;\n}\n\n/**\n * \u89E3\u6790\u672C\u6B21\u5378\u8F7D\u7684 trash \u76EE\u6807\uFF08DRY\uFF1Apurge + recycleBin \u53EA\u5728\u4E00\u5904\u7EC4\u5408\uFF09\u3002\n * \u8FD4\u56DE null \u8868\u793A\u76F4\u63A5\u5220\u9664\u3002\n */\nexport function resolveUninstallTrashDir(opts?: {\n purge?: boolean;\n cfg?: PackUpdateConfig;\n}): string | null {\n const cfg = opts?.cfg ?? loadPackUpdateConfig();\n if (opts?.purge || !isPackUninstallRecycleBin(cfg)) return null;\n return resolvePackTrashDir(cfg);\n}\n\n/**\n * \u786E\u4FDD configs/pack-update.json \u5B58\u5728\uFF1B\u7F3A\u5931\u5219\u5199\u5165\u5185\u7F6E DEFAULTS + $schema\u3002\n */\nexport function ensurePackUpdateConfigFile(): string {\n const dest = packUpdateConfigPath();\n if (fs.existsSync(dest)) return dest;\n fs.mkdirSync(path.dirname(dest), { recursive: true });\n const seeded = withConfigSchema({ ...DEFAULTS } as unknown as Record<string, unknown>, \"pack_update\");\n fs.writeFileSync(dest, `${JSON.stringify(seeded, null, 2)}\\n`, \"utf8\");\n return dest;\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|