@pawells/rxjs-events 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,91 @@
1
+ import { EventHandler } from './handler.js';
2
+ import { TEventData } from './event-data.js';
3
+ /**
4
+ * Debounces event emission from an EventHandler.
5
+ * Events are delayed until `ms` milliseconds have passed without any new events.
6
+ * Useful for expensive operations triggered by high-frequency events.
7
+ *
8
+ * @template TObject - The object type for the handler
9
+ * @template TEvent - The event type
10
+ * @param handler - EventHandler to debounce events from
11
+ * @param ms - Debounce delay in milliseconds
12
+ * @returns A new EventHandler that emits debounced events
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * const handler = new EventHandler<SearchQuery, SearchEvent>('Search');
17
+ * const debounced = DebounceEvents(handler, 300);
18
+ *
19
+ * // Subscribe to the debounced handler
20
+ * debounced.Subscribe((event) => {
21
+ * console.log('Search executed after 300ms of inactivity');
22
+ * });
23
+ *
24
+ * handler.Trigger({ query: 'a' });
25
+ * handler.Trigger({ query: 'ab' });
26
+ * handler.Trigger({ query: 'abc' }); // Only this final query will be debounced
27
+ * ```
28
+ */
29
+ export declare function DebounceEvents<TObject extends object = object, TEvent extends TEventData = TEventData>(handler: EventHandler<TObject, TEvent>, ms: number): EventHandler<TObject, TEvent>;
30
+ /**
31
+ * Throttles event emission from an EventHandler.
32
+ * Events are emitted at most once per `ms` milliseconds.
33
+ * Guarantees that the most recent event is eventually emitted.
34
+ *
35
+ * @template TObject - The object type for the handler
36
+ * @template TEvent - The event type
37
+ * @param handler - EventHandler to throttle events from
38
+ * @param ms - Throttle interval in milliseconds
39
+ * @returns A new EventHandler that emits throttled events
40
+ *
41
+ * @example
42
+ * ```typescript
43
+ * const handler = new EventHandler<MouseEvent, PositionEvent>('MouseMove');
44
+ * const throttled = ThrottleEvents(handler, 100);
45
+ *
46
+ * throttled.Subscribe((event) => {
47
+ * console.log('Position updated (max once per 100ms)');
48
+ * });
49
+ *
50
+ * // High-frequency events will be throttled
51
+ * for (let i = 0; i < 100; i++) {
52
+ * handler.Trigger({ x: i, y: i });
53
+ * }
54
+ * ```
55
+ */
56
+ export declare function ThrottleEvents<TObject extends object = object, TEvent extends TEventData = TEventData>(handler: EventHandler<TObject, TEvent>, ms: number): EventHandler<TObject, TEvent>;
57
+ /**
58
+ * Pipes event payloads through a series of transform functions.
59
+ * Each function receives the output of the previous function and must return a value
60
+ * that can be passed to the next function.
61
+ *
62
+ * @template TEvent - The input event type
63
+ * @template TResult - The final result type after all transforms
64
+ * @param handler - EventHandler to pipe events from
65
+ * @param fns - Transform functions to apply in sequence
66
+ * @returns AsyncIterableIterator of transformed results
67
+ *
68
+ * @example
69
+ * ```typescript
70
+ * interface MessageEvent extends TEventData {
71
+ * Message: {
72
+ * text: string;
73
+ * userId: string;
74
+ * };
75
+ * }
76
+ *
77
+ * const handler = new EventHandler<any, MessageEvent>('Message');
78
+ *
79
+ * // Transform events through a pipeline: extract → uppercase → log
80
+ * for await (const result of PipeEvents(
81
+ * handler,
82
+ * (event: MessageEvent) => event.Message.text,
83
+ * (text: string) => text.toUpperCase(),
84
+ * (text: string) => `processed: ${text}`
85
+ * )) {
86
+ * console.log(result);
87
+ * }
88
+ * ```
89
+ */
90
+ export declare function PipeEvents<TEvent extends TEventData = TEventData, TResult = any>(handler: EventHandler<any, TEvent>, ...fns: Array<(v: any) => any>): AsyncIterableIterator<TResult>;
91
+ //# sourceMappingURL=event-pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-pipeline.d.ts","sourceRoot":"","sources":["../src/event-pipeline.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,cAAc,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAAE,MAAM,SAAS,UAAU,GAAG,UAAU,EACrG,OAAO,EAAE,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,EACtC,EAAE,EAAE,MAAM,GACR,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAO/B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,cAAc,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAAE,MAAM,SAAS,UAAU,GAAG,UAAU,EACrG,OAAO,EAAE,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,EACtC,EAAE,EAAE,MAAM,GACR,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAO/B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,UAAU,CAAC,MAAM,SAAS,UAAU,GAAG,UAAU,EAAE,OAAO,GAAG,GAAG,EAC/E,OAAO,EAAE,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,EAClC,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC,GAC5B,qBAAqB,CAAC,OAAO,CAAC,CAahC"}
@@ -0,0 +1,118 @@
1
+ import { Debounce, Pipe, Throttle } from '@pawells/typescript-common';
2
+ import { EventHandler } from './handler.js';
3
+ /**
4
+ * Debounces event emission from an EventHandler.
5
+ * Events are delayed until `ms` milliseconds have passed without any new events.
6
+ * Useful for expensive operations triggered by high-frequency events.
7
+ *
8
+ * @template TObject - The object type for the handler
9
+ * @template TEvent - The event type
10
+ * @param handler - EventHandler to debounce events from
11
+ * @param ms - Debounce delay in milliseconds
12
+ * @returns A new EventHandler that emits debounced events
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * const handler = new EventHandler<SearchQuery, SearchEvent>('Search');
17
+ * const debounced = DebounceEvents(handler, 300);
18
+ *
19
+ * // Subscribe to the debounced handler
20
+ * debounced.Subscribe((event) => {
21
+ * console.log('Search executed after 300ms of inactivity');
22
+ * });
23
+ *
24
+ * handler.Trigger({ query: 'a' });
25
+ * handler.Trigger({ query: 'ab' });
26
+ * handler.Trigger({ query: 'abc' }); // Only this final query will be debounced
27
+ * ```
28
+ */
29
+ export function DebounceEvents(handler, ms) {
30
+ const debouncedHandler = new EventHandler(handler.Name);
31
+ const debouncedTrigger = Debounce((event) => {
32
+ debouncedHandler.Trigger(event);
33
+ }, ms);
34
+ handler.Subscribe((event) => debouncedTrigger(event));
35
+ return debouncedHandler;
36
+ }
37
+ /**
38
+ * Throttles event emission from an EventHandler.
39
+ * Events are emitted at most once per `ms` milliseconds.
40
+ * Guarantees that the most recent event is eventually emitted.
41
+ *
42
+ * @template TObject - The object type for the handler
43
+ * @template TEvent - The event type
44
+ * @param handler - EventHandler to throttle events from
45
+ * @param ms - Throttle interval in milliseconds
46
+ * @returns A new EventHandler that emits throttled events
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * const handler = new EventHandler<MouseEvent, PositionEvent>('MouseMove');
51
+ * const throttled = ThrottleEvents(handler, 100);
52
+ *
53
+ * throttled.Subscribe((event) => {
54
+ * console.log('Position updated (max once per 100ms)');
55
+ * });
56
+ *
57
+ * // High-frequency events will be throttled
58
+ * for (let i = 0; i < 100; i++) {
59
+ * handler.Trigger({ x: i, y: i });
60
+ * }
61
+ * ```
62
+ */
63
+ export function ThrottleEvents(handler, ms) {
64
+ const throttledHandler = new EventHandler(handler.Name);
65
+ const throttledTrigger = Throttle((event) => {
66
+ throttledHandler.Trigger(event);
67
+ }, ms);
68
+ handler.Subscribe((event) => throttledTrigger(event));
69
+ return throttledHandler;
70
+ }
71
+ /**
72
+ * Pipes event payloads through a series of transform functions.
73
+ * Each function receives the output of the previous function and must return a value
74
+ * that can be passed to the next function.
75
+ *
76
+ * @template TEvent - The input event type
77
+ * @template TResult - The final result type after all transforms
78
+ * @param handler - EventHandler to pipe events from
79
+ * @param fns - Transform functions to apply in sequence
80
+ * @returns AsyncIterableIterator of transformed results
81
+ *
82
+ * @example
83
+ * ```typescript
84
+ * interface MessageEvent extends TEventData {
85
+ * Message: {
86
+ * text: string;
87
+ * userId: string;
88
+ * };
89
+ * }
90
+ *
91
+ * const handler = new EventHandler<any, MessageEvent>('Message');
92
+ *
93
+ * // Transform events through a pipeline: extract → uppercase → log
94
+ * for await (const result of PipeEvents(
95
+ * handler,
96
+ * (event: MessageEvent) => event.Message.text,
97
+ * (text: string) => text.toUpperCase(),
98
+ * (text: string) => `processed: ${text}`
99
+ * )) {
100
+ * console.log(result);
101
+ * }
102
+ * ```
103
+ */
104
+ export function PipeEvents(handler, ...fns) {
105
+ return (async function* () {
106
+ if (fns.length === 0) {
107
+ for await (const event of handler) {
108
+ yield event;
109
+ }
110
+ return;
111
+ }
112
+ const pipeline = Pipe(...fns);
113
+ for await (const event of handler) {
114
+ yield pipeline(event);
115
+ }
116
+ })();
117
+ }
118
+ //# sourceMappingURL=event-pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-pipeline.js","sourceRoot":"","sources":["../src/event-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,cAAc,CAC7B,OAAsC,EACtC,EAAU;IAEV,MAAM,gBAAgB,GAAG,IAAI,YAAY,CAAkB,OAAO,CAAC,IAAI,CAAC,CAAC;IACzE,MAAM,gBAAgB,GAAG,QAAQ,CAAC,CAAC,KAAa,EAAE,EAAE;QACnD,gBAAgB,CAAC,OAAO,CAAC,KAAY,CAAC,CAAC;IACxC,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;IACtD,OAAO,gBAAgB,CAAC;AACzB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,cAAc,CAC7B,OAAsC,EACtC,EAAU;IAEV,MAAM,gBAAgB,GAAG,IAAI,YAAY,CAAkB,OAAO,CAAC,IAAI,CAAC,CAAC;IACzE,MAAM,gBAAgB,GAAG,QAAQ,CAAC,CAAC,KAAa,EAAE,EAAE;QACnD,gBAAgB,CAAC,OAAO,CAAC,KAAY,CAAC,CAAC;IACxC,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;IACtD,OAAO,gBAAgB,CAAC;AACzB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,UAAU,UAAU,CACzB,OAAkC,EAClC,GAAG,GAA2B;IAE9B,OAAO,CAAC,KAAK,SAAS,CAAC;QACtB,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBACnC,MAAM,KAAuB,CAAC;YAC/B,CAAC;YACD,OAAO;QACR,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAI,GAAuB,CAAC,CAAC;QACnD,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YACnC,MAAM,QAAQ,CAAC,KAAK,CAAY,CAAC;QAClC,CAAC;IACF,CAAC,CAAC,EAAE,CAAC;AACN,CAAC"}
@@ -221,5 +221,35 @@ export declare class EventHandler<TObject extends object = object, TEvent extend
221
221
  * ```
222
222
  */
223
223
  Destroy(): void;
224
+ /**
225
+ * Gets the total count of active subscriptions.
226
+ *
227
+ * @returns The number of currently active subscriptions
228
+ *
229
+ * @example
230
+ * ```typescript
231
+ * const handler = new EventHandler('TestEvent');
232
+ * handler.Subscribe((event) => { });
233
+ * handler.Subscribe((event) => { });
234
+ * console.log(handler.GetSubscriptionCount()); // 2
235
+ * ```
236
+ */
237
+ GetSubscriptionCount(): number;
238
+ /**
239
+ * Gets all subscription IDs that are currently active.
240
+ * The returned array is a snapshot of active IDs at the time of the call.
241
+ *
242
+ * @returns Array of active subscription IDs
243
+ *
244
+ * @example
245
+ * ```typescript
246
+ * const handler = new EventHandler('TestEvent');
247
+ * const id1 = handler.Subscribe((event) => { });
248
+ * const id2 = handler.Subscribe((event) => { });
249
+ * const ids = handler.GetActiveSubscriptionIds();
250
+ * console.log(ids); // [0, 1] or similar
251
+ * ```
252
+ */
253
+ GetActiveSubscriptionIds(): number[];
224
254
  }
225
255
  //# sourceMappingURL=handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,YAAY,EAAE,MAAM,MAAM,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,qBAAa,YAAY,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAAE,MAAM,SAAS,UAAU,GAAG,UAAU;IAChG;;;OAGG;IACH,SAAgB,IAAI,EAAE,MAAM,CAAC;IAE7B;;;;;;;;;;;OAWG;gBACS,IAAI,EAAE,MAAM;IAKxB,oEAAoE;IACpE,SAAS,CAAC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAmC;IAEtF;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkC;IAEhE,uEAAuE;IACvE,OAAO,CAAC,OAAO,CAAa;IAE5B,mDAAmD;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0C;IAEnE;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACY,wBAAwB,IAAI,qBAAqB,CAAC,MAAM,CAAC;IAsExE;;;;;;;;;;;;;;;;;;OAkBG;IACI,gBAAgB,IAAI,aAAa,CAAC,MAAM,CAAC;IAIhD;;;;;;;;;;;OAWG;IACI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,qBAAqB,CAAC,MAAM,CAAC;IAI9D;;;;;;;;;;;;;;;;;OAiBG;IACI,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAKnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoCG;IACI,SAAS,CAAC,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,MAAM;IA6BzD;;;;;;;;;;;;;;;;;;;;;OAqBG;IACI,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAW9C;;;;;;;;;;OAUG;IACI,OAAO,IAAI,IAAI;CAYtB"}
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,YAAY,EAAE,MAAM,MAAM,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,qBAAa,YAAY,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAAE,MAAM,SAAS,UAAU,GAAG,UAAU;IAChG;;;OAGG;IACH,SAAgB,IAAI,EAAE,MAAM,CAAC;IAE7B;;;;;;;;;;;OAWG;gBACS,IAAI,EAAE,MAAM;IAKxB,oEAAoE;IACpE,SAAS,CAAC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAmC;IAEtF;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkC;IAEhE,uEAAuE;IACvE,OAAO,CAAC,OAAO,CAAa;IAE5B,mDAAmD;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0C;IAEnE;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACY,wBAAwB,IAAI,qBAAqB,CAAC,MAAM,CAAC;IAsExE;;;;;;;;;;;;;;;;;;OAkBG;IACI,gBAAgB,IAAI,aAAa,CAAC,MAAM,CAAC;IAIhD;;;;;;;;;;;OAWG;IACI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,qBAAqB,CAAC,MAAM,CAAC;IAI9D;;;;;;;;;;;;;;;;;OAiBG;IACI,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAKnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoCG;IACI,SAAS,CAAC,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,MAAM;IA6BzD;;;;;;;;;;;;;;;;;;;;;OAqBG;IACI,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAW9C;;;;;;;;;;OAUG;IACI,OAAO,IAAI,IAAI;IAatB;;;;;;;;;;;;OAYG;IACI,oBAAoB,IAAI,MAAM;IAIrC;;;;;;;;;;;;;;OAcG;IACI,wBAAwB,IAAI,MAAM,EAAE;CAG3C"}
package/build/handler.js CHANGED
@@ -337,5 +337,39 @@ export class EventHandler {
337
337
  this._subscriptions.clear();
338
338
  this._AvailableIds.clear();
339
339
  }
340
+ /**
341
+ * Gets the total count of active subscriptions.
342
+ *
343
+ * @returns The number of currently active subscriptions
344
+ *
345
+ * @example
346
+ * ```typescript
347
+ * const handler = new EventHandler('TestEvent');
348
+ * handler.Subscribe((event) => { });
349
+ * handler.Subscribe((event) => { });
350
+ * console.log(handler.GetSubscriptionCount()); // 2
351
+ * ```
352
+ */
353
+ GetSubscriptionCount() {
354
+ return this._subscriptions.size;
355
+ }
356
+ /**
357
+ * Gets all subscription IDs that are currently active.
358
+ * The returned array is a snapshot of active IDs at the time of the call.
359
+ *
360
+ * @returns Array of active subscription IDs
361
+ *
362
+ * @example
363
+ * ```typescript
364
+ * const handler = new EventHandler('TestEvent');
365
+ * const id1 = handler.Subscribe((event) => { });
366
+ * const id2 = handler.Subscribe((event) => { });
367
+ * const ids = handler.GetActiveSubscriptionIds();
368
+ * console.log(ids); // [0, 1] or similar
369
+ * ```
370
+ */
371
+ GetActiveSubscriptionIds() {
372
+ return Array.from(this._subscriptions.keys());
373
+ }
340
374
  }
341
375
  //# sourceMappingURL=handler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"handler.js","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"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"}
package/build/index.d.ts CHANGED
@@ -6,4 +6,7 @@ export * from './extract-event-payload.js';
6
6
  export * from './event-filter.js';
7
7
  export * from './handler.js';
8
8
  export * from './async-observable.js';
9
+ export * from './event-operators.js';
10
+ export * from './event-pipeline.js';
11
+ export * from './nestjs-pubsub.js';
9
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mBAAmB,iBAAiB,CAAC;AACrC,mBAAmB,qBAAqB,CAAC;AACzC,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAElC,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mBAAmB,iBAAiB,CAAC;AACrC,mBAAmB,qBAAqB,CAAC;AACzC,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAElC,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC"}
package/build/index.js CHANGED
@@ -4,4 +4,7 @@ export * from './event-filter.js';
4
4
  // IAsyncGeneratorESN is an implementation detail of AsyncObservable; not re-exported here.
5
5
  export * from './handler.js';
6
6
  export * from './async-observable.js';
7
+ export * from './event-operators.js';
8
+ export * from './event-pipeline.js';
9
+ export * from './nestjs-pubsub.js';
7
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,2FAA2F;AAC3F,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,2FAA2F;AAC3F,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,171 @@
1
+ /**
2
+ * PubSub engine interface compatible with NestJS GraphQL subscriptions.
3
+ * Defines the contract that must be implemented for GraphQL subscription handling.
4
+ *
5
+ * @remarks
6
+ * This interface is defined locally to avoid a dependency on the graphql-subscriptions package.
7
+ * It implements the standard PubSubEngine interface used by NestJS GraphQL.
8
+ */
9
+ export interface IPubSubEngine {
10
+ /**
11
+ * Publishes a message to a specific trigger channel.
12
+ * @param triggerName - The name of the trigger to publish to
13
+ * @param payload - The payload to publish
14
+ */
15
+ publish(triggerName: string, payload: any): Promise<void>;
16
+ /**
17
+ * Subscribes to messages on a trigger channel.
18
+ * @param triggerName - The name of the trigger to subscribe to
19
+ * @param onMessage - Callback function when a message is received
20
+ * @param options - Optional subscription options
21
+ * @returns A subscription ID that can be used to unsubscribe
22
+ */
23
+ subscribe(triggerName: string, onMessage: (payload: any) => void, options?: Record<string, unknown>): Promise<number>;
24
+ /**
25
+ * Unsubscribes from a trigger channel using the subscription ID.
26
+ * @param subId - The subscription ID returned from subscribe()
27
+ */
28
+ unsubscribe(subId: number): void;
29
+ /**
30
+ * Creates an async iterator for one or more trigger channels.
31
+ * Used by GraphQL subscriptions to iterate over published values.
32
+ * @param triggers - Single trigger name or array of trigger names to listen to
33
+ * @returns AsyncIterableIterator that yields published payloads
34
+ */
35
+ asyncIterator<T = any>(triggers: string | string[]): AsyncIterableIterator<T>;
36
+ }
37
+ /**
38
+ * Adapter that makes EventHandler compatible with NestJS GraphQL @Subscription() decorators.
39
+ * Implements the IPubSubEngine interface for pub/sub messaging patterns.
40
+ *
41
+ * This adapter bridges EventHandler with GraphQL subscriptions by maintaining a map of
42
+ * EventHandlers (one per trigger name) and coordinating subscription/publication.
43
+ *
44
+ * @remarks
45
+ * - No external dependencies required (graphql-subscriptions not needed)
46
+ * - Each trigger name gets its own EventHandler for isolation
47
+ * - Thread-safe subscription ID management
48
+ *
49
+ * @example
50
+ * ```typescript
51
+ * // In your NestJS GraphQL module:
52
+ * import { EventHandlerPubSub } from '@pawells/rxjs-events';
53
+ *
54
+ * const pubSub = new EventHandlerPubSub();
55
+ *
56
+ * // In a GraphQL resolver:
57
+ * @Subscription(() => MessagePayload, {
58
+ * resolve: (payload) => payload,
59
+ * })
60
+ * messageSent(): AsyncIterableIterator<MessagePayload> {
61
+ * return pubSub.asyncIterator<MessagePayload>('MESSAGE_SENT');
62
+ * }
63
+ *
64
+ * // In a mutation:
65
+ * @Mutation(() => MessagePayload)
66
+ * sendMessage(@Args('text') text: string): MessagePayload {
67
+ * const payload = { text, timestamp: Date.now() };
68
+ * pubSub.publish('MESSAGE_SENT', payload);
69
+ * return payload;
70
+ * }
71
+ * ```
72
+ */
73
+ export declare class EventHandlerPubSub implements IPubSubEngine {
74
+ /**
75
+ * Map storing EventHandlers indexed by trigger name.
76
+ * Each trigger maintains its own handler for event isolation.
77
+ */
78
+ private readonly _handlers;
79
+ /**
80
+ * Map storing handler subscriptions and their IDs for cleanup.
81
+ * Maps subscription ID to [handler, subscription ID within handler].
82
+ */
83
+ private readonly _subscriptions;
84
+ /**
85
+ * Counter for generating unique subscription IDs across all triggers.
86
+ */
87
+ private _nextSubscriptionId;
88
+ /**
89
+ * Gets or creates an EventHandler for a specific trigger name.
90
+ *
91
+ * @param triggerName - The trigger channel name
92
+ * @returns The EventHandler for this trigger
93
+ */
94
+ private _getOrCreateHandler;
95
+ /**
96
+ * Publishes a payload to all subscribers of a trigger.
97
+ *
98
+ * @param triggerName - The trigger channel name
99
+ * @param payload - The payload to publish
100
+ */
101
+ publish(triggerName: string, payload: any): Promise<void>;
102
+ /**
103
+ * Subscribes to a trigger channel and calls the callback when messages are published.
104
+ *
105
+ * @param triggerName - The trigger channel name
106
+ * @param onMessage - Callback function that receives the published payload
107
+ * @param _options - Optional subscription options (not used in current implementation)
108
+ * @returns Unique subscription ID for later unsubscription
109
+ */
110
+ subscribe(triggerName: string, onMessage: (payload: any) => void, _options?: Record<string, unknown>): Promise<number>;
111
+ /**
112
+ * Unsubscribes from a trigger channel.
113
+ *
114
+ * @param subId - The subscription ID returned from subscribe()
115
+ */
116
+ unsubscribe(subId: number): void;
117
+ /**
118
+ * Creates an async iterator for one or more trigger channels.
119
+ * Useful for GraphQL subscription resolvers.
120
+ *
121
+ * @template T - The type of values yielded by the iterator
122
+ * @param triggers - Single trigger name or array of trigger names
123
+ * @returns AsyncIterableIterator that yields published payloads
124
+ *
125
+ * @example
126
+ * ```typescript
127
+ * // Subscribe to a single trigger
128
+ * const iterator = pubSub.asyncIterator('USER_CREATED');
129
+ *
130
+ * // Subscribe to multiple triggers
131
+ * const iterator = pubSub.asyncIterator(['USER_CREATED', 'USER_UPDATED']);
132
+ * ```
133
+ */
134
+ asyncIterator<T = any>(triggers: string | string[]): AsyncIterableIterator<T>;
135
+ /**
136
+ * Merges async iterators from multiple trigger handlers.
137
+ * Events from any trigger are yielded as they arrive.
138
+ *
139
+ * @template T - The type of values yielded
140
+ * @param triggers - Array of trigger names
141
+ * @returns Merged async iterator
142
+ */
143
+ private _mergeAsyncIterators;
144
+ }
145
+ /**
146
+ * Wraps an async iterator with a filter predicate for use with GraphQL subscriptions.
147
+ * Mirrors the withFilter helper from graphql-subscriptions.
148
+ *
149
+ * @template T - The type of values in the iterator
150
+ * @param asyncIteratorFn - Function that returns an async iterator
151
+ * @param filterFn - Predicate function that determines which values to yield (async functions supported)
152
+ * @returns Filtered async iterator
153
+ *
154
+ * @example
155
+ * ```typescript
156
+ * const pubSub = new EventHandlerPubSub();
157
+ *
158
+ * // In a GraphQL resolver:
159
+ * @Subscription(() => UserPayload)
160
+ * userUpdated(
161
+ * @Args('userId') userId: string
162
+ * ): AsyncIterableIterator<UserPayload> {
163
+ * return WithFilter(
164
+ * () => pubSub.asyncIterator<UserPayload>('USER_UPDATED'),
165
+ * (payload: UserPayload) => payload.userId === userId
166
+ * );
167
+ * }
168
+ * ```
169
+ */
170
+ export declare function WithFilter<T>(asyncIteratorFn: () => AsyncIterableIterator<T>, filterFn: (payload: T) => boolean | Promise<boolean>): AsyncIterableIterator<T>;
171
+ //# sourceMappingURL=nestjs-pubsub.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nestjs-pubsub.d.ts","sourceRoot":"","sources":["../src/nestjs-pubsub.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC7B;;;;OAIG;IACH,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1D;;;;;;OAMG;IACH,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEtH;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAEjC;;;;;OAKG;IACH,aAAa,CAAC,CAAC,GAAG,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;CAC9E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IACvD;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkD;IAE5E;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4D;IAE3F;;OAEG;IACH,OAAO,CAAC,mBAAmB,CAAK;IAEhC;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAS3B;;;;;OAKG;IACU,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAMtE;;;;;;;OAOG;IACU,SAAS,CACrB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,EACjC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,MAAM,CAAC;IAYlB;;;;OAIG;IACI,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IASvC;;;;;;;;;;;;;;;;OAgBG;IACI,aAAa,CAAC,CAAC,GAAG,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,qBAAqB,CAAC,CAAC,CAAC;IAoBpF;;;;;;;OAOG;IACH,OAAO,CAAC,oBAAoB;CAsB5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAC3B,eAAe,EAAE,MAAM,qBAAqB,CAAC,CAAC,CAAC,EAC/C,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAClD,qBAAqB,CAAC,CAAC,CAAC,CAa1B"}