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,4 +1,26 @@
1
1
  "use strict";
2
+ /**
3
+ * Code Encryption Module — bytecode compilation + JS obfuscation
4
+ *
5
+ * Supports three encryption modes:
6
+ * - confusion: Obfuscation only (javascript-obfuscator), works for both frontend and Electron
7
+ * - bytecode: Bytecode only (bytenode), only for Electron (frontend renderer V8 version
8
+ * differs from compile-time V8, making bytecode incompatible)
9
+ * - strict: Obfuscation + bytecode combined; obfuscate first, then compile to bytecode
10
+ * for the strongest protection
11
+ * - none: No encryption (all processing skipped)
12
+ *
13
+ * Encryption flow:
14
+ * 1. Load config, determine encryption type and target file list (via globby scan)
15
+ * 2. Iterate target files; specificFiles entries are forced to use confusion
16
+ * (even when global config is bytecode)
17
+ * 3. Call generateJSConfuseFile or generateBytecodeFile based on encryption type
18
+ *
19
+ * Bytecode compilation safety mechanism:
20
+ * - After compilation, verify the .jsc file exists before deleting the source .js file
21
+ * - If .jsc was not generated, throw an error and keep the source file to prevent
22
+ * code loss from failed compilation
23
+ */
2
24
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
25
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
26
  };
@@ -10,54 +32,136 @@ const fs_1 = __importDefault(require("fs"));
10
32
  const helpers_js_1 = require("../lib/helpers.js");
11
33
  const bytenode_1 = __importDefault(require("bytenode"));
12
34
  const javascript_obfuscator_1 = __importDefault(require("javascript-obfuscator"));
13
- const globby_1 = __importDefault(require("globby"));
35
+ const globby_1 = require("globby");
14
36
  const utils_js_1 = require("../lib/utils.js");
15
- const extend_js_1 = require("../lib/extend.js");
37
+ /** Valid encryption type list (used for runtime includes validation) */
16
38
  const EncryptTypes = ['bytecode', 'confusion', 'strict'];
39
+ /**
40
+ * Run a function while optionally suppressing javascript-obfuscator's "Pro" advertisement banner.
41
+ *
42
+ * javascript-obfuscator (v5.x) prints a promotional banner via console.log when stdout
43
+ * is a TTY and not in CI. There is no official option to disable it, so when `silent` is
44
+ * true we temporarily wrap console.log to drop only those advertisement lines, then restore
45
+ * it. When `silent` is false the function runs untouched.
46
+ */
47
+ function withSuppressedObfuscatorAd(silent, fn) {
48
+ if (!silent)
49
+ return fn();
50
+ const original = console.log;
51
+ console.log = (...args) => {
52
+ const first = args[0];
53
+ if (typeof first === 'string' &&
54
+ (first.includes('JavaScript Obfuscator Pro') || first.includes('obfuscator.io'))) {
55
+ return;
56
+ }
57
+ original.apply(console, args);
58
+ };
59
+ try {
60
+ return fn();
61
+ }
62
+ finally {
63
+ console.log = original;
64
+ }
65
+ }
66
+ /** Default encryption config (type='none' means no encryption is performed) */
67
+ const DEFAULT_ENCRYPT_CONFIG = { type: 'none',
68
+ fileExt: ['.js'],
69
+ cleanFiles: [],
70
+ specificFiles: [],
71
+ encryptDir: './',
72
+ };
17
73
  class Encrypt {
18
74
  constructor(options = {}) {
19
75
  const { config, out, target } = options;
20
76
  this.basePath = process.cwd();
21
77
  this.target = target || 'electron';
22
- const conf = ((0, utils_js_1.loadConfig)(config).encrypt || {});
23
- this.config = conf[this.target] || {};
78
+ // Load config: get the config for the corresponding target from the encrypt section,
79
+ // fall back to default if not found
80
+ const conf = (0, utils_js_1.loadConfig)(config).encrypt;
81
+ this.config = conf[this.target] || DEFAULT_ENCRYPT_CONFIG;
24
82
  const outputFolder = out || this.config.encryptDir || './';
25
83
  this.encryptDir = path_1.default.join(this.basePath, outputFolder);
26
84
  this.filesExt = this.config.fileExt || ['.js'];
27
85
  this.type = this.config.type || 'none';
28
86
  this.bOpt = this.config.bytecodeOptions || {};
29
87
  this.cOpt = this.config.confusionOptions || {};
88
+ this.silent = this.config.silent ?? false;
30
89
  this.patterns = this.config.files || null;
31
90
  this.specFiles = this.config.specificFiles || [];
32
- this.codefiles = this._initCodeFiles();
91
+ this.entryFiles = this.config.entryFiles || [];
92
+ // codefiles is not initialized in the constructor (deferred until encrypt() is called
93
+ // to avoid wasting I/O when type='none')
33
94
  }
34
- _initCodeFiles() {
95
+ /**
96
+ * Lazily get the target file list
97
+ *
98
+ * On first call, uses globby to scan files matching the patterns.
99
+ * Results are cached in this.codefiles; subsequent calls return the cache.
100
+ * If patterns is null (no "files" field in config), returns undefined to indicate
101
+ * encryption cannot proceed.
102
+ */
103
+ _getCodeFiles() {
104
+ if (this.codefiles !== undefined)
105
+ return this.codefiles;
35
106
  if (!this.patterns)
36
107
  return undefined;
37
- const files = globby_1.default.sync(this.patterns, { cwd: this.basePath });
38
- return files;
108
+ this.codefiles = (0, globby_1.globbySync)(this.patterns, { cwd: this.basePath });
109
+ return this.codefiles;
39
110
  }
40
- encrypt() {
111
+ /**
112
+ * Execute encryption — iterate target files and encrypt each one
113
+ *
114
+ * Frontend bytecode is skipped: the browser renderer process V8 version differs
115
+ * from the compile-time V8, so compiled bytecode cannot execute in the renderer.
116
+ */
117
+ async encrypt() {
118
+ // Skip if type is 'none' or not in the valid EncryptTypes list
41
119
  if (!EncryptTypes.includes(this.type))
42
120
  return;
43
- if (this.target === 'frontend' && (this.type === 'bytecode' || this.type === 'strict'))
121
+ // Frontend does not support bytecode (renderer V8 version incompatibility)
122
+ if (this.target === 'frontend' && (this.type === 'bytecode' || this.type === 'strict')) {
123
+ console.log(helpers_js_1.chalk.blue('[ee-bin] [encrypt] ') + `Skipping frontend ${this.type} (bytecode not supported in renderer)`);
44
124
  return;
45
- console.log(helpers_js_1.chalk.blue('[ee-bin] [encrypt] ') + `start ciphering ${this.target}`);
46
- if (!this.codefiles)
125
+ }
126
+ console.log(helpers_js_1.chalk.blue('[ee-bin] [encrypt] ') + `start encrypting ${this.target}`);
127
+ const files = this._getCodeFiles();
128
+ if (!files)
47
129
  return;
48
- for (const file of this.codefiles) {
130
+ for (const file of files) {
49
131
  const fullpath = path_1.default.join(this.encryptDir, file);
50
132
  if (!fs_1.default.statSync(fullpath).isFile())
51
133
  continue;
134
+ // Filter by file extension (fileExt config option)
135
+ const ext = path_1.default.extname(file);
136
+ if (!this.filesExt.includes(ext))
137
+ continue;
138
+ // Entry files (e.g. main.js) cannot be renamed to .jsc — the Electron/Node runtime
139
+ // requires a literal .js entry. In bytecode/strict mode, compile to .jsc and replace
140
+ // the source with a tiny bytenode loader shell. In confusion mode they behave normally.
141
+ if (this.entryFiles.includes(file)) {
142
+ await this.generateEntryLoader(fullpath);
143
+ continue;
144
+ }
145
+ // Files in specificFiles are forced to use confusion (e.g. preload/bridge.js
146
+ // must remain in a readable format for BrowserWindow to load; bytecode won't work)
52
147
  if (this.specFiles.includes(file)) {
53
- this.generate(fullpath, 'confusion');
148
+ await this.generate(fullpath, 'confusion');
54
149
  continue;
55
150
  }
56
- this.generate(fullpath);
151
+ await this.generate(fullpath);
57
152
  }
58
- console.log(helpers_js_1.chalk.blue('[ee-bin] [encrypt] ') + 'end ciphering');
153
+ console.log(helpers_js_1.chalk.blue('[ee-bin] [encrypt] ') + 'end encrypting');
59
154
  }
60
- generate(curPath, type) {
155
+ /**
156
+ * Encrypt a single file
157
+ *
158
+ * @param curPath - Absolute path to the file
159
+ * @param type - Encryption type override (used by specificFiles to force a specific type)
160
+ *
161
+ * strict mode = confusion + bytecode combined: obfuscate first, then compile to bytecode.
162
+ * The obfuscated code is compiled into bytecode for double protection.
163
+ */
164
+ async generate(curPath, type) {
61
165
  const encryptType = type || this.type;
62
166
  const tips = helpers_js_1.chalk.blue('[ee-bin] [encrypt] ') +
63
167
  'file: ' +
@@ -67,15 +171,42 @@ class Encrypt {
67
171
  console.log(tips);
68
172
  if (encryptType === 'strict') {
69
173
  this.generateJSConfuseFile(curPath);
70
- this.generateBytecodeFile(curPath);
174
+ await this.generateBytecodeFile(curPath);
71
175
  }
72
176
  else if (encryptType === 'bytecode') {
73
- this.generateBytecodeFile(curPath);
177
+ await this.generateBytecodeFile(curPath);
74
178
  }
75
179
  else if (encryptType === 'confusion') {
76
180
  this.generateJSConfuseFile(curPath);
77
181
  }
78
182
  }
183
+ async generateEntryLoader(curPath) {
184
+ const encryptType = this.type;
185
+ if (encryptType === 'strict') {
186
+ this.generateJSConfuseFile(curPath);
187
+ await this.generateBytecodeFile(curPath, false);
188
+ }
189
+ else if (encryptType === 'bytecode') {
190
+ await this.generateBytecodeFile(curPath, false);
191
+ }
192
+ else {
193
+ await this.generate(curPath);
194
+ return;
195
+ }
196
+ const jscName = path_1.default.basename(curPath, path_1.default.extname(curPath)) + '.jsc';
197
+ const loaderCode = [
198
+ "require('bytenode');",
199
+ `require('./${jscName}');`,
200
+ '',
201
+ ].join('\n');
202
+ fs_1.default.writeFileSync(curPath, loaderCode, 'utf8');
203
+ }
204
+ /**
205
+ * Obfuscate a single JS file (in-place write-back)
206
+ *
207
+ * Default options are merged with user config via Object.assign:
208
+ * User config overrides defaults; unset fields use defaults (compact=true, stringArray=true, etc.)
209
+ */
79
210
  generateJSConfuseFile(file) {
80
211
  const opt = Object.assign({
81
212
  compact: true,
@@ -83,10 +214,20 @@ class Encrypt {
83
214
  stringArrayThreshold: 1,
84
215
  }, this.cOpt);
85
216
  const code = fs_1.default.readFileSync(file, 'utf8');
86
- const result = javascript_obfuscator_1.default.obfuscate(code, opt);
217
+ const result = withSuppressedObfuscatorAd(this.silent, () => javascript_obfuscator_1.default.obfuscate(code, opt));
218
+ // Write obfuscated result back to the original file (in-place replacement)
87
219
  fs_1.default.writeFileSync(file, result.getObfuscatedCode(), 'utf8');
88
220
  }
89
- generateBytecodeFile(curPath) {
221
+ /**
222
+ * Compile a single JS file to V8 bytecode (.jsc)
223
+ *
224
+ * Safety mechanism:
225
+ * 1. Only process .js files (skip .json and other extensions)
226
+ * 2. After compilation, verify the .jsc file exists before deleting the source .js file
227
+ * 3. If .jsc was not generated, throw an error and keep the source file (prevents code loss from failed compilation)
228
+ * 4. Use fs.unlinkSync to delete a single file instead of fs.rmSync (avoids recursive delete risk)
229
+ */
230
+ async generateBytecodeFile(curPath, deleteSource = true) {
90
231
  if (path_1.default.extname(curPath) !== '.js') {
91
232
  return;
92
233
  }
@@ -96,20 +237,40 @@ class Encrypt {
96
237
  output: jscFile,
97
238
  electron: true,
98
239
  }, this.bOpt);
99
- bytenode_1.default.compileFile(opt);
100
- fs_1.default.rmSync(curPath, { recursive: true, force: true });
240
+ await bytenode_1.default.compileFile(opt);
241
+ // Verify .jsc output exists before deleting source file
242
+ if (fs_1.default.existsSync(jscFile)) {
243
+ if (deleteSource)
244
+ fs_1.default.unlinkSync(curPath);
245
+ }
246
+ else {
247
+ throw new Error(`[ee-bin] [encrypt] Bytecode compilation failed: ${jscFile} was not created, keeping source ${curPath}`);
248
+ }
101
249
  }
102
250
  }
103
- function encrypt(options = {}) {
104
- const electronOpt = (0, extend_js_1.extend)(true, { target: 'electron' }, options);
251
+ /**
252
+ * Encryption entry function processes both electron and frontend targets
253
+ *
254
+ * Creates separate Encrypt instances for electron and frontend.
255
+ * Each instance independently determines whether to encrypt and which method to use,
256
+ * based on its own configuration.
257
+ */
258
+ async function encrypt(options = {}) {
259
+ const electronOpt = { ...options, target: 'electron' };
105
260
  const electronEpt = new Encrypt(electronOpt);
106
- electronEpt.encrypt();
107
- const frontendOpt = (0, extend_js_1.extend)(true, { target: 'frontend' }, options);
261
+ await electronEpt.encrypt();
262
+ const frontendOpt = { ...options, target: 'frontend' };
108
263
  const frontendEpt = new Encrypt(frontendOpt);
109
- frontendEpt.encrypt();
264
+ await frontendEpt.encrypt();
110
265
  }
266
+ /**
267
+ * Clean encrypted output — delete encryption artifacts from specified directories
268
+ *
269
+ * @param options.dir - Directory path(s) to clean (defaults to './public/electron').
270
+ * Accepts a string or string array for multiple directories.
271
+ */
111
272
  function cleanEncrypt(options = {}) {
112
- const dirs = options.dir !== undefined ? (helpers_js_1.is.array(options.dir) ? options.dir : [options.dir]) : ['./public/electron'];
273
+ const dirs = options.dir !== undefined ? (0, utils_js_1.toArray)(options.dir) : ['./public/electron'];
113
274
  for (const dir of dirs) {
114
275
  const tmpFile = path_1.default.join(process.cwd(), dir);
115
276
  if (fs_1.default.existsSync(tmpFile)) {
@@ -1 +1 @@
1
- {"version":3,"file":"encrypt.js","sourceRoot":"","sources":["../../../src/tools/encrypt.ts"],"names":[],"mappings":";;;;;AA6IA,0BAgBC;AAED,oCAYC;AA3KD,gDAAwB;AACxB,4CAAoB;AACpB,kDAA8C;AAC9C,wDAAgC;AAChC,kFAAyD;AACzD,oDAA4B;AAC5B,8CAA6C;AAC7C,gDAA0C;AAE1C,MAAM,YAAY,GAAG,CAAC,UAAU,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;AAkBzD,MAAM,OAAO;IAaX,YAAY,UAA0B,EAAE;QACtC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QACxC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,UAAU,CAAC;QAEnC,MAAM,IAAI,GAAG,CAAC,IAAA,qBAAU,EAAC,MAAM,CAAC,CAAC,OAAO,IAAI,EAAE,CAAkC,CAAC;QACjF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAK,EAAoB,CAAC;QACzD,MAAM,YAAY,GAAG,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC;QAC3D,IAAI,CAAC,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACzD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC;QACvC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,IAAI,EAAE,CAAC;QAC/C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC;QAC1C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC;QAEjD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;IACzC,CAAC;IAED,cAAc;QACZ,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,SAAS,CAAC;QAErC,MAAM,KAAK,GAAG,gBAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACjE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO;QACL,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO;QAC9C,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;YAAE,OAAO;QAE/F,OAAO,CAAC,GAAG,CAAC,kBAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,mBAAmB,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAClF,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAE5B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAClD,IAAI,CAAC,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE;gBAAE,SAAS;YAE9C,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;gBACrC,SAAS;YACX,CAAC;YAED,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,kBAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,eAAe,CAAC,CAAC;IACnE,CAAC;IAED,QAAQ,CAAC,OAAe,EAAE,IAAa;QACrC,MAAM,WAAW,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;QAEtC,MAAM,IAAI,GACR,kBAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC;YACjC,QAAQ;YACR,kBAAK,CAAC,KAAK,CAAC,GAAG,OAAO,EAAE,CAAC;YACzB,GAAG;YACH,kBAAK,CAAC,IAAI,CAAC,IAAI,WAAW,GAAG,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;YACpC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;aAAM,IAAI,WAAW,KAAK,UAAU,EAAE,CAAC;YACtC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;aAAM,IAAI,WAAW,KAAK,WAAW,EAAE,CAAC;YACvC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,qBAAqB,CAAC,IAAY;QAChC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CACvB;YACE,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,IAAI;YACjB,oBAAoB,EAAE,CAAC;SACxB,EACD,IAAI,CAAC,IAAI,CACV,CAAC;QAEF,MAAM,IAAI,GAAG,YAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,+BAAoB,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACzD,YAAE,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,iBAAiB,EAAE,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC;IAED,oBAAoB,CAAC,OAAe;QAClC,IAAI,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,KAAK,EAAE,CAAC;YACpC,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,OAAO,GAAG,GAAG,CAAC;QAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CACvB;YACE,QAAQ,EAAE,OAAO;YACjB,MAAM,EAAE,OAAO;YACf,QAAQ,EAAE,IAAI;SACf,EACD,IAAI,CAAC,IAAI,CACV,CAAC;QAEF,kBAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC1B,YAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;CACF;AAED,SAAgB,OAAO,CAAC,UAA0B,EAAE;IAClD,MAAM,WAAW,GAAG,IAAA,kBAAM,EACxB,IAAI,EACJ,EAAE,MAAM,EAAE,UAAU,EAAE,EACtB,OAAkC,CACR,CAAC;IAC7B,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,WAA6B,CAAC,CAAC;IAC/D,WAAW,CAAC,OAAO,EAAE,CAAC;IAEtB,MAAM,WAAW,GAAG,IAAA,kBAAM,EACxB,IAAI,EACJ,EAAE,MAAM,EAAE,UAAU,EAAE,EACtB,OAAkC,CACR,CAAC;IAC7B,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,WAA6B,CAAC,CAAC;IAC/D,WAAW,CAAC,OAAO,EAAE,CAAC;AACxB,CAAC;AAED,SAAgB,YAAY,CAAC,UAAuC,EAAE;IACpE,MAAM,IAAI,GAAa,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,eAAE,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,OAAO,CAAC,GAAgB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;IAEzJ,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;QAC9C,IAAI,YAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,YAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACrD,OAAO,CAAC,GAAG,CACT,kBAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,sBAAsB,GAAG,kBAAK,CAAC,OAAO,CAAC,GAAG,OAAO,EAAE,CAAC,CACzF,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"encrypt.js","sourceRoot":"","sources":["../../../src/tools/encrypt.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,25 @@
1
1
  "use strict";
2
+ /**
3
+ * Application Icon Generator — produces platform-specific icons from a source image
4
+ *
5
+ * This module generates all required icon formats for Electron applications:
6
+ * - .ico files for Windows (installer + taskbar)
7
+ * - .png files at various sizes for Linux, tray icons, and window icons
8
+ * - Renamed/copyed icons following electron-egg naming conventions
9
+ *
10
+ * Icon generation flow:
11
+ * 1. Load optional "icon-gen" dependency (graceful error if not installed)
12
+ * 2. Validate input image exists and prepare output directory
13
+ * 3. Generate icons via icon-gen library (ico + favicon/png sizes)
14
+ * 4. Post-process: rename and copy icons to match the framework's expected paths:
15
+ * - 16px → copied to public/images/ as "tray.png" (system tray icon)
16
+ * - 32px → copied to public/images/ with original name (window icon)
17
+ * - Other sizes → renamed to "NxN.png" format in build/icons/
18
+ *
19
+ * Dependencies:
20
+ * - icon-gen: Optional npm package for icon generation. If not installed,
21
+ * a helpful message is displayed with install instructions.
22
+ */
2
23
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
24
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
25
  };
@@ -6,6 +27,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
27
  exports.run = run;
7
28
  const fs_1 = __importDefault(require("fs"));
8
29
  const path_1 = __importDefault(require("path"));
30
+ const helpers_js_1 = require("../lib/helpers.js");
31
+ /** Default parameter values when no CLI options are provided */
9
32
  const DEFAULT_PARAMS = {
10
33
  input: '/public/images/logo.png',
11
34
  output: '/build/icons/',
@@ -14,27 +37,27 @@ const DEFAULT_PARAMS = {
14
37
  imagesDir: '/public/images/',
15
38
  };
16
39
  class IconGen {
17
- constructor(opts = {}) {
18
- const params = {
19
- input: opts.input || DEFAULT_PARAMS.input,
20
- output: opts.output || DEFAULT_PARAMS.output,
21
- size: opts.size || DEFAULT_PARAMS.size,
22
- clear: opts.clear === true,
23
- imagesDir: opts.images || DEFAULT_PARAMS.imagesDir,
24
- };
40
+ constructor(params) {
25
41
  this.params = params;
42
+ // Attempt to load icon-gen as an optional dependency.
43
+ // If not installed, set to null and provide a helpful message later.
44
+ // If installed but fails to load (e.g. native module error), log the real error.
26
45
  try {
27
46
  // eslint-disable-next-line @typescript-eslint/no-require-imports -- optional dependency lazy load
28
47
  const mod = require('icon-gen');
29
48
  this.icongen = typeof mod.default === 'function' ? mod.default : mod;
30
49
  }
31
- catch {
50
+ catch (e) {
32
51
  this.icongen = null;
52
+ if (e instanceof Error && !e.message.includes("Cannot find module")) {
53
+ console.log(helpers_js_1.chalk.yellow('[ee-bin] [icon-gen] ') + `icon-gen failed to load: ${e.message}`);
54
+ }
33
55
  }
34
- console.log('[ee-bin] [icon-gen] icon 当前路径: ', process.cwd());
56
+ console.log('[ee-bin] [icon-gen] Current working directory: ', process.cwd());
35
57
  this.input = path_1.default.join(process.cwd(), params.input);
36
58
  this.output = path_1.default.join(process.cwd(), params.output);
37
59
  this.imagesDir = path_1.default.join(process.cwd(), params.imagesDir);
60
+ // Parse comma-separated size string into integer array for icon-gen
38
61
  const sizeList = params.size.split(',').map((item) => parseInt(item, 10));
39
62
  this.iconOptions = {
40
63
  report: false,
@@ -48,39 +71,63 @@ class IconGen {
48
71
  },
49
72
  };
50
73
  }
51
- generateIcons() {
74
+ /**
75
+ * Generate all icon files from the source image
76
+ *
77
+ * Steps:
78
+ * 1. Check icon-gen is available; if not, show install instructions
79
+ * 2. Validate input image exists
80
+ * 3. Prepare output directory (create if missing, optionally clear)
81
+ * 4. Run icon-gen to produce ico + png files
82
+ * 5. Post-process: rename and copy icons to framework-expected paths
83
+ */
84
+ async generateIcons() {
52
85
  if (!this.icongen) {
53
86
  console.log('[ee-bin] [icon-gen] icon-gen is not installed.');
54
87
  console.log('[ee-bin] [icon-gen] Please run: pnpm add icon-gen');
55
88
  return;
56
89
  }
57
- console.log('[ee-bin] [icon-gen] iconGen 开始处理生成logo图片');
90
+ console.log('[ee-bin] [icon-gen] Start generating logo images');
91
+ // Validate that the source image file exists
58
92
  if (!fs_1.default.existsSync(this.input)) {
59
- console.error('[ee-bin] [icon-gen] input: ', this.input);
60
- throw new Error('输入的图片不存在或路径错误');
93
+ console.error('[ee-bin] [icon-gen] Input: ', this.input);
94
+ throw new Error('Input image does not exist or path is invalid: ' + this.input);
61
95
  }
96
+ // Ensure output directory exists
62
97
  if (!fs_1.default.existsSync(this.output)) {
63
98
  fs_1.default.mkdirSync(this.output, { recursive: true });
64
99
  }
65
100
  else {
101
+ // Optionally clear existing icons before generating new ones
66
102
  if (this.params.clear) {
67
103
  this.deleteGenFile(this.output);
68
104
  }
69
105
  }
106
+ // Ensure images directory exists (for tray/window icon copies)
70
107
  if (!fs_1.default.existsSync(this.imagesDir)) {
71
108
  fs_1.default.mkdirSync(this.imagesDir, { recursive: true });
72
109
  }
73
- this.icongen(this.input, this.output, this.iconOptions)
74
- .then((results) => {
75
- console.log('[ee-bin] [icon-gen] iconGen 已生成下方图片资源');
110
+ try {
111
+ const results = await this.icongen(this.input, this.output, this.iconOptions);
112
+ console.log('[ee-bin] [icon-gen] Generated image resources:');
76
113
  console.log(results);
114
+ // Rename/copy icons to match electron-egg naming conventions
77
115
  this._renameForEE(results);
78
- })
79
- .catch((err) => {
116
+ }
117
+ catch (err) {
80
118
  console.error(err);
81
- throw new Error('[ee-bin] [icon-gen] iconGen 生成失败!');
82
- });
119
+ throw new Error('[ee-bin] [icon-gen] Image generation failed!');
120
+ }
83
121
  }
122
+ /**
123
+ * Delete generated icon files (.ico, .png) from a directory recursively
124
+ *
125
+ * Only removes files with .ico or .png extensions; leaves other files and
126
+ * empty directories intact. This is used when --clear flag is set to start
127
+ * with a clean output directory.
128
+ *
129
+ * @param dirPath - Directory to scan for icon files to delete
130
+ */
84
131
  deleteGenFile(dirPath) {
85
132
  if (fs_1.default.existsSync(dirPath)) {
86
133
  const files = fs_1.default.readdirSync(dirPath);
@@ -90,6 +137,7 @@ class IconGen {
90
137
  this.deleteGenFile(curPath);
91
138
  }
92
139
  else {
140
+ // Only delete icon files (.ico, .png), preserve other files
93
141
  if (['.ico', '.png'].includes(path_1.default.extname(curPath))) {
94
142
  fs_1.default.unlinkSync(curPath);
95
143
  }
@@ -97,44 +145,84 @@ class IconGen {
97
145
  }
98
146
  }
99
147
  }
148
+ /**
149
+ * Post-process generated icons — rename and copy to framework-expected paths
150
+ *
151
+ * electron-egg naming conventions:
152
+ * - 16px icon → copy to public/images/ as "tray.png" (system tray icon)
153
+ * - 32px icon → copy to public/images/ with original name (window icon)
154
+ * - Other sizes → rename to "NxN.png" format in build/icons/ (e.g. "64x64.png")
155
+ *
156
+ * The icon-gen library generates files with a "logo-" prefix (from favicon.name config),
157
+ * e.g. "logo-16.png", "logo-32.png", "logo-256.png". This method transforms those
158
+ * names into the framework's expected format.
159
+ *
160
+ * @param filesPath - Array of file paths generated by icon-gen
161
+ */
100
162
  _renameForEE(filesPath) {
101
- console.log('[ee-bin] [icon-gen] iconGen 开始重新命名logo图片资源');
163
+ console.log('[ee-bin] [icon-gen] Start renaming logo image resources');
102
164
  try {
103
165
  for (const filePath of filesPath) {
104
166
  const extname = path_1.default.extname(filePath);
105
167
  if (['.png'].includes(extname)) {
106
168
  const filename = path_1.default.basename(filePath, extname);
169
+ // Extract the size number from the filename (e.g. "logo-16" → "16")
107
170
  const basename = filename.split('-')[1];
108
171
  const dirname = path_1.default.dirname(filePath);
109
172
  if (basename === '16') {
173
+ // 16px icon → tray icon (used in system tray / notification area)
110
174
  const newName = 'tray' + extname;
111
175
  fs_1.default.copyFileSync(filePath, path_1.default.join(this.imagesDir, newName));
112
- console.log(`${filename}${extname} --> ${this.params.imagesDir}/${newName} 复制成功!`);
176
+ console.log(`${filename}${extname} --> ${this.params.imagesDir}/${newName} copied successfully!`);
113
177
  fs_1.default.unlinkSync(filePath);
114
178
  continue;
115
179
  }
116
180
  if (basename === '32') {
181
+ // 32px icon → window icon (used for the app window title bar)
117
182
  const newName = filename + extname;
118
183
  fs_1.default.copyFileSync(filePath, path_1.default.join(this.imagesDir, newName));
119
- console.log(`${filename}${extname} --> ${this.params.imagesDir}/${newName} 复制成功!`);
184
+ console.log(`${filename}${extname} --> ${this.params.imagesDir}/${newName} copied successfully!`);
120
185
  continue;
121
186
  }
187
+ // Other sizes → rename to "NxN.png" format (e.g. 64x64.png, 256x256.png)
188
+ // This is the standard naming convention for Electron icon sets
122
189
  const newName = basename + 'x' + basename + extname;
123
190
  const newPath = path_1.default.join(dirname, newName);
124
191
  fs_1.default.renameSync(filePath, newPath);
125
- console.log(`${filename}${extname} --> ${newName} 重命名成功!`);
192
+ console.log(`${filename}${extname} --> ${newName} renamed successfully!`);
126
193
  }
127
194
  }
128
- console.log('[ee-bin] [icon-gen] iconGen 资源处理完成!');
195
+ console.log('[ee-bin] [icon-gen] Image resource processing completed!');
129
196
  }
130
197
  catch (e) {
131
198
  console.error('[ee-bin] [icon-gen] ERROR: ', e);
132
- throw new Error('重命名logo图片资源失败!!');
199
+ throw new Error('Renaming logo image resources failed!');
133
200
  }
134
201
  }
135
202
  }
136
- function run(opts) {
137
- const i = new IconGen(opts || {});
138
- i.generateIcons();
203
+ /**
204
+ * Extract IconGenParams from CLI options, applying defaults for missing values
205
+ *
206
+ * @param opts - Raw CLI options object from Commander
207
+ * @returns Fully resolved IconGenParams with defaults applied
208
+ */
209
+ function extractParams(opts) {
210
+ return {
211
+ input: opts.input || DEFAULT_PARAMS.input,
212
+ output: opts.output || DEFAULT_PARAMS.output,
213
+ size: opts.size || DEFAULT_PARAMS.size,
214
+ clear: opts.clear === true,
215
+ imagesDir: opts.images || DEFAULT_PARAMS.imagesDir,
216
+ };
217
+ }
218
+ /**
219
+ * Icon generation entry function
220
+ *
221
+ * @param opts - CLI options (input, output, size, clear, images)
222
+ */
223
+ async function run(opts) {
224
+ const params = extractParams(opts || {});
225
+ const i = new IconGen(params);
226
+ await i.generateIcons();
139
227
  }
140
228
  //# sourceMappingURL=iconGen.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"iconGen.js","sourceRoot":"","sources":["../../../src/tools/iconGen.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"iconGen.js","sourceRoot":"","sources":["../../../src/tools/iconGen.ts"],"names":[],"mappings":"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"}