node-cqrs 1.0.0-rc.37 → 1.0.0-rc.38
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 +14 -0
- package/README.md +2 -1
- package/dist/cjs/AbstractProjection.js +1 -2
- package/dist/cjs/AbstractProjection.js.map +1 -1
- package/dist/cjs/CqrsContainerBuilder.js +5 -3
- package/dist/cjs/CqrsContainerBuilder.js.map +1 -1
- package/dist/cjs/in-memory/InMemoryLock.js +6 -2
- package/dist/cjs/in-memory/InMemoryLock.js.map +1 -1
- package/dist/cjs/in-memory/InMemoryView.js +2 -5
- package/dist/cjs/in-memory/InMemoryView.js.map +1 -1
- package/dist/cjs/workers/AbstractWorkerProjection.js +13 -119
- package/dist/cjs/workers/AbstractWorkerProjection.js.map +1 -1
- package/dist/cjs/workers/WorkerProxyProjection.js +142 -0
- package/dist/cjs/workers/WorkerProxyProjection.js.map +1 -0
- package/dist/cjs/workers/index.js +1 -0
- package/dist/cjs/workers/index.js.map +1 -1
- package/dist/cjs/workers/protocol.js.map +1 -1
- package/dist/esm/AbstractProjection.js +1 -2
- package/dist/esm/AbstractProjection.js.map +1 -1
- package/dist/esm/CqrsContainerBuilder.js +6 -4
- package/dist/esm/CqrsContainerBuilder.js.map +1 -1
- package/dist/esm/in-memory/InMemoryLock.js +6 -2
- package/dist/esm/in-memory/InMemoryLock.js.map +1 -1
- package/dist/esm/in-memory/InMemoryView.js +2 -5
- package/dist/esm/in-memory/InMemoryView.js.map +1 -1
- package/dist/esm/workers/AbstractWorkerProjection.js +15 -121
- package/dist/esm/workers/AbstractWorkerProjection.js.map +1 -1
- package/dist/esm/workers/WorkerProxyProjection.js +105 -0
- package/dist/esm/workers/WorkerProxyProjection.js.map +1 -0
- package/dist/esm/workers/index.js +1 -0
- package/dist/esm/workers/index.js.map +1 -1
- package/dist/esm/workers/protocol.js.map +1 -1
- package/package.json +1 -1
- package/src/AbstractProjection.ts +1 -3
- package/src/CqrsContainerBuilder.ts +10 -5
- package/src/in-memory/InMemoryLock.ts +11 -5
- package/src/in-memory/InMemoryView.ts +2 -6
- package/src/interfaces/IProjection.ts +1 -1
- package/src/workers/AbstractWorkerProjection.ts +17 -182
- package/src/workers/WorkerProxyProjection.ts +154 -0
- package/src/workers/index.ts +1 -0
- package/src/workers/protocol.ts +7 -0
- package/types/AbstractProjection.d.ts +1 -1
- package/types/CqrsContainerBuilder.d.ts +2 -2
- package/types/in-memory/InMemoryLock.d.ts +5 -3
- package/types/interfaces/IProjection.d.ts +1 -1
- package/types/workers/AbstractWorkerProjection.d.ts +8 -53
- package/types/workers/WorkerProxyProjection.d.ts +32 -0
- package/types/workers/index.d.ts +1 -0
- package/types/workers/protocol.d.ts +6 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
# [1.0.0-rc.38](https://github.com/snatalenko/node-cqrs/compare/v1.0.0-rc.37...v1.0.0-rc.38) (2026-02-24)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Tests
|
|
5
|
+
|
|
6
|
+
* Allow running individual integration tests with `npm t` ([cfef9a8](https://github.com/snatalenko/node-cqrs/commit/cfef9a87b6e0fce159205a1d55f38e51c6f9e8de))
|
|
7
|
+
|
|
8
|
+
### Internal Fixes
|
|
9
|
+
|
|
10
|
+
* Split AbstractWorkerProjection into worker-side and main-thread proxy ([751bfcf](https://github.com/snatalenko/node-cqrs/commit/751bfcf9f63547bafcec51af4e949d77ca1d0077))
|
|
11
|
+
* Rename InMemoryLock event to match IViewLocker interface ([1fe2eb1](https://github.com/snatalenko/node-cqrs/commit/1fe2eb149f8801e1b7e935a90cca05691d5d2017))
|
|
12
|
+
* Separate projection restoring from subscription; start explicitly in DI container ([3ddc649](https://github.com/snatalenko/node-cqrs/commit/3ddc649feaa65e267d7eb5646289e88f8a4a332b))
|
|
13
|
+
|
|
14
|
+
|
|
1
15
|
# [1.0.0-rc.37](https://github.com/snatalenko/node-cqrs/compare/v1.0.0-rc.36...v1.0.0-rc.37) (2026-02-23)
|
|
2
16
|
|
|
3
17
|
|
package/README.md
CHANGED
|
@@ -136,7 +136,8 @@ const aggregateCommandHandler = new AggregateCommandHandler({ eventStore, aggreg
|
|
|
136
136
|
aggregateCommandHandler.subscribe(commandBus);
|
|
137
137
|
|
|
138
138
|
const projection = new UsersProjection();
|
|
139
|
-
|
|
139
|
+
projection.subscribe(eventStore);
|
|
140
|
+
projection.restore(eventStore);
|
|
140
141
|
const users = projection.view;
|
|
141
142
|
```
|
|
142
143
|
|
|
@@ -66,11 +66,10 @@ class AbstractProjection {
|
|
|
66
66
|
* Subscribe to event store
|
|
67
67
|
* and restore view state from not yet projected events
|
|
68
68
|
*/
|
|
69
|
-
|
|
69
|
+
subscribe(eventStore) {
|
|
70
70
|
(0, index_ts_2.subscribe)(eventStore, this, {
|
|
71
71
|
masterHandler: this.project
|
|
72
72
|
});
|
|
73
|
-
await this.restore(eventStore);
|
|
74
73
|
}
|
|
75
74
|
/** Pass event to projection event handler */
|
|
76
75
|
async project(event) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractProjection.js","sourceRoot":"","sources":["../../src/AbstractProjection.ts"],"names":[],"mappings":";;;AAAA,yCAAsC;AACtC,iEAA2D;AAC3D,oDAW+B;AAE/B,+CAO0B;AAwB1B;;GAEG;AACH,MAAsB,kBAAkB;IAEvC;;;OAGG;IACH,MAAM,KAAK,OAAO;QACjB,OAAO,IAAA,iCAAsB,EAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAS;IACd,WAAW,CAAsB;IACjC,YAAY,CAAuB;IACzB,OAAO,CAAW;IAE5B;;;OAGG;IACH,IAAW,IAAI;QACd,OAAO,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,8BAAY,EAAW,CAAC,CAAC;IACjE,CAAC;IAED,IAAc,IAAI,CAAC,KAAY;QAC9B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,CAAC;IAED;;;OAGG;IACH,IAAc,WAAW;QACxB,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;YACjC,IAAI,CAAC,WAAW,GAAG,IAAA,uBAAY,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAE/D,OAAO,IAAI,CAAC,WAAW,CAAC;IACzB,CAAC;IAED,IAAc,WAAW,CAAC,KAAqC;QAC9D,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,IAAc,YAAY;QACzB,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;YAClC,IAAI,CAAC,YAAY,GAAG,IAAA,wBAAa,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAEjE,OAAO,IAAI,CAAC,YAAY,CAAC;IAC1B,CAAC;IAED,IAAc,YAAY,CAAC,KAAsC;QAChE,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED,YAAY,EACX,IAAI,EACJ,UAAU,EACV,WAAW,EACX,MAAM,KAC8B,EAAE;QACtC,IAAA,2BAAgB,EAAC,IAAI,CAAC,CAAC;QAEvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAEhC,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,OAAO,IAAI,MAAM,CAAC,CAAC;YAC3C,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,IAAA,uBAAY,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC;IACT,CAAC;IAED;;;OAGG;IACH,
|
|
1
|
+
{"version":3,"file":"AbstractProjection.js","sourceRoot":"","sources":["../../src/AbstractProjection.ts"],"names":[],"mappings":"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"}
|
|
@@ -50,11 +50,13 @@ class CqrsContainerBuilder extends di0_1.ContainerBuilder {
|
|
|
50
50
|
* Register projection, which will expose view and will be subscribed
|
|
51
51
|
* to eventStore and will restore its state upon instance creation
|
|
52
52
|
*/
|
|
53
|
-
registerProjection(
|
|
54
|
-
(0, assert_ts_1.
|
|
53
|
+
registerProjection(typeOrFactory, exposedViewAlias) {
|
|
54
|
+
(0, assert_ts_1.assertFunction)(typeOrFactory, 'typeOrFactory');
|
|
55
55
|
const projectionFactory = (container) => {
|
|
56
|
-
const projection = container.createInstance(
|
|
56
|
+
const projection = container.createInstance(typeOrFactory);
|
|
57
57
|
projection.subscribe(container.eventStore);
|
|
58
|
+
// start async projection restoring
|
|
59
|
+
void projection.restore(container.eventStore);
|
|
58
60
|
if (exposedViewAlias)
|
|
59
61
|
return projection.view;
|
|
60
62
|
return projection;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CqrsContainerBuilder.js","sourceRoot":"","sources":["../../src/CqrsContainerBuilder.ts"],"names":[],"mappings":";;;AAAA,6BAA6E;AAC7E,6EAAuE;AACvE,mDAA6C;AAC7C,mDAA6C;AAC7C,+DAAyD;AACzD,6DAAuD;AACvD,mDAA0D;AAC1D,
|
|
1
|
+
{"version":3,"file":"CqrsContainerBuilder.js","sourceRoot":"","sources":["../../src/CqrsContainerBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,14 +10,18 @@ class InMemoryLock {
|
|
|
10
10
|
get locked() {
|
|
11
11
|
return !!this.#lockMarker;
|
|
12
12
|
}
|
|
13
|
+
get ready() {
|
|
14
|
+
return !this.locked;
|
|
15
|
+
}
|
|
13
16
|
/**
|
|
14
17
|
* Acquire the lock on the current instance.
|
|
15
18
|
* Resolves when the lock is successfully acquired
|
|
16
19
|
*/
|
|
17
20
|
async lock() {
|
|
18
21
|
while (this.locked)
|
|
19
|
-
await this.once('
|
|
22
|
+
await this.once('ready');
|
|
20
23
|
this.#lockMarker = new index_ts_1.Deferred();
|
|
24
|
+
return this.locked;
|
|
21
25
|
}
|
|
22
26
|
/**
|
|
23
27
|
* Release the lock acquired earlier
|
|
@@ -31,7 +35,7 @@ class InMemoryLock {
|
|
|
31
35
|
* Resolves immediately if the lock is not acquired
|
|
32
36
|
*/
|
|
33
37
|
once(event) {
|
|
34
|
-
if (event !== '
|
|
38
|
+
if (event !== 'ready')
|
|
35
39
|
throw new TypeError(`Unexpected event type: ${event}`);
|
|
36
40
|
return this.#lockMarker?.promise ?? Promise.resolve();
|
|
37
41
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InMemoryLock.js","sourceRoot":"","sources":["../../../src/in-memory/InMemoryLock.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"InMemoryLock.js","sourceRoot":"","sources":["../../../src/in-memory/InMemoryLock.ts"],"names":[],"mappings":";;;AACA,gDAA6C;AAE7C,MAAa,YAAY;IAExB,WAAW,CAA6B;IAExC;;OAEG;IACH,IAAI,MAAM;QACT,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;IAC3B,CAAC;IAED,IAAI,KAAK;QACR,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI;QACT,OAAO,IAAI,CAAC,MAAM;YACjB,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE1B,IAAI,CAAC,WAAW,GAAG,IAAI,mBAAQ,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM;QACX,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACH,IAAI,CAAC,KAAc;QAClB,IAAI,KAAK,KAAK,OAAO;YACpB,MAAM,IAAI,SAAS,CAAC,0BAA0B,KAAK,EAAE,CAAC,CAAC;QAExD,OAAO,IAAI,CAAC,WAAW,EAAE,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IACvD,CAAC;CACD;AA7CD,oCA6CC"}
|
|
@@ -40,8 +40,7 @@ class InMemoryView {
|
|
|
40
40
|
}
|
|
41
41
|
/** Lock the view to prevent concurrent modifications */
|
|
42
42
|
async lock() {
|
|
43
|
-
|
|
44
|
-
return this.#lock.locked;
|
|
43
|
+
return this.#lock.lock();
|
|
45
44
|
}
|
|
46
45
|
/** Release the lock */
|
|
47
46
|
async unlock() {
|
|
@@ -49,9 +48,7 @@ class InMemoryView {
|
|
|
49
48
|
}
|
|
50
49
|
/** Create a Promise which will resolve to a first emitted event of a given type */
|
|
51
50
|
once(eventType) {
|
|
52
|
-
|
|
53
|
-
throw new TypeError(`Unexpected event type: ${eventType}`);
|
|
54
|
-
return this.#lock.once('unlocked');
|
|
51
|
+
return this.#lock.once(eventType);
|
|
55
52
|
}
|
|
56
53
|
/**
|
|
57
54
|
* Check if view contains a record with a given key.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InMemoryView.js","sourceRoot":"","sources":["../../../src/in-memory/InMemoryView.ts"],"names":[],"mappings":";;;AAAA,uDAAiD;AAEjD,+CAA6C;AAC7C,kDAAmE;AAEnE;;;GAGG;AACH,SAAS,WAAW,CAAI,IAAO,EAAE,MAAmB;IACnD,MAAM,qBAAqB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3C,OAAO,qBAAqB,KAAK,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,CAAC;QACN,qBAAqB,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAa,YAAY;IAExB,MAAM,CAAC,OAAO;QACb,OAAQ,IAAI,YAAY,EAAuB,CAAC;IACjD,CAAC;IAES,IAAI,GAA6B,IAAI,GAAG,EAAE,CAAC;IAErD,KAAK,CAAe;IAEpB,mCAAmC;IACnC,IAAI,KAAK;QACR,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,oCAAoC;IACpC,IAAI,IAAI;QACP,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACvB,CAAC;IAED;QACC,IAAI,CAAC,KAAK,GAAG,IAAI,8BAAY,EAAE,CAAC;QAEhC,+EAA+E;QAC/E,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;YAC1C,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;SAC1B,CAAC,CAAC;IACJ,CAAC;IAED,wDAAwD;IACxD,KAAK,CAAC,IAAI;QACT,
|
|
1
|
+
{"version":3,"file":"InMemoryView.js","sourceRoot":"","sources":["../../../src/in-memory/InMemoryView.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,18 +38,13 @@ const node_worker_threads_1 = require("node:worker_threads");
|
|
|
38
38
|
const AbstractProjection_ts_1 = require("../AbstractProjection.js");
|
|
39
39
|
const Comlink = __importStar(require("comlink"));
|
|
40
40
|
const index_ts_1 = require("./utils/index.js");
|
|
41
|
-
const index_ts_2 = require("../utils/index.js");
|
|
42
41
|
const protocol_ts_1 = require("./protocol.js");
|
|
42
|
+
const WorkerProxyProjection_ts_1 = require("./WorkerProxyProjection.js");
|
|
43
43
|
/**
|
|
44
44
|
* Projection base class that can run projection handlers and the associated view in a worker thread
|
|
45
45
|
* to isolate CPU-heavy work and keep the main thread responsive
|
|
46
46
|
*/
|
|
47
47
|
class AbstractWorkerProjection extends AbstractProjection_ts_1.AbstractProjection {
|
|
48
|
-
#worker;
|
|
49
|
-
#workerInit;
|
|
50
|
-
#remoteProjection;
|
|
51
|
-
#remoteView;
|
|
52
|
-
#useWorkerThreads;
|
|
53
48
|
/**
|
|
54
49
|
* Creates an instance of a class derived from AbstractWorkerProjection in a Worker thread
|
|
55
50
|
*
|
|
@@ -82,127 +77,26 @@ class AbstractWorkerProjection extends AbstractProjection_ts_1.AbstractProjectio
|
|
|
82
77
|
return undefined;
|
|
83
78
|
return this.createWorkerInstance(factory);
|
|
84
79
|
}
|
|
85
|
-
async project(event) {
|
|
86
|
-
if (this.#useWorkerThreads && node_worker_threads_1.isMainThread) {
|
|
87
|
-
if (!this.#worker)
|
|
88
|
-
await this.#workerInit;
|
|
89
|
-
return this.remoteProjection.project(event);
|
|
90
|
-
}
|
|
91
|
-
return super.project(event);
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Proxy to the projection instance in the worker thread
|
|
95
|
-
*/
|
|
96
|
-
get remoteProjection() {
|
|
97
|
-
this.assertMainThread();
|
|
98
|
-
return this.#remoteProjection;
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Proxy to the projection instance in the worker thread (awaits worker init)
|
|
102
|
-
*/
|
|
103
|
-
get remoteProjectionInitializer() {
|
|
104
|
-
this.assertMainThread();
|
|
105
|
-
return this.ensureWorkerReady().then(() => this.remoteProjection);
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Proxy to the view instance in the worker thread
|
|
109
|
-
*/
|
|
110
|
-
get remoteView() {
|
|
111
|
-
this.assertMainThread();
|
|
112
|
-
return this.#remoteView;
|
|
113
|
-
}
|
|
114
|
-
get view() {
|
|
115
|
-
if (this.#useWorkerThreads && node_worker_threads_1.isMainThread)
|
|
116
|
-
return this.remoteView;
|
|
117
|
-
return super.view;
|
|
118
|
-
}
|
|
119
80
|
/**
|
|
120
|
-
*
|
|
81
|
+
* Creates a factory that returns a `WorkerProxyProjection` for this projection type.
|
|
82
|
+
* Use it in the main thread (for example, `builder.registerProjection(MyProjection.workerProxyFactory)`),
|
|
83
|
+
* so events are proxied to the worker instance while exposing the remote view API.
|
|
121
84
|
*/
|
|
122
|
-
get
|
|
123
|
-
this
|
|
124
|
-
return
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
super({
|
|
128
|
-
view,
|
|
129
|
-
viewLocker,
|
|
130
|
-
eventLocker,
|
|
131
|
-
logger
|
|
85
|
+
static get workerProxyFactory() {
|
|
86
|
+
const ProjectionType = this;
|
|
87
|
+
return () => new WorkerProxyProjection_ts_1.WorkerProxyProjection({
|
|
88
|
+
workerModulePath: ProjectionType.workerModulePath,
|
|
89
|
+
messageTypes: ProjectionType.handles
|
|
132
90
|
});
|
|
133
|
-
this.#useWorkerThreads = useWorkerThreads;
|
|
134
|
-
if (this.#useWorkerThreads && node_worker_threads_1.isMainThread) {
|
|
135
|
-
if (!workerModulePath)
|
|
136
|
-
throw new TypeError('workerModulePath parameter is required in the main thread when useWorkerThreads=true');
|
|
137
|
-
const { port1: projectionPortMain, port2: projectionPort } = new node_worker_threads_1.MessageChannel();
|
|
138
|
-
const { port1: viewPortMain, port2: viewPort } = new node_worker_threads_1.MessageChannel();
|
|
139
|
-
this.#workerInit = this._createWorker(workerModulePath, {
|
|
140
|
-
projectionPort,
|
|
141
|
-
viewPort
|
|
142
|
-
}).then(worker => {
|
|
143
|
-
this.#worker = worker;
|
|
144
|
-
worker.once('error', this._onWorkerError);
|
|
145
|
-
worker.once('exit', this._onWorkerExit);
|
|
146
|
-
return worker;
|
|
147
|
-
});
|
|
148
|
-
this.#workerInit.catch(() => { });
|
|
149
|
-
this.#remoteProjection = Comlink.wrap((0, index_ts_1.nodeEndpoint)(projectionPortMain));
|
|
150
|
-
this.#remoteView = Comlink.wrap((0, index_ts_1.nodeEndpoint)(viewPortMain));
|
|
151
|
-
}
|
|
152
91
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
return (0, index_ts_1.createWorker)(workerModulePath, data);
|
|
92
|
+
static get workerModulePath() {
|
|
93
|
+
throw new Error('not implemented');
|
|
156
94
|
}
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
error: (0, index_ts_2.extractErrorDetails)(error)
|
|
160
|
-
});
|
|
161
|
-
};
|
|
162
|
-
_onWorkerExit = (exitCode) => {
|
|
163
|
-
if (exitCode !== 0)
|
|
164
|
-
this._logger?.error(`worker exited with code ${exitCode}`);
|
|
165
|
-
};
|
|
95
|
+
/** Responds to a ping from the main thread to confirm the worker is alive */
|
|
96
|
+
// eslint-disable-next-line class-methods-use-this
|
|
166
97
|
_pong() {
|
|
167
|
-
this.assertWorkerThread();
|
|
168
98
|
return true;
|
|
169
99
|
}
|
|
170
|
-
assertMainThread() {
|
|
171
|
-
if (!node_worker_threads_1.isMainThread)
|
|
172
|
-
throw new Error('This method can only be called from the main thread');
|
|
173
|
-
if (!this.#useWorkerThreads)
|
|
174
|
-
throw new Error('Worker threads are disabled for this projection instance');
|
|
175
|
-
if (!this.#workerInit)
|
|
176
|
-
throw new Error('Worker instance is not initialized');
|
|
177
|
-
if (!this.#remoteProjection)
|
|
178
|
-
throw new Error('Remote projection instance is not initialized');
|
|
179
|
-
if (!this.#remoteView)
|
|
180
|
-
throw new Error('Remote view instance is not initialized');
|
|
181
|
-
}
|
|
182
|
-
// eslint-disable-next-line class-methods-use-this
|
|
183
|
-
assertWorkerThread() {
|
|
184
|
-
if (!node_worker_threads_1.parentPort)
|
|
185
|
-
throw new Error('This method can only be called from a Worker thread');
|
|
186
|
-
}
|
|
187
|
-
async ensureWorkerReady() {
|
|
188
|
-
if (this.#useWorkerThreads && node_worker_threads_1.isMainThread)
|
|
189
|
-
await this.#workerInit;
|
|
190
|
-
}
|
|
191
|
-
async _project(event) {
|
|
192
|
-
if (this.#useWorkerThreads && node_worker_threads_1.isMainThread) {
|
|
193
|
-
if (!this.#worker)
|
|
194
|
-
await this.#workerInit;
|
|
195
|
-
return this.remoteProjection._project(event);
|
|
196
|
-
}
|
|
197
|
-
return super._project(event);
|
|
198
|
-
}
|
|
199
|
-
dispose() {
|
|
200
|
-
if (this.#useWorkerThreads && node_worker_threads_1.isMainThread) {
|
|
201
|
-
this.#remoteProjection?.[Comlink.releaseProxy]();
|
|
202
|
-
this.#remoteView?.[Comlink.releaseProxy]();
|
|
203
|
-
this.#worker?.terminate();
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
100
|
}
|
|
207
101
|
exports.AbstractWorkerProjection = AbstractWorkerProjection;
|
|
208
102
|
//# sourceMappingURL=AbstractWorkerProjection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractWorkerProjection.js","sourceRoot":"","sources":["../../../src/workers/AbstractWorkerProjection.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"AbstractWorkerProjection.js","sourceRoot":"","sources":["../../../src/workers/AbstractWorkerProjection.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6DAA2E;AAC3E,oEAA8D;AAC9D,iDAAmC;AACnC,+CAAgD;AAChD,+CAAgG;AAChG,yEAAmE;AAEnE;;;GAGG;AACH,MAAsB,wBAAgC,SAAQ,0CAAyB;IAEtF;;;;OAIG;IACH,MAAM,CAAC,oBAAoB,CAE1B,OAAiB;QAEjB,IAAI,CAAC,gCAAU;YACd,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;QACjF,IAAI,CAAC,IAAA,0BAAY,EAAC,gCAAU,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;QAE5E,MAAM,wBAAwB,GAAG,OAAO,EAAE,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC;QAC3D,MAAM,2BAA2B,GAAyB;YACzD,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAAC,OAAO,CAAC,KAAK,CAAC;YACzD,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC3D,IAAI,EAAE,GAAG,EAAE,CAAC,wBAAwB,CAAC,KAAK,EAAE;SAC5C,CAAC;QAEF,OAAO,CAAC,MAAM,CAAC,2BAA2B,EAAE,IAAA,uBAAY,EAAC,gCAAU,CAAC,cAAc,CAAC,CAAC,CAAC;QACrF,OAAO,CAAC,MAAM,CAAC,wBAAwB,CAAC,IAAI,EAAE,IAAA,uBAAY,EAAC,gCAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEjF,gCAAU,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAA8B,CAAC,CAAC;QAEtE,OAAO,wBAAwB,CAAC;IACjC,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,4BAA4B,CAElC,OAAiB;QAEjB,IAAI,kCAAY;YACf,OAAO,SAAS,CAAC;QAElB,OAAO,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED;;;;OAIG;IACH,MAAM,KAAK,kBAAkB;QAC5B,MAAM,cAAc,GAAG,IAAuC,CAAC;QAC/D,OAAO,GAAG,EAAE,CAAC,IAAI,gDAAqB,CAAM;YAC3C,gBAAgB,EAAE,cAAc,CAAC,gBAAgB;YACjD,YAAY,EAAE,cAAc,CAAC,OAAO;SACpC,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,gBAAgB;QAC1B,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACpC,CAAC;IAED,6EAA6E;IAC7E,kDAAkD;IACxC,KAAK;QACd,OAAO,IAAI,CAAC;IACb,CAAC;CACD;AArED,4DAqEC"}
|
|
@@ -0,0 +1,142 @@
|
|
|
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.WorkerProxyProjection = void 0;
|
|
37
|
+
const node_worker_threads_1 = require("node:worker_threads");
|
|
38
|
+
const Comlink = __importStar(require("comlink"));
|
|
39
|
+
const index_ts_1 = require("./utils/index.js");
|
|
40
|
+
const index_ts_2 = require("../utils/index.js");
|
|
41
|
+
const Event_ts_1 = require("../Event.js");
|
|
42
|
+
const InMemoryLock_ts_1 = require("../in-memory/InMemoryLock.js");
|
|
43
|
+
/**
|
|
44
|
+
* Projection being automatically created in the main thread to proxy events
|
|
45
|
+
* and view calls to AbstractWorkerThreadProjection instance
|
|
46
|
+
*/
|
|
47
|
+
class WorkerProxyProjection {
|
|
48
|
+
#worker;
|
|
49
|
+
#workerInit;
|
|
50
|
+
#remoteProjection;
|
|
51
|
+
#remoteView;
|
|
52
|
+
#logger;
|
|
53
|
+
#messageTypes;
|
|
54
|
+
#viewLocker = new InMemoryLock_ts_1.InMemoryLock();
|
|
55
|
+
get remoteProjection() {
|
|
56
|
+
return this.#remoteProjection;
|
|
57
|
+
}
|
|
58
|
+
get view() {
|
|
59
|
+
return this.#remoteView;
|
|
60
|
+
}
|
|
61
|
+
constructor({ workerModulePath, messageTypes, logger }) {
|
|
62
|
+
(0, index_ts_2.assertString)(workerModulePath, 'workerModulePath');
|
|
63
|
+
(0, index_ts_2.assertArray)(messageTypes, 'messageTypes');
|
|
64
|
+
this.#messageTypes = messageTypes;
|
|
65
|
+
this.#logger = logger && 'child' in logger ? logger.child({ service: new.target.name }) : logger;
|
|
66
|
+
const { port1: projectionPortMain, port2: projectionPort } = new node_worker_threads_1.MessageChannel();
|
|
67
|
+
const { port1: viewPortMain, port2: viewPort } = new node_worker_threads_1.MessageChannel();
|
|
68
|
+
this.#workerInit = (0, index_ts_1.createWorker)(workerModulePath, {
|
|
69
|
+
projectionPort,
|
|
70
|
+
viewPort
|
|
71
|
+
}).then(worker => {
|
|
72
|
+
this.#worker = worker;
|
|
73
|
+
worker.once('error', this._onWorkerError);
|
|
74
|
+
worker.once('exit', this._onWorkerExit);
|
|
75
|
+
return worker;
|
|
76
|
+
});
|
|
77
|
+
this.#workerInit.catch(() => { });
|
|
78
|
+
this.#remoteProjection = Comlink.wrap((0, index_ts_1.nodeEndpoint)(projectionPortMain));
|
|
79
|
+
this.#remoteView = Comlink.wrap((0, index_ts_1.nodeEndpoint)(viewPortMain));
|
|
80
|
+
}
|
|
81
|
+
subscribe(eventStore) {
|
|
82
|
+
(0, index_ts_2.subscribe)(eventStore, this, {
|
|
83
|
+
masterHandler: this.project,
|
|
84
|
+
messageTypes: this.#messageTypes
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
async restore(eventStore) {
|
|
88
|
+
if (this.#viewLocker)
|
|
89
|
+
await this.#viewLocker.lock();
|
|
90
|
+
await this._restore(eventStore);
|
|
91
|
+
if (this.#viewLocker)
|
|
92
|
+
this.#viewLocker.unlock();
|
|
93
|
+
}
|
|
94
|
+
/** Restore view state from not-yet-projected events */
|
|
95
|
+
async _restore(eventStore) {
|
|
96
|
+
if (!this.#worker)
|
|
97
|
+
await this.#workerInit;
|
|
98
|
+
this.#logger?.debug('retrieving last event projected');
|
|
99
|
+
const lastEvent = await this.view.getLastEvent();
|
|
100
|
+
this.#logger?.debug(`retrieving ${lastEvent ? `events after ${(0, Event_ts_1.describe)(lastEvent)}` : 'all events'}...`);
|
|
101
|
+
const eventsIterable = eventStore.getEventsByTypes(this.#messageTypes, { afterEvent: lastEvent });
|
|
102
|
+
let eventsCount = 0;
|
|
103
|
+
const startTs = Date.now();
|
|
104
|
+
for await (const event of eventsIterable) {
|
|
105
|
+
await this._project(event);
|
|
106
|
+
eventsCount += 1;
|
|
107
|
+
}
|
|
108
|
+
this.#logger?.info(`view restored from ${eventsCount} event(s) in ${Date.now() - startTs} ms`);
|
|
109
|
+
}
|
|
110
|
+
_onWorkerError = (error) => {
|
|
111
|
+
this.#logger?.error('worker error', {
|
|
112
|
+
error: (0, index_ts_2.extractErrorDetails)(error)
|
|
113
|
+
});
|
|
114
|
+
};
|
|
115
|
+
_onWorkerExit = (exitCode) => {
|
|
116
|
+
if (exitCode !== 0)
|
|
117
|
+
this.#logger?.error(`worker exited with code ${exitCode}`);
|
|
118
|
+
};
|
|
119
|
+
async ensureWorkerReady() {
|
|
120
|
+
await this.#workerInit;
|
|
121
|
+
}
|
|
122
|
+
async project(event) {
|
|
123
|
+
if (!this.#worker)
|
|
124
|
+
await this.#workerInit;
|
|
125
|
+
if (!this.#viewLocker.ready) {
|
|
126
|
+
this.#logger?.debug(`view is locked, awaiting until it is ready to process ${(0, Event_ts_1.describe)(event)}`);
|
|
127
|
+
await this.#viewLocker.once('ready');
|
|
128
|
+
this.#logger?.debug(`view is ready, processing ${(0, Event_ts_1.describe)(event)}`);
|
|
129
|
+
}
|
|
130
|
+
return this.#remoteProjection.project(event);
|
|
131
|
+
}
|
|
132
|
+
async _project(event) {
|
|
133
|
+
await this.#remoteProjection._project(event);
|
|
134
|
+
}
|
|
135
|
+
dispose() {
|
|
136
|
+
this.#remoteProjection[Comlink.releaseProxy]();
|
|
137
|
+
this.#remoteView[Comlink.releaseProxy]();
|
|
138
|
+
this.#worker?.terminate();
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
exports.WorkerProxyProjection = WorkerProxyProjection;
|
|
142
|
+
//# sourceMappingURL=WorkerProxyProjection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkerProxyProjection.js","sourceRoot":"","sources":["../../../src/workers/WorkerProxyProjection.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,4 +15,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./AbstractWorkerProjection.js"), exports);
|
|
18
|
+
__exportStar(require("./WorkerProxyProjection.js"), exports);
|
|
18
19
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/workers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gEAA8C"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/workers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gEAA8C;AAC9C,6DAA2C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/workers/protocol.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/workers/protocol.ts"],"names":[],"mappings":";;;AAQO,MAAM,YAAY,GAAG,CAAC,GAAY,EAAsB,EAAE,CAChE,OAAO,GAAG,KAAK,QAAQ;OACpB,GAAG,KAAK,IAAI;OACZ,gBAAgB,IAAI,GAAG;OACvB,CAAC,CAAC,GAAG,CAAC,cAAc;OACpB,UAAU,IAAI,GAAG;OACjB,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;AANN,QAAA,YAAY,gBAMN;AAIZ,MAAM,mBAAmB,GAAG,CAAC,GAAY,EAA4B,EAAE,CAC7E,OAAO,GAAG,KAAK,QAAQ;OACpB,GAAG,KAAK,IAAI;OACZ,MAAM,IAAI,GAAG;OACb,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC;AAJZ,QAAA,mBAAmB,uBAIP"}
|
|
@@ -63,11 +63,10 @@ export class AbstractProjection {
|
|
|
63
63
|
* Subscribe to event store
|
|
64
64
|
* and restore view state from not yet projected events
|
|
65
65
|
*/
|
|
66
|
-
|
|
66
|
+
subscribe(eventStore) {
|
|
67
67
|
subscribe(eventStore, this, {
|
|
68
68
|
masterHandler: this.project
|
|
69
69
|
});
|
|
70
|
-
await this.restore(eventStore);
|
|
71
70
|
}
|
|
72
71
|
/** Pass event to projection event handler */
|
|
73
72
|
async project(event) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractProjection.js","sourceRoot":"","sources":["../../src/AbstractProjection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EASN,YAAY,EACZ,aAAa,EACb,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACN,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,SAAS,EACT,sBAAsB,EACtB,cAAc,EACd,MAAM,kBAAkB,CAAC;AAwB1B;;GAEG;AACH,MAAM,OAAgB,kBAAkB;IAEvC;;;OAGG;IACH,MAAM,KAAK,OAAO;QACjB,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAS;IACd,WAAW,CAAsB;IACjC,YAAY,CAAuB;IACzB,OAAO,CAAW;IAE5B;;;OAGG;IACH,IAAW,IAAI;QACd,OAAO,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,YAAY,EAAW,CAAC,CAAC;IACjE,CAAC;IAED,IAAc,IAAI,CAAC,KAAY;QAC9B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,CAAC;IAED;;;OAGG;IACH,IAAc,WAAW;QACxB,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;YACjC,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAE/D,OAAO,IAAI,CAAC,WAAW,CAAC;IACzB,CAAC;IAED,IAAc,WAAW,CAAC,KAAqC;QAC9D,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,IAAc,YAAY;QACzB,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;YAClC,IAAI,CAAC,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAEjE,OAAO,IAAI,CAAC,YAAY,CAAC;IAC1B,CAAC;IAED,IAAc,YAAY,CAAC,KAAsC;QAChE,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED,YAAY,EACX,IAAI,EACJ,UAAU,EACV,WAAW,EACX,MAAM,KAC8B,EAAE;QACtC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAEvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAEhC,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,OAAO,IAAI,MAAM,CAAC,CAAC;YAC3C,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC;IACT,CAAC;IAED;;;OAGG;IACH,
|
|
1
|
+
{"version":3,"file":"AbstractProjection.js","sourceRoot":"","sources":["../../src/AbstractProjection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EASN,YAAY,EACZ,aAAa,EACb,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACN,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,SAAS,EACT,sBAAsB,EACtB,cAAc,EACd,MAAM,kBAAkB,CAAC;AAwB1B;;GAEG;AACH,MAAM,OAAgB,kBAAkB;IAEvC;;;OAGG;IACH,MAAM,KAAK,OAAO;QACjB,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAS;IACd,WAAW,CAAsB;IACjC,YAAY,CAAuB;IACzB,OAAO,CAAW;IAE5B;;;OAGG;IACH,IAAW,IAAI;QACd,OAAO,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,YAAY,EAAW,CAAC,CAAC;IACjE,CAAC;IAED,IAAc,IAAI,CAAC,KAAY;QAC9B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,CAAC;IAED;;;OAGG;IACH,IAAc,WAAW;QACxB,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;YACjC,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAE/D,OAAO,IAAI,CAAC,WAAW,CAAC;IACzB,CAAC;IAED,IAAc,WAAW,CAAC,KAAqC;QAC9D,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,IAAc,YAAY;QACzB,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;YAClC,IAAI,CAAC,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAEjE,OAAO,IAAI,CAAC,YAAY,CAAC;IAC1B,CAAC;IAED,IAAc,YAAY,CAAC,KAAsC;QAChE,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED,YAAY,EACX,IAAI,EACJ,UAAU,EACV,WAAW,EACX,MAAM,KAC8B,EAAE;QACtC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAEvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAEhC,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,OAAO,IAAI,MAAM,CAAC,CAAC;YAC3C,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC;IACT,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,UAAuB;QAChC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE;YAC3B,aAAa,EAAE,IAAI,CAAC,OAAO;SAC3B,CAAC,CAAC;IACJ,CAAC;IAED,6CAA6C;IAC7C,KAAK,CAAC,OAAO,CAAC,KAAa;QAC1B,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;YACjD,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,yDAAyD,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAChG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,6BAA6B,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,iGAAiG;IACvF,KAAK,CAAC,QAAQ,CAAC,KAAa;QACrC,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO;YACX,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,4CAA4C,CAAC,CAAC;QAE7E,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC7E,IAAI,CAAC,iBAAiB;gBACrB,OAAO;QACT,CAAC;QAED,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAEhC,IAAI,IAAI,CAAC,YAAY;YACpB,MAAM,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC;IAED;;;;;SAKK;IACL,KAAK,CAAC,OAAO,CAAC,UAA+B;QAC5C,IAAI,IAAI,CAAC,WAAW;YACnB,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QAE/B,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAEhC,IAAI,IAAI,CAAC,WAAW;YACnB,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;IAED,uDAAuD;IAC7C,KAAK,CAAC,QAAQ,CAAC,UAA+B;QACvD,cAAc,CAAC,UAAU,EAAE,gBAAgB,EAAE,6BAA6B,CAAC,CAAC;QAE5E,IAAI,SAA6B,CAAC;QAElC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACvD,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;QACpD,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,cAAc,SAAS,CAAC,CAAC,CAAC,gBAAgB,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC;QAEzG,MAAM,YAAY,GAAI,IAAI,CAAC,WAAyC,CAAC,OAAO,CAAC;QAC7E,MAAM,cAAc,GAAG,UAAU,CAAC,gBAAgB,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;QAE5F,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE3B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YAC1C,IAAI,CAAC;gBACJ,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC3B,WAAW,IAAI,CAAC,CAAC;YAClB,CAAC;YACD,OAAO,GAAY,EAAE,CAAC;gBACrB,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACpC,CAAC;QACF,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,sBAAsB,WAAW,gBAAgB,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,KAAK,CAAC,CAAC;IAChG,CAAC;IAED;;;;OAIG;IACO,iBAAiB,CAAC,KAAc,EAAE,KAAa;QACxD,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5E,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,oDAAoD,YAAY,EAAE,EAAE;YACvF,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC;YAC3B,KAAK;YACL,KAAK;SACL,CAAC,CAAC;QAEH,MAAM,KAAK,CAAC;IACb,CAAC;CACD"}
|
|
@@ -6,7 +6,7 @@ import { SagaEventHandler } from "./SagaEventHandler.js";
|
|
|
6
6
|
import { EventDispatcher } from "./EventDispatcher.js";
|
|
7
7
|
import { InMemoryMessageBus } from "./in-memory/index.js";
|
|
8
8
|
import { isDispatchPipelineProcessor, isExecutionLocker, isAggregateSnapshotStorage, isIdentifierProvider, isEventStorageReader, isEventStorageWriter } from "./interfaces/index.js";
|
|
9
|
-
import { assertClass } from "./utils/assert.js";
|
|
9
|
+
import { assertClass, assertFunction } from "./utils/assert.js";
|
|
10
10
|
export class CqrsContainerBuilder extends ContainerBuilder {
|
|
11
11
|
constructor(options) {
|
|
12
12
|
super(options);
|
|
@@ -47,11 +47,13 @@ export class CqrsContainerBuilder extends ContainerBuilder {
|
|
|
47
47
|
* Register projection, which will expose view and will be subscribed
|
|
48
48
|
* to eventStore and will restore its state upon instance creation
|
|
49
49
|
*/
|
|
50
|
-
registerProjection(
|
|
51
|
-
|
|
50
|
+
registerProjection(typeOrFactory, exposedViewAlias) {
|
|
51
|
+
assertFunction(typeOrFactory, 'typeOrFactory');
|
|
52
52
|
const projectionFactory = (container) => {
|
|
53
|
-
const projection = container.createInstance(
|
|
53
|
+
const projection = container.createInstance(typeOrFactory);
|
|
54
54
|
projection.subscribe(container.eventStore);
|
|
55
|
+
// start async projection restoring
|
|
56
|
+
void projection.restore(container.eventStore);
|
|
55
57
|
if (exposedViewAlias)
|
|
56
58
|
return projection.view;
|
|
57
59
|
return projection;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CqrsContainerBuilder.js","sourceRoot":"","sources":["../../src/CqrsContainerBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAwC,MAAM,KAAK,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,
|
|
1
|
+
{"version":3,"file":"CqrsContainerBuilder.js","sourceRoot":"","sources":["../../src/CqrsContainerBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAwC,MAAM,KAAK,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAON,2BAA2B,EAC3B,iBAAiB,EACjB,0BAA0B,EAC1B,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEhE,MAAM,OAAO,oBACZ,SAAQ,gBAAqC;IAE7C,YAAY,OAGX;QACA,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,KAAK,CAAC,WAAW,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,CAAC;QAC9D,KAAK,CAAC,WAAW,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,CAAC;QAC9D,KAAK,CAAC,WAAW,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,CAAC;QAC9D,KAAK,CAAC,WAAW,CAAC,0BAA0B,EAAE,iBAAiB,CAAC,CAAC;QACjE,KAAK,CAAC,WAAW,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;QAExD,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;QAClD,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;QAC5C,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;QAC5C,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC;QAEtD,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YACnB,+FAA+F;YAC/F,iGAAiG;YACjG,GAAG,2BAA2B,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE;YAC9E,GAAG,2BAA2B,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE;YAClF,GAAG,2BAA2B,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE;SAC5E,CAAC,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC;IAChC,CAAC;IAED,8FAA8F;IAC9F,sBAAsB,CAAC,aAAmE;QACzF,OAAO,KAAK,CAAC,QAAQ,CACpB,CAAC,SAA8B,EAAE,EAAE;YAClC,MAAM,OAAO,GAAG,SAAS,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;YACxD,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YACxC,OAAO,OAAO,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,6FAA6F;IAC7F,qBAAqB,CAAC,aAAkE;QACvF,OAAO,KAAK,CAAC,QAAQ,CACpB,CAAC,SAA8B,EAAE,EAAE;YAClC,MAAM,QAAQ,GAAG,SAAS,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;YACzD,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YACzC,OAAO,QAAQ,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,kBAAkB,CACjB,aAAoE,EACpE,gBAA4C;QAE5C,cAAc,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QAE/C,MAAM,iBAAiB,GAAG,CAAC,SAA8B,EAAoB,EAAE;YAC9E,MAAM,UAAU,GAAG,SAAS,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;YAC3D,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAE3C,mCAAmC;YACnC,KAAK,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAE9C,IAAI,gBAAgB;gBACnB,OAAO,UAAU,CAAC,IAAI,CAAC;YAExB,OAAO,UAAU,CAAC;QACnB,CAAC,CAAC;QAEF,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAE/D,IAAI,gBAAgB;YACnB,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC;QAExB,OAAO,CAAC,CAAC;IACV,CAAC;IAED,+CAA+C;IAC/C,iBAAiB,CAAC,aAA8C;QAC/D,WAAW,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QAE5C,MAAM,qBAAqB,GAAG,CAAC,SAA8B,EAAmB,EAAE,CACjF,SAAS,CAAC,cAAc,CAAC,uBAAuB,EAAE;YACjD,gBAAgB,EAAE,CAAC,OAAY,EAAE,EAAE,CAClC,SAAS,CAAC,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC;YACjD,OAAO,EAAE,aAAa,CAAC,OAAO;YAC9B,YAAY,EAAE,aAAa,CAAC,YAAY;SACxC,CAAC,CAAC;QAEJ,OAAO,IAAI,CAAC,sBAAsB,CAAC,qBAAqB,CAAC,CAAC;IAC3D,CAAC;IAGD,0CAA0C;IAC1C,YAAY,CAAC,QAA0B;QACtC,WAAW,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAElC,MAAM,oBAAoB,GAAG,CAAC,SAA8B,EAAkB,EAAE,CAC/E,SAAS,CAAC,cAAc,CAAC,gBAAgB,EAAE;YAC1C,WAAW,EAAE,CAAC,OAAY,EAAE,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC;YAC1E,cAAc,EAAE,QAAQ,CAAC,cAAc,IAAI,QAAQ,CAAC,IAAI;YACxD,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,SAAS,EAAE,QAAQ,CAAC,IAAI;SACxB,CAAC,CAAC;QAEJ,OAAO,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,CAAC;IACzD,CAAC;CACD"}
|