node-cqrs 1.1.0-beta.2 → 1.2.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/dist/cjs/CqrsContainerBuilder.js.map +1 -1
- package/dist/cjs/sqlite-workers/AsyncSqliteStatement.js +22 -0
- package/dist/cjs/sqlite-workers/AsyncSqliteStatement.js.map +1 -0
- package/dist/cjs/sqlite-workers/SqliteWorkerProxy.js +126 -0
- package/dist/cjs/sqlite-workers/SqliteWorkerProxy.js.map +1 -0
- package/dist/cjs/sqlite-workers/SqliteWorkerRunner.js +132 -0
- package/dist/cjs/sqlite-workers/SqliteWorkerRunner.js.map +1 -0
- package/dist/cjs/sqlite-workers/index.js +19 -0
- package/dist/cjs/sqlite-workers/index.js.map +1 -0
- package/dist/cjs/sqlite-workers/protocol.js +20 -0
- package/dist/cjs/sqlite-workers/protocol.js.map +1 -0
- package/dist/cjs/sqlite-workers/utils/createSqliteWorker.js +43 -0
- package/dist/cjs/sqlite-workers/utils/createSqliteWorker.js.map +1 -0
- package/dist/cjs/sqlite-workers/utils/index.js +19 -0
- package/dist/cjs/sqlite-workers/utils/index.js.map +1 -0
- package/dist/cjs/sqlite-workers/utils/nodeEndpoint.js +46 -0
- package/dist/cjs/sqlite-workers/utils/nodeEndpoint.js.map +1 -0
- package/dist/esm/CqrsContainerBuilder.js.map +1 -1
- package/dist/esm/sqlite-workers/AsyncSqliteStatement.js +18 -0
- package/dist/esm/sqlite-workers/AsyncSqliteStatement.js.map +1 -0
- package/dist/esm/sqlite-workers/SqliteWorkerProxy.js +89 -0
- package/dist/esm/sqlite-workers/SqliteWorkerProxy.js.map +1 -0
- package/dist/esm/sqlite-workers/SqliteWorkerRunner.js +91 -0
- package/dist/esm/sqlite-workers/SqliteWorkerRunner.js.map +1 -0
- package/dist/esm/sqlite-workers/index.js +3 -0
- package/dist/esm/sqlite-workers/index.js.map +1 -0
- package/dist/esm/sqlite-workers/protocol.js +16 -0
- package/dist/esm/sqlite-workers/protocol.js.map +1 -0
- package/dist/esm/sqlite-workers/utils/createSqliteWorker.js +40 -0
- package/dist/esm/sqlite-workers/utils/createSqliteWorker.js.map +1 -0
- package/dist/esm/sqlite-workers/utils/index.js +3 -0
- package/dist/esm/sqlite-workers/utils/index.js.map +1 -0
- package/dist/esm/sqlite-workers/utils/nodeEndpoint.js +10 -0
- package/dist/esm/sqlite-workers/utils/nodeEndpoint.js.map +1 -0
- package/dist/types/CqrsContainerBuilder.d.ts +6 -6
- package/dist/types/sqlite-workers/AsyncSqliteStatement.d.ts +9 -0
- package/dist/types/sqlite-workers/SqliteWorkerProxy.d.ts +13 -0
- package/dist/types/sqlite-workers/SqliteWorkerRunner.d.ts +10 -0
- package/dist/types/sqlite-workers/index.d.ts +3 -0
- package/dist/types/sqlite-workers/protocol.d.ts +30 -0
- package/dist/types/sqlite-workers/utils/createSqliteWorker.d.ts +7 -0
- package/dist/types/sqlite-workers/utils/index.d.ts +2 -0
- package/dist/types/sqlite-workers/utils/nodeEndpoint.d.ts +2 -0
- package/package.json +6 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
# [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
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* Add sqlite-workers submodule for async SQLite reads ([1987a40](https://github.com/snatalenko/node-cqrs/commit/1987a403fdfd38a57cf4b2c82bc79e88568bc32e))
|
|
7
|
+
|
|
8
|
+
|
|
1
9
|
# [1.1.0-beta.2](https://github.com/snatalenko/node-cqrs/compare/v1.1.0-beta.1...v1.1.0-beta.2) (2026-04-25)
|
|
2
10
|
|
|
3
11
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CqrsContainerBuilder.js","sourceRoot":"","sources":["../../src/CqrsContainerBuilder.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"CqrsContainerBuilder.js","sourceRoot":"","sources":["../../src/CqrsContainerBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AsyncSqliteStatement = void 0;
|
|
4
|
+
class AsyncSqliteStatement {
|
|
5
|
+
#workerApi;
|
|
6
|
+
#handle;
|
|
7
|
+
constructor(workerApi, handle) {
|
|
8
|
+
this.#workerApi = workerApi;
|
|
9
|
+
this.#handle = handle;
|
|
10
|
+
}
|
|
11
|
+
async all(params) {
|
|
12
|
+
return this.#workerApi.allPrepared(this.#handle, params);
|
|
13
|
+
}
|
|
14
|
+
async get(params) {
|
|
15
|
+
return this.#workerApi.getPrepared(this.#handle, params);
|
|
16
|
+
}
|
|
17
|
+
async run(params) {
|
|
18
|
+
return this.#workerApi.runPrepared(this.#handle, params);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.AsyncSqliteStatement = AsyncSqliteStatement;
|
|
22
|
+
//# sourceMappingURL=AsyncSqliteStatement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AsyncSqliteStatement.js","sourceRoot":"","sources":["../../../src/sqlite-workers/AsyncSqliteStatement.ts"],"names":[],"mappings":";;;AAQA,MAAa,oBAAoB;IAEvB,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,CAAO,MAAgC;QAC/C,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAoB,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,GAAG,CAAO,MAAgC;QAC/C,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAA8B,CAAC;IACvF,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,MAAgC;QACzC,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;CACD;AAxBD,oDAwBC"}
|
|
@@ -0,0 +1,126 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.SqliteWorkerProxy = void 0;
|
|
37
|
+
const Comlink = __importStar(require("comlink"));
|
|
38
|
+
const index_ts_1 = require("./utils/index.js");
|
|
39
|
+
const SqliteWorkerRunner_ts_1 = require("./SqliteWorkerRunner.js");
|
|
40
|
+
const AsyncSqliteStatement_ts_1 = require("./AsyncSqliteStatement.js");
|
|
41
|
+
class SqliteWorkerProxy {
|
|
42
|
+
#config;
|
|
43
|
+
#worker;
|
|
44
|
+
#workerPromise;
|
|
45
|
+
#workerApi;
|
|
46
|
+
#workerApiPromise;
|
|
47
|
+
#disposePromise;
|
|
48
|
+
constructor(config) {
|
|
49
|
+
this.#config = config;
|
|
50
|
+
}
|
|
51
|
+
async all(sql, params) {
|
|
52
|
+
const workerApi = await this.#assertWorkerApi();
|
|
53
|
+
return workerApi.all(sql, params);
|
|
54
|
+
}
|
|
55
|
+
async get(sql, params) {
|
|
56
|
+
const workerApi = await this.#assertWorkerApi();
|
|
57
|
+
return workerApi.get(sql, params);
|
|
58
|
+
}
|
|
59
|
+
async run(sql, params) {
|
|
60
|
+
const workerApi = await this.#assertWorkerApi();
|
|
61
|
+
return workerApi.run(sql, params);
|
|
62
|
+
}
|
|
63
|
+
async prepare(sql) {
|
|
64
|
+
const workerApi = await this.#assertWorkerApi();
|
|
65
|
+
const handle = await workerApi.prepare(sql);
|
|
66
|
+
return new AsyncSqliteStatement_ts_1.AsyncSqliteStatement(workerApi, handle);
|
|
67
|
+
}
|
|
68
|
+
async dispose() {
|
|
69
|
+
this.#disposePromise ??= this.#disposeWorker()
|
|
70
|
+
.finally(() => {
|
|
71
|
+
this.#disposePromise = undefined;
|
|
72
|
+
});
|
|
73
|
+
return this.#disposePromise;
|
|
74
|
+
}
|
|
75
|
+
/** @internal */
|
|
76
|
+
async assertWorker() {
|
|
77
|
+
if (this.#worker)
|
|
78
|
+
return this.#worker;
|
|
79
|
+
const { sqliteWorkerRunnerLocation = SqliteWorkerRunner_ts_1.SqliteWorkerRunner.location, ...dbParams } = this.#config;
|
|
80
|
+
this.#workerPromise ??= (0, index_ts_1.createSqliteWorker)({
|
|
81
|
+
...dbParams,
|
|
82
|
+
sqliteWorkerRunnerLocation
|
|
83
|
+
})
|
|
84
|
+
.then(worker => {
|
|
85
|
+
this.#worker = worker;
|
|
86
|
+
worker.once('error', this.handleWorkerError);
|
|
87
|
+
worker.once('exit', this.handleWorkerExit);
|
|
88
|
+
return worker;
|
|
89
|
+
});
|
|
90
|
+
return this.#workerPromise;
|
|
91
|
+
}
|
|
92
|
+
async #assertWorkerApi() {
|
|
93
|
+
if (this.#workerApi)
|
|
94
|
+
return this.#workerApi;
|
|
95
|
+
this.#workerApiPromise ??= this.assertWorker()
|
|
96
|
+
.then(worker => {
|
|
97
|
+
this.#workerApi = Comlink.wrap((0, index_ts_1.nodeEndpoint)(worker));
|
|
98
|
+
return this.#workerApi;
|
|
99
|
+
});
|
|
100
|
+
return this.#workerApiPromise;
|
|
101
|
+
}
|
|
102
|
+
async #disposeWorker() {
|
|
103
|
+
if (!this.#worker && !this.#workerPromise)
|
|
104
|
+
return;
|
|
105
|
+
const workerApi = this.#workerApi ?? await this.#workerApiPromise?.catch(() => undefined);
|
|
106
|
+
const worker = this.#worker ?? await this.#workerPromise?.catch(() => undefined);
|
|
107
|
+
this.#worker = undefined;
|
|
108
|
+
this.#workerPromise = undefined;
|
|
109
|
+
this.#workerApi = undefined;
|
|
110
|
+
this.#workerApiPromise = undefined;
|
|
111
|
+
workerApi?.[Comlink.releaseProxy]();
|
|
112
|
+
if (!worker)
|
|
113
|
+
return;
|
|
114
|
+
worker.off('error', this.handleWorkerError);
|
|
115
|
+
worker.off('exit', this.handleWorkerExit);
|
|
116
|
+
await worker.terminate();
|
|
117
|
+
}
|
|
118
|
+
handleWorkerError = (_err) => {
|
|
119
|
+
void this.dispose().catch(() => undefined);
|
|
120
|
+
};
|
|
121
|
+
handleWorkerExit = (_exitCode) => {
|
|
122
|
+
void this.dispose().catch(() => undefined);
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
exports.SqliteWorkerProxy = SqliteWorkerProxy;
|
|
126
|
+
//# sourceMappingURL=SqliteWorkerProxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SqliteWorkerProxy.js","sourceRoot":"","sources":["../../../src/sqlite-workers/SqliteWorkerProxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,132 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.SqliteWorkerRunner = void 0;
|
|
40
|
+
exports.resolveCurrentFileLocationFromStack = resolveCurrentFileLocationFromStack;
|
|
41
|
+
const node_worker_threads_1 = require("node:worker_threads");
|
|
42
|
+
const path = __importStar(require("node:path"));
|
|
43
|
+
const node_url_1 = require("node:url");
|
|
44
|
+
const Comlink = __importStar(require("comlink"));
|
|
45
|
+
const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
46
|
+
const protocol_ts_1 = require("./protocol.js");
|
|
47
|
+
const index_ts_1 = require("./utils/index.js");
|
|
48
|
+
const index_ts_2 = require("../utils/index.js");
|
|
49
|
+
function all(statement, params) {
|
|
50
|
+
return params === undefined ? statement.all() : statement.all(params);
|
|
51
|
+
}
|
|
52
|
+
function get(statement, params) {
|
|
53
|
+
return params === undefined ? statement.get() : statement.get(params);
|
|
54
|
+
}
|
|
55
|
+
function run(statement, params) {
|
|
56
|
+
return params === undefined ? statement.run() : statement.run(params);
|
|
57
|
+
}
|
|
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
|
+
class SqliteWorkerRunner {
|
|
66
|
+
static get location() {
|
|
67
|
+
if (typeof __filename !== 'undefined' && path.isAbsolute(__filename))
|
|
68
|
+
return __filename;
|
|
69
|
+
/* istanbul ignore next -- exercised by ESM consumers, not ts-jest's CJS transform */
|
|
70
|
+
return resolveCurrentFileLocationFromStack();
|
|
71
|
+
}
|
|
72
|
+
#db;
|
|
73
|
+
#nextStatementHandle = 1;
|
|
74
|
+
#statements = new Map();
|
|
75
|
+
constructor(dbParams) {
|
|
76
|
+
(0, index_ts_2.assertString)(dbParams.location, 'dbParams.location');
|
|
77
|
+
this.#db = new better_sqlite3_1.default(dbParams.location, {
|
|
78
|
+
readonly: true,
|
|
79
|
+
fileMustExist: true
|
|
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
|
+
}
|
|
86
|
+
}
|
|
87
|
+
all(sql, params) {
|
|
88
|
+
const statement = this.#db.prepare(sql);
|
|
89
|
+
return all(statement, params);
|
|
90
|
+
}
|
|
91
|
+
get(sql, params) {
|
|
92
|
+
const statement = this.#db.prepare(sql);
|
|
93
|
+
return get(statement, params);
|
|
94
|
+
}
|
|
95
|
+
run(sql, params) {
|
|
96
|
+
const statement = this.#db.prepare(sql);
|
|
97
|
+
return run(statement, params);
|
|
98
|
+
}
|
|
99
|
+
prepare(sql) {
|
|
100
|
+
const handle = this.#nextStatementHandle++;
|
|
101
|
+
this.#statements.set(handle, this.#db.prepare(sql));
|
|
102
|
+
return handle;
|
|
103
|
+
}
|
|
104
|
+
/** @internal */
|
|
105
|
+
allPrepared(handle, params) {
|
|
106
|
+
return all(this.#getStatement(handle), params);
|
|
107
|
+
}
|
|
108
|
+
/** @internal */
|
|
109
|
+
getPrepared(handle, params) {
|
|
110
|
+
return get(this.#getStatement(handle), params);
|
|
111
|
+
}
|
|
112
|
+
/** @internal */
|
|
113
|
+
runPrepared(handle, params) {
|
|
114
|
+
return run(this.#getStatement(handle), params);
|
|
115
|
+
}
|
|
116
|
+
#getStatement(handle) {
|
|
117
|
+
const statement = this.#statements.get(handle);
|
|
118
|
+
if (!statement)
|
|
119
|
+
throw new Error(`SQLite worker statement '${handle}' does not exist`);
|
|
120
|
+
return statement;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
exports.SqliteWorkerRunner = SqliteWorkerRunner;
|
|
124
|
+
/* istanbul ignore next -- this branch runs inside the spawned worker process */
|
|
125
|
+
if (node_worker_threads_1.parentPort) {
|
|
126
|
+
if (!(0, protocol_ts_1.isSqliteWorkerData)(node_worker_threads_1.workerData))
|
|
127
|
+
throw new Error('workerData does not contain SQLite worker db parameters');
|
|
128
|
+
const runner = new SqliteWorkerRunner(node_worker_threads_1.workerData.db);
|
|
129
|
+
node_worker_threads_1.parentPort.postMessage({ type: 'ready' });
|
|
130
|
+
Comlink.expose(runner, (0, index_ts_1.nodeEndpoint)(node_worker_threads_1.parentPort));
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=SqliteWorkerRunner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SqliteWorkerRunner.js","sourceRoot":"","sources":["../../../src/sqlite-workers/SqliteWorkerRunner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./AsyncSqliteStatement.js"), exports);
|
|
18
|
+
__exportStar(require("./SqliteWorkerProxy.js"), exports);
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sqlite-workers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4DAA0C;AAC1C,yDAAuC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isSqliteWorkerData = isSqliteWorkerData;
|
|
4
|
+
exports.isSqliteWorkerReadyMessage = isSqliteWorkerReadyMessage;
|
|
5
|
+
function isSqliteWorkerData(value) {
|
|
6
|
+
return typeof value === 'object' &&
|
|
7
|
+
value !== null &&
|
|
8
|
+
'db' in value &&
|
|
9
|
+
typeof value.db === 'object' &&
|
|
10
|
+
value.db !== null &&
|
|
11
|
+
'location' in value.db &&
|
|
12
|
+
typeof value.db.location === 'string';
|
|
13
|
+
}
|
|
14
|
+
function isSqliteWorkerReadyMessage(value) {
|
|
15
|
+
return typeof value === 'object' &&
|
|
16
|
+
value !== null &&
|
|
17
|
+
'type' in value &&
|
|
18
|
+
value.type === 'ready';
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/sqlite-workers/protocol.ts"],"names":[],"mappings":";;AAkDA,gDAQC;AAED,gEAKC;AAfD,SAAgB,kBAAkB,CAAC,KAAc;IAChD,OAAO,OAAO,KAAK,KAAK,QAAQ;QAC/B,KAAK,KAAK,IAAI;QACd,IAAI,IAAI,KAAK;QACb,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ;QAC5B,KAAK,CAAC,EAAE,KAAK,IAAI;QACjB,UAAU,IAAI,KAAK,CAAC,EAAE;QACtB,OAAO,KAAK,CAAC,EAAE,CAAC,QAAQ,KAAK,QAAQ,CAAC;AACxC,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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createSqliteWorker = createSqliteWorker;
|
|
4
|
+
const node_worker_threads_1 = require("node:worker_threads");
|
|
5
|
+
const protocol_ts_1 = require("../protocol.js");
|
|
6
|
+
const assert_ts_1 = require("../../utils/assert.js");
|
|
7
|
+
async function createSqliteWorker({ sqliteWorkerRunnerLocation, dbLocation: location, pragmas }) {
|
|
8
|
+
(0, assert_ts_1.assertString)(location, 'location');
|
|
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 } };
|
|
13
|
+
const worker = new node_worker_threads_1.Worker(sqliteWorkerRunnerLocation, { workerData });
|
|
14
|
+
await new Promise((resolve, reject) => {
|
|
15
|
+
let onError;
|
|
16
|
+
let onMessage;
|
|
17
|
+
let onExit;
|
|
18
|
+
const cleanup = () => {
|
|
19
|
+
worker.off('error', onError);
|
|
20
|
+
worker.off('message', onMessage);
|
|
21
|
+
worker.off('exit', onExit);
|
|
22
|
+
};
|
|
23
|
+
onMessage = (message) => {
|
|
24
|
+
if (!(0, protocol_ts_1.isSqliteWorkerReadyMessage)(message))
|
|
25
|
+
return;
|
|
26
|
+
cleanup();
|
|
27
|
+
resolve();
|
|
28
|
+
};
|
|
29
|
+
onError = (err) => {
|
|
30
|
+
cleanup();
|
|
31
|
+
reject(err);
|
|
32
|
+
};
|
|
33
|
+
onExit = (exitCode) => {
|
|
34
|
+
cleanup();
|
|
35
|
+
reject(new Error(`SQLite worker exited prematurely with exit code ${exitCode}`));
|
|
36
|
+
};
|
|
37
|
+
worker.on('message', onMessage);
|
|
38
|
+
worker.once('error', onError);
|
|
39
|
+
worker.once('exit', onExit);
|
|
40
|
+
});
|
|
41
|
+
return worker;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=createSqliteWorker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createSqliteWorker.js","sourceRoot":"","sources":["../../../../src/sqlite-workers/utils/createSqliteWorker.ts"],"names":[],"mappings":";;AAYA,gDAgDC;AA5DD,6DAA6C;AAC7C,gDAIwB;AACxB,qDAAwE;AAMjE,KAAK,UAAU,kBAAkB,CAAC,EACxC,0BAA0B,EAC1B,UAAU,EAAE,QAAQ,EACpB,OAAO,EACmB;IAC1B,IAAA,wBAAY,EAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACnC,IAAI,OAAO,EAAE,MAAM;QAClB,IAAA,6BAAiB,EAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACvC,IAAA,wBAAY,EAAC,0BAA0B,EAAE,4BAA4B,CAAC,CAAC;IAEvE,MAAM,UAAU,GAAqB,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC;IACnE,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,19 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./createSqliteWorker.js"), exports);
|
|
18
|
+
__exportStar(require("./nodeEndpoint.js"), exports);
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/sqlite-workers/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0DAAwC;AACxC,oDAAkC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.nodeEndpoint = void 0;
|
|
37
|
+
const node_module_1 = require("node:module");
|
|
38
|
+
const path = __importStar(require("node:path"));
|
|
39
|
+
// Jest (CJS) cannot import the ESM adapter;
|
|
40
|
+
// the UMD build is CJS/UMD but the default export shape varies by loader
|
|
41
|
+
const requireFromHere = (0, node_module_1.createRequire)(typeof __filename === 'undefined' || !path.isAbsolute(__filename) ?
|
|
42
|
+
`${process.cwd()}/package.json` :
|
|
43
|
+
__filename);
|
|
44
|
+
const nodeEndpointModule = requireFromHere('comlink/dist/umd/node-adapter');
|
|
45
|
+
exports.nodeEndpoint = (nodeEndpointModule?.default ?? nodeEndpointModule);
|
|
46
|
+
//# sourceMappingURL=nodeEndpoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodeEndpoint.js","sourceRoot":"","sources":["../../../../src/sqlite-workers/utils/nodeEndpoint.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAA4C;AAC5C,gDAAkC;AAKlC,4CAA4C;AAC5C,yEAAyE;AACzE,MAAM,eAAe,GAAG,IAAA,2BAAa,EAAC,OAAO,UAAU,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IACxG,GAAG,OAAO,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IACjC,UAAU,CAAC,CAAC;AACb,MAAM,kBAAkB,GAAG,eAAe,CAAC,+BAA+B,CAAC,CAAC;AAC/D,QAAA,YAAY,GACxB,CAAC,kBAAkB,EAAE,OAAO,IAAI,kBAAkB,CAAQ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CqrsContainerBuilder.js","sourceRoot":"","sources":["../../src/CqrsContainerBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"CqrsContainerBuilder.js","sourceRoot":"","sources":["../../src/CqrsContainerBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export class AsyncSqliteStatement {
|
|
2
|
+
#workerApi;
|
|
3
|
+
#handle;
|
|
4
|
+
constructor(workerApi, handle) {
|
|
5
|
+
this.#workerApi = workerApi;
|
|
6
|
+
this.#handle = handle;
|
|
7
|
+
}
|
|
8
|
+
async all(params) {
|
|
9
|
+
return this.#workerApi.allPrepared(this.#handle, params);
|
|
10
|
+
}
|
|
11
|
+
async get(params) {
|
|
12
|
+
return this.#workerApi.getPrepared(this.#handle, params);
|
|
13
|
+
}
|
|
14
|
+
async run(params) {
|
|
15
|
+
return this.#workerApi.runPrepared(this.#handle, params);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=AsyncSqliteStatement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AsyncSqliteStatement.js","sourceRoot":"","sources":["../../../src/sqlite-workers/AsyncSqliteStatement.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,oBAAoB;IAEvB,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,CAAO,MAAgC;QAC/C,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAoB,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,GAAG,CAAO,MAAgC;QAC/C,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAA8B,CAAC;IACvF,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,MAAgC;QACzC,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;CACD"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import * as Comlink from 'comlink';
|
|
2
|
+
import { createSqliteWorker, nodeEndpoint } from "./utils/index.js";
|
|
3
|
+
import { SqliteWorkerRunner } from "./SqliteWorkerRunner.js";
|
|
4
|
+
import { AsyncSqliteStatement } from "./AsyncSqliteStatement.js";
|
|
5
|
+
export class SqliteWorkerProxy {
|
|
6
|
+
#config;
|
|
7
|
+
#worker;
|
|
8
|
+
#workerPromise;
|
|
9
|
+
#workerApi;
|
|
10
|
+
#workerApiPromise;
|
|
11
|
+
#disposePromise;
|
|
12
|
+
constructor(config) {
|
|
13
|
+
this.#config = config;
|
|
14
|
+
}
|
|
15
|
+
async all(sql, params) {
|
|
16
|
+
const workerApi = await this.#assertWorkerApi();
|
|
17
|
+
return workerApi.all(sql, params);
|
|
18
|
+
}
|
|
19
|
+
async get(sql, params) {
|
|
20
|
+
const workerApi = await this.#assertWorkerApi();
|
|
21
|
+
return workerApi.get(sql, params);
|
|
22
|
+
}
|
|
23
|
+
async run(sql, params) {
|
|
24
|
+
const workerApi = await this.#assertWorkerApi();
|
|
25
|
+
return workerApi.run(sql, params);
|
|
26
|
+
}
|
|
27
|
+
async prepare(sql) {
|
|
28
|
+
const workerApi = await this.#assertWorkerApi();
|
|
29
|
+
const handle = await workerApi.prepare(sql);
|
|
30
|
+
return new AsyncSqliteStatement(workerApi, handle);
|
|
31
|
+
}
|
|
32
|
+
async dispose() {
|
|
33
|
+
this.#disposePromise ??= this.#disposeWorker()
|
|
34
|
+
.finally(() => {
|
|
35
|
+
this.#disposePromise = undefined;
|
|
36
|
+
});
|
|
37
|
+
return this.#disposePromise;
|
|
38
|
+
}
|
|
39
|
+
/** @internal */
|
|
40
|
+
async assertWorker() {
|
|
41
|
+
if (this.#worker)
|
|
42
|
+
return this.#worker;
|
|
43
|
+
const { sqliteWorkerRunnerLocation = SqliteWorkerRunner.location, ...dbParams } = this.#config;
|
|
44
|
+
this.#workerPromise ??= createSqliteWorker({
|
|
45
|
+
...dbParams,
|
|
46
|
+
sqliteWorkerRunnerLocation
|
|
47
|
+
})
|
|
48
|
+
.then(worker => {
|
|
49
|
+
this.#worker = worker;
|
|
50
|
+
worker.once('error', this.handleWorkerError);
|
|
51
|
+
worker.once('exit', this.handleWorkerExit);
|
|
52
|
+
return worker;
|
|
53
|
+
});
|
|
54
|
+
return this.#workerPromise;
|
|
55
|
+
}
|
|
56
|
+
async #assertWorkerApi() {
|
|
57
|
+
if (this.#workerApi)
|
|
58
|
+
return this.#workerApi;
|
|
59
|
+
this.#workerApiPromise ??= this.assertWorker()
|
|
60
|
+
.then(worker => {
|
|
61
|
+
this.#workerApi = Comlink.wrap(nodeEndpoint(worker));
|
|
62
|
+
return this.#workerApi;
|
|
63
|
+
});
|
|
64
|
+
return this.#workerApiPromise;
|
|
65
|
+
}
|
|
66
|
+
async #disposeWorker() {
|
|
67
|
+
if (!this.#worker && !this.#workerPromise)
|
|
68
|
+
return;
|
|
69
|
+
const workerApi = this.#workerApi ?? await this.#workerApiPromise?.catch(() => undefined);
|
|
70
|
+
const worker = this.#worker ?? await this.#workerPromise?.catch(() => undefined);
|
|
71
|
+
this.#worker = undefined;
|
|
72
|
+
this.#workerPromise = undefined;
|
|
73
|
+
this.#workerApi = undefined;
|
|
74
|
+
this.#workerApiPromise = undefined;
|
|
75
|
+
workerApi?.[Comlink.releaseProxy]();
|
|
76
|
+
if (!worker)
|
|
77
|
+
return;
|
|
78
|
+
worker.off('error', this.handleWorkerError);
|
|
79
|
+
worker.off('exit', this.handleWorkerExit);
|
|
80
|
+
await worker.terminate();
|
|
81
|
+
}
|
|
82
|
+
handleWorkerError = (_err) => {
|
|
83
|
+
void this.dispose().catch(() => undefined);
|
|
84
|
+
};
|
|
85
|
+
handleWorkerExit = (_exitCode) => {
|
|
86
|
+
void this.dispose().catch(() => undefined);
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=SqliteWorkerProxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SqliteWorkerProxy.js","sourceRoot":"","sources":["../../../src/sqlite-workers/SqliteWorkerProxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { parentPort, workerData } from 'node:worker_threads';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import * as Comlink from 'comlink';
|
|
5
|
+
import Database from 'better-sqlite3';
|
|
6
|
+
import { isSqliteWorkerData } from "./protocol.js";
|
|
7
|
+
import { nodeEndpoint } from "./utils/index.js";
|
|
8
|
+
import { assertString, assertStringArray } from "../utils/index.js";
|
|
9
|
+
function all(statement, params) {
|
|
10
|
+
return params === undefined ? statement.all() : statement.all(params);
|
|
11
|
+
}
|
|
12
|
+
function get(statement, params) {
|
|
13
|
+
return params === undefined ? statement.get() : statement.get(params);
|
|
14
|
+
}
|
|
15
|
+
function run(statement, params) {
|
|
16
|
+
return params === undefined ? statement.run() : statement.run(params);
|
|
17
|
+
}
|
|
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
|
+
export class SqliteWorkerRunner {
|
|
26
|
+
static get location() {
|
|
27
|
+
if (typeof __filename !== 'undefined' && path.isAbsolute(__filename))
|
|
28
|
+
return __filename;
|
|
29
|
+
/* istanbul ignore next -- exercised by ESM consumers, not ts-jest's CJS transform */
|
|
30
|
+
return resolveCurrentFileLocationFromStack();
|
|
31
|
+
}
|
|
32
|
+
#db;
|
|
33
|
+
#nextStatementHandle = 1;
|
|
34
|
+
#statements = new Map();
|
|
35
|
+
constructor(dbParams) {
|
|
36
|
+
assertString(dbParams.location, 'dbParams.location');
|
|
37
|
+
this.#db = new Database(dbParams.location, {
|
|
38
|
+
readonly: true,
|
|
39
|
+
fileMustExist: true
|
|
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
|
+
}
|
|
46
|
+
}
|
|
47
|
+
all(sql, params) {
|
|
48
|
+
const statement = this.#db.prepare(sql);
|
|
49
|
+
return all(statement, params);
|
|
50
|
+
}
|
|
51
|
+
get(sql, params) {
|
|
52
|
+
const statement = this.#db.prepare(sql);
|
|
53
|
+
return get(statement, params);
|
|
54
|
+
}
|
|
55
|
+
run(sql, params) {
|
|
56
|
+
const statement = this.#db.prepare(sql);
|
|
57
|
+
return run(statement, params);
|
|
58
|
+
}
|
|
59
|
+
prepare(sql) {
|
|
60
|
+
const handle = this.#nextStatementHandle++;
|
|
61
|
+
this.#statements.set(handle, this.#db.prepare(sql));
|
|
62
|
+
return handle;
|
|
63
|
+
}
|
|
64
|
+
/** @internal */
|
|
65
|
+
allPrepared(handle, params) {
|
|
66
|
+
return all(this.#getStatement(handle), params);
|
|
67
|
+
}
|
|
68
|
+
/** @internal */
|
|
69
|
+
getPrepared(handle, params) {
|
|
70
|
+
return get(this.#getStatement(handle), params);
|
|
71
|
+
}
|
|
72
|
+
/** @internal */
|
|
73
|
+
runPrepared(handle, params) {
|
|
74
|
+
return run(this.#getStatement(handle), params);
|
|
75
|
+
}
|
|
76
|
+
#getStatement(handle) {
|
|
77
|
+
const statement = this.#statements.get(handle);
|
|
78
|
+
if (!statement)
|
|
79
|
+
throw new Error(`SQLite worker statement '${handle}' does not exist`);
|
|
80
|
+
return statement;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/* istanbul ignore next -- this branch runs inside the spawned worker process */
|
|
84
|
+
if (parentPort) {
|
|
85
|
+
if (!isSqliteWorkerData(workerData))
|
|
86
|
+
throw new Error('workerData does not contain SQLite worker db parameters');
|
|
87
|
+
const runner = new SqliteWorkerRunner(workerData.db);
|
|
88
|
+
parentPort.postMessage({ type: 'ready' });
|
|
89
|
+
Comlink.expose(runner, nodeEndpoint(parentPort));
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=SqliteWorkerRunner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SqliteWorkerRunner.js","sourceRoot":"","sources":["../../../src/sqlite-workers/SqliteWorkerRunner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sqlite-workers/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export function isSqliteWorkerData(value) {
|
|
2
|
+
return typeof value === 'object' &&
|
|
3
|
+
value !== null &&
|
|
4
|
+
'db' in value &&
|
|
5
|
+
typeof value.db === 'object' &&
|
|
6
|
+
value.db !== null &&
|
|
7
|
+
'location' in value.db &&
|
|
8
|
+
typeof value.db.location === 'string';
|
|
9
|
+
}
|
|
10
|
+
export function isSqliteWorkerReadyMessage(value) {
|
|
11
|
+
return typeof value === 'object' &&
|
|
12
|
+
value !== null &&
|
|
13
|
+
'type' in value &&
|
|
14
|
+
value.type === 'ready';
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/sqlite-workers/protocol.ts"],"names":[],"mappings":"AAkDA,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAChD,OAAO,OAAO,KAAK,KAAK,QAAQ;QAC/B,KAAK,KAAK,IAAI;QACd,IAAI,IAAI,KAAK;QACb,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ;QAC5B,KAAK,CAAC,EAAE,KAAK,IAAI;QACjB,UAAU,IAAI,KAAK,CAAC,EAAE;QACtB,OAAO,KAAK,CAAC,EAAE,CAAC,QAAQ,KAAK,QAAQ,CAAC;AACxC,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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Worker } from 'node:worker_threads';
|
|
2
|
+
import { isSqliteWorkerReadyMessage } from "../protocol.js";
|
|
3
|
+
import { assertString, assertStringArray } from "../../utils/assert.js";
|
|
4
|
+
export async function createSqliteWorker({ sqliteWorkerRunnerLocation, dbLocation: location, pragmas }) {
|
|
5
|
+
assertString(location, 'location');
|
|
6
|
+
if (pragmas?.length)
|
|
7
|
+
assertStringArray(pragmas, 'pragmas');
|
|
8
|
+
assertString(sqliteWorkerRunnerLocation, 'sqliteWorkerRunnerLocation');
|
|
9
|
+
const workerData = { db: { location, pragmas } };
|
|
10
|
+
const worker = new Worker(sqliteWorkerRunnerLocation, { workerData });
|
|
11
|
+
await new Promise((resolve, reject) => {
|
|
12
|
+
let onError;
|
|
13
|
+
let onMessage;
|
|
14
|
+
let onExit;
|
|
15
|
+
const cleanup = () => {
|
|
16
|
+
worker.off('error', onError);
|
|
17
|
+
worker.off('message', onMessage);
|
|
18
|
+
worker.off('exit', onExit);
|
|
19
|
+
};
|
|
20
|
+
onMessage = (message) => {
|
|
21
|
+
if (!isSqliteWorkerReadyMessage(message))
|
|
22
|
+
return;
|
|
23
|
+
cleanup();
|
|
24
|
+
resolve();
|
|
25
|
+
};
|
|
26
|
+
onError = (err) => {
|
|
27
|
+
cleanup();
|
|
28
|
+
reject(err);
|
|
29
|
+
};
|
|
30
|
+
onExit = (exitCode) => {
|
|
31
|
+
cleanup();
|
|
32
|
+
reject(new Error(`SQLite worker exited prematurely with exit code ${exitCode}`));
|
|
33
|
+
};
|
|
34
|
+
worker.on('message', onMessage);
|
|
35
|
+
worker.once('error', onError);
|
|
36
|
+
worker.once('exit', onExit);
|
|
37
|
+
});
|
|
38
|
+
return worker;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=createSqliteWorker.js.map
|
|
@@ -0,0 +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,EACN,0BAA0B,EAG1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAMxE,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EACxC,0BAA0B,EAC1B,UAAU,EAAE,QAAQ,EACpB,OAAO,EACmB;IAC1B,YAAY,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACnC,IAAI,OAAO,EAAE,MAAM;QAClB,iBAAiB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACvC,YAAY,CAAC,0BAA0B,EAAE,4BAA4B,CAAC,CAAC;IAEvE,MAAM,UAAU,GAAqB,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC;IACnE,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 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/sqlite-workers/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
// Jest (CJS) cannot import the ESM adapter;
|
|
4
|
+
// the UMD build is CJS/UMD but the default export shape varies by loader
|
|
5
|
+
const requireFromHere = createRequire(typeof __filename === 'undefined' || !path.isAbsolute(__filename) ?
|
|
6
|
+
`${process.cwd()}/package.json` :
|
|
7
|
+
__filename);
|
|
8
|
+
const nodeEndpointModule = requireFromHere('comlink/dist/umd/node-adapter');
|
|
9
|
+
export const nodeEndpoint = (nodeEndpointModule?.default ?? nodeEndpointModule);
|
|
10
|
+
//# sourceMappingURL=nodeEndpoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodeEndpoint.js","sourceRoot":"","sources":["../../../../src/sqlite-workers/utils/nodeEndpoint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAKlC,4CAA4C;AAC5C,yEAAyE;AACzE,MAAM,eAAe,GAAG,aAAa,CAAC,OAAO,UAAU,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IACxG,GAAG,OAAO,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IACjC,UAAU,CAAC,CAAC;AACb,MAAM,kBAAkB,GAAG,eAAe,CAAC,+BAA+B,CAAC,CAAC;AAC5E,MAAM,CAAC,MAAM,YAAY,GACxB,CAAC,kBAAkB,EAAE,OAAO,IAAI,kBAAkB,CAAQ,CAAC"}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { ContainerBuilder, type
|
|
1
|
+
import { ContainerBuilder, type ClassOrFactory } from 'di0';
|
|
2
2
|
import { type IAggregateConstructor, type ICommandHandler, type IContainer, type IEventReceptor, type IProjection, type ISagaConstructor } from './interfaces/index.ts';
|
|
3
3
|
export declare class CqrsContainerBuilder<TContainerInterface extends IContainer = IContainer> extends ContainerBuilder<TContainerInterface> {
|
|
4
4
|
constructor(options?: ConstructorParameters<typeof ContainerBuilder>[0]);
|
|
5
5
|
/** Register command handler, which will be subscribed to commandBus upon instance creation */
|
|
6
|
-
registerCommandHandler(typeOrFactory: ClassOrFactory<ICommandHandler, TContainerInterface>): TypeConfig<ICommandHandler, TContainerInterface>;
|
|
6
|
+
registerCommandHandler(typeOrFactory: ClassOrFactory<ICommandHandler, TContainerInterface>): import("di0").TypeConfig<ICommandHandler, TContainerInterface>;
|
|
7
7
|
/** Register event receptor, which will be subscribed to eventStore upon instance creation */
|
|
8
|
-
registerEventReceptor(typeOrFactory: ClassOrFactory<IEventReceptor, TContainerInterface>): TypeConfig<IEventReceptor, TContainerInterface>;
|
|
8
|
+
registerEventReceptor(typeOrFactory: ClassOrFactory<IEventReceptor, TContainerInterface>): import("di0").TypeConfig<IEventReceptor, TContainerInterface>;
|
|
9
9
|
/**
|
|
10
10
|
* Register projection, which will expose view and will be subscribed
|
|
11
11
|
* to eventStore and will restore its state upon instance creation
|
|
12
12
|
*/
|
|
13
|
-
registerProjection(typeOrFactory: ClassOrFactory<IProjection<any>, TContainerInterface>, exposedViewAlias?: keyof TContainerInterface): TypeConfig<IProjection<any>, TContainerInterface>;
|
|
13
|
+
registerProjection(typeOrFactory: ClassOrFactory<IProjection<any>, TContainerInterface>, exposedViewAlias?: keyof TContainerInterface): import("di0").TypeConfig<IProjection<any>, TContainerInterface>;
|
|
14
14
|
/** Register aggregate type in the container */
|
|
15
|
-
registerAggregate(AggregateType: IAggregateConstructor<any, any>): TypeConfig<ICommandHandler, TContainerInterface>;
|
|
15
|
+
registerAggregate(AggregateType: IAggregateConstructor<any, any>): import("di0").TypeConfig<ICommandHandler, TContainerInterface>;
|
|
16
16
|
/** Register saga type in the container */
|
|
17
|
-
registerSaga(SagaType: ISagaConstructor): TypeConfig<IEventReceptor, TContainerInterface>;
|
|
17
|
+
registerSaga(SagaType: ISagaConstructor): import("di0").TypeConfig<IEventReceptor, TContainerInterface>;
|
|
18
18
|
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as Comlink from 'comlink';
|
|
2
|
+
import type { SqliteRunResult, ISqliteWorkerApi, SqliteWorkerQueryParams, SqliteWorkerStatementHandle } from './protocol.ts';
|
|
3
|
+
export declare class AsyncSqliteStatement {
|
|
4
|
+
#private;
|
|
5
|
+
constructor(workerApi: Comlink.Remote<ISqliteWorkerApi>, handle: SqliteWorkerStatementHandle);
|
|
6
|
+
all<TRow>(params?: SqliteWorkerQueryParams): Promise<TRow[]>;
|
|
7
|
+
get<TRow>(params?: SqliteWorkerQueryParams): Promise<TRow | undefined>;
|
|
8
|
+
run(params?: SqliteWorkerQueryParams): Promise<SqliteRunResult>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { SqliteWorkerProxyParams, SqliteWorkerQueryParams, SqliteRunResult } from './protocol.ts';
|
|
2
|
+
import { AsyncSqliteStatement } from './AsyncSqliteStatement.ts';
|
|
3
|
+
export declare class SqliteWorkerProxy {
|
|
4
|
+
#private;
|
|
5
|
+
constructor(config: SqliteWorkerProxyParams);
|
|
6
|
+
all<TRow>(sql: string, params?: SqliteWorkerQueryParams): Promise<TRow[]>;
|
|
7
|
+
get<TRow>(sql: string, params?: SqliteWorkerQueryParams): Promise<TRow | undefined>;
|
|
8
|
+
run(sql: string, params?: SqliteWorkerQueryParams): Promise<SqliteRunResult>;
|
|
9
|
+
prepare(sql: string): Promise<AsyncSqliteStatement>;
|
|
10
|
+
dispose(): Promise<void>;
|
|
11
|
+
handleWorkerError: (_err: Error) => void;
|
|
12
|
+
handleWorkerExit: (_exitCode: number) => void;
|
|
13
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type SqliteRunResult, type ISqliteWorkerApi, type SqliteWorkerRunnerDbParams, type SqliteWorkerQueryParams, type SqliteWorkerStatementHandle } from './protocol.ts';
|
|
2
|
+
export declare class SqliteWorkerRunner implements ISqliteWorkerApi {
|
|
3
|
+
#private;
|
|
4
|
+
static get location(): string;
|
|
5
|
+
constructor(dbParams: SqliteWorkerRunnerDbParams);
|
|
6
|
+
all<TRow>(sql: string, params?: SqliteWorkerQueryParams): TRow[];
|
|
7
|
+
get<TRow>(sql: string, params?: SqliteWorkerQueryParams): TRow | undefined;
|
|
8
|
+
run(sql: string, params?: SqliteWorkerQueryParams): SqliteRunResult;
|
|
9
|
+
prepare(sql: string): SqliteWorkerStatementHandle;
|
|
10
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Statement } from 'better-sqlite3';
|
|
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
|
+
/** Worker runner script location; defaults to the bundled runner. */
|
|
8
|
+
sqliteWorkerRunnerLocation?: string | URL;
|
|
9
|
+
};
|
|
10
|
+
export type SqliteWorkerRunnerDbParams = {
|
|
11
|
+
location: string;
|
|
12
|
+
pragmas?: readonly string[];
|
|
13
|
+
};
|
|
14
|
+
export type SqliteWorkerData = {
|
|
15
|
+
db: SqliteWorkerRunnerDbParams;
|
|
16
|
+
};
|
|
17
|
+
export type SqliteWorkerQueryParams = readonly unknown[] | Record<string, unknown>;
|
|
18
|
+
export type SqliteWorkerStatementHandle = number;
|
|
19
|
+
export type SqliteRunResult = ReturnType<Statement['run']>;
|
|
20
|
+
export interface ISqliteWorkerApi {
|
|
21
|
+
all<TRow>(sql: string, params?: SqliteWorkerQueryParams): TRow[];
|
|
22
|
+
get<TRow>(sql: string, params?: SqliteWorkerQueryParams): TRow | undefined;
|
|
23
|
+
run(sql: string, params?: SqliteWorkerQueryParams): SqliteRunResult;
|
|
24
|
+
prepare(sql: string): SqliteWorkerStatementHandle;
|
|
25
|
+
}
|
|
26
|
+
export type SqliteWorkerReadyMessage = {
|
|
27
|
+
type: 'ready';
|
|
28
|
+
};
|
|
29
|
+
export declare function isSqliteWorkerData(value: unknown): value is SqliteWorkerData;
|
|
30
|
+
export declare function isSqliteWorkerReadyMessage(value: unknown): value is SqliteWorkerReadyMessage;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Worker } from 'node:worker_threads';
|
|
2
|
+
import { type SqliteWorkerProxyParams } from '../protocol.ts';
|
|
3
|
+
type CreateSqliteWorkerParams = SqliteWorkerProxyParams & {
|
|
4
|
+
sqliteWorkerRunnerLocation: string | URL;
|
|
5
|
+
};
|
|
6
|
+
export declare function createSqliteWorker({ sqliteWorkerRunnerLocation, dbLocation: location, pragmas }: CreateSqliteWorkerParams): Promise<Worker>;
|
|
7
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "node-cqrs",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0-alpha.0",
|
|
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": [
|
|
@@ -48,6 +48,11 @@
|
|
|
48
48
|
"require": "./dist/cjs/sqlite/index.js",
|
|
49
49
|
"import": "./dist/esm/sqlite/index.js"
|
|
50
50
|
},
|
|
51
|
+
"./sqlite-workers": {
|
|
52
|
+
"types": "./dist/types/sqlite-workers/index.d.ts",
|
|
53
|
+
"require": "./dist/cjs/sqlite-workers/index.js",
|
|
54
|
+
"import": "./dist/esm/sqlite-workers/index.js"
|
|
55
|
+
},
|
|
51
56
|
"./redis": {
|
|
52
57
|
"types": "./dist/types/redis/index.d.ts",
|
|
53
58
|
"require": "./dist/cjs/redis/index.js",
|