node-cqrs 1.0.0-rc.2 → 1.0.0-rc.4
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/AbstractProjection.js.map +1 -1
- package/dist/CommandBus.js +2 -3
- package/dist/CommandBus.js.map +1 -1
- package/dist/CqrsContainerBuilder.js +0 -2
- package/dist/CqrsContainerBuilder.js.map +1 -1
- package/dist/EventStore.js +26 -12
- package/dist/EventStore.js.map +1 -1
- package/dist/infrastructure/utils/nextCycle.js +1 -1
- package/dist/infrastructure/utils/nextCycle.js.map +1 -1
- package/package.json +1 -1
- package/src/AbstractProjection.ts +3 -2
- package/src/CommandBus.ts +3 -4
- package/src/CqrsContainerBuilder.ts +0 -1
- package/src/EventStore.ts +38 -17
- package/src/infrastructure/utils/nextCycle.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
# [1.0.0-rc.4](https://github.com/snatalenko/node-cqrs/compare/v1.0.0-rc.3...v1.0.0-rc.4) (2024-10-02)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
# [1.0.0-rc.3](https://github.com/snatalenko/node-cqrs/compare/v1.0.0-rc.2...v1.0.0-rc.3) (2024-09-23)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
1
9
|
# [1.0.0-rc.2](https://github.com/snatalenko/node-cqrs/compare/v1.0.0-rc.1...v1.0.0-rc.2) (2024-08-03)
|
|
2
10
|
|
|
3
11
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractProjection.js","sourceRoot":"","sources":["../src/AbstractProjection.ts"],"names":[],"mappings":";;;AAAA,gEAA6D;AAa7D,mCAMiB;AAEjB,MAAM,gBAAgB,GAAG,CAAC,IAAqB,
|
|
1
|
+
{"version":3,"file":"AbstractProjection.js","sourceRoot":"","sources":["../src/AbstractProjection.ts"],"names":[],"mappings":"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"}
|
package/dist/CommandBus.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.CommandBus = void 0;
|
|
4
|
+
const InMemoryMessageBus_1 = require("./infrastructure/InMemoryMessageBus");
|
|
4
5
|
class CommandBus {
|
|
5
6
|
#logger;
|
|
6
7
|
#bus;
|
|
@@ -8,9 +9,7 @@ class CommandBus {
|
|
|
8
9
|
* Creates an instance of CommandBus.
|
|
9
10
|
*/
|
|
10
11
|
constructor({ messageBus, logger }) {
|
|
11
|
-
|
|
12
|
-
throw new TypeError('messageBus argument required');
|
|
13
|
-
this.#bus = messageBus;
|
|
12
|
+
this.#bus = messageBus ?? new InMemoryMessageBus_1.InMemoryMessageBus();
|
|
14
13
|
this.#logger = logger && 'child' in logger ?
|
|
15
14
|
logger.child({ service: 'CommandBus' }) :
|
|
16
15
|
logger;
|
package/dist/CommandBus.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandBus.js","sourceRoot":"","sources":["../src/CommandBus.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"CommandBus.js","sourceRoot":"","sources":["../src/CommandBus.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,12 +6,10 @@ const AggregateCommandHandler_1 = require("./AggregateCommandHandler");
|
|
|
6
6
|
const CommandBus_1 = require("./CommandBus");
|
|
7
7
|
const EventStore_1 = require("./EventStore");
|
|
8
8
|
const SagaEventHandler_1 = require("./SagaEventHandler");
|
|
9
|
-
const InMemoryMessageBus_1 = require("./infrastructure/InMemoryMessageBus");
|
|
10
9
|
const utils_1 = require("./utils");
|
|
11
10
|
class CqrsContainerBuilder extends di0_1.ContainerBuilder {
|
|
12
11
|
constructor(options) {
|
|
13
12
|
super(options);
|
|
14
|
-
super.register(InMemoryMessageBus_1.InMemoryMessageBus).as('messageBus');
|
|
15
13
|
super.register(EventStore_1.EventStore).as('eventStore');
|
|
16
14
|
super.register(CommandBus_1.CommandBus).as('commandBus');
|
|
17
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CqrsContainerBuilder.js","sourceRoot":"","sources":["../src/CqrsContainerBuilder.ts"],"names":[],"mappings":";;;AAAA,6BAA+E;AAE/E,uEAAoE;AACpE,6CAA0C;AAC1C,6CAA0C;AAC1C,yDAAsD;
|
|
1
|
+
{"version":3,"file":"CqrsContainerBuilder.js","sourceRoot":"","sources":["../src/CqrsContainerBuilder.ts"],"names":[],"mappings":"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"}
|
package/dist/EventStore.js
CHANGED
|
@@ -10,11 +10,15 @@ const isIEventStorage = (storage) => storage
|
|
|
10
10
|
&& typeof storage.getAggregateEvents === 'function'
|
|
11
11
|
&& typeof storage.getSagaEvents === 'function';
|
|
12
12
|
const isIObservable = (obj) => obj
|
|
13
|
+
&& 'on' in obj
|
|
13
14
|
&& typeof obj.on === 'function'
|
|
15
|
+
&& 'off' in obj
|
|
14
16
|
&& typeof obj.off === 'function';
|
|
15
17
|
const isIMessageBus = (bus) => bus
|
|
16
18
|
&& isIObservable(bus)
|
|
19
|
+
&& 'send' in bus
|
|
17
20
|
&& typeof bus.send === 'function'
|
|
21
|
+
&& 'publish' in bus
|
|
18
22
|
&& typeof bus.publish === 'function';
|
|
19
23
|
const SNAPSHOT_EVENT_TYPE = 'snapshot';
|
|
20
24
|
class EventStore {
|
|
@@ -25,6 +29,7 @@ class EventStore {
|
|
|
25
29
|
#messageBus;
|
|
26
30
|
#snapshotStorage;
|
|
27
31
|
#sagaStarters = [];
|
|
32
|
+
#defaultEventEmitter;
|
|
28
33
|
/** Whether storage supports aggregate snapshots */
|
|
29
34
|
get snapshotsSupported() {
|
|
30
35
|
return Boolean(this.#snapshotStorage);
|
|
@@ -34,8 +39,13 @@ class EventStore {
|
|
|
34
39
|
throw new TypeError('storage argument required');
|
|
35
40
|
if (!isIEventStorage(storage))
|
|
36
41
|
throw new TypeError('storage does not implement IEventStorage interface');
|
|
37
|
-
if (!isIMessageBus(messageBus))
|
|
42
|
+
if (messageBus && !isIMessageBus(messageBus))
|
|
38
43
|
throw new TypeError('messageBus does not implement IMessageBus interface');
|
|
44
|
+
if (messageBus && isIObservable(storage))
|
|
45
|
+
throw new TypeError('both storage and messageBus implement IObservable interface, it is not yet supported');
|
|
46
|
+
const defaultEventEmitter = isIObservable(storage) ? storage : messageBus;
|
|
47
|
+
if (!defaultEventEmitter)
|
|
48
|
+
throw new TypeError('storage must implement IObservable if messageBus is not injected');
|
|
39
49
|
this.#publishAsync = eventStoreConfig?.publishAsync ?? true;
|
|
40
50
|
this.#validator = eventValidator;
|
|
41
51
|
this.#logger = logger && 'child' in logger ?
|
|
@@ -44,6 +54,7 @@ class EventStore {
|
|
|
44
54
|
this.#storage = storage;
|
|
45
55
|
this.#snapshotStorage = snapshotStorage;
|
|
46
56
|
this.#messageBus = messageBus;
|
|
57
|
+
this.#defaultEventEmitter = defaultEventEmitter;
|
|
47
58
|
}
|
|
48
59
|
/** Retrieve new ID from the storage */
|
|
49
60
|
async getNewId() {
|
|
@@ -118,7 +129,7 @@ class EventStore {
|
|
|
118
129
|
// after events are saved to the persistent storage,
|
|
119
130
|
// publish them to the event bus (i.e. RabbitMq)
|
|
120
131
|
if (this.#messageBus)
|
|
121
|
-
await this
|
|
132
|
+
await this.#publish(eventStreamWithoutSnapshots);
|
|
122
133
|
return eventStreamWithoutSnapshots;
|
|
123
134
|
}
|
|
124
135
|
/** Generate and attach sagaId to events that start new sagas */
|
|
@@ -160,10 +171,7 @@ class EventStore {
|
|
|
160
171
|
]);
|
|
161
172
|
return eventsWithoutSnapshot;
|
|
162
173
|
}
|
|
163
|
-
|
|
164
|
-
* After events are
|
|
165
|
-
*/
|
|
166
|
-
async publish(events) {
|
|
174
|
+
async #publish(events) {
|
|
167
175
|
if (this.#publishAsync) {
|
|
168
176
|
this.#logger?.debug(`publishing ${Event.describeMultiple(events)} asynchronously...`);
|
|
169
177
|
setImmediate(() => this.#publishEvents(events));
|
|
@@ -174,8 +182,10 @@ class EventStore {
|
|
|
174
182
|
}
|
|
175
183
|
}
|
|
176
184
|
async #publishEvents(events) {
|
|
185
|
+
if (!this.#messageBus)
|
|
186
|
+
return;
|
|
177
187
|
try {
|
|
178
|
-
await Promise.all(events.map(event => this.#messageBus
|
|
188
|
+
await Promise.all(events.map(event => this.#messageBus?.publish(event)));
|
|
179
189
|
this.#logger?.debug(`${Event.describeMultiple(events)} published`);
|
|
180
190
|
}
|
|
181
191
|
catch (error) {
|
|
@@ -193,22 +203,26 @@ class EventStore {
|
|
|
193
203
|
throw new TypeError('handler argument must be a Function');
|
|
194
204
|
if (arguments.length !== 2)
|
|
195
205
|
throw new TypeError(`2 arguments are expected, but ${arguments.length} received`);
|
|
196
|
-
this.#
|
|
206
|
+
if (isIObservable(this.#storage))
|
|
207
|
+
this.#storage.on(messageType, handler);
|
|
208
|
+
this.#messageBus?.on(messageType, handler);
|
|
197
209
|
}
|
|
198
210
|
/** Remove previously installed listener */
|
|
199
211
|
off(messageType, handler) {
|
|
200
|
-
this.#
|
|
212
|
+
if (isIObservable(this.#storage))
|
|
213
|
+
this.#storage.off(messageType, handler);
|
|
214
|
+
this.#messageBus?.off(messageType, handler);
|
|
201
215
|
}
|
|
202
216
|
/** Get or create a named queue, which delivers events to a single handler only */
|
|
203
217
|
queue(name) {
|
|
204
|
-
if (
|
|
218
|
+
if (!this.#defaultEventEmitter.queue)
|
|
205
219
|
throw new Error('Named queues are not supported by the underlying message bus');
|
|
206
|
-
return this.#
|
|
220
|
+
return this.#defaultEventEmitter.queue(name);
|
|
207
221
|
}
|
|
208
222
|
/** Creates one-time subscription for one or multiple events that match a filter */
|
|
209
223
|
once(messageTypes, handler, filter) {
|
|
210
224
|
const subscribeTo = Array.isArray(messageTypes) ? messageTypes : [messageTypes];
|
|
211
|
-
return (0, utils_1.setupOneTimeEmitterSubscription)(this.#
|
|
225
|
+
return (0, utils_1.setupOneTimeEmitterSubscription)(this.#defaultEventEmitter, subscribeTo, filter, handler, this.#logger);
|
|
212
226
|
}
|
|
213
227
|
}
|
|
214
228
|
exports.EventStore = EventStore;
|
package/dist/EventStore.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventStore.js","sourceRoot":"","sources":["../src/EventStore.ts"],"names":[],"mappings":";;;AAeA,mCAAwE;AACxE,iCAAiC;AAEjC,MAAM,eAAe,GAAG,CAAC,OAAsB,
|
|
1
|
+
{"version":3,"file":"EventStore.js","sourceRoot":"","sources":["../src/EventStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,6 @@ exports.nextCycle = void 0;
|
|
|
4
4
|
/**
|
|
5
5
|
* @returns Promise that resolves on next event loop cycle
|
|
6
6
|
*/
|
|
7
|
-
const nextCycle = () => new Promise(rs =>
|
|
7
|
+
const nextCycle = () => new Promise(rs => setImmediate(rs));
|
|
8
8
|
exports.nextCycle = nextCycle;
|
|
9
9
|
//# sourceMappingURL=nextCycle.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nextCycle.js","sourceRoot":"","sources":["../../../src/infrastructure/utils/nextCycle.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACI,MAAM,SAAS,GAAG,GAAkB,EAAE,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"nextCycle.js","sourceRoot":"","sources":["../../../src/infrastructure/utils/nextCycle.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACI,MAAM,SAAS,GAAG,GAAkB,EAAE,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;AAArE,QAAA,SAAS,aAA4D"}
|
package/package.json
CHANGED
|
@@ -19,13 +19,14 @@ import {
|
|
|
19
19
|
subscribe
|
|
20
20
|
} from './utils';
|
|
21
21
|
|
|
22
|
-
const isProjectionView = (view: IProjectionView) =>
|
|
22
|
+
const isProjectionView = (view: IProjectionView): view is IProjectionView =>
|
|
23
23
|
'ready' in view &&
|
|
24
24
|
'lock' in view &&
|
|
25
25
|
'unlock' in view &&
|
|
26
26
|
'once' in view;
|
|
27
27
|
|
|
28
|
-
const asProjectionView = (view: any): IProjectionView
|
|
28
|
+
const asProjectionView = (view: any): IProjectionView | undefined =>
|
|
29
|
+
(isProjectionView(view) ? view : undefined);
|
|
29
30
|
|
|
30
31
|
/**
|
|
31
32
|
* Base class for Projection definition
|
package/src/CommandBus.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { InMemoryMessageBus } from "./infrastructure/InMemoryMessageBus";
|
|
1
2
|
import {
|
|
2
3
|
ICommand,
|
|
3
4
|
ICommandBus,
|
|
@@ -17,13 +18,11 @@ export class CommandBus implements ICommandBus {
|
|
|
17
18
|
* Creates an instance of CommandBus.
|
|
18
19
|
*/
|
|
19
20
|
constructor({ messageBus, logger }: {
|
|
20
|
-
messageBus
|
|
21
|
+
messageBus?: IMessageBus,
|
|
21
22
|
logger?: ILogger | IExtendableLogger
|
|
22
23
|
}) {
|
|
23
|
-
|
|
24
|
-
throw new TypeError('messageBus argument required');
|
|
24
|
+
this.#bus = messageBus ?? new InMemoryMessageBus();
|
|
25
25
|
|
|
26
|
-
this.#bus = messageBus;
|
|
27
26
|
this.#logger = logger && 'child' in logger ?
|
|
28
27
|
logger.child({ service: 'CommandBus' }) :
|
|
29
28
|
logger;
|
|
@@ -34,7 +34,6 @@ export class CqrsContainerBuilder extends ContainerBuilder {
|
|
|
34
34
|
singletones: object
|
|
35
35
|
}) {
|
|
36
36
|
super(options);
|
|
37
|
-
super.register(InMemoryMessageBus).as('messageBus');
|
|
38
37
|
super.register(EventStore).as('eventStore');
|
|
39
38
|
super.register(CommandBus).as('commandBus');
|
|
40
39
|
}
|
package/src/EventStore.ts
CHANGED
|
@@ -16,20 +16,27 @@ import {
|
|
|
16
16
|
import { getClassName, setupOneTimeEmitterSubscription } from "./utils";
|
|
17
17
|
import * as Event from './Event';
|
|
18
18
|
|
|
19
|
-
const isIEventStorage = (storage: IEventStorage) =>
|
|
19
|
+
const isIEventStorage = (storage: IEventStorage): storage is IEventStorage =>
|
|
20
|
+
storage
|
|
20
21
|
&& typeof storage.getNewId === 'function'
|
|
21
22
|
&& typeof storage.commitEvents === 'function'
|
|
22
23
|
&& typeof storage.getEvents === 'function'
|
|
23
24
|
&& typeof storage.getAggregateEvents === 'function'
|
|
24
25
|
&& typeof storage.getSagaEvents === 'function';
|
|
25
26
|
|
|
26
|
-
const isIObservable = (obj: IObservable | any) =>
|
|
27
|
+
const isIObservable = (obj: IObservable | any): obj is IObservable =>
|
|
28
|
+
obj
|
|
29
|
+
&& 'on' in obj
|
|
27
30
|
&& typeof obj.on === 'function'
|
|
31
|
+
&& 'off' in obj
|
|
28
32
|
&& typeof obj.off === 'function';
|
|
29
33
|
|
|
30
|
-
const isIMessageBus = (bus: IMessageBus | any):
|
|
34
|
+
const isIMessageBus = (bus: IMessageBus | any): bus is IMessageBus =>
|
|
35
|
+
bus
|
|
31
36
|
&& isIObservable(bus)
|
|
37
|
+
&& 'send' in bus
|
|
32
38
|
&& typeof bus.send === 'function'
|
|
39
|
+
&& 'publish' in bus
|
|
33
40
|
&& typeof bus.publish === 'function';
|
|
34
41
|
|
|
35
42
|
const SNAPSHOT_EVENT_TYPE = 'snapshot';
|
|
@@ -40,9 +47,10 @@ export class EventStore implements IEventStore {
|
|
|
40
47
|
#validator: (event: IEvent<any>) => void;
|
|
41
48
|
#logger?: ILogger;
|
|
42
49
|
#storage: IEventStorage;
|
|
43
|
-
#messageBus
|
|
50
|
+
#messageBus?: IMessageBus;
|
|
44
51
|
#snapshotStorage: IAggregateSnapshotStorage | undefined;
|
|
45
52
|
#sagaStarters: string[] = [];
|
|
53
|
+
#defaultEventEmitter: IObservable;
|
|
46
54
|
|
|
47
55
|
/** Whether storage supports aggregate snapshots */
|
|
48
56
|
get snapshotsSupported(): boolean {
|
|
@@ -58,7 +66,7 @@ export class EventStore implements IEventStore {
|
|
|
58
66
|
logger
|
|
59
67
|
}: {
|
|
60
68
|
storage: IEventStorage,
|
|
61
|
-
messageBus
|
|
69
|
+
messageBus?: IMessageBus,
|
|
62
70
|
snapshotStorage?: IAggregateSnapshotStorage,
|
|
63
71
|
eventValidator?: IMessageHandler,
|
|
64
72
|
eventStoreConfig?: {
|
|
@@ -70,8 +78,14 @@ export class EventStore implements IEventStore {
|
|
|
70
78
|
throw new TypeError('storage argument required');
|
|
71
79
|
if (!isIEventStorage(storage))
|
|
72
80
|
throw new TypeError('storage does not implement IEventStorage interface');
|
|
73
|
-
if (!isIMessageBus(messageBus))
|
|
81
|
+
if (messageBus && !isIMessageBus(messageBus))
|
|
74
82
|
throw new TypeError('messageBus does not implement IMessageBus interface');
|
|
83
|
+
if (messageBus && isIObservable(storage))
|
|
84
|
+
throw new TypeError('both storage and messageBus implement IObservable interface, it is not yet supported');
|
|
85
|
+
|
|
86
|
+
const defaultEventEmitter = isIObservable(storage) ? storage : messageBus;
|
|
87
|
+
if (!defaultEventEmitter)
|
|
88
|
+
throw new TypeError('storage must implement IObservable if messageBus is not injected');
|
|
75
89
|
|
|
76
90
|
this.#publishAsync = eventStoreConfig?.publishAsync ?? true;
|
|
77
91
|
this.#validator = eventValidator;
|
|
@@ -81,6 +95,7 @@ export class EventStore implements IEventStore {
|
|
|
81
95
|
this.#storage = storage;
|
|
82
96
|
this.#snapshotStorage = snapshotStorage;
|
|
83
97
|
this.#messageBus = messageBus;
|
|
98
|
+
this.#defaultEventEmitter = defaultEventEmitter;
|
|
84
99
|
}
|
|
85
100
|
|
|
86
101
|
/** Retrieve new ID from the storage */
|
|
@@ -178,7 +193,7 @@ export class EventStore implements IEventStore {
|
|
|
178
193
|
// after events are saved to the persistent storage,
|
|
179
194
|
// publish them to the event bus (i.e. RabbitMq)
|
|
180
195
|
if (this.#messageBus)
|
|
181
|
-
await this
|
|
196
|
+
await this.#publish(eventStreamWithoutSnapshots);
|
|
182
197
|
|
|
183
198
|
return eventStreamWithoutSnapshots;
|
|
184
199
|
}
|
|
@@ -231,10 +246,7 @@ export class EventStore implements IEventStore {
|
|
|
231
246
|
return eventsWithoutSnapshot;
|
|
232
247
|
}
|
|
233
248
|
|
|
234
|
-
|
|
235
|
-
* After events are
|
|
236
|
-
*/
|
|
237
|
-
async publish(events: IEventSet) {
|
|
249
|
+
async #publish(events: IEventSet) {
|
|
238
250
|
if (this.#publishAsync) {
|
|
239
251
|
this.#logger?.debug(`publishing ${Event.describeMultiple(events)} asynchronously...`);
|
|
240
252
|
setImmediate(() => this.#publishEvents(events));
|
|
@@ -246,9 +258,12 @@ export class EventStore implements IEventStore {
|
|
|
246
258
|
}
|
|
247
259
|
|
|
248
260
|
async #publishEvents(events: IEventSet) {
|
|
261
|
+
if (!this.#messageBus)
|
|
262
|
+
return;
|
|
263
|
+
|
|
249
264
|
try {
|
|
250
265
|
await Promise.all(events.map(event =>
|
|
251
|
-
this.#messageBus
|
|
266
|
+
this.#messageBus?.publish(event)));
|
|
252
267
|
|
|
253
268
|
this.#logger?.debug(`${Event.describeMultiple(events)} published`);
|
|
254
269
|
}
|
|
@@ -269,26 +284,32 @@ export class EventStore implements IEventStore {
|
|
|
269
284
|
if (arguments.length !== 2)
|
|
270
285
|
throw new TypeError(`2 arguments are expected, but ${arguments.length} received`);
|
|
271
286
|
|
|
272
|
-
this.#
|
|
287
|
+
if (isIObservable(this.#storage))
|
|
288
|
+
this.#storage.on(messageType, handler);
|
|
289
|
+
|
|
290
|
+
this.#messageBus?.on(messageType, handler);
|
|
273
291
|
}
|
|
274
292
|
|
|
275
293
|
/** Remove previously installed listener */
|
|
276
294
|
off(messageType: string, handler: IMessageHandler) {
|
|
277
|
-
this.#
|
|
295
|
+
if (isIObservable(this.#storage))
|
|
296
|
+
this.#storage.off(messageType, handler);
|
|
297
|
+
|
|
298
|
+
this.#messageBus?.off(messageType, handler);
|
|
278
299
|
}
|
|
279
300
|
|
|
280
301
|
/** Get or create a named queue, which delivers events to a single handler only */
|
|
281
302
|
queue(name: string): IObservable {
|
|
282
|
-
if (
|
|
303
|
+
if (!this.#defaultEventEmitter.queue)
|
|
283
304
|
throw new Error('Named queues are not supported by the underlying message bus');
|
|
284
305
|
|
|
285
|
-
return this.#
|
|
306
|
+
return this.#defaultEventEmitter.queue(name);
|
|
286
307
|
}
|
|
287
308
|
|
|
288
309
|
/** Creates one-time subscription for one or multiple events that match a filter */
|
|
289
310
|
once(messageTypes: string | string[], handler: IMessageHandler, filter: (e: IEvent) => boolean): Promise<IEvent> {
|
|
290
311
|
const subscribeTo = Array.isArray(messageTypes) ? messageTypes : [messageTypes];
|
|
291
312
|
|
|
292
|
-
return setupOneTimeEmitterSubscription(this.#
|
|
313
|
+
return setupOneTimeEmitterSubscription(this.#defaultEventEmitter, subscribeTo, filter, handler, this.#logger);
|
|
293
314
|
}
|
|
294
315
|
}
|