node-cqrs 1.2.0-alpha.0 → 1.2.0-alpha.1
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.
- package/CHANGELOG.md +8 -0
- package/dist/cjs/sqlite-workers/AsyncSqliteStatement.js.map +1 -1
- package/dist/cjs/sqlite-workers/SqliteWorkerProxy.js +1 -6
- package/dist/cjs/sqlite-workers/SqliteWorkerProxy.js.map +1 -1
- package/dist/cjs/sqlite-workers/SqliteWorkerRunner.js +12 -29
- package/dist/cjs/sqlite-workers/SqliteWorkerRunner.js.map +1 -1
- package/dist/cjs/sqlite-workers/protocol.js +7 -7
- package/dist/cjs/sqlite-workers/protocol.js.map +1 -1
- package/dist/cjs/sqlite-workers/utils/createSqliteWorker.js +3 -7
- package/dist/cjs/sqlite-workers/utils/createSqliteWorker.js.map +1 -1
- package/dist/cjs/sqlite-workers/utils/createWorkerDb.js +79 -0
- package/dist/cjs/sqlite-workers/utils/createWorkerDb.js.map +1 -0
- package/dist/cjs/sqlite-workers/utils/index.js +2 -0
- package/dist/cjs/sqlite-workers/utils/index.js.map +1 -1
- package/dist/cjs/sqlite-workers/utils/resolveCurrentFileLocationFromStack.js +12 -0
- package/dist/cjs/sqlite-workers/utils/resolveCurrentFileLocationFromStack.js.map +1 -0
- package/dist/esm/sqlite-workers/AsyncSqliteStatement.js.map +1 -1
- package/dist/esm/sqlite-workers/SqliteWorkerProxy.js +1 -6
- package/dist/esm/sqlite-workers/SqliteWorkerProxy.js.map +1 -1
- package/dist/esm/sqlite-workers/SqliteWorkerRunner.js +12 -25
- package/dist/esm/sqlite-workers/SqliteWorkerRunner.js.map +1 -1
- package/dist/esm/sqlite-workers/protocol.js +7 -7
- package/dist/esm/sqlite-workers/protocol.js.map +1 -1
- package/dist/esm/sqlite-workers/utils/createSqliteWorker.js +3 -7
- package/dist/esm/sqlite-workers/utils/createSqliteWorker.js.map +1 -1
- package/dist/esm/sqlite-workers/utils/createWorkerDb.js +40 -0
- package/dist/esm/sqlite-workers/utils/createWorkerDb.js.map +1 -0
- package/dist/esm/sqlite-workers/utils/index.js +2 -0
- package/dist/esm/sqlite-workers/utils/index.js.map +1 -1
- package/dist/esm/sqlite-workers/utils/resolveCurrentFileLocationFromStack.js +9 -0
- package/dist/esm/sqlite-workers/utils/resolveCurrentFileLocationFromStack.js.map +1 -0
- package/dist/types/sqlite-workers/AsyncSqliteStatement.d.ts +6 -4
- package/dist/types/sqlite-workers/SqliteWorkerProxy.d.ts +1 -1
- package/dist/types/sqlite-workers/SqliteWorkerRunner.d.ts +3 -1
- package/dist/types/sqlite-workers/protocol.d.ts +12 -7
- package/dist/types/sqlite-workers/utils/createSqliteWorker.d.ts +1 -5
- package/dist/types/sqlite-workers/utils/createWorkerDb.d.ts +3 -0
- package/dist/types/sqlite-workers/utils/index.d.ts +2 -0
- package/dist/types/sqlite-workers/utils/resolveCurrentFileLocationFromStack.d.ts +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
# [1.2.0-alpha.1](https://github.com/snatalenko/node-cqrs/compare/v1.2.0-alpha.0...v1.2.0-alpha.1) (2026-04-28)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* Allow SQLite worker connections to be created with a custom factory ([fb39cf1](https://github.com/snatalenko/node-cqrs/commit/fb39cf1e3be51c279de6571262c360bf057dea28))
|
|
7
|
+
|
|
8
|
+
|
|
1
9
|
# [1.2.0-alpha.0](https://github.com/snatalenko/node-cqrs/compare/v1.1.0-beta.2...v1.2.0-alpha.0) (2026-04-27)
|
|
2
10
|
|
|
3
11
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AsyncSqliteStatement.js","sourceRoot":"","sources":["../../../src/sqlite-workers/AsyncSqliteStatement.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"AsyncSqliteStatement.js","sourceRoot":"","sources":["../../../src/sqlite-workers/AsyncSqliteStatement.ts"],"names":[],"mappings":";;;AAWA,MAAa,oBAAoB;IAKvB,UAAU,CAAmC;IAC7C,OAAO,CAA8B;IAE9C,YACC,SAA2C,EAC3C,MAAmC;QAEnC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,GAAG,CAAgB,MAAmD;QAC3E,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAoB,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,GAAG,CAAgB,MAAmD;QAC3E,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAA8B,CAAC;IACvF,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,MAAmD;QAC5D,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;CACD;AA3BD,oDA2BC"}
|
|
@@ -36,7 +36,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.SqliteWorkerProxy = void 0;
|
|
37
37
|
const Comlink = __importStar(require("comlink"));
|
|
38
38
|
const index_ts_1 = require("./utils/index.js");
|
|
39
|
-
const SqliteWorkerRunner_ts_1 = require("./SqliteWorkerRunner.js");
|
|
40
39
|
const AsyncSqliteStatement_ts_1 = require("./AsyncSqliteStatement.js");
|
|
41
40
|
class SqliteWorkerProxy {
|
|
42
41
|
#config;
|
|
@@ -76,11 +75,7 @@ class SqliteWorkerProxy {
|
|
|
76
75
|
async assertWorker() {
|
|
77
76
|
if (this.#worker)
|
|
78
77
|
return this.#worker;
|
|
79
|
-
|
|
80
|
-
this.#workerPromise ??= (0, index_ts_1.createSqliteWorker)({
|
|
81
|
-
...dbParams,
|
|
82
|
-
sqliteWorkerRunnerLocation
|
|
83
|
-
})
|
|
78
|
+
this.#workerPromise ??= (0, index_ts_1.createSqliteWorker)(this.#config)
|
|
84
79
|
.then(worker => {
|
|
85
80
|
this.#worker = worker;
|
|
86
81
|
worker.once('error', this.handleWorkerError);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SqliteWorkerProxy.js","sourceRoot":"","sources":["../../../src/sqlite-workers/SqliteWorkerProxy.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,iDAAmC;AAOnC,+CAAoE;AACpE,
|
|
1
|
+
{"version":3,"file":"SqliteWorkerProxy.js","sourceRoot":"","sources":["../../../src/sqlite-workers/SqliteWorkerProxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,20 +32,13 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
32
32
|
return result;
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
36
|
exports.SqliteWorkerRunner = void 0;
|
|
40
|
-
exports.resolveCurrentFileLocationFromStack = resolveCurrentFileLocationFromStack;
|
|
41
37
|
const node_worker_threads_1 = require("node:worker_threads");
|
|
42
38
|
const path = __importStar(require("node:path"));
|
|
43
|
-
const node_url_1 = require("node:url");
|
|
44
39
|
const Comlink = __importStar(require("comlink"));
|
|
45
|
-
const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
46
40
|
const protocol_ts_1 = require("./protocol.js");
|
|
47
41
|
const index_ts_1 = require("./utils/index.js");
|
|
48
|
-
const index_ts_2 = require("../utils/index.js");
|
|
49
42
|
function all(statement, params) {
|
|
50
43
|
return params === undefined ? statement.all() : statement.all(params);
|
|
51
44
|
}
|
|
@@ -55,34 +48,21 @@ function get(statement, params) {
|
|
|
55
48
|
function run(statement, params) {
|
|
56
49
|
return params === undefined ? statement.run() : statement.run(params);
|
|
57
50
|
}
|
|
58
|
-
/** @internal */
|
|
59
|
-
function resolveCurrentFileLocationFromStack(stack = new Error().stack) {
|
|
60
|
-
const stackFilename = stack?.match(/\((file:\/\/[^)]+SqliteWorkerRunner\.js):\d+:\d+\)/)?.[1];
|
|
61
|
-
if (!stackFilename)
|
|
62
|
-
throw new Error('Worker location could not be resolved from Error stack, pass sqliteWorkerRunnerLocation');
|
|
63
|
-
return (0, node_url_1.fileURLToPath)(stackFilename);
|
|
64
|
-
}
|
|
65
51
|
class SqliteWorkerRunner {
|
|
66
52
|
static get location() {
|
|
67
53
|
if (typeof __filename !== 'undefined' && path.isAbsolute(__filename))
|
|
68
54
|
return __filename;
|
|
69
55
|
/* istanbul ignore next -- exercised by ESM consumers, not ts-jest's CJS transform */
|
|
70
|
-
return resolveCurrentFileLocationFromStack();
|
|
56
|
+
return (0, index_ts_1.resolveCurrentFileLocationFromStack)();
|
|
71
57
|
}
|
|
72
58
|
#db;
|
|
73
59
|
#nextStatementHandle = 1;
|
|
74
60
|
#statements = new Map();
|
|
75
|
-
|
|
76
|
-
(0,
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
});
|
|
81
|
-
if (dbParams.pragmas?.length) {
|
|
82
|
-
(0, index_ts_2.assertStringArray)(dbParams.pragmas, 'dbParams.pragmas');
|
|
83
|
-
for (const pragma of dbParams.pragmas)
|
|
84
|
-
this.#db.pragma(pragma);
|
|
85
|
-
}
|
|
61
|
+
static async create(dbParams) {
|
|
62
|
+
return new SqliteWorkerRunner(await (0, index_ts_1.createWorkerDb)(dbParams));
|
|
63
|
+
}
|
|
64
|
+
constructor(db) {
|
|
65
|
+
this.#db = db;
|
|
86
66
|
}
|
|
87
67
|
all(sql, params) {
|
|
88
68
|
const statement = this.#db.prepare(sql);
|
|
@@ -123,10 +103,13 @@ class SqliteWorkerRunner {
|
|
|
123
103
|
exports.SqliteWorkerRunner = SqliteWorkerRunner;
|
|
124
104
|
/* istanbul ignore next -- this branch runs inside the spawned worker process */
|
|
125
105
|
if (node_worker_threads_1.parentPort) {
|
|
106
|
+
const port = node_worker_threads_1.parentPort;
|
|
126
107
|
if (!(0, protocol_ts_1.isSqliteWorkerData)(node_worker_threads_1.workerData))
|
|
127
108
|
throw new Error('workerData does not contain SQLite worker db parameters');
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
109
|
+
void SqliteWorkerRunner.create(node_worker_threads_1.workerData.dbConfig)
|
|
110
|
+
.then(runner => {
|
|
111
|
+
port.postMessage({ type: 'ready' });
|
|
112
|
+
Comlink.expose(runner, (0, index_ts_1.nodeEndpoint)(port));
|
|
113
|
+
});
|
|
131
114
|
}
|
|
132
115
|
//# sourceMappingURL=SqliteWorkerRunner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SqliteWorkerRunner.js","sourceRoot":"","sources":["../../../src/sqlite-workers/SqliteWorkerRunner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SqliteWorkerRunner.js","sourceRoot":"","sources":["../../../src/sqlite-workers/SqliteWorkerRunner.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.isSqliteWorkerData = isSqliteWorkerData;
|
|
4
4
|
exports.isSqliteWorkerReadyMessage = isSqliteWorkerReadyMessage;
|
|
5
|
+
const isObject = (obj) => typeof obj === 'object'
|
|
6
|
+
&& obj !== null
|
|
7
|
+
&& !Array.isArray(obj)
|
|
8
|
+
&& !(obj instanceof Date);
|
|
5
9
|
function isSqliteWorkerData(value) {
|
|
6
|
-
return
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
typeof value.db === 'object' &&
|
|
10
|
-
value.db !== null &&
|
|
11
|
-
'location' in value.db &&
|
|
12
|
-
typeof value.db.location === 'string';
|
|
10
|
+
return isObject(value)
|
|
11
|
+
&& 'dbConfig' in value
|
|
12
|
+
&& isObject(value.dbConfig);
|
|
13
13
|
}
|
|
14
14
|
function isSqliteWorkerReadyMessage(value) {
|
|
15
15
|
return typeof value === 'object' &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/sqlite-workers/protocol.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/sqlite-workers/protocol.ts"],"names":[],"mappings":";;AAiEA,gDAIC;AAED,gEAKC;AAjBD,MAAM,QAAQ,GAAG,CAAC,GAAY,EAAa,EAAE,CAC5C,OAAO,GAAG,KAAK,QAAQ;OACpB,GAAG,KAAK,IAAI;OACZ,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;OACnB,CAAC,CAAC,GAAG,YAAY,IAAI,CAAC,CAAC;AAE3B,SAAgB,kBAAkB,CAAC,KAAc;IAChD,OAAO,QAAQ,CAAC,KAAK,CAAC;WAClB,UAAU,IAAI,KAAK;WACnB,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AAED,SAAgB,0BAA0B,CAAC,KAAc;IACxD,OAAO,OAAO,KAAK,KAAK,QAAQ;QAC/B,KAAK,KAAK,IAAI;QACd,MAAM,IAAI,KAAK;QACf,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC;AACzB,CAAC"}
|
|
@@ -3,13 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.createSqliteWorker = createSqliteWorker;
|
|
4
4
|
const node_worker_threads_1 = require("node:worker_threads");
|
|
5
5
|
const protocol_ts_1 = require("../protocol.js");
|
|
6
|
-
const
|
|
7
|
-
async function createSqliteWorker(
|
|
8
|
-
|
|
9
|
-
if (pragmas?.length)
|
|
10
|
-
(0, assert_ts_1.assertStringArray)(pragmas, 'pragmas');
|
|
11
|
-
(0, assert_ts_1.assertString)(sqliteWorkerRunnerLocation, 'sqliteWorkerRunnerLocation');
|
|
12
|
-
const workerData = { db: { location, pragmas } };
|
|
6
|
+
const SqliteWorkerRunner_ts_1 = require("../SqliteWorkerRunner.js");
|
|
7
|
+
async function createSqliteWorker(params) {
|
|
8
|
+
const { sqliteWorkerRunnerLocation = SqliteWorkerRunner_ts_1.SqliteWorkerRunner.location, ...workerData } = params;
|
|
13
9
|
const worker = new node_worker_threads_1.Worker(sqliteWorkerRunnerLocation, { workerData });
|
|
14
10
|
await new Promise((resolve, reject) => {
|
|
15
11
|
let onError;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createSqliteWorker.js","sourceRoot":"","sources":["../../../../src/sqlite-workers/utils/createSqliteWorker.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"createSqliteWorker.js","sourceRoot":"","sources":["../../../../src/sqlite-workers/utils/createSqliteWorker.ts"],"names":[],"mappings":";;AAIA,gDA2CC;AA/CD,6DAA6C;AAC7C,gDAA0F;AAC1F,oEAA8D;AAEvD,KAAK,UAAU,kBAAkB,CAAC,MAA+B;IACvE,MAAM,EACL,0BAA0B,GAAG,0CAAkB,CAAC,QAAQ,EACxD,GAAG,UAAU,EACb,GAAG,MAAM,CAAC;IAEX,MAAM,MAAM,GAAG,IAAI,4BAAM,CAAC,0BAA0B,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;IAEtE,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,IAAI,OAA+B,CAAC;QACpC,IAAI,SAAqC,CAAC;QAC1C,IAAI,MAAkC,CAAC;QAEvC,MAAM,OAAO,GAAG,GAAG,EAAE;YACpB,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACjC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5B,CAAC,CAAC;QAEF,SAAS,GAAG,CAAC,OAAgB,EAAE,EAAE;YAChC,IAAI,CAAC,IAAA,wCAA0B,EAAC,OAAO,CAAC;gBACvC,OAAO;YAER,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;QACX,CAAC,CAAC;QAEF,OAAO,GAAG,CAAC,GAAY,EAAE,EAAE;YAC1B,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,GAAG,CAAC,CAAC;QACb,CAAC,CAAC;QAEF,MAAM,GAAG,CAAC,QAAgB,EAAE,EAAE;YAC7B,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,IAAI,KAAK,CAAC,mDAAmD,QAAQ,EAAE,CAAC,CAAC,CAAC;QAClF,CAAC,CAAC;QAEF,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
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
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
|
|
39
|
+
if (typeof path === "string" && /^\.\.?\//.test(path)) {
|
|
40
|
+
return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
|
|
41
|
+
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
return path;
|
|
45
|
+
};
|
|
46
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
|
+
exports.createWorkerDb = createWorkerDb;
|
|
48
|
+
const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
49
|
+
const index_ts_1 = require("../../utils/index.js");
|
|
50
|
+
function resolveImportLocation(location) {
|
|
51
|
+
if (location instanceof URL)
|
|
52
|
+
/* istanbul ignore next -- file URL imports are exercised by Node workers outside ts-jest */
|
|
53
|
+
return location.href;
|
|
54
|
+
return location;
|
|
55
|
+
}
|
|
56
|
+
async function createWorkerDb(params) {
|
|
57
|
+
if ('dbFactoryLocation' in params && !!params.dbFactoryLocation) {
|
|
58
|
+
const factoryModule = await Promise.resolve(`${__rewriteRelativeImportExtension(resolveImportLocation(params.dbFactoryLocation))}`).then(s => __importStar(require(s)));
|
|
59
|
+
const createSqliteWorkerDb = factoryModule.createSqliteWorkerDb ??
|
|
60
|
+
factoryModule.default?.createSqliteWorkerDb ??
|
|
61
|
+
factoryModule.default;
|
|
62
|
+
(0, index_ts_1.assertFunction)(createSqliteWorkerDb, 'createSqliteWorkerDb');
|
|
63
|
+
return createSqliteWorkerDb(params.dbFactoryParams);
|
|
64
|
+
}
|
|
65
|
+
else if ('dbLocation' in params && !!params.dbLocation) {
|
|
66
|
+
(0, index_ts_1.assertString)(params.dbLocation, 'dbLocation');
|
|
67
|
+
const db = (0, better_sqlite3_1.default)(params.dbLocation, { readonly: true, fileMustExist: true });
|
|
68
|
+
if (params.pragmas?.length) {
|
|
69
|
+
(0, index_ts_1.assertStringArray)(params.pragmas, 'pragmas');
|
|
70
|
+
for (const pragma of params.pragmas)
|
|
71
|
+
db.pragma(pragma);
|
|
72
|
+
}
|
|
73
|
+
return db;
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
throw new Error('Either dbLocation or dbFactoryLocation is required');
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=createWorkerDb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createWorkerDb.js","sourceRoot":"","sources":["../../../../src/sqlite-workers/utils/createWorkerDb.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,wCA6BC;AAzCD,oEAAyD;AACzD,mDAAuF;AAGvF,SAAS,qBAAqB,CAAC,QAAsB;IACpD,IAAI,QAAQ,YAAY,GAAG;QAC1B,4FAA4F;QAC5F,OAAO,QAAQ,CAAC,IAAI,CAAC;IAEtB,OAAO,QAAQ,CAAC;AACjB,CAAC;AAEM,KAAK,UAAU,cAAc,CAAC,MAAkC;IACtE,IAAI,mBAAmB,IAAI,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;QACjE,MAAM,aAAa,GAAG,0DAAa,qBAAqB,CAAC,MAAM,CAAC,iBAAiB,CAAC,wCAAC,CAAC;QACpF,MAAM,oBAAoB,GACzB,aAAa,CAAC,oBAAoB;YAClC,aAAa,CAAC,OAAO,EAAE,oBAAoB;YAC3C,aAAa,CAAC,OAAO,CAAC;QAEvB,IAAA,yBAAc,EAAC,oBAAoB,EAAE,sBAAsB,CAAC,CAAC;QAE7D,OAAO,oBAAoB,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IACrD,CAAC;SACI,IAAI,YAAY,IAAI,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACxD,IAAA,uBAAY,EAAC,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAE9C,MAAM,EAAE,GAAG,IAAA,wBAAQ,EAAC,MAAM,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAEhF,IAAI,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;YAC5B,IAAA,4BAAiB,EAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAE7C,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO;gBAClC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACpB,CAAC;QAED,OAAO,EAAE,CAAC;IACX,CAAC;SACI,CAAC;QACL,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACvE,CAAC;AACF,CAAC"}
|
|
@@ -15,5 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./createSqliteWorker.js"), exports);
|
|
18
|
+
__exportStar(require("./createWorkerDb.js"), exports);
|
|
18
19
|
__exportStar(require("./nodeEndpoint.js"), exports);
|
|
20
|
+
__exportStar(require("./resolveCurrentFileLocationFromStack.js"), exports);
|
|
19
21
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/sqlite-workers/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0DAAwC;AACxC,oDAAkC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/sqlite-workers/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0DAAwC;AACxC,sDAAoC;AACpC,oDAAkC;AAClC,2EAAyD"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveCurrentFileLocationFromStack = resolveCurrentFileLocationFromStack;
|
|
4
|
+
const node_url_1 = require("node:url");
|
|
5
|
+
/** @internal */
|
|
6
|
+
function resolveCurrentFileLocationFromStack(stack = new Error().stack) {
|
|
7
|
+
const stackFilename = stack?.match(/\((file:\/\/[^)]+SqliteWorkerRunner\.js):\d+:\d+\)/)?.[1];
|
|
8
|
+
if (!stackFilename)
|
|
9
|
+
throw new Error('Worker location could not be resolved from Error stack, pass sqliteWorkerRunnerLocation');
|
|
10
|
+
return (0, node_url_1.fileURLToPath)(stackFilename);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=resolveCurrentFileLocationFromStack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveCurrentFileLocationFromStack.js","sourceRoot":"","sources":["../../../../src/sqlite-workers/utils/resolveCurrentFileLocationFromStack.ts"],"names":[],"mappings":";;AAGA,kFAMC;AATD,uCAAyC;AAEzC,gBAAgB;AAChB,SAAgB,mCAAmC,CAAC,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC,KAAK;IAC5E,MAAM,aAAa,GAAG,KAAK,EAAE,KAAK,CAAC,oDAAoD,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9F,IAAI,CAAC,aAAa;QACjB,MAAM,IAAI,KAAK,CAAC,yFAAyF,CAAC,CAAC;IAE5G,OAAO,IAAA,wBAAa,EAAC,aAAa,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AsyncSqliteStatement.js","sourceRoot":"","sources":["../../../src/sqlite-workers/AsyncSqliteStatement.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AsyncSqliteStatement.js","sourceRoot":"","sources":["../../../src/sqlite-workers/AsyncSqliteStatement.ts"],"names":[],"mappings":"AAWA,MAAM,OAAO,oBAAoB;IAKvB,UAAU,CAAmC;IAC7C,OAAO,CAA8B;IAE9C,YACC,SAA2C,EAC3C,MAAmC;QAEnC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,GAAG,CAAgB,MAAmD;QAC3E,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAoB,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,GAAG,CAAgB,MAAmD;QAC3E,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAA8B,CAAC;IACvF,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,MAAmD;QAC5D,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;CACD"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import * as Comlink from 'comlink';
|
|
2
2
|
import { createSqliteWorker, nodeEndpoint } from "./utils/index.js";
|
|
3
|
-
import { SqliteWorkerRunner } from "./SqliteWorkerRunner.js";
|
|
4
3
|
import { AsyncSqliteStatement } from "./AsyncSqliteStatement.js";
|
|
5
4
|
export class SqliteWorkerProxy {
|
|
6
5
|
#config;
|
|
@@ -40,11 +39,7 @@ export class SqliteWorkerProxy {
|
|
|
40
39
|
async assertWorker() {
|
|
41
40
|
if (this.#worker)
|
|
42
41
|
return this.#worker;
|
|
43
|
-
|
|
44
|
-
this.#workerPromise ??= createSqliteWorker({
|
|
45
|
-
...dbParams,
|
|
46
|
-
sqliteWorkerRunnerLocation
|
|
47
|
-
})
|
|
42
|
+
this.#workerPromise ??= createSqliteWorker(this.#config)
|
|
48
43
|
.then(worker => {
|
|
49
44
|
this.#worker = worker;
|
|
50
45
|
worker.once('error', this.handleWorkerError);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SqliteWorkerProxy.js","sourceRoot":"","sources":["../../../src/sqlite-workers/SqliteWorkerProxy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAOnC,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"SqliteWorkerProxy.js","sourceRoot":"","sources":["../../../src/sqlite-workers/SqliteWorkerProxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import { parentPort, workerData } from 'node:worker_threads';
|
|
2
2
|
import * as path from 'node:path';
|
|
3
|
-
import { fileURLToPath } from 'node:url';
|
|
4
3
|
import * as Comlink from 'comlink';
|
|
5
|
-
import Database from 'better-sqlite3';
|
|
6
4
|
import { isSqliteWorkerData } from "./protocol.js";
|
|
7
|
-
import { nodeEndpoint } from "./utils/index.js";
|
|
8
|
-
import { assertString, assertStringArray } from "../utils/index.js";
|
|
5
|
+
import { createWorkerDb, nodeEndpoint, resolveCurrentFileLocationFromStack } from "./utils/index.js";
|
|
9
6
|
function all(statement, params) {
|
|
10
7
|
return params === undefined ? statement.all() : statement.all(params);
|
|
11
8
|
}
|
|
@@ -15,13 +12,6 @@ function get(statement, params) {
|
|
|
15
12
|
function run(statement, params) {
|
|
16
13
|
return params === undefined ? statement.run() : statement.run(params);
|
|
17
14
|
}
|
|
18
|
-
/** @internal */
|
|
19
|
-
export function resolveCurrentFileLocationFromStack(stack = new Error().stack) {
|
|
20
|
-
const stackFilename = stack?.match(/\((file:\/\/[^)]+SqliteWorkerRunner\.js):\d+:\d+\)/)?.[1];
|
|
21
|
-
if (!stackFilename)
|
|
22
|
-
throw new Error('Worker location could not be resolved from Error stack, pass sqliteWorkerRunnerLocation');
|
|
23
|
-
return fileURLToPath(stackFilename);
|
|
24
|
-
}
|
|
25
15
|
export class SqliteWorkerRunner {
|
|
26
16
|
static get location() {
|
|
27
17
|
if (typeof __filename !== 'undefined' && path.isAbsolute(__filename))
|
|
@@ -32,17 +22,11 @@ export class SqliteWorkerRunner {
|
|
|
32
22
|
#db;
|
|
33
23
|
#nextStatementHandle = 1;
|
|
34
24
|
#statements = new Map();
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
});
|
|
41
|
-
if (dbParams.pragmas?.length) {
|
|
42
|
-
assertStringArray(dbParams.pragmas, 'dbParams.pragmas');
|
|
43
|
-
for (const pragma of dbParams.pragmas)
|
|
44
|
-
this.#db.pragma(pragma);
|
|
45
|
-
}
|
|
25
|
+
static async create(dbParams) {
|
|
26
|
+
return new SqliteWorkerRunner(await createWorkerDb(dbParams));
|
|
27
|
+
}
|
|
28
|
+
constructor(db) {
|
|
29
|
+
this.#db = db;
|
|
46
30
|
}
|
|
47
31
|
all(sql, params) {
|
|
48
32
|
const statement = this.#db.prepare(sql);
|
|
@@ -82,10 +66,13 @@ export class SqliteWorkerRunner {
|
|
|
82
66
|
}
|
|
83
67
|
/* istanbul ignore next -- this branch runs inside the spawned worker process */
|
|
84
68
|
if (parentPort) {
|
|
69
|
+
const port = parentPort;
|
|
85
70
|
if (!isSqliteWorkerData(workerData))
|
|
86
71
|
throw new Error('workerData does not contain SQLite worker db parameters');
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
72
|
+
void SqliteWorkerRunner.create(workerData.dbConfig)
|
|
73
|
+
.then(runner => {
|
|
74
|
+
port.postMessage({ type: 'ready' });
|
|
75
|
+
Comlink.expose(runner, nodeEndpoint(port));
|
|
76
|
+
});
|
|
90
77
|
}
|
|
91
78
|
//# sourceMappingURL=SqliteWorkerRunner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SqliteWorkerRunner.js","sourceRoot":"","sources":["../../../src/sqlite-workers/SqliteWorkerRunner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,
|
|
1
|
+
{"version":3,"file":"SqliteWorkerRunner.js","sourceRoot":"","sources":["../../../src/sqlite-workers/SqliteWorkerRunner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
+
const isObject = (obj) => typeof obj === 'object'
|
|
2
|
+
&& obj !== null
|
|
3
|
+
&& !Array.isArray(obj)
|
|
4
|
+
&& !(obj instanceof Date);
|
|
1
5
|
export function isSqliteWorkerData(value) {
|
|
2
|
-
return
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
typeof value.db === 'object' &&
|
|
6
|
-
value.db !== null &&
|
|
7
|
-
'location' in value.db &&
|
|
8
|
-
typeof value.db.location === 'string';
|
|
6
|
+
return isObject(value)
|
|
7
|
+
&& 'dbConfig' in value
|
|
8
|
+
&& isObject(value.dbConfig);
|
|
9
9
|
}
|
|
10
10
|
export function isSqliteWorkerReadyMessage(value) {
|
|
11
11
|
return typeof value === 'object' &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/sqlite-workers/protocol.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/sqlite-workers/protocol.ts"],"names":[],"mappings":"AA2DA,MAAM,QAAQ,GAAG,CAAC,GAAY,EAAa,EAAE,CAC5C,OAAO,GAAG,KAAK,QAAQ;OACpB,GAAG,KAAK,IAAI;OACZ,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;OACnB,CAAC,CAAC,GAAG,YAAY,IAAI,CAAC,CAAC;AAE3B,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAChD,OAAO,QAAQ,CAAC,KAAK,CAAC;WAClB,UAAU,IAAI,KAAK;WACnB,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,KAAc;IACxD,OAAO,OAAO,KAAK,KAAK,QAAQ;QAC/B,KAAK,KAAK,IAAI;QACd,MAAM,IAAI,KAAK;QACf,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC;AACzB,CAAC"}
|
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
import { Worker } from 'node:worker_threads';
|
|
2
2
|
import { isSqliteWorkerReadyMessage } from "../protocol.js";
|
|
3
|
-
import {
|
|
4
|
-
export async function createSqliteWorker(
|
|
5
|
-
|
|
6
|
-
if (pragmas?.length)
|
|
7
|
-
assertStringArray(pragmas, 'pragmas');
|
|
8
|
-
assertString(sqliteWorkerRunnerLocation, 'sqliteWorkerRunnerLocation');
|
|
9
|
-
const workerData = { db: { location, pragmas } };
|
|
3
|
+
import { SqliteWorkerRunner } from "../SqliteWorkerRunner.js";
|
|
4
|
+
export async function createSqliteWorker(params) {
|
|
5
|
+
const { sqliteWorkerRunnerLocation = SqliteWorkerRunner.location, ...workerData } = params;
|
|
10
6
|
const worker = new Worker(sqliteWorkerRunnerLocation, { workerData });
|
|
11
7
|
await new Promise((resolve, reject) => {
|
|
12
8
|
let onError;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createSqliteWorker.js","sourceRoot":"","sources":["../../../../src/sqlite-workers/utils/createSqliteWorker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,
|
|
1
|
+
{"version":3,"file":"createSqliteWorker.js","sourceRoot":"","sources":["../../../../src/sqlite-workers/utils/createSqliteWorker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,0BAA0B,EAAgC,MAAM,gBAAgB,CAAC;AAC1F,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAA+B;IACvE,MAAM,EACL,0BAA0B,GAAG,kBAAkB,CAAC,QAAQ,EACxD,GAAG,UAAU,EACb,GAAG,MAAM,CAAC;IAEX,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,0BAA0B,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;IAEtE,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,IAAI,OAA+B,CAAC;QACpC,IAAI,SAAqC,CAAC;QAC1C,IAAI,MAAkC,CAAC;QAEvC,MAAM,OAAO,GAAG,GAAG,EAAE;YACpB,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACjC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5B,CAAC,CAAC;QAEF,SAAS,GAAG,CAAC,OAAgB,EAAE,EAAE;YAChC,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC;gBACvC,OAAO;YAER,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;QACX,CAAC,CAAC;QAEF,OAAO,GAAG,CAAC,GAAY,EAAE,EAAE;YAC1B,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,GAAG,CAAC,CAAC;QACb,CAAC,CAAC;QAEF,MAAM,GAAG,CAAC,QAAgB,EAAE,EAAE;YAC7B,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,IAAI,KAAK,CAAC,mDAAmD,QAAQ,EAAE,CAAC,CAAC,CAAC;QAClF,CAAC,CAAC;QAEF,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
|
|
2
|
+
if (typeof path === "string" && /^\.\.?\//.test(path)) {
|
|
3
|
+
return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
|
|
4
|
+
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
|
|
5
|
+
});
|
|
6
|
+
}
|
|
7
|
+
return path;
|
|
8
|
+
};
|
|
9
|
+
import createDb from 'better-sqlite3';
|
|
10
|
+
import { assertFunction, assertString, assertStringArray } from "../../utils/index.js";
|
|
11
|
+
function resolveImportLocation(location) {
|
|
12
|
+
if (location instanceof URL)
|
|
13
|
+
/* istanbul ignore next -- file URL imports are exercised by Node workers outside ts-jest */
|
|
14
|
+
return location.href;
|
|
15
|
+
return location;
|
|
16
|
+
}
|
|
17
|
+
export async function createWorkerDb(params) {
|
|
18
|
+
if ('dbFactoryLocation' in params && !!params.dbFactoryLocation) {
|
|
19
|
+
const factoryModule = await import(__rewriteRelativeImportExtension(resolveImportLocation(params.dbFactoryLocation)));
|
|
20
|
+
const createSqliteWorkerDb = factoryModule.createSqliteWorkerDb ??
|
|
21
|
+
factoryModule.default?.createSqliteWorkerDb ??
|
|
22
|
+
factoryModule.default;
|
|
23
|
+
assertFunction(createSqliteWorkerDb, 'createSqliteWorkerDb');
|
|
24
|
+
return createSqliteWorkerDb(params.dbFactoryParams);
|
|
25
|
+
}
|
|
26
|
+
else if ('dbLocation' in params && !!params.dbLocation) {
|
|
27
|
+
assertString(params.dbLocation, 'dbLocation');
|
|
28
|
+
const db = createDb(params.dbLocation, { readonly: true, fileMustExist: true });
|
|
29
|
+
if (params.pragmas?.length) {
|
|
30
|
+
assertStringArray(params.pragmas, 'pragmas');
|
|
31
|
+
for (const pragma of params.pragmas)
|
|
32
|
+
db.pragma(pragma);
|
|
33
|
+
}
|
|
34
|
+
return db;
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
throw new Error('Either dbLocation or dbFactoryLocation is required');
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=createWorkerDb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createWorkerDb.js","sourceRoot":"","sources":["../../../../src/sqlite-workers/utils/createWorkerDb.ts"],"names":[],"mappings":";;;;;;;;AAAA,OAAO,QAA2B,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGvF,SAAS,qBAAqB,CAAC,QAAsB;IACpD,IAAI,QAAQ,YAAY,GAAG;QAC1B,4FAA4F;QAC5F,OAAO,QAAQ,CAAC,IAAI,CAAC;IAEtB,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAkC;IACtE,IAAI,mBAAmB,IAAI,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;QACjE,MAAM,aAAa,GAAG,MAAM,MAAM,kCAAC,qBAAqB,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAC,CAAC;QACpF,MAAM,oBAAoB,GACzB,aAAa,CAAC,oBAAoB;YAClC,aAAa,CAAC,OAAO,EAAE,oBAAoB;YAC3C,aAAa,CAAC,OAAO,CAAC;QAEvB,cAAc,CAAC,oBAAoB,EAAE,sBAAsB,CAAC,CAAC;QAE7D,OAAO,oBAAoB,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IACrD,CAAC;SACI,IAAI,YAAY,IAAI,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACxD,YAAY,CAAC,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAE9C,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAEhF,IAAI,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;YAC5B,iBAAiB,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAE7C,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO;gBAClC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACpB,CAAC;QAED,OAAO,EAAE,CAAC;IACX,CAAC;SACI,CAAC;QACL,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACvE,CAAC;AACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/sqlite-workers/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/sqlite-workers/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0CAA0C,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { fileURLToPath } from 'node:url';
|
|
2
|
+
/** @internal */
|
|
3
|
+
export function resolveCurrentFileLocationFromStack(stack = new Error().stack) {
|
|
4
|
+
const stackFilename = stack?.match(/\((file:\/\/[^)]+SqliteWorkerRunner\.js):\d+:\d+\)/)?.[1];
|
|
5
|
+
if (!stackFilename)
|
|
6
|
+
throw new Error('Worker location could not be resolved from Error stack, pass sqliteWorkerRunnerLocation');
|
|
7
|
+
return fileURLToPath(stackFilename);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=resolveCurrentFileLocationFromStack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveCurrentFileLocationFromStack.js","sourceRoot":"","sources":["../../../../src/sqlite-workers/utils/resolveCurrentFileLocationFromStack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,gBAAgB;AAChB,MAAM,UAAU,mCAAmC,CAAC,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC,KAAK;IAC5E,MAAM,aAAa,GAAG,KAAK,EAAE,KAAK,CAAC,oDAAoD,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9F,IAAI,CAAC,aAAa;QACjB,MAAM,IAAI,KAAK,CAAC,yFAAyF,CAAC,CAAC;IAE5G,OAAO,aAAa,CAAC,aAAa,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import * as Comlink from 'comlink';
|
|
2
2
|
import type { SqliteRunResult, ISqliteWorkerApi, SqliteWorkerQueryParams, SqliteWorkerStatementHandle } from './protocol.ts';
|
|
3
|
-
|
|
3
|
+
type AsyncSqliteStatementParams<BindParameters extends unknown[]> = SqliteWorkerQueryParams & (BindParameters | Record<string, unknown>);
|
|
4
|
+
export declare class AsyncSqliteStatement<BindParameters extends unknown[] = unknown[], Result = unknown> {
|
|
4
5
|
#private;
|
|
5
6
|
constructor(workerApi: Comlink.Remote<ISqliteWorkerApi>, handle: SqliteWorkerStatementHandle);
|
|
6
|
-
all<TRow>(params?:
|
|
7
|
-
get<TRow>(params?:
|
|
8
|
-
run(params?:
|
|
7
|
+
all<TRow = Result>(params?: AsyncSqliteStatementParams<BindParameters>): Promise<TRow[]>;
|
|
8
|
+
get<TRow = Result>(params?: AsyncSqliteStatementParams<BindParameters>): Promise<TRow | undefined>;
|
|
9
|
+
run(params?: AsyncSqliteStatementParams<BindParameters>): Promise<SqliteRunResult>;
|
|
9
10
|
}
|
|
11
|
+
export {};
|
|
@@ -6,7 +6,7 @@ export declare class SqliteWorkerProxy {
|
|
|
6
6
|
all<TRow>(sql: string, params?: SqliteWorkerQueryParams): Promise<TRow[]>;
|
|
7
7
|
get<TRow>(sql: string, params?: SqliteWorkerQueryParams): Promise<TRow | undefined>;
|
|
8
8
|
run(sql: string, params?: SqliteWorkerQueryParams): Promise<SqliteRunResult>;
|
|
9
|
-
prepare(sql: string): Promise<AsyncSqliteStatement
|
|
9
|
+
prepare<BindParameters extends unknown[] | {} = unknown[], Result = unknown>(sql: string): Promise<BindParameters extends unknown[] ? AsyncSqliteStatement<BindParameters, Result> : AsyncSqliteStatement<[BindParameters], Result>>;
|
|
10
10
|
dispose(): Promise<void>;
|
|
11
11
|
handleWorkerError: (_err: Error) => void;
|
|
12
12
|
handleWorkerExit: (_exitCode: number) => void;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import type { Database } from 'better-sqlite3';
|
|
1
2
|
import { type SqliteRunResult, type ISqliteWorkerApi, type SqliteWorkerRunnerDbParams, type SqliteWorkerQueryParams, type SqliteWorkerStatementHandle } from './protocol.ts';
|
|
2
3
|
export declare class SqliteWorkerRunner implements ISqliteWorkerApi {
|
|
3
4
|
#private;
|
|
4
5
|
static get location(): string;
|
|
5
|
-
|
|
6
|
+
static create(dbParams: SqliteWorkerRunnerDbParams): Promise<SqliteWorkerRunner>;
|
|
7
|
+
constructor(db: Database);
|
|
6
8
|
all<TRow>(sql: string, params?: SqliteWorkerQueryParams): TRow[];
|
|
7
9
|
get<TRow>(sql: string, params?: SqliteWorkerQueryParams): TRow | undefined;
|
|
8
10
|
run(sql: string, params?: SqliteWorkerQueryParams): SqliteRunResult;
|
|
@@ -1,18 +1,23 @@
|
|
|
1
|
-
import type { Statement } from 'better-sqlite3';
|
|
1
|
+
import type { Database, Statement } from 'better-sqlite3';
|
|
2
2
|
export type SqliteWorkerProxyParams = {
|
|
3
|
-
/** SQLite database file opened readonly by the worker. */
|
|
4
|
-
dbLocation: string;
|
|
5
|
-
/** PRAGMA statements applied to the worker connection. */
|
|
6
|
-
pragmas?: readonly string[];
|
|
7
3
|
/** Worker runner script location; defaults to the bundled runner. */
|
|
8
4
|
sqliteWorkerRunnerLocation?: string | URL;
|
|
5
|
+
dbConfig: SqliteWorkerRunnerDbParams;
|
|
9
6
|
};
|
|
10
7
|
export type SqliteWorkerRunnerDbParams = {
|
|
11
|
-
|
|
8
|
+
/** SQLite database file opened readonly by the worker. */
|
|
9
|
+
dbLocation: string;
|
|
10
|
+
/** PRAGMA statements applied to the worker connection. */
|
|
12
11
|
pragmas?: readonly string[];
|
|
12
|
+
} | {
|
|
13
|
+
/** Module exporting createSqliteWorkerDb for custom worker-side DB creation. */
|
|
14
|
+
dbFactoryLocation: string | URL;
|
|
15
|
+
/** Structured-cloneable params passed to the custom worker DB factory. */
|
|
16
|
+
dbFactoryParams: unknown;
|
|
13
17
|
};
|
|
18
|
+
export type SqliteWorkerDbFactory = (params: unknown) => Database | Promise<Database>;
|
|
14
19
|
export type SqliteWorkerData = {
|
|
15
|
-
|
|
20
|
+
dbConfig: SqliteWorkerRunnerDbParams;
|
|
16
21
|
};
|
|
17
22
|
export type SqliteWorkerQueryParams = readonly unknown[] | Record<string, unknown>;
|
|
18
23
|
export type SqliteWorkerStatementHandle = number;
|
|
@@ -1,7 +1,3 @@
|
|
|
1
1
|
import { Worker } from 'node:worker_threads';
|
|
2
2
|
import { type SqliteWorkerProxyParams } from '../protocol.ts';
|
|
3
|
-
|
|
4
|
-
sqliteWorkerRunnerLocation: string | URL;
|
|
5
|
-
};
|
|
6
|
-
export declare function createSqliteWorker({ sqliteWorkerRunnerLocation, dbLocation: location, pragmas }: CreateSqliteWorkerParams): Promise<Worker>;
|
|
7
|
-
export {};
|
|
3
|
+
export declare function createSqliteWorker(params: SqliteWorkerProxyParams): Promise<Worker>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "node-cqrs",
|
|
3
|
-
"version": "1.2.0-alpha.
|
|
3
|
+
"version": "1.2.0-alpha.1",
|
|
4
4
|
"description": "TypeScript CQRS/Event Sourcing toolkit for Node.js with DI, sagas, projections, and optional Worker, RabbitMQ, and SQLite adapters",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"keywords": [
|