ee-core 5.0.0 → 5.0.2

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.
@@ -54,6 +54,6 @@ export declare function getLoggers(): PinoLoggers;
54
54
  export declare const logger: EeLogger;
55
55
  /** Framework core log instance (Proxy wrapped) */
56
56
  export declare const coreLogger: EeLogger;
57
- /** Error log instance (Proxy wrapped, error/fatal level only) */
57
+ /** Error log instance (Proxy wrapped, error/fatal level only; sole writer of ee-error.log) */
58
58
  export declare const errorLogger: EeLogger;
59
59
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/log/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,WAAW,EAAU,MAAM,aAAa,CAAC;AAElD;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChC,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChC,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC/B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC/B,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChC,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;CAC1C;AAKD;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,CAEvE;AAED;;;;GAIG;AACH,wBAAgB,OAAO,IAAI,IAAI,CAE9B;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,IAAI,WAAW,CAGxC;AAgFD,+CAA+C;AAC/C,eAAO,MAAM,MAAM,EAAE,QAA0D,CAAC;AAChF,kDAAkD;AAClD,eAAO,MAAM,UAAU,EAAE,QAA8D,CAAC;AACxF,iEAAiE;AACjE,eAAO,MAAM,WAAW,EAAE,QAA+D,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/log/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,WAAW,EAAU,MAAM,aAAa,CAAC;AAElD;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChC,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChC,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC/B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC/B,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChC,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;CAC1C;AAKD;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,CAEvE;AAED;;;;GAIG;AACH,wBAAgB,OAAO,IAAI,IAAI,CAE9B;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,IAAI,WAAW,CAGxC;AA4GD,+CAA+C;AAC/C,eAAO,MAAM,MAAM,EAAE,QAAiE,CAAC;AACvF,kDAAkD;AAClD,eAAO,MAAM,UAAU,EAAE,QAAsE,CAAC;AAChG,8FAA8F;AAC9F,eAAO,MAAM,WAAW,EAAE,QAA+D,CAAC"}
@@ -78,46 +78,71 @@ function formatArg(a) {
78
78
  * @param getter - Deferred function to get pino.Logger instance
79
79
  * @returns EeLogger proxy object
80
80
  */
81
- function createLoggerProxy(getter) {
81
+ /** Log levels that are aggregated into errorLogger (ee-error.log) */
82
+ const ERROR_LEVELS = new Set(['error', 'fatal']);
83
+ /**
84
+ * Invoke a single pino method, normalizing the multiple supported calling styles.
85
+ *
86
+ * Shared by the direct write and the error/fatal aggregation forward so both
87
+ * paths interpret arguments identically.
88
+ */
89
+ function applyLog(l, prop, args) {
90
+ const method = l[prop];
91
+ if (!method)
92
+ return;
93
+ // Single argument, call directly
94
+ if (args.length <= 1) {
95
+ method.call(l, ...args);
96
+ return;
97
+ }
98
+ const first = args[0];
99
+ // pino standard: first argument is a plain object → (mergeObj, msg, ...args)
100
+ if (typeof first === 'object' && first !== null && !(first instanceof Error)) {
101
+ method.call(l, ...args);
102
+ return;
103
+ }
104
+ // pino printf: first argument contains %s/%d formatting → keep as-is
105
+ if (typeof first === 'string' && /%[sdijo]/.test(first)) {
106
+ method.call(l, ...args);
107
+ return;
108
+ }
109
+ // Concatenation mode: logger.info('msg:', value) → 'msg: value'
110
+ method.call(l, args.map(formatArg).join(' '));
111
+ }
112
+ /**
113
+ * Create log proxy object
114
+ *
115
+ * @param getter - Deferred function to get pino.Logger instance
116
+ * @param source - Origin tag ('app' / 'core'); when set, error/fatal records are
117
+ * additionally aggregated into errorLogger (ee-error.log) with a `from` binding.
118
+ * errorLogger itself passes no source, so it never forwards to avoid double writes.
119
+ * @returns EeLogger proxy object
120
+ */
121
+ function createLoggerProxy(getter, source) {
82
122
  return new Proxy({}, {
83
123
  get(_target, prop) {
84
- // child() returns sub-logger proxy
124
+ // child() returns sub-logger proxy (preserves source so children still aggregate)
85
125
  if (prop === 'child') {
86
- return (bindings) => createLoggerProxy(() => getter().child(bindings));
126
+ return (bindings) => createLoggerProxy(() => getter().child(bindings), source);
87
127
  }
88
128
  if (!LOG_METHODS.has(prop))
89
129
  return undefined;
90
130
  return (...args) => {
91
131
  const l = getter();
92
- const method = l[prop];
93
- if (!method)
94
- return;
95
- // Single argument, call directly
96
- if (args.length <= 1) {
97
- method.call(l, ...args);
98
- return;
99
- }
100
- const first = args[0];
101
- // pino standard: first argument is a plain object → (mergeObj, msg, ...args)
102
- if (typeof first === 'object' && first !== null && !(first instanceof Error)) {
103
- method.call(l, ...args);
104
- return;
105
- }
106
- // pino printf: first argument contains %s/%d formatting → keep as-is
107
- if (typeof first === 'string' && /%[sdijo]/.test(first)) {
108
- method.call(l, ...args);
109
- return;
132
+ applyLog(l, prop, args);
133
+ // Aggregate error/fatal into ee-error.log (single writer = errorLogger).
134
+ // Skipped for errorLogger itself (source undefined) to prevent double writes.
135
+ if (source && ERROR_LEVELS.has(prop)) {
136
+ applyLog(_getLoggerBy('errorLogger').child({ from: source }), prop, args);
110
137
  }
111
- // Concatenation mode: logger.info('msg:', value) → 'msg: value'
112
- method.call(l, args.map(formatArg).join(' '));
113
138
  };
114
139
  },
115
140
  });
116
141
  }
117
142
  /** Application log instance (Proxy wrapped) */
118
- exports.logger = createLoggerProxy(() => _getLoggerBy('logger'));
143
+ exports.logger = createLoggerProxy(() => _getLoggerBy('logger'), 'app');
119
144
  /** Framework core log instance (Proxy wrapped) */
120
- exports.coreLogger = createLoggerProxy(() => _getLoggerBy('coreLogger'));
121
- /** Error log instance (Proxy wrapped, error/fatal level only) */
145
+ exports.coreLogger = createLoggerProxy(() => _getLoggerBy('coreLogger'), 'core');
146
+ /** Error log instance (Proxy wrapped, error/fatal level only; sole writer of ee-error.log) */
122
147
  exports.errorLogger = createLoggerProxy(() => _getLoggerBy('errorLogger'));
123
148
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/log/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/log/index.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,17 @@
1
+ /**
2
+ * @module storage
3
+ * @description Data storage module entry point. Provides SqliteStorage for SQLite database operations.
4
+ *
5
+ * SqliteStorage class is exported statically — loading this module only imports built-in
6
+ * Node.js modules (assert, fs, path), NOT better-sqlite3. The native better-sqlite3 binding
7
+ * is only loaded when `SqliteStorage.init()` is called, via dynamic import().
8
+ *
9
+ * Usage:
10
+ * ```ts
11
+ * import { SqliteStorage } from 'ee-core/storage';
12
+ * const db = new SqliteStorage('myapp.db');
13
+ * await db.init(); // ← here better-sqlite3 is actually loaded
14
+ * ```
15
+ */
1
16
  export { SqliteStorage } from './sqliteStorage.js';
2
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/storage/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/storage/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
@@ -1,6 +1,21 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SqliteStorage = void 0;
4
+ /**
5
+ * @module storage
6
+ * @description Data storage module entry point. Provides SqliteStorage for SQLite database operations.
7
+ *
8
+ * SqliteStorage class is exported statically — loading this module only imports built-in
9
+ * Node.js modules (assert, fs, path), NOT better-sqlite3. The native better-sqlite3 binding
10
+ * is only loaded when `SqliteStorage.init()` is called, via dynamic import().
11
+ *
12
+ * Usage:
13
+ * ```ts
14
+ * import { SqliteStorage } from 'ee-core/storage';
15
+ * const db = new SqliteStorage('myapp.db');
16
+ * await db.init(); // ← here better-sqlite3 is actually loaded
17
+ * ```
18
+ */
4
19
  var sqliteStorage_js_1 = require("./sqliteStorage.js");
5
20
  Object.defineProperty(exports, "SqliteStorage", { enumerable: true, get: function () { return sqliteStorage_js_1.SqliteStorage; } });
6
21
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/storage/index.ts"],"names":[],"mappings":";;;AAAA,uDAAmD;AAA1C,iHAAA,aAAa,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/storage/index.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;GAcG;AACH,uDAAmD;AAA1C,iHAAA,aAAa,OAAA"}
@@ -1,4 +1,4 @@
1
- import Database from 'better-sqlite3';
1
+ import type Database from 'better-sqlite3';
2
2
  /**
3
3
  * SqliteStorage - SQLite database storage class
4
4
  *
@@ -15,6 +15,12 @@ import Database from 'better-sqlite3';
15
15
  * Security:
16
16
  * The constructor validates the database name for path traversal, disallowing ".." in the name
17
17
  * to prevent malicious input from accessing files outside the intended directory.
18
+ *
19
+ * Lazy loading:
20
+ * better-sqlite3 is a native module that requires electron-rebuild for Electron.
21
+ * The constructor only computes paths (synchronous). The `init()` method lazily imports
22
+ * better-sqlite3 and opens the database connection. Projects that don't use SQLite
23
+ * never load the native binding.
18
24
  */
19
25
  export declare class SqliteStorage {
20
26
  /** Database name (original input value) */
@@ -25,42 +31,36 @@ export declare class SqliteStorage {
25
31
  dbDir: string;
26
32
  /** Database filename (only the filename part, excluding directory) */
27
33
  fileName: string;
28
- /** better-sqlite3 database instance */
34
+ /** better-sqlite3 database instance (set after init()) */
29
35
  db: Database.Database;
30
36
  /**
31
- * Create a SqliteStorage instance
37
+ * Create a SqliteStorage instance (path computation only, DB not yet opened)
32
38
  *
33
- * Initialization flow:
34
- * 1. Validate that the name is non-empty and does not contain path traversal characters ".."
35
- * 2. Infer storage mode from the name (getMode)
36
- * 3. Create the database file directory (_createDatabaseDir)
37
- * 4. Extract the filename part (_formatFileName)
38
- * 5. Open the database connection (_initDB)
39
+ * The constructor only validates the name, infers the storage mode, computes paths,
40
+ * and creates the database directory. It does NOT open the database connection
41
+ * call `init()` to lazily load better-sqlite3 and open the DB.
39
42
  *
40
43
  * @param name - Database name or path. Supports the following formats:
41
44
  * - ":memory:" - In-memory database
42
45
  * - "app.db" - Filename only, stored under {dataDir}/db/
43
46
  * - "sub/app.db" - Relative path, relative to {dataDir}/db/
44
47
  * - "/tmp/app.db" - Absolute path
45
- * @param opt - better-sqlite3 database options, defaults merged with timeout: 5000
46
48
  * @throws Asserts error if name is empty or contains ".." path traversal characters
47
49
  */
48
- constructor(name: string, opt?: Record<string, unknown>);
50
+ constructor(name: string);
49
51
  /**
50
52
  * Initialize the database connection
51
53
  *
52
- * Determines the database path based on storage mode:
53
- * - memory mode: Uses ":memory:" as the path, better-sqlite3 creates the database in memory
54
- * - file mode: Uses getFilePath() to get the full database file path
54
+ * Lazily imports better-sqlite3 via dynamic import() and opens the database.
55
+ * This is the only point where the native .node binding is loaded.
55
56
  *
56
- * In file mode, additionally validates that the database file was created successfully.
57
- * If the file does not exist, throws an assertion error (possibly due to insufficient directory permissions, etc.).
57
+ * Must be called after construction before using `this.db`.
58
58
  *
59
59
  * @param opt - better-sqlite3 database options, defaults merged with { timeout: 5000 }
60
- * @returns better-sqlite3 Database instance
60
+ * @returns this SqliteStorage instance (for chaining: `const db = await new SqliteStorage('app.db').init()`)
61
61
  * @throws Asserts error if the database file was not created successfully in file mode
62
62
  */
63
- _initDB(opt?: Record<string, unknown>): Database.Database;
63
+ init(opt?: Record<string, unknown>): Promise<this>;
64
64
  /**
65
65
  * Extract the database filename
66
66
  *
@@ -1 +1 @@
1
- {"version":3,"file":"sqliteStorage.d.ts","sourceRoot":"","sources":["../../../src/storage/sqliteStorage.ts"],"names":[],"mappings":"AA6BA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAItC;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,aAAa;IACxB,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IAEb,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IAEb,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;IAEd,sEAAsE;IACtE,QAAQ,EAAE,MAAM,CAAC;IAEjB,uCAAuC;IACvC,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IAEtB;;;;;;;;;;;;;;;;;OAiBG;gBACS,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAY3D;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,QAAQ,CAAC,QAAQ;IAmB7D;;;;;;;;OAQG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAOrC;;;;;;;;;;;OAWG;IACH,kBAAkB,IAAI,MAAM;IAc5B;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAe7B;;;;OAIG;IACH,QAAQ,IAAI,MAAM;IAIlB;;;;;;;OAOG;IACH,WAAW,IAAI,MAAM;CAGtB"}
1
+ {"version":3,"file":"sqliteStorage.d.ts","sourceRoot":"","sources":["../../../src/storage/sqliteStorage.ts"],"names":[],"mappings":"AA2CA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,aAAa;IACxB,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IAEb,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IAEb,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;IAEd,sEAAsE;IACtE,QAAQ,EAAE,MAAM,CAAC;IAEjB,0DAA0D;IAC1D,EAAE,EAAG,QAAQ,CAAC,QAAQ,CAAC;IAEvB;;;;;;;;;;;;;OAaG;gBACS,IAAI,EAAE,MAAM;IAWxB;;;;;;;;;;;OAWG;IACG,IAAI,CAAC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB5D;;;;;;;;OAQG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAOrC;;;;;;;;;;;OAWG;IACH,kBAAkB,IAAI,MAAM;IAc5B;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAe7B;;;;OAIG;IACH,QAAQ,IAAI,MAAM;IAIlB;;;;;;;OAOG;IACH,WAAW,IAAI,MAAM;CAGtB"}
@@ -1,4 +1,37 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
37
  };
@@ -15,25 +48,32 @@ exports.SqliteStorage = void 0;
15
48
  * - Prevent path traversal attacks (validates that ".." is not present in the name during construction)
16
49
  * - Provide a unified interface for obtaining database file paths
17
50
  *
51
+ * better-sqlite3 is lazily imported — only loaded when `init()` is called to open the database.
52
+ * This avoids loading the native .node binding at module import time, which would happen unconditionally
53
+ * even if the consumer never uses SQLite.
54
+ *
18
55
  * Usage examples:
19
56
  * ```ts
20
57
  * // Name-only mode: file stored at {dataDir}/db/{name}.db
21
58
  * const db1 = new SqliteStorage('myapp.db');
59
+ * await db1.init();
22
60
  *
23
61
  * // Relative path mode: file stored at {dataDir}/db/sub/myapp.db
24
62
  * const db2 = new SqliteStorage('sub/myapp.db');
63
+ * await db2.init();
25
64
  *
26
65
  * // Absolute path mode: file stored at the specified path
27
66
  * const db3 = new SqliteStorage('/tmp/data/myapp.db');
67
+ * await db3.init();
28
68
  *
29
69
  * // In-memory mode: not persisted, data is lost when the process exits
30
70
  * const db4 = new SqliteStorage(':memory:');
71
+ * await db4.init();
31
72
  * ```
32
73
  */
33
74
  const assert_1 = __importDefault(require("assert"));
34
75
  const fs_1 = __importDefault(require("fs"));
35
76
  const path_1 = __importDefault(require("path"));
36
- const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
37
77
  const helper_js_1 = require("../utils/helper.js");
38
78
  const index_js_1 = require("../ps/index.js");
39
79
  /**
@@ -52,27 +92,29 @@ const index_js_1 = require("../ps/index.js");
52
92
  * Security:
53
93
  * The constructor validates the database name for path traversal, disallowing ".." in the name
54
94
  * to prevent malicious input from accessing files outside the intended directory.
95
+ *
96
+ * Lazy loading:
97
+ * better-sqlite3 is a native module that requires electron-rebuild for Electron.
98
+ * The constructor only computes paths (synchronous). The `init()` method lazily imports
99
+ * better-sqlite3 and opens the database connection. Projects that don't use SQLite
100
+ * never load the native binding.
55
101
  */
56
102
  class SqliteStorage {
57
103
  /**
58
- * Create a SqliteStorage instance
104
+ * Create a SqliteStorage instance (path computation only, DB not yet opened)
59
105
  *
60
- * Initialization flow:
61
- * 1. Validate that the name is non-empty and does not contain path traversal characters ".."
62
- * 2. Infer storage mode from the name (getMode)
63
- * 3. Create the database file directory (_createDatabaseDir)
64
- * 4. Extract the filename part (_formatFileName)
65
- * 5. Open the database connection (_initDB)
106
+ * The constructor only validates the name, infers the storage mode, computes paths,
107
+ * and creates the database directory. It does NOT open the database connection
108
+ * call `init()` to lazily load better-sqlite3 and open the DB.
66
109
  *
67
110
  * @param name - Database name or path. Supports the following formats:
68
111
  * - ":memory:" - In-memory database
69
112
  * - "app.db" - Filename only, stored under {dataDir}/db/
70
113
  * - "sub/app.db" - Relative path, relative to {dataDir}/db/
71
114
  * - "/tmp/app.db" - Absolute path
72
- * @param opt - better-sqlite3 database options, defaults merged with timeout: 5000
73
115
  * @throws Asserts error if name is empty or contains ".." path traversal characters
74
116
  */
75
- constructor(name, opt = {}) {
117
+ constructor(name) {
76
118
  (0, assert_1.default)(name, `db name ${name} Cannot be empty`);
77
119
  // Prevent path traversal attacks: disallow ".." in the name to avoid directory backtracking
78
120
  (0, assert_1.default)(!name.includes('..'), `db name ${name} contains path traversal`);
@@ -80,35 +122,36 @@ class SqliteStorage {
80
122
  this.mode = this.getMode(name);
81
123
  this.dbDir = this._createDatabaseDir();
82
124
  this.fileName = this._formatFileName(name);
83
- this.db = this._initDB(opt);
84
125
  }
85
126
  /**
86
127
  * Initialize the database connection
87
128
  *
88
- * Determines the database path based on storage mode:
89
- * - memory mode: Uses ":memory:" as the path, better-sqlite3 creates the database in memory
90
- * - file mode: Uses getFilePath() to get the full database file path
129
+ * Lazily imports better-sqlite3 via dynamic import() and opens the database.
130
+ * This is the only point where the native .node binding is loaded.
91
131
  *
92
- * In file mode, additionally validates that the database file was created successfully.
93
- * If the file does not exist, throws an assertion error (possibly due to insufficient directory permissions, etc.).
132
+ * Must be called after construction before using `this.db`.
94
133
  *
95
134
  * @param opt - better-sqlite3 database options, defaults merged with { timeout: 5000 }
96
- * @returns better-sqlite3 Database instance
135
+ * @returns this SqliteStorage instance (for chaining: `const db = await new SqliteStorage('app.db').init()`)
97
136
  * @throws Asserts error if the database file was not created successfully in file mode
98
137
  */
99
- _initDB(opt = {}) {
138
+ async init(opt = {}) {
139
+ // Lazy import: better-sqlite3 is only loaded when actually needed.
140
+ // This avoids loading the native .node binding at module import time.
141
+ // better-sqlite3 is a CJS package; dynamic import() resolves it correctly.
142
+ const { default: Database } = await Promise.resolve().then(() => __importStar(require('better-sqlite3')));
100
143
  const options = Object.assign({ timeout: 5000 }, opt);
101
144
  // Storage type: db file, in-memory (:memory:)
102
145
  let dbPath = this.name;
103
146
  if (this.mode !== 'memory') {
104
147
  dbPath = this.getFilePath();
105
148
  }
106
- const db = new better_sqlite3_1.default(dbPath, options);
149
+ this.db = new Database(dbPath, options);
107
150
  // For file mode, check if the file was created successfully
108
151
  if (this.mode !== 'memory') {
109
152
  (0, assert_1.default)(fs_1.default.existsSync(dbPath), `error: db ${dbPath} not exists`);
110
153
  }
111
- return db;
154
+ return this;
112
155
  }
113
156
  /**
114
157
  * Extract the database filename
@@ -1 +1 @@
1
- {"version":3,"file":"sqliteStorage.js","sourceRoot":"","sources":["../../../src/storage/sqliteStorage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sqliteStorage.js","sourceRoot":"","sources":["../../../src/storage/sqliteStorage.ts"],"names":[],"mappings":"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"}
@@ -54,6 +54,6 @@ export declare function getLoggers(): PinoLoggers;
54
54
  export declare const logger: EeLogger;
55
55
  /** Framework core log instance (Proxy wrapped) */
56
56
  export declare const coreLogger: EeLogger;
57
- /** Error log instance (Proxy wrapped, error/fatal level only) */
57
+ /** Error log instance (Proxy wrapped, error/fatal level only; sole writer of ee-error.log) */
58
58
  export declare const errorLogger: EeLogger;
59
59
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/log/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,WAAW,EAAU,MAAM,aAAa,CAAC;AAElD;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChC,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChC,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC/B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC/B,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChC,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;CAC1C;AAKD;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,CAEvE;AAED;;;;GAIG;AACH,wBAAgB,OAAO,IAAI,IAAI,CAE9B;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,IAAI,WAAW,CAGxC;AAgFD,+CAA+C;AAC/C,eAAO,MAAM,MAAM,EAAE,QAA0D,CAAC;AAChF,kDAAkD;AAClD,eAAO,MAAM,UAAU,EAAE,QAA8D,CAAC;AACxF,iEAAiE;AACjE,eAAO,MAAM,WAAW,EAAE,QAA+D,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/log/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,WAAW,EAAU,MAAM,aAAa,CAAC;AAElD;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChC,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChC,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC/B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC/B,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChC,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;CAC1C;AAKD;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,CAEvE;AAED;;;;GAIG;AACH,wBAAgB,OAAO,IAAI,IAAI,CAE9B;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,IAAI,WAAW,CAGxC;AA4GD,+CAA+C;AAC/C,eAAO,MAAM,MAAM,EAAE,QAAiE,CAAC;AACvF,kDAAkD;AAClD,eAAO,MAAM,UAAU,EAAE,QAAsE,CAAC;AAChG,8FAA8F;AAC9F,eAAO,MAAM,WAAW,EAAE,QAA+D,CAAC"}
@@ -78,46 +78,71 @@ function formatArg(a) {
78
78
  * @param getter - Deferred function to get pino.Logger instance
79
79
  * @returns EeLogger proxy object
80
80
  */
81
- function createLoggerProxy(getter) {
81
+ /** Log levels that are aggregated into errorLogger (ee-error.log) */
82
+ const ERROR_LEVELS = new Set(['error', 'fatal']);
83
+ /**
84
+ * Invoke a single pino method, normalizing the multiple supported calling styles.
85
+ *
86
+ * Shared by the direct write and the error/fatal aggregation forward so both
87
+ * paths interpret arguments identically.
88
+ */
89
+ function applyLog(l, prop, args) {
90
+ const method = l[prop];
91
+ if (!method)
92
+ return;
93
+ // Single argument, call directly
94
+ if (args.length <= 1) {
95
+ method.call(l, ...args);
96
+ return;
97
+ }
98
+ const first = args[0];
99
+ // pino standard: first argument is a plain object → (mergeObj, msg, ...args)
100
+ if (typeof first === 'object' && first !== null && !(first instanceof Error)) {
101
+ method.call(l, ...args);
102
+ return;
103
+ }
104
+ // pino printf: first argument contains %s/%d formatting → keep as-is
105
+ if (typeof first === 'string' && /%[sdijo]/.test(first)) {
106
+ method.call(l, ...args);
107
+ return;
108
+ }
109
+ // Concatenation mode: logger.info('msg:', value) → 'msg: value'
110
+ method.call(l, args.map(formatArg).join(' '));
111
+ }
112
+ /**
113
+ * Create log proxy object
114
+ *
115
+ * @param getter - Deferred function to get pino.Logger instance
116
+ * @param source - Origin tag ('app' / 'core'); when set, error/fatal records are
117
+ * additionally aggregated into errorLogger (ee-error.log) with a `from` binding.
118
+ * errorLogger itself passes no source, so it never forwards to avoid double writes.
119
+ * @returns EeLogger proxy object
120
+ */
121
+ function createLoggerProxy(getter, source) {
82
122
  return new Proxy({}, {
83
123
  get(_target, prop) {
84
- // child() returns sub-logger proxy
124
+ // child() returns sub-logger proxy (preserves source so children still aggregate)
85
125
  if (prop === 'child') {
86
- return (bindings) => createLoggerProxy(() => getter().child(bindings));
126
+ return (bindings) => createLoggerProxy(() => getter().child(bindings), source);
87
127
  }
88
128
  if (!LOG_METHODS.has(prop))
89
129
  return undefined;
90
130
  return (...args) => {
91
131
  const l = getter();
92
- const method = l[prop];
93
- if (!method)
94
- return;
95
- // Single argument, call directly
96
- if (args.length <= 1) {
97
- method.call(l, ...args);
98
- return;
99
- }
100
- const first = args[0];
101
- // pino standard: first argument is a plain object → (mergeObj, msg, ...args)
102
- if (typeof first === 'object' && first !== null && !(first instanceof Error)) {
103
- method.call(l, ...args);
104
- return;
105
- }
106
- // pino printf: first argument contains %s/%d formatting → keep as-is
107
- if (typeof first === 'string' && /%[sdijo]/.test(first)) {
108
- method.call(l, ...args);
109
- return;
132
+ applyLog(l, prop, args);
133
+ // Aggregate error/fatal into ee-error.log (single writer = errorLogger).
134
+ // Skipped for errorLogger itself (source undefined) to prevent double writes.
135
+ if (source && ERROR_LEVELS.has(prop)) {
136
+ applyLog(_getLoggerBy('errorLogger').child({ from: source }), prop, args);
110
137
  }
111
- // Concatenation mode: logger.info('msg:', value) → 'msg: value'
112
- method.call(l, args.map(formatArg).join(' '));
113
138
  };
114
139
  },
115
140
  });
116
141
  }
117
142
  /** Application log instance (Proxy wrapped) */
118
- exports.logger = createLoggerProxy(() => _getLoggerBy('logger'));
143
+ exports.logger = createLoggerProxy(() => _getLoggerBy('logger'), 'app');
119
144
  /** Framework core log instance (Proxy wrapped) */
120
- exports.coreLogger = createLoggerProxy(() => _getLoggerBy('coreLogger'));
121
- /** Error log instance (Proxy wrapped, error/fatal level only) */
145
+ exports.coreLogger = createLoggerProxy(() => _getLoggerBy('coreLogger'), 'core');
146
+ /** Error log instance (Proxy wrapped, error/fatal level only; sole writer of ee-error.log) */
122
147
  exports.errorLogger = createLoggerProxy(() => _getLoggerBy('errorLogger'));
123
148
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/log/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/log/index.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,17 @@
1
+ /**
2
+ * @module storage
3
+ * @description Data storage module entry point. Provides SqliteStorage for SQLite database operations.
4
+ *
5
+ * SqliteStorage class is exported statically — loading this module only imports built-in
6
+ * Node.js modules (assert, fs, path), NOT better-sqlite3. The native better-sqlite3 binding
7
+ * is only loaded when `SqliteStorage.init()` is called, via dynamic import().
8
+ *
9
+ * Usage:
10
+ * ```ts
11
+ * import { SqliteStorage } from 'ee-core/storage';
12
+ * const db = new SqliteStorage('myapp.db');
13
+ * await db.init(); // ← here better-sqlite3 is actually loaded
14
+ * ```
15
+ */
1
16
  export { SqliteStorage } from './sqliteStorage.js';
2
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/storage/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/storage/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
@@ -1,6 +1,21 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SqliteStorage = void 0;
4
+ /**
5
+ * @module storage
6
+ * @description Data storage module entry point. Provides SqliteStorage for SQLite database operations.
7
+ *
8
+ * SqliteStorage class is exported statically — loading this module only imports built-in
9
+ * Node.js modules (assert, fs, path), NOT better-sqlite3. The native better-sqlite3 binding
10
+ * is only loaded when `SqliteStorage.init()` is called, via dynamic import().
11
+ *
12
+ * Usage:
13
+ * ```ts
14
+ * import { SqliteStorage } from 'ee-core/storage';
15
+ * const db = new SqliteStorage('myapp.db');
16
+ * await db.init(); // ← here better-sqlite3 is actually loaded
17
+ * ```
18
+ */
4
19
  var sqliteStorage_js_1 = require("./sqliteStorage.js");
5
20
  Object.defineProperty(exports, "SqliteStorage", { enumerable: true, get: function () { return sqliteStorage_js_1.SqliteStorage; } });
6
21
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/storage/index.ts"],"names":[],"mappings":";;;AAAA,uDAAmD;AAA1C,iHAAA,aAAa,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/storage/index.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;GAcG;AACH,uDAAmD;AAA1C,iHAAA,aAAa,OAAA"}
@@ -1,4 +1,4 @@
1
- import Database from 'better-sqlite3';
1
+ import type Database from 'better-sqlite3';
2
2
  /**
3
3
  * SqliteStorage - SQLite database storage class
4
4
  *
@@ -15,6 +15,12 @@ import Database from 'better-sqlite3';
15
15
  * Security:
16
16
  * The constructor validates the database name for path traversal, disallowing ".." in the name
17
17
  * to prevent malicious input from accessing files outside the intended directory.
18
+ *
19
+ * Lazy loading:
20
+ * better-sqlite3 is a native module that requires electron-rebuild for Electron.
21
+ * The constructor only computes paths (synchronous). The `init()` method lazily imports
22
+ * better-sqlite3 and opens the database connection. Projects that don't use SQLite
23
+ * never load the native binding.
18
24
  */
19
25
  export declare class SqliteStorage {
20
26
  /** Database name (original input value) */
@@ -25,42 +31,36 @@ export declare class SqliteStorage {
25
31
  dbDir: string;
26
32
  /** Database filename (only the filename part, excluding directory) */
27
33
  fileName: string;
28
- /** better-sqlite3 database instance */
34
+ /** better-sqlite3 database instance (set after init()) */
29
35
  db: Database.Database;
30
36
  /**
31
- * Create a SqliteStorage instance
37
+ * Create a SqliteStorage instance (path computation only, DB not yet opened)
32
38
  *
33
- * Initialization flow:
34
- * 1. Validate that the name is non-empty and does not contain path traversal characters ".."
35
- * 2. Infer storage mode from the name (getMode)
36
- * 3. Create the database file directory (_createDatabaseDir)
37
- * 4. Extract the filename part (_formatFileName)
38
- * 5. Open the database connection (_initDB)
39
+ * The constructor only validates the name, infers the storage mode, computes paths,
40
+ * and creates the database directory. It does NOT open the database connection
41
+ * call `init()` to lazily load better-sqlite3 and open the DB.
39
42
  *
40
43
  * @param name - Database name or path. Supports the following formats:
41
44
  * - ":memory:" - In-memory database
42
45
  * - "app.db" - Filename only, stored under {dataDir}/db/
43
46
  * - "sub/app.db" - Relative path, relative to {dataDir}/db/
44
47
  * - "/tmp/app.db" - Absolute path
45
- * @param opt - better-sqlite3 database options, defaults merged with timeout: 5000
46
48
  * @throws Asserts error if name is empty or contains ".." path traversal characters
47
49
  */
48
- constructor(name: string, opt?: Record<string, unknown>);
50
+ constructor(name: string);
49
51
  /**
50
52
  * Initialize the database connection
51
53
  *
52
- * Determines the database path based on storage mode:
53
- * - memory mode: Uses ":memory:" as the path, better-sqlite3 creates the database in memory
54
- * - file mode: Uses getFilePath() to get the full database file path
54
+ * Lazily imports better-sqlite3 via dynamic import() and opens the database.
55
+ * This is the only point where the native .node binding is loaded.
55
56
  *
56
- * In file mode, additionally validates that the database file was created successfully.
57
- * If the file does not exist, throws an assertion error (possibly due to insufficient directory permissions, etc.).
57
+ * Must be called after construction before using `this.db`.
58
58
  *
59
59
  * @param opt - better-sqlite3 database options, defaults merged with { timeout: 5000 }
60
- * @returns better-sqlite3 Database instance
60
+ * @returns this SqliteStorage instance (for chaining: `const db = await new SqliteStorage('app.db').init()`)
61
61
  * @throws Asserts error if the database file was not created successfully in file mode
62
62
  */
63
- _initDB(opt?: Record<string, unknown>): Database.Database;
63
+ init(opt?: Record<string, unknown>): Promise<this>;
64
64
  /**
65
65
  * Extract the database filename
66
66
  *
@@ -1 +1 @@
1
- {"version":3,"file":"sqliteStorage.d.ts","sourceRoot":"","sources":["../../../src/storage/sqliteStorage.ts"],"names":[],"mappings":"AA6BA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAItC;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,aAAa;IACxB,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IAEb,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IAEb,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;IAEd,sEAAsE;IACtE,QAAQ,EAAE,MAAM,CAAC;IAEjB,uCAAuC;IACvC,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IAEtB;;;;;;;;;;;;;;;;;OAiBG;gBACS,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAY3D;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,QAAQ,CAAC,QAAQ;IAmB7D;;;;;;;;OAQG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAOrC;;;;;;;;;;;OAWG;IACH,kBAAkB,IAAI,MAAM;IAc5B;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAe7B;;;;OAIG;IACH,QAAQ,IAAI,MAAM;IAIlB;;;;;;;OAOG;IACH,WAAW,IAAI,MAAM;CAGtB"}
1
+ {"version":3,"file":"sqliteStorage.d.ts","sourceRoot":"","sources":["../../../src/storage/sqliteStorage.ts"],"names":[],"mappings":"AA2CA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,aAAa;IACxB,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IAEb,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IAEb,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;IAEd,sEAAsE;IACtE,QAAQ,EAAE,MAAM,CAAC;IAEjB,0DAA0D;IAC1D,EAAE,EAAG,QAAQ,CAAC,QAAQ,CAAC;IAEvB;;;;;;;;;;;;;OAaG;gBACS,IAAI,EAAE,MAAM;IAWxB;;;;;;;;;;;OAWG;IACG,IAAI,CAAC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB5D;;;;;;;;OAQG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAOrC;;;;;;;;;;;OAWG;IACH,kBAAkB,IAAI,MAAM;IAc5B;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAe7B;;;;OAIG;IACH,QAAQ,IAAI,MAAM;IAIlB;;;;;;;OAOG;IACH,WAAW,IAAI,MAAM;CAGtB"}
@@ -15,25 +15,32 @@ exports.SqliteStorage = void 0;
15
15
  * - Prevent path traversal attacks (validates that ".." is not present in the name during construction)
16
16
  * - Provide a unified interface for obtaining database file paths
17
17
  *
18
+ * better-sqlite3 is lazily imported — only loaded when `init()` is called to open the database.
19
+ * This avoids loading the native .node binding at module import time, which would happen unconditionally
20
+ * even if the consumer never uses SQLite.
21
+ *
18
22
  * Usage examples:
19
23
  * ```ts
20
24
  * // Name-only mode: file stored at {dataDir}/db/{name}.db
21
25
  * const db1 = new SqliteStorage('myapp.db');
26
+ * await db1.init();
22
27
  *
23
28
  * // Relative path mode: file stored at {dataDir}/db/sub/myapp.db
24
29
  * const db2 = new SqliteStorage('sub/myapp.db');
30
+ * await db2.init();
25
31
  *
26
32
  * // Absolute path mode: file stored at the specified path
27
33
  * const db3 = new SqliteStorage('/tmp/data/myapp.db');
34
+ * await db3.init();
28
35
  *
29
36
  * // In-memory mode: not persisted, data is lost when the process exits
30
37
  * const db4 = new SqliteStorage(':memory:');
38
+ * await db4.init();
31
39
  * ```
32
40
  */
33
41
  const assert_1 = __importDefault(require("assert"));
34
42
  const fs_1 = __importDefault(require("fs"));
35
43
  const path_1 = __importDefault(require("path"));
36
- const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
37
44
  const helper_js_1 = require("../utils/helper.js");
38
45
  const index_js_1 = require("../ps/index.js");
39
46
  /**
@@ -52,27 +59,29 @@ const index_js_1 = require("../ps/index.js");
52
59
  * Security:
53
60
  * The constructor validates the database name for path traversal, disallowing ".." in the name
54
61
  * to prevent malicious input from accessing files outside the intended directory.
62
+ *
63
+ * Lazy loading:
64
+ * better-sqlite3 is a native module that requires electron-rebuild for Electron.
65
+ * The constructor only computes paths (synchronous). The `init()` method lazily imports
66
+ * better-sqlite3 and opens the database connection. Projects that don't use SQLite
67
+ * never load the native binding.
55
68
  */
56
69
  class SqliteStorage {
57
70
  /**
58
- * Create a SqliteStorage instance
71
+ * Create a SqliteStorage instance (path computation only, DB not yet opened)
59
72
  *
60
- * Initialization flow:
61
- * 1. Validate that the name is non-empty and does not contain path traversal characters ".."
62
- * 2. Infer storage mode from the name (getMode)
63
- * 3. Create the database file directory (_createDatabaseDir)
64
- * 4. Extract the filename part (_formatFileName)
65
- * 5. Open the database connection (_initDB)
73
+ * The constructor only validates the name, infers the storage mode, computes paths,
74
+ * and creates the database directory. It does NOT open the database connection
75
+ * call `init()` to lazily load better-sqlite3 and open the DB.
66
76
  *
67
77
  * @param name - Database name or path. Supports the following formats:
68
78
  * - ":memory:" - In-memory database
69
79
  * - "app.db" - Filename only, stored under {dataDir}/db/
70
80
  * - "sub/app.db" - Relative path, relative to {dataDir}/db/
71
81
  * - "/tmp/app.db" - Absolute path
72
- * @param opt - better-sqlite3 database options, defaults merged with timeout: 5000
73
82
  * @throws Asserts error if name is empty or contains ".." path traversal characters
74
83
  */
75
- constructor(name, opt = {}) {
84
+ constructor(name) {
76
85
  (0, assert_1.default)(name, `db name ${name} Cannot be empty`);
77
86
  // Prevent path traversal attacks: disallow ".." in the name to avoid directory backtracking
78
87
  (0, assert_1.default)(!name.includes('..'), `db name ${name} contains path traversal`);
@@ -80,35 +89,36 @@ class SqliteStorage {
80
89
  this.mode = this.getMode(name);
81
90
  this.dbDir = this._createDatabaseDir();
82
91
  this.fileName = this._formatFileName(name);
83
- this.db = this._initDB(opt);
84
92
  }
85
93
  /**
86
94
  * Initialize the database connection
87
95
  *
88
- * Determines the database path based on storage mode:
89
- * - memory mode: Uses ":memory:" as the path, better-sqlite3 creates the database in memory
90
- * - file mode: Uses getFilePath() to get the full database file path
96
+ * Lazily imports better-sqlite3 via dynamic import() and opens the database.
97
+ * This is the only point where the native .node binding is loaded.
91
98
  *
92
- * In file mode, additionally validates that the database file was created successfully.
93
- * If the file does not exist, throws an assertion error (possibly due to insufficient directory permissions, etc.).
99
+ * Must be called after construction before using `this.db`.
94
100
  *
95
101
  * @param opt - better-sqlite3 database options, defaults merged with { timeout: 5000 }
96
- * @returns better-sqlite3 Database instance
102
+ * @returns this SqliteStorage instance (for chaining: `const db = await new SqliteStorage('app.db').init()`)
97
103
  * @throws Asserts error if the database file was not created successfully in file mode
98
104
  */
99
- _initDB(opt = {}) {
105
+ async init(opt = {}) {
106
+ // Lazy import: better-sqlite3 is only loaded when actually needed.
107
+ // This avoids loading the native .node binding at module import time.
108
+ // better-sqlite3 is a CJS package; dynamic import() resolves it correctly.
109
+ const { default: Database } = await import('better-sqlite3');
100
110
  const options = Object.assign({ timeout: 5000 }, opt);
101
111
  // Storage type: db file, in-memory (:memory:)
102
112
  let dbPath = this.name;
103
113
  if (this.mode !== 'memory') {
104
114
  dbPath = this.getFilePath();
105
115
  }
106
- const db = new better_sqlite3_1.default(dbPath, options);
116
+ this.db = new Database(dbPath, options);
107
117
  // For file mode, check if the file was created successfully
108
118
  if (this.mode !== 'memory') {
109
119
  (0, assert_1.default)(fs_1.default.existsSync(dbPath), `error: db ${dbPath} not exists`);
110
120
  }
111
- return db;
121
+ return this;
112
122
  }
113
123
  /**
114
124
  * Extract the database filename
@@ -1 +1 @@
1
- {"version":3,"file":"sqliteStorage.js","sourceRoot":"","sources":["../../../src/storage/sqliteStorage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sqliteStorage.js","sourceRoot":"","sources":["../../../src/storage/sqliteStorage.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ee-core",
3
- "version": "5.0.0",
3
+ "version": "5.0.2",
4
4
  "description": "ee core - TypeScript edition with dual module support",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "module": "./dist/esm/index.js",