@sfmc-bds/cli 0.1.0 → 0.2.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/README.md +7 -1
  2. package/dist/cli-result.d.ts +12 -0
  3. package/dist/cli-result.d.ts.map +1 -0
  4. package/dist/cli-result.js +15 -0
  5. package/dist/cli-result.js.map +7 -0
  6. package/dist/commands-behavior-pack.d.ts +11 -42
  7. package/dist/commands-behavior-pack.d.ts.map +1 -1
  8. package/dist/commands-behavior-pack.js +40 -159
  9. package/dist/commands-behavior-pack.js.map +7 -1
  10. package/dist/commands-reload.d.ts +9 -0
  11. package/dist/commands-reload.d.ts.map +1 -0
  12. package/dist/commands-reload.js +30 -0
  13. package/dist/commands-reload.js.map +7 -0
  14. package/dist/commands.d.ts +7 -0
  15. package/dist/commands.d.ts.map +1 -1
  16. package/dist/commands.js +182 -172
  17. package/dist/commands.js.map +7 -1
  18. package/dist/i18n/index.d.ts +26 -0
  19. package/dist/i18n/index.d.ts.map +1 -0
  20. package/dist/i18n/index.js +107 -0
  21. package/dist/i18n/index.js.map +7 -0
  22. package/dist/i18n/locales/en.d.ts +381 -0
  23. package/dist/i18n/locales/en.d.ts.map +1 -0
  24. package/dist/i18n/locales/en.js +393 -0
  25. package/dist/i18n/locales/en.js.map +7 -0
  26. package/dist/i18n/locales/zh-CN.d.ts +4 -0
  27. package/dist/i18n/locales/zh-CN.d.ts.map +1 -0
  28. package/dist/i18n/locales/zh-CN.js +379 -0
  29. package/dist/i18n/locales/zh-CN.js.map +7 -0
  30. package/dist/i18n/types.d.ts +7 -0
  31. package/dist/i18n/types.d.ts.map +1 -0
  32. package/dist/i18n/types.js +17 -0
  33. package/dist/i18n/types.js.map +7 -0
  34. package/dist/index.d.ts +5 -11
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +51 -43
  37. package/dist/index.js.map +7 -1
  38. package/dist/interactive-prompts.d.ts +8 -0
  39. package/dist/interactive-prompts.d.ts.map +1 -0
  40. package/dist/interactive-prompts.js +57 -0
  41. package/dist/interactive-prompts.js.map +7 -0
  42. package/dist/locale-command.d.ts +3 -0
  43. package/dist/locale-command.d.ts.map +1 -0
  44. package/dist/locale-command.js +19 -0
  45. package/dist/locale-command.js.map +7 -0
  46. package/dist/logs.d.ts +22 -4
  47. package/dist/logs.d.ts.map +1 -1
  48. package/dist/logs.js +208 -193
  49. package/dist/logs.js.map +7 -1
  50. package/dist/main.js +135 -173
  51. package/dist/main.js.map +7 -1
  52. package/dist/module-commands.d.ts +43 -4
  53. package/dist/module-commands.d.ts.map +1 -1
  54. package/dist/module-commands.js +440 -327
  55. package/dist/module-commands.js.map +7 -1
  56. package/dist/module-fingerprint.d.ts +7 -0
  57. package/dist/module-fingerprint.d.ts.map +1 -0
  58. package/dist/module-fingerprint.js +31 -0
  59. package/dist/module-fingerprint.js.map +7 -0
  60. package/dist/module-wizard.d.ts +14 -0
  61. package/dist/module-wizard.d.ts.map +1 -0
  62. package/dist/module-wizard.js +313 -0
  63. package/dist/module-wizard.js.map +7 -0
  64. package/dist/pack-lifecycle.d.ts +95 -0
  65. package/dist/pack-lifecycle.d.ts.map +1 -0
  66. package/dist/pack-lifecycle.js +634 -0
  67. package/dist/pack-lifecycle.js.map +7 -0
  68. package/dist/pack-update/bindings.d.ts +12 -0
  69. package/dist/pack-update/bindings.d.ts.map +1 -0
  70. package/dist/pack-update/bindings.js +64 -0
  71. package/dist/pack-update/bindings.js.map +7 -0
  72. package/dist/pack-update/config.d.ts +22 -0
  73. package/dist/pack-update/config.d.ts.map +1 -0
  74. package/dist/pack-update/config.js +141 -0
  75. package/dist/pack-update/config.js.map +7 -0
  76. package/dist/pack-update/providers/curseforge.d.ts +23 -0
  77. package/dist/pack-update/providers/curseforge.d.ts.map +1 -0
  78. package/dist/pack-update/providers/curseforge.js +209 -0
  79. package/dist/pack-update/providers/curseforge.js.map +7 -0
  80. package/dist/pack-update/providers/index.d.ts +16 -0
  81. package/dist/pack-update/providers/index.d.ts.map +1 -0
  82. package/dist/pack-update/providers/index.js +37 -0
  83. package/dist/pack-update/providers/index.js.map +7 -0
  84. package/dist/pack-update/service.d.ts +21 -0
  85. package/dist/pack-update/service.d.ts.map +1 -0
  86. package/dist/pack-update/service.js +567 -0
  87. package/dist/pack-update/service.js.map +7 -0
  88. package/dist/pack-update/types.d.ts +126 -0
  89. package/dist/pack-update/types.d.ts.map +1 -0
  90. package/dist/pack-update/types.js +8 -0
  91. package/dist/pack-update/types.js.map +7 -0
  92. package/dist/pack-update/version-policy.d.ts +80 -0
  93. package/dist/pack-update/version-policy.d.ts.map +1 -0
  94. package/dist/pack-update/version-policy.js +216 -0
  95. package/dist/pack-update/version-policy.js.map +7 -0
  96. package/dist/registry.d.ts +12 -4
  97. package/dist/registry.d.ts.map +1 -1
  98. package/dist/registry.js +73 -106
  99. package/dist/registry.js.map +7 -1
  100. package/dist/remote-agent.d.ts.map +1 -1
  101. package/dist/remote-agent.js +160 -176
  102. package/dist/remote-agent.js.map +7 -1
  103. package/dist/repl.d.ts +4 -0
  104. package/dist/repl.d.ts.map +1 -1
  105. package/dist/repl.js +683 -605
  106. package/dist/repl.js.map +7 -1
  107. package/dist/runtime.d.ts +40 -14
  108. package/dist/runtime.d.ts.map +1 -1
  109. package/dist/runtime.js +185 -62
  110. package/dist/runtime.js.map +7 -1
  111. package/dist/services.d.ts +2 -0
  112. package/dist/services.d.ts.map +1 -1
  113. package/dist/services.js +251 -238
  114. package/dist/services.js.map +7 -1
  115. package/dist/sfmc-modules-root.d.ts +24 -0
  116. package/dist/sfmc-modules-root.d.ts.map +1 -0
  117. package/dist/sfmc-modules-root.js +70 -0
  118. package/dist/sfmc-modules-root.js.map +7 -0
  119. package/dist/theme.d.ts +4 -0
  120. package/dist/theme.d.ts.map +1 -1
  121. package/dist/theme.js +134 -48
  122. package/dist/theme.js.map +7 -1
  123. package/dist/wizard.d.ts.map +1 -1
  124. package/dist/wizard.js +363 -438
  125. package/dist/wizard.js.map +7 -1
  126. package/dist/world-packs.d.ts +22 -0
  127. package/dist/world-packs.d.ts.map +1 -0
  128. package/dist/world-packs.js +872 -0
  129. package/dist/world-packs.js.map +7 -0
  130. package/package.json +10 -10
  131. package/dist/dispatcher.d.ts +0 -13
  132. package/dist/dispatcher.d.ts.map +0 -1
  133. package/dist/dispatcher.js +0 -23
  134. package/dist/dispatcher.js.map +0 -1
  135. package/dist/terminal.d.ts +0 -3
  136. package/dist/terminal.d.ts.map +0 -1
  137. package/dist/terminal.js +0 -178
  138. package/dist/terminal.js.map +0 -1
@@ -0,0 +1,70 @@
1
+ import { configPath, patchJson, readJson } from "@sfmc-bds/sdk/node/config";
2
+ import { existsSync, readdirSync, readFileSync } from "node:fs";
3
+ import path from "node:path";
4
+ import { ROOT } from "./runtime.js";
5
+ const PACKAGES_DIRNAME = "packages";
6
+ function isSfmcModulesRoot(dir) {
7
+ const packagesDir = path.join(dir, PACKAGES_DIRNAME);
8
+ return existsSync(packagesDir) && existsSync(path.join(dir, "index.json"));
9
+ }
10
+ function detectSiblingSfmcModulesRoot() {
11
+ const sibling = path.resolve(ROOT, "..", "sfmc-modules");
12
+ return isSfmcModulesRoot(sibling) ? sibling : null;
13
+ }
14
+ function readPersistedSfmcModulesRoot(rootDir = ROOT) {
15
+ const runtime = readJson(configPath(rootDir, "runtime.json"));
16
+ const saved = runtime?.sfmc_modules_root;
17
+ if (typeof saved !== "string" || !saved.trim()) return null;
18
+ const resolved = path.resolve(saved);
19
+ return isSfmcModulesRoot(resolved) ? resolved : null;
20
+ }
21
+ function persistSfmcModulesRoot(modulesRoot, rootDir = ROOT) {
22
+ const slash = modulesRoot.replace(/\\/g, "/");
23
+ patchJson(configPath(rootDir, "runtime.json"), { sfmc_modules_root: slash });
24
+ }
25
+ function resolveSfmcModulesRoot(rootDir = ROOT) {
26
+ const fromEnv = process.env.SFMC_MODULES_ROOT;
27
+ if (fromEnv) {
28
+ const resolved = path.resolve(fromEnv);
29
+ if (isSfmcModulesRoot(resolved)) return resolved;
30
+ }
31
+ const persisted = readPersistedSfmcModulesRoot(rootDir);
32
+ if (persisted) return persisted;
33
+ return detectSiblingSfmcModulesRoot();
34
+ }
35
+ function listSfmcModulePackages(modulesRoot) {
36
+ const packagesDir = path.join(modulesRoot, PACKAGES_DIRNAME);
37
+ if (!existsSync(packagesDir)) return [];
38
+ const out = [];
39
+ for (const entry of readdirSync(packagesDir, { withFileTypes: true })) {
40
+ if (!entry.isDirectory()) continue;
41
+ const id = entry.name;
42
+ const pkgPath = path.join(packagesDir, id);
43
+ const manifestPath = path.join(pkgPath, "sapi", "manifest.json");
44
+ let logicalId = `feature-${id}`;
45
+ let name = id;
46
+ if (existsSync(manifestPath)) {
47
+ try {
48
+ const manifest = JSON.parse(readFileSync(manifestPath, "utf8"));
49
+ if (manifest.id) logicalId = manifest.id;
50
+ if (manifest.name) name = manifest.name;
51
+ } catch {
52
+ }
53
+ }
54
+ out.push({ id, path: pkgPath, logicalId, name });
55
+ }
56
+ out.sort((a, b) => a.id.localeCompare(b.id));
57
+ return out;
58
+ }
59
+ function packageDirForId(modulesRoot, folderId) {
60
+ return path.join(modulesRoot, PACKAGES_DIRNAME, folderId);
61
+ }
62
+ export {
63
+ detectSiblingSfmcModulesRoot,
64
+ listSfmcModulePackages,
65
+ packageDirForId,
66
+ persistSfmcModulesRoot,
67
+ readPersistedSfmcModulesRoot,
68
+ resolveSfmcModulesRoot
69
+ };
70
+ //# sourceMappingURL=sfmc-modules-root.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/sfmc-modules-root.ts"],
4
+ "sourcesContent": ["import { configPath, patchJson, readJson, type RuntimeConfig } from \"@sfmc-bds/sdk/node/config\";\nimport { existsSync, readdirSync, readFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { ROOT } from \"./runtime.js\";\n\nconst PACKAGES_DIRNAME = \"packages\";\n\nexport interface SfmcModulePackage {\n /** packages/ \u4E0B\u7684\u6587\u4EF6\u5939\u540D\uFF08install id\uFF09 */\n id: string;\n /** \u7EDD\u5BF9\u8DEF\u5F84 */\n path: string;\n /** manifest \u4E2D\u7684\u903B\u8F91 id\uFF0C\u7F3A\u7701\u4E3A feature-<folder> */\n logicalId: string;\n name: string;\n}\n\nfunction isSfmcModulesRoot(dir: string): boolean {\n const packagesDir = path.join(dir, PACKAGES_DIRNAME);\n return existsSync(packagesDir) && existsSync(path.join(dir, \"index.json\"));\n}\n\n/** \u81EA\u52A8\u63A2\u6D4B\u65C1\u8DEF sfmc-modules\uFF08\u4E0D\u8981\u6C42\u6839\u76EE\u5F55\u6709 package.json\uFF09\u3002 */\nexport function detectSiblingSfmcModulesRoot(): string | null {\n const sibling = path.resolve(ROOT, \"..\", \"sfmc-modules\");\n return isSfmcModulesRoot(sibling) ? sibling : null;\n}\n\n/** \u4ECE runtime.json \u8BFB\u53D6\u66FE\u4FDD\u5B58\u7684 sfmc-modules \u6839\u3002 */\nexport function readPersistedSfmcModulesRoot(rootDir: string = ROOT): string | null {\n const runtime = readJson<RuntimeConfig>(configPath(rootDir, \"runtime.json\"));\n const saved = runtime?.sfmc_modules_root;\n if (typeof saved !== \"string\" || !saved.trim()) return null;\n const resolved = path.resolve(saved);\n return isSfmcModulesRoot(resolved) ? resolved : null;\n}\n\n/** \u5199\u5165 runtime.json\uFF0C\u4E0B\u6B21\u514D\u8F93\u8DEF\u5F84\u3002 */\nexport function persistSfmcModulesRoot(modulesRoot: string, rootDir: string = ROOT): void {\n const slash = modulesRoot.replace(/\\\\/g, \"/\");\n patchJson<RuntimeConfig>(configPath(rootDir, \"runtime.json\"), { sfmc_modules_root: slash });\n}\n\n/**\n * \u89E3\u6790 sfmc-modules \u6839\u76EE\u5F55\u3002\n * \u4F18\u5148\u7EA7\uFF1ASFMC_MODULES_ROOT \u73AF\u5883\u53D8\u91CF \u2192 runtime.json \u2192 \u65C1\u8DEF ../sfmc-modules\n */\nexport function resolveSfmcModulesRoot(rootDir: string = ROOT): string | null {\n const fromEnv = process.env.SFMC_MODULES_ROOT;\n if (fromEnv) {\n const resolved = path.resolve(fromEnv);\n if (isSfmcModulesRoot(resolved)) return resolved;\n }\n const persisted = readPersistedSfmcModulesRoot(rootDir);\n if (persisted) return persisted;\n return detectSiblingSfmcModulesRoot();\n}\n\n/** \u679A\u4E3E sfmc-modules/packages \u4E0B\u53EF\u5B89\u88C5\u7684\u6A21\u5757\u5305\u3002 */\nexport function listSfmcModulePackages(modulesRoot: string): SfmcModulePackage[] {\n const packagesDir = path.join(modulesRoot, PACKAGES_DIRNAME);\n if (!existsSync(packagesDir)) return [];\n const out: SfmcModulePackage[] = [];\n for (const entry of readdirSync(packagesDir, { withFileTypes: true })) {\n if (!entry.isDirectory()) continue;\n const id = entry.name;\n const pkgPath = path.join(packagesDir, id);\n const manifestPath = path.join(pkgPath, \"sapi\", \"manifest.json\");\n let logicalId = `feature-${id}`;\n let name = id;\n if (existsSync(manifestPath)) {\n try {\n const manifest = JSON.parse(readFileSync(manifestPath, \"utf8\")) as {\n id?: string;\n name?: string;\n };\n if (manifest.id) logicalId = manifest.id;\n if (manifest.name) name = manifest.name;\n } catch {\n /* \u635F\u574F manifest \u4ECD\u5217\u51FA\u6587\u4EF6\u5939 */\n }\n }\n out.push({ id, path: pkgPath, logicalId, name });\n }\n out.sort((a, b) => a.id.localeCompare(b.id));\n return out;\n}\n\nexport function packageDirForId(modulesRoot: string, folderId: string): string {\n return path.join(modulesRoot, PACKAGES_DIRNAME, folderId);\n}\n"],
5
+ "mappings": "AAAA,SAAS,YAAY,WAAW,gBAAoC;AACpE,SAAS,YAAY,aAAa,oBAAoB;AACtD,OAAO,UAAU;AACjB,SAAS,YAAY;AAErB,MAAM,mBAAmB;AAYzB,SAAS,kBAAkB,KAAsB;AAC/C,QAAM,cAAc,KAAK,KAAK,KAAK,gBAAgB;AACnD,SAAO,WAAW,WAAW,KAAK,WAAW,KAAK,KAAK,KAAK,YAAY,CAAC;AAC3E;AAGO,SAAS,+BAA8C;AAC5D,QAAM,UAAU,KAAK,QAAQ,MAAM,MAAM,cAAc;AACvD,SAAO,kBAAkB,OAAO,IAAI,UAAU;AAChD;AAGO,SAAS,6BAA6B,UAAkB,MAAqB;AAClF,QAAM,UAAU,SAAwB,WAAW,SAAS,cAAc,CAAC;AAC3E,QAAM,QAAQ,SAAS;AACvB,MAAI,OAAO,UAAU,YAAY,CAAC,MAAM,KAAK,EAAG,QAAO;AACvD,QAAM,WAAW,KAAK,QAAQ,KAAK;AACnC,SAAO,kBAAkB,QAAQ,IAAI,WAAW;AAClD;AAGO,SAAS,uBAAuB,aAAqB,UAAkB,MAAY;AACxF,QAAM,QAAQ,YAAY,QAAQ,OAAO,GAAG;AAC5C,YAAyB,WAAW,SAAS,cAAc,GAAG,EAAE,mBAAmB,MAAM,CAAC;AAC5F;AAMO,SAAS,uBAAuB,UAAkB,MAAqB;AAC5E,QAAM,UAAU,QAAQ,IAAI;AAC5B,MAAI,SAAS;AACX,UAAM,WAAW,KAAK,QAAQ,OAAO;AACrC,QAAI,kBAAkB,QAAQ,EAAG,QAAO;AAAA,EAC1C;AACA,QAAM,YAAY,6BAA6B,OAAO;AACtD,MAAI,UAAW,QAAO;AACtB,SAAO,6BAA6B;AACtC;AAGO,SAAS,uBAAuB,aAA0C;AAC/E,QAAM,cAAc,KAAK,KAAK,aAAa,gBAAgB;AAC3D,MAAI,CAAC,WAAW,WAAW,EAAG,QAAO,CAAC;AACtC,QAAM,MAA2B,CAAC;AAClC,aAAW,SAAS,YAAY,aAAa,EAAE,eAAe,KAAK,CAAC,GAAG;AACrE,QAAI,CAAC,MAAM,YAAY,EAAG;AAC1B,UAAM,KAAK,MAAM;AACjB,UAAM,UAAU,KAAK,KAAK,aAAa,EAAE;AACzC,UAAM,eAAe,KAAK,KAAK,SAAS,QAAQ,eAAe;AAC/D,QAAI,YAAY,WAAW,EAAE;AAC7B,QAAI,OAAO;AACX,QAAI,WAAW,YAAY,GAAG;AAC5B,UAAI;AACF,cAAM,WAAW,KAAK,MAAM,aAAa,cAAc,MAAM,CAAC;AAI9D,YAAI,SAAS,GAAI,aAAY,SAAS;AACtC,YAAI,SAAS,KAAM,QAAO,SAAS;AAAA,MACrC,QAAQ;AAAA,MAER;AAAA,IACF;AACA,QAAI,KAAK,EAAE,IAAI,MAAM,SAAS,WAAW,KAAK,CAAC;AAAA,EACjD;AACA,MAAI,KAAK,CAAC,GAAG,MAAM,EAAE,GAAG,cAAc,EAAE,EAAE,CAAC;AAC3C,SAAO;AACT;AAEO,SAAS,gBAAgB,aAAqB,UAA0B;AAC7E,SAAO,KAAK,KAAK,aAAa,kBAAkB,QAAQ;AAC1D;",
6
+ "names": []
7
+ }
package/dist/theme.d.ts CHANGED
@@ -27,6 +27,10 @@ export declare const c: {
27
27
  bold: import("chalk").ChalkInstance;
28
28
  };
29
29
  export declare const W = 58;
30
+ /**
31
+ * 高亮日志正文。
32
+ * 在原文上收集匹配(先到先得、跳过重叠),再从后往前着色,避免 ANSI 二次污染。
33
+ */
30
34
  export declare function highlightLogLine(raw: string): string;
31
35
  export declare const DIVIDER: string;
32
36
  export declare function padRight(s: string, n: number): string;
@@ -1 +1 @@
1
- {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,CAAC;;;;;;;;;;;;;;;CAeJ,CAAC;AAEX,eAAO,MAAM,CAAC;;;;;;;;;;;CAWb,CAAC;AAEF,eAAO,MAAM,CAAC,KAAK,CAAC;AAEpB,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAgBpD;AAMD,eAAO,MAAM,OAAO,QAA2B,CAAC;AAEhD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAErD"}
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,CAAC;aACZ,EAAE,EAAE,SAAS;aACb,KAAK,EAAE,SAAS;aAChB,OAAO,EAAE,SAAS;aAClB,SAAS,EAAE,SAAS;aACpB,MAAM,EAAE,SAAS;aACjB,IAAI,EAAE,SAAS;aACf,KAAK,EAAE,SAAS;aAChB,GAAG,EAAE,SAAS;aACd,KAAK,EAAE,SAAS;aAChB,MAAM,EAAE,SAAS;aACjB,IAAI,EAAE,SAAS;aACf,IAAI,EAAE,SAAS;aACf,MAAM,EAAE,SAAS;aACjB,MAAM,EAAE,SAAS;CACT,CAAC;AAEX,eAAO,MAAM,CAAC;IACZ,GAAG;IACH,IAAI;IACJ,KAAK;IACL,GAAG;IACH,MAAM;IACN,IAAI;IACJ,IAAI;IACJ,MAAM;IACN,MAAM;IACN,IAAI;CACL,CAAC;AAEF,eAAO,MAAM,CAAC,KAAK,CAAC;AAkGpB;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAqBpD;AAMD,eAAO,MAAM,OAAO,QAA2B,CAAC;AAEhD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAErD"}
package/dist/theme.js CHANGED
@@ -1,55 +1,141 @@
1
1
  import chalk from "chalk";
2
- export const T = {
3
- bg: "#282c34",
4
- panel: "#21252b",
5
- surface: "#2c313c",
6
- surfaceHi: "#3e4452",
7
- subtle: "#4b5263",
8
- text: "#dcdfe4",
9
- muted: "#888888",
10
- red: "#e06c75",
11
- green: "#98c379",
12
- yellow: "#e5c07b",
13
- blue: "#61afef",
14
- cyan: "#56b6c2",
15
- purple: "#c678dd",
16
- orange: "#d19a66",
2
+ const T = {
3
+ bg: "#282c34",
4
+ panel: "#21252b",
5
+ surface: "#2c313c",
6
+ surfaceHi: "#3e4452",
7
+ subtle: "#4b5263",
8
+ text: "#dcdfe4",
9
+ muted: "#888888",
10
+ red: "#e06c75",
11
+ green: "#98c379",
12
+ yellow: "#e5c07b",
13
+ blue: "#61afef",
14
+ cyan: "#56b6c2",
15
+ purple: "#c678dd",
16
+ orange: "#d19a66"
17
17
  };
18
- export const c = {
19
- dim: chalk.hex(T.muted),
20
- text: chalk.hex(T.text),
21
- green: chalk.hex(T.green),
22
- red: chalk.hex(T.red),
23
- yellow: chalk.hex(T.yellow),
24
- blue: chalk.hex(T.blue),
25
- cyan: chalk.hex(T.cyan),
26
- purple: chalk.hex(T.purple),
27
- orange: chalk.hex(T.orange),
28
- bold: chalk.bold,
18
+ const c = {
19
+ dim: chalk.hex(T.muted),
20
+ text: chalk.hex(T.text),
21
+ green: chalk.hex(T.green),
22
+ red: chalk.hex(T.red),
23
+ yellow: chalk.hex(T.yellow),
24
+ blue: chalk.hex(T.blue),
25
+ cyan: chalk.hex(T.cyan),
26
+ purple: chalk.hex(T.purple),
27
+ orange: chalk.hex(T.orange),
28
+ bold: chalk.bold
29
29
  };
30
- export const W = 58;
31
- export function highlightLogLine(raw) {
32
- return raw
33
- .replace(/§[0-9a-fklmnor]/g, "")
34
- .replace(/\b\d{1,2}:\d{2}(?::\d{2})?\b/g, (m) => c.dim(m))
35
- .replace(/\[ERROR\]/g, (m) => c.red(m))
36
- .replace(/\[FATAL\]/g, (m) => c.red(c.bold(m)))
37
- .replace(/\[WARN(ING)?\]/g, (m) => c.yellow(m))
38
- .replace(/\[SUCCESS\]/g, (m) => c.green(c.bold(m)))
39
- .replace(/\[INFO\]/g, (m) => c.blue(m))
40
- .replace(/\[DEBUG\]/g, (m) => c.dim(m))
41
- .replace(/\[PLAYER\]/g, (m) => c.green(m))
42
- .replace(/\[TPS\]/g, (m) => c.cyan(m))
43
- .replace(/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(:\d+)?\b/g, (m) => c.cyan(m))
44
- .replace(/Player (joined|left):/g, (m) => c.green(m))
45
- .replace(/Server (started|stopped)/g, (m) => c.green(m))
46
- .replace(/\b(TPS|MSPT|tick|loaded|saved)\b/gi, (m) => c.cyan(m));
30
+ const W = 58;
31
+ function paintHttpExchange(m) {
32
+ return m.replace(/^(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS)\b/, (method) => c.purple(method)).replace(/[1-5]\d{2}$/, (code) => {
33
+ const n = Number(code);
34
+ if (n >= 500) return c.red(code);
35
+ if (n >= 400) return c.yellow(code);
36
+ if (n >= 300) return c.cyan(code);
37
+ return c.green(code);
38
+ });
39
+ }
40
+ function paintHttpStatus(m) {
41
+ return m.replace(/[1-5]\d{2}$/i, (code) => {
42
+ const n = Number(code);
43
+ if (n >= 500) return c.red(code);
44
+ if (n >= 400) return c.yellow(code);
45
+ if (n >= 300) return c.cyan(code);
46
+ return c.green(code);
47
+ });
48
+ }
49
+ const LOG_HIGHLIGHT_RULES = [
50
+ { re: /\[FATAL\]/gi, paint: (m) => c.red(c.bold(m)) },
51
+ { re: /\[ERROR\]|\[ERR\]|\[X\]/gi, paint: (m) => c.red(m) },
52
+ { re: /\[WARN(?:ING)?\]|\[WRN\]|\[!\]/gi, paint: (m) => c.yellow(m) },
53
+ { re: /\[SUCCESS\]|\[OK\]|\[√\]/gi, paint: (m) => c.green(c.bold(m)) },
54
+ { re: /\[INFO\]|\[INF\]/gi, paint: (m) => c.blue(m) },
55
+ { re: /\[DEBUG\]|\[DBG\]|\[TRACE\]/gi, paint: (m) => c.dim(m) },
56
+ { re: /\[PLAYER\]/gi, paint: (m) => c.green(m) },
57
+ { re: /\[TPS\]/gi, paint: (m) => c.cyan(m) },
58
+ { re: /\[SFMC\]/gi, paint: (m) => c.purple(m) },
59
+ { re: /\b(FATAL|ERROR|ERR)\b(?=\s*:)/gi, paint: (m) => c.red(m) },
60
+ { re: /\b(WARN(?:ING)?|WRN)\b(?=\s*:)/gi, paint: (m) => c.yellow(m) },
61
+ { re: /\b(INFO|INF)\b(?=\s*:)/gi, paint: (m) => c.blue(m) },
62
+ { re: /\b(DEBUG|DBG|TRACE)\b(?=\s*:)/gi, paint: (m) => c.dim(m) },
63
+ {
64
+ re: /\b\d{4}-\d{2}-\d{2}[ T]\d{2}:\d{2}:\d{2}(?:[.,:]\d+)?(?:Z|[+-]\d{2}:?\d{2})?\b/g,
65
+ paint: (m) => c.dim(m)
66
+ },
67
+ { re: /\b\d{1,2}:\d{2}(?::\d{2})?(?:[.,]\d+)?\b/g, paint: (m) => c.dim(m) },
68
+ { re: /\bhttps?:\/\/[^\s"'<>]+/gi, paint: (m) => c.blue(m) },
69
+ { re: /\b\d{1,3}(?:\.\d{1,3}){3}(?::\d{1,5})?\b/g, paint: (m) => c.cyan(m) },
70
+ { re: /\b(?:port|listening on|bound to)\s*[:=]?\s*\d{2,5}\b/gi, paint: (m) => c.cyan(m) },
71
+ {
72
+ re: /\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/gi,
73
+ paint: (m) => c.purple(m)
74
+ },
75
+ { re: /\bv\d+\.\d+\.\d+(?:[-+][\w.-]+)?\b/gi, paint: (m) => c.orange(m) },
76
+ { re: /\b(?:pid|PID)\s*[:=]?\s*\d+\b/g, paint: (m) => c.orange(m) },
77
+ {
78
+ re: /(?:[A-Za-z]:\\|\/)(?:[^\s"'<>|*?]+[/\\])*[^\s"'<>|*?]+\.(?:json|js|mjs|cjs|ts|tsx|exe|dll|log|db|sqlite|zip|mcpack|mcaddon)\b/gi,
79
+ paint: (m) => c.orange(m)
80
+ },
81
+ { re: /\b(?:GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS)\s+\S+\s+[1-5]\d{2}\b/g, paint: paintHttpExchange },
82
+ { re: /\b(?:status|HTTP\/\d(?:\.\d)?)\s*[:=]?\s*[1-5]\d{2}\b/gi, paint: paintHttpStatus },
83
+ { re: /\b(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS)\b/g, paint: (m) => c.purple(m) },
84
+ { re: /\bPlayer (?:connected|disconnected|joined|left)\b:?/gi, paint: (m) => c.green(m) },
85
+ { re: /\bServer (?:started|stopped|starting|stopping)\b/gi, paint: (m) => c.green(m) },
86
+ { re: /\b(?:listening|ready|healthy|online)\b/gi, paint: (m) => c.green(m) },
87
+ { re: /\b(?:offline|disconnected)\b/gi, paint: (m) => c.yellow(m) },
88
+ {
89
+ re: /\b(TPS|MSPT|tick|chunks?|entities|dimension|spawn(?:ed)?|loaded|saved|autosave)\b/gi,
90
+ paint: (m) => c.cyan(m)
91
+ },
92
+ {
93
+ re: /\b(?:TypeError|ReferenceError|SyntaxError|RangeError|URIError|EvalError|AggregateError|Error|Exception|ECONNREFUSED|EADDRINUSE|ENOENT|ETIMEDOUT|ENOTFOUND)\b/g,
94
+ paint: (m) => c.red(c.bold(m))
95
+ },
96
+ {
97
+ re: /\b(?:failed|failure|fatal|crash(?:ed)?|timeout|rejected|abort(?:ed)?)\b/gi,
98
+ paint: (m) => c.red(m)
99
+ },
100
+ { re: /\b(?:success(?:fully)?|done|passed|complete(?:d)?)\b/gi, paint: (m) => c.green(m) },
101
+ {
102
+ re: /\b(?:db-server|qq-bridge|bds-tools|llbot|bedrock[_-]?server|sfmc)\b/gi,
103
+ paint: (m) => c.purple(m)
104
+ }
105
+ ];
106
+ function highlightLogLine(raw) {
107
+ let s = raw.replace(/§[0-9a-fklmnor]/gi, "");
108
+ const hits = [];
109
+ for (const rule of LOG_HIGHLIGHT_RULES) {
110
+ const flags = rule.re.flags.includes("g") ? rule.re.flags : `${rule.re.flags}g`;
111
+ const re = new RegExp(rule.re.source, flags);
112
+ for (const match of s.matchAll(re)) {
113
+ const text = match[0];
114
+ const start = match.index ?? 0;
115
+ const end = start + text.length;
116
+ if (hits.some((h) => start < h.end && end > h.start)) continue;
117
+ hits.push({ start, end, text, paint: rule.paint });
118
+ }
119
+ }
120
+ hits.sort((a, b) => b.start - a.start);
121
+ for (const hit of hits) {
122
+ s = `${s.slice(0, hit.start)}${hit.paint(hit.text)}${s.slice(hit.end)}`;
123
+ }
124
+ return s;
47
125
  }
48
126
  function visibleLen(s) {
49
- return s.replace(/\x1b\[[0-9;]*m/g, "").length;
127
+ return s.replace(/\x1b\[[0-9;]*m/g, "").length;
50
128
  }
51
- export const DIVIDER = c.dim("".repeat(W - 2));
52
- export function padRight(s, n) {
53
- return s + " ".repeat(Math.max(0, n - visibleLen(s)));
129
+ const DIVIDER = c.dim("\u2500".repeat(W - 2));
130
+ function padRight(s, n) {
131
+ return s + " ".repeat(Math.max(0, n - visibleLen(s)));
54
132
  }
55
- //# sourceMappingURL=theme.js.map
133
+ export {
134
+ DIVIDER,
135
+ T,
136
+ W,
137
+ c,
138
+ highlightLogLine,
139
+ padRight
140
+ };
141
+ //# sourceMappingURL=theme.js.map
package/dist/theme.js.map CHANGED
@@ -1 +1,7 @@
1
- {"version":3,"file":"theme.js","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"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"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/theme.ts"],
4
+ "sourcesContent": ["import chalk from \"chalk\";\n\nexport const T = {\n bg: \"#282c34\",\n panel: \"#21252b\",\n surface: \"#2c313c\",\n surfaceHi: \"#3e4452\",\n subtle: \"#4b5263\",\n text: \"#dcdfe4\",\n muted: \"#888888\",\n red: \"#e06c75\",\n green: \"#98c379\",\n yellow: \"#e5c07b\",\n blue: \"#61afef\",\n cyan: \"#56b6c2\",\n purple: \"#c678dd\",\n orange: \"#d19a66\",\n} as const;\n\nexport const c = {\n dim: chalk.hex(T.muted),\n text: chalk.hex(T.text),\n green: chalk.hex(T.green),\n red: chalk.hex(T.red),\n yellow: chalk.hex(T.yellow),\n blue: chalk.hex(T.blue),\n cyan: chalk.hex(T.cyan),\n purple: chalk.hex(T.purple),\n orange: chalk.hex(T.orange),\n bold: chalk.bold,\n};\n\nexport const W = 58;\n\ntype HighlightRule = {\n re: RegExp;\n paint: (match: string) => string;\n};\n\nfunction paintHttpExchange(m: string): string {\n return m\n .replace(/^(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS)\\b/, (method) => c.purple(method))\n .replace(/[1-5]\\d{2}$/, (code) => {\n const n = Number(code);\n if (n >= 500) return c.red(code);\n if (n >= 400) return c.yellow(code);\n if (n >= 300) return c.cyan(code);\n return c.green(code);\n });\n}\n\nfunction paintHttpStatus(m: string): string {\n return m.replace(/[1-5]\\d{2}$/i, (code) => {\n const n = Number(code);\n if (n >= 500) return c.red(code);\n if (n >= 400) return c.yellow(code);\n if (n >= 300) return c.cyan(code);\n return c.green(code);\n });\n}\n\n/** \u89C4\u5219\u6309\u4F18\u5148\u7EA7\u6392\u5217;\u91CD\u53E0\u533A\u95F4\u53EA\u4FDD\u7559\u5148\u5339\u914D\u5230\u7684\u3002 */\nconst LOG_HIGHLIGHT_RULES: HighlightRule[] = [\n { re: /\\[FATAL\\]/gi, paint: (m) => c.red(c.bold(m)) },\n { re: /\\[ERROR\\]|\\[ERR\\]|\\[X\\]/gi, paint: (m) => c.red(m) },\n { re: /\\[WARN(?:ING)?\\]|\\[WRN\\]|\\[!\\]/gi, paint: (m) => c.yellow(m) },\n { re: /\\[SUCCESS\\]|\\[OK\\]|\\[\u221A\\]/gi, paint: (m) => c.green(c.bold(m)) },\n { re: /\\[INFO\\]|\\[INF\\]/gi, paint: (m) => c.blue(m) },\n { re: /\\[DEBUG\\]|\\[DBG\\]|\\[TRACE\\]/gi, paint: (m) => c.dim(m) },\n { re: /\\[PLAYER\\]/gi, paint: (m) => c.green(m) },\n { re: /\\[TPS\\]/gi, paint: (m) => c.cyan(m) },\n { re: /\\[SFMC\\]/gi, paint: (m) => c.purple(m) },\n\n { re: /\\b(FATAL|ERROR|ERR)\\b(?=\\s*:)/gi, paint: (m) => c.red(m) },\n { re: /\\b(WARN(?:ING)?|WRN)\\b(?=\\s*:)/gi, paint: (m) => c.yellow(m) },\n { re: /\\b(INFO|INF)\\b(?=\\s*:)/gi, paint: (m) => c.blue(m) },\n { re: /\\b(DEBUG|DBG|TRACE)\\b(?=\\s*:)/gi, paint: (m) => c.dim(m) },\n\n {\n re: /\\b\\d{4}-\\d{2}-\\d{2}[ T]\\d{2}:\\d{2}:\\d{2}(?:[.,:]\\d+)?(?:Z|[+-]\\d{2}:?\\d{2})?\\b/g,\n paint: (m) => c.dim(m),\n },\n { re: /\\b\\d{1,2}:\\d{2}(?::\\d{2})?(?:[.,]\\d+)?\\b/g, paint: (m) => c.dim(m) },\n\n { re: /\\bhttps?:\\/\\/[^\\s\"'<>]+/gi, paint: (m) => c.blue(m) },\n { re: /\\b\\d{1,3}(?:\\.\\d{1,3}){3}(?::\\d{1,5})?\\b/g, paint: (m) => c.cyan(m) },\n { re: /\\b(?:port|listening on|bound to)\\s*[:=]?\\s*\\d{2,5}\\b/gi, paint: (m) => c.cyan(m) },\n\n {\n re: /\\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\b/gi,\n paint: (m) => c.purple(m),\n },\n { re: /\\bv\\d+\\.\\d+\\.\\d+(?:[-+][\\w.-]+)?\\b/gi, paint: (m) => c.orange(m) },\n { re: /\\b(?:pid|PID)\\s*[:=]?\\s*\\d+\\b/g, paint: (m) => c.orange(m) },\n\n {\n re: /(?:[A-Za-z]:\\\\|\\/)(?:[^\\s\"'<>|*?]+[/\\\\])*[^\\s\"'<>|*?]+\\.(?:json|js|mjs|cjs|ts|tsx|exe|dll|log|db|sqlite|zip|mcpack|mcaddon)\\b/gi,\n paint: (m) => c.orange(m),\n },\n\n { re: /\\b(?:GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS)\\s+\\S+\\s+[1-5]\\d{2}\\b/g, paint: paintHttpExchange },\n { re: /\\b(?:status|HTTP\\/\\d(?:\\.\\d)?)\\s*[:=]?\\s*[1-5]\\d{2}\\b/gi, paint: paintHttpStatus },\n { re: /\\b(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS)\\b/g, paint: (m) => c.purple(m) },\n\n { re: /\\bPlayer (?:connected|disconnected|joined|left)\\b:?/gi, paint: (m) => c.green(m) },\n { re: /\\bServer (?:started|stopped|starting|stopping)\\b/gi, paint: (m) => c.green(m) },\n { re: /\\b(?:listening|ready|healthy|online)\\b/gi, paint: (m) => c.green(m) },\n { re: /\\b(?:offline|disconnected)\\b/gi, paint: (m) => c.yellow(m) },\n\n {\n re: /\\b(TPS|MSPT|tick|chunks?|entities|dimension|spawn(?:ed)?|loaded|saved|autosave)\\b/gi,\n paint: (m) => c.cyan(m),\n },\n\n {\n re: /\\b(?:TypeError|ReferenceError|SyntaxError|RangeError|URIError|EvalError|AggregateError|Error|Exception|ECONNREFUSED|EADDRINUSE|ENOENT|ETIMEDOUT|ENOTFOUND)\\b/g,\n paint: (m) => c.red(c.bold(m)),\n },\n {\n re: /\\b(?:failed|failure|fatal|crash(?:ed)?|timeout|rejected|abort(?:ed)?)\\b/gi,\n paint: (m) => c.red(m),\n },\n { re: /\\b(?:success(?:fully)?|done|passed|complete(?:d)?)\\b/gi, paint: (m) => c.green(m) },\n\n {\n re: /\\b(?:db-server|qq-bridge|bds-tools|llbot|bedrock[_-]?server|sfmc)\\b/gi,\n paint: (m) => c.purple(m),\n },\n];\n\n/**\n * \u9AD8\u4EAE\u65E5\u5FD7\u6B63\u6587\u3002\n * \u5728\u539F\u6587\u4E0A\u6536\u96C6\u5339\u914D(\u5148\u5230\u5148\u5F97\u3001\u8DF3\u8FC7\u91CD\u53E0),\u518D\u4ECE\u540E\u5F80\u524D\u7740\u8272,\u907F\u514D ANSI \u4E8C\u6B21\u6C61\u67D3\u3002\n */\nexport function highlightLogLine(raw: string): string {\n let s = raw.replace(/\u00A7[0-9a-fklmnor]/gi, \"\");\n const hits: Array<{ start: number; end: number; text: string; paint: (m: string) => string }> = [];\n\n for (const rule of LOG_HIGHLIGHT_RULES) {\n const flags = rule.re.flags.includes(\"g\") ? rule.re.flags : `${rule.re.flags}g`;\n const re = new RegExp(rule.re.source, flags);\n for (const match of s.matchAll(re)) {\n const text = match[0];\n const start = match.index ?? 0;\n const end = start + text.length;\n if (hits.some((h) => start < h.end && end > h.start)) continue;\n hits.push({ start, end, text, paint: rule.paint });\n }\n }\n\n hits.sort((a, b) => b.start - a.start);\n for (const hit of hits) {\n s = `${s.slice(0, hit.start)}${hit.paint(hit.text)}${s.slice(hit.end)}`;\n }\n return s;\n}\n\nfunction visibleLen(s: string): number {\n return s.replace(/\\x1b\\[[0-9;]*m/g, \"\").length;\n}\n\nexport const DIVIDER = c.dim(\"\u2500\".repeat(W - 2));\n\nexport function padRight(s: string, n: number): string {\n return s + \" \".repeat(Math.max(0, n - visibleLen(s)));\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"wizard.d.ts","sourceRoot":"","sources":["../src/wizard.ts"],"names":[],"mappings":"AA+LA,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAuQ/C"}
1
+ {"version":3,"file":"wizard.d.ts","sourceRoot":"","sources":["../src/wizard.ts"],"names":[],"mappings":"AA8GA,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAmR/C"}