@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 +1 -2
- package/build/async-generator-esn.d.ts +17 -6
- package/build/async-generator-esn.d.ts.map +1 -1
- package/build/async-observable.d.ts +85 -6
- package/build/async-observable.d.ts.map +1 -1
- package/build/async-observable.js +51 -3
- package/build/async-observable.js.map +1 -1
- package/build/extract-event-payload.d.ts +24 -2
- package/build/extract-event-payload.d.ts.map +1 -1
- package/build/filter-criteria.d.ts +24 -2
- package/build/filter-criteria.d.ts.map +1 -1
- package/build/handler.d.ts +14 -13
- package/build/handler.d.ts.map +1 -1
- package/build/handler.js +11 -11
- package/build/handler.js.map +1 -1
- package/build/index.d.ts +1 -1
- package/build/index.d.ts.map +1 -1
- package/build/nestjs-pubsub.d.ts +40 -12
- package/build/nestjs-pubsub.d.ts.map +1 -1
- package/build/nestjs-pubsub.js +2 -2
- package/build/nestjs-pubsub.js.map +1 -1
- package/build/types.d.ts +41 -15
- package/build/types.d.ts.map +1 -1
- package/package.json +3 -3
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/
|
|
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
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
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
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
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
|
|
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
|
|
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
|
-
*
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
*
|
|
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
|
|
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":"AACA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAgB,MAAM,MAAM,CAAC;AAGzD
|
|
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
|
-
*
|
|
4
|
-
*
|
|
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
|
|
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
|
|
3
|
-
*
|
|
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
|
|
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"}
|
package/build/handler.d.ts
CHANGED
|
@@ -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
|
|
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>):
|
|
193
|
+
Subscribe(onEvent: TEventFunction<TEvent>): SubscriptionHandle;
|
|
193
194
|
/**
|
|
194
|
-
* Unsubscribes from events using the subscription
|
|
195
|
-
* Safely handles non-existent subscription
|
|
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
|
|
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
|
|
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:
|
|
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
|
|
244
|
-
* The returned array is a snapshot of active
|
|
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
|
|
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():
|
|
258
|
+
GetActiveSubscriptionIds(): SubscriptionHandle[];
|
|
258
259
|
}
|
|
259
260
|
//# sourceMappingURL=handler.d.ts.map
|
package/build/handler.d.ts.map
CHANGED
|
@@ -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,
|
|
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
|
|
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
|
|
294
|
-
* Safely handles non-existent subscription
|
|
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
|
|
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
|
|
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
|
|
362
|
-
* The returned array is a snapshot of active
|
|
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
|
|
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
|
package/build/handler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAgB,MAAM,MAAM,CAAC;
|
|
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';
|
package/build/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/build/nestjs-pubsub.d.ts
CHANGED
|
@@ -1,10 +1,38 @@
|
|
|
1
|
+
import type { SubscriptionHandle } from './types.js';
|
|
1
2
|
/**
|
|
2
3
|
* PubSub engine interface compatible with NestJS GraphQL subscriptions.
|
|
3
|
-
*
|
|
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
|
|
7
|
-
*
|
|
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
|
|
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<
|
|
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
|
|
26
|
-
* @param subId - The subscription
|
|
53
|
+
* Unsubscribes from a trigger channel using the subscription handle.
|
|
54
|
+
* @param subId - The subscription handle returned from subscribe()
|
|
27
55
|
*/
|
|
28
|
-
unsubscribe(subId:
|
|
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
|
|
136
|
+
* @returns Unique subscription handle for later unsubscription
|
|
109
137
|
*/
|
|
110
|
-
subscribe(triggerName: string, onMessage: (payload: any) => void, _options?: Record<string, unknown>): Promise<
|
|
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
|
|
142
|
+
* @param subId - The subscription handle returned from subscribe()
|
|
115
143
|
*/
|
|
116
|
-
unsubscribe(subId:
|
|
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":"
|
|
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"}
|
package/build/nestjs-pubsub.js
CHANGED
|
@@ -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
|
|
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
|
|
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":"
|
|
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
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* @
|
|
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
|
|
19
|
+
export type SubscriptionHandle = number & {
|
|
20
|
+
readonly __brand: 'SubscriptionHandle';
|
|
21
|
+
};
|
|
8
22
|
/**
|
|
9
|
-
* Event
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
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
|
|
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
|
package/build/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA
|
|
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": "
|
|
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": "^
|
|
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": "^
|
|
48
|
+
"typescript": "^6.0.2",
|
|
49
49
|
"vitest": "^4.0.18"
|
|
50
50
|
},
|
|
51
51
|
"keywords": [
|