ee-bin 5.0.0-beta.2 → 5.0.0-beta.5

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 (73) hide show
  1. package/dist/cjs/config/bin_default.js +69 -29
  2. package/dist/cjs/config/bin_default.js.map +1 -1
  3. package/dist/cjs/index.js +125 -4
  4. package/dist/cjs/index.js.map +1 -1
  5. package/dist/cjs/lib/extend.js +49 -15
  6. package/dist/cjs/lib/extend.js.map +1 -1
  7. package/dist/cjs/lib/helpers.js +71 -22
  8. package/dist/cjs/lib/helpers.js.map +1 -1
  9. package/dist/cjs/lib/utils.js +71 -30
  10. package/dist/cjs/lib/utils.js.map +1 -1
  11. package/dist/cjs/plugins/bundle_registry_plugin.js +156 -0
  12. package/dist/cjs/plugins/bundle_registry_plugin.js.map +1 -0
  13. package/dist/cjs/tools/encrypt.js +190 -29
  14. package/dist/cjs/tools/encrypt.js.map +1 -1
  15. package/dist/cjs/tools/iconGen.js +118 -30
  16. package/dist/cjs/tools/iconGen.js.map +1 -1
  17. package/dist/cjs/tools/incrUpdater.js +95 -33
  18. package/dist/cjs/tools/incrUpdater.js.map +1 -1
  19. package/dist/cjs/tools/move.js +71 -11
  20. package/dist/cjs/tools/move.js.map +1 -1
  21. package/dist/cjs/tools/serve.js +406 -81
  22. package/dist/cjs/tools/serve.js.map +1 -1
  23. package/dist/cjs/types/config.js +13 -0
  24. package/dist/cjs/types/config.js.map +1 -0
  25. package/dist/esm/config/bin_default.d.ts +19 -147
  26. package/dist/esm/config/bin_default.d.ts.map +1 -1
  27. package/dist/esm/config/bin_default.js +69 -29
  28. package/dist/esm/config/bin_default.js.map +1 -1
  29. package/dist/esm/index.d.ts +20 -0
  30. package/dist/esm/index.d.ts.map +1 -1
  31. package/dist/esm/index.js +125 -4
  32. package/dist/esm/index.js.map +1 -1
  33. package/dist/esm/lib/extend.d.ts +33 -0
  34. package/dist/esm/lib/extend.d.ts.map +1 -1
  35. package/dist/esm/lib/extend.js +49 -15
  36. package/dist/esm/lib/extend.js.map +1 -1
  37. package/dist/esm/lib/helpers.d.ts +44 -3
  38. package/dist/esm/lib/helpers.d.ts.map +1 -1
  39. package/dist/esm/lib/helpers.js +71 -22
  40. package/dist/esm/lib/helpers.js.map +1 -1
  41. package/dist/esm/lib/utils.d.ts +57 -3
  42. package/dist/esm/lib/utils.d.ts.map +1 -1
  43. package/dist/esm/lib/utils.js +71 -30
  44. package/dist/esm/lib/utils.js.map +1 -1
  45. package/dist/esm/plugins/bundle_registry_plugin.d.ts +33 -0
  46. package/dist/esm/plugins/bundle_registry_plugin.d.ts.map +1 -0
  47. package/dist/esm/plugins/bundle_registry_plugin.js +156 -0
  48. package/dist/esm/plugins/bundle_registry_plugin.js.map +1 -0
  49. package/dist/esm/tools/encrypt.d.ts +37 -1
  50. package/dist/esm/tools/encrypt.d.ts.map +1 -1
  51. package/dist/esm/tools/encrypt.js +190 -29
  52. package/dist/esm/tools/encrypt.js.map +1 -1
  53. package/dist/esm/tools/iconGen.d.ts +27 -1
  54. package/dist/esm/tools/iconGen.d.ts.map +1 -1
  55. package/dist/esm/tools/iconGen.js +118 -30
  56. package/dist/esm/tools/iconGen.js.map +1 -1
  57. package/dist/esm/tools/incrUpdater.d.ts +60 -13
  58. package/dist/esm/tools/incrUpdater.d.ts.map +1 -1
  59. package/dist/esm/tools/incrUpdater.js +95 -33
  60. package/dist/esm/tools/incrUpdater.js.map +1 -1
  61. package/dist/esm/tools/move.d.ts +41 -0
  62. package/dist/esm/tools/move.d.ts.map +1 -1
  63. package/dist/esm/tools/move.js +71 -11
  64. package/dist/esm/tools/move.js.map +1 -1
  65. package/dist/esm/tools/serve.d.ts +162 -25
  66. package/dist/esm/tools/serve.d.ts.map +1 -1
  67. package/dist/esm/tools/serve.js +406 -81
  68. package/dist/esm/tools/serve.js.map +1 -1
  69. package/dist/esm/types/config.d.ts +211 -0
  70. package/dist/esm/types/config.d.ts.map +1 -0
  71. package/dist/esm/types/config.js +13 -0
  72. package/dist/esm/types/config.js.map +1 -0
  73. package/package.json +16 -13
@@ -1,6 +1,15 @@
1
1
  "use strict";
2
2
  /**
3
- * Local helpers replacing unnecessary npm dependencies.
3
+ * Local Helper Utilities — replaces unnecessary npm dependencies
4
+ *
5
+ * This module provides lightweight local implementations as alternatives to four npm packages,
6
+ * reducing dependency size and security risk:
7
+ * - is-type-of → is.function / is.class (only two checks needed)
8
+ * - chalk → ANSI escape code-based colored output (8 colors suffice)
9
+ * - fs-extra → copyDirSync recursive directory copy (only this one method needed)
10
+ * - debug → createDebug environment variable-based debug logging (with cache optimization)
11
+ *
12
+ * Also provides formatCmds for comma-separated command string parsing.
4
13
  */
5
14
  var __importDefault = (this && this.__importDefault) || function (mod) {
6
15
  return (mod && mod.__esModule) ? mod : { "default": mod };
@@ -12,26 +21,29 @@ exports.createDebug = createDebug;
12
21
  exports.formatCmds = formatCmds;
13
22
  const fs_1 = __importDefault(require("fs"));
14
23
  const path_1 = __importDefault(require("path"));
15
- // ─── type checks (replacing is-type-of) ────────────────────
24
+ // ─── Type checking (replaces is-type-of) ──────────────────────────
16
25
  exports.is = {
26
+ /** Check whether a value is a function (including async functions and generators) */
17
27
  function(val) {
18
28
  return typeof val === 'function';
19
29
  },
30
+ /**
31
+ * Check whether a value is an ES6 class.
32
+ * Uses toString() to check if the source code starts with 'class ', and verifies
33
+ * the prototype property exists. This double-check prevents false positives for
34
+ * regular functions (arrow functions and bound functions have no prototype).
35
+ */
20
36
  class(val) {
21
- return typeof val === 'function' && val.toString().startsWith('class ');
22
- },
23
- string(val) {
24
- return typeof val === 'string';
25
- },
26
- array(val) {
27
- return Array.isArray(val);
37
+ return typeof val === 'function' && val.toString().startsWith('class ') && !!val.prototype;
28
38
  },
29
39
  };
30
- // ─── chalk (ANSI escape codes) ─────────────────────────────
40
+ // ─── Colored output (replaces chalk, based on ANSI escape codes) ──
31
41
  const RESET = '\x1b[0m';
42
+ /** Wrap text with ANSI escape codes: prefix color code + content + reset code */
32
43
  function ansi(code, text) {
33
44
  return code + text + RESET;
34
45
  }
46
+ /** Minimal chalk replacement, providing the 8 colors needed for ee-bin logging */
35
47
  exports.chalk = {
36
48
  blue: (text) => ansi('\x1b[34m', text),
37
49
  green: (text) => ansi('\x1b[32m', text),
@@ -42,7 +54,11 @@ exports.chalk = {
42
54
  bgRed: (text) => ansi('\x1b[41m', text),
43
55
  bgYellow: (text) => ansi('\x1b[43m', text),
44
56
  };
45
- // ─── fs-extra ──────────────────────────────────────────────
57
+ // ─── Recursive directory copy (replaces fs-extra) ─────────────────
58
+ /**
59
+ * Synchronously copy a file or directory.
60
+ * Automatically determines src type: files are copied directly, directories are copied recursively.
61
+ */
46
62
  function copyDirSync(src, dest) {
47
63
  if (fs_1.default.statSync(src).isFile()) {
48
64
  fs_1.default.mkdirSync(path_1.default.dirname(dest), { recursive: true });
@@ -51,6 +67,7 @@ function copyDirSync(src, dest) {
51
67
  }
52
68
  _copyDirRecursive(src, dest);
53
69
  }
70
+ /** Recursively copy directory contents (internal implementation) */
54
71
  function _copyDirRecursive(src, dest) {
55
72
  fs_1.default.mkdirSync(dest, { recursive: true });
56
73
  const entries = fs_1.default.readdirSync(src, { withFileTypes: true });
@@ -65,27 +82,59 @@ function _copyDirRecursive(src, dest) {
65
82
  }
66
83
  }
67
84
  }
68
- // ─── debug ─────────────────────────────────────────────────
85
+ // ─── Debug logging (replaces debug npm package) ───────────────────
86
+ /**
87
+ * Create a namespace-scoped debug log function
88
+ *
89
+ * Controlled by the process.env.DEBUG environment variable:
90
+ * - DEBUG=* → enable all namespaces
91
+ * - DEBUG=ee-bin:* → enable all ee-bin sub-namespaces
92
+ * - DEBUG=ee-bin:serve → enable only the serve namespace
93
+ *
94
+ * Includes cache optimization: the enabled state is only recalculated when
95
+ * the DEBUG environment variable changes, avoiding re-parsing the env string
96
+ * on every log call.
97
+ */
69
98
  function createDebug(namespace) {
70
- const enabled = () => {
71
- const dbg = process.env.DEBUG || '';
72
- return dbg === '*' || dbg.split(',').some((ns) => {
73
- if (ns.endsWith(':*'))
74
- return namespace.startsWith(ns.slice(0, -1));
75
- return ns === namespace;
76
- });
99
+ let cachedDebugEnv;
100
+ let cachedEnabled = false;
101
+ /** Check whether the current DEBUG env enables this namespace (with caching) */
102
+ const checkEnabled = () => {
103
+ const currentEnv = process.env.DEBUG;
104
+ if (currentEnv !== cachedDebugEnv) {
105
+ cachedDebugEnv = currentEnv;
106
+ const dbg = currentEnv || '';
107
+ cachedEnabled = dbg === '*' || dbg.split(',').some((ns) => {
108
+ if (ns.endsWith(':*'))
109
+ return namespace.startsWith(ns.slice(0, -1));
110
+ return ns === namespace;
111
+ });
112
+ }
113
+ return cachedEnabled;
77
114
  };
78
115
  return (...args) => {
79
- if (enabled()) {
116
+ if (checkEnabled()) {
80
117
  console.log(namespace, ...args);
81
118
  }
82
119
  };
83
120
  }
84
- // ─── formatCmds ────────────────────────────────────────────
121
+ // ─── Command string parsing ───────────────────────────────────────
122
+ /**
123
+ * Parse a comma-separated command string into an array of commands
124
+ *
125
+ * Processing rules:
126
+ * - Empty string → []
127
+ * - No comma → single-element array
128
+ * - With comma → split, trim each item, and filter out empty values
129
+ * Example: "frontend, electron" → ["frontend", "electron"]
130
+ * Example: "frontend,,electron" → ["frontend", "electron"]
131
+ */
85
132
  function formatCmds(command) {
86
133
  const cmdString = command.trim();
134
+ if (cmdString === '')
135
+ return [];
87
136
  if (cmdString.includes(',')) {
88
- return cmdString.split(',');
137
+ return cmdString.split(',').map(s => s.trim()).filter(s => s.length > 0);
89
138
  }
90
139
  return [cmdString];
91
140
  }
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/lib/helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/lib/helpers.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;;;;AAkDH,kCAOC;AA+BD,kCAuBC;AAcD,gCAOC;AAlID,4CAAoB;AACpB,gDAAwB;AAExB,qEAAqE;AAExD,QAAA,EAAE,GAAG;IAChB,qFAAqF;IACrF,QAAQ,CAAC,GAAY;QACnB,OAAO,OAAO,GAAG,KAAK,UAAU,CAAC;IACnC,CAAC;IACD;;;;;OAKG;IACH,KAAK,CAAC,GAAY;QAChB,OAAO,OAAO,GAAG,KAAK,UAAU,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;IAC7F,CAAC;CACF,CAAC;AAEF,qEAAqE;AAErE,MAAM,KAAK,GAAG,SAAS,CAAC;AAExB,iFAAiF;AACjF,SAAS,IAAI,CAAC,IAAY,EAAE,IAAY;IACtC,OAAO,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;AAC7B,CAAC;AAED,kFAAkF;AACrE,QAAA,KAAK,GAAG;IACnB,IAAI,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;IAC9C,KAAK,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;IAC/C,GAAG,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;IAC7C,IAAI,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;IAC9C,OAAO,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;IACjD,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;IAChD,KAAK,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;IAC/C,QAAQ,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;CACnD,CAAC;AAEF,qEAAqE;AAErE;;;GAGG;AACH,SAAgB,WAAW,CAAC,GAAW,EAAE,IAAY;IACnD,IAAI,YAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QAC9B,YAAE,CAAC,SAAS,CAAC,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,YAAE,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC3B,OAAO;IACT,CAAC;IACD,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED,oEAAoE;AACpE,SAAS,iBAAiB,CAAC,GAAW,EAAE,IAAY;IAClD,YAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,YAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,YAAE,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;AACH,CAAC;AAED,qEAAqE;AAErE;;;;;;;;;;;GAWG;AACH,SAAgB,WAAW,CAAC,SAAiB;IAC3C,IAAI,cAAkC,CAAC;IACvC,IAAI,aAAa,GAAG,KAAK,CAAC;IAE1B,gFAAgF;IAChF,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;QACrC,IAAI,UAAU,KAAK,cAAc,EAAE,CAAC;YAClC,cAAc,GAAG,UAAU,CAAC;YAC5B,MAAM,GAAG,GAAG,UAAU,IAAI,EAAE,CAAC;YAC7B,aAAa,GAAG,GAAG,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE;gBACxD,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,OAAO,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpE,OAAO,EAAE,KAAK,SAAS,CAAC;YAC1B,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC,CAAC;IAEF,OAAO,CAAC,GAAG,IAAe,EAAE,EAAE;QAC5B,IAAI,YAAY,EAAE,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC;QAClC,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,qEAAqE;AAErE;;;;;;;;;GASG;AACH,SAAgB,UAAU,CAAC,OAAe;IACxC,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IACjC,IAAI,SAAS,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC;IAChC,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,CAAC,SAAS,CAAC,CAAC;AACrB,CAAC"}
@@ -1,4 +1,16 @@
1
1
  "use strict";
2
+ /**
3
+ * Core Utility Functions — config loading, file I/O, path handling
4
+ *
5
+ * This module is the heart of the ee-bin configuration system. It implements the
6
+ * full configuration loading pipeline:
7
+ * loadConfig(binFile) → loads user ./cmd/bin.js
8
+ * → loadFile(binFile) → parses .js/.json/.json5 config files
9
+ * → extend(true, defaultConfig, userConfig) → deep merges with default config
10
+ *
11
+ * Also provides basic I/O utilities: JSON file read/write, directory deletion,
12
+ * and array normalization.
13
+ */
2
14
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
15
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
16
  };
@@ -8,8 +20,7 @@ exports.loadFile = loadFile;
8
20
  exports.rm = rm;
9
21
  exports.readJsonSync = readJsonSync;
10
22
  exports.writeJsonSync = writeJsonSync;
11
- exports.getArgumentByName = getArgumentByName;
12
- exports.getPlatform = getPlatform;
23
+ exports.toArray = toArray;
13
24
  const helpers_js_1 = require("./helpers.js");
14
25
  const path_1 = __importDefault(require("path"));
15
26
  const fs_1 = __importDefault(require("fs"));
@@ -21,6 +32,16 @@ const extend_js_1 = require("./extend.js");
21
32
  const log = (0, helpers_js_1.createDebug)('ee-bin:lib:utils');
22
33
  const _basePath = process.cwd();
23
34
  const userBin = './cmd/bin.js';
35
+ /**
36
+ * Load and merge ee-bin configuration
37
+ *
38
+ * Two-phase merge strategy:
39
+ * 1. Load user config from ./cmd/bin.js (supports .js/.json/.json5 formats)
40
+ * 2. Deep merge user config on top of default config (user values override defaults)
41
+ *
42
+ * @param binFile - Custom config file path (defaults to './cmd/bin.js')
43
+ * @returns Fully merged BinConfig
44
+ */
24
45
  function loadConfig(binFile) {
25
46
  const binPath = binFile || userBin;
26
47
  const userConfig = loadFile(binPath);
@@ -28,6 +49,22 @@ function loadConfig(binFile) {
28
49
  log('[loadConfig] bin:%j', result);
29
50
  return result;
30
51
  }
52
+ /**
53
+ * Load a configuration file — supports .json5/.json/.js/.cjs formats
54
+ *
55
+ * Format-specific handling:
56
+ * - .json5/.json: Read text content and parse with the json5 parser
57
+ * (JSON5 supports comments, trailing commas, and other extended syntax)
58
+ * - .js/.cjs: Load the module via require() and extract the export value
59
+ * - If the export is a plain function (not a class), treat it as a config
60
+ * factory function and call it to obtain the config object
61
+ * - If the export is a class, use the class directly as config (do not call it)
62
+ * - If the export is an ESModule (has a default property), extract the .default value
63
+ *
64
+ * @param filepath - Config file path (relative to project root)
65
+ * @returns Config object (Record<string, unknown>)
66
+ * @throws Error with path hint if the file does not exist
67
+ */
31
68
  function loadFile(filepath) {
32
69
  const configFile = path_1.default.join(_basePath, filepath);
33
70
  if (!fs_1.default.existsSync(configFile)) {
@@ -42,30 +79,52 @@ function loadFile(filepath) {
42
79
  if (configFile.endsWith('.js') || configFile.endsWith('.cjs')) {
43
80
  // eslint-disable-next-line @typescript-eslint/no-require-imports -- dynamic user config loading
44
81
  const mod = require(configFile);
82
+ // Handle ESM default export: require() on an ESM module returns { default: ... }
45
83
  result = mod.default != null ? mod.default : mod;
46
84
  }
85
+ // Config factory pattern: if the export is a plain function (not a class),
86
+ // call it to obtain the config object. Classes are used directly because
87
+ // a class export is itself the config class, not a factory function.
47
88
  if (helpers_js_3.is.function(result) && !helpers_js_3.is.class(result)) {
48
89
  result = result();
49
90
  }
91
+ // Warn if the config file exports an unrecognized value (null, undefined, primitive)
92
+ // that will be treated as empty config — the user's config is effectively ignored.
93
+ if (result === null || result === undefined) {
94
+ console.log(helpers_js_2.chalk.yellow('[ee-bin] [loadFile] ') + `Warning: ${configFile} exports ${result}, treating as empty config`);
95
+ }
50
96
  return result || {};
51
97
  }
98
+ /** Recursively force-delete a directory or file (similar to rm -rf) */
52
99
  function rm(name) {
53
100
  if (!fs_1.default.existsSync(name)) {
54
101
  return;
55
102
  }
56
103
  fs_1.default.rmSync(name, { recursive: true, force: true });
57
104
  }
105
+ /**
106
+ * Synchronously read a JSON file and parse it into an object
107
+ * @throws Error if the file does not exist
108
+ */
58
109
  function readJsonSync(filepath, encoding = 'utf8') {
59
110
  if (!fs_1.default.existsSync(filepath)) {
60
111
  throw new Error(filepath + ' is not found');
61
112
  }
62
113
  return JSON.parse(fs_1.default.readFileSync(filepath, { encoding }));
63
114
  }
115
+ /**
116
+ * Synchronously write a JSON file with auto-created directories and formatted output
117
+ *
118
+ * @param filepath - Target file path
119
+ * @param str - Data to write (objects are auto JSON.stringify'd; other types are converted to string)
120
+ * @param options - Optional parameters: space controls indentation (default 2), replacer controls serialization filtering
121
+ */
64
122
  function writeJsonSync(filepath, str, options) {
65
123
  const opt = options || {};
66
124
  if (!('space' in opt)) {
67
125
  opt.space = 2;
68
126
  }
127
+ // Auto-create target directory (prevents write failure from missing directory)
69
128
  fs_1.default.mkdirSync(path_1.default.dirname(filepath), { recursive: true });
70
129
  let data;
71
130
  if (typeof str === 'object') {
@@ -76,33 +135,15 @@ function writeJsonSync(filepath, str, options) {
76
135
  }
77
136
  fs_1.default.writeFileSync(filepath, data);
78
137
  }
79
- function getArgumentByName(name, args) {
80
- if (!args) {
81
- args = process.argv;
82
- }
83
- for (let i = 0; i < args.length; i++) {
84
- const item = args[i];
85
- if (!item)
86
- continue;
87
- const prefixKey = `--${name}=`;
88
- if (item.indexOf(prefixKey) !== -1) {
89
- return item.substring(prefixKey.length);
90
- }
91
- }
92
- return undefined;
93
- }
94
- function getPlatform(delimiter = '_', isDiffArch = false) {
95
- if (process.platform === 'win32') {
96
- let os = 'windows';
97
- if (isDiffArch) {
98
- os += delimiter + (process.arch === 'x64' ? '64' : '32');
99
- }
100
- return os;
101
- }
102
- if (process.platform === 'darwin') {
103
- const core = process.arch === 'arm64' ? 'apple' : 'intel';
104
- return 'macos' + delimiter + core;
105
- }
106
- return 'linux';
138
+ /**
139
+ * Normalize string | string[] | undefined to string[]
140
+ * Used to handle the "args" config field which accepts different input formats
141
+ */
142
+ function toArray(value) {
143
+ if (typeof value === 'string')
144
+ return [value];
145
+ if (Array.isArray(value))
146
+ return value;
147
+ return [];
107
148
  }
108
149
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ /**
3
+ * esbuild Bundle-Registry Plugin — generates controller and config registries at build time
4
+ *
5
+ * This plugin is the core mechanism for Electron main process bundling. It scans the
6
+ * electron/controller/ and electron/config/ directories at build time and generates
7
+ * virtual modules that register all controllers and config modules, ensuring the bundled
8
+ * code can correctly locate them. The lazy getter design avoids initialization order issues.
9
+ *
10
+ * Three virtual modules are generated:
11
+ * 1. app:controller-registry → Scans electron/controller/, generates global.__EE_CONTROLLER_REGISTRY__
12
+ * 2. app:config-registry → Scans electron/config/, generates global.__EE_CONFIG_REGISTRY__
13
+ * 3. app:bundle-entry → Virtual entry point that loads in order: config registry → controller registry → main.js
14
+ *
15
+ * Why config loads before controller:
16
+ * ee-core's ConfigLoader._loadConfig() needs __EE_CONFIG_REGISTRY__ to load configuration,
17
+ * and ControllerLoader.load() needs __EE_CONTROLLER_REGISTRY__ to load controllers.
18
+ * Config loading happens before controller loading (ElectronEgg lifecycle: loadConfig → loadController),
19
+ * so registries must be injected in this order as well.
20
+ *
21
+ * How it works with ee-core:
22
+ * - Bundle mode (global.__EE_CONTROLLER_REGISTRY__ exists) → FileLoader.parseFromRegistry() reads from the registry
23
+ * - Dev mode (registry absent) → FileLoader falls back to globby filesystem scanning + require()
24
+ */
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.bundleRegistryPlugin = bundleRegistryPlugin;
30
+ const globby_1 = require("globby");
31
+ const path_1 = __importDefault(require("path"));
32
+ /**
33
+ * Compute property paths from a file path, replicating ee-core's getProperties() + defaultCamelize(caseStyle: 'lower')
34
+ *
35
+ * Camelize rules (caseStyle: 'lower' means first character lowercase):
36
+ * - Remove file extension: 'foo/bar.js' → 'foo/bar'
37
+ * - Split by '/': 'foo/bar' → ['foo', 'bar']
38
+ * - Apply camelCase conversion per segment: letter after underscore/hyphen is uppercased ('foo-bar' → 'fooBar')
39
+ * - First character lowercase: 'FooBar' → 'fooBar'
40
+ *
41
+ * Example: 'foo_bar/my-controller.js' => ['fooBar', 'myController']
42
+ */
43
+ function computeProperties(filepath) {
44
+ const properties = filepath.substring(0, filepath.lastIndexOf('.')).split('/');
45
+ return properties.map((property) => {
46
+ if (!/^[a-z][a-z0-9_-]*$/i.test(property)) {
47
+ throw new Error(`${property} is not match 'a-z0-9_-' in ${filepath}`);
48
+ }
49
+ // Convert underscore/hyphen separators to camelCase
50
+ const normalized = property.replace(/[_-][a-z]/gi, (s) => s.substring(1).toUpperCase());
51
+ const first = normalized[0];
52
+ if (!first)
53
+ return normalized;
54
+ // Ensure first character is lowercase (caseStyle: 'lower')
55
+ return first.toLowerCase() + normalized.substring(1);
56
+ });
57
+ }
58
+ /**
59
+ * Create the esbuild bundle-registry plugin
60
+ *
61
+ * @param controllerDir - Absolute path to the electron/controller/ directory
62
+ * @param mainJsPath - Absolute path to electron/main.js or main.ts (entry file)
63
+ * @param configDir - Absolute path to the electron/config/ directory
64
+ */
65
+ function bundleRegistryPlugin(controllerDir, mainJsPath, configDir) {
66
+ return {
67
+ name: 'bundle-registry',
68
+ setup(build) {
69
+ let registryEntries = [];
70
+ let configEntries = [];
71
+ // Re-scan directories at the start of each build (supports file additions/deletions in rebuild/watch mode)
72
+ build.onStart(() => {
73
+ const controllerFiles = (0, globby_1.globbySync)(['**/*.js', '**/*.jsc', '**/*.ts'], { cwd: controllerDir });
74
+ registryEntries = controllerFiles.map((filepath) => ({
75
+ fullpath: 'controller/' + filepath.replace(/\\/g, '/'),
76
+ properties: computeProperties(filepath),
77
+ relPath: filepath,
78
+ }));
79
+ const configFiles = (0, globby_1.globbySync)(['**/*.js', '**/*.jsc', '**/*.ts'], { cwd: configDir });
80
+ configEntries = configFiles.map((filepath) => ({
81
+ // Remove extension from filename to match ee-core ConfigLoader's lookup logic:
82
+ // ConfigLoader finds config by name (e.g. 'default'), not including the '.js' extension
83
+ filename: filepath.replace(/\\/g, '/').substring(0, filepath.lastIndexOf('.')),
84
+ relPath: filepath,
85
+ }));
86
+ });
87
+ // ─── Virtual module: controller registry ──────────────────────
88
+ build.onResolve({ filter: /^app:controller-registry$/ }, (args) => {
89
+ return { path: args.path, namespace: 'controller-registry' };
90
+ });
91
+ build.onLoad({ filter: /.*/, namespace: 'controller-registry' }, () => {
92
+ const lines = ['// Auto-generated controller registry - do not edit'];
93
+ lines.push('global.__EE_CONTROLLER_REGISTRY__ = [');
94
+ for (const [i, entry] of registryEntries.entries()) {
95
+ const requirePath = JSON.stringify('./' + entry.relPath.replace(/\\/g, '/'));
96
+ const comma = i < registryEntries.length - 1 ? ',' : '';
97
+ // Use lazy getter (get module() { return require(...) }) instead of direct require()
98
+ // to avoid executing all controller modules at registry load time, which could cause
99
+ // initialization order issues. ee-core's FileLoader.parseFromRegistry() invokes the
100
+ // getter only when the module is actually needed.
101
+ lines.push(` { fullpath: ${JSON.stringify(entry.fullpath)}, properties: ${JSON.stringify(entry.properties)}, get module() { return require(${requirePath}); } }${comma}`);
102
+ }
103
+ lines.push('];');
104
+ return {
105
+ contents: lines.join('\n'),
106
+ loader: 'js',
107
+ // Set resolveDir to controllerDir so require() paths resolve relative to the controller directory
108
+ resolveDir: controllerDir,
109
+ };
110
+ });
111
+ // ─── Virtual module: config registry ──────────────────────────
112
+ build.onResolve({ filter: /^app:config-registry$/ }, (args) => {
113
+ return { path: args.path, namespace: 'config-registry' };
114
+ });
115
+ build.onLoad({ filter: /.*/, namespace: 'config-registry' }, () => {
116
+ const lines = ['// Auto-generated config registry - do not edit'];
117
+ lines.push('global.__EE_CONFIG_REGISTRY__ = [');
118
+ for (const [i, entry] of configEntries.entries()) {
119
+ const requirePath = JSON.stringify('./' + entry.relPath.replace(/\\/g, '/'));
120
+ const comma = i < configEntries.length - 1 ? ',' : '';
121
+ // Same as controller registry: use lazy getter to avoid loading config modules immediately
122
+ lines.push(` { filename: ${JSON.stringify(entry.filename)}, get module() { return require(${requirePath}); } }${comma}`);
123
+ }
124
+ lines.push('];');
125
+ return {
126
+ contents: lines.join('\n'),
127
+ loader: 'js',
128
+ resolveDir: configDir,
129
+ };
130
+ });
131
+ // ─── Virtual module: bundle entry point ───────────────────────
132
+ build.onResolve({ filter: /^app:bundle-entry$/ }, (args) => {
133
+ return { path: args.path, namespace: 'bundle-entry' };
134
+ });
135
+ build.onLoad({ filter: /.*/, namespace: 'bundle-entry' }, () => {
136
+ const mainRelative = JSON.stringify('./' + path_1.default.basename(mainJsPath));
137
+ // Load order is critical: config registry → controller registry → main.js
138
+ // Because ee-core's lifecycle is loadConfig → loadController → loadElectron,
139
+ // registries must be injected onto global before main.js executes
140
+ const contents = [
141
+ '// Auto-generated bundle entry - do not edit',
142
+ `require('app:config-registry');`,
143
+ `require('app:controller-registry');`,
144
+ `require(${mainRelative});`,
145
+ ].join('\n');
146
+ return {
147
+ contents,
148
+ loader: 'js',
149
+ // Set resolveDir to the directory containing main.js so require(main.js) resolves correctly
150
+ resolveDir: path_1.default.dirname(mainJsPath),
151
+ };
152
+ });
153
+ },
154
+ };
155
+ }
156
+ //# sourceMappingURL=bundle_registry_plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle_registry_plugin.js","sourceRoot":"","sources":["../../../src/plugins/bundle_registry_plugin.ts"],"names":[],"mappings":"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"}