@sfmc-bds/cli 0.2.0-beta.10 → 0.2.0-beta.11
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/LICENSE +663 -0
- package/dist/command-surface.test.js +92 -0
- package/dist/command-surface.test.js.map +7 -0
- package/dist/debug-command.test.js +76 -0
- package/dist/debug-command.test.js.map +7 -0
- package/dist/directory-picker.d.ts +27 -0
- package/dist/directory-picker.d.ts.map +1 -0
- package/dist/directory-picker.js +112 -0
- package/dist/directory-picker.js.map +7 -0
- package/dist/i18n/locales/en.d.ts +1 -0
- package/dist/i18n/locales/en.d.ts.map +1 -1
- package/dist/i18n/locales/en.js +1 -0
- 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 +1 -0
- package/dist/i18n/locales/zh-CN.js.map +2 -2
- package/dist/interactive-prompts.d.ts +1 -2
- package/dist/interactive-prompts.d.ts.map +1 -1
- package/dist/interactive-prompts.js +12 -23
- package/dist/interactive-prompts.js.map +3 -3
- package/dist/log-filter.test.js +119 -0
- package/dist/log-filter.test.js.map +7 -0
- package/dist/module-commands.js +1 -1
- package/dist/module-commands.js.map +1 -1
- package/dist/module-pack-build.js.map +1 -1
- package/dist/module-toggle.test.js +37 -0
- package/dist/module-toggle.test.js.map +7 -0
- package/dist/world-packs-uninstall.test.js +54 -0
- package/dist/world-packs-uninstall.test.js.map +7 -0
- package/package.json +14 -12
- package/scripts/module-install/{install-resolver.test.mjs → test/install-resolver.test.ts} +4 -5
- package/scripts/module-install/{link-local.test.mjs → test/link-local.test.ts} +4 -5
- package/scripts/module-install/{local-resolver.test.mjs → test/local-resolver.test.ts} +5 -12
- package/scripts/module-install/{registry-index.test.mjs → test/registry-index.test.ts} +5 -6
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import test from "node:test";
|
|
3
|
+
import { gateTopLevel } from "./cli-gate.js";
|
|
4
|
+
import {
|
|
5
|
+
canRunCommand,
|
|
6
|
+
findModuleSubSpec,
|
|
7
|
+
findTopLevelSpec,
|
|
8
|
+
listPaletteRoots,
|
|
9
|
+
listVisibleModuleSubs,
|
|
10
|
+
listVisibleTopLevelNames,
|
|
11
|
+
resolveModuleTopShorthand
|
|
12
|
+
} from "./command-surface.js";
|
|
13
|
+
const tty = { isTty: true };
|
|
14
|
+
const noTty = { isTty: false };
|
|
15
|
+
test("install \u4E24\u8FB9\u53EF\u7528\uFF08both\uFF09", () => {
|
|
16
|
+
const spec = findModuleSubSpec("install");
|
|
17
|
+
assert.ok(spec);
|
|
18
|
+
assert.equal(canRunCommand(spec, { mode: "argv", ...tty }).ok, true);
|
|
19
|
+
assert.equal(canRunCommand(spec, { mode: "repl", ...tty }).ok, true);
|
|
20
|
+
});
|
|
21
|
+
test("send \u4EC5 REPL\uFF1Aargv \u62D2\u7EDD", () => {
|
|
22
|
+
const spec = findTopLevelSpec("send");
|
|
23
|
+
assert.ok(spec);
|
|
24
|
+
const r = canRunCommand(spec, { mode: "argv", ...tty });
|
|
25
|
+
assert.equal(r.ok, false);
|
|
26
|
+
assert.equal(r.reason, "replOnly");
|
|
27
|
+
assert.equal(canRunCommand(spec, { mode: "repl", ...tty }).ok, true);
|
|
28
|
+
});
|
|
29
|
+
test("status \u4E24\u8FB9\u53EF\u7528", () => {
|
|
30
|
+
const spec = findTopLevelSpec("status");
|
|
31
|
+
assert.ok(spec);
|
|
32
|
+
assert.equal(canRunCommand(spec, { mode: "argv", ...tty }).ok, true);
|
|
33
|
+
assert.equal(canRunCommand(spec, { mode: "repl", ...tty }).ok, true);
|
|
34
|
+
});
|
|
35
|
+
test("build/reload/install \u5728 REPL \u53EF\u89C1", () => {
|
|
36
|
+
const build = findModuleSubSpec("build");
|
|
37
|
+
assert.equal(build?.accent, "dev");
|
|
38
|
+
assert.equal(canRunCommand(build, { mode: "repl", ...tty }).ok, true);
|
|
39
|
+
assert.ok(listVisibleModuleSubs("repl").includes("build"));
|
|
40
|
+
assert.ok(listVisibleModuleSubs("repl").includes("install"));
|
|
41
|
+
});
|
|
42
|
+
test("argv \u9876\u5C42\u5217\u8868\u4E0D\u542B send\uFF1B\u542B debug/install/uninstall", () => {
|
|
43
|
+
const names = listVisibleTopLevelNames("argv");
|
|
44
|
+
assert.ok(!names.includes("send"));
|
|
45
|
+
assert.ok(names.includes("debug"));
|
|
46
|
+
assert.ok(names.includes("install"));
|
|
47
|
+
assert.ok(names.includes("uninstall") || names.includes("remove"));
|
|
48
|
+
assert.ok(names.includes("module") || names.includes("mod"));
|
|
49
|
+
});
|
|
50
|
+
test("REPL \u9876\u5C42\u5217\u8868\u542B send \u4E0E debug", () => {
|
|
51
|
+
const names = listVisibleTopLevelNames("repl");
|
|
52
|
+
assert.ok(names.includes("send"));
|
|
53
|
+
assert.ok(names.includes("debug"));
|
|
54
|
+
assert.ok(names.includes("init"));
|
|
55
|
+
});
|
|
56
|
+
test("accent \u4E0D\u53C2\u4E0E canRun\uFF1Adebug \u4E24\u8FB9\u53EF\u8DD1", () => {
|
|
57
|
+
const spec = findTopLevelSpec("debug");
|
|
58
|
+
assert.equal(spec?.accent, "dev");
|
|
59
|
+
assert.equal(canRunCommand(spec, { mode: "argv", ...tty }).ok, true);
|
|
60
|
+
assert.equal(canRunCommand(spec, { mode: "repl", ...tty }).ok, true);
|
|
61
|
+
});
|
|
62
|
+
test("\u6A21\u5757\u9876\u5C42\u77ED\u547D\u4EE4\u6620\u5C04", () => {
|
|
63
|
+
assert.equal(resolveModuleTopShorthand("i"), "install");
|
|
64
|
+
assert.equal(resolveModuleTopShorthand("remove"), "uninstall");
|
|
65
|
+
assert.equal(resolveModuleTopShorthand("search"), "search");
|
|
66
|
+
assert.equal(resolveModuleTopShorthand("status"), void 0);
|
|
67
|
+
});
|
|
68
|
+
test("logs \u4EC5 REPL\uFF08\u65E0\u53C2\u53F6\u547D\u4EE4\uFF09", () => {
|
|
69
|
+
assert.ok(gateTopLevel("logs", "argv"), "argv \u5E94\u62D2\u7EDD logs");
|
|
70
|
+
assert.equal(gateTopLevel("logs", "repl"), null);
|
|
71
|
+
const logs = listPaletteRoots("repl").find((n) => n.token === "logs");
|
|
72
|
+
assert.ok(logs);
|
|
73
|
+
assert.equal(logs.children, void 0);
|
|
74
|
+
assert.notEqual(logs.freeArgs, true);
|
|
75
|
+
});
|
|
76
|
+
test("\u547D\u4EE4\u9762\u677F\u6839\u5217\u4E0D\u542B module \u77ED\u547D\u4EE4\uFF0C\u7EDF\u4E00\u6302\u5728 /module", () => {
|
|
77
|
+
const roots = listPaletteRoots("repl");
|
|
78
|
+
const tokens = roots.map((n) => n.token);
|
|
79
|
+
for (const shy of ["install", "uninstall", "search", "verify", "link", "create", "dev"]) {
|
|
80
|
+
assert.ok(!tokens.includes(shy), `\u9762\u677F\u6839\u5217\u4E0D\u5E94\u6709 /${shy}`);
|
|
81
|
+
}
|
|
82
|
+
const mod = roots.find((n) => n.token === "module");
|
|
83
|
+
assert.ok(mod?.children?.length);
|
|
84
|
+
const childTokens = mod.children.map((n) => n.token);
|
|
85
|
+
assert.ok(childTokens.includes("install"));
|
|
86
|
+
assert.ok(childTokens.includes("uninstall"));
|
|
87
|
+
assert.ok(!childTokens.includes("create"));
|
|
88
|
+
assert.ok(!childTokens.includes("link"));
|
|
89
|
+
assert.ok(!childTokens.includes("dev"));
|
|
90
|
+
assert.equal(mod.label, "/module");
|
|
91
|
+
});
|
|
92
|
+
//# sourceMappingURL=command-surface.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/command-surface.test.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * command-surface \u901A\u9053\u95E8\u7981\u7EAF\u51FD\u6570\u8868\u9A71\u52A8\n */\nimport assert from \"node:assert/strict\";\nimport test from \"node:test\";\nimport { gateTopLevel } from \"./cli-gate.js\";\nimport {\n canRunCommand,\n findModuleSubSpec,\n findTopLevelSpec,\n listPaletteRoots,\n listVisibleModuleSubs,\n listVisibleTopLevelNames,\n resolveModuleTopShorthand,\n} from \"./command-surface.js\";\n\nconst tty = { isTty: true };\nconst noTty = { isTty: false };\n\ntest(\"install \u4E24\u8FB9\u53EF\u7528\uFF08both\uFF09\", () => {\n const spec = findModuleSubSpec(\"install\");\n assert.ok(spec);\n assert.equal(canRunCommand(spec, { mode: \"argv\", ...tty }).ok, true);\n assert.equal(canRunCommand(spec, { mode: \"repl\", ...tty }).ok, true);\n});\n\ntest(\"send \u4EC5 REPL\uFF1Aargv \u62D2\u7EDD\", () => {\n const spec = findTopLevelSpec(\"send\");\n assert.ok(spec);\n const r = canRunCommand(spec, { mode: \"argv\", ...tty });\n assert.equal(r.ok, false);\n assert.equal(r.reason, \"replOnly\");\n assert.equal(canRunCommand(spec, { mode: \"repl\", ...tty }).ok, true);\n});\n\ntest(\"status \u4E24\u8FB9\u53EF\u7528\", () => {\n const spec = findTopLevelSpec(\"status\");\n assert.ok(spec);\n assert.equal(canRunCommand(spec, { mode: \"argv\", ...tty }).ok, true);\n assert.equal(canRunCommand(spec, { mode: \"repl\", ...tty }).ok, true);\n});\n\ntest(\"build/reload/install \u5728 REPL \u53EF\u89C1\", () => {\n const build = findModuleSubSpec(\"build\");\n assert.equal(build?.accent, \"dev\");\n assert.equal(canRunCommand(build, { mode: \"repl\", ...tty }).ok, true);\n assert.ok(listVisibleModuleSubs(\"repl\").includes(\"build\"));\n assert.ok(listVisibleModuleSubs(\"repl\").includes(\"install\"));\n});\n\ntest(\"argv \u9876\u5C42\u5217\u8868\u4E0D\u542B send\uFF1B\u542B debug/install/uninstall\", () => {\n const names = listVisibleTopLevelNames(\"argv\");\n assert.ok(!names.includes(\"send\"));\n assert.ok(names.includes(\"debug\"));\n assert.ok(names.includes(\"install\"));\n assert.ok(names.includes(\"uninstall\") || names.includes(\"remove\"));\n assert.ok(names.includes(\"module\") || names.includes(\"mod\"));\n});\n\ntest(\"REPL \u9876\u5C42\u5217\u8868\u542B send \u4E0E debug\", () => {\n const names = listVisibleTopLevelNames(\"repl\");\n assert.ok(names.includes(\"send\"));\n assert.ok(names.includes(\"debug\"));\n assert.ok(names.includes(\"init\"));\n});\n\ntest(\"accent \u4E0D\u53C2\u4E0E canRun\uFF1Adebug \u4E24\u8FB9\u53EF\u8DD1\", () => {\n const spec = findTopLevelSpec(\"debug\");\n assert.equal(spec?.accent, \"dev\");\n assert.equal(canRunCommand(spec, { mode: \"argv\", ...tty }).ok, true);\n assert.equal(canRunCommand(spec, { mode: \"repl\", ...tty }).ok, true);\n});\n\ntest(\"\u6A21\u5757\u9876\u5C42\u77ED\u547D\u4EE4\u6620\u5C04\", () => {\n assert.equal(resolveModuleTopShorthand(\"i\"), \"install\");\n assert.equal(resolveModuleTopShorthand(\"remove\"), \"uninstall\");\n assert.equal(resolveModuleTopShorthand(\"search\"), \"search\");\n assert.equal(resolveModuleTopShorthand(\"status\"), undefined);\n});\n\ntest(\"logs \u4EC5 REPL\uFF08\u65E0\u53C2\u53F6\u547D\u4EE4\uFF09\", () => {\n assert.ok(gateTopLevel(\"logs\", \"argv\"), \"argv \u5E94\u62D2\u7EDD logs\");\n assert.equal(gateTopLevel(\"logs\", \"repl\"), null);\n const logs = listPaletteRoots(\"repl\").find((n) => n.token === \"logs\");\n assert.ok(logs);\n assert.equal(logs.children, undefined);\n assert.notEqual(logs.freeArgs, true);\n});\n\ntest(\"\u547D\u4EE4\u9762\u677F\u6839\u5217\u4E0D\u542B module \u77ED\u547D\u4EE4\uFF0C\u7EDF\u4E00\u6302\u5728 /module\", () => {\n const roots = listPaletteRoots(\"repl\");\n const tokens = roots.map((n) => n.token);\n for (const shy of [\"install\", \"uninstall\", \"search\", \"verify\", \"link\", \"create\", \"dev\"]) {\n assert.ok(!tokens.includes(shy), `\u9762\u677F\u6839\u5217\u4E0D\u5E94\u6709 /${shy}`);\n }\n const mod = roots.find((n) => n.token === \"module\");\n assert.ok(mod?.children?.length);\n const childTokens = mod.children.map((n) => n.token);\n assert.ok(childTokens.includes(\"install\"));\n assert.ok(childTokens.includes(\"uninstall\"));\n assert.ok(!childTokens.includes(\"create\"));\n assert.ok(!childTokens.includes(\"link\"));\n assert.ok(!childTokens.includes(\"dev\"));\n assert.equal(mod.label, \"/module\");\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import test from "node:test";
|
|
6
|
+
import { cmdDebug, isDebugTruthy } from "./debug-command.js";
|
|
7
|
+
function setupSfmcRoot(bdsRoot) {
|
|
8
|
+
const root = fs.mkdtempSync(path.join(os.tmpdir(), "sfmc-debug-"));
|
|
9
|
+
fs.mkdirSync(path.join(root, "configs"), { recursive: true });
|
|
10
|
+
fs.writeFileSync(
|
|
11
|
+
path.join(root, "configs", "bds_updater.json"),
|
|
12
|
+
JSON.stringify({ bds_path: bdsRoot.replace(/\\/g, "/") }, null, 2)
|
|
13
|
+
);
|
|
14
|
+
return root;
|
|
15
|
+
}
|
|
16
|
+
test("isDebugTruthy \u4E0E SDK \u5951\u7EA6\u4E00\u81F4", () => {
|
|
17
|
+
assert.equal(isDebugTruthy(true), true);
|
|
18
|
+
assert.equal(isDebugTruthy(1), true);
|
|
19
|
+
assert.equal(isDebugTruthy("yes"), true);
|
|
20
|
+
assert.equal(isDebugTruthy("on"), true);
|
|
21
|
+
assert.equal(isDebugTruthy(false), false);
|
|
22
|
+
assert.equal(isDebugTruthy("no"), false);
|
|
23
|
+
});
|
|
24
|
+
test("debug enable/disable/status \u5199 BDS variables.json", async () => {
|
|
25
|
+
const bdsRoot = fs.mkdtempSync(path.join(os.tmpdir(), "sfmc-bds-"));
|
|
26
|
+
const sfmcRoot = setupSfmcRoot(bdsRoot);
|
|
27
|
+
const prev = process.env.SFMC_ROOT;
|
|
28
|
+
process.env.SFMC_ROOT = sfmcRoot;
|
|
29
|
+
try {
|
|
30
|
+
const variablesPath = path.join(bdsRoot, "config", "default", "variables.json");
|
|
31
|
+
await cmdDebug(["enable"]);
|
|
32
|
+
const afterEnable = JSON.parse(fs.readFileSync(variablesPath, "utf8"));
|
|
33
|
+
assert.equal(afterEnable.sfmc_debug, true);
|
|
34
|
+
const statusOn = await cmdDebug(["status"]);
|
|
35
|
+
assert.match(statusOn, /sfmc_debug/i);
|
|
36
|
+
await cmdDebug(["disable"]);
|
|
37
|
+
const afterDisable = JSON.parse(fs.readFileSync(variablesPath, "utf8"));
|
|
38
|
+
assert.equal(afterDisable.sfmc_debug, false);
|
|
39
|
+
} finally {
|
|
40
|
+
if (prev === void 0) delete process.env.SFMC_ROOT;
|
|
41
|
+
else process.env.SFMC_ROOT = prev;
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
test("debug sentry on/off \u5199 BDS secrets.json", async () => {
|
|
45
|
+
const bdsRoot = fs.mkdtempSync(path.join(os.tmpdir(), "sfmc-bds-"));
|
|
46
|
+
const sfmcRoot = setupSfmcRoot(bdsRoot);
|
|
47
|
+
const prev = process.env.SFMC_ROOT;
|
|
48
|
+
process.env.SFMC_ROOT = sfmcRoot;
|
|
49
|
+
try {
|
|
50
|
+
const secretsPath = path.join(bdsRoot, "config", "default", "secrets.json");
|
|
51
|
+
const dsn = "https://example@o123.ingest.sentry.io/456";
|
|
52
|
+
await cmdDebug(["sentry", "on", "--dsn", dsn]);
|
|
53
|
+
const afterOn = JSON.parse(fs.readFileSync(secretsPath, "utf8"));
|
|
54
|
+
assert.equal(afterOn.SENTRY_DSN, dsn);
|
|
55
|
+
await cmdDebug(["sentry", "off"]);
|
|
56
|
+
const afterOff = JSON.parse(fs.readFileSync(secretsPath, "utf8"));
|
|
57
|
+
assert.equal("SENTRY_DSN" in afterOff, false);
|
|
58
|
+
} finally {
|
|
59
|
+
if (prev === void 0) delete process.env.SFMC_ROOT;
|
|
60
|
+
else process.env.SFMC_ROOT = prev;
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
test("debug sentry on \u7F3A --dsn \u62A5\u9519", async () => {
|
|
64
|
+
const bdsRoot = fs.mkdtempSync(path.join(os.tmpdir(), "sfmc-bds-"));
|
|
65
|
+
const sfmcRoot = setupSfmcRoot(bdsRoot);
|
|
66
|
+
const prev = process.env.SFMC_ROOT;
|
|
67
|
+
process.env.SFMC_ROOT = sfmcRoot;
|
|
68
|
+
try {
|
|
69
|
+
const out = await cmdDebug(["sentry", "on"]);
|
|
70
|
+
assert.match(out, /--dsn|required|需要/i);
|
|
71
|
+
} finally {
|
|
72
|
+
if (prev === void 0) delete process.env.SFMC_ROOT;
|
|
73
|
+
else process.env.SFMC_ROOT = prev;
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
//# sourceMappingURL=debug-command.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/debug-command.test.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * debug-command BDS variables.json / secrets.json \u8BFB\u5199\n */\nimport assert from \"node:assert/strict\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport test from \"node:test\";\nimport { cmdDebug, isDebugTruthy } from \"./debug-command.js\";\n\nfunction setupSfmcRoot(bdsRoot: string): string {\n const root = fs.mkdtempSync(path.join(os.tmpdir(), \"sfmc-debug-\"));\n fs.mkdirSync(path.join(root, \"configs\"), { recursive: true });\n fs.writeFileSync(\n path.join(root, \"configs\", \"bds_updater.json\"),\n JSON.stringify({ bds_path: bdsRoot.replace(/\\\\/g, \"/\") }, null, 2)\n );\n return root;\n}\n\ntest(\"isDebugTruthy \u4E0E SDK \u5951\u7EA6\u4E00\u81F4\", () => {\n assert.equal(isDebugTruthy(true), true);\n assert.equal(isDebugTruthy(1), true);\n assert.equal(isDebugTruthy(\"yes\"), true);\n assert.equal(isDebugTruthy(\"on\"), true);\n assert.equal(isDebugTruthy(false), false);\n assert.equal(isDebugTruthy(\"no\"), false);\n});\n\ntest(\"debug enable/disable/status \u5199 BDS variables.json\", async () => {\n const bdsRoot = fs.mkdtempSync(path.join(os.tmpdir(), \"sfmc-bds-\"));\n const sfmcRoot = setupSfmcRoot(bdsRoot);\n const prev = process.env.SFMC_ROOT;\n process.env.SFMC_ROOT = sfmcRoot;\n\n try {\n const variablesPath = path.join(bdsRoot, \"config\", \"default\", \"variables.json\");\n\n await cmdDebug([\"enable\"]);\n const afterEnable = JSON.parse(fs.readFileSync(variablesPath, \"utf8\")) as { sfmc_debug?: boolean };\n assert.equal(afterEnable.sfmc_debug, true);\n\n const statusOn = await cmdDebug([\"status\"]);\n assert.match(statusOn, /sfmc_debug/i);\n\n await cmdDebug([\"disable\"]);\n const afterDisable = JSON.parse(fs.readFileSync(variablesPath, \"utf8\")) as { sfmc_debug?: boolean };\n assert.equal(afterDisable.sfmc_debug, false);\n } finally {\n if (prev === undefined) delete process.env.SFMC_ROOT;\n else process.env.SFMC_ROOT = prev;\n }\n});\n\ntest(\"debug sentry on/off \u5199 BDS secrets.json\", async () => {\n const bdsRoot = fs.mkdtempSync(path.join(os.tmpdir(), \"sfmc-bds-\"));\n const sfmcRoot = setupSfmcRoot(bdsRoot);\n const prev = process.env.SFMC_ROOT;\n process.env.SFMC_ROOT = sfmcRoot;\n\n try {\n const secretsPath = path.join(bdsRoot, \"config\", \"default\", \"secrets.json\");\n const dsn = \"https://example@o123.ingest.sentry.io/456\";\n\n await cmdDebug([\"sentry\", \"on\", \"--dsn\", dsn]);\n const afterOn = JSON.parse(fs.readFileSync(secretsPath, \"utf8\")) as { SENTRY_DSN?: string };\n assert.equal(afterOn.SENTRY_DSN, dsn);\n\n await cmdDebug([\"sentry\", \"off\"]);\n const afterOff = JSON.parse(fs.readFileSync(secretsPath, \"utf8\")) as Record<string, unknown>;\n assert.equal(\"SENTRY_DSN\" in afterOff, false);\n } finally {\n if (prev === undefined) delete process.env.SFMC_ROOT;\n else process.env.SFMC_ROOT = prev;\n }\n});\n\ntest(\"debug sentry on \u7F3A --dsn \u62A5\u9519\", async () => {\n const bdsRoot = fs.mkdtempSync(path.join(os.tmpdir(), \"sfmc-bds-\"));\n const sfmcRoot = setupSfmcRoot(bdsRoot);\n const prev = process.env.SFMC_ROOT;\n process.env.SFMC_ROOT = sfmcRoot;\n\n try {\n const out = await cmdDebug([\"sentry\", \"on\"]);\n assert.match(out, /--dsn|required|\u9700\u8981/i);\n } finally {\n if (prev === undefined) delete process.env.SFMC_ROOT;\n else process.env.SFMC_ROOT = prev;\n }\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export type DirectoryPickerResult = {
|
|
2
|
+
status: "selected";
|
|
3
|
+
path: string;
|
|
4
|
+
} | {
|
|
5
|
+
status: "cancelled";
|
|
6
|
+
} | {
|
|
7
|
+
status: "unavailable";
|
|
8
|
+
};
|
|
9
|
+
export type PickerCommand = {
|
|
10
|
+
command: string;
|
|
11
|
+
args: string[];
|
|
12
|
+
};
|
|
13
|
+
/** PowerShell 单引号字符串转义。 */
|
|
14
|
+
export declare function escapePowerShellSingleQuoted(value: string): string;
|
|
15
|
+
/** AppleScript 双引号字符串转义。 */
|
|
16
|
+
export declare function escapeAppleScriptString(value: string): string;
|
|
17
|
+
/** 选择器起始目录:默认路径不存在时回退到父目录或 cwd。 */
|
|
18
|
+
export declare function resolvePickerStartDir(defaultDirectory: string): string;
|
|
19
|
+
export declare function buildWindowsPickerScript(title: string, defaultDirectory: string): string;
|
|
20
|
+
export declare function buildMacOsPickerScript(title: string, defaultDirectory: string): string;
|
|
21
|
+
/** 按平台生成原生目录选择器命令候选(先试桌面默认,再试通用工具)。 */
|
|
22
|
+
export declare function buildDirectoryPickerCandidates(platform: NodeJS.Platform, title: string, defaultDirectory: string): PickerCommand[];
|
|
23
|
+
/** 执行单次原生目录选择;命令不存在时返回 unavailable。 */
|
|
24
|
+
export declare function runDirectoryPickerCommand(candidate: PickerCommand): DirectoryPickerResult;
|
|
25
|
+
/** 跨平台系统文件夹选择器(zenity / kdialog / osascript / PowerShell)。 */
|
|
26
|
+
export declare function pickDirectoryDialog(title: string, defaultDirectory: string): DirectoryPickerResult;
|
|
27
|
+
//# sourceMappingURL=directory-picker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directory-picker.d.ts","sourceRoot":"","sources":["../src/directory-picker.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,qBAAqB,GAC7B;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,GACvB;IAAE,MAAM,EAAE,aAAa,CAAA;CAAE,CAAC;AAE9B,MAAM,MAAM,aAAa,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAEhE,2BAA2B;AAC3B,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElE;AAED,4BAA4B;AAC5B,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,mCAAmC;AACnC,wBAAgB,qBAAqB,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAMtE;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,MAAM,CASxF;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAWtF;AAED,uCAAuC;AACvC,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,KAAK,EAAE,MAAM,EACb,gBAAgB,EAAE,MAAM,GACvB,aAAa,EAAE,CA8BjB;AAYD,uCAAuC;AACvC,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,aAAa,GAAG,qBAAqB,CAgBzF;AAED,8DAA8D;AAC9D,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,qBAAqB,CAUlG"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
function escapePowerShellSingleQuoted(value) {
|
|
5
|
+
return value.replace(/'/g, "''");
|
|
6
|
+
}
|
|
7
|
+
function escapeAppleScriptString(value) {
|
|
8
|
+
return value.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
|
|
9
|
+
}
|
|
10
|
+
function resolvePickerStartDir(defaultDirectory) {
|
|
11
|
+
const resolved = path.resolve(defaultDirectory);
|
|
12
|
+
if (fs.existsSync(resolved) && fs.statSync(resolved).isDirectory()) return resolved;
|
|
13
|
+
const parent = path.dirname(resolved);
|
|
14
|
+
if (fs.existsSync(parent) && fs.statSync(parent).isDirectory()) return parent;
|
|
15
|
+
return process.cwd();
|
|
16
|
+
}
|
|
17
|
+
function buildWindowsPickerScript(title, defaultDirectory) {
|
|
18
|
+
const escape = escapePowerShellSingleQuoted;
|
|
19
|
+
return [
|
|
20
|
+
"Add-Type -AssemblyName System.Windows.Forms",
|
|
21
|
+
"$dialog = New-Object System.Windows.Forms.FolderBrowserDialog",
|
|
22
|
+
`$dialog.Description = '${escape(title)}'`,
|
|
23
|
+
`$dialog.SelectedPath = '${escape(defaultDirectory)}'`,
|
|
24
|
+
"if ($dialog.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) { Write-Output $dialog.SelectedPath }"
|
|
25
|
+
].join("; ");
|
|
26
|
+
}
|
|
27
|
+
function buildMacOsPickerScript(title, defaultDirectory) {
|
|
28
|
+
const escTitle = escapeAppleScriptString(title);
|
|
29
|
+
const escPath = escapeAppleScriptString(defaultDirectory.replace(/\\/g, "/"));
|
|
30
|
+
return [
|
|
31
|
+
`set defaultFolder to POSIX file "${escPath}"`,
|
|
32
|
+
"try",
|
|
33
|
+
` POSIX path of (choose folder with prompt "${escTitle}" default location defaultFolder)`,
|
|
34
|
+
"on error number -128",
|
|
35
|
+
' error "User cancelled"',
|
|
36
|
+
"end try"
|
|
37
|
+
].join("\n");
|
|
38
|
+
}
|
|
39
|
+
function buildDirectoryPickerCandidates(platform, title, defaultDirectory) {
|
|
40
|
+
const startDir = resolvePickerStartDir(defaultDirectory);
|
|
41
|
+
if (platform === "win32") {
|
|
42
|
+
const script = buildWindowsPickerScript(title, startDir);
|
|
43
|
+
return [
|
|
44
|
+
{ command: "powershell.exe", args: ["-NoProfile", "-STA", "-Command", script] },
|
|
45
|
+
{ command: "pwsh", args: ["-NoProfile", "-STA", "-Command", script] }
|
|
46
|
+
];
|
|
47
|
+
}
|
|
48
|
+
if (platform === "darwin") {
|
|
49
|
+
return [{ command: "osascript", args: ["-e", buildMacOsPickerScript(title, startDir)] }];
|
|
50
|
+
}
|
|
51
|
+
if (platform === "linux") {
|
|
52
|
+
const desktop = process.env.XDG_CURRENT_DESKTOP ?? "";
|
|
53
|
+
const kdeFirst = /KDE/i.test(desktop);
|
|
54
|
+
const zenity = {
|
|
55
|
+
command: "zenity",
|
|
56
|
+
args: ["--file-selection", "--directory", `--title=${title}`, `--filename=${startDir}/`]
|
|
57
|
+
};
|
|
58
|
+
const kdialog = {
|
|
59
|
+
command: "kdialog",
|
|
60
|
+
args: ["--getexistingdirectory", startDir, "--title", title]
|
|
61
|
+
};
|
|
62
|
+
return kdeFirst ? [kdialog, zenity] : [zenity, kdialog];
|
|
63
|
+
}
|
|
64
|
+
return [];
|
|
65
|
+
}
|
|
66
|
+
function isPickerCancelled(error) {
|
|
67
|
+
if (!error || typeof error !== "object") return false;
|
|
68
|
+
const err = error;
|
|
69
|
+
if (err.status === 1) return true;
|
|
70
|
+
const stderr = typeof err.stderr === "string" ? err.stderr : err.stderr?.toString("utf-8") ?? "";
|
|
71
|
+
if (/cancelled|-128|User cancelled/i.test(stderr)) return true;
|
|
72
|
+
const message = err.message ?? "";
|
|
73
|
+
return /cancelled|-128/i.test(message);
|
|
74
|
+
}
|
|
75
|
+
function runDirectoryPickerCommand(candidate) {
|
|
76
|
+
try {
|
|
77
|
+
const output = execFileSync(candidate.command, candidate.args, {
|
|
78
|
+
encoding: "utf-8",
|
|
79
|
+
windowsHide: true,
|
|
80
|
+
stdio: ["ignore", "pipe", "pipe"]
|
|
81
|
+
});
|
|
82
|
+
const trimmed = output.trim();
|
|
83
|
+
if (!trimmed) return { status: "cancelled" };
|
|
84
|
+
return { status: "selected", path: trimmed };
|
|
85
|
+
} catch (error) {
|
|
86
|
+
const err = error;
|
|
87
|
+
if (err.code === "ENOENT") return { status: "unavailable" };
|
|
88
|
+
if (isPickerCancelled(error)) return { status: "cancelled" };
|
|
89
|
+
return { status: "unavailable" };
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
function pickDirectoryDialog(title, defaultDirectory) {
|
|
93
|
+
const candidates = buildDirectoryPickerCandidates(process.platform, title, defaultDirectory);
|
|
94
|
+
if (candidates.length === 0) return { status: "unavailable" };
|
|
95
|
+
for (const candidate of candidates) {
|
|
96
|
+
const result = runDirectoryPickerCommand(candidate);
|
|
97
|
+
if (result.status === "unavailable") continue;
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
return { status: "unavailable" };
|
|
101
|
+
}
|
|
102
|
+
export {
|
|
103
|
+
buildDirectoryPickerCandidates,
|
|
104
|
+
buildMacOsPickerScript,
|
|
105
|
+
buildWindowsPickerScript,
|
|
106
|
+
escapeAppleScriptString,
|
|
107
|
+
escapePowerShellSingleQuoted,
|
|
108
|
+
pickDirectoryDialog,
|
|
109
|
+
resolvePickerStartDir,
|
|
110
|
+
runDirectoryPickerCommand
|
|
111
|
+
};
|
|
112
|
+
//# sourceMappingURL=directory-picker.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/directory-picker.ts"],
|
|
4
|
+
"sourcesContent": ["import { execFileSync } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\n\nexport type DirectoryPickerResult =\n | { status: \"selected\"; path: string }\n | { status: \"cancelled\" }\n | { status: \"unavailable\" };\n\nexport type PickerCommand = { command: string; args: string[] };\n\n/** PowerShell \u5355\u5F15\u53F7\u5B57\u7B26\u4E32\u8F6C\u4E49\u3002 */\nexport function escapePowerShellSingleQuoted(value: string): string {\n return value.replace(/'/g, \"''\");\n}\n\n/** AppleScript \u53CC\u5F15\u53F7\u5B57\u7B26\u4E32\u8F6C\u4E49\u3002 */\nexport function escapeAppleScriptString(value: string): string {\n return value.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"');\n}\n\n/** \u9009\u62E9\u5668\u8D77\u59CB\u76EE\u5F55\uFF1A\u9ED8\u8BA4\u8DEF\u5F84\u4E0D\u5B58\u5728\u65F6\u56DE\u9000\u5230\u7236\u76EE\u5F55\u6216 cwd\u3002 */\nexport function resolvePickerStartDir(defaultDirectory: string): string {\n const resolved = path.resolve(defaultDirectory);\n if (fs.existsSync(resolved) && fs.statSync(resolved).isDirectory()) return resolved;\n const parent = path.dirname(resolved);\n if (fs.existsSync(parent) && fs.statSync(parent).isDirectory()) return parent;\n return process.cwd();\n}\n\nexport function buildWindowsPickerScript(title: string, defaultDirectory: string): string {\n const escape = escapePowerShellSingleQuoted;\n return [\n \"Add-Type -AssemblyName System.Windows.Forms\",\n \"$dialog = New-Object System.Windows.Forms.FolderBrowserDialog\",\n `$dialog.Description = '${escape(title)}'`,\n `$dialog.SelectedPath = '${escape(defaultDirectory)}'`,\n \"if ($dialog.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) { Write-Output $dialog.SelectedPath }\",\n ].join(\"; \");\n}\n\nexport function buildMacOsPickerScript(title: string, defaultDirectory: string): string {\n const escTitle = escapeAppleScriptString(title);\n const escPath = escapeAppleScriptString(defaultDirectory.replace(/\\\\/g, \"/\"));\n return [\n `set defaultFolder to POSIX file \"${escPath}\"`,\n \"try\",\n ` POSIX path of (choose folder with prompt \"${escTitle}\" default location defaultFolder)`,\n \"on error number -128\",\n ' error \"User cancelled\"',\n \"end try\",\n ].join(\"\\n\");\n}\n\n/** \u6309\u5E73\u53F0\u751F\u6210\u539F\u751F\u76EE\u5F55\u9009\u62E9\u5668\u547D\u4EE4\u5019\u9009\uFF08\u5148\u8BD5\u684C\u9762\u9ED8\u8BA4\uFF0C\u518D\u8BD5\u901A\u7528\u5DE5\u5177\uFF09\u3002 */\nexport function buildDirectoryPickerCandidates(\n platform: NodeJS.Platform,\n title: string,\n defaultDirectory: string\n): PickerCommand[] {\n const startDir = resolvePickerStartDir(defaultDirectory);\n\n if (platform === \"win32\") {\n const script = buildWindowsPickerScript(title, startDir);\n return [\n { command: \"powershell.exe\", args: [\"-NoProfile\", \"-STA\", \"-Command\", script] },\n { command: \"pwsh\", args: [\"-NoProfile\", \"-STA\", \"-Command\", script] },\n ];\n }\n\n if (platform === \"darwin\") {\n return [{ command: \"osascript\", args: [\"-e\", buildMacOsPickerScript(title, startDir)] }];\n }\n\n if (platform === \"linux\") {\n const desktop = process.env.XDG_CURRENT_DESKTOP ?? \"\";\n const kdeFirst = /KDE/i.test(desktop);\n const zenity: PickerCommand = {\n command: \"zenity\",\n args: [\"--file-selection\", \"--directory\", `--title=${title}`, `--filename=${startDir}/`],\n };\n const kdialog: PickerCommand = {\n command: \"kdialog\",\n args: [\"--getexistingdirectory\", startDir, \"--title\", title],\n };\n return kdeFirst ? [kdialog, zenity] : [zenity, kdialog];\n }\n\n return [];\n}\n\nfunction isPickerCancelled(error: unknown): boolean {\n if (!error || typeof error !== \"object\") return false;\n const err = error as NodeJS.ErrnoException & { status?: number | null; stderr?: Buffer | string };\n if (err.status === 1) return true;\n const stderr = typeof err.stderr === \"string\" ? err.stderr : err.stderr?.toString(\"utf-8\") ?? \"\";\n if (/cancelled|-128|User cancelled/i.test(stderr)) return true;\n const message = err.message ?? \"\";\n return /cancelled|-128/i.test(message);\n}\n\n/** \u6267\u884C\u5355\u6B21\u539F\u751F\u76EE\u5F55\u9009\u62E9\uFF1B\u547D\u4EE4\u4E0D\u5B58\u5728\u65F6\u8FD4\u56DE unavailable\u3002 */\nexport function runDirectoryPickerCommand(candidate: PickerCommand): DirectoryPickerResult {\n try {\n const output = execFileSync(candidate.command, candidate.args, {\n encoding: \"utf-8\",\n windowsHide: true,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n const trimmed = output.trim();\n if (!trimmed) return { status: \"cancelled\" };\n return { status: \"selected\", path: trimmed };\n } catch (error) {\n const err = error as NodeJS.ErrnoException;\n if (err.code === \"ENOENT\") return { status: \"unavailable\" };\n if (isPickerCancelled(error)) return { status: \"cancelled\" };\n return { status: \"unavailable\" };\n }\n}\n\n/** \u8DE8\u5E73\u53F0\u7CFB\u7EDF\u6587\u4EF6\u5939\u9009\u62E9\u5668\uFF08zenity / kdialog / osascript / PowerShell\uFF09\u3002 */\nexport function pickDirectoryDialog(title: string, defaultDirectory: string): DirectoryPickerResult {\n const candidates = buildDirectoryPickerCandidates(process.platform, title, defaultDirectory);\n if (candidates.length === 0) return { status: \"unavailable\" };\n\n for (const candidate of candidates) {\n const result = runDirectoryPickerCommand(candidate);\n if (result.status === \"unavailable\") continue;\n return result;\n }\n return { status: \"unavailable\" };\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -246,6 +246,7 @@ export declare const en: {
|
|
|
246
246
|
readonly "prompt.enterPath": "Enter path";
|
|
247
247
|
readonly "prompt.browse": "Browse…";
|
|
248
248
|
readonly "prompt.browseHint": "Open system folder picker";
|
|
249
|
+
readonly "prompt.browseUnavailable": "system picker unavailable; enter path manually";
|
|
249
250
|
readonly "reload.buildOnly": "(deploy done; type reload in BDS/game, or omit --build-only to send automatically)";
|
|
250
251
|
readonly "reload.bdsNotRunning": "BDS is not running — build+deploy finished. After start, type reload in BDS console or in-game.";
|
|
251
252
|
readonly "reload.sent": "Sent reload to BDS";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../../src/i18n/locales/en.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../../src/i18n/locales/en.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,EAAE;aAEb,kBAAkB,EAAE,WAAW;aAC/B,aAAa,EAAE,MAAM;aACrB,iBAAiB,EAAE,UAAU;aAC7B,cAAc,EAAE,kBAAkB;aAClC,cAAc,EAAE,OAAO;aACvB,uBAAuB,EAAE,wBAAwB;aACjD,qBAAqB,EAAE,6BAA6B;aACpD,aAAa,EAAE,MAAM;aACrB,aAAa,EAAE,MAAM;aACrB,aAAa,EAAE,MAAM;aACrB,aAAa,EAAE,QAAQ;aACvB,YAAY,EAAE,KAAK;aAGnB,gBAAgB,EAAE,0BAA0B;aAC5C,YAAY,EAAE,wBAAwB;aACtC,gBAAgB,EAAE,0CAA0C;aAC5D,cAAc,EAAE,gCAAgC;aAChD,eAAe,EAAE,qBAAqB;aACtC,eAAe,EAAE,MAAM;aACvB,eAAe,EAAE,SAAS;aAG1B,cAAc,EAAE,+BAA+B;aAC/C,mBAAmB,EAAE,qEAAqE;aAC1F,aAAa,EAAE,8CAA8C;aAG7D,gBAAgB,EAAE,IAAI;aACtB,iBAAiB,EAAE,KAAK;aACxB,mBAAmB,EAAE,kBAAkB;aACvC,eAAe,EAAE,mEAAmE;aACpF,gBAAgB,EAAE,qEAAqE;aACvF,kBAAkB,EAAE,uBAAuB;aAC3C,sBAAsB,EAAE,oBAAoB;aAC5C,yBAAyB,EAAE,2BAA2B;aACtD,yBAAyB,EAAE,wBAAwB;aACnD,sBAAsB,EAAE,iCAAiC;aACzD,oBAAoB,EAAE,uDAAuD;aAC7E,eAAe,EAAE,iCAAiC;aAClD,aAAa,EAAE,uEAAuE;aACtF,kBAAkB,EAAE,sDAAsD;aAG1E,YAAY,EAAE,sCAAsC;aACpD,iBAAiB,EAAE,WAAW;aAC9B,YAAY,EAAE,QAAQ;aACtB,sBAAsB,EAAE,SAAS;aACjC,gBAAgB,EAAE,kDAAkD;aACpE,eAAe,EAAE,8BAA8B;aAC/C,mBAAmB,EAAE,iDAAiD;aACtE,iBAAiB,EAAE,gEAAgE;aACnF,qBAAqB,EAAE,cAAc;aACrC,qBAAqB,EAAE,cAAc;aACrC,sBAAsB,EAAE,aAAa;aACrC,mBAAmB,EAAE,kBAAkB;aACvC,oBAAoB,EAAE,YAAY;aAClC,sBAAsB,EAAE,yBAAyB;aACjD,aAAa,EAAE,wDAAwD;aACvE,WAAW,EAAE,uCAAuC;aACpD,YAAY,EAAE,sEAAsE;aACpF,WAAW,EAAE,gBAAgB;aAC7B,cAAc,EAAE,mBAAmB;aACnC,WAAW,EAAE,kFAAkF;aAC/F,qBAAqB,EAAE,oBAAoB;aAC3C,aAAa,EAAE,0BAA0B;aACzC,oBAAoB,EAAE,mBAAmB;aACzC,mBAAmB,EAAE,oCAAoC;aACzD,mBAAmB,EAAE,mBAAmB;aACxC,sBAAsB,EAAE,gBAAgB;aACxC,uBAAuB,EAAE,mBAAmB;aAC5C,qBAAqB,EAAE,2BAA2B;aAClD,kBAAkB,EAAE,wBAAwB;aAC5C,oBAAoB,EAAE,oCAAoC;aAC1D,qBAAqB,EAAE,kBAAkB;aACzC,uBAAuB,EAAE,yBAAyB;aAClD,oBAAoB,EAAE,0BAA0B;aAChD,kBAAkB,EAAE,qBAAqB;aACzC,oBAAoB,EAAE,eAAe;aACrC,mBAAmB,EAAE,kCAAkC;aACvD,oBAAoB,EAAE,uCAAuC;aAC7D,oBAAoB,EAAE,uBAAuB;aAC7C,YAAY,EAAE,2BAA2B;aACzC,iBAAiB,EAAE,kBAAkB;aACrC,mBAAmB,EAAE,qBAAqB;aAC1C,mBAAmB,EAAE,eAAe;aACpC,oBAAoB,EAAE,gBAAgB;aACtC,mBAAmB,EAAE,sBAAsB;aAC3C,iBAAiB,EAAE,iBAAiB;aACpC,sBAAsB,EAAE,iBAAiB;aACzC,WAAW,EAAE,cAAc;aAC3B,aAAa,EAAE,yBAAyB;aACxC,cAAc,EAAE,cAAc;aAC9B,WAAW,EAAE,gBAAgB;aAC7B,WAAW,EAAE,MAAM;aACnB,gBAAgB,EAAE,YAAY;aAC9B,mBAAmB,EAAE,2BAA2B;aAChD,qBAAqB,EAAE,mBAAmB;aAC1C,qBAAqB,EAAE,qCAAqC;aAC5D,uBAAuB,EAAE,iBAAiB;aAG1C,eAAe,EAAE,sBAAsB;aACvC,UAAU,EAAE,KAAK;aACjB,gBAAgB,EAAE,4BAA4B;aAC9C,qBAAqB,EAAE,yCAAyC;aAChE,oBAAoB,EAAE,+BAA+B;aACrD,aAAa,EAAE,wCAAwC;aACvD,wBAAwB,EAAE,0BAA0B;aACpD,mBAAmB,EAAE,sEAAsE;aAC3F,mBAAmB,EAAE,uBAAuB;aAC5C,qBAAqB,EAAE,SAAS;aAChC,sBAAsB,EAAE,UAAU;aAClC,sBAAsB,EAAE,UAAU;aAClC,uBAAuB,EAAE,WAAW;aACpC,uBAAuB,EAAE,YAAY;aACrC,uBAAuB,EAAE,YAAY;aACrC,wBAAwB,EAAE,aAAa;aACvC,wBAAwB,EAAE,aAAa;aACvC,kBAAkB,EAAE,cAAc;aAGlC,YAAY,EAAE,UAAU;aACxB,cAAc,EAAE,MAAM;aACtB,gBAAgB,EAAE,QAAQ;aAC1B,eAAe,EAAE,OAAO;aACxB,aAAa,EAAE,KAAK;aACpB,gBAAgB,EAAE,QAAQ;aAC1B,mBAAmB,EAAE,SAAS;aAC9B,mBAAmB,EAAE,SAAS;aAC9B,mBAAmB,EAAE,SAAS;aAC9B,oBAAoB,EAAE,UAAU;aAChC,gBAAgB,EAAE,GAAG;aACrB,aAAa,EAAE,SAAS;aACxB,qBAAqB,EAAE,oBAAoB;aAC3C,aAAa,EAAE,SAAS;aACxB,aAAa,EAAE,uCAAuC;aACtD,gBAAgB,EAAE,mCAAmC;aACrD,gBAAgB,EAAE,eAAe;aACjC,iBAAiB,EAAE,8BAA8B;aACjD,iBAAiB,EAAE,kCAAkC;aACrD,sBAAsB,EAAE,6BAA6B;aACrD,gBAAgB,EAAE,iCAAiC;aACnD,qBAAqB,EAAE,4BAA4B;aACnD,mBAAmB,EAAE,oCAAoC;aACzD,wBAAwB,EAAE,+BAA+B;aACzD,oBAAoB,EAAE,qCAAqC;aAC3D,qBAAqB,EAAE,6BAA6B;aACpD,aAAa,EAAE,iBAAiB;aAChC,iBAAiB,EAAE,2BAA2B;aAC9C,oBAAoB,EAAE,yBAAyB;aAC/C,qBAAqB,EAAE,6BAA6B;aACpD,gBAAgB,EAAE,iBAAiB;aACnC,gBAAgB,EAAE,gCAAgC;aAClD,gBAAgB,EAAE,iCAAiC;aACnD,gBAAgB,EAAE,qBAAqB;aACvC,iBAAiB,EAAE,cAAc;aACjC,eAAe,EAAE,mBAAmB;aACpC,mBAAmB,EAAE,mCAAmC;aACxD,gBAAgB,EAAE,sBAAsB;aACxC,gBAAgB,EAAE,sBAAsB;aACxC,aAAa,EAAE,2BAA2B;aAC1C,sBAAsB,EAAE,iBAAiB;aACzC,sBAAsB,EAAE,iBAAiB;aACzC,qBAAqB,EAAE,gBAAgB;aACvC,oBAAoB,EAAE,kBAAkB;aACxC,wBAAwB,EAAE,qGAAqG;aAC/H,qBAAqB,EAAE,4DAA4D;aACnF,oBAAoB,EAAE,iBAAiB;aACvC,kBAAkB,EAAE,gCAAgC;aACpD,iBAAiB,EAAE,yBAAyB;aAC5C,oBAAoB,EAAE,qCAAqC;aAC3D,gBAAgB,EAAE,0BAA0B;aAC5C,oBAAoB,EAAE,6BAA6B;aACnD,yBAAyB,EAAE,wDAAwD;aACnF,uBAAuB,EAAE,yCAAyC;aAClE,sBAAsB,EAAE,4DAA4D;aACpF,qBAAqB,EAAE,oCAAoC;aAG3D,cAAc,EAAE,iBAAiB;aACjC,cAAc,EAAE,oCAAoC;aACpD,gBAAgB,EAAE,eAAe;aACjC,cAAc,EAAE,8BAA8B;aAC9C,oBAAoB,EAAE,sBAAsB;aAC5C,mBAAmB,EAAE,qDAAqD;aAC1E,mBAAmB,EAAE,uCAAuC;aAC5D,cAAc,EAAE,4BAA4B;aAC5C,kBAAkB,EAAE,uDAAuD;aAC3E,eAAe,EAAE,4BAA4B;aAC7C,wBAAwB,EAAE,iDAAiD;aAC3E,kBAAkB,EAAE,oBAAoB;aACxC,2BAA2B,EAAE,iCAAiC;aAC9D,+BAA+B,EAAE,sCAAsC;aACvE,wBAAwB,EAAE,mBAAmB;aAC7C,4BAA4B,EAAE,8BAA8B;aAC5D,2BAA2B,EAAE,2BAA2B;aACxD,+BAA+B,EAAE,kBAAkB;aACnD,gBAAgB,EAAE,yBAAyB;aAC3C,oBAAoB,EAAE,6BAA6B;aACnD,kBAAkB,EAAE,0BAA0B;aAC9C,sBAAsB,EAAE,kCAAkC;aAC1D,0BAA0B,EAAE,4BAA4B;aACxD,oBAAoB,EAAE,gCAAgC;aACtD,iBAAiB,EAAE,yBAAyB;aAC5C,qBAAqB,EAAE,uBAAuB;aAC9C,cAAc,EAAE,4BAA4B;aAC5C,eAAe,EAAE,uBAAuB;aACxC,kBAAkB,EAAE,kBAAkB;aACtC,sBAAsB,EAAE,oBAAoB;aAC5C,cAAc,EAAE,0BAA0B;aAC1C,iBAAiB,EAAE,iBAAiB;aACpC,oBAAoB,EAAE,qBAAqB;aAC3C,aAAa,EACX,2IAA2I;aAC7I,kBAAkB,EAAE,YAAY;aAChC,oBAAoB,EAAE,mBAAmB;aACzC,sBAAsB,EAAE,iBAAiB;aACzC,wBAAwB,EAAE,SAAS;aACnC,4BAA4B,EAAE,QAAQ;aACtC,wBAAwB,EAAE,SAAS;aACnC,4BAA4B,EAAE,iBAAiB;aAC/C,2BAA2B,EAAE,2CAA2C;aACxE,kBAAkB,EAAE,sBAAsB;aAC1C,iBAAiB,EAAE,kEAAkE;aACrF,6BAA6B,EAAE,eAAe;aAC9C,wBAAwB,EAAE,YAAY;aACtC,wBAAwB,EAAE,kBAAkB;aAC5C,mBAAmB,EACjB,6HAA6H;aAC/H,cAAc,EAAE,kBAAkB;aAClC,qBAAqB,EAAE,gCAAgC;aACvD,oBAAoB,EAAE,0BAA0B;aAChD,sBAAsB,EAAE,iBAAiB;aACzC,kBAAkB,EAAE,SAAS;aAC7B,wBAAwB,EAAE,kBAAkB;aAC5C,uBAAuB,EAAE,iBAAiB;aAC1C,wBAAwB,EAAE,uBAAuB;aACjD,uBAAuB,EAAE,sBAAsB;aAC/C,eAAe,EAAE,uBAAuB;aACxC,kBAAkB,EAAE,4BAA4B;aAChD,aAAa,EAAE,sBAAsB;aACrC,uBAAuB,EAAE,iBAAiB;aAC1C,qBAAqB,EAAE,qBAAqB;aAC5C,sBAAsB,EAAE,gBAAgB;aACxC,aAAa,EAAE,mCAAmC;aAClD,mBAAmB,EAAE,wDAAwD;aAC7E,kBAAkB,EAAE,mBAAmB;aACvC,sBAAsB,EAAE,sEAAsE;aAC9F,qBAAqB,EAAE,8EAA8E;aACrG,0BAA0B,EACxB,uGAAuG;aACzG,mBAAmB,EAAE,wBAAwB;aAC7C,oBAAoB,EAAE,+DAA+D;aACrF,kBAAkB,EAAE,qBAAqB;aACzC,mBAAmB,EAAE,4CAA4C;aACjE,qBAAqB,EAAE,oFAAoF;aAG3G,kBAAkB,EAAE,YAAY;aAChC,eAAe,EAAE,SAAS;aAC1B,mBAAmB,EAAE,2BAA2B;aAChD,0BAA0B,EAAE,gDAAgD;aAG5E,kBAAkB,EAAE,oFAAoF;aACxG,sBAAsB,EACpB,iGAAiG;aACnG,aAAa,EAAE,oBAAoB;aAGnC,UAAU,EAAE,6CAA6C;aAEzD,WAAW,EAAE,oCAAoC;aACjD,gBAAgB,EAAE,mBAAmB;aACrC,mBAAmB,EAAE,4FAA4F;aACjH,mBAAmB,EAAE,qDAAqD;aAC1E,gBAAgB,EAAE,sBAAsB;aACxC,oBAAoB,EAAE,qCAAqC;aAC3D,kBAAkB,EAAE,2BAA2B;aAC/C,cAAc,EAAE,gCAAgC;aAChD,mBAAmB,EAAE,qFAAqF;aAC1G,kBAAkB,EAAE,6BAA6B;aACjD,oBAAoB,EAAE,SAAS;aAC/B,qBAAqB,EAAE,UAAU;aACjC,cAAc,EAAE,cAAc;aAC9B,mBAAmB,EAAE,gCAAgC;aACrD,mBAAmB,EAAE,mDAAmD;aACxE,sBAAsB,EAAE,+CAA+C;aACvE,qBAAqB,EACnB,0IAA0I;aAC5I,kBAAkB,EAAE,wBAAwB;aAC5C,mBAAmB,EAAE,yBAAyB;aAC9C,mBAAmB,EACjB,4FAA4F;aAC9F,iBAAiB,EAAE,4FAA4F;aAC/G,kBAAkB,EAAE,4EAA4E;aAChG,qBAAqB,EAAE,2BAA2B;aAClD,wBAAwB,EAAE,iDAAiD;aAC3E,aAAa,EAAE,4BAA4B;aAG3C,YAAY,EAAE,uBAAuB;aACrC,kBAAkB,EAAE,8BAA8B;aAClD,eAAe,EAAE,gBAAgB;aACjC,mBAAmB,EAAE,+BAA+B;aACpD,mBAAmB,EAAE,+BAA+B;aACpD,iBAAiB,EAAE,6BAA6B;aAChD,gBAAgB,EAAE,oDAAoD;aACtE,aAAa,EAAE,gCAAgC;aAC/C,mBAAmB,EAAE,2BAA2B;aAChD,gBAAgB,EAAE,4BAA4B;aAC9C,iBAAiB,EAAE,6BAA6B;aAChD,gBAAgB,EAAE,iCAAiC;aACnD,YAAY,EAAE,+CAA+C;aAG7D,mBAAmB,EAAE,wCAAwC;aAC7D,kBAAkB,EAAE,gDAAgD;aACpE,gBAAgB,EAAE,oBAAoB;aACtC,yBAAyB,EAAE,wDAAwD;aACnF,yBAAyB,EAAE,wCAAwC;aACnE,oBAAoB,EAAE,yDAAyD;aAC/E,mBAAmB,EAAE,wFAAwF;aAC7G,0BAA0B,EAAE,2BAA2B;aACvD,oBAAoB,EAAE,2DAA2D;aACjF,iBAAiB,EAAE,6BAA6B;aAChD,kBAAkB,EAAE,yCAAyC;aAC7D,mBAAmB,EAAE,mCAAmC;aACxD,qBAAqB,EAAE,2BAA2B;aAClD,kBAAkB,EAAE,+BAA+B;aACnD,wBAAwB,EAAE,iDAAiD;aAC3E,qBAAqB,EAAE,mCAAmC;aAC1D,iBAAiB,EAAE,QAAQ;aAC3B,qBAAqB,EAAE,iBAAiB;aACxC,qBAAqB,EAAE,iBAAiB;aACxC,eAAe,EAAE,KAAK;aACtB,gBAAgB,EAAE,KAAK;aACvB,wBAAwB,EAAE,4BAA4B;aACtD,yBAAyB,EAAE,sDAAsD;aACjF,8BAA8B,EAAE,sEAAsE;aACtG,yBAAyB,EAAE,uDAAuD;aAClF,iBAAiB,EAAE,yBAAyB;aAC5C,oBAAoB,EAAE,wCAAwC;aAC9D,gBAAgB,EAAE,sBAAsB;aACxC,kBAAkB,EAAE,8BAA8B;aAClD,kBAAkB,EAAE,4CAA4C;aAChE,mBAAmB,EAAE,8CAA8C;aACnE,cAAc,EAAE,mDAAmD;aACnE,mBAAmB,EAAE,6BAA6B;aAClD,kBAAkB,EAAE,+CAA+C;aACnE,sBAAsB,EAAE,uCAAuC;aAC/D,qBAAqB,EAAE,iDAAiD;aACxE,oBAAoB,EAAE,mCAAmC;aACzD,kBAAkB,EAAE,gBAAgB;aACpC,oBAAoB,EAAE,mEAAmE;aACzF,kBAAkB,EAAE,sDAAsD;aAC1E,oBAAoB,EAAE,mCAAmC;aACzD,gBAAgB,EAAE,iCAAiC;aACnD,kBAAkB,EAAE,wBAAwB;aAC5C,oBAAoB,EAAE,yCAAyC;aAC/D,oBAAoB,EAAE,mCAAmC;aACzD,uBAAuB,EACrB,uHAAuH;aACzH,2BAA2B,EAAE,8DAA8D;aAC3F,yBAAyB,EAAE,kDAAkD;aAC7E,yBAAyB,EAAE,mCAAmC;aAC9D,4BAA4B,EAAE,+DAA+D;aAC7F,gCAAgC,EAAE,uCAAuC;aACzE,sBAAsB,EAAE,+DAA+D;aACvF,yBAAyB,EAAE,wDAAwD;aACnF,yBAAyB,EAAE,kCAAkC;aAC7D,2BAA2B,EAAE,qBAAqB;aAClD,sBAAsB,EAAE,wBAAwB;aAChD,0BAA0B,EAAE,wBAAwB;aACpD,qBAAqB,EAAE,+CAA+C;aACtE,oBAAoB,EAAE,wEAAwE;aAC9F,kBAAkB,EAAE,+DAA+D;aACnF,kBAAkB,EAAE,oCAAoC;aACxD,mBAAmB,EAAE,0CAA0C;aAC/D,kBAAkB,EAAE,2BAA2B;aAC/C,sBAAsB,EAAE,sCAAsC;aAC9D,mBAAmB,EAAE,eAAe;aACpC,mBAAmB,EAAE,yEAAyE;aAC9F,qBAAqB,EAAE,yDAAyD;aAChF,wBAAwB,EAAE,4DAA4D;aACtF,wBAAwB,EAAE,sDAAsD;aAEhF,oBAAoB,EAClB,uPAAuP;aACzP,wBAAwB,EAAE,oDAAoD;aAC9E,yBAAyB,EAAE,8DAA8D;aACzF,sBAAsB,EAAE,gCAAgC;aACxD,sBAAsB,EAAE,iCAAiC;aACzD,0BAA0B,EAAE,gDAAgD;aAC5E,qBAAqB,EAAE,2DAA2D;aAClF,qBAAqB,EAAE,sEAAsE;aAC7F,wBAAwB,EAAE,sDAAsD;aAChF,0BAA0B,EAAE,6DAA6D;aACzF,4BAA4B,EAAE,mDAAmD;aACjF,wBAAwB,EAAE,cAAc;aACxC,mBAAmB,EAAE,8DAA8D;aACnF,uBAAuB,EAAE,uCAAuC;aAChE,wBAAwB,EAAE,0CAA0C;aACpE,wBAAwB,EAAE,gCAAgC;aAC1D,0BAA0B,EAAE,uCAAuC;aACnE,yBAAyB,EAAE,wDAAwD;aACnF,qBAAqB,EAAE,gCAAgC;aACvD,4BAA4B,EAAE,mCAAmC;aACjE,yBAAyB,EAAE,0BAA0B;aACrD,sBAAsB,EAAE,qCAAqC;aAC7D,qBAAqB,EAAE,YAAY;aACnC,qBAAqB,EAAE,iFAAiF;aACxG,uBAAuB,EAAE,oCAAoC;aAC7D,oBAAoB,EAAE,8BAA8B;aACpD,wBAAwB,EAAE,0BAA0B;aACpD,wBAAwB,EAAE,+BAA+B;aACzD,wBAAwB,EAAE,+BAA+B;aACzD,0BAA0B,EACxB,qGAAqG;aACvG,oBAAoB,EAAE,gCAAgC;aACtD,sBAAsB,EAAE,6BAA6B;aACrD,wBAAwB,EAAE,wCAAwC;CAC1D,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,EAAE,CAAC"}
|
package/dist/i18n/locales/en.js
CHANGED
|
@@ -251,6 +251,7 @@ const en = {
|
|
|
251
251
|
"prompt.enterPath": "Enter path",
|
|
252
252
|
"prompt.browse": "Browse\u2026",
|
|
253
253
|
"prompt.browseHint": "Open system folder picker",
|
|
254
|
+
"prompt.browseUnavailable": "system picker unavailable; enter path manually",
|
|
254
255
|
/* ─── reload ─── */
|
|
255
256
|
"reload.buildOnly": "(deploy done; type reload in BDS/game, or omit --build-only to send automatically)",
|
|
256
257
|
"reload.bdsNotRunning": "BDS is not running \u2014 build+deploy finished. After start, type reload in BDS console or in-game.",
|