@pawells/rxjs-events 1.1.0 → 2.0.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.
package/README.md CHANGED
@@ -156,7 +156,6 @@ Filters a single-key event object against an `IFilterCriteria` map using strict
156
156
  | `TAsyncObserver` | Async observer callback type |
157
157
  | `TUnsubscribe` | Unsubscribe function type |
158
158
  | `IFilterCriteria` | Index-signature interface `{ [key: string]: unknown }` |
159
- | `ISubscriptionOptions` | Options passed to `Subscribe` |
160
159
  | `IBackpressureConfig` | Configuration object for `AsyncObservable` |
161
160
  | `IAsyncGeneratorESN<T, TReturn, TNext>` | `AsyncGenerator` extended with `Symbol.asyncDispose` |
162
161
  | `TExtractEventPayload<TEvent>` | Utility type — extracts payload type from a `TEventData` object |
@@ -199,7 +198,7 @@ yarn start # Run built output
199
198
  To run a single test file:
200
199
 
201
200
  ```bash
202
- yarn vitest run src/path/to/file.test.ts
201
+ yarn vitest run src/tests/file.spec.ts
203
202
  ```
204
203
 
205
204
  ## Requirements
@@ -11,14 +11,25 @@
11
11
  *
12
12
  * @example
13
13
  * ```typescript
14
- * async function* myGenerator(): IAsyncGeneratorESN<string, void, void> {
15
- * yield 'value1';
16
- * yield 'value2';
14
+ * import { EventHandler } from '@pawells/rxjs-events';
15
+ * import type { IAsyncGeneratorESN } from '@pawells/rxjs-events';
16
+ *
17
+ * interface MessageEvent extends Record<string, unknown> {
18
+ * MessageReceived: { text: string };
17
19
  * }
18
20
  *
19
- * // With await using (requires TypeScript 5.2+)
20
- * await using gen = myGenerator() as unknown as AsyncDisposable;
21
- * // gen is automatically disposed when it goes out of scope
21
+ * const handler = new EventHandler<MessageEvent, 'MessageReceived'>('MessageReceived');
22
+ *
23
+ * async function processOnce(): Promise<void> {
24
+ * // GetAsyncIterator() returns IAsyncGeneratorESN, which implements Symbol.asyncDispose.
25
+ * // TypeScript target ES2022 + lib ESNext enables the `await using` syntax directly.
26
+ * await using iter: IAsyncGeneratorESN<{ text: string }, void, void> = handler.GetAsyncIterator();
27
+ * const { value, done } = await iter.next();
28
+ * if (!done) {
29
+ * console.log('Message:', value.text);
30
+ * }
31
+ * // iter[Symbol.asyncDispose]() is called automatically at block exit
32
+ * }
22
33
  * ```
23
34
  */
24
35
  export interface IAsyncGeneratorESN<T = unknown, TReturn = unknown, TNext = unknown> extends AsyncGenerator<T, TReturn, TNext> {
@@ -1 +1 @@
1
- {"version":3,"file":"async-generator-esn.d.ts","sourceRoot":"","sources":["../src/async-generator-esn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EAAE,KAAK,GAAG,OAAO,CAAE,SAAQ,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC;IAC7H,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,CAAA;CAC1C"}
1
+ {"version":3,"file":"async-generator-esn.d.ts","sourceRoot":"","sources":["../src/async-generator-esn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EAAE,KAAK,GAAG,OAAO,CAAE,SAAQ,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC;IAC7H,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,CAAA;CAC1C"}
@@ -1,28 +1,107 @@
1
1
  import { Observable } from 'rxjs';
2
2
  /**
3
- * Error thrown when the observable buffer overflows.
3
+ * Error thrown when an {@link AsyncObservable} buffer overflows and the
4
+ * configured strategy is {@link BackpressureStrategy.Error}.
5
+ *
6
+ * The error message includes the configured `maxBufferSize` so callers can
7
+ * distinguish overflow from other runtime errors.
8
+ *
9
+ * @remarks
10
+ * This error is only thrown when `overflowStrategy` is set to
11
+ * `BackpressureStrategy.Error`. The `DropOldest` and `DropNewest` strategies
12
+ * silently discard excess items instead of throwing.
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * import { AsyncObservable, BackpressureStrategy, BufferOverflowError } from '@pawells/rxjs-events';
17
+ *
18
+ * const obs = new AsyncObservable<number>({
19
+ * maxBufferSize: 2,
20
+ * overflowStrategy: BackpressureStrategy.Error,
21
+ * });
22
+ *
23
+ * try {
24
+ * obs.Push(1);
25
+ * obs.Push(2);
26
+ * obs.Push(3); // throws BufferOverflowError
27
+ * } catch (err) {
28
+ * if (err instanceof BufferOverflowError) {
29
+ * console.error('Buffer full:', err.message);
30
+ * }
31
+ * }
32
+ * ```
4
33
  */
5
34
  export declare class BufferOverflowError extends Error {
6
35
  constructor(maxSize: number);
7
36
  }
8
37
  /**
9
- * Backpressure overflow strategy
38
+ * Strategy applied by {@link AsyncObservable} when its push buffer reaches
39
+ * {@link IBackpressureConfig.maxBufferSize}.
40
+ *
41
+ * Choose a strategy based on how your consumer handles lag. `DropOldest` (the
42
+ * default) keeps the most recent data; `DropNewest` preserves historical order
43
+ * at the cost of discarding late arrivals; `Error` makes overflow a hard fault
44
+ * so callers must handle it explicitly.
45
+ *
46
+ * @see {@link IBackpressureConfig} for configuration details.
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * import { AsyncObservable, BackpressureStrategy } from '@pawells/rxjs-events';
51
+ *
52
+ * // Keep the most recent 50 items; discard the oldest when full
53
+ * const obs = new AsyncObservable<string>({
54
+ * maxBufferSize: 50,
55
+ * overflowStrategy: BackpressureStrategy.DropOldest,
56
+ * });
57
+ * ```
10
58
  */
11
59
  export declare enum BackpressureStrategy {
12
60
  /** Drop oldest events when buffer is full */
13
61
  DropOldest = "DropOldest",
14
62
  /** Drop newest events when buffer is full */
15
63
  DropNewest = "DropNewest",
16
- /** Throw error when buffer is full */
64
+ /** Throw {@link BufferOverflowError} when buffer is full */
17
65
  Error = "Error"
18
66
  }
19
67
  /**
20
- * Configuration for AsyncObservable backpressure
68
+ * Configuration object for {@link AsyncObservable} backpressure behaviour.
69
+ *
70
+ * All properties are optional. Omit the entire config object to accept all
71
+ * defaults (`maxBufferSize: 1000`, `overflowStrategy: BackpressureStrategy.DropOldest`).
72
+ *
73
+ * @remarks
74
+ * Setting `maxBufferSize` to a non-positive integer throws a `RangeError` at
75
+ * construction time.
76
+ *
77
+ * @example
78
+ * ```typescript
79
+ * import { AsyncObservable, BackpressureStrategy } from '@pawells/rxjs-events';
80
+ * import type { IBackpressureConfig } from '@pawells/rxjs-events';
81
+ *
82
+ * // DropOldest — discard the oldest buffered item to make room (default)
83
+ * const dropOldest = new AsyncObservable<number>({
84
+ * maxBufferSize: 100,
85
+ * overflowStrategy: BackpressureStrategy.DropOldest,
86
+ * });
87
+ *
88
+ * // DropNewest — discard the incoming item when the buffer is full
89
+ * const dropNewest = new AsyncObservable<number>({
90
+ * maxBufferSize: 100,
91
+ * overflowStrategy: BackpressureStrategy.DropNewest,
92
+ * });
93
+ *
94
+ * // Error — throw BufferOverflowError on overflow
95
+ * const strict = new AsyncObservable<number>({
96
+ * maxBufferSize: 100,
97
+ * overflowStrategy: BackpressureStrategy.Error,
98
+ * });
99
+ * ```
21
100
  */
22
101
  export interface IBackpressureConfig {
23
- /** Maximum buffer size (default: 1000) */
102
+ /** Maximum number of items held in the push buffer before overflow handling kicks in. Defaults to 1000. */
24
103
  maxBufferSize?: number;
25
- /** Strategy when buffer overflows (default: DropOldest) */
104
+ /** Strategy applied when the buffer is full. Defaults to {@link BackpressureStrategy.DropOldest}. */
26
105
  overflowStrategy?: BackpressureStrategy;
27
106
  }
28
107
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"async-observable.d.ts","sourceRoot":"","sources":["../src/async-observable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAyB,MAAM,MAAM,CAAC;AAGzD;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM;CAI3B;AAED;;GAEG;AACH,oBAAY,oBAAoB;IAC/B,6CAA6C;IAC7C,UAAU,eAAe;IACzB,6CAA6C;IAC7C,UAAU,eAAe;IACzB,sCAAsC;IACtC,KAAK,UAAU;CACf;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,0CAA0C;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2DAA2D;IAC3D,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;CACxC;AAKD;;;GAGG;AACH,qBAAa,eAAe,CAAC,CAAC,CAAE,SAAQ,UAAU,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAE7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAW;IAEnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IAExC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAuB;IAEzD;;;;;;OAMG;gBACS,MAAM,CAAC,EAAE,mBAAmB;IAqBxC;;OAEG;IACI,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAS3B,OAAO,CAAC,eAAe;IAevB;;;;;;;;;OASG;IACI,OAAO,IAAI,IAAI;IAKtB;;;;;;;;OAQG;IACI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;CAwG9D"}
1
+ {"version":3,"file":"async-observable.d.ts","sourceRoot":"","sources":["../src/async-observable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAyB,MAAM,MAAM,CAAC;AAGzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM;CAI3B;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,oBAAY,oBAAoB;IAC/B,6CAA6C;IAC7C,UAAU,eAAe;IACzB,6CAA6C;IAC7C,UAAU,eAAe;IACzB,4DAA4D;IAC5D,KAAK,UAAU;CACf;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,WAAW,mBAAmB;IACnC,2GAA2G;IAC3G,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qGAAqG;IACrG,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;CACxC;AAKD;;;GAGG;AACH,qBAAa,eAAe,CAAC,CAAC,CAAE,SAAQ,UAAU,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAE7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAW;IAEnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IAExC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAuB;IAEzD;;;;;;OAMG;gBACS,MAAM,CAAC,EAAE,mBAAmB;IAqBxC;;OAEG;IACI,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAS3B,OAAO,CAAC,eAAe;IAevB;;;;;;;;;OASG;IACI,OAAO,IAAI,IAAI;IAKtB;;;;;;;;OAQG;IACI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;CAwG9D"}
@@ -1,6 +1,35 @@
1
1
  import { Observable, Subject } from 'rxjs';
2
2
  /**
3
- * Error thrown when the observable buffer overflows.
3
+ * Error thrown when an {@link AsyncObservable} buffer overflows and the
4
+ * configured strategy is {@link BackpressureStrategy.Error}.
5
+ *
6
+ * The error message includes the configured `maxBufferSize` so callers can
7
+ * distinguish overflow from other runtime errors.
8
+ *
9
+ * @remarks
10
+ * This error is only thrown when `overflowStrategy` is set to
11
+ * `BackpressureStrategy.Error`. The `DropOldest` and `DropNewest` strategies
12
+ * silently discard excess items instead of throwing.
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * import { AsyncObservable, BackpressureStrategy, BufferOverflowError } from '@pawells/rxjs-events';
17
+ *
18
+ * const obs = new AsyncObservable<number>({
19
+ * maxBufferSize: 2,
20
+ * overflowStrategy: BackpressureStrategy.Error,
21
+ * });
22
+ *
23
+ * try {
24
+ * obs.Push(1);
25
+ * obs.Push(2);
26
+ * obs.Push(3); // throws BufferOverflowError
27
+ * } catch (err) {
28
+ * if (err instanceof BufferOverflowError) {
29
+ * console.error('Buffer full:', err.message);
30
+ * }
31
+ * }
32
+ * ```
4
33
  */
5
34
  export class BufferOverflowError extends Error {
6
35
  constructor(maxSize) {
@@ -9,7 +38,26 @@ export class BufferOverflowError extends Error {
9
38
  }
10
39
  }
11
40
  /**
12
- * Backpressure overflow strategy
41
+ * Strategy applied by {@link AsyncObservable} when its push buffer reaches
42
+ * {@link IBackpressureConfig.maxBufferSize}.
43
+ *
44
+ * Choose a strategy based on how your consumer handles lag. `DropOldest` (the
45
+ * default) keeps the most recent data; `DropNewest` preserves historical order
46
+ * at the cost of discarding late arrivals; `Error` makes overflow a hard fault
47
+ * so callers must handle it explicitly.
48
+ *
49
+ * @see {@link IBackpressureConfig} for configuration details.
50
+ *
51
+ * @example
52
+ * ```typescript
53
+ * import { AsyncObservable, BackpressureStrategy } from '@pawells/rxjs-events';
54
+ *
55
+ * // Keep the most recent 50 items; discard the oldest when full
56
+ * const obs = new AsyncObservable<string>({
57
+ * maxBufferSize: 50,
58
+ * overflowStrategy: BackpressureStrategy.DropOldest,
59
+ * });
60
+ * ```
13
61
  */
14
62
  export var BackpressureStrategy;
15
63
  (function (BackpressureStrategy) {
@@ -17,7 +65,7 @@ export var BackpressureStrategy;
17
65
  BackpressureStrategy["DropOldest"] = "DropOldest";
18
66
  /** Drop newest events when buffer is full */
19
67
  BackpressureStrategy["DropNewest"] = "DropNewest";
20
- /** Throw error when buffer is full */
68
+ /** Throw {@link BufferOverflowError} when buffer is full */
21
69
  BackpressureStrategy["Error"] = "Error";
22
70
  })(BackpressureStrategy || (BackpressureStrategy = {}));
23
71
  /** Default maximum buffer size for AsyncObservable instances */
@@ -1 +1 @@
1
- {"version":3,"file":"async-observable.js","sourceRoot":"","sources":["../src/async-observable.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"async-observable.js","sourceRoot":"","sources":["../src/async-observable.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,29 @@
1
1
  import { TEventData } from './event-data.js';
2
2
  /**
3
- * Type to extract the payload type from an event.
4
- * Takes the first (and only) property value from an TEventData object.
3
+ * Utility type that extracts the payload type from a {@link TEventData} object.
4
+ *
5
+ * Because every event shape has exactly one top-level key (the event name) whose
6
+ * value is the payload, indexing by `keyof TEvent` resolves directly to the payload
7
+ * type. Use this type to obtain the payload type without manually referencing the
8
+ * event-name key.
9
+ *
10
+ * @template TEvent - A {@link TEventData} object with exactly one top-level key.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * import type { TEventData, TExtractEventPayload } from '@pawells/rxjs-events';
15
+ *
16
+ * interface UserCreatedEvent extends TEventData {
17
+ * UserCreated: { userId: string; username: string };
18
+ * }
19
+ *
20
+ * // Resolves to: { userId: string; username: string }
21
+ * type UserCreatedPayload = TExtractEventPayload<UserCreatedEvent>;
22
+ *
23
+ * const handler = (payload: UserCreatedPayload): void => {
24
+ * console.log('New user:', payload.userId);
25
+ * };
26
+ * ```
5
27
  */
6
28
  export type TExtractEventPayload<TEvent extends TEventData> = TEvent[keyof TEvent];
7
29
  //# sourceMappingURL=extract-event-payload.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"extract-event-payload.d.ts","sourceRoot":"","sources":["../src/extract-event-payload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;;GAGG;AACH,MAAM,MAAM,oBAAoB,CAAC,MAAM,SAAS,UAAU,IAAI,MAAM,CAAC,MAAM,MAAM,CAAC,CAAC"}
1
+ {"version":3,"file":"extract-event-payload.d.ts","sourceRoot":"","sources":["../src/extract-event-payload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,MAAM,oBAAoB,CAAC,MAAM,SAAS,UAAU,IAAI,MAAM,CAAC,MAAM,MAAM,CAAC,CAAC"}
@@ -1,6 +1,28 @@
1
1
  /**
2
- * Filter criteria interface for event filtering.
3
- * Represents property-value pairs to match against event payloads.
2
+ * Filter criteria for matching against event payloads.
3
+ *
4
+ * An `IFilterCriteria` object is a plain key-value map where each entry
5
+ * specifies a property name and the expected value. {@link EventFilter} uses
6
+ * strict equality (`===`) to test each criterion against the corresponding
7
+ * property on the event payload. An event passes the filter only when every
8
+ * criterion matches.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * import type { IFilterCriteria } from '@pawells/rxjs-events';
13
+ * import { EventFilter } from '@pawells/rxjs-events';
14
+ *
15
+ * const criteria: IFilterCriteria = {
16
+ * userId: '42',
17
+ * role: 'admin',
18
+ * };
19
+ *
20
+ * const event = { UserCreated: { userId: '42', role: 'admin', username: 'alice' } };
21
+ *
22
+ * if (EventFilter(event, criteria)) {
23
+ * // All criteria matched — safe to process the event
24
+ * }
25
+ * ```
4
26
  */
5
27
  export interface IFilterCriteria {
6
28
  [key: string]: unknown;
@@ -1 +1 @@
1
- {"version":3,"file":"filter-criteria.d.ts","sourceRoot":"","sources":["../src/filter-criteria.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC/B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB"}
1
+ {"version":3,"file":"filter-criteria.d.ts","sourceRoot":"","sources":["../src/filter-criteria.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,WAAW,eAAe;IAC/B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB"}
@@ -1,6 +1,7 @@
1
1
  import { Subscription } from 'rxjs';
2
2
  import { TEventData } from './event-data.js';
3
3
  import { TEventFunction } from './event-function.js';
4
+ import type { SubscriptionHandle } from './types.js';
4
5
  /**
5
6
  * Event handler class that provides reactive event management with RxJS integration.
6
7
  * Supports subscription management, event triggering, and async iteration patterns.
@@ -157,7 +158,7 @@ export declare class EventHandler<TObject extends object = object, TEvent extend
157
158
  * Uses optimized O(1) ID allocation for efficient subscription management.
158
159
  *
159
160
  * @param onEvent - Function to call when events are triggered
160
- * @returns number representing the unique subscription ID
161
+ * @returns SubscriptionHandle representing the unique subscription identifier
161
162
  *
162
163
  * @remarks
163
164
  * **Error handling:** if the internal RxJS Subject ever errors (which only happens if
@@ -189,13 +190,13 @@ export declare class EventHandler<TObject extends object = object, TEvent extend
189
190
  * handler.Unsubscribe(asyncSubId);
190
191
  * ```
191
192
  */
192
- Subscribe(onEvent: TEventFunction<TEvent>): number;
193
+ Subscribe(onEvent: TEventFunction<TEvent>): SubscriptionHandle;
193
194
  /**
194
- * Unsubscribes from events using the subscription ID.
195
- * Safely handles non-existent subscription IDs without throwing errors.
195
+ * Unsubscribes from events using the subscription handle.
196
+ * Safely handles non-existent subscription handles without throwing errors.
196
197
  * Freed IDs are made available for reuse to optimize memory usage.
197
198
  *
198
- * @param subscription - The unique subscription ID returned from Subscribe()
199
+ * @param subscription - The unique subscription handle returned from Subscribe()
199
200
  *
200
201
  * @example
201
202
  * ```typescript
@@ -208,11 +209,11 @@ export declare class EventHandler<TObject extends object = object, TEvent extend
208
209
  * // Later, unsubscribe
209
210
  * handler.Unsubscribe(subId);
210
211
  *
211
- * // Safe to call with non-existent IDs
212
- * handler.Unsubscribe(999); // No error thrown
212
+ * // Safe to call with non-existent handles
213
+ * handler.Unsubscribe(999 as SubscriptionHandle); // No error thrown
213
214
  * ```
214
215
  */
215
- Unsubscribe(subscription: number): void;
216
+ Unsubscribe(subscription: SubscriptionHandle): void;
216
217
  /**
217
218
  * Destroys the event handler and cleans up all resources.
218
219
  * Completes the internal subject and unsubscribes all active subscriptions.
@@ -240,10 +241,10 @@ export declare class EventHandler<TObject extends object = object, TEvent extend
240
241
  */
241
242
  GetSubscriptionCount(): number;
242
243
  /**
243
- * Gets all subscription IDs that are currently active.
244
- * The returned array is a snapshot of active IDs at the time of the call.
244
+ * Gets all subscription handles that are currently active.
245
+ * The returned array is a snapshot of active handles at the time of the call.
245
246
  *
246
- * @returns Array of active subscription IDs
247
+ * @returns Array of active subscription handles
247
248
  *
248
249
  * @example
249
250
  * ```typescript
@@ -251,9 +252,9 @@ export declare class EventHandler<TObject extends object = object, TEvent extend
251
252
  * const id1 = handler.Subscribe((event) => { });
252
253
  * const id2 = handler.Subscribe((event) => { });
253
254
  * const ids = handler.GetActiveSubscriptionIds();
254
- * console.log(ids); // [0, 1] or similar
255
+ * console.log(ids); // [0 as SubscriptionHandle, 1 as SubscriptionHandle] or similar
255
256
  * ```
256
257
  */
257
- GetActiveSubscriptionIds(): number[];
258
+ GetActiveSubscriptionIds(): SubscriptionHandle[];
258
259
  }
259
260
  //# 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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;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"}
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;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;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,kBAAkB;IA6BrE;;;;;;;;;;;;;;;;;;;;;OAqBG;IACI,WAAW,CAAC,YAAY,EAAE,kBAAkB,GAAG,IAAI;IAW1D;;;;;;;;;;OAUG;IACI,OAAO,IAAI,IAAI;IAatB;;;;;;;;;;;;OAYG;IACI,oBAAoB,IAAI,MAAM;IAIrC;;;;;;;;;;;;;;OAcG;IACI,wBAAwB,IAAI,kBAAkB,EAAE;CAGvD"}
package/build/handler.js CHANGED
@@ -231,7 +231,7 @@ export class EventHandler {
231
231
  * Uses optimized O(1) ID allocation for efficient subscription management.
232
232
  *
233
233
  * @param onEvent - Function to call when events are triggered
234
- * @returns number representing the unique subscription ID
234
+ * @returns SubscriptionHandle representing the unique subscription identifier
235
235
  *
236
236
  * @remarks
237
237
  * **Error handling:** if the internal RxJS Subject ever errors (which only happens if
@@ -290,11 +290,11 @@ export class EventHandler {
290
290
  return id;
291
291
  }
292
292
  /**
293
- * Unsubscribes from events using the subscription ID.
294
- * Safely handles non-existent subscription IDs without throwing errors.
293
+ * Unsubscribes from events using the subscription handle.
294
+ * Safely handles non-existent subscription handles without throwing errors.
295
295
  * Freed IDs are made available for reuse to optimize memory usage.
296
296
  *
297
- * @param subscription - The unique subscription ID returned from Subscribe()
297
+ * @param subscription - The unique subscription handle returned from Subscribe()
298
298
  *
299
299
  * @example
300
300
  * ```typescript
@@ -307,8 +307,8 @@ export class EventHandler {
307
307
  * // Later, unsubscribe
308
308
  * handler.Unsubscribe(subId);
309
309
  *
310
- * // Safe to call with non-existent IDs
311
- * handler.Unsubscribe(999); // No error thrown
310
+ * // Safe to call with non-existent handles
311
+ * handler.Unsubscribe(999 as SubscriptionHandle); // No error thrown
312
312
  * ```
313
313
  */
314
314
  Unsubscribe(subscription) {
@@ -358,10 +358,10 @@ export class EventHandler {
358
358
  return this._subscriptions.size;
359
359
  }
360
360
  /**
361
- * Gets all subscription IDs that are currently active.
362
- * The returned array is a snapshot of active IDs at the time of the call.
361
+ * Gets all subscription handles that are currently active.
362
+ * The returned array is a snapshot of active handles at the time of the call.
363
363
  *
364
- * @returns Array of active subscription IDs
364
+ * @returns Array of active subscription handles
365
365
  *
366
366
  * @example
367
367
  * ```typescript
@@ -369,11 +369,11 @@ export class EventHandler {
369
369
  * const id1 = handler.Subscribe((event) => { });
370
370
  * const id2 = handler.Subscribe((event) => { });
371
371
  * const ids = handler.GetActiveSubscriptionIds();
372
- * console.log(ids); // [0, 1] or similar
372
+ * console.log(ids); // [0 as SubscriptionHandle, 1 as SubscriptionHandle] or similar
373
373
  * ```
374
374
  */
375
375
  GetActiveSubscriptionIds() {
376
- return Array.from(this._subscriptions.keys());
376
+ return Array.from(this._subscriptions.keys()).map((id) => id);
377
377
  }
378
378
  }
379
379
  //# 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
@@ -1,6 +1,6 @@
1
1
  export type * from './event-data.js';
2
2
  export type * from './event-function.js';
3
- export type { TEventHandler } from './types.js';
3
+ export type { TEventHandler, SubscriptionHandle } from './types.js';
4
4
  export * from './filter-criteria.js';
5
5
  export * from './extract-event-payload.js';
6
6
  export * from './event-filter.js';
@@ -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;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,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,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACpE,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"}
@@ -1,10 +1,38 @@
1
+ import type { SubscriptionHandle } from './types.js';
1
2
  /**
2
3
  * PubSub engine interface compatible with NestJS GraphQL subscriptions.
3
- * Defines the contract that must be implemented for GraphQL subscription handling.
4
+ *
5
+ * Implementors of this interface can be registered as the `pubSub` provider in a
6
+ * NestJS GraphQL module and used directly with `@Subscription()` decorators.
7
+ * {@link EventHandlerPubSub} is the concrete implementation provided by this library.
4
8
  *
5
9
  * @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.
10
+ * This interface mirrors the `PubSubEngine` contract from `graphql-subscriptions`
11
+ * without introducing a dependency on that package. If you already use
12
+ * `graphql-subscriptions`, `EventHandlerPubSub` is a drop-in replacement.
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * import { EventHandlerPubSub } from '@pawells/rxjs-events';
17
+ * import type { IPubSubEngine } from '@pawells/rxjs-events';
18
+ *
19
+ * // Use the concrete implementation
20
+ * const pubSub: IPubSubEngine = new EventHandlerPubSub();
21
+ *
22
+ * // Publish a message
23
+ * await pubSub.publish('USER_CREATED', { userId: '42', username: 'alice' });
24
+ *
25
+ * // Subscribe to a channel
26
+ * const handle = await pubSub.subscribe('USER_CREATED', (payload) => {
27
+ * console.log('Received:', payload);
28
+ * });
29
+ *
30
+ * // Iterate over published values (used by GraphQL resolvers)
31
+ * const iterator = pubSub.asyncIterator<{ userId: string }>('USER_CREATED');
32
+ *
33
+ * // Clean up
34
+ * pubSub.unsubscribe(handle);
35
+ * ```
8
36
  */
9
37
  export interface IPubSubEngine {
10
38
  /**
@@ -18,14 +46,14 @@ export interface IPubSubEngine {
18
46
  * @param triggerName - The name of the trigger to subscribe to
19
47
  * @param onMessage - Callback function when a message is received
20
48
  * @param options - Optional subscription options
21
- * @returns A subscription ID that can be used to unsubscribe
49
+ * @returns A subscription handle that can be used to unsubscribe
22
50
  */
23
- subscribe(triggerName: string, onMessage: (payload: any) => void, options?: Record<string, unknown>): Promise<number>;
51
+ subscribe(triggerName: string, onMessage: (payload: any) => void, options?: Record<string, unknown>): Promise<SubscriptionHandle>;
24
52
  /**
25
- * Unsubscribes from a trigger channel using the subscription ID.
26
- * @param subId - The subscription ID returned from subscribe()
53
+ * Unsubscribes from a trigger channel using the subscription handle.
54
+ * @param subId - The subscription handle returned from subscribe()
27
55
  */
28
- unsubscribe(subId: number): void;
56
+ unsubscribe(subId: SubscriptionHandle): void;
29
57
  /**
30
58
  * Creates an async iterator for one or more trigger channels.
31
59
  * Used by GraphQL subscriptions to iterate over published values.
@@ -105,15 +133,15 @@ export declare class EventHandlerPubSub implements IPubSubEngine {
105
133
  * @param triggerName - The trigger channel name
106
134
  * @param onMessage - Callback function that receives the published payload
107
135
  * @param _options - Optional subscription options (not used in current implementation)
108
- * @returns Unique subscription ID for later unsubscription
136
+ * @returns Unique subscription handle for later unsubscription
109
137
  */
110
- subscribe(triggerName: string, onMessage: (payload: any) => void, _options?: Record<string, unknown>): Promise<number>;
138
+ subscribe(triggerName: string, onMessage: (payload: any) => void, _options?: Record<string, unknown>): Promise<SubscriptionHandle>;
111
139
  /**
112
140
  * Unsubscribes from a trigger channel.
113
141
  *
114
- * @param subId - The subscription ID returned from subscribe()
142
+ * @param subId - The subscription handle returned from subscribe()
115
143
  */
116
- unsubscribe(subId: number): void;
144
+ unsubscribe(subId: SubscriptionHandle): void;
117
145
  /**
118
146
  * Creates an async iterator for one or more trigger channels.
119
147
  * Useful for GraphQL subscription resolvers.
@@ -1 +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;CA6C5B;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"}
1
+ {"version":3,"file":"nestjs-pubsub.d.ts","sourceRoot":"","sources":["../src/nestjs-pubsub.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;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,kBAAkB,CAAC,CAAC;IAElI;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAE7C;;;;;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,kBAAkB,CAAC;IAY9B;;;;OAIG;IACI,WAAW,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;IASnD;;;;;;;;;;;;;;;;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;CA6C5B;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"}
@@ -81,7 +81,7 @@ export class EventHandlerPubSub {
81
81
  * @param triggerName - The trigger channel name
82
82
  * @param onMessage - Callback function that receives the published payload
83
83
  * @param _options - Optional subscription options (not used in current implementation)
84
- * @returns Unique subscription ID for later unsubscription
84
+ * @returns Unique subscription handle for later unsubscription
85
85
  */
86
86
  async subscribe(triggerName, onMessage, _options) {
87
87
  const handler = this._getOrCreateHandler(triggerName);
@@ -95,7 +95,7 @@ export class EventHandlerPubSub {
95
95
  /**
96
96
  * Unsubscribes from a trigger channel.
97
97
  *
98
- * @param subId - The subscription ID returned from subscribe()
98
+ * @param subId - The subscription handle returned from subscribe()
99
99
  */
100
100
  unsubscribe(subId) {
101
101
  const subscription = this._subscriptions.get(subId);
@@ -1 +1 @@
1
- {"version":3,"file":"nestjs-pubsub.js","sourceRoot":"","sources":["../src/nestjs-pubsub.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nestjs-pubsub.js","sourceRoot":"","sources":["../src/nestjs-pubsub.ts"],"names":[],"mappings":"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"}
package/build/types.d.ts CHANGED
@@ -1,20 +1,46 @@
1
1
  /**
2
- * Event handler callback function type
3
- * @template TPayload - The type of event payload
4
- * @param payload - The event data
5
- * @returns void or Promise<void>
2
+ * Opaque branded type representing a subscription handle.
3
+ *
4
+ * A SubscriptionHandle is a unique identifier returned by {@link subscribe} methods
5
+ * and used with {@link unsubscribe} methods to remove event subscriptions. The numeric
6
+ * value is intentionally inaccessible to consumers—this is an opaque type, so you cannot
7
+ * extract or rely on the underlying ID.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * const handle: SubscriptionHandle = eventHandler.subscribe((payload) => {
12
+ * console.log('Event received:', payload);
13
+ * });
14
+ *
15
+ * // Later, unsubscribe using the handle
16
+ * eventHandler.unsubscribe(handle);
17
+ * ```
6
18
  */
7
- export type TEventHandler<TPayload = unknown> = (payload: TPayload) => void | Promise<void>;
19
+ export type SubscriptionHandle = number & {
20
+ readonly __brand: 'SubscriptionHandle';
21
+ };
8
22
  /**
9
- * Event subscription options
10
- * @remarks `once` and `priority` are reserved for a future release and are not yet implemented
11
- * by `EventHandler`. Passing these options currently has no effect.
12
- * @internal Not part of the public API until implemented; not re-exported from the package entry point.
23
+ * Event handler callback function type.
24
+ *
25
+ * Use this type to annotate variables or parameters that hold an event-handling
26
+ * callback. The callback receives the typed payload and may return either `void`
27
+ * or a `Promise<void>` for async handlers.
28
+ *
29
+ * @template TPayload - The type of the event payload passed to the callback.
30
+ *
31
+ * @example
32
+ * ```typescript
33
+ * import type { TEventHandler } from '@pawells/rxjs-events';
34
+ *
35
+ * const handleUserCreated: TEventHandler<{ userId: string; username: string }> = (payload) => {
36
+ * console.log('User created:', payload.userId);
37
+ * };
38
+ *
39
+ * // Async handler
40
+ * const handleAsync: TEventHandler<{ id: string }> = async (payload) => {
41
+ * await saveToDatabase(payload.id);
42
+ * };
43
+ * ```
13
44
  */
14
- export interface ISubscriptionOptions {
15
- /** Whether to call the handler only once (not yet implemented) */
16
- once?: boolean;
17
- /** Priority for handler execution, higher = earlier (not yet implemented) */
18
- priority?: number;
19
- }
45
+ export type TEventHandler<TPayload = unknown> = (payload: TPayload) => void | Promise<void>;
20
46
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,MAAM,aAAa,CAAC,QAAQ,GAAG,OAAO,IAAI,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5F;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACpC,kEAAkE;IAClE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAA;CAAE,CAAC;AAErF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,MAAM,aAAa,CAAC,QAAQ,GAAG,OAAO,IAAI,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pawells/rxjs-events",
3
3
  "displayName": "RxJS Events",
4
- "version": "1.1.0",
4
+ "version": "2.0.0",
5
5
  "description": "RxJS-based event handling library with reactive observables and async event streams.",
6
6
  "type": "module",
7
7
  "main": "./build/index.js",
@@ -28,7 +28,7 @@
28
28
  "prepare": "husky"
29
29
  },
30
30
  "dependencies": {
31
- "@pawells/typescript-common": "^1.4.1",
31
+ "@pawells/typescript-common": "^2.0.0",
32
32
  "rxjs": "^7.8.2"
33
33
  },
34
34
  "devDependencies": {
@@ -45,7 +45,7 @@
45
45
  "eslint-plugin-unused-imports": "^4.0.0",
46
46
  "globals": "^17.4.0",
47
47
  "husky": "^9.1.7",
48
- "typescript": "^5.3.3",
48
+ "typescript": "^6.0.2",
49
49
  "vitest": "^4.0.18"
50
50
  },
51
51
  "keywords": [