@okikio/observables 1.0.2
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/LICENSE +21 -0
- package/README.md +578 -0
- package/esm/_dnt.polyfills.d.ts +20 -0
- package/esm/_dnt.polyfills.d.ts.map +1 -0
- package/esm/_dnt.polyfills.js +12 -0
- package/esm/_spec.d.ts +260 -0
- package/esm/_spec.d.ts.map +1 -0
- package/esm/_spec.js +1 -0
- package/esm/_types.d.ts +141 -0
- package/esm/_types.d.ts.map +1 -0
- package/esm/_types.js +20 -0
- package/esm/error.d.ts +331 -0
- package/esm/error.d.ts.map +1 -0
- package/esm/error.js +408 -0
- package/esm/events.d.ts +320 -0
- package/esm/events.d.ts.map +1 -0
- package/esm/events.js +451 -0
- package/esm/helpers/_types.d.ts +188 -0
- package/esm/helpers/_types.d.ts.map +1 -0
- package/esm/helpers/_types.js +1 -0
- package/esm/helpers/mod.d.ts +90 -0
- package/esm/helpers/mod.d.ts.map +1 -0
- package/esm/helpers/mod.js +90 -0
- package/esm/helpers/operations/batch.d.ts +109 -0
- package/esm/helpers/operations/batch.d.ts.map +1 -0
- package/esm/helpers/operations/batch.js +140 -0
- package/esm/helpers/operations/combination.d.ts +162 -0
- package/esm/helpers/operations/combination.d.ts.map +1 -0
- package/esm/helpers/operations/combination.js +350 -0
- package/esm/helpers/operations/conditional.d.ts +211 -0
- package/esm/helpers/operations/conditional.d.ts.map +1 -0
- package/esm/helpers/operations/conditional.js +280 -0
- package/esm/helpers/operations/core.d.ts +198 -0
- package/esm/helpers/operations/core.d.ts.map +1 -0
- package/esm/helpers/operations/core.js +264 -0
- package/esm/helpers/operations/errors.d.ts +277 -0
- package/esm/helpers/operations/errors.d.ts.map +1 -0
- package/esm/helpers/operations/errors.js +378 -0
- package/esm/helpers/operations/mod.d.ts +26 -0
- package/esm/helpers/operations/mod.d.ts.map +1 -0
- package/esm/helpers/operations/mod.js +25 -0
- package/esm/helpers/operations/timing.d.ts +206 -0
- package/esm/helpers/operations/timing.d.ts.map +1 -0
- package/esm/helpers/operations/timing.js +457 -0
- package/esm/helpers/operators.d.ts +520 -0
- package/esm/helpers/operators.d.ts.map +1 -0
- package/esm/helpers/operators.js +563 -0
- package/esm/helpers/pipe.d.ts +118 -0
- package/esm/helpers/pipe.d.ts.map +1 -0
- package/esm/helpers/pipe.js +129 -0
- package/esm/helpers/utils.d.ts +142 -0
- package/esm/helpers/utils.d.ts.map +1 -0
- package/esm/helpers/utils.js +193 -0
- package/esm/mod.d.ts +863 -0
- package/esm/mod.d.ts.map +1 -0
- package/esm/mod.js +861 -0
- package/esm/observable.d.ts +1610 -0
- package/esm/observable.d.ts.map +1 -0
- package/esm/observable.js +1970 -0
- package/esm/package.json +3 -0
- package/esm/queue.d.ts +201 -0
- package/esm/queue.d.ts.map +1 -0
- package/esm/queue.js +273 -0
- package/esm/symbol.d.ts +60 -0
- package/esm/symbol.d.ts.map +1 -0
- package/esm/symbol.js +132 -0
- package/package.json +96 -0
- package/script/_dnt.polyfills.d.ts +20 -0
- package/script/_dnt.polyfills.d.ts.map +1 -0
- package/script/_dnt.polyfills.js +13 -0
- package/script/_spec.d.ts +260 -0
- package/script/_spec.d.ts.map +1 -0
- package/script/_spec.js +2 -0
- package/script/_types.d.ts +141 -0
- package/script/_types.d.ts.map +1 -0
- package/script/_types.js +22 -0
- package/script/error.d.ts +331 -0
- package/script/error.d.ts.map +1 -0
- package/script/error.js +414 -0
- package/script/events.d.ts +320 -0
- package/script/events.d.ts.map +1 -0
- package/script/events.js +458 -0
- package/script/helpers/_types.d.ts +188 -0
- package/script/helpers/_types.d.ts.map +1 -0
- package/script/helpers/_types.js +2 -0
- package/script/helpers/mod.d.ts +90 -0
- package/script/helpers/mod.d.ts.map +1 -0
- package/script/helpers/mod.js +106 -0
- package/script/helpers/operations/batch.d.ts +109 -0
- package/script/helpers/operations/batch.d.ts.map +1 -0
- package/script/helpers/operations/batch.js +144 -0
- package/script/helpers/operations/combination.d.ts +162 -0
- package/script/helpers/operations/combination.d.ts.map +1 -0
- package/script/helpers/operations/combination.js +355 -0
- package/script/helpers/operations/conditional.d.ts +211 -0
- package/script/helpers/operations/conditional.d.ts.map +1 -0
- package/script/helpers/operations/conditional.js +286 -0
- package/script/helpers/operations/core.d.ts +198 -0
- package/script/helpers/operations/core.d.ts.map +1 -0
- package/script/helpers/operations/core.js +272 -0
- package/script/helpers/operations/errors.d.ts +277 -0
- package/script/helpers/operations/errors.d.ts.map +1 -0
- package/script/helpers/operations/errors.js +387 -0
- package/script/helpers/operations/mod.d.ts +26 -0
- package/script/helpers/operations/mod.d.ts.map +1 -0
- package/script/helpers/operations/mod.js +41 -0
- package/script/helpers/operations/timing.d.ts +206 -0
- package/script/helpers/operations/timing.d.ts.map +1 -0
- package/script/helpers/operations/timing.js +464 -0
- package/script/helpers/operators.d.ts +520 -0
- package/script/helpers/operators.d.ts.map +1 -0
- package/script/helpers/operators.js +570 -0
- package/script/helpers/pipe.d.ts +118 -0
- package/script/helpers/pipe.d.ts.map +1 -0
- package/script/helpers/pipe.js +132 -0
- package/script/helpers/utils.d.ts +142 -0
- package/script/helpers/utils.d.ts.map +1 -0
- package/script/helpers/utils.js +200 -0
- package/script/mod.d.ts +863 -0
- package/script/mod.d.ts.map +1 -0
- package/script/mod.js +877 -0
- package/script/observable.d.ts +1610 -0
- package/script/observable.d.ts.map +1 -0
- package/script/observable.js +1984 -0
- package/script/package.json +3 -0
- package/script/queue.d.ts +201 -0
- package/script/queue.d.ts.map +1 -0
- package/script/queue.js +286 -0
- package/script/symbol.d.ts +60 -0
- package/script/symbol.d.ts.map +1 -0
- package/script/symbol.js +135 -0
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multicast event primitives built on top of the Observable runtime.
|
|
3
|
+
*
|
|
4
|
+
* This entrypoint is for the hot side of the library: shared event streams that
|
|
5
|
+
* multiple consumers can listen to at the same time. It exports `EventBus` for
|
|
6
|
+
* one-to-many pub/sub, `createEventDispatcher` for named and type-safe events,
|
|
7
|
+
* and helpers such as `withReplay` and `waitForEvent` for common coordination
|
|
8
|
+
* patterns.
|
|
9
|
+
*
|
|
10
|
+
* Use `Observable` when each subscription should start fresh work. Use this
|
|
11
|
+
* module when one emission should fan out to many listeners, such as UI events,
|
|
12
|
+
* app-wide notifications, or workflow status updates.
|
|
13
|
+
*
|
|
14
|
+
* @module
|
|
15
|
+
*/
|
|
16
|
+
import "./_dnt.polyfills.js";
|
|
17
|
+
import type { Subscription } from "./_types.js";
|
|
18
|
+
import { Observable } from "./observable.js";
|
|
19
|
+
import { Symbol } from "./symbol.js";
|
|
20
|
+
/**
|
|
21
|
+
* A multicast event bus that extends {@link Observable<T>}, allowing
|
|
22
|
+
* emission of values to multiple subscribers and supporting both
|
|
23
|
+
* Observer-style and async-iterator consumption.
|
|
24
|
+
*
|
|
25
|
+
* @typeParam T - The type of values emitted by this bus.
|
|
26
|
+
*
|
|
27
|
+
* - Calling {@link emit} delivers the value to all active subscribers.
|
|
28
|
+
* - Calling {@link close} completes all subscribers and prevents further emissions.
|
|
29
|
+
* - Implements both {@link Symbol.dispose} and {@link Symbol.asyncDispose}
|
|
30
|
+
* for cleanup in synchronous and asynchronous contexts.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```ts
|
|
34
|
+
* import { EventBus } from './EventBus.ts';
|
|
35
|
+
*
|
|
36
|
+
* // Create a bus for string messages
|
|
37
|
+
* const bus = new EventBus<string>();
|
|
38
|
+
*
|
|
39
|
+
* // Subscribe using Observer
|
|
40
|
+
* bus.events.subscribe({
|
|
41
|
+
* next(msg) { console.log('Received:', msg); },
|
|
42
|
+
* complete() { console.log('Bus closed'); }
|
|
43
|
+
* });
|
|
44
|
+
*
|
|
45
|
+
* // Emit values
|
|
46
|
+
* bus.emit('hello');
|
|
47
|
+
* bus.emit('world');
|
|
48
|
+
*
|
|
49
|
+
* // Close the bus
|
|
50
|
+
* bus.close();
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export declare class EventBus<T> extends Observable<T> {
|
|
54
|
+
#private;
|
|
55
|
+
/**
|
|
56
|
+
* Synchronous disposal method (for `using` syntax).
|
|
57
|
+
*
|
|
58
|
+
* Alias for {@link close}.
|
|
59
|
+
*/
|
|
60
|
+
[Symbol.dispose]: () => void;
|
|
61
|
+
[Symbol.asyncDispose]: () => Promise<void>;
|
|
62
|
+
/**
|
|
63
|
+
* Construct a new EventBus instance.
|
|
64
|
+
*
|
|
65
|
+
* The base {@link Observable} constructor is invoked with the subscriber
|
|
66
|
+
* registration logic, adding and removing subscribers to the internal set.
|
|
67
|
+
*/
|
|
68
|
+
constructor();
|
|
69
|
+
/**
|
|
70
|
+
* Exposes the bus itself as an {@link Observable<T>} for subscription.
|
|
71
|
+
*
|
|
72
|
+
* @returns The current instance as an Observable of T.
|
|
73
|
+
*/
|
|
74
|
+
get events(): Observable<T>;
|
|
75
|
+
/**
|
|
76
|
+
* Emit a value to all active subscribers.
|
|
77
|
+
*
|
|
78
|
+
* @param value - The value to deliver.
|
|
79
|
+
*/
|
|
80
|
+
emit(value: T): void;
|
|
81
|
+
/**
|
|
82
|
+
* Close the bus, completing all subscribers and preventing further emits.
|
|
83
|
+
*/
|
|
84
|
+
close(): void;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* A mapping from event names (keys) to their payload types (values).
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```ts
|
|
91
|
+
* interface MyEvents {
|
|
92
|
+
* login: { userId: string };
|
|
93
|
+
* logout: void;
|
|
94
|
+
* }
|
|
95
|
+
* ```
|
|
96
|
+
*/
|
|
97
|
+
export type EventMap = object;
|
|
98
|
+
/**
|
|
99
|
+
* The return type of {@link createEventDispatcher}.
|
|
100
|
+
* Provides a strongly-typed event bus interface.
|
|
101
|
+
*
|
|
102
|
+
* @typeParam E - The event map type, mapping event names to payloads.
|
|
103
|
+
*/
|
|
104
|
+
export interface EventDispatcher<E extends EventMap> {
|
|
105
|
+
/**
|
|
106
|
+
* Emit an event with the given name and payload.
|
|
107
|
+
* @param name - The event name.
|
|
108
|
+
* @param payload - The payload matching the event name.
|
|
109
|
+
*/
|
|
110
|
+
emit<Name extends keyof E>(name: Name, payload: E[Name]): void;
|
|
111
|
+
/**
|
|
112
|
+
* Subscribe to a specific event by name.
|
|
113
|
+
* Only events with a matching `type` will invoke the handler.
|
|
114
|
+
* @param name - The event name to listen for.
|
|
115
|
+
* @param handler - The callback invoked with the event payload.
|
|
116
|
+
* @returns A subscription object with `unsubscribe()`.
|
|
117
|
+
*/
|
|
118
|
+
on<Name extends keyof E>(name: Name, handler: (payload: E[Name]) => void): Subscription;
|
|
119
|
+
/**
|
|
120
|
+
* Observable stream of all emitted events, carrying `{ type, payload }` objects.
|
|
121
|
+
*/
|
|
122
|
+
events: EventBus<{
|
|
123
|
+
type: keyof E;
|
|
124
|
+
payload: E[keyof E];
|
|
125
|
+
}>;
|
|
126
|
+
/**
|
|
127
|
+
* Close the bus, completing all subscribers and preventing further emits.
|
|
128
|
+
*/
|
|
129
|
+
close(): void;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Creates a strongly-typed event bus based on {@link EventBus}, ensuring
|
|
133
|
+
* that both `emit` and `on` methods enforce matching event names and payload types.
|
|
134
|
+
*
|
|
135
|
+
* @typeParam E - The event map type, mapping event names to payloads.
|
|
136
|
+
*
|
|
137
|
+
* @returns An object with the following methods:
|
|
138
|
+
* - `emit(name, payload)`: Emit an event.
|
|
139
|
+
* - `on(name, handler)`: Subscribe to a specific event.
|
|
140
|
+
* - `events`: Observable stream of all events.
|
|
141
|
+
* - `close()`: Close the bus and complete all subscribers.
|
|
142
|
+
*
|
|
143
|
+
* @example
|
|
144
|
+
* ```ts
|
|
145
|
+
* interface MyEvents {
|
|
146
|
+
* message: { text: string };
|
|
147
|
+
* error: { code: number; message: string };
|
|
148
|
+
* }
|
|
149
|
+
*
|
|
150
|
+
* const bus = createTypedEventBus<MyEvents>();
|
|
151
|
+
*
|
|
152
|
+
* // Subscribe to `message` events
|
|
153
|
+
* bus.on('message', payload => {
|
|
154
|
+
* console.log('New message:', payload.text);
|
|
155
|
+
* });
|
|
156
|
+
*
|
|
157
|
+
* // Emit an event
|
|
158
|
+
* bus.emit('message', { text: 'Hello World' });
|
|
159
|
+
*
|
|
160
|
+
* // Close the bus when done
|
|
161
|
+
* bus.close();
|
|
162
|
+
* ```
|
|
163
|
+
*/
|
|
164
|
+
export declare function createEventDispatcher<E extends EventMap>(): EventDispatcher<E>;
|
|
165
|
+
/**
|
|
166
|
+
* Options for `waitForEvent`.
|
|
167
|
+
*/
|
|
168
|
+
export interface WaitForEventOptions {
|
|
169
|
+
/**
|
|
170
|
+
* An AbortSignal to cancel waiting for the event.
|
|
171
|
+
*/
|
|
172
|
+
signal?: AbortSignal;
|
|
173
|
+
/**
|
|
174
|
+
* If true, rejects if the underlying stream completes before the event fires.
|
|
175
|
+
* @defaultValue false
|
|
176
|
+
*/
|
|
177
|
+
throwOnClose?: boolean;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Waits for the next occurrence of a specific event on a typed event bus.
|
|
181
|
+
* Resolves with the event payload when the named event fires.
|
|
182
|
+
* Can be aborted or optionally reject if the bus closes first.
|
|
183
|
+
*
|
|
184
|
+
* @typeParam E - The event map type.
|
|
185
|
+
* @typeParam K - The specific event key to listen for.
|
|
186
|
+
*
|
|
187
|
+
* @param bus - An object with an `events` Observable emitting `{ type, payload }`.
|
|
188
|
+
* @param type - The event name to wait for.
|
|
189
|
+
* @param options - Optional signal to abort, and throwOnClose behavior.
|
|
190
|
+
* @returns A promise resolving to the payload of the event, or rejecting on error/abort/close.
|
|
191
|
+
*
|
|
192
|
+
* @example
|
|
193
|
+
* ```ts
|
|
194
|
+
* interface MyEvents {
|
|
195
|
+
* data: { value: number };
|
|
196
|
+
* done: void;
|
|
197
|
+
* }
|
|
198
|
+
*
|
|
199
|
+
* const bus = createTypedEventBus<MyEvents>();
|
|
200
|
+
*
|
|
201
|
+
* // somewhere else...
|
|
202
|
+
* waitForEvent(bus, 'data').then(payload => {
|
|
203
|
+
* console.log('Data arrived:', payload.value);
|
|
204
|
+
* });
|
|
205
|
+
*
|
|
206
|
+
* // later
|
|
207
|
+
* bus.emit('data', { value: 42 });
|
|
208
|
+
* ```
|
|
209
|
+
*/
|
|
210
|
+
export declare function waitForEvent<E extends EventMap, K extends keyof E>(bus: {
|
|
211
|
+
events: Observable<{
|
|
212
|
+
type: keyof E;
|
|
213
|
+
payload: E[keyof E];
|
|
214
|
+
}>;
|
|
215
|
+
}, type: K, { signal, throwOnClose }?: WaitForEventOptions): Promise<E[K] | undefined>;
|
|
216
|
+
/**
|
|
217
|
+
* Controls when the replay buffer connects to the source Observable.
|
|
218
|
+
*
|
|
219
|
+
* - `'eager'`: Connects immediately and buffers values even with zero subscribers.
|
|
220
|
+
* Like a security camera that's always recording.
|
|
221
|
+
* - `'lazy'`: Connects only when the first subscriber arrives, disconnects when
|
|
222
|
+
* the last one leaves. Like a motion-activated camera.
|
|
223
|
+
*
|
|
224
|
+
* Choose 'eager' for system-critical events you never want to miss.
|
|
225
|
+
* Choose 'lazy' for expensive operations that shouldn't run without consumers.
|
|
226
|
+
*/
|
|
227
|
+
export type ReplayMode = "eager" | "lazy";
|
|
228
|
+
/**
|
|
229
|
+
* Configuration options for replay behavior.
|
|
230
|
+
*/
|
|
231
|
+
export interface ReplayOptions {
|
|
232
|
+
/**
|
|
233
|
+
* Maximum number of values to buffer.
|
|
234
|
+
* When the buffer is full, the oldest value is discarded (FIFO).
|
|
235
|
+
*
|
|
236
|
+
* @default Infinity (unlimited buffer, use with caution)
|
|
237
|
+
*/
|
|
238
|
+
count?: number;
|
|
239
|
+
/**
|
|
240
|
+
* Determines when to connect to the source Observable.
|
|
241
|
+
*
|
|
242
|
+
* @default 'lazy' (resource-efficient, connects on-demand)
|
|
243
|
+
*/
|
|
244
|
+
mode?: ReplayMode;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Adds replay capability to an Observable, multicasting values to multiple subscribers
|
|
248
|
+
* while maintaining a buffer of recent emissions.
|
|
249
|
+
*
|
|
250
|
+
* Without replay, each new subscriber triggers a fresh execution of the source Observable:
|
|
251
|
+
* ```ts
|
|
252
|
+
* const apiCall = new Observable(subscriber => {
|
|
253
|
+
* console.log('Making expensive API call...');
|
|
254
|
+
* fetch('/api/data').then(response => subscriber.next(response));
|
|
255
|
+
* });
|
|
256
|
+
*
|
|
257
|
+
* apiCall.subscribe(data1 => {}); // Triggers API call #1
|
|
258
|
+
* apiCall.subscribe(data2 => {}); // Triggers API call #2 (duplicate!)
|
|
259
|
+
* ```
|
|
260
|
+
*
|
|
261
|
+
* With replay, the source executes once and shares results:
|
|
262
|
+
* ```ts
|
|
263
|
+
* const sharedApi = withReplay(apiCall, { count: 1, mode: 'lazy' });
|
|
264
|
+
*
|
|
265
|
+
* sharedApi.subscribe(data1 => {}); // Triggers API call
|
|
266
|
+
* sharedApi.subscribe(data2 => {}); // Gets cached result, no new call!
|
|
267
|
+
* ```
|
|
268
|
+
*
|
|
269
|
+
* ## Memory Considerations
|
|
270
|
+
*
|
|
271
|
+
* - Buffer size directly impacts memory usage: `count * sizeof(T)`
|
|
272
|
+
* - 'eager' mode holds references even with no subscribers (potential memory leak)
|
|
273
|
+
* - 'lazy' mode clears buffer when all subscribers disconnect (automatic cleanup)
|
|
274
|
+
* - Consider using finite counts for long-running streams to prevent unbounded growth
|
|
275
|
+
*
|
|
276
|
+
* > **Note**: Infinite buffers are by default capped at 1000 items to prevent memory issues.
|
|
277
|
+
* > The primary reason for this cap is because some runtimes such as Deno and Node.js
|
|
278
|
+
* > litereally crash when you try to allocate Ininity-sized arrays.
|
|
279
|
+
*
|
|
280
|
+
* ## Performance Characteristics
|
|
281
|
+
*
|
|
282
|
+
* - Enqueue/Dequeue: O(1) constant time
|
|
283
|
+
* - New subscriber replay: O(n) where n = buffer size
|
|
284
|
+
* - Memory overhead: One queue + subscriber set + source subscription
|
|
285
|
+
*
|
|
286
|
+
* ## Edge Cases & Gotchas
|
|
287
|
+
*
|
|
288
|
+
* 1. **Late subscribers in eager mode**: May receive very old values if the source
|
|
289
|
+
* emitted long ago and no cleanup occurred.
|
|
290
|
+
*
|
|
291
|
+
* 2. **Infinite buffers**: Without a count limit, buffers grow indefinitely.
|
|
292
|
+
* Always set a reasonable count for production use.
|
|
293
|
+
*
|
|
294
|
+
* 3. **Error handling**: Errors are multicast to all subscribers but don't clear
|
|
295
|
+
* the buffer. New subscribers still get the replay before the error.
|
|
296
|
+
*
|
|
297
|
+
* 4. **Completion**: The source completion is multicast, but the replay buffer
|
|
298
|
+
* remains accessible to new subscribers (they get replay + completion).
|
|
299
|
+
*
|
|
300
|
+
* @param source The source Observable to add replay behavior to
|
|
301
|
+
* @param options Configuration for replay behavior
|
|
302
|
+
* @returns A new Observable with replay capability
|
|
303
|
+
*
|
|
304
|
+
* @example
|
|
305
|
+
* ```ts
|
|
306
|
+
* // Lazy mode - only buffers when subscribers are present
|
|
307
|
+
* const shared = withReplay(expensive, {
|
|
308
|
+
* count: 5,
|
|
309
|
+
* mode: 'lazy' // Only run expensive when needed
|
|
310
|
+
* });
|
|
311
|
+
*
|
|
312
|
+
* // Eager mode - always buffering, like a flight recorder
|
|
313
|
+
* const eventLog = withReplay(systemEvents, {
|
|
314
|
+
* count: 100,
|
|
315
|
+
* mode: 'eager' // Capture events even if no one's listening
|
|
316
|
+
* });
|
|
317
|
+
* ```
|
|
318
|
+
*/
|
|
319
|
+
export declare function withReplay<T>(source: Observable<T>, { count, mode }?: ReplayOptions): Observable<T>;
|
|
320
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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"}
|