@daiso-tech/core 0.24.0 → 0.25.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 (79) hide show
  1. package/README.md +3 -2
  2. package/dist/async/utilities/lazy-promise/lazy-promise.js +2 -2
  3. package/dist/async/utilities/lazy-promise/lazy-promise.js.map +1 -1
  4. package/dist/cache/contracts/cache.contract.d.ts +4 -4
  5. package/dist/cache/implementations/adapters/kysely-sqlite-cache-adapter/kysely-sqlite-cache-adapter.js +2 -2
  6. package/dist/cache/implementations/adapters/kysely-sqlite-cache-adapter/kysely-sqlite-cache-adapter.js.map +1 -1
  7. package/dist/cache/implementations/adapters/memory-cache-adapter/memory-cache-adapter.js +4 -4
  8. package/dist/cache/implementations/adapters/memory-cache-adapter/memory-cache-adapter.js.map +1 -1
  9. package/dist/cache/implementations/adapters/mongodb-cache-adapter/mongodb-cache-adapter.js +2 -2
  10. package/dist/cache/implementations/adapters/mongodb-cache-adapter/mongodb-cache-adapter.js.map +1 -1
  11. package/dist/cache/implementations/adapters/redis-cache-adapter/redis-cache-adapter.js +5 -5
  12. package/dist/cache/implementations/adapters/redis-cache-adapter/redis-cache-adapter.js.map +1 -1
  13. package/dist/cache/implementations/derivables/cache/cache.d.ts +69 -183
  14. package/dist/cache/implementations/derivables/cache/cache.js +68 -185
  15. package/dist/cache/implementations/derivables/cache/cache.js.map +1 -1
  16. package/dist/cache/implementations/derivables/cache-factory/cache-factory.d.ts +11 -15
  17. package/dist/cache/implementations/derivables/cache-factory/cache-factory.js +0 -11
  18. package/dist/cache/implementations/derivables/cache-factory/cache-factory.js.map +1 -1
  19. package/dist/collection/implementations/async-iterable-collection/async-iterable-collection.js +5 -5
  20. package/dist/collection/implementations/async-iterable-collection/async-iterable-collection.js.map +1 -1
  21. package/dist/collection/implementations/iterable-collection/iterable-collection.js +5 -5
  22. package/dist/collection/implementations/iterable-collection/iterable-collection.js.map +1 -1
  23. package/dist/collection/implementations/list-collection/list-collection.js +5 -5
  24. package/dist/collection/implementations/list-collection/list-collection.js.map +1 -1
  25. package/dist/event-bus/contracts/_shared.d.ts +1 -1
  26. package/dist/event-bus/contracts/event-bus-adapter.contract.d.ts +5 -5
  27. package/dist/event-bus/contracts/event-bus.contract.d.ts +36 -16
  28. package/dist/event-bus/contracts/event-bus.contract.js +1 -0
  29. package/dist/event-bus/contracts/event-bus.contract.js.map +1 -1
  30. package/dist/event-bus/implementations/adapters/memory-event-bus-adapter/memory-event-bus-adapter.d.ts +3 -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 +3 -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 +3 -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 +63 -32
  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 +89 -47
  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 +743 -10
  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/contracts/_module.d.ts +0 -1
  71. package/dist/utilities/contracts/_module.js +0 -1
  72. package/dist/utilities/contracts/_module.js.map +1 -1
  73. package/dist/utilities/functions.d.ts +3 -7
  74. package/dist/utilities/functions.js +3 -10
  75. package/dist/utilities/functions.js.map +1 -1
  76. package/package.json +1 -1
  77. package/dist/utilities/contracts/buildable.contract.d.ts +0 -11
  78. package/dist/utilities/contracts/buildable.contract.js +0 -5
  79. package/dist/utilities/contracts/buildable.contract.js.map +0 -1
@@ -4,7 +4,7 @@
4
4
  import type { BackoffPolicy, RetryPolicy } from "../../../../async/_module-exports.js";
5
5
  import { LazyPromise } from "../../../../async/_module-exports.js";
6
6
  import type { EventClass, EventInstance, Unsubscribe } from "../../../../event-bus/contracts/_module-exports.js";
7
- import { type IEventBus, type IGroupableEventBus, type IEventBusAdapter, type Listener, type BaseEvent } from "../../../../event-bus/contracts/_module-exports.js";
7
+ import { type IEventBus, type IGroupableEventBus, type IEventBusAdapter, type EventListener, type BaseEvent } from "../../../../event-bus/contracts/_module-exports.js";
8
8
  import type { OneOrMore, TimeSpan } from "../../../../utilities/_module-exports.js";
9
9
  /**
10
10
  *
@@ -46,6 +46,7 @@ export declare class EventBus<TEvents extends BaseEvent = BaseEvent> implements
46
46
  private readonly backoffPolicy;
47
47
  private readonly retryPolicy;
48
48
  private readonly timeout;
49
+ private readonly listenerObjectMap;
49
50
  /**
50
51
  * @example
51
52
  * ```ts
@@ -99,6 +100,9 @@ export declare class EventBus<TEvents extends BaseEvent = BaseEvent> implements
99
100
  * ```
100
101
  */
101
102
  getGroup(): string;
103
+ private ensureListenerObject;
104
+ private resolveListener;
105
+ private deleteListener;
102
106
  /**
103
107
  * @example
104
108
  * ```ts
@@ -113,13 +117,14 @@ export declare class EventBus<TEvents extends BaseEvent = BaseEvent> implements
113
117
  *
114
118
  * class AddEvent extends BaseEvent<{ a: number, b: number }> {}
115
119
  *
116
- * const listener: Listener<AddEvent> = event => {
120
+ * const listener: EventListener<AddEvent> = event => {
117
121
  * console.log(event);
118
122
  * }
119
123
  * await eventBus.addListener(AddEvent, listener);
124
+ * await eventBus.dispatch(new AddEvent({ a: 1, b: 2,}));
120
125
  * ```
121
126
  */
122
- addListener<TEventClass extends EventClass<TEvents>>(event: TEventClass, listener: Listener<EventInstance<TEventClass>>): LazyPromise<void>;
127
+ addListener<TEventClass extends EventClass<TEvents>>(event: TEventClass, listener: EventListener<EventInstance<TEventClass>>): LazyPromise<void>;
123
128
  /**
124
129
  * @example
125
130
  * ```ts
@@ -134,13 +139,15 @@ export declare class EventBus<TEvents extends BaseEvent = BaseEvent> implements
134
139
  *
135
140
  * class AddEvent extends BaseEvent<{ a: number, b: number }> {}
136
141
  *
137
- * const listener: Listener<AddEvent> = event => {
142
+ * const listener: EventListener<AddEvent> = event => {
138
143
  * console.log(event);
139
144
  * }
145
+ * await eventBus.addListener(AddEvent, listener);
146
+ * await eventBus.dispatch(new AddEvent({ a: 1, b: 2,}));
140
147
  * await eventBus.removeListener(AddEvent, listener);
141
148
  * ```
142
149
  */
143
- removeListener<TEventClass extends EventClass<TEvents>>(event: TEventClass, listener: Listener<EventInstance<TEventClass>>): LazyPromise<void>;
150
+ removeListener<TEventClass extends EventClass<TEvents>>(event: TEventClass, listener: EventListener<EventInstance<TEventClass>>): LazyPromise<void>;
144
151
  /**
145
152
  * @example
146
153
  * ```ts
@@ -156,13 +163,17 @@ export declare class EventBus<TEvents extends BaseEvent = BaseEvent> implements
156
163
  * class AddEvent extends BaseEvent<{ a: number, b: number }> {}
157
164
  * class SubEvent extends BaseEvent<{ c: number, d: number }> {}
158
165
  *
159
- * const listener: Listener<AddEvent | SubEvent> = event => {
166
+ * const listener: EventListener<AddEvent | SubEvent> = event => {
160
167
  * console.log(event)
161
168
  * }
162
169
  * await eventBus.addListenerMany([AddEvent, SubEvent], listener);
170
+ * await eventBus.dispatchMany([
171
+ * new AddEvent({ a: 1, b: 2 }),
172
+ * new SubEvent({ c: 1, d: 2 }),
173
+ * ]);
163
174
  * ```
164
175
  */
165
- addListenerMany<TEventClass extends EventClass<TEvents>>(events: TEventClass[], listener: Listener<EventInstance<TEventClass>>): LazyPromise<void>;
176
+ addListenerMany<TEventClass extends EventClass<TEvents>>(events: TEventClass[], listener: EventListener<EventInstance<TEventClass>>): LazyPromise<void>;
166
177
  /**
167
178
  * @example
168
179
  * ```ts
@@ -178,13 +189,18 @@ export declare class EventBus<TEvents extends BaseEvent = BaseEvent> implements
178
189
  * class AddEvent extends BaseEvent<{ a: number, b: number }> {}
179
190
  * class SubEvent extends BaseEvent<{ c: number, d: number }> {}
180
191
  *
181
- * const listener: Listener<AddEvent | SubEvent> = event => {
192
+ * const listener: EventListener<AddEvent | SubEvent> = event => {
182
193
  * console.log(event);
183
194
  * }
195
+ * await eventBus.addListenerMany([AddEvent, SubEvent], listener);
196
+ * await eventBus.dispatchMany([
197
+ * new AddEvent({ a: 1, b: 2 }),
198
+ * new SubEvent({ c: 1, d: 2 }),
199
+ * ]);
184
200
  * await eventBus.removeListenerMany([AddEvent, SubEvent], listener);
185
201
  * ```
186
202
  */
187
- removeListenerMany<TEventClass extends EventClass<TEvents>>(events: TEventClass[], listener: Listener<EventInstance<TEventClass>>): LazyPromise<void>;
203
+ removeListenerMany<TEventClass extends EventClass<TEvents>>(events: TEventClass[], listener: EventListener<EventInstance<TEventClass>>): LazyPromise<void>;
188
204
  /**
189
205
  * @example
190
206
  * ```ts
@@ -199,13 +215,36 @@ export declare class EventBus<TEvents extends BaseEvent = BaseEvent> implements
199
215
  *
200
216
  * class AddEvent extends BaseEvent<{ a: number, b: number }> {}
201
217
  *
202
- * const listener: Listener<AddEvent> = event => {
218
+ * await eventBus.listenOnce(AddEvent, event => {
203
219
  * console.log(event);
204
- * }
205
- * await eventBus.listenOnce(AddEvent, listener);
220
+ * });
221
+ *
222
+ * await eventBus.dispatch(new AddEvent({ a: 1, b: 2,}));
206
223
  * ```
207
224
  */
208
- listenOnce<TEventClass extends EventClass<TEvents>>(event: TEventClass, listener: Listener<EventInstance<TEventClass>>): LazyPromise<void>;
225
+ listenOnce<TEventClass extends EventClass<TEvents>>(event: TEventClass, listener: EventListener<EventInstance<TEventClass>>): LazyPromise<void>;
226
+ /**
227
+ * @example
228
+ * ```ts
229
+ * import type { IGroupableEventBus } from "@daiso-tech/core/event-bus/contracts";
230
+ * import { EventBus } from "@daiso-tech/core/event-bus/implementations/derivables";
231
+ * import { MemoryEventBusAdapter } from "@daiso-tech/core/event-bus/implementations/adapters";
232
+ * import { BaseEvent, type Listener } from "@daiso-tech/core/event-bus/contracts";
233
+ *
234
+ * const eventBus: IGroupableEventBus = new EventBus({
235
+ * adapter: new MemoryEventBusAdapter({ rootGroup: "@global" })
236
+ * });
237
+ *
238
+ * class AddEvent extends BaseEvent<{ a: number, b: number }> {}
239
+ *
240
+ * eventBus.asPromise(AddEvent).then(event => {
241
+ * console.log(event);
242
+ * });
243
+ *
244
+ * await eventBus.dispatch(new AddEvent({ a: 1, b: 2,}));
245
+ * ```
246
+ */
247
+ asPromise<TEventClass extends EventClass<TEvents>>(event: TEventClass): LazyPromise<EventInstance<TEventClass>>;
209
248
  /**
210
249
  * @example
211
250
  * ```ts
@@ -223,10 +262,11 @@ export declare class EventBus<TEvents extends BaseEvent = BaseEvent> implements
223
262
  * const unsubscribe = await eventBus.subscribe(AddEvent, event => {
224
263
  * console.log(event);
225
264
  * });
265
+ * await eventBus.dispatch(new AddEvent({ a: 1, b: 2,}));
226
266
  * await unsubscribe();
227
267
  * ```
228
268
  */
229
- subscribe<TEventClass extends EventClass<TEvents>>(event: TEventClass, listener: Listener<EventInstance<TEventClass>>): LazyPromise<Unsubscribe>;
269
+ subscribe<TEventClass extends EventClass<TEvents>>(event: TEventClass, listener: EventListener<EventInstance<TEventClass>>): LazyPromise<Unsubscribe>;
230
270
  /**
231
271
  * @example
232
272
  * ```ts
@@ -245,10 +285,14 @@ export declare class EventBus<TEvents extends BaseEvent = BaseEvent> implements
245
285
  * const unsubscribe = await eventBus.subscribeMany([AddEvent, SubEvent], event => {
246
286
  * console.log(event);
247
287
  * });
288
+ * await eventBus.dispatchMany([
289
+ * new AddEvent({ a: 1, b: 2 }),
290
+ * new SubEvent({ c: 1, d: 2 }),
291
+ * ]);
248
292
  * await unsubscribe();
249
293
  * ```
250
294
  */
251
- subscribeMany<TEventClass extends EventClass<TEvents>>(events: TEventClass[], listener: Listener<EventInstance<TEventClass>>): LazyPromise<Unsubscribe>;
295
+ subscribeMany<TEventClass extends EventClass<TEvents>>(events: TEventClass[], listener: EventListener<EventInstance<TEventClass>>): LazyPromise<Unsubscribe>;
252
296
  /**
253
297
  * @example
254
298
  * ```ts
@@ -264,15 +308,9 @@ export declare class EventBus<TEvents extends BaseEvent = BaseEvent> implements
264
308
  * class AddEvent extends BaseEvent<{ a: number, b: number }> {}
265
309
  * class SubEvent extends BaseEvent<{ c: number, d: number }> {}
266
310
  *
267
- * await eventBus.dispatch([
268
- * new AddEvent({
269
- * a: 1,
270
- * b: 2,
271
- * }),
272
- * new SubEvent({
273
- * c: 4,
274
- * d: 3
275
- * })
311
+ * await eventBus.dispatchMany([
312
+ * new AddEvent({ a: 1, b: 2 }),
313
+ * new SubEvent({ c: 1, d: 2 }),
276
314
  * ]);
277
315
  * ```
278
316
  */
@@ -290,15 +328,8 @@ export declare class EventBus<TEvents extends BaseEvent = BaseEvent> implements
290
328
  * });
291
329
  *
292
330
  * class AddEvent extends BaseEvent<{ a: number, b: number }> {}
293
- * class SubEvent extends BaseEvent<{ c: number, d: number }> {}
294
331
  *
295
- * await eventBus.dispatch(
296
- * new AddEvent({
297
- * a: 1,
298
- * b: 2,
299
- * })
300
- * );
301
- * ```
332
+ * await eventBus.dispatch(new AddEvent({ a: 1, b: 2,}));
302
333
  * ```
303
334
  */
304
335
  dispatch(event: TEvents): LazyPromise<void>;
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { LazyPromise } from "../../../../async/_module-exports.js";
5
5
  import { UnableToDispatchEventBusError, UnableToRemoveListenerEventBusError, UnableToAddListenerEventBusError, } from "../../../../event-bus/contracts/_module-exports.js";
6
- import { getConstructorName, isArrayEmpty, simplifyOneOrMoreStr, } from "../../../../utilities/_module-exports.js";
6
+ import { getConstructorName, resolveOneOrMoreStr, } from "../../../../utilities/_module-exports.js";
7
7
  /**
8
8
  * <i>EventBus</i> class can be derived from any <i>{@link IEventBusAdapter}</i>.
9
9
  *
@@ -16,6 +16,7 @@ export class EventBus {
16
16
  backoffPolicy;
17
17
  retryPolicy;
18
18
  timeout;
19
+ listenerObjectMap = new Map();
19
20
  /**
20
21
  * @example
21
22
  * ```ts
@@ -66,7 +67,7 @@ export class EventBus {
66
67
  */
67
68
  withGroup(group) {
68
69
  return new EventBus({
69
- adapter: this.adapter.withGroup(simplifyOneOrMoreStr(group)),
70
+ adapter: this.adapter.withGroup(resolveOneOrMoreStr(group)),
70
71
  retryAttempts: this.retryAttempts,
71
72
  backoffPolicy: this.backoffPolicy,
72
73
  retryPolicy: this.retryPolicy,
@@ -92,6 +93,27 @@ export class EventBus {
92
93
  getGroup() {
93
94
  return this.adapter.getGroup();
94
95
  }
96
+ ensureListenerObject(listener) {
97
+ let listenerFn = this.listenerObjectMap.get(listener);
98
+ if (listenerFn !== undefined) {
99
+ return listenerFn;
100
+ }
101
+ listenerFn = listener.handler.bind(listener);
102
+ this.listenerObjectMap.set(listener, listenerFn);
103
+ return listenerFn;
104
+ }
105
+ resolveListener(listener) {
106
+ if (typeof listener === "function") {
107
+ return listener;
108
+ }
109
+ return this.ensureListenerObject(listener);
110
+ }
111
+ deleteListener(listener) {
112
+ if (typeof listener === "function") {
113
+ return;
114
+ }
115
+ this.listenerObjectMap.delete(listener);
116
+ }
95
117
  /**
96
118
  * @example
97
119
  * ```ts
@@ -106,19 +128,21 @@ export class EventBus {
106
128
  *
107
129
  * class AddEvent extends BaseEvent<{ a: number, b: number }> {}
108
130
  *
109
- * const listener: Listener<AddEvent> = event => {
131
+ * const listener: EventListener<AddEvent> = event => {
110
132
  * console.log(event);
111
133
  * }
112
134
  * await eventBus.addListener(AddEvent, listener);
135
+ * await eventBus.dispatch(new AddEvent({ a: 1, b: 2,}));
113
136
  * ```
114
137
  */
115
138
  addListener(event, listener) {
116
139
  return this.createLayPromise(async () => {
140
+ const resolvedListener = this.resolveListener(listener);
117
141
  try {
118
- await this.adapter.addListener(event.name, listener);
142
+ await this.adapter.addListener(event.name, resolvedListener);
119
143
  }
120
144
  catch (error) {
121
- throw new UnableToAddListenerEventBusError(`A listener with name of "${listener.name}" could not added for "${String(event)}" event`, error);
145
+ throw new UnableToAddListenerEventBusError(`A listener with name of "${resolvedListener.name}" could not added for "${String(event)}" event`, error);
122
146
  }
123
147
  });
124
148
  }
@@ -136,19 +160,23 @@ export class EventBus {
136
160
  *
137
161
  * class AddEvent extends BaseEvent<{ a: number, b: number }> {}
138
162
  *
139
- * const listener: Listener<AddEvent> = event => {
163
+ * const listener: EventListener<AddEvent> = event => {
140
164
  * console.log(event);
141
165
  * }
166
+ * await eventBus.addListener(AddEvent, listener);
167
+ * await eventBus.dispatch(new AddEvent({ a: 1, b: 2,}));
142
168
  * await eventBus.removeListener(AddEvent, listener);
143
169
  * ```
144
170
  */
145
171
  removeListener(event, listener) {
146
172
  return this.createLayPromise(async () => {
173
+ const resolvedListener = this.resolveListener(listener);
147
174
  try {
148
- await this.adapter.removeListener(event.name, listener);
175
+ await this.adapter.removeListener(event.name, resolvedListener);
176
+ this.deleteListener(listener);
149
177
  }
150
178
  catch (error) {
151
- throw new UnableToRemoveListenerEventBusError(`A listener with name of "${listener.name}" could not removed of "${String(event)}" event`, error);
179
+ throw new UnableToRemoveListenerEventBusError(`A listener with name of "${resolvedListener.name}" could not removed of "${String(event)}" event`, error);
152
180
  }
153
181
  });
154
182
  }
@@ -167,15 +195,19 @@ export class EventBus {
167
195
  * class AddEvent extends BaseEvent<{ a: number, b: number }> {}
168
196
  * class SubEvent extends BaseEvent<{ c: number, d: number }> {}
169
197
  *
170
- * const listener: Listener<AddEvent | SubEvent> = event => {
198
+ * const listener: EventListener<AddEvent | SubEvent> = event => {
171
199
  * console.log(event)
172
200
  * }
173
201
  * await eventBus.addListenerMany([AddEvent, SubEvent], listener);
202
+ * await eventBus.dispatchMany([
203
+ * new AddEvent({ a: 1, b: 2 }),
204
+ * new SubEvent({ c: 1, d: 2 }),
205
+ * ]);
174
206
  * ```
175
207
  */
176
208
  addListenerMany(events, listener) {
177
209
  return this.createLayPromise(async () => {
178
- if (isArrayEmpty(events)) {
210
+ if (events.length === 0) {
179
211
  return;
180
212
  }
181
213
  const promises = [];
@@ -200,15 +232,20 @@ export class EventBus {
200
232
  * class AddEvent extends BaseEvent<{ a: number, b: number }> {}
201
233
  * class SubEvent extends BaseEvent<{ c: number, d: number }> {}
202
234
  *
203
- * const listener: Listener<AddEvent | SubEvent> = event => {
235
+ * const listener: EventListener<AddEvent | SubEvent> = event => {
204
236
  * console.log(event);
205
237
  * }
238
+ * await eventBus.addListenerMany([AddEvent, SubEvent], listener);
239
+ * await eventBus.dispatchMany([
240
+ * new AddEvent({ a: 1, b: 2 }),
241
+ * new SubEvent({ c: 1, d: 2 }),
242
+ * ]);
206
243
  * await eventBus.removeListenerMany([AddEvent, SubEvent], listener);
207
244
  * ```
208
245
  */
209
246
  removeListenerMany(events, listener) {
210
247
  return this.createLayPromise(async () => {
211
- if (isArrayEmpty(events)) {
248
+ if (events.length === 0) {
212
249
  return;
213
250
  }
214
251
  const promises = [];
@@ -232,17 +269,19 @@ export class EventBus {
232
269
  *
233
270
  * class AddEvent extends BaseEvent<{ a: number, b: number }> {}
234
271
  *
235
- * const listener: Listener<AddEvent> = event => {
272
+ * await eventBus.listenOnce(AddEvent, event => {
236
273
  * console.log(event);
237
- * }
238
- * await eventBus.listenOnce(AddEvent, listener);
274
+ * });
275
+ *
276
+ * await eventBus.dispatch(new AddEvent({ a: 1, b: 2,}));
239
277
  * ```
240
278
  */
241
279
  listenOnce(event, listener) {
242
280
  return this.createLayPromise(async () => {
243
281
  const wrappedListener = async (event_) => {
244
282
  try {
245
- await listener(event_);
283
+ const resolvedListener = this.resolveListener(listener);
284
+ await resolvedListener(event_);
246
285
  }
247
286
  finally {
248
287
  await this.removeListener(event, wrappedListener);
@@ -251,6 +290,34 @@ export class EventBus {
251
290
  await this.addListener(event, wrappedListener);
252
291
  });
253
292
  }
293
+ /**
294
+ * @example
295
+ * ```ts
296
+ * import type { IGroupableEventBus } from "@daiso-tech/core/event-bus/contracts";
297
+ * import { EventBus } from "@daiso-tech/core/event-bus/implementations/derivables";
298
+ * import { MemoryEventBusAdapter } from "@daiso-tech/core/event-bus/implementations/adapters";
299
+ * import { BaseEvent, type Listener } from "@daiso-tech/core/event-bus/contracts";
300
+ *
301
+ * const eventBus: IGroupableEventBus = new EventBus({
302
+ * adapter: new MemoryEventBusAdapter({ rootGroup: "@global" })
303
+ * });
304
+ *
305
+ * class AddEvent extends BaseEvent<{ a: number, b: number }> {}
306
+ *
307
+ * eventBus.asPromise(AddEvent).then(event => {
308
+ * console.log(event);
309
+ * });
310
+ *
311
+ * await eventBus.dispatch(new AddEvent({ a: 1, b: 2,}));
312
+ * ```
313
+ */
314
+ asPromise(event) {
315
+ return new LazyPromise(() => new Promise((resolve, reject) => {
316
+ this.listenOnce(event, resolve).then((event) => event,
317
+ // eslint-disable-next-line @typescript-eslint/use-unknown-in-catch-callback-variable
318
+ reject);
319
+ }));
320
+ }
254
321
  /**
255
322
  * @example
256
323
  * ```ts
@@ -268,6 +335,7 @@ export class EventBus {
268
335
  * const unsubscribe = await eventBus.subscribe(AddEvent, event => {
269
336
  * console.log(event);
270
337
  * });
338
+ * await eventBus.dispatch(new AddEvent({ a: 1, b: 2,}));
271
339
  * await unsubscribe();
272
340
  * ```
273
341
  */
@@ -292,6 +360,10 @@ export class EventBus {
292
360
  * const unsubscribe = await eventBus.subscribeMany([AddEvent, SubEvent], event => {
293
361
  * console.log(event);
294
362
  * });
363
+ * await eventBus.dispatchMany([
364
+ * new AddEvent({ a: 1, b: 2 }),
365
+ * new SubEvent({ c: 1, d: 2 }),
366
+ * ]);
295
367
  * await unsubscribe();
296
368
  * ```
297
369
  */
@@ -321,15 +393,9 @@ export class EventBus {
321
393
  * class AddEvent extends BaseEvent<{ a: number, b: number }> {}
322
394
  * class SubEvent extends BaseEvent<{ c: number, d: number }> {}
323
395
  *
324
- * await eventBus.dispatch([
325
- * new AddEvent({
326
- * a: 1,
327
- * b: 2,
328
- * }),
329
- * new SubEvent({
330
- * c: 4,
331
- * d: 3
332
- * })
396
+ * await eventBus.dispatchMany([
397
+ * new AddEvent({ a: 1, b: 2 }),
398
+ * new SubEvent({ c: 1, d: 2 }),
333
399
  * ]);
334
400
  * ```
335
401
  */
@@ -360,15 +426,8 @@ export class EventBus {
360
426
  * });
361
427
  *
362
428
  * class AddEvent extends BaseEvent<{ a: number, b: number }> {}
363
- * class SubEvent extends BaseEvent<{ c: number, d: number }> {}
364
429
  *
365
- * await eventBus.dispatch(
366
- * new AddEvent({
367
- * a: 1,
368
- * b: 2,
369
- * })
370
- * );
371
- * ```
430
+ * await eventBus.dispatch(new AddEvent({ a: 1, b: 2,}));
372
431
  * ```
373
432
  */
374
433
  dispatch(event) {
@@ -1 +1 @@
1
- {"version":3,"file":"event-bus.js","sourceRoot":"","sources":["../../../../../src/event-bus/implementations/derivables/event-bus/event-bus.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"event-bus.js","sourceRoot":"","sources":["../../../../../src/event-bus/implementations/derivables/event-bus/event-bus.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAQzD,OAAO,EAMH,6BAA6B,EAC7B,mCAAmC,EACnC,gCAAgC,GACnC,MAAM,0CAA0C,CAAC;AAGlD,OAAO,EACH,kBAAkB,EAClB,mBAAmB,GACtB,MAAM,gCAAgC,CAAC;AAmCxC;;;;;GAKG;AACH,MAAM,OAAO,QAAQ;IAGA,OAAO,CAAmB;IAC1B,aAAa,CAAgB;IAC7B,aAAa,CAAuB;IACpC,WAAW,CAAqB;IAChC,OAAO,CAAkB;IACzB,iBAAiB,GAAG,IAAI,GAAG,EAGzC,CAAC;IAEJ;;;;;;;;;;;OAWG;IACH,YAAY,QAA0B;QAClC,MAAM,EACF,OAAO,EACP,aAAa,GAAG,IAAI,EACpB,aAAa,GAAG,IAAI,EACpB,WAAW,GAAG,IAAI,EAClB,OAAO,GAAG,IAAI,GACjB,GAAG,QAAQ,CAAC;QACb,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAEO,gBAAgB,CACpB,OAAkC;QAElC,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC;aAC1B,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC;aACpC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC;aACpC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;aAChC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,SAAS,CAAC,KAAwB;QAC9B,OAAO,IAAI,QAAQ,CAAC;YAChB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC3D,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;SACxB,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,QAAQ;QACJ,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;IACnC,CAAC;IAEO,oBAAoB,CACxB,QAAsC;QAEtC,IAAI,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,UAAU,CAAC;QACtB,CAAC;QACD,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACjD,OAAO,UAAU,CAAC;IACtB,CAAC;IAEO,eAAe,CACnB,QAA+B;QAE/B,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;YACjC,OAAO,QAAQ,CAAC;QACpB,CAAC;QACD,OAAO,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAEO,cAAc,CAAS,QAA+B;QAC1D,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;YACjC,OAAO;QACX,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,WAAW,CACP,KAAkB,EAClB,QAAmD;QAEnD,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE;YACpC,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CACzC,QAAQ,CACmB,CAAC;YAChC,IAAI,CAAC;gBACD,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;YACjE,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACtB,MAAM,IAAI,gCAAgC,CACtC,4BAA4B,gBAAgB,CAAC,IAAI,0BAA0B,MAAM,CAAC,KAAK,CAAC,SAAS,EACjG,KAAK,CACR,CAAC;YACN,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,cAAc,CACV,KAAkB,EAClB,QAAmD;QAEnD,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE;YACpC,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CACzC,QAAQ,CACmB,CAAC;YAChC,IAAI,CAAC;gBACD,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;gBAChE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAClC,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACtB,MAAM,IAAI,mCAAmC,CACzC,4BAA4B,gBAAgB,CAAC,IAAI,2BAA2B,MAAM,CAAC,KAAK,CAAC,SAAS,EAClG,KAAK,CACR,CAAC;YACN,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,eAAe,CACX,MAAqB,EACrB,QAAmD;QAEnD,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE;YACpC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,OAAO;YACX,CAAC;YACD,MAAM,QAAQ,GAAwB,EAAE,CAAC;YACzC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBACzB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;YACrD,CAAC;YACD,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,kBAAkB,CACd,MAAqB,EACrB,QAAmD;QAEnD,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE;YACpC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,OAAO;YACX,CAAC;YACD,MAAM,QAAQ,GAAwB,EAAE,CAAC;YACzC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBACzB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;YACxD,CAAC;YACD,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,UAAU,CACN,KAAkB,EAClB,QAAmD;QAEnD,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE;YACpC,MAAM,eAAe,GAAG,KAAK,EACzB,MAAkC,EACpC,EAAE;gBACA,IAAI,CAAC;oBACD,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;oBACxD,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;gBACnC,CAAC;wBAAS,CAAC;oBACP,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;gBACtD,CAAC;YACL,CAAC,CAAC;YACF,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,SAAS,CACL,KAAkB;QAElB,OAAO,IAAI,WAAW,CAClB,GAAG,EAAE,CACD,IAAI,OAAO,CAA6B,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,CAChC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;YAChB,qFAAqF;YACrF,MAAM,CACT,CAAC;QACN,CAAC,CAAC,CACT,CAAC;IACN,CAAC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,SAAS,CACL,KAAkB,EAClB,QAAmD;QAEnD,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,aAAa,CACT,MAAqB,EACrB,QAAmD;QAEnD,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE;YACpC,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC7C,MAAM,WAAW,GAAG,GAAG,EAAE;gBACrB,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE;oBACpC,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBACpD,CAAC,CAAC,CAAC;YACP,CAAC,CAAC;YACF,OAAO,WAAW,CAAC;QACvB,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,YAAY,CAAC,MAAiB;QAC1B,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE;YACpC,IAAI,CAAC;gBACD,MAAM,QAAQ,GAAwB,EAAE,CAAC;gBACzC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBACzB,QAAQ,CAAC,IAAI,CACT,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAC1D,CAAC;gBACN,CAAC;gBACD,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAChC,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACtB,MAAM,IAAI,6BAA6B,CACnC,oBAAoB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,2BAA2B,EAC1G,KAAK,CACR,CAAC;YACN,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,QAAQ,CAAC,KAAc;QACnB,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE;YACpC,IAAI,CAAC;gBACD,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;YAClE,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACtB,MAAM,IAAI,6BAA6B,CACnC,kBAAkB,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,2BAA2B,EAC9E,KAAK,CACR,CAAC;YACN,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CACJ"}