@bedrockkit/cli 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/LICENSE +21 -0
  2. package/README.en.md +122 -0
  3. package/README.md +123 -0
  4. package/dist/cli.js +118 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands/build.js +154 -0
  7. package/dist/commands/build.js.map +1 -0
  8. package/dist/commands/bump.js +156 -0
  9. package/dist/commands/bump.js.map +1 -0
  10. package/dist/commands/config.js +29 -0
  11. package/dist/commands/config.js.map +1 -0
  12. package/dist/commands/deps.js +116 -0
  13. package/dist/commands/deps.js.map +1 -0
  14. package/dist/commands/import.js +328 -0
  15. package/dist/commands/import.js.map +1 -0
  16. package/dist/commands/index.js +84 -0
  17. package/dist/commands/index.js.map +1 -0
  18. package/dist/commands/init.js +445 -0
  19. package/dist/commands/init.js.map +1 -0
  20. package/dist/commands/package.js +143 -0
  21. package/dist/commands/package.js.map +1 -0
  22. package/dist/commands/setting.js +48 -0
  23. package/dist/commands/setting.js.map +1 -0
  24. package/dist/commands/sync.js +173 -0
  25. package/dist/commands/sync.js.map +1 -0
  26. package/dist/commands/template.js +144 -0
  27. package/dist/commands/template.js.map +1 -0
  28. package/dist/commands/validate.js +180 -0
  29. package/dist/commands/validate.js.map +1 -0
  30. package/dist/commands/watch.js +117 -0
  31. package/dist/commands/watch.js.map +1 -0
  32. package/dist/config.js +76 -0
  33. package/dist/config.js.map +1 -0
  34. package/dist/core/config.js +137 -0
  35. package/dist/core/config.js.map +1 -0
  36. package/dist/core/constants.js +47 -0
  37. package/dist/core/constants.js.map +1 -0
  38. package/dist/core/logger.js +10 -0
  39. package/dist/core/logger.js.map +1 -0
  40. package/dist/core/manifest.js +147 -0
  41. package/dist/core/manifest.js.map +1 -0
  42. package/dist/core/scaffold.js +14 -0
  43. package/dist/core/scaffold.js.map +1 -0
  44. package/dist/core/script-api.js +111 -0
  45. package/dist/core/script-api.js.map +1 -0
  46. package/dist/core/templates.js +92 -0
  47. package/dist/core/templates.js.map +1 -0
  48. package/dist/help.js +35 -0
  49. package/dist/help.js.map +1 -0
  50. package/dist/manifest.js +155 -0
  51. package/dist/manifest.js.map +1 -0
  52. package/dist/templates.js +92 -0
  53. package/dist/templates.js.map +1 -0
  54. package/dist/types.js +2 -0
  55. package/dist/types.js.map +1 -0
  56. package/dist/utils/archive.js +27 -0
  57. package/dist/utils/archive.js.map +1 -0
  58. package/dist/utils/args.js +39 -0
  59. package/dist/utils/args.js.map +1 -0
  60. package/dist/utils/config-discovery.js +48 -0
  61. package/dist/utils/config-discovery.js.map +1 -0
  62. package/dist/utils/fs.js +29 -0
  63. package/dist/utils/fs.js.map +1 -0
  64. package/dist/utils/i18n.js +356 -0
  65. package/dist/utils/i18n.js.map +1 -0
  66. package/dist/utils/ignore.js +36 -0
  67. package/dist/utils/ignore.js.map +1 -0
  68. package/dist/utils/js-to-ts.js +90 -0
  69. package/dist/utils/js-to-ts.js.map +1 -0
  70. package/dist/utils/npm-install.js +153 -0
  71. package/dist/utils/npm-install.js.map +1 -0
  72. package/dist/utils/npm.js +74 -0
  73. package/dist/utils/npm.js.map +1 -0
  74. package/dist/utils/settings.js +46 -0
  75. package/dist/utils/settings.js.map +1 -0
  76. package/dist/utils/tooling.js +158 -0
  77. package/dist/utils/tooling.js.map +1 -0
  78. package/dist/utils/ui.js +61 -0
  79. package/dist/utils/ui.js.map +1 -0
  80. package/dist/utils/version.js +23 -0
  81. package/dist/utils/version.js.map +1 -0
  82. package/package.json +59 -0
@@ -0,0 +1,92 @@
1
+ import { readFile, writeFile } from "node:fs/promises";
2
+ import { resolve } from "node:path";
3
+ import { randomUUID } from "node:crypto";
4
+ import { ensureDir, pathExists } from "./utils/fs.js";
5
+ import { spawn } from "node:child_process";
6
+ export const knownTemplates = [
7
+ { value: "official-sample", label: "Official sample", hint: "Mojang sample packs" },
8
+ { value: "custom-git", label: "Custom Git URL", hint: "Provide your own repository" },
9
+ ];
10
+ export const templateRegistryPath = resolve(process.cwd(), ".bkit", "templates.json");
11
+ export async function loadTemplateRegistry() {
12
+ if (!(await pathExists(templateRegistryPath))) {
13
+ return knownTemplates.map((t) => ({
14
+ name: t.value,
15
+ url: "",
16
+ }));
17
+ }
18
+ const raw = await readFile(templateRegistryPath, { encoding: "utf8" });
19
+ return JSON.parse(raw);
20
+ }
21
+ export async function saveTemplateRegistry(entries) {
22
+ const dir = resolve(templateRegistryPath, "..");
23
+ await ensureDir(dir);
24
+ await writeFile(templateRegistryPath, JSON.stringify(entries, null, 2), {
25
+ encoding: "utf8",
26
+ });
27
+ }
28
+ export async function cloneTemplate(name, url, opts = {}) {
29
+ const baseDir = resolve(process.cwd(), ".bkit", "templates");
30
+ const dest = opts.targetDir ?? resolve(baseDir, name);
31
+ await ensureDir(baseDir);
32
+ await ensureDir(dest);
33
+ const env = { ...process.env };
34
+ const sshCommand = opts.sshCommand ??
35
+ process.env.BKIT_SSH_COMMAND ??
36
+ (process.env.BKIT_SSH_KEY
37
+ ? `ssh -i "${process.env.BKIT_SSH_KEY}" -o StrictHostKeyChecking=accept-new`
38
+ : undefined);
39
+ if (sshCommand) {
40
+ env.GIT_SSH_COMMAND = sshCommand;
41
+ }
42
+ const run = (useShell) => new Promise((resolveRun, rejectRun) => {
43
+ const child = spawn("git", ["clone", "--depth", "1", url, dest], {
44
+ stdio: "inherit",
45
+ shell: useShell,
46
+ env,
47
+ });
48
+ child.on("error", (err) => {
49
+ if (!useShell && err.code === "EINVAL") {
50
+ run(true).then(resolveRun).catch(rejectRun);
51
+ }
52
+ else {
53
+ rejectRun(err);
54
+ }
55
+ });
56
+ child.on("exit", (code) => {
57
+ if (code === 0)
58
+ resolveRun();
59
+ else if (!useShell)
60
+ run(true).then(resolveRun).catch(rejectRun);
61
+ else
62
+ rejectRun(new Error(`git clone exited with code ${code}`));
63
+ });
64
+ });
65
+ await run(process.platform === "win32");
66
+ return dest;
67
+ }
68
+ export async function materializeTemplate(nameOrUrl, registry, opts) {
69
+ const entry = registry.find((t) => t.name === nameOrUrl);
70
+ const isLikelyGit = (u) => !!u && /^(https?:\/\/|git@|ssh:\/\/|file:\/\/|\.{0,2}\/)/i.test(u.trim());
71
+ if (entry) {
72
+ if (!isLikelyGit(entry.url)) {
73
+ return null;
74
+ }
75
+ if (entry.path && (await pathExists(entry.path)))
76
+ return entry.path;
77
+ const cloned = await cloneTemplate(entry.name, entry.url);
78
+ entry.path = cloned;
79
+ await saveTemplateRegistry(registry);
80
+ return cloned;
81
+ }
82
+ if (opts.allowUrl) {
83
+ if (!isLikelyGit(nameOrUrl))
84
+ return null;
85
+ const tmpName = `tmp-${randomUUID()}`;
86
+ return cloneTemplate(tmpName, nameOrUrl, {
87
+ targetDir: resolve(process.cwd(), ".bkit", "tmp", tmpName),
88
+ });
89
+ }
90
+ return null;
91
+ }
92
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,27 @@
1
+ import { spawn } from "node:child_process";
2
+ import { platform } from "node:os";
3
+ export function zipDirectory(srcDir, outFile) {
4
+ const isWin = platform() === "win32";
5
+ return new Promise((resolve, reject) => {
6
+ const cmd = isWin ? "powershell" : "zip";
7
+ const args = isWin
8
+ ? [
9
+ "-NoProfile",
10
+ "-Command",
11
+ `Compress-Archive -Path "${srcDir}\\*" -DestinationPath "${outFile}" -Force`,
12
+ ]
13
+ : ["-r", outFile, "."];
14
+ const options = isWin
15
+ ? { stdio: "inherit" }
16
+ : { cwd: srcDir, stdio: "inherit" };
17
+ const child = spawn(cmd, args, options);
18
+ child.on("error", (err) => reject(err));
19
+ child.on("exit", (code) => {
20
+ if (code === 0)
21
+ resolve();
22
+ else
23
+ reject(new Error(`zip failed with code ${code}`));
24
+ });
25
+ });
26
+ }
27
+ //# sourceMappingURL=archive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/utils/archive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,OAAe;IAC1D,MAAM,KAAK,GAAG,QAAQ,EAAE,KAAK,OAAO,CAAC;IACrC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;QACzC,MAAM,IAAI,GAAG,KAAK;YAChB,CAAC,CAAC;gBACE,YAAY;gBACZ,UAAU;gBACV,2BAA2B,MAAM,0BAA0B,OAAO,UAAU;aAC7E;YACH,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QAEzB,MAAM,OAAO,GAAG,KAAK;YACnB,CAAC,CAAC,EAAE,KAAK,EAAE,SAAkB,EAAE;YAC/B,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAkB,EAAE,CAAC;QAE/C,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACxC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACxC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,IAAI,IAAI,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;;gBACrB,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,39 @@
1
+ export function parseArgs(argv) {
2
+ const positional = [];
3
+ const flags = {};
4
+ for (let i = 0; i < argv.length; i += 1) {
5
+ const arg = argv[i];
6
+ if (arg.startsWith("--")) {
7
+ const [key, maybeValue] = arg.slice(2).split("=");
8
+ if (maybeValue !== undefined) {
9
+ flags[key] = maybeValue;
10
+ }
11
+ else {
12
+ const next = argv[i + 1];
13
+ if (next && !next.startsWith("-")) {
14
+ flags[key] = next;
15
+ i += 1;
16
+ }
17
+ else {
18
+ flags[key] = true;
19
+ }
20
+ }
21
+ continue;
22
+ }
23
+ if (arg.startsWith("-")) {
24
+ const key = arg.slice(1);
25
+ const next = argv[i + 1];
26
+ if (next && !next.startsWith("-")) {
27
+ flags[key] = next;
28
+ i += 1;
29
+ }
30
+ else {
31
+ flags[key] = true;
32
+ }
33
+ continue;
34
+ }
35
+ positional.push(arg);
36
+ }
37
+ return { positional, flags };
38
+ }
39
+ //# sourceMappingURL=args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/utils/args.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,KAAK,GAAqC,EAAE,CAAC;IAEnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACrB,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAClD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC7B,KAAK,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACzB,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBAClC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;oBAClB,CAAC,IAAI,CAAC,CAAC;gBACT,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;gBACpB,CAAC;YACH,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACzB,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;gBAClB,CAAC,IAAI,CAAC,CAAC;YACT,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YACpB,CAAC;YACD,SAAS;QACX,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { resolve, dirname, basename, relative } from "node:path";
2
+ import { readdir } from "node:fs/promises";
3
+ import { select, isCancel } from "@clack/prompts";
4
+ import { pathExists } from "./fs.js";
5
+ import { resolveLang, t } from "./i18n.js";
6
+ async function discoverAddonConfigs(cwd) {
7
+ const base = resolve(cwd, "project");
8
+ if (!(await pathExists(base)))
9
+ return [];
10
+ const entries = await readdir(base, { withFileTypes: true });
11
+ const configs = [];
12
+ for (const entry of entries) {
13
+ if (!entry.isDirectory())
14
+ continue;
15
+ const configPath = resolve(base, entry.name, "bkit.config.json");
16
+ if (await pathExists(configPath))
17
+ configs.push(configPath);
18
+ }
19
+ return configs;
20
+ }
21
+ export async function resolveConfigPath(flagPath, langInput) {
22
+ const cwd = process.cwd();
23
+ const lang = resolveLang(langInput);
24
+ if (flagPath)
25
+ return resolve(cwd, flagPath);
26
+ const discovered = await discoverAddonConfigs(cwd);
27
+ if (discovered.length === 0) {
28
+ return resolve(cwd, "bkit.config.json");
29
+ }
30
+ if (discovered.length === 1)
31
+ return discovered[0];
32
+ const cwdRel = (p) => relative(cwd, p).replace(/\\/g, "/");
33
+ const options = discovered.map((p) => {
34
+ const projectName = basename(dirname(p));
35
+ return {
36
+ value: p,
37
+ label: `${projectName} (${cwdRel(p)})`,
38
+ };
39
+ });
40
+ const choice = await select({
41
+ message: t("config.selectProject", lang),
42
+ options,
43
+ });
44
+ if (isCancel(choice))
45
+ return null;
46
+ return String(choice);
47
+ }
48
+ //# sourceMappingURL=config-discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-discovery.js","sourceRoot":"","sources":["../../src/utils/config-discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,WAAW,CAAC;AAG3C,KAAK,UAAU,oBAAoB,CAAC,GAAW;IAC7C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACrC,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YAAE,SAAS;QACnC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;QACjE,IAAI,MAAM,UAAU,CAAC,UAAU,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,QAAiB,EAAE,SAA4B;IACrF,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,IAAI,GAAS,WAAW,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,QAAQ;QAAE,OAAO,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAE5C,MAAM,UAAU,GAAG,MAAM,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACnD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,OAAO,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;IAElD,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACnC,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,OAAO;YACL,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,GAAG,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG;SACvC,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC;QAC1B,OAAO,EAAE,CAAC,CAAC,sBAAsB,EAAE,IAAI,CAAC;QACxC,OAAO;KACR,CAAC,CAAC;IACH,IAAI,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAClC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { existsSync, readdirSync } from "node:fs";
2
+ import { access, mkdir, writeFile } from "node:fs/promises";
3
+ import { resolve } from "node:path";
4
+ export async function ensureDir(path) {
5
+ await mkdir(path, { recursive: true });
6
+ }
7
+ export async function pathExists(path) {
8
+ try {
9
+ await access(path);
10
+ return true;
11
+ }
12
+ catch {
13
+ return false;
14
+ }
15
+ }
16
+ export async function writeJson(path, data) {
17
+ const dir = resolve(path, "..");
18
+ await ensureDir(dir);
19
+ await writeFile(path, `${JSON.stringify(data, null, 2)}\n`, {
20
+ encoding: "utf8",
21
+ });
22
+ }
23
+ export function isDirEmpty(path) {
24
+ if (!existsSync(path))
25
+ return true;
26
+ const entries = readdirSync(path);
27
+ return entries.length === 0;
28
+ }
29
+ //# sourceMappingURL=fs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAY;IAC1C,MAAM,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY;IAC3C,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAY,EAAE,IAAa;IACzD,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAChC,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;IACrB,MAAM,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;QAC1D,QAAQ,EAAE,MAAM;KACjB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,356 @@
1
+ const dict = {
2
+ "common.cancelled": {
3
+ ja: "キャンセルしました。",
4
+ en: "Cancelled.",
5
+ },
6
+ "common.done": {
7
+ ja: "完了しました。",
8
+ en: "Done.",
9
+ },
10
+ "common.enterManually": {
11
+ ja: "手動入力",
12
+ en: "Enter manually",
13
+ },
14
+ "common.required": {
15
+ ja: "必須です",
16
+ en: "Required",
17
+ },
18
+ "cli.menuPrompt": {
19
+ ja: "実行するコマンドを選択してください",
20
+ en: "What would you like to do?",
21
+ },
22
+ "cli.menuNotFound": {
23
+ ja: "指定されたコマンドが見つかりません。",
24
+ en: "Selected command not found.",
25
+ },
26
+ "init.projectName": {
27
+ ja: "プロジェクト名",
28
+ en: "Project name",
29
+ },
30
+ "init.projectNameRequired": {
31
+ ja: "プロジェクト名は必須です",
32
+ en: "Project name is required",
33
+ },
34
+ "init.chooseTemplate": {
35
+ ja: "テンプレートを選択",
36
+ en: "Choose a template",
37
+ },
38
+ "init.selectPacks": {
39
+ ja: "生成するパックを選択",
40
+ en: "Select packs to generate",
41
+ },
42
+ "init.includeScript": {
43
+ ja: "スクリプトを含めますか?",
44
+ en: "Include script module?",
45
+ },
46
+ "init.selectPackages": {
47
+ ja: "含める Script API パッケージを選択(スペースで切替)",
48
+ en: "Select Script API packages to include (space to toggle)",
49
+ },
50
+ "init.selectChannel": {
51
+ ja: "{pkg} のチャンネル",
52
+ en: "{pkg} channel",
53
+ },
54
+ "init.selectVersion": {
55
+ ja: "{pkg} のバージョン ({channel})",
56
+ en: "{pkg} version ({channel})",
57
+ },
58
+ "init.installDeps": {
59
+ ja: "依存関係をインストールしますか?",
60
+ en: "Install dependencies?",
61
+ },
62
+ "init.enableEslintRules": {
63
+ ja: "有効にする ESLint ルール(スペースで切替)",
64
+ en: "Enable ESLint rules (space to toggle)",
65
+ },
66
+ "init.pack.behavior": {
67
+ ja: "ビヘイビアパック",
68
+ en: "Behavior Pack",
69
+ },
70
+ "init.pack.resource": {
71
+ ja: "リソースパック",
72
+ en: "Resource Pack",
73
+ },
74
+ "init.packsRequired": {
75
+ ja: "少なくとも1つは選択してください。",
76
+ en: "At least one pack must be selected.",
77
+ },
78
+ "init.generating": {
79
+ ja: "ワークスペースを作成しています",
80
+ en: "Initializing workspace",
81
+ },
82
+ "init.summary": {
83
+ ja: "ワークスペースを作成しました",
84
+ en: "Created workspace",
85
+ },
86
+ "init.installingDeps": {
87
+ ja: "依存関係をインストールしています",
88
+ en: "Installing dependencies",
89
+ },
90
+ "init.installFailed": {
91
+ ja: "依存関係のインストールに失敗しました(インストールせずに続行)",
92
+ en: "Failed to install dependencies (continuing without install)",
93
+ },
94
+ "package.runBuild": {
95
+ ja: "パッケージング前にビルドを実行しますか?",
96
+ en: "Run build before packaging?",
97
+ },
98
+ "package.cancelled": {
99
+ ja: "パッケージングを中止しました。",
100
+ en: "Packaging cancelled.",
101
+ },
102
+ "deps.selectPackages": {
103
+ ja: "含める Script API パッケージを選択(スペースで切替)",
104
+ en: "Select Script API packages to include (space to toggle)",
105
+ },
106
+ "deps.updated": {
107
+ ja: "Script API パッケージを更新しました。",
108
+ en: "Updated Script API packages.",
109
+ },
110
+ "import.pathPrompt": {
111
+ ja: ".mcpack/.mcaddon/.zip へのパス",
112
+ en: "Path to .mcpack/.mcaddon/.zip",
113
+ },
114
+ "import.pathRequired": {
115
+ ja: "パスは必須です",
116
+ en: "Path is required",
117
+ },
118
+ "import.projectName": {
119
+ ja: "プロジェクト名",
120
+ en: "Project name",
121
+ },
122
+ "import.projectNameRequired": {
123
+ ja: "プロジェクト名は必須です",
124
+ en: "Project name is required",
125
+ },
126
+ "import.overwrite": {
127
+ ja: "既存のディレクトリがあります。上書きしますか?",
128
+ en: "Target exists. Overwrite?",
129
+ },
130
+ "import.convertQuestion": {
131
+ ja: "スクリプトを TypeScript (.js -> .ts) に変換しますか?(任意、手動修正が必要になる場合があります)",
132
+ en: "Convert scripts to TypeScript (.js -> .ts)? (optional; may require manual fixes)",
133
+ },
134
+ "import.intro": {
135
+ ja: "プロジェクトをインポート中",
136
+ en: "Importing project",
137
+ },
138
+ "sync.runBuild": {
139
+ ja: "同期前にビルドを実行しますか?",
140
+ en: "Run build before sync?",
141
+ },
142
+ "sync.cancelled": {
143
+ ja: "同期を中止しました。",
144
+ en: "Sync cancelled.",
145
+ },
146
+ "sync.selectTarget": {
147
+ ja: "同期先を選択",
148
+ en: "Select sync target",
149
+ },
150
+ "watch.selectProjects": {
151
+ ja: "監視するプロジェクトを選択",
152
+ en: "Select projects to watch",
153
+ },
154
+ "watch.intro": {
155
+ ja: "監視を開始します(変更で自動ビルド+同期)",
156
+ en: "Watching projects for changes (auto build + sync)",
157
+ },
158
+ "config.selectProject": {
159
+ ja: "プロジェクトを選択",
160
+ en: "Select project",
161
+ },
162
+ "template.commandPrompt": {
163
+ ja: "テンプレートコマンドを選択",
164
+ en: "Template command",
165
+ },
166
+ "template.name": {
167
+ ja: "テンプレート名",
168
+ en: "Template name",
169
+ },
170
+ "template.url": {
171
+ ja: "Git URL",
172
+ en: "Git URL",
173
+ },
174
+ "template.nameRequired": {
175
+ ja: "名前は必須です",
176
+ en: "Name is required",
177
+ },
178
+ "template.urlRequired": {
179
+ ja: "URL は必須です",
180
+ en: "URL is required",
181
+ },
182
+ "template.removeConfirm": {
183
+ ja: "テンプレート '{name}' を削除しますか?",
184
+ en: "Remove template '{name}'?",
185
+ },
186
+ "template.nameToUpdate": {
187
+ ja: "更新するテンプレート名",
188
+ en: "Template name to update",
189
+ },
190
+ "template.aborted": {
191
+ ja: "中断しました。",
192
+ en: "Aborted.",
193
+ },
194
+ "command.init.desc": {
195
+ ja: "テンプレートから新規ワークスペースを作成",
196
+ en: "Initialize a new Bedrock addon/resource pack workspace from a template",
197
+ },
198
+ "command.bump.desc": {
199
+ ja: "バージョンを更新し、マニフェスト等を再生成",
200
+ en: "Bump version and regenerate manifest/version metadata",
201
+ },
202
+ "command.template.desc": {
203
+ ja: "プロジェクトのテンプレートを管理(list/add/rm/pull)",
204
+ en: "Manage templates (list/add/rm) for project scaffolding",
205
+ },
206
+ "command.import.desc": {
207
+ ja: "既存の mcpack/mcaddon/zip をプロジェクトとして取り込む",
208
+ en: "Import existing mcpack/mcaddon/zip into a project workspace",
209
+ },
210
+ "command.validate.desc": {
211
+ ja: "config・manifest の整合性をチェック",
212
+ en: "Validate manifests, dependencies, and project structure",
213
+ },
214
+ "command.build.desc": {
215
+ ja: "core-build-tasks を使ってパックをビルド",
216
+ en: "Build/compile packs using @minecraft/core-build-tasks",
217
+ },
218
+ "command.package.desc": {
219
+ ja: "ビルド成果物を配布用アーカイブ(mcpack/mcaddon)に固める",
220
+ en: "Package build artifacts into distributable archives (zip)",
221
+ },
222
+ "command.deps.desc": {
223
+ ja: "Script API の npm 依存を同期・インストール",
224
+ en: "Sync Script API npm dependencies into config/manifest",
225
+ },
226
+ "command.sync.desc": {
227
+ ja: "ビルド成果物を開発フォルダへ同期",
228
+ en: "Sync build outputs to local Minecraft developer folders",
229
+ },
230
+ "command.watch.desc": {
231
+ ja: "複数プロジェクトを監視し、変更ごとに自動ビルド+同期",
232
+ en: "Watch projects, auto build (watch outDir) and sync on change",
233
+ },
234
+ "command.config.desc": {
235
+ ja: "bkit 設定を確認・管理",
236
+ en: "Manage and inspect bkit configuration",
237
+ },
238
+ "command.help.desc": {
239
+ ja: "ヘルプを表示",
240
+ en: "Show help",
241
+ },
242
+ "command.setting.desc": {
243
+ ja: "CLI の設定を変更(言語など)",
244
+ en: "Change CLI settings (language, etc.)",
245
+ },
246
+ "setting.selectItem": {
247
+ ja: "変更する項目を選択",
248
+ en: "Select a setting to change",
249
+ },
250
+ "setting.language": {
251
+ ja: "表示言語",
252
+ en: "Display language",
253
+ },
254
+ "setting.languageSaved": {
255
+ ja: "言語設定を保存しました。",
256
+ en: "Language setting saved.",
257
+ },
258
+ "setting.current": {
259
+ ja: "現在の設定",
260
+ en: "Current settings",
261
+ },
262
+ "setting.langDesc": {
263
+ ja: "ja: 日本語, en: English",
264
+ en: "ja: Japanese, en: English",
265
+ },
266
+ "bump.selectType": {
267
+ ja: "バージョン更新方法を選択",
268
+ en: "Select bump type",
269
+ },
270
+ "bump.option.patch": {
271
+ ja: "パッチ (+0.0.1)",
272
+ en: "patch (+0.0.1)",
273
+ },
274
+ "bump.option.minor": {
275
+ ja: "マイナー (+0.1.0)",
276
+ en: "minor (+0.1.0)",
277
+ },
278
+ "bump.option.major": {
279
+ ja: "メジャー (+1.0.0)",
280
+ en: "major (+1.0.0)",
281
+ },
282
+ "bump.option.custom": {
283
+ ja: "バージョンを直接指定",
284
+ en: "set exact version",
285
+ },
286
+ "bump.enterVersion": {
287
+ ja: "バージョンを入力 (x.y.z)",
288
+ en: "Enter version (x.y.z)",
289
+ },
290
+ "bump.versionRequired": {
291
+ ja: "バージョンは必須です",
292
+ en: "Version is required",
293
+ },
294
+ "bump.updateMinEngine": {
295
+ ja: "min_engine_version を更新しますか?",
296
+ en: "Update min_engine_version?",
297
+ },
298
+ "bump.keepCurrent": {
299
+ ja: "変更しない",
300
+ en: "Keep current",
301
+ },
302
+ "bump.setMinEngine": {
303
+ ja: "手動入力",
304
+ en: "Set manually",
305
+ },
306
+ "bump.enterMinEngine": {
307
+ ja: "min_engine_version を入力 (x.y.z)",
308
+ en: "Enter min_engine_version (x.y.z)",
309
+ },
310
+ "bump.minEngineFormat": {
311
+ ja: "形式は x.y.z で入力してください",
312
+ en: "Format must be x.y.z",
313
+ },
314
+ "bump.doneSet": {
315
+ ja: "バージョンを {version} に設定しました{minEngine}。",
316
+ en: "Set version to {version}{minEngine}.",
317
+ },
318
+ "bump.doneBumped": {
319
+ ja: "{level} を適用し {version} に更新しました{minEngine}。",
320
+ en: "Bumped {level} to {version}{minEngine}.",
321
+ },
322
+ "bump.minEngineSuffix": {
323
+ ja: " (min_engine_version={value})",
324
+ en: " (min_engine_version={value})",
325
+ },
326
+ "onboarding.langPrompt": {
327
+ ja: "表示言語を選択してください",
328
+ en: "Select display language",
329
+ },
330
+ "onboarding.cancelled": {
331
+ ja: "セットアップを中止しました。",
332
+ en: "Setup cancelled.",
333
+ },
334
+ "onboarding.saved": {
335
+ ja: "初期設定を保存しました。",
336
+ en: "Initial settings saved.",
337
+ },
338
+ };
339
+ export function t(key, lang = "ja", params = {}) {
340
+ const entry = dict[key];
341
+ const base = entry ? entry[lang] ?? entry.ja ?? key : key;
342
+ return Object.keys(params).reduce((acc, k) => acc.replace(new RegExp(`\\{${k}\\}`, "g"), params[k] ?? ""), base);
343
+ }
344
+ export function resolveLang(input, fallback) {
345
+ const env = process.env.BKIT_LANG?.toLowerCase();
346
+ const flag = typeof input === "string" ? input.toLowerCase() : undefined;
347
+ const v = flag ?? env;
348
+ if (v === "en")
349
+ return "en";
350
+ if (v === "ja")
351
+ return "ja";
352
+ if (fallback === "en")
353
+ return "en";
354
+ return fallback ?? "ja";
355
+ }
356
+ //# sourceMappingURL=i18n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/utils/i18n.ts"],"names":[],"mappings":"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"}