@daiso-tech/core 0.24.0 → 0.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/README.md +3 -2
  2. package/dist/async/utilities/lazy-promise/lazy-promise.d.ts +12 -3
  3. package/dist/async/utilities/lazy-promise/lazy-promise.js +37 -4
  4. package/dist/async/utilities/lazy-promise/lazy-promise.js.map +1 -1
  5. package/dist/cache/contracts/cache.contract.d.ts +4 -4
  6. package/dist/cache/implementations/adapters/kysely-sqlite-cache-adapter/kysely-sqlite-cache-adapter.js +2 -2
  7. package/dist/cache/implementations/adapters/kysely-sqlite-cache-adapter/kysely-sqlite-cache-adapter.js.map +1 -1
  8. package/dist/cache/implementations/adapters/memory-cache-adapter/memory-cache-adapter.js +4 -4
  9. package/dist/cache/implementations/adapters/memory-cache-adapter/memory-cache-adapter.js.map +1 -1
  10. package/dist/cache/implementations/adapters/mongodb-cache-adapter/mongodb-cache-adapter.js +2 -2
  11. package/dist/cache/implementations/adapters/mongodb-cache-adapter/mongodb-cache-adapter.js.map +1 -1
  12. package/dist/cache/implementations/adapters/redis-cache-adapter/redis-cache-adapter.js +5 -5
  13. package/dist/cache/implementations/adapters/redis-cache-adapter/redis-cache-adapter.js.map +1 -1
  14. package/dist/cache/implementations/derivables/cache/cache.d.ts +70 -184
  15. package/dist/cache/implementations/derivables/cache/cache.js +68 -185
  16. package/dist/cache/implementations/derivables/cache/cache.js.map +1 -1
  17. package/dist/cache/implementations/derivables/cache-factory/cache-factory.d.ts +11 -15
  18. package/dist/cache/implementations/derivables/cache-factory/cache-factory.js +0 -11
  19. package/dist/cache/implementations/derivables/cache-factory/cache-factory.js.map +1 -1
  20. package/dist/collection/implementations/async-iterable-collection/async-iterable-collection.js +5 -5
  21. package/dist/collection/implementations/async-iterable-collection/async-iterable-collection.js.map +1 -1
  22. package/dist/collection/implementations/iterable-collection/iterable-collection.js +5 -5
  23. package/dist/collection/implementations/iterable-collection/iterable-collection.js.map +1 -1
  24. package/dist/collection/implementations/list-collection/list-collection.js +5 -5
  25. package/dist/collection/implementations/list-collection/list-collection.js.map +1 -1
  26. package/dist/event-bus/contracts/_shared.d.ts +0 -7
  27. package/dist/event-bus/contracts/_shared.js.map +1 -1
  28. package/dist/event-bus/contracts/event-bus-adapter.contract.d.ts +6 -5
  29. package/dist/event-bus/contracts/event-bus.contract.d.ts +21 -16
  30. package/dist/event-bus/implementations/adapters/memory-event-bus-adapter/memory-event-bus-adapter.d.ts +4 -3
  31. package/dist/event-bus/implementations/adapters/memory-event-bus-adapter/memory-event-bus-adapter.js +3 -3
  32. package/dist/event-bus/implementations/adapters/memory-event-bus-adapter/memory-event-bus-adapter.js.map +1 -1
  33. package/dist/event-bus/implementations/adapters/no-op-event-bus-adapter/no-op-event-bus-adapter.d.ts +4 -3
  34. package/dist/event-bus/implementations/adapters/no-op-event-bus-adapter/no-op-event-bus-adapter.js.map +1 -1
  35. package/dist/event-bus/implementations/adapters/redis-pub-sub-event-bus-adapter/redis-pub-sub-event-bus-adapter.d.ts +4 -3
  36. package/dist/event-bus/implementations/adapters/redis-pub-sub-event-bus-adapter/redis-pub-sub-event-bus-adapter.js +3 -3
  37. package/dist/event-bus/implementations/adapters/redis-pub-sub-event-bus-adapter/redis-pub-sub-event-bus-adapter.js.map +1 -1
  38. package/dist/event-bus/implementations/derivables/event-bus/event-bus.d.ts +64 -33
  39. package/dist/event-bus/implementations/derivables/event-bus/event-bus.js +92 -33
  40. package/dist/event-bus/implementations/derivables/event-bus/event-bus.js.map +1 -1
  41. package/dist/event-bus/implementations/test-utilities/event-bus.test-suite.js +957 -201
  42. package/dist/event-bus/implementations/test-utilities/event-bus.test-suite.js.map +1 -1
  43. package/dist/lock/contracts/lock-provider.contract.d.ts +2 -2
  44. package/dist/lock/contracts/lock.contract.d.ts +24 -6
  45. package/dist/lock/implementations/adapters/kysely-lock-adapter/kysely-lock-adapter.js +2 -2
  46. package/dist/lock/implementations/adapters/kysely-lock-adapter/kysely-lock-adapter.js.map +1 -1
  47. package/dist/lock/implementations/adapters/memory-lock-adapter/memory-lock-adapter.js +4 -4
  48. package/dist/lock/implementations/adapters/memory-lock-adapter/memory-lock-adapter.js.map +1 -1
  49. package/dist/lock/implementations/adapters/mongodb-lock-adapter/mongodb-lock-adapter.js +2 -2
  50. package/dist/lock/implementations/adapters/mongodb-lock-adapter/mongodb-lock-adapter.js.map +1 -1
  51. package/dist/lock/implementations/adapters/redis-lock-adapter/redis-lock-adapter.js +4 -4
  52. package/dist/lock/implementations/adapters/redis-lock-adapter/redis-lock-adapter.js.map +1 -1
  53. package/dist/lock/implementations/derivables/lock-provider/lock-provider.d.ts +90 -48
  54. package/dist/lock/implementations/derivables/lock-provider/lock-provider.js +67 -43
  55. package/dist/lock/implementations/derivables/lock-provider/lock-provider.js.map +1 -1
  56. package/dist/lock/implementations/derivables/lock-provider/lock-serde-transformer.d.ts +4 -23
  57. package/dist/lock/implementations/derivables/lock-provider/lock-serde-transformer.js +8 -2
  58. package/dist/lock/implementations/derivables/lock-provider/lock-serde-transformer.js.map +1 -1
  59. package/dist/lock/implementations/derivables/lock-provider/lock.d.ts +744 -11
  60. package/dist/lock/implementations/derivables/lock-provider/lock.js +770 -3
  61. package/dist/lock/implementations/derivables/lock-provider/lock.js.map +1 -1
  62. package/dist/lock/implementations/derivables/lock-provider-factory/lock-provider-factory.d.ts +36 -5
  63. package/dist/lock/implementations/derivables/lock-provider-factory/lock-provider-factory.js +10 -4
  64. package/dist/lock/implementations/derivables/lock-provider-factory/lock-provider-factory.js.map +1 -1
  65. package/dist/lock/implementations/test-utilities/lock-provider.test-suite.d.ts +1 -0
  66. package/dist/lock/implementations/test-utilities/lock-provider.test-suite.js +417 -0
  67. package/dist/lock/implementations/test-utilities/lock-provider.test-suite.js.map +1 -1
  68. package/dist/serde/implementations/derivables/serde.js +4 -4
  69. package/dist/serde/implementations/derivables/serde.js.map +1 -1
  70. package/dist/utilities/{constants.js → _constants.js} +1 -1
  71. package/dist/utilities/_constants.js.map +1 -0
  72. package/dist/utilities/_module-exports.d.ts +1 -1
  73. package/dist/utilities/_module-exports.js +1 -1
  74. package/dist/utilities/_module-exports.js.map +1 -1
  75. package/dist/utilities/contracts/_module.d.ts +0 -1
  76. package/dist/utilities/contracts/_module.js +0 -1
  77. package/dist/utilities/contracts/_module.js.map +1 -1
  78. package/dist/utilities/functions.d.ts +3 -7
  79. package/dist/utilities/functions.js +3 -10
  80. package/dist/utilities/functions.js.map +1 -1
  81. package/dist/utilities/pipeline/_module.d.ts +1 -0
  82. package/dist/utilities/pipeline/_module.js +2 -0
  83. package/dist/utilities/pipeline/_module.js.map +1 -0
  84. package/dist/utilities/pipeline/pipeline.d.ts +45 -0
  85. package/dist/utilities/pipeline/pipeline.js +75 -0
  86. package/dist/utilities/pipeline/pipeline.js.map +1 -0
  87. package/dist/utilities/time-span/time-span.d.ts +3 -12
  88. package/dist/utilities/time-span/time-span.js +3 -6
  89. package/dist/utilities/time-span/time-span.js.map +1 -1
  90. package/dist/utilities/types.d.ts +19 -2
  91. package/package.json +1 -1
  92. package/dist/utilities/constants.js.map +0 -1
  93. package/dist/utilities/contracts/buildable.contract.d.ts +0 -11
  94. package/dist/utilities/contracts/buildable.contract.js +0 -5
  95. package/dist/utilities/contracts/buildable.contract.js.map +0 -1
  96. /package/dist/utilities/{constants.d.ts → _constants.d.ts} +0 -0
@@ -64,6 +64,12 @@ import { NoOpSerdeAdapter } from "../../../serde/implementations/adapters/_modul
64
64
  */
65
65
  export function eventBusTestSuite(settings) {
66
66
  const { expect, serde = new Serde(new NoOpSerdeAdapter()), test, describe, createEventBus, beforeEach, } = settings;
67
+ const TTL = TimeSpan.fromMilliseconds(50);
68
+ class AddEvent extends BaseEvent {
69
+ }
70
+ class SubEvent extends BaseEvent {
71
+ }
72
+ serde.registerEvent(AddEvent).registerEvent(SubEvent);
67
73
  let eventBusA;
68
74
  let eventBusB;
69
75
  beforeEach(async () => {
@@ -71,335 +77,1085 @@ export function eventBusTestSuite(settings) {
71
77
  eventBusA = eventBus;
72
78
  eventBusB = eventBus.withGroup("b");
73
79
  });
74
- const TTL = TimeSpan.fromMilliseconds(50);
75
- class TestEventA extends BaseEvent {
76
- }
77
- class TestEventB extends BaseEvent {
78
- }
79
- serde.registerEvent(TestEventA);
80
- serde.registerEvent(TestEventB);
81
80
  describe("Api tests:", () => {
82
81
  describe("method: addListener, removeListener, dispatch", () => {
83
- test("Should be null when listener added and event is not triggered", async () => {
84
- let result = null;
85
- await eventBusA.addListener(TestEventA, (event) => {
86
- result = event;
82
+ describe("Should be null when listener is added and event is not triggered", () => {
83
+ test("Object literal listener", async () => {
84
+ const listener = {
85
+ result: null,
86
+ invoke(event) {
87
+ this.result = event;
88
+ },
89
+ };
90
+ await eventBusA.addListener(AddEvent, listener);
91
+ expect(listener.result).toBeNull();
92
+ await eventBusA.removeListener(AddEvent, listener);
93
+ });
94
+ test("Class instance listener", async () => {
95
+ class Listener {
96
+ result = null;
97
+ invoke(event) {
98
+ this.result = event;
99
+ }
100
+ }
101
+ const listener = new Listener();
102
+ await eventBusA.addListener(AddEvent, listener);
103
+ expect(listener.result).toBeNull();
104
+ await eventBusA.removeListener(AddEvent, listener);
105
+ });
106
+ test("Function listener", async () => {
107
+ let result = null;
108
+ const listener = (event) => {
109
+ result = event;
110
+ };
111
+ await eventBusA.addListener(AddEvent, listener);
112
+ expect(result).toBeNull();
113
+ await eventBusA.removeListener(AddEvent, listener);
87
114
  });
88
- expect(result).toBeNull();
89
115
  });
90
- test("Should be TestEventA when listener added and event is triggered", async () => {
91
- let result = null;
92
- await eventBusA.addListener(TestEventA, (event) => {
93
- result = event;
116
+ describe("Should be AddEvent when listener is added and event is triggered", () => {
117
+ test("Object literal listener", async () => {
118
+ const listener = {
119
+ result: null,
120
+ invoke(event) {
121
+ this.result = event;
122
+ },
123
+ };
124
+ await eventBusA.addListener(AddEvent, listener);
125
+ const event = new AddEvent({
126
+ a: 1,
127
+ b: 2,
128
+ });
129
+ await eventBusA.dispatch(event);
130
+ await delay(TTL);
131
+ expect(listener.result).toEqual(event);
132
+ expect(listener.result).toBeInstanceOf(AddEvent);
133
+ await eventBusA.removeListener(AddEvent, listener);
94
134
  });
95
- const event = new TestEventA({
96
- type: TestEventA.name,
135
+ test("Class instance listener", async () => {
136
+ class Listener {
137
+ result = null;
138
+ invoke(event) {
139
+ this.result = event;
140
+ }
141
+ }
142
+ const listener = new Listener();
143
+ await eventBusA.addListener(AddEvent, listener);
144
+ const event = new AddEvent({
145
+ a: 1,
146
+ b: 2,
147
+ });
148
+ await eventBusA.dispatch(event);
149
+ await delay(TTL);
150
+ expect(listener.result).toEqual(event);
151
+ expect(listener.result).toBeInstanceOf(AddEvent);
152
+ await eventBusA.removeListener(AddEvent, listener);
153
+ });
154
+ test("Function listener", async () => {
155
+ let result = null;
156
+ const listener = (event) => {
157
+ result = event;
158
+ };
159
+ await eventBusA.addListener(AddEvent, listener);
160
+ const event = new AddEvent({
161
+ a: 1,
162
+ b: 2,
163
+ });
164
+ await eventBusA.dispatch(event);
165
+ await delay(TTL);
166
+ expect(result).toEqual(event);
167
+ expect(result).toBeInstanceOf(AddEvent);
168
+ await eventBusA.removeListener(AddEvent, listener);
97
169
  });
98
- await eventBusA.dispatch(event);
99
- await delay(TTL);
100
- expect(result).toEqual(event);
101
- expect(result).toBeInstanceOf(TestEventA);
102
170
  });
103
- test("Should be null when listener removed and event is triggered", async () => {
104
- const event = new TestEventA({
105
- type: TestEventA.name,
171
+ describe("Should be null when listener removed and event is triggered", () => {
172
+ test("Object literal listener", async () => {
173
+ const listener = {
174
+ result: null,
175
+ invoke(event) {
176
+ this.result = event;
177
+ },
178
+ };
179
+ await eventBusA.addListener(AddEvent, listener);
180
+ await eventBusA.removeListener(AddEvent, listener);
181
+ const event = new AddEvent({
182
+ a: 1,
183
+ b: 2,
184
+ });
185
+ await eventBusA.dispatch(event);
186
+ await delay(TTL);
187
+ expect(listener.result).toBeNull();
188
+ });
189
+ test("Class instance listener", async () => {
190
+ class Listener {
191
+ result = null;
192
+ invoke(event) {
193
+ this.result = event;
194
+ }
195
+ }
196
+ const listener = new Listener();
197
+ await eventBusA.addListener(AddEvent, listener);
198
+ await eventBusA.removeListener(AddEvent, listener);
199
+ const event = new AddEvent({
200
+ a: 1,
201
+ b: 2,
202
+ });
203
+ await eventBusA.dispatch(event);
204
+ await delay(TTL);
205
+ expect(listener.result).toBeNull();
206
+ });
207
+ test("Function listener", async () => {
208
+ let result = null;
209
+ const listener = (event) => {
210
+ result = event;
211
+ };
212
+ await eventBusA.addListener(AddEvent, listener);
213
+ await eventBusA.removeListener(AddEvent, listener);
214
+ const event = new AddEvent({
215
+ a: 1,
216
+ b: 2,
217
+ });
218
+ await eventBusA.dispatch(event);
219
+ await delay(TTL);
220
+ expect(result).toBeNull();
106
221
  });
107
- let result = null;
108
- const listener = (event) => {
109
- result = event;
110
- };
111
- await eventBusA.addListener(TestEventA, listener);
112
- await eventBusA.removeListener(TestEventA, listener);
113
- await eventBusA.dispatch(event);
114
- await delay(TTL);
115
- expect(result).toBeNull();
116
222
  });
117
223
  });
118
- describe("method: addListenerMany, removeListenerMany, dispatch", () => {
119
- test("Should be null when listener added and event is not triggered", async () => {
120
- let result = null;
121
- await eventBusA.addListenerMany([TestEventA, TestEventB], (event) => {
122
- result = event;
224
+ describe("method: addListenerMany, removeListenerMany, dispatchMany", () => {
225
+ describe("Should be null when listener is added and event is not triggered", () => {
226
+ test("Object literal listener", async () => {
227
+ const listener = {
228
+ resultA: null,
229
+ resultB: null,
230
+ invoke(event) {
231
+ if (event instanceof AddEvent) {
232
+ this.resultA = event;
233
+ }
234
+ if (event instanceof SubEvent) {
235
+ this.resultB = event;
236
+ }
237
+ },
238
+ };
239
+ await eventBusA.addListenerMany([AddEvent, SubEvent], listener);
240
+ expect(listener.resultA).toBeNull();
241
+ expect(listener.resultB).toBeNull();
242
+ await eventBusA.removeListenerMany([AddEvent, SubEvent], listener);
123
243
  });
124
- expect(result).toBeNull();
125
- });
126
- test("Should be BaseEvent when listener added and event is triggered", async () => {
127
- const event_1 = new TestEventA({
128
- type: TestEventA.name,
244
+ test("Class instance listener", async () => {
245
+ class Listener {
246
+ resultA = null;
247
+ resultB = null;
248
+ invoke(event) {
249
+ if (event instanceof AddEvent) {
250
+ this.resultA = event;
251
+ }
252
+ if (event instanceof SubEvent) {
253
+ this.resultB = event;
254
+ }
255
+ }
256
+ }
257
+ const listener = new Listener();
258
+ await eventBusA.addListenerMany([AddEvent, SubEvent], listener);
259
+ expect(listener.resultA).toBeNull();
260
+ expect(listener.resultB).toBeNull();
261
+ await eventBusA.removeListenerMany([AddEvent, SubEvent], listener);
129
262
  });
130
- const event_2 = new TestEventB({
131
- type: TestEventB.name,
263
+ test("Function listener", async () => {
264
+ let resultA = null;
265
+ let resultB = null;
266
+ const listener = (event) => {
267
+ if (event instanceof AddEvent) {
268
+ resultA = event;
269
+ }
270
+ if (event instanceof SubEvent) {
271
+ resultB = event;
272
+ }
273
+ };
274
+ await eventBusA.addListenerMany([AddEvent, SubEvent], listener);
275
+ expect(resultA).toBeNull();
276
+ expect(resultB).toBeNull();
277
+ await eventBusA.removeListenerMany([AddEvent, SubEvent], listener);
132
278
  });
133
- let result_1 = null;
134
- let result_2 = null;
135
- await eventBusA.addListenerMany([TestEventA, TestEventB], (eventObj) => {
136
- if (eventObj instanceof TestEventA) {
137
- result_1 = eventObj;
138
- }
139
- if (eventObj instanceof TestEventB) {
140
- result_2 = eventObj;
279
+ });
280
+ describe("Should be AddEvent and SubEvent when listener is added and event is triggered", () => {
281
+ test("Object literal listener", async () => {
282
+ const listener = {
283
+ resultA: null,
284
+ resultB: null,
285
+ invoke(event) {
286
+ if (event instanceof AddEvent) {
287
+ this.resultA = event;
288
+ }
289
+ if (event instanceof SubEvent) {
290
+ this.resultB = event;
291
+ }
292
+ },
293
+ };
294
+ await eventBusA.addListenerMany([AddEvent, SubEvent], listener);
295
+ const addEvent = new AddEvent({
296
+ a: 1,
297
+ b: 2,
298
+ });
299
+ const subEvent = new SubEvent({
300
+ c: 1,
301
+ d: 2,
302
+ });
303
+ await eventBusA.dispatchMany([addEvent, subEvent]);
304
+ await delay(TTL);
305
+ expect(listener.resultA).toEqual(addEvent);
306
+ expect(listener.resultA).toBeInstanceOf(AddEvent);
307
+ expect(listener.resultB).toEqual(subEvent);
308
+ expect(listener.resultB).toBeInstanceOf(SubEvent);
309
+ await eventBusA.removeListenerMany([AddEvent, SubEvent], listener);
310
+ });
311
+ test("Class instance listener", async () => {
312
+ class Listener {
313
+ resultA = null;
314
+ resultB = null;
315
+ invoke(event) {
316
+ if (event instanceof AddEvent) {
317
+ this.resultA = event;
318
+ }
319
+ if (event instanceof SubEvent) {
320
+ this.resultB = event;
321
+ }
322
+ }
141
323
  }
324
+ const listener = new Listener();
325
+ await eventBusA.addListenerMany([AddEvent, SubEvent], listener);
326
+ const addEvent = new AddEvent({
327
+ a: 1,
328
+ b: 2,
329
+ });
330
+ const subEvent = new SubEvent({
331
+ c: 1,
332
+ d: 2,
333
+ });
334
+ await eventBusA.dispatchMany([addEvent, subEvent]);
335
+ await delay(TTL);
336
+ expect(listener.resultA).toEqual(addEvent);
337
+ expect(listener.resultA).toBeInstanceOf(AddEvent);
338
+ expect(listener.resultB).toEqual(subEvent);
339
+ expect(listener.resultB).toBeInstanceOf(SubEvent);
340
+ await eventBusA.removeListenerMany([AddEvent, SubEvent], listener);
341
+ });
342
+ test("Function listener", async () => {
343
+ let resultA = null;
344
+ let resultB = null;
345
+ const listener = (event) => {
346
+ if (event instanceof AddEvent) {
347
+ resultA = event;
348
+ }
349
+ if (event instanceof SubEvent) {
350
+ resultB = event;
351
+ }
352
+ };
353
+ await eventBusA.addListenerMany([AddEvent, SubEvent], listener);
354
+ const addEvent = new AddEvent({
355
+ a: 1,
356
+ b: 2,
357
+ });
358
+ const subEvent = new SubEvent({
359
+ c: 1,
360
+ d: 2,
361
+ });
362
+ await eventBusA.dispatchMany([addEvent, subEvent]);
363
+ await delay(TTL);
364
+ expect(resultA).toEqual(addEvent);
365
+ expect(resultA).toBeInstanceOf(AddEvent);
366
+ expect(resultB).toEqual(subEvent);
367
+ expect(resultB).toBeInstanceOf(SubEvent);
368
+ await eventBusA.removeListenerMany([AddEvent, SubEvent], listener);
142
369
  });
143
- await eventBusA.dispatchMany([event_1, event_2]);
144
- await delay(TTL);
145
- expect(result_1).toEqual(event_1);
146
- expect(result_1).toBeInstanceOf(TestEventA);
147
- expect(result_2).toEqual(event_2);
148
- expect(result_2).toBeInstanceOf(TestEventB);
149
370
  });
150
- test("Should be null when listener removed and event is triggered", async () => {
151
- const event_A = new TestEventA({
152
- type: TestEventA.name,
371
+ describe("Should be null when listener removed and event is triggered", () => {
372
+ test("Object literal listener", async () => {
373
+ const listener = {
374
+ resultA: null,
375
+ resultB: null,
376
+ invoke(event) {
377
+ if (event instanceof AddEvent) {
378
+ this.resultA = event;
379
+ }
380
+ if (event instanceof SubEvent) {
381
+ this.resultB = event;
382
+ }
383
+ },
384
+ };
385
+ await eventBusA.addListenerMany([AddEvent, SubEvent], listener);
386
+ await eventBusA.removeListenerMany([AddEvent, SubEvent], listener);
387
+ const addEvent = new AddEvent({
388
+ a: 1,
389
+ b: 2,
390
+ });
391
+ const subEvent = new SubEvent({
392
+ c: 1,
393
+ d: 2,
394
+ });
395
+ await eventBusA.dispatchMany([addEvent, subEvent]);
396
+ await delay(TTL);
397
+ expect(listener.resultA).toBeNull();
398
+ expect(listener.resultB).toBeNull();
153
399
  });
154
- const event_B = new TestEventB({
155
- type: TestEventB.name,
400
+ test("Class instance listener", async () => {
401
+ class Listener {
402
+ resultA = null;
403
+ resultB = null;
404
+ invoke(event) {
405
+ if (event instanceof AddEvent) {
406
+ this.resultA = event;
407
+ }
408
+ if (event instanceof SubEvent) {
409
+ this.resultB = event;
410
+ }
411
+ }
412
+ }
413
+ const listener = new Listener();
414
+ await eventBusA.addListenerMany([AddEvent, SubEvent], listener);
415
+ await eventBusA.removeListenerMany([AddEvent, SubEvent], listener);
416
+ const addEvent = new AddEvent({
417
+ a: 1,
418
+ b: 2,
419
+ });
420
+ const subEvent = new SubEvent({
421
+ c: 1,
422
+ d: 2,
423
+ });
424
+ await eventBusA.dispatchMany([addEvent, subEvent]);
425
+ await delay(TTL);
426
+ expect(listener.resultA).toBeNull();
427
+ expect(listener.resultB).toBeNull();
428
+ });
429
+ test("Function listener", async () => {
430
+ let resultA = null;
431
+ let resultB = null;
432
+ const listener = (event) => {
433
+ if (event instanceof AddEvent) {
434
+ resultA = event;
435
+ }
436
+ if (event instanceof SubEvent) {
437
+ resultB = event;
438
+ }
439
+ };
440
+ await eventBusA.addListenerMany([AddEvent, SubEvent], listener);
441
+ await eventBusA.removeListenerMany([AddEvent, SubEvent], listener);
442
+ const addEvent = new AddEvent({
443
+ a: 1,
444
+ b: 2,
445
+ });
446
+ const subEvent = new SubEvent({
447
+ c: 1,
448
+ d: 2,
449
+ });
450
+ await eventBusA.dispatchMany([addEvent, subEvent]);
451
+ await delay(TTL);
452
+ expect(resultA).toBeNull();
453
+ expect(resultB).toBeNull();
156
454
  });
157
- let result = null;
158
- const listener = (event) => {
159
- result = event;
160
- };
161
- await eventBusA.addListenerMany([TestEventA, TestEventB], listener);
162
- await eventBusA.removeListenerMany([TestEventA, TestEventB], listener);
163
- await eventBusA.dispatchMany([event_A, event_B]);
164
- await delay(TTL);
165
- expect(result).toBeNull();
166
455
  });
167
456
  });
168
- describe("method: subscribe", () => {
169
- test("Should be null when listener added and event is not triggered", async () => {
170
- let result = null;
171
- await eventBusA.subscribe(TestEventA, (event) => {
172
- result = event;
457
+ describe("method: subscribe, dispatch", () => {
458
+ describe("Should be null when listener is added and event is not triggered", () => {
459
+ test("Object literal listener", async () => {
460
+ const listener = {
461
+ result: null,
462
+ invoke(event) {
463
+ this.result = event;
464
+ },
465
+ };
466
+ const unsubscribe = await eventBusA.subscribe(AddEvent, listener);
467
+ expect(listener.result).toBeNull();
468
+ await unsubscribe();
469
+ });
470
+ test("Class instance listener", async () => {
471
+ class Listener {
472
+ result = null;
473
+ invoke(event) {
474
+ this.result = event;
475
+ }
476
+ }
477
+ const listener = new Listener();
478
+ const unsubscribe = await eventBusA.subscribe(AddEvent, listener);
479
+ expect(listener.result).toBeNull();
480
+ await unsubscribe();
481
+ });
482
+ test("Function listener", async () => {
483
+ let result = null;
484
+ const listener = (event) => {
485
+ result = event;
486
+ };
487
+ const unsubscribe = await eventBusA.subscribe(AddEvent, listener);
488
+ expect(result).toBeNull();
489
+ await unsubscribe();
173
490
  });
174
- expect(result).toBeNull();
175
491
  });
176
- test("Should be TestEventA when listener added and event is triggered", async () => {
177
- const event = new TestEventA({
178
- type: TestEventA.name,
492
+ describe("Should be AddEvent when listener is added and event is triggered", () => {
493
+ test("Object literal listener", async () => {
494
+ const listener = {
495
+ result: null,
496
+ invoke(event) {
497
+ this.result = event;
498
+ },
499
+ };
500
+ const unsubscribe = await eventBusA.subscribe(AddEvent, listener);
501
+ const event = new AddEvent({
502
+ a: 1,
503
+ b: 2,
504
+ });
505
+ await eventBusA.dispatch(event);
506
+ await delay(TTL);
507
+ expect(listener.result).toEqual(event);
508
+ expect(listener.result).toBeInstanceOf(AddEvent);
509
+ await unsubscribe();
179
510
  });
180
- let result = null;
181
- await eventBusA.subscribe(TestEventA, (event) => {
182
- result = event;
511
+ test("Class instance listener", async () => {
512
+ class Listener {
513
+ result = null;
514
+ invoke(event) {
515
+ this.result = event;
516
+ }
517
+ }
518
+ const listener = new Listener();
519
+ const unsubscribe = await eventBusA.subscribe(AddEvent, listener);
520
+ const event = new AddEvent({
521
+ a: 1,
522
+ b: 2,
523
+ });
524
+ await eventBusA.dispatch(event);
525
+ await delay(TTL);
526
+ expect(listener.result).toEqual(event);
527
+ expect(listener.result).toBeInstanceOf(AddEvent);
528
+ await unsubscribe();
529
+ });
530
+ test("Function listener", async () => {
531
+ let result = null;
532
+ const listener = (event) => {
533
+ result = event;
534
+ };
535
+ const unsubscribe = await eventBusA.subscribe(AddEvent, listener);
536
+ const event = new AddEvent({
537
+ a: 1,
538
+ b: 2,
539
+ });
540
+ await eventBusA.dispatch(event);
541
+ await delay(TTL);
542
+ expect(result).toEqual(event);
543
+ expect(result).toBeInstanceOf(AddEvent);
544
+ await unsubscribe();
183
545
  });
184
- await delay(TTL);
185
- await eventBusA.dispatch(event);
186
- expect(result).toEqual(event);
187
- expect(result).toBeInstanceOf(TestEventA);
188
546
  });
189
- test("Should be null when listener removed and event is triggered", async () => {
190
- const event = new TestEventA({
191
- type: TestEventA.name,
547
+ describe("Should be null when listener removed and event is triggered", () => {
548
+ test("Object literal listener", async () => {
549
+ const listener = {
550
+ result: null,
551
+ invoke(event) {
552
+ this.result = event;
553
+ },
554
+ };
555
+ const unsubscribe = await eventBusA.subscribe(AddEvent, listener);
556
+ await unsubscribe();
557
+ const event = new AddEvent({
558
+ a: 1,
559
+ b: 2,
560
+ });
561
+ await eventBusA.dispatch(event);
562
+ await delay(TTL);
563
+ expect(listener.result).toBeNull();
564
+ });
565
+ test("Class instance listener", async () => {
566
+ class Listener {
567
+ result = null;
568
+ invoke(event) {
569
+ this.result = event;
570
+ }
571
+ }
572
+ const listener = new Listener();
573
+ const unsubscribe = await eventBusA.subscribe(AddEvent, listener);
574
+ await unsubscribe();
575
+ const event = new AddEvent({
576
+ a: 1,
577
+ b: 2,
578
+ });
579
+ await eventBusA.dispatch(event);
580
+ await delay(TTL);
581
+ expect(listener.result).toBeNull();
582
+ });
583
+ test("Function listener", async () => {
584
+ let result = null;
585
+ const listener = (event) => {
586
+ result = event;
587
+ };
588
+ const unsubscribe = await eventBusA.subscribe(AddEvent, listener);
589
+ await unsubscribe();
590
+ const event = new AddEvent({
591
+ a: 1,
592
+ b: 2,
593
+ });
594
+ await eventBusA.dispatch(event);
595
+ await delay(TTL);
596
+ expect(result).toBeNull();
192
597
  });
193
- let result = null;
194
- const listener = (event) => {
195
- result = event;
196
- };
197
- const unsubscribe = await eventBusA.subscribe(TestEventA, listener);
198
- await unsubscribe();
199
- await eventBusA.dispatch(event);
200
- await delay(TTL);
201
- expect(result).toBeNull();
202
598
  });
203
599
  });
204
- describe("method: subscribeMany", () => {
205
- test("Should be null when listener added and event is not triggered", async () => {
206
- let result = null;
207
- await eventBusA.subscribeMany([TestEventA, TestEventB], (event) => {
208
- result = event;
600
+ describe("method: subscribeMany, dispatchMany", () => {
601
+ describe("Should be null when listener is added and event is not triggered", () => {
602
+ test("Object literal listener", async () => {
603
+ const listener = {
604
+ resultA: null,
605
+ resultB: null,
606
+ invoke(event) {
607
+ if (event instanceof AddEvent) {
608
+ this.resultA = event;
609
+ }
610
+ if (event instanceof SubEvent) {
611
+ this.resultB = event;
612
+ }
613
+ },
614
+ };
615
+ const unsubscribe = await eventBusA.subscribeMany([AddEvent, SubEvent], listener);
616
+ expect(listener.resultA).toBeNull();
617
+ expect(listener.resultB).toBeNull();
618
+ await unsubscribe();
619
+ });
620
+ test("Class instance listener", async () => {
621
+ class Listener {
622
+ resultA = null;
623
+ resultB = null;
624
+ invoke(event) {
625
+ if (event instanceof AddEvent) {
626
+ this.resultA = event;
627
+ }
628
+ if (event instanceof SubEvent) {
629
+ this.resultB = event;
630
+ }
631
+ }
632
+ }
633
+ const listener = new Listener();
634
+ const unsubscribe = await eventBusA.subscribeMany([AddEvent, SubEvent], listener);
635
+ expect(listener.resultA).toBeNull();
636
+ expect(listener.resultB).toBeNull();
637
+ await unsubscribe();
638
+ });
639
+ test("Function listener", async () => {
640
+ let resultA = null;
641
+ let resultB = null;
642
+ const listener = (event) => {
643
+ if (event instanceof AddEvent) {
644
+ resultA = event;
645
+ }
646
+ if (event instanceof SubEvent) {
647
+ resultB = event;
648
+ }
649
+ };
650
+ const unsubscribe = await eventBusA.subscribeMany([AddEvent, SubEvent], listener);
651
+ expect(resultA).toBeNull();
652
+ expect(resultB).toBeNull();
653
+ await unsubscribe();
209
654
  });
210
- expect(result).toBeNull();
211
655
  });
212
- test("Should be BaseEvent when listener added and event is triggered", async () => {
213
- const event_1 = new TestEventA({
214
- type: TestEventA.name,
656
+ describe("Should be AddEvent and SubEvent when listener is added and event is triggered", () => {
657
+ test("Object literal listener", async () => {
658
+ const listener = {
659
+ resultA: null,
660
+ resultB: null,
661
+ invoke(event) {
662
+ if (event instanceof AddEvent) {
663
+ this.resultA = event;
664
+ }
665
+ if (event instanceof SubEvent) {
666
+ this.resultB = event;
667
+ }
668
+ },
669
+ };
670
+ const unsubscribe = await eventBusA.subscribeMany([AddEvent, SubEvent], listener);
671
+ const addEvent = new AddEvent({
672
+ a: 1,
673
+ b: 2,
674
+ });
675
+ const subEvent = new SubEvent({
676
+ c: 1,
677
+ d: 2,
678
+ });
679
+ await eventBusA.dispatchMany([addEvent, subEvent]);
680
+ await delay(TTL);
681
+ expect(listener.resultA).toEqual(addEvent);
682
+ expect(listener.resultA).toBeInstanceOf(AddEvent);
683
+ expect(listener.resultB).toEqual(subEvent);
684
+ expect(listener.resultB).toBeInstanceOf(SubEvent);
685
+ await unsubscribe();
686
+ });
687
+ test("Class instance listener", async () => {
688
+ class Listener {
689
+ resultA = null;
690
+ resultB = null;
691
+ invoke(event) {
692
+ if (event instanceof AddEvent) {
693
+ this.resultA = event;
694
+ }
695
+ if (event instanceof SubEvent) {
696
+ this.resultB = event;
697
+ }
698
+ }
699
+ }
700
+ const listener = new Listener();
701
+ const unsubscribe = await eventBusA.subscribeMany([AddEvent, SubEvent], listener);
702
+ const addEvent = new AddEvent({
703
+ a: 1,
704
+ b: 2,
705
+ });
706
+ const subEvent = new SubEvent({
707
+ c: 1,
708
+ d: 2,
709
+ });
710
+ await eventBusA.dispatchMany([addEvent, subEvent]);
711
+ await delay(TTL);
712
+ expect(listener.resultA).toEqual(addEvent);
713
+ expect(listener.resultA).toBeInstanceOf(AddEvent);
714
+ expect(listener.resultB).toEqual(subEvent);
715
+ expect(listener.resultB).toBeInstanceOf(SubEvent);
716
+ await unsubscribe();
717
+ });
718
+ test("Function listener", async () => {
719
+ let resultA = null;
720
+ let resultB = null;
721
+ const listener = (event) => {
722
+ if (event instanceof AddEvent) {
723
+ resultA = event;
724
+ }
725
+ if (event instanceof SubEvent) {
726
+ resultB = event;
727
+ }
728
+ };
729
+ const unsubscribe = await eventBusA.subscribeMany([AddEvent, SubEvent], listener);
730
+ const addEvent = new AddEvent({
731
+ a: 1,
732
+ b: 2,
733
+ });
734
+ const subEvent = new SubEvent({
735
+ c: 1,
736
+ d: 2,
737
+ });
738
+ await eventBusA.dispatchMany([addEvent, subEvent]);
739
+ await delay(TTL);
740
+ expect(resultA).toEqual(addEvent);
741
+ expect(resultA).toBeInstanceOf(AddEvent);
742
+ expect(resultB).toEqual(subEvent);
743
+ expect(resultB).toBeInstanceOf(SubEvent);
744
+ await unsubscribe();
215
745
  });
216
- const event_2 = new TestEventB({
217
- type: TestEventB.name,
746
+ });
747
+ describe("Should be null when listener removed and event is triggered", () => {
748
+ test("Object literal listener", async () => {
749
+ const listener = {
750
+ resultA: null,
751
+ resultB: null,
752
+ invoke(event) {
753
+ if (event instanceof AddEvent) {
754
+ this.resultA = event;
755
+ }
756
+ if (event instanceof SubEvent) {
757
+ this.resultB = event;
758
+ }
759
+ },
760
+ };
761
+ const unsubscribe = await eventBusA.subscribeMany([AddEvent, SubEvent], listener);
762
+ await unsubscribe();
763
+ const addEvent = new AddEvent({
764
+ a: 1,
765
+ b: 2,
766
+ });
767
+ const subEvent = new SubEvent({
768
+ c: 1,
769
+ d: 2,
770
+ });
771
+ await eventBusA.dispatchMany([addEvent, subEvent]);
772
+ await delay(TTL);
773
+ expect(listener.resultA).toBeNull();
774
+ expect(listener.resultB).toBeNull();
218
775
  });
219
- let result_1 = null;
220
- let result_2 = null;
221
- await eventBusA.subscribeMany([TestEventA, TestEventB], (eventObj) => {
222
- if (eventObj instanceof TestEventA) {
223
- result_1 = eventObj;
776
+ test("Class instance listener", async () => {
777
+ class Listener {
778
+ resultA = null;
779
+ resultB = null;
780
+ invoke(event) {
781
+ if (event instanceof AddEvent) {
782
+ this.resultA = event;
783
+ }
784
+ if (event instanceof SubEvent) {
785
+ this.resultB = event;
786
+ }
787
+ }
224
788
  }
225
- if (eventObj instanceof TestEventB) {
226
- result_2 = eventObj;
789
+ const listener = new Listener();
790
+ const unsubscribe = await eventBusA.subscribeMany([AddEvent, SubEvent], listener);
791
+ await unsubscribe();
792
+ const addEvent = new AddEvent({
793
+ a: 1,
794
+ b: 2,
795
+ });
796
+ const subEvent = new SubEvent({
797
+ c: 1,
798
+ d: 2,
799
+ });
800
+ await eventBusA.dispatchMany([addEvent, subEvent]);
801
+ await delay(TTL);
802
+ expect(listener.resultA).toBeNull();
803
+ expect(listener.resultB).toBeNull();
804
+ });
805
+ test("Function listener", async () => {
806
+ let resultA = null;
807
+ let resultB = null;
808
+ const listener = (event) => {
809
+ if (event instanceof AddEvent) {
810
+ resultA = event;
811
+ }
812
+ if (event instanceof SubEvent) {
813
+ resultB = event;
814
+ }
815
+ };
816
+ const unsubscribe = await eventBusA.subscribeMany([AddEvent, SubEvent], listener);
817
+ await unsubscribe();
818
+ const addEvent = new AddEvent({
819
+ a: 1,
820
+ b: 2,
821
+ });
822
+ const subEvent = new SubEvent({
823
+ c: 1,
824
+ d: 2,
825
+ });
826
+ await eventBusA.dispatchMany([addEvent, subEvent]);
827
+ await delay(TTL);
828
+ expect(resultA).toBeNull();
829
+ expect(resultB).toBeNull();
830
+ });
831
+ });
832
+ });
833
+ describe("method: listenOnce", () => {
834
+ describe("Should be null when listener added and event is not triggered", () => {
835
+ test("Object literal listener", async () => {
836
+ const listener = {
837
+ result: null,
838
+ invoke(event) {
839
+ this.result = event;
840
+ },
841
+ };
842
+ await eventBusA.listenOnce(AddEvent, listener);
843
+ expect(listener.result).toBeNull();
844
+ });
845
+ test("Class instance listener", async () => {
846
+ class Listener {
847
+ result = null;
848
+ invoke(event) {
849
+ this.result = event;
850
+ }
227
851
  }
852
+ const listener = new Listener();
853
+ await eventBusA.listenOnce(AddEvent, listener);
854
+ expect(listener.result).toBeNull();
855
+ });
856
+ test("Function listener", async () => {
857
+ let result = null;
858
+ const listener = (event) => {
859
+ result = event;
860
+ };
861
+ await eventBusA.listenOnce(AddEvent, listener);
862
+ expect(result).toBeNull();
228
863
  });
229
- await delay(TTL);
230
- await eventBusA.dispatchMany([event_1, event_2]);
231
- expect(result_1).toEqual(event_1);
232
- expect(result_1).toBeInstanceOf(TestEventA);
233
- expect(result_2).toEqual(event_2);
234
- expect(result_2).toBeInstanceOf(TestEventB);
235
864
  });
236
- test("Should be null when listener removed and event is triggered", async () => {
237
- const event_A = new TestEventA({
238
- type: TestEventA.name,
865
+ describe("Should be AddEvent when listener added and event is triggered", () => {
866
+ test("Object literal listener", async () => {
867
+ const listener = {
868
+ result: null,
869
+ invoke(event) {
870
+ this.result = event;
871
+ },
872
+ };
873
+ await eventBusA.listenOnce(AddEvent, listener);
874
+ const event = new AddEvent({
875
+ a: 1,
876
+ b: 2,
877
+ });
878
+ await eventBusA.dispatch(event);
879
+ await delay(TTL);
880
+ expect(listener.result).toEqual(event);
881
+ expect(listener.result).toBeInstanceOf(AddEvent);
239
882
  });
240
- const event_B = new TestEventB({
241
- type: TestEventB.name,
883
+ test("Class instance listener", async () => {
884
+ class Listener {
885
+ result = null;
886
+ invoke(event) {
887
+ this.result = event;
888
+ }
889
+ }
890
+ const listener = new Listener();
891
+ await eventBusA.listenOnce(AddEvent, listener);
892
+ const event = new AddEvent({
893
+ a: 1,
894
+ b: 2,
895
+ });
896
+ await eventBusA.dispatch(event);
897
+ await delay(TTL);
898
+ expect(listener.result).toEqual(event);
899
+ expect(listener.result).toBeInstanceOf(AddEvent);
900
+ });
901
+ test("Function listener", async () => {
902
+ let result = null;
903
+ const listener = (event) => {
904
+ result = event;
905
+ };
906
+ await eventBusA.listenOnce(AddEvent, listener);
907
+ const event = new AddEvent({
908
+ a: 1,
909
+ b: 2,
910
+ });
911
+ await eventBusA.dispatch(event);
912
+ await delay(TTL);
913
+ expect(result).toEqual(event);
914
+ expect(result).toBeInstanceOf(AddEvent);
915
+ });
916
+ });
917
+ describe("Should only listen for event once", () => {
918
+ test("Object literal listener", async () => {
919
+ const listener = {
920
+ i: 0,
921
+ invoke(_event) {
922
+ this.i++;
923
+ },
924
+ };
925
+ await eventBusA.listenOnce(AddEvent, listener);
926
+ const event = new AddEvent({
927
+ a: 1,
928
+ b: 2,
929
+ });
930
+ await eventBusA.dispatch(event);
931
+ await eventBusA.dispatch(event);
932
+ await delay(TTL);
933
+ expect(listener.i).toBe(1);
934
+ });
935
+ test("Class instance listener", async () => {
936
+ class Listener {
937
+ i = 0;
938
+ invoke(_event) {
939
+ this.i++;
940
+ }
941
+ }
942
+ const listener = new Listener();
943
+ await eventBusA.listenOnce(AddEvent, listener);
944
+ const event = new AddEvent({
945
+ a: 1,
946
+ b: 2,
947
+ });
948
+ await eventBusA.dispatch(event);
949
+ await eventBusA.dispatch(event);
950
+ await delay(TTL);
951
+ expect(listener.i).toBe(1);
952
+ });
953
+ test("Function listener", async () => {
954
+ let i = 0;
955
+ const listener = () => {
956
+ i++;
957
+ };
958
+ await eventBusA.listenOnce(AddEvent, listener);
959
+ const event = new AddEvent({
960
+ a: 1,
961
+ b: 2,
962
+ });
963
+ await eventBusA.dispatch(event);
964
+ await eventBusA.dispatch(event);
965
+ await delay(TTL);
966
+ expect(i).toBe(1);
242
967
  });
243
- let result = null;
244
- const listener = (event) => {
245
- result = event;
246
- };
247
- const unsubscribe = await eventBusA.subscribeMany([TestEventA, TestEventB], listener);
248
- await unsubscribe();
249
- await eventBusA.dispatchMany([event_A, event_B]);
250
- await delay(TTL);
251
- expect(result).toBeNull();
252
968
  });
253
969
  });
254
- describe("method: listenOnce", () => {
255
- test("Should be null when listener added and event is not triggered", async () => {
970
+ describe("method: asPromise", () => {
971
+ test("Should be null when listener added and event is not triggered", () => {
256
972
  let result = null;
257
- await eventBusA.listenOnce(TestEventA, (event) => {
973
+ const listener = (event) => {
258
974
  result = event;
259
- });
975
+ };
976
+ eventBusA.asPromise(AddEvent).then(listener);
260
977
  expect(result).toBeNull();
261
978
  });
262
- test("Should be TestEventA when listener added and event is triggered", async () => {
263
- const event = new TestEventA({
264
- type: TestEventA.name,
265
- });
979
+ test("Should be AddEvent when listener added and event is triggered", async () => {
266
980
  let result = null;
267
- await eventBusA.listenOnce(TestEventA, (event) => {
981
+ const listener = (event) => {
268
982
  result = event;
983
+ };
984
+ eventBusA.asPromise(AddEvent).then(listener);
985
+ const event = new AddEvent({
986
+ a: 1,
987
+ b: 2,
269
988
  });
270
989
  await eventBusA.dispatch(event);
271
990
  await delay(TTL);
272
991
  expect(result).toEqual(event);
273
- expect(result).toBeInstanceOf(TestEventA);
274
- });
275
- test("Should only listen for event once", async () => {
276
- const event = new TestEventA({
277
- type: TestEventA.name,
278
- });
279
- let i = 0;
280
- await eventBusA.listenOnce(TestEventA, () => {
281
- i++;
282
- });
283
- await eventBusA.dispatch(event);
284
- await eventBusA.dispatch(event);
285
- await delay(TTL);
286
- expect(i).toBe(1);
992
+ expect(result).toBeInstanceOf(AddEvent);
287
993
  });
288
994
  });
289
995
  });
290
996
  describe("Group tests:", () => {
291
997
  test("method: addListener / dispatch", async () => {
292
- const event = new TestEventA({
293
- type: TestEventA.name,
294
- });
295
998
  let result_a = null;
296
- await eventBusA.addListener(TestEventA, (event) => {
999
+ await eventBusA.addListener(AddEvent, (event) => {
297
1000
  result_a = event;
298
1001
  });
299
1002
  let result_b = null;
300
- await eventBusB.addListener(TestEventA, (event) => {
1003
+ await eventBusB.addListener(AddEvent, (event) => {
301
1004
  result_b = event;
302
1005
  });
1006
+ const event = new AddEvent({
1007
+ a: 1,
1008
+ b: 2,
1009
+ });
303
1010
  await eventBusA.dispatch(event);
1011
+ await delay(TTL);
304
1012
  expect(result_a).toEqual(event);
305
- expect(result_a).toBeInstanceOf(TestEventA);
1013
+ expect(result_a).toBeInstanceOf(AddEvent);
306
1014
  expect(result_b).toBeNull();
307
1015
  });
308
1016
  test("method: addListenerMany / dispatch", async () => {
309
- const event = new TestEventA({
310
- type: "type",
311
- });
312
1017
  let result_a = null;
313
- await eventBusA.addListenerMany([TestEventA], (event) => {
1018
+ await eventBusA.addListenerMany([AddEvent], (event) => {
314
1019
  result_a = event;
315
1020
  });
316
1021
  let result_b = null;
317
- await eventBusB.addListenerMany([TestEventA], (event) => {
1022
+ await eventBusB.addListenerMany([AddEvent], (event) => {
318
1023
  result_b = event;
319
1024
  });
1025
+ const event = new AddEvent({
1026
+ a: 1,
1027
+ b: 2,
1028
+ });
320
1029
  await eventBusA.dispatch(event);
1030
+ await delay(TTL);
321
1031
  expect(result_a).toEqual(event);
322
- expect(result_a).toBeInstanceOf(TestEventA);
1032
+ expect(result_a).toBeInstanceOf(AddEvent);
323
1033
  expect(result_b).toBeNull();
324
1034
  });
325
1035
  test("method: removeListener / addListener / dispatch", async () => {
326
- const event = new TestEventA({
327
- type: TestEventA.name,
328
- });
329
1036
  let result_a = null;
330
- await eventBusA.addListener(TestEventA, (event) => {
1037
+ await eventBusA.addListener(AddEvent, (event) => {
331
1038
  result_a = event;
332
1039
  });
333
1040
  let result_b = null;
334
1041
  const listenerB = (event) => {
335
1042
  result_b = event;
336
1043
  };
337
- await eventBusB.addListener(TestEventA, listenerB);
338
- await eventBusB.removeListener(TestEventA, listenerB);
1044
+ await eventBusB.addListener(AddEvent, listenerB);
1045
+ await eventBusB.removeListener(AddEvent, listenerB);
1046
+ const event = new AddEvent({
1047
+ a: 1,
1048
+ b: 2,
1049
+ });
339
1050
  await eventBusA.dispatch(event);
340
1051
  await eventBusB.dispatch(event);
1052
+ await delay(TTL);
341
1053
  expect(result_a).toEqual(event);
342
- expect(result_a).toBeInstanceOf(TestEventA);
1054
+ expect(result_a).toBeInstanceOf(AddEvent);
343
1055
  expect(result_b).toBeNull();
344
1056
  });
345
1057
  test("method: removeListenerMany / addListener / dispatch", async () => {
346
- const event = new TestEventA({
347
- type: TestEventA.name,
348
- });
349
1058
  let result_a = null;
350
- await eventBusA.addListener(TestEventA, (event) => {
1059
+ await eventBusA.addListener(AddEvent, (event) => {
351
1060
  result_a = event;
352
1061
  });
353
1062
  let result_b = null;
354
1063
  const listenerB = (event) => {
355
1064
  result_b = event;
356
1065
  };
357
- await eventBusB.addListener(TestEventA, listenerB);
358
- await eventBusB.removeListenerMany([TestEventA], listenerB);
1066
+ await eventBusB.addListener(AddEvent, listenerB);
1067
+ await eventBusB.removeListenerMany([AddEvent], listenerB);
1068
+ const event = new AddEvent({
1069
+ a: 1,
1070
+ b: 2,
1071
+ });
359
1072
  await eventBusA.dispatch(event);
360
1073
  await eventBusB.dispatch(event);
1074
+ await delay(TTL);
361
1075
  expect(result_a).toEqual(event);
362
- expect(result_a).toBeInstanceOf(TestEventA);
1076
+ expect(result_a).toBeInstanceOf(AddEvent);
363
1077
  expect(result_b).toBeNull();
364
1078
  });
365
1079
  test("method: subscribe / dispatch", async () => {
366
- const event = new TestEventA({
367
- type: TestEventA.name,
368
- });
369
1080
  let result_a = null;
370
- await eventBusA.subscribe(TestEventA, (event) => {
1081
+ await eventBusA.subscribe(AddEvent, (event) => {
371
1082
  result_a = event;
372
1083
  });
373
1084
  let result_b = null;
374
1085
  const listenerB = (event) => {
375
1086
  result_b = event;
376
1087
  };
377
- const unsubscribe = await eventBusB.subscribe(TestEventA, listenerB);
1088
+ const unsubscribe = await eventBusB.subscribe(AddEvent, listenerB);
378
1089
  await unsubscribe();
1090
+ const event = new AddEvent({
1091
+ a: 1,
1092
+ b: 2,
1093
+ });
379
1094
  await eventBusA.dispatch(event);
380
1095
  await eventBusB.dispatch(event);
1096
+ await delay(TTL);
381
1097
  expect(result_a).toEqual(event);
382
- expect(result_a).toBeInstanceOf(TestEventA);
1098
+ expect(result_a).toBeInstanceOf(AddEvent);
383
1099
  expect(result_b).toBeNull();
384
1100
  });
385
1101
  test("method: subscribeMany / dispatch", async () => {
386
- const event = new TestEventA({
387
- type: TestEventA.name,
388
- });
389
1102
  let result_a = null;
390
- await eventBusA.subscribeMany([TestEventA], (event) => {
1103
+ await eventBusA.subscribeMany([AddEvent], (event) => {
391
1104
  result_a = event;
392
1105
  });
393
1106
  let result_b = null;
394
1107
  const listenerB = (event) => {
395
1108
  result_b = event;
396
1109
  };
397
- const unsubscribe = await eventBusB.subscribeMany([TestEventA], listenerB);
1110
+ const unsubscribe = await eventBusB.subscribeMany([AddEvent], listenerB);
398
1111
  await unsubscribe();
1112
+ const event = new AddEvent({
1113
+ a: 1,
1114
+ b: 2,
1115
+ });
399
1116
  await eventBusA.dispatch(event);
400
1117
  await eventBusB.dispatch(event);
1118
+ await delay(TTL);
1119
+ expect(result_a).toEqual(event);
1120
+ expect(result_a).toBeInstanceOf(AddEvent);
1121
+ expect(result_b).toBeNull();
1122
+ });
1123
+ test("method: listenOnce", async () => {
1124
+ let result_a = null;
1125
+ await eventBusA.listenOnce(AddEvent, (event) => {
1126
+ result_a = event;
1127
+ });
1128
+ let result_b = null;
1129
+ await eventBusB.listenOnce(AddEvent, (event) => {
1130
+ result_b = event;
1131
+ });
1132
+ const event = new AddEvent({
1133
+ a: 1,
1134
+ b: 2,
1135
+ });
1136
+ await eventBusA.dispatch(event);
1137
+ await delay(TTL);
1138
+ expect(result_a).toEqual(event);
1139
+ expect(result_a).toBeInstanceOf(AddEvent);
1140
+ expect(result_b).toBeNull();
1141
+ });
1142
+ test("method: asPromise", async () => {
1143
+ let result_a = null;
1144
+ eventBusA.asPromise(AddEvent).then((event) => {
1145
+ result_a = event;
1146
+ });
1147
+ let result_b = null;
1148
+ eventBusB.asPromise(AddEvent).then((event) => {
1149
+ result_b = event;
1150
+ });
1151
+ const event = new AddEvent({
1152
+ a: 1,
1153
+ b: 2,
1154
+ });
1155
+ await eventBusA.dispatch(event);
1156
+ await delay(TTL);
401
1157
  expect(result_a).toEqual(event);
402
- expect(result_a).toBeInstanceOf(TestEventA);
1158
+ expect(result_a).toBeInstanceOf(AddEvent);
403
1159
  expect(result_b).toBeNull();
404
1160
  });
405
1161
  });