node-cqrs 1.2.0-alpha.1 → 1.2.0-alpha.3
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 +38 -10
- package/README.md +20 -3
- package/dist/cjs/shared/worker-utils/createWorker.js +85 -0
- package/dist/cjs/shared/worker-utils/createWorker.js.map +1 -0
- package/dist/cjs/shared/worker-utils/index.js +19 -0
- package/dist/cjs/shared/worker-utils/index.js.map +1 -0
- package/dist/cjs/shared/worker-utils/nodeEndpoint.js.map +1 -0
- package/dist/cjs/sqlite-workers/SqliteWorkerProxy.js +8 -2
- package/dist/cjs/sqlite-workers/SqliteWorkerProxy.js.map +1 -1
- package/dist/cjs/sqlite-workers/SqliteWorkerRunner.js +2 -1
- package/dist/cjs/sqlite-workers/SqliteWorkerRunner.js.map +1 -1
- package/dist/cjs/sqlite-workers/protocol.js +0 -7
- package/dist/cjs/sqlite-workers/protocol.js.map +1 -1
- package/dist/cjs/sqlite-workers/utils/index.js +0 -2
- package/dist/cjs/sqlite-workers/utils/index.js.map +1 -1
- package/dist/cjs/workers/AbstractWorkerProjection.js +5 -4
- package/dist/cjs/workers/AbstractWorkerProjection.js.map +1 -1
- package/dist/cjs/workers/WorkerProxyProjection.js +25 -8
- package/dist/cjs/workers/WorkerProxyProjection.js.map +1 -1
- package/dist/cjs/workers/utils/createWorker.js +8 -77
- package/dist/cjs/workers/utils/createWorker.js.map +1 -1
- package/dist/cjs/workers/utils/createWorkerInstance.js +1 -1
- package/dist/cjs/workers/utils/createWorkerInstance.js.map +1 -1
- package/dist/cjs/workers/utils/index.js +0 -2
- package/dist/cjs/workers/utils/index.js.map +1 -1
- package/dist/esm/shared/worker-utils/createWorker.js +49 -0
- package/dist/esm/shared/worker-utils/createWorker.js.map +1 -0
- package/dist/esm/shared/worker-utils/index.js +3 -0
- package/dist/esm/shared/worker-utils/index.js.map +1 -0
- package/dist/esm/shared/worker-utils/nodeEndpoint.js.map +1 -0
- package/dist/esm/sqlite-workers/SqliteWorkerProxy.js +8 -2
- package/dist/esm/sqlite-workers/SqliteWorkerProxy.js.map +1 -1
- package/dist/esm/sqlite-workers/SqliteWorkerRunner.js +2 -1
- package/dist/esm/sqlite-workers/SqliteWorkerRunner.js.map +1 -1
- package/dist/esm/sqlite-workers/protocol.js +0 -6
- package/dist/esm/sqlite-workers/protocol.js.map +1 -1
- package/dist/esm/sqlite-workers/utils/index.js +0 -2
- package/dist/esm/sqlite-workers/utils/index.js.map +1 -1
- package/dist/esm/workers/AbstractWorkerProjection.js +5 -4
- package/dist/esm/workers/AbstractWorkerProjection.js.map +1 -1
- package/dist/esm/workers/WorkerProxyProjection.js +25 -8
- package/dist/esm/workers/WorkerProxyProjection.js.map +1 -1
- package/dist/esm/workers/utils/createWorker.js +8 -44
- package/dist/esm/workers/utils/createWorker.js.map +1 -1
- package/dist/esm/workers/utils/createWorkerInstance.js +1 -1
- package/dist/esm/workers/utils/createWorkerInstance.js.map +1 -1
- package/dist/esm/workers/utils/index.js +0 -2
- package/dist/esm/workers/utils/index.js.map +1 -1
- package/dist/types/shared/worker-utils/createWorker.d.ts +14 -0
- package/dist/types/shared/worker-utils/index.d.ts +2 -0
- package/dist/types/{sqlite-workers/utils → shared/worker-utils}/nodeEndpoint.d.ts +1 -1
- package/dist/types/sqlite-workers/protocol.d.ts +0 -1
- package/dist/types/sqlite-workers/utils/index.d.ts +0 -2
- package/dist/types/workers/WorkerProxyProjection.d.ts +9 -3
- package/dist/types/workers/utils/createWorker.d.ts +6 -6
- package/dist/types/workers/utils/index.d.ts +0 -2
- package/package.json +1 -1
- package/dist/cjs/sqlite-workers/utils/createSqliteWorker.js +0 -39
- package/dist/cjs/sqlite-workers/utils/createSqliteWorker.js.map +0 -1
- package/dist/cjs/sqlite-workers/utils/nodeEndpoint.js.map +0 -1
- package/dist/cjs/workers/utils/nodeEndpoint.js +0 -8
- package/dist/cjs/workers/utils/nodeEndpoint.js.map +0 -1
- package/dist/esm/sqlite-workers/utils/createSqliteWorker.js +0 -36
- package/dist/esm/sqlite-workers/utils/createSqliteWorker.js.map +0 -1
- package/dist/esm/sqlite-workers/utils/nodeEndpoint.js.map +0 -1
- package/dist/esm/workers/utils/nodeEndpoint.js +0 -5
- package/dist/esm/workers/utils/nodeEndpoint.js.map +0 -1
- package/dist/types/sqlite-workers/utils/createSqliteWorker.d.ts +0 -3
- package/dist/types/workers/utils/nodeEndpoint.d.ts +0 -2
- /package/dist/cjs/{sqlite-workers/utils → shared/worker-utils}/nodeEndpoint.js +0 -0
- /package/dist/esm/{sqlite-workers/utils → shared/worker-utils}/nodeEndpoint.js +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
# [1.2.0-alpha.3](https://github.com/snatalenko/node-cqrs/compare/v1.1.0...v1.2.0-alpha.3) (2026-05-26)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Internal Fixes
|
|
5
|
+
|
|
6
|
+
* Move duplicate worker utils into src/shared/worker-utils/ ([8b3c383](https://github.com/snatalenko/node-cqrs/commit/8b3c383be41edd40fcedfbb663104e4f5d530bcc))
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
# [1.2.0-alpha.2](https://github.com/snatalenko/node-cqrs/compare/v1.2.0-alpha.1...v1.2.0-alpha.2) (2026-05-04)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
1
13
|
# [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
14
|
|
|
3
15
|
|
|
@@ -6,7 +18,7 @@
|
|
|
6
18
|
* Allow SQLite worker connections to be created with a custom factory ([fb39cf1](https://github.com/snatalenko/node-cqrs/commit/fb39cf1e3be51c279de6571262c360bf057dea28))
|
|
7
19
|
|
|
8
20
|
|
|
9
|
-
# [1.2.0-alpha.0](https://github.com/snatalenko/node-cqrs/compare/v1.
|
|
21
|
+
# [1.2.0-alpha.0](https://github.com/snatalenko/node-cqrs/compare/v1.0.2...v1.2.0-alpha.0) (2026-04-27)
|
|
10
22
|
|
|
11
23
|
|
|
12
24
|
### Features
|
|
@@ -14,31 +26,39 @@
|
|
|
14
26
|
* Add sqlite-workers submodule for async SQLite reads ([1987a40](https://github.com/snatalenko/node-cqrs/commit/1987a403fdfd38a57cf4b2c82bc79e88568bc32e))
|
|
15
27
|
|
|
16
28
|
|
|
17
|
-
# [1.1.0
|
|
29
|
+
# [1.1.0](https://github.com/snatalenko/node-cqrs/compare/v1.2.0-alpha.2...v1.1.0) (2026-05-26)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
### Documentation
|
|
33
|
+
|
|
34
|
+
* Fix homepage styles cdn ([6ab1ff2](https://github.com/snatalenko/node-cqrs/commit/6ab1ff28246b4496a7fc0b2911c01c8960f9959e))
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
# [1.2.0-alpha.2](https://github.com/snatalenko/node-cqrs/compare/v1.2.0-alpha.1...v1.2.0-alpha.2) (2026-05-04)
|
|
18
38
|
|
|
19
39
|
|
|
20
40
|
### Changes
|
|
21
41
|
|
|
22
|
-
*
|
|
42
|
+
* Deliver events to worker in batches during restoring phase ([212e353](https://github.com/snatalenko/node-cqrs/commit/212e3535b22e6a763a7e0fd1f81036f9ef776ec0))
|
|
23
43
|
|
|
24
|
-
###
|
|
44
|
+
### Documentation
|
|
25
45
|
|
|
26
|
-
* Add
|
|
46
|
+
* Add index.html for publishing with gh pages ([cac88ed](https://github.com/snatalenko/node-cqrs/commit/cac88edaaef1c9457af48fd7477daf8ae624eb43))
|
|
27
47
|
|
|
28
48
|
### Internal Fixes
|
|
29
49
|
|
|
30
|
-
*
|
|
50
|
+
* Allow disposing worker projection proxy more than once ([768f73a](https://github.com/snatalenko/node-cqrs/commit/768f73a28a8a1a572449122f5046c102435dd5bd))
|
|
31
51
|
|
|
32
52
|
|
|
33
|
-
# [1.
|
|
53
|
+
# [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)
|
|
34
54
|
|
|
35
55
|
|
|
36
|
-
###
|
|
56
|
+
### Features
|
|
37
57
|
|
|
38
|
-
*
|
|
58
|
+
* Allow SQLite worker connections to be created with a custom factory ([fb39cf1](https://github.com/snatalenko/node-cqrs/commit/fb39cf1e3be51c279de6571262c360bf057dea28))
|
|
39
59
|
|
|
40
60
|
|
|
41
|
-
# [1.
|
|
61
|
+
# [1.2.0-alpha.0](https://github.com/snatalenko/node-cqrs/compare/v1.0.2...v1.2.0-alpha.0) (2026-04-27)
|
|
42
62
|
|
|
43
63
|
|
|
44
64
|
### Features
|
|
@@ -50,6 +70,7 @@
|
|
|
50
70
|
* MongoDB-backed event storage ([53fb5e1](https://github.com/snatalenko/node-cqrs/commit/53fb5e1c0d7a027f9afebf88f8d3d516d06c3c48))
|
|
51
71
|
* MongoDb-backed view model (`MongoObjectView`, `AbstractMongoObjectProjection`) ([4995bfe](https://github.com/snatalenko/node-cqrs/commit/4995bfe2daf53372d3e7e36d59ee103219ad6a35))
|
|
52
72
|
* Option for rabbitmq queue-level message TTL ([d4461e6](https://github.com/snatalenko/node-cqrs/commit/d4461e68b0e69696340bfdb80c7f947146bca08b))
|
|
73
|
+
* Add sqlite-workers submodule for async SQLite reads ([1987a40](https://github.com/snatalenko/node-cqrs/commit/1987a403fdfd38a57cf4b2c82bc79e88568bc32e))
|
|
53
74
|
|
|
54
75
|
### Changes
|
|
55
76
|
|
|
@@ -58,6 +79,7 @@
|
|
|
58
79
|
* Use `Identifier` as id type in redis and sqlite views ([dfbe964](https://github.com/snatalenko/node-cqrs/commit/dfbe9648a8ea8e7e5550aa40e0094ca8af1758ef))
|
|
59
80
|
* Add default queueName for RabbitMqCommandBus ([ee4b5a1](https://github.com/snatalenko/node-cqrs/commit/ee4b5a170e44db6227e76d2ffb1695b6dfaef6e4))
|
|
60
81
|
* Add error handling and drain functionality to event publishing process ([d23ea62](https://github.com/snatalenko/node-cqrs/commit/d23ea621c8a71e2cda4baaf091166534c4f5af2e))
|
|
82
|
+
* Allow extra command parameters to be passed to AbstractAggregate handler as 3rd argument ([ae11b7e](https://github.com/snatalenko/node-cqrs/commit/ae11b7eb709e658fbc910aadb1376bc8a3fade1b))
|
|
61
83
|
|
|
62
84
|
### Fixes
|
|
63
85
|
|
|
@@ -71,11 +93,17 @@
|
|
|
71
93
|
* Detailed sqlite and rabbitmq instructions ([dd242fd](https://github.com/snatalenko/node-cqrs/commit/dd242fd73018bcfa0583ab1ddd12518c4f3a4777))
|
|
72
94
|
* Minor spec update ([6a2883a](https://github.com/snatalenko/node-cqrs/commit/6a2883adc7b6a7a48bb5f62562c2242826860e89))
|
|
73
95
|
|
|
96
|
+
### Build System
|
|
97
|
+
|
|
98
|
+
* Add "rebuild" npm script ([2e5e977](https://github.com/snatalenko/node-cqrs/commit/2e5e9771f760d15cc1cbbc2f68bc680cd6b97de3))
|
|
99
|
+
|
|
74
100
|
### Internal Fixes
|
|
75
101
|
|
|
76
102
|
* Rename telemetry metadata span field to `otelSpan`, enhance typings ([2ca2494](https://github.com/snatalenko/node-cqrs/commit/2ca2494625ea8dde11f86fdf078d85c1d848d10a))
|
|
77
103
|
* Compiled AbstractWorkerProjection type compatibility ([bf8ca08](https://github.com/snatalenko/node-cqrs/commit/bf8ca08a09faacb4cbf0da141dd4f09d4647e86e))
|
|
78
104
|
* Enhance message payload typing ([7911acc](https://github.com/snatalenko/node-cqrs/commit/7911accce07cba7c30ae4f5825a6e26e0934b8dc))
|
|
105
|
+
* Expose `viewLocker` on WorkerProxyProjection ([628fbe3](https://github.com/snatalenko/node-cqrs/commit/628fbe3c7af141443092cdf1fb6c0824c19a6324))
|
|
106
|
+
* Make `getHandler` to throw error if handler is not defined ([ecbd73e](https://github.com/snatalenko/node-cqrs/commit/ecbd73e0604c74eb85a946b15a4b872b688da01e))
|
|
79
107
|
|
|
80
108
|
|
|
81
109
|
## [1.0.2](https://github.com/snatalenko/node-cqrs/compare/v1.0.1...v1.0.2) (2026-04-03)
|
package/README.md
CHANGED
|
@@ -9,11 +9,16 @@ node-cqrs
|
|
|
9
9
|
[](https://github.com/snatalenko/node-cqrs)
|
|
10
10
|
[](https://github.com/snatalenko/node-cqrs/actions/workflows/ci.yml)
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
Building blocks for CQRS/ES, inspired by Lokad.CQRS.
|
|
13
|
+
|
|
14
|
+
<p align="center">
|
|
15
|
+
<img src="docs/images/logo.svg" width="250" />
|
|
16
|
+
</p>
|
|
13
17
|
|
|
14
18
|
## Features
|
|
15
19
|
|
|
16
20
|
CQRS and Event Sourcing are simple in a single process ([example](examples/user-domain-framework-free/index.ts)), but a minefield in the cloud.
|
|
21
|
+
|
|
17
22
|
node-cqrs handles the "boring but hard" distributed plumbing - concurrency, message delivery, projections, and rehydration - so you can focus on your domain logic.
|
|
18
23
|
|
|
19
24
|
- **Reliable Consistency**: Per-aggregate FIFO handling and conflict-safe writes with optimistic concurrency.
|
|
@@ -21,9 +26,9 @@ node-cqrs handles the "boring but hard" distributed plumbing - concurrency, mess
|
|
|
21
26
|
- **Fast Rehydration**: Automatic snapshotting and selective event restores.
|
|
22
27
|
- **Distributed Sagas**: Built-in event correlation and origin propagation for complex workflows.
|
|
23
28
|
- **Smart Pipelines**: Pluggable dispatching with back-pressure and concurrency limits.
|
|
24
|
-
- **Pluggable by Design**: Thin interfaces on every component - swap any piece,
|
|
29
|
+
- **Pluggable by Design**: Thin interfaces on every component - swap any piece, without patching the library or your domain code.
|
|
25
30
|
|
|
26
|
-
The heavy lifting for common stacks is done, so you can mix and match sub-modules to fit your environment:
|
|
31
|
+
The core is infrastructure-agnostic, but the heavy lifting for common stacks is done, so you can mix and match sub-modules to fit your environment:
|
|
27
32
|
|
|
28
33
|
- `node-cqrs/sqlite` – Embedded per-process event storage and/or views.
|
|
29
34
|
- `node-cqrs/mongodb` – Distributed event storage and persistent projection views for multi-process deployments.
|
|
@@ -410,6 +415,17 @@ interface ISaga {
|
|
|
410
415
|
Swap implementations by registering different classes in the DI container.
|
|
411
416
|
All modules below implement the same interfaces - pick what fits your deployment.
|
|
412
417
|
|
|
418
|
+
### Capability Matrix
|
|
419
|
+
|
|
420
|
+
| Module | Event storage | Object view storage | Projection wiring / execution | Message buses |
|
|
421
|
+
| ------------------- | -------------------------------------------------- | ----------------------------------------------------------------------------------- | ------------------------------------------------ | ------------------------------------------------- |
|
|
422
|
+
| `node-cqrs` | `InMemoryEventStorage`, `InMemorySnapshotStorage` | `InMemoryView`, `InMemoryLock` | `AbstractProjection` | `InMemoryMessageBus` |
|
|
423
|
+
| `node-cqrs/sqlite` | `SqliteEventStorage` | `SqliteObjectView`, `SqliteObjectStorage`, `SqliteViewLocker`, `SqliteEventLocker` | `AbstractSqliteObjectProjection`, `AbstractSqliteView` | - |
|
|
424
|
+
| `node-cqrs/mongodb` | `MongoEventStorage` | `MongoObjectView`, `MongoObjectStorage`, `MongoViewLocker`, `MongoEventLocker` | `AbstractMongoObjectProjection`, `AbstractMongoView` | - |
|
|
425
|
+
| `node-cqrs/redis` | - | `RedisView`, `RedisObjectStorage`, `RedisViewLocker`, `RedisEventLocker` | `AbstractRedisProjection` | - |
|
|
426
|
+
| `node-cqrs/rabbitmq` | - | - | - | `RabbitMqGateway`, `RabbitMqCommandBus`, `RabbitMqEventBus` |
|
|
427
|
+
| `node-cqrs/workers` | - | - | `AbstractWorkerProjection`, `WorkerProxyProjection` | - |
|
|
428
|
+
|
|
413
429
|
### Event Storage
|
|
414
430
|
|
|
415
431
|
Where aggregate events are persisted and replayed from.
|
|
@@ -522,6 +538,7 @@ See [examples/telemetry/index.ts](examples/telemetry/index.ts) for a full workin
|
|
|
522
538
|
- [examples/redis](examples/redis/index.ts) - Redis-backed persistent projection
|
|
523
539
|
- [examples/sagas-simple](examples/sagas-simple/index.ts) - simple saga
|
|
524
540
|
- [examples/sagas-overlaps](examples/sagas-overlaps/index.ts) - overlapping sagas, multi-step flow
|
|
541
|
+
- [examples/sqlite](examples/sqlite/index.ts) - SQLite-backed object storage view
|
|
525
542
|
- [examples/browser](examples/browser) - browser smoke test
|
|
526
543
|
- [examples/workers-projection](examples/workers-projection) - worker thread projection
|
|
527
544
|
- [examples/mongodb-eventstore](examples/mongodb-eventstore/index.ts) - MongoDB event storage with DI container and manual wiring
|
|
@@ -0,0 +1,85 @@
|
|
|
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.createWorker = createWorker;
|
|
37
|
+
const node_worker_threads_1 = require("node:worker_threads");
|
|
38
|
+
const path = __importStar(require("node:path"));
|
|
39
|
+
/**
|
|
40
|
+
* Create a worker instance and await a first message (or a specific ready message) or a failure.
|
|
41
|
+
*
|
|
42
|
+
* @param workerEntrypoint - Absolute path or URL to the worker module
|
|
43
|
+
* @param workerData - Structured-cloneable data passed to the worker via workerData
|
|
44
|
+
* @param options.transferList - Transferable objects to move (not copy) into the worker
|
|
45
|
+
* @param options.isReadyMessage - Predicate to identify the ready message; if omitted, any first message resolves
|
|
46
|
+
* @returns Resolved Worker instance after the ready handshake
|
|
47
|
+
*/
|
|
48
|
+
async function createWorker(workerEntrypoint, workerData, options) {
|
|
49
|
+
const resolvedEntrypoint = workerEntrypoint instanceof URL ?
|
|
50
|
+
workerEntrypoint :
|
|
51
|
+
path.resolve(workerEntrypoint);
|
|
52
|
+
const worker = new node_worker_threads_1.Worker(resolvedEntrypoint, {
|
|
53
|
+
workerData,
|
|
54
|
+
transferList: options?.transferList
|
|
55
|
+
});
|
|
56
|
+
await new Promise((resolve, reject) => {
|
|
57
|
+
const cleanup = () => {
|
|
58
|
+
// eslint-disable-next-line no-use-before-define
|
|
59
|
+
worker.off('error', onError);
|
|
60
|
+
// eslint-disable-next-line no-use-before-define
|
|
61
|
+
worker.off('message', onMessage);
|
|
62
|
+
// eslint-disable-next-line no-use-before-define
|
|
63
|
+
worker.off('exit', onExit);
|
|
64
|
+
};
|
|
65
|
+
const onMessage = (msg) => {
|
|
66
|
+
if (options?.isReadyMessage && !options.isReadyMessage(msg))
|
|
67
|
+
return;
|
|
68
|
+
cleanup();
|
|
69
|
+
resolve();
|
|
70
|
+
};
|
|
71
|
+
const onError = (err) => {
|
|
72
|
+
cleanup();
|
|
73
|
+
reject(err);
|
|
74
|
+
};
|
|
75
|
+
const onExit = (exitCode) => {
|
|
76
|
+
cleanup();
|
|
77
|
+
reject(new Error(`Worker exited prematurely with exit code ${exitCode}`));
|
|
78
|
+
};
|
|
79
|
+
worker.on('message', onMessage);
|
|
80
|
+
worker.once('error', onError);
|
|
81
|
+
worker.once('exit', onExit);
|
|
82
|
+
});
|
|
83
|
+
return worker;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=createWorker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createWorker.js","sourceRoot":"","sources":["../../../../src/shared/worker-utils/createWorker.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,oCAqDC;AAjED,6DAAgE;AAChE,gDAAkC;AAElC;;;;;;;;GAQG;AACI,KAAK,UAAU,YAAY,CACjC,gBAA8B,EAC9B,UAAmB,EACnB,OAGC;IAGD,MAAM,kBAAkB,GAAG,gBAAgB,YAAY,GAAG,CAAC,CAAC;QAC3D,gBAAgB,CAAC,CAAC;QAClB,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAEhC,MAAM,MAAM,GAAG,IAAI,4BAAM,CAAC,kBAAkB,EAAE;QAC7C,UAAU;QACV,YAAY,EAAE,OAAO,EAAE,YAAY;KACnC,CAAC,CAAC;IAEH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAE3C,MAAM,OAAO,GAAG,GAAG,EAAE;YACpB,gDAAgD;YAChD,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7B,gDAAgD;YAChD,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACjC,gDAAgD;YAChD,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5B,CAAC,CAAC;QAEF,MAAM,SAAS,GAAG,CAAC,GAAY,EAAE,EAAE;YAClC,IAAI,OAAO,EAAE,cAAc,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC;gBAC1D,OAAO;YAER,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;QACX,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,CAAC,GAAY,EAAE,EAAE;YAChC,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,GAAG,CAAC,CAAC;QACb,CAAC,CAAC;QAEF,MAAM,MAAM,GAAG,CAAC,QAAgB,EAAE,EAAE;YACnC,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,IAAI,KAAK,CAAC,4CAA4C,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC3E,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("./createWorker.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/shared/worker-utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,oDAAkC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodeEndpoint.js","sourceRoot":"","sources":["../../../../src/shared/worker-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"}
|
|
@@ -35,7 +35,8 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.SqliteWorkerProxy = void 0;
|
|
37
37
|
const Comlink = __importStar(require("comlink"));
|
|
38
|
-
const index_ts_1 = require("
|
|
38
|
+
const index_ts_1 = require("../shared/worker-utils/index.js");
|
|
39
|
+
const SqliteWorkerRunner_ts_1 = require("./SqliteWorkerRunner.js");
|
|
39
40
|
const AsyncSqliteStatement_ts_1 = require("./AsyncSqliteStatement.js");
|
|
40
41
|
class SqliteWorkerProxy {
|
|
41
42
|
#config;
|
|
@@ -75,7 +76,12 @@ class SqliteWorkerProxy {
|
|
|
75
76
|
async assertWorker() {
|
|
76
77
|
if (this.#worker)
|
|
77
78
|
return this.#worker;
|
|
78
|
-
this.#workerPromise ??= (
|
|
79
|
+
this.#workerPromise ??= (() => {
|
|
80
|
+
const { sqliteWorkerRunnerLocation = SqliteWorkerRunner_ts_1.SqliteWorkerRunner.location, ...workerData } = this.#config;
|
|
81
|
+
return (0, index_ts_1.createWorker)(sqliteWorkerRunnerLocation, workerData, {
|
|
82
|
+
isReadyMessage: m => m?.type === 'ready'
|
|
83
|
+
});
|
|
84
|
+
})()
|
|
79
85
|
.then(worker => {
|
|
80
86
|
this.#worker = worker;
|
|
81
87
|
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
|
|
1
|
+
{"version":3,"file":"SqliteWorkerProxy.js","sourceRoot":"","sources":["../../../src/sqlite-workers/SqliteWorkerProxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,6 +39,7 @@ const path = __importStar(require("node:path"));
|
|
|
39
39
|
const Comlink = __importStar(require("comlink"));
|
|
40
40
|
const protocol_ts_1 = require("./protocol.js");
|
|
41
41
|
const index_ts_1 = require("./utils/index.js");
|
|
42
|
+
const index_ts_2 = require("../shared/worker-utils/index.js");
|
|
42
43
|
function all(statement, params) {
|
|
43
44
|
return params === undefined ? statement.all() : statement.all(params);
|
|
44
45
|
}
|
|
@@ -109,7 +110,7 @@ if (node_worker_threads_1.parentPort) {
|
|
|
109
110
|
void SqliteWorkerRunner.create(node_worker_threads_1.workerData.dbConfig)
|
|
110
111
|
.then(runner => {
|
|
111
112
|
port.postMessage({ type: 'ready' });
|
|
112
|
-
Comlink.expose(runner, (0,
|
|
113
|
+
Comlink.expose(runner, (0, index_ts_2.nodeEndpoint)(port));
|
|
113
114
|
});
|
|
114
115
|
}
|
|
115
116
|
//# sourceMappingURL=SqliteWorkerRunner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SqliteWorkerRunner.js","sourceRoot":"","sources":["../../../src/sqlite-workers/SqliteWorkerRunner.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6DAA6D;AAC7D,gDAAkC;AAClC,iDAAmC;AAEnC,+CAOuB;AACvB,+
|
|
1
|
+
{"version":3,"file":"SqliteWorkerRunner.js","sourceRoot":"","sources":["../../../src/sqlite-workers/SqliteWorkerRunner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.isSqliteWorkerData = isSqliteWorkerData;
|
|
4
|
-
exports.isSqliteWorkerReadyMessage = isSqliteWorkerReadyMessage;
|
|
5
4
|
const isObject = (obj) => typeof obj === 'object'
|
|
6
5
|
&& obj !== null
|
|
7
6
|
&& !Array.isArray(obj)
|
|
@@ -11,10 +10,4 @@ function isSqliteWorkerData(value) {
|
|
|
11
10
|
&& 'dbConfig' in value
|
|
12
11
|
&& isObject(value.dbConfig);
|
|
13
12
|
}
|
|
14
|
-
function isSqliteWorkerReadyMessage(value) {
|
|
15
|
-
return typeof value === 'object' &&
|
|
16
|
-
value !== null &&
|
|
17
|
-
'type' in value &&
|
|
18
|
-
value.type === 'ready';
|
|
19
|
-
}
|
|
20
13
|
//# sourceMappingURL=protocol.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/sqlite-workers/protocol.ts"],"names":[],"mappings":";;AAiEA,gDAIC;
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/sqlite-workers/protocol.ts"],"names":[],"mappings":";;AAiEA,gDAIC;AAVD,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"}
|
|
@@ -14,8 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./createSqliteWorker.js"), exports);
|
|
18
17
|
__exportStar(require("./createWorkerDb.js"), exports);
|
|
19
|
-
__exportStar(require("./nodeEndpoint.js"), exports);
|
|
20
18
|
__exportStar(require("./resolveCurrentFileLocationFromStack.js"), exports);
|
|
21
19
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/sqlite-workers/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/sqlite-workers/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAoC;AACpC,2EAAyD"}
|
|
@@ -17,7 +17,7 @@ class AbstractWorkerProjection extends AbstractProjection_ts_1.AbstractProjectio
|
|
|
17
17
|
return undefined;
|
|
18
18
|
const projectionMethodsToWire = [
|
|
19
19
|
'project',
|
|
20
|
-
'
|
|
20
|
+
'_projectBatch',
|
|
21
21
|
'ping',
|
|
22
22
|
'getLastProjectedEvent'
|
|
23
23
|
];
|
|
@@ -41,9 +41,10 @@ class AbstractWorkerProjection extends AbstractProjection_ts_1.AbstractProjectio
|
|
|
41
41
|
ping() {
|
|
42
42
|
return true;
|
|
43
43
|
}
|
|
44
|
-
/** @internal
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
/** @internal Project restore events in batches to avoid one Comlink roundtrip per event */
|
|
45
|
+
async _projectBatch(events) {
|
|
46
|
+
for (const event of events)
|
|
47
|
+
await this._project(event);
|
|
47
48
|
}
|
|
48
49
|
/**
|
|
49
50
|
* Returns the last projected event if the view implements IEventLocker, otherwise undefined.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractWorkerProjection.js","sourceRoot":"","sources":["../../../src/workers/AbstractWorkerProjection.ts"],"names":[],"mappings":";;;AAAA,6DAAmD;AACnD,oEAA8D;AAC9D,+CAI0B;AAI1B;;;GAGG;AACH,MAAsB,wBACrB,SAAQ,0CAAyB;IAGjC;;OAEG;IACH,MAAM,CAAC,4BAA4B,CAElC,OAAiB;QAEjB,IAAI,kCAAY;YACf,OAAO,SAAS,CAAC;QAElB,MAAM,uBAAuB,GAAG;YAC/B,SAAS;YACT,
|
|
1
|
+
{"version":3,"file":"AbstractWorkerProjection.js","sourceRoot":"","sources":["../../../src/workers/AbstractWorkerProjection.ts"],"names":[],"mappings":";;;AAAA,6DAAmD;AACnD,oEAA8D;AAC9D,+CAI0B;AAI1B;;;GAGG;AACH,MAAsB,wBACrB,SAAQ,0CAAyB;IAGjC;;OAEG;IACH,MAAM,CAAC,4BAA4B,CAElC,OAAiB;QAEjB,IAAI,kCAAY;YACf,OAAO,SAAS,CAAC;QAElB,MAAM,uBAAuB,GAAG;YAC/B,SAAS;YACT,eAAe;YACf,MAAM;YACN,uBAAuB;SACO,CAAC;QAEhC,IAAI,OAAO;YACV,OAAO,IAAA,+BAA8B,EAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC;QAEzE,OAAO,IAAA,+BAA8B,EAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;IACtE,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,kBAAkB,CAI0B,SAAsB;QACxE,OAAO,IAAA,6BAAwB,EAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,KAAK,gBAAgB;QAC1B,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACpC,CAAC;IAED,uFAAuF;IACvF,kDAAkD;IAC3C,IAAI;QACV,OAAO,IAAI,CAAC;IACb,CAAC;IAED,2FAA2F;IAC3F,KAAK,CAAC,aAAa,CAAC,MAAgB;QACnC,KAAK,MAAM,KAAK,IAAI,MAAM;YACzB,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,qBAAqB;QACjC,OAAO,IAAI,CAAC,YAAY,EAAE,YAAY,EAAE,CAAC;IAC1C,CAAC;CACD;AA9DD,4DA8DC"}
|
|
@@ -36,7 +36,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.WorkerProxyProjection = void 0;
|
|
37
37
|
const node_worker_threads_1 = require("node:worker_threads");
|
|
38
38
|
const Comlink = __importStar(require("comlink"));
|
|
39
|
-
const index_ts_1 = require("
|
|
39
|
+
const index_ts_1 = require("../shared/worker-utils/index.js");
|
|
40
40
|
const index_ts_2 = require("../utils/index.js");
|
|
41
41
|
const Event_ts_1 = require("../Event.js");
|
|
42
42
|
const InMemoryLock_ts_1 = require("../in-memory/InMemoryLock.js");
|
|
@@ -45,12 +45,14 @@ const InMemoryLock_ts_1 = require("../in-memory/InMemoryLock.js");
|
|
|
45
45
|
* and view calls to AbstractWorkerThreadProjection instance
|
|
46
46
|
*/
|
|
47
47
|
class WorkerProxyProjection {
|
|
48
|
+
static RESTORE_BATCH_SIZE = 5_000;
|
|
48
49
|
#worker;
|
|
49
50
|
#workerInit;
|
|
50
51
|
#remoteProjection;
|
|
51
52
|
#remoteView;
|
|
52
53
|
#logger;
|
|
53
54
|
#messageTypes;
|
|
55
|
+
#disposed = false;
|
|
54
56
|
viewLocker = new InMemoryLock_ts_1.InMemoryLock();
|
|
55
57
|
get remoteProjection() {
|
|
56
58
|
return this.#remoteProjection;
|
|
@@ -65,9 +67,9 @@ class WorkerProxyProjection {
|
|
|
65
67
|
this.#logger = logger && 'child' in logger ? logger.child({ service: new.target.name }) : logger;
|
|
66
68
|
const { port1: projectionPortMain, port2: projectionPort } = new node_worker_threads_1.MessageChannel();
|
|
67
69
|
const { port1: viewPortMain, port2: viewPort } = new node_worker_threads_1.MessageChannel();
|
|
68
|
-
this.#workerInit = (0, index_ts_1.createWorker)(workerModulePath, {
|
|
69
|
-
projectionPort,
|
|
70
|
-
|
|
70
|
+
this.#workerInit = (0, index_ts_1.createWorker)(workerModulePath, { projectionPort, viewPort }, {
|
|
71
|
+
transferList: [projectionPort, viewPort],
|
|
72
|
+
isReadyMessage: m => m?.type === 'ready'
|
|
71
73
|
}).then(worker => {
|
|
72
74
|
this.#worker = worker;
|
|
73
75
|
worker.once('error', this._onWorkerError);
|
|
@@ -91,7 +93,12 @@ class WorkerProxyProjection {
|
|
|
91
93
|
if (this.viewLocker)
|
|
92
94
|
this.viewLocker.unlock();
|
|
93
95
|
}
|
|
94
|
-
/**
|
|
96
|
+
/**
|
|
97
|
+
* Restore view state from not-yet-projected events.
|
|
98
|
+
*
|
|
99
|
+
* Events are projected in batches to reduce worker RPC overhead.
|
|
100
|
+
* The batch size can be configured through {@link WorkerProxyProjection.RESTORE_BATCH_SIZE}.
|
|
101
|
+
*/
|
|
95
102
|
async _restore(eventStore) {
|
|
96
103
|
if (!this.#worker)
|
|
97
104
|
await this.#workerInit;
|
|
@@ -101,10 +108,17 @@ class WorkerProxyProjection {
|
|
|
101
108
|
const eventsIterable = eventStore.getEventsByTypes(this.#messageTypes, { afterEvent: lastEvent });
|
|
102
109
|
let eventsCount = 0;
|
|
103
110
|
const startTs = Date.now();
|
|
111
|
+
const batch = [];
|
|
104
112
|
for await (const event of eventsIterable) {
|
|
105
|
-
|
|
113
|
+
batch.push(event);
|
|
106
114
|
eventsCount += 1;
|
|
115
|
+
if (batch.length >= WorkerProxyProjection.RESTORE_BATCH_SIZE) {
|
|
116
|
+
await this._projectBatch(batch);
|
|
117
|
+
batch.length = 0;
|
|
118
|
+
}
|
|
107
119
|
}
|
|
120
|
+
if (batch.length)
|
|
121
|
+
await this._projectBatch(batch);
|
|
108
122
|
this.#logger?.info(`view restored from ${eventsCount} event(s) in ${Date.now() - startTs} ms`);
|
|
109
123
|
}
|
|
110
124
|
_onWorkerError = (error) => {
|
|
@@ -129,10 +143,13 @@ class WorkerProxyProjection {
|
|
|
129
143
|
await this.#workerInit;
|
|
130
144
|
return this.#remoteProjection.project(event);
|
|
131
145
|
}
|
|
132
|
-
|
|
133
|
-
|
|
146
|
+
_projectBatch(batch) {
|
|
147
|
+
return this.remoteProjection._projectBatch(batch);
|
|
134
148
|
}
|
|
135
149
|
dispose() {
|
|
150
|
+
if (this.#disposed)
|
|
151
|
+
return;
|
|
152
|
+
this.#disposed = true;
|
|
136
153
|
this.#remoteProjection[Comlink.releaseProxy]();
|
|
137
154
|
this.#remoteView[Comlink.releaseProxy]();
|
|
138
155
|
this.#worker?.terminate();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkerProxyProjection.js","sourceRoot":"","sources":["../../../src/workers/WorkerProxyProjection.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6DAA6D;
|
|
1
|
+
{"version":3,"file":"WorkerProxyProjection.js","sourceRoot":"","sources":["../../../src/workers/WorkerProxyProjection.ts"],"names":[],"mappings":"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"}
|