stelo 1.0.1
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 +184 -0
- package/README.md +853 -0
- package/dist/accessibility.d.ts +227 -0
- package/dist/accessibility.d.ts.map +1 -0
- package/dist/accessibility.js +602 -0
- package/dist/accessibility.js.map +1 -0
- package/dist/agent.d.ts +870 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +1107 -0
- package/dist/agent.js.map +1 -0
- package/dist/audio-stream.d.ts +114 -0
- package/dist/audio-stream.d.ts.map +1 -0
- package/dist/audio-stream.js +167 -0
- package/dist/audio-stream.js.map +1 -0
- package/dist/clipboard.d.ts +99 -0
- package/dist/clipboard.d.ts.map +1 -0
- package/dist/clipboard.js +352 -0
- package/dist/clipboard.js.map +1 -0
- package/dist/config.d.ts +183 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +477 -0
- package/dist/config.js.map +1 -0
- package/dist/context.d.ts +213 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +387 -0
- package/dist/context.js.map +1 -0
- package/dist/cortex.d.ts +548 -0
- package/dist/cortex.d.ts.map +1 -0
- package/dist/cortex.js +1479 -0
- package/dist/cortex.js.map +1 -0
- package/dist/errors.d.ts +133 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +278 -0
- package/dist/errors.js.map +1 -0
- package/dist/events.d.ts +227 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +429 -0
- package/dist/events.js.map +1 -0
- package/dist/executor.d.ts +212 -0
- package/dist/executor.d.ts.map +1 -0
- package/dist/executor.js +545 -0
- package/dist/executor.js.map +1 -0
- package/dist/index.d.ts +69 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +167 -0
- package/dist/index.js.map +1 -0
- package/dist/integration.d.ts +159 -0
- package/dist/integration.d.ts.map +1 -0
- package/dist/integration.js +533 -0
- package/dist/integration.js.map +1 -0
- package/dist/keyboard.d.ts +276 -0
- package/dist/keyboard.d.ts.map +1 -0
- package/dist/keyboard.js +404 -0
- package/dist/keyboard.js.map +1 -0
- package/dist/logger.d.ts +198 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +516 -0
- package/dist/logger.js.map +1 -0
- package/dist/middleware.d.ts +183 -0
- package/dist/middleware.d.ts.map +1 -0
- package/dist/middleware.js +493 -0
- package/dist/middleware.js.map +1 -0
- package/dist/monitor.d.ts +136 -0
- package/dist/monitor.d.ts.map +1 -0
- package/dist/monitor.js +341 -0
- package/dist/monitor.js.map +1 -0
- package/dist/mouse.d.ts +290 -0
- package/dist/mouse.d.ts.map +1 -0
- package/dist/mouse.js +466 -0
- package/dist/mouse.js.map +1 -0
- package/dist/plugin.d.ts +157 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +409 -0
- package/dist/plugin.js.map +1 -0
- package/dist/process.d.ts +106 -0
- package/dist/process.d.ts.map +1 -0
- package/dist/process.js +326 -0
- package/dist/process.js.map +1 -0
- package/dist/recorder.d.ts +100 -0
- package/dist/recorder.d.ts.map +1 -0
- package/dist/recorder.js +258 -0
- package/dist/recorder.js.map +1 -0
- package/dist/safety.d.ts +59 -0
- package/dist/safety.d.ts.map +1 -0
- package/dist/safety.js +98 -0
- package/dist/safety.js.map +1 -0
- package/dist/scheduler.d.ts +152 -0
- package/dist/scheduler.d.ts.map +1 -0
- package/dist/scheduler.js +615 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/screen.d.ts +96 -0
- package/dist/screen.d.ts.map +1 -0
- package/dist/screen.js +154 -0
- package/dist/screen.js.map +1 -0
- package/dist/session.d.ts +209 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +479 -0
- package/dist/session.js.map +1 -0
- package/dist/stream.d.ts +168 -0
- package/dist/stream.d.ts.map +1 -0
- package/dist/stream.js +298 -0
- package/dist/stream.js.map +1 -0
- package/dist/telemetry.d.ts +223 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +433 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/types.d.ts +165 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/bezier.d.ts +51 -0
- package/dist/utils/bezier.d.ts.map +1 -0
- package/dist/utils/bezier.js +117 -0
- package/dist/utils/bezier.js.map +1 -0
- package/dist/utils/helpers.d.ts +90 -0
- package/dist/utils/helpers.d.ts.map +1 -0
- package/dist/utils/helpers.js +143 -0
- package/dist/utils/helpers.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +18 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/validation.d.ts +254 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +478 -0
- package/dist/validation.js.map +1 -0
- package/dist/vision.d.ts +719 -0
- package/dist/vision.d.ts.map +1 -0
- package/dist/vision.js +1197 -0
- package/dist/vision.js.map +1 -0
- package/dist/window.d.ts +80 -0
- package/dist/window.d.ts.map +1 -0
- package/dist/window.js +170 -0
- package/dist/window.js.map +1 -0
- package/dist/workflow.d.ts +224 -0
- package/dist/workflow.d.ts.map +1 -0
- package/dist/workflow.js +578 -0
- package/dist/workflow.js.map +1 -0
- package/index.d.ts +840 -0
- package/index.js +495 -0
- package/package.json +91 -0
package/dist/events.d.ts
ADDED
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
/** All known Stelo event categories */
|
|
2
|
+
export type EventCategory = 'mouse' | 'keyboard' | 'screen' | 'window' | 'stream' | 'audio' | 'vision' | 'agent' | 'safety' | 'executor' | 'middleware' | 'workflow' | 'clipboard' | 'process' | 'scheduler' | 'session' | 'plugin' | 'system' | 'accessibility' | 'integration' | 'monitor' | 'custom';
|
|
3
|
+
/** Base event shape — all events extend this */
|
|
4
|
+
export interface SteloEvent {
|
|
5
|
+
/** e.g. 'mouse.move', 'keyboard.type', 'workflow.transition' */
|
|
6
|
+
type: string;
|
|
7
|
+
/** ISO timestamp */
|
|
8
|
+
timestamp: string;
|
|
9
|
+
/** Event category */
|
|
10
|
+
category: EventCategory;
|
|
11
|
+
/** Arbitrary payload */
|
|
12
|
+
data?: Record<string, unknown>;
|
|
13
|
+
/** Source module that emitted the event */
|
|
14
|
+
source?: string;
|
|
15
|
+
/** Unique event ID */
|
|
16
|
+
id: string;
|
|
17
|
+
/** Whether the event can be cancelled by listeners */
|
|
18
|
+
cancelable?: boolean;
|
|
19
|
+
/** Set to true by a listener to cancel propagation */
|
|
20
|
+
cancelled?: boolean;
|
|
21
|
+
}
|
|
22
|
+
/** Mouse-specific events */
|
|
23
|
+
export interface MouseEvent extends SteloEvent {
|
|
24
|
+
category: 'mouse';
|
|
25
|
+
data: {
|
|
26
|
+
action: 'move' | 'click' | 'doubleClick' | 'tripleClick' | 'down' | 'up' | 'scroll' | 'drag';
|
|
27
|
+
x?: number;
|
|
28
|
+
y?: number;
|
|
29
|
+
button?: string;
|
|
30
|
+
[key: string]: unknown;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/** Keyboard-specific events */
|
|
34
|
+
export interface KeyboardEvent extends SteloEvent {
|
|
35
|
+
category: 'keyboard';
|
|
36
|
+
data: {
|
|
37
|
+
action: 'type' | 'press' | 'down' | 'up' | 'hotkey' | 'sequence';
|
|
38
|
+
key?: string;
|
|
39
|
+
text?: string;
|
|
40
|
+
[key: string]: unknown;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/** Workflow-specific events */
|
|
44
|
+
export interface WorkflowEvent extends SteloEvent {
|
|
45
|
+
category: 'workflow';
|
|
46
|
+
data: {
|
|
47
|
+
action: 'start' | 'transition' | 'complete' | 'error' | 'pause' | 'resume';
|
|
48
|
+
workflowId: string;
|
|
49
|
+
fromState?: string;
|
|
50
|
+
toState?: string;
|
|
51
|
+
[key: string]: unknown;
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/** Safety-specific events */
|
|
55
|
+
export interface SafetyEvent extends SteloEvent {
|
|
56
|
+
category: 'safety';
|
|
57
|
+
data: {
|
|
58
|
+
action: 'failsafe_triggered' | 'emergency_stop' | 'rate_limited' | 'boundary_violation' | 'reset';
|
|
59
|
+
[key: string]: unknown;
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/** Executor-specific events */
|
|
63
|
+
export interface ExecutorEvent extends SteloEvent {
|
|
64
|
+
category: 'executor';
|
|
65
|
+
data: {
|
|
66
|
+
action: 'enqueue' | 'dequeue' | 'execute' | 'complete' | 'cancel' | 'timeout' | 'error' | 'drain';
|
|
67
|
+
taskId?: string;
|
|
68
|
+
priority?: number;
|
|
69
|
+
[key: string]: unknown;
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
export type EventListener<T extends SteloEvent = SteloEvent> = (event: T) => void | Promise<void>;
|
|
73
|
+
export interface ListenerRegistration {
|
|
74
|
+
/** The event pattern this listener matches */
|
|
75
|
+
pattern: string;
|
|
76
|
+
/** Listener priority (higher = called first). Default: 0 */
|
|
77
|
+
priority: number;
|
|
78
|
+
/** Auto-remove after this many invocations (0 = unlimited) */
|
|
79
|
+
maxInvocations: number;
|
|
80
|
+
/** Current invocation count */
|
|
81
|
+
invocations: number;
|
|
82
|
+
/** The listener function */
|
|
83
|
+
handler: EventListener;
|
|
84
|
+
/** Unique ID for this registration */
|
|
85
|
+
id: string;
|
|
86
|
+
}
|
|
87
|
+
export interface EventFilter {
|
|
88
|
+
/** Only include events from these categories */
|
|
89
|
+
categories?: EventCategory[];
|
|
90
|
+
/** Only include events matching these patterns */
|
|
91
|
+
patterns?: string[];
|
|
92
|
+
/** Only include events from these sources */
|
|
93
|
+
sources?: string[];
|
|
94
|
+
/** Only include events after this timestamp */
|
|
95
|
+
after?: string;
|
|
96
|
+
/** Only include events before this timestamp */
|
|
97
|
+
before?: string;
|
|
98
|
+
}
|
|
99
|
+
export interface EventBusOptions {
|
|
100
|
+
/** Maximum events to keep in history (default: 1000) */
|
|
101
|
+
maxHistory?: number;
|
|
102
|
+
/** Enable event history tracking (default: true) */
|
|
103
|
+
trackHistory?: boolean;
|
|
104
|
+
/** Enable async listener execution (default: true) */
|
|
105
|
+
asyncListeners?: boolean;
|
|
106
|
+
/** Log events to console (default: false) */
|
|
107
|
+
debug?: boolean;
|
|
108
|
+
}
|
|
109
|
+
export declare const events: {
|
|
110
|
+
/**
|
|
111
|
+
* Configure the event bus.
|
|
112
|
+
*/
|
|
113
|
+
configure(options: EventBusOptions): void;
|
|
114
|
+
/** Get current configuration */
|
|
115
|
+
getConfig(): Readonly<Required<EventBusOptions>>;
|
|
116
|
+
/**
|
|
117
|
+
* Subscribe to events matching a pattern.
|
|
118
|
+
*
|
|
119
|
+
* @param pattern - Event pattern to match (e.g. 'mouse.*', 'keyboard.type', '*')
|
|
120
|
+
* @param handler - Listener function
|
|
121
|
+
* @param options - Optional priority and maxInvocations
|
|
122
|
+
* @returns Unsubscribe function
|
|
123
|
+
*
|
|
124
|
+
* @example
|
|
125
|
+
* ```ts
|
|
126
|
+
* // Listen to all mouse events
|
|
127
|
+
* const unsub = events.on('mouse.*', (e) => console.log(e));
|
|
128
|
+
*
|
|
129
|
+
* // Listen to specific event, high priority
|
|
130
|
+
* events.on('safety.emergency_stop', handler, { priority: 100 });
|
|
131
|
+
*
|
|
132
|
+
* // One-shot listener
|
|
133
|
+
* events.once('workflow.complete', handler);
|
|
134
|
+
* ```
|
|
135
|
+
*/
|
|
136
|
+
on(pattern: string, handler: EventListener, options?: {
|
|
137
|
+
priority?: number;
|
|
138
|
+
maxInvocations?: number;
|
|
139
|
+
}): () => void;
|
|
140
|
+
/**
|
|
141
|
+
* Subscribe to a single occurrence of an event.
|
|
142
|
+
*/
|
|
143
|
+
once(pattern: string, handler: EventListener, priority?: number): () => void;
|
|
144
|
+
/**
|
|
145
|
+
* Remove all listeners for a pattern (or all listeners if no pattern).
|
|
146
|
+
*/
|
|
147
|
+
off(pattern?: string): void;
|
|
148
|
+
/**
|
|
149
|
+
* Get count of registered listeners.
|
|
150
|
+
*/
|
|
151
|
+
listenerCount(pattern?: string): number;
|
|
152
|
+
/**
|
|
153
|
+
* Emit an event. All matching listeners will be invoked.
|
|
154
|
+
*
|
|
155
|
+
* @param type - Event type (e.g. 'mouse.move')
|
|
156
|
+
* @param category - Event category
|
|
157
|
+
* @param data - Event payload
|
|
158
|
+
* @param options - Additional event options
|
|
159
|
+
* @returns The emitted event object
|
|
160
|
+
*/
|
|
161
|
+
emit(type: string, category: EventCategory, data?: Record<string, unknown>, options?: {
|
|
162
|
+
source?: string;
|
|
163
|
+
cancelable?: boolean;
|
|
164
|
+
}): SteloEvent;
|
|
165
|
+
/**
|
|
166
|
+
* Emit and wait for all async listeners to complete.
|
|
167
|
+
*/
|
|
168
|
+
emitAsync(type: string, category: EventCategory, data?: Record<string, unknown>, options?: {
|
|
169
|
+
source?: string;
|
|
170
|
+
cancelable?: boolean;
|
|
171
|
+
}): Promise<SteloEvent>;
|
|
172
|
+
/**
|
|
173
|
+
* Get event history, optionally filtered.
|
|
174
|
+
*/
|
|
175
|
+
getHistory(filter?: EventFilter): SteloEvent[];
|
|
176
|
+
/** Get the last N events from history */
|
|
177
|
+
recent(count?: number): SteloEvent[];
|
|
178
|
+
/** Clear event history */
|
|
179
|
+
clearHistory(): void;
|
|
180
|
+
/** Get total events emitted since startup */
|
|
181
|
+
readonly totalEmitted: number;
|
|
182
|
+
/**
|
|
183
|
+
* Wait for a specific event. Returns a promise that resolves with the event.
|
|
184
|
+
*
|
|
185
|
+
* @example
|
|
186
|
+
* ```ts
|
|
187
|
+
* const event = await events.waitFor('workflow.complete', 30000);
|
|
188
|
+
* ```
|
|
189
|
+
*/
|
|
190
|
+
waitFor(pattern: string, timeoutMs?: number): Promise<SteloEvent>;
|
|
191
|
+
/**
|
|
192
|
+
* Create a channel — an async iterable that yields matching events.
|
|
193
|
+
*
|
|
194
|
+
* @example
|
|
195
|
+
* ```ts
|
|
196
|
+
* const channel = events.channel('mouse.*');
|
|
197
|
+
* for await (const event of channel) {
|
|
198
|
+
* console.log(event.type, event.data);
|
|
199
|
+
* if (shouldStop) channel.close();
|
|
200
|
+
* }
|
|
201
|
+
* ```
|
|
202
|
+
*/
|
|
203
|
+
channel(pattern: string): EventChannel;
|
|
204
|
+
/**
|
|
205
|
+
* Pipe events from one pattern to another type.
|
|
206
|
+
* Useful for event transformation/routing.
|
|
207
|
+
*/
|
|
208
|
+
pipe(sourcePattern: string, transform: (event: SteloEvent) => {
|
|
209
|
+
type: string;
|
|
210
|
+
category: EventCategory;
|
|
211
|
+
data?: Record<string, unknown>;
|
|
212
|
+
} | null): () => void;
|
|
213
|
+
/**
|
|
214
|
+
* Reset the entire event bus (clear listeners + history).
|
|
215
|
+
*/
|
|
216
|
+
reset(): void;
|
|
217
|
+
};
|
|
218
|
+
export declare class EventChannel implements AsyncIterable<SteloEvent> {
|
|
219
|
+
private _queue;
|
|
220
|
+
private _waiting;
|
|
221
|
+
private _closed;
|
|
222
|
+
private _unsub;
|
|
223
|
+
constructor(pattern: string);
|
|
224
|
+
close(): void;
|
|
225
|
+
[Symbol.asyncIterator](): AsyncIterator<SteloEvent>;
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../ts/events.ts"],"names":[],"mappings":"AASA,uCAAuC;AACvC,MAAM,MAAM,aAAa,GACrB,OAAO,GACP,UAAU,GACV,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,UAAU,GACV,YAAY,GACZ,UAAU,GACV,WAAW,GACX,SAAS,GACT,WAAW,GACX,SAAS,GACT,QAAQ,GACR,QAAQ,GACR,eAAe,GACf,aAAa,GACb,SAAS,GACT,QAAQ,CAAC;AAEb,gDAAgD;AAChD,MAAM,WAAW,UAAU;IACzB,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB;IACrB,QAAQ,EAAE,aAAa,CAAC;IACxB,wBAAwB;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,2CAA2C;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sBAAsB;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,sDAAsD;IACtD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,sDAAsD;IACtD,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,4BAA4B;AAC5B,MAAM,WAAW,UAAW,SAAQ,UAAU;IAC5C,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE;QACJ,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,aAAa,GAAG,aAAa,GAAG,MAAM,GAAG,IAAI,GAAG,QAAQ,GAAG,MAAM,CAAC;QAC7F,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;CACH;AAED,+BAA+B;AAC/B,MAAM,WAAW,aAAc,SAAQ,UAAU;IAC/C,QAAQ,EAAE,UAAU,CAAC;IACrB,IAAI,EAAE;QACJ,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,QAAQ,GAAG,UAAU,CAAC;QACjE,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;CACH;AAED,+BAA+B;AAC/B,MAAM,WAAW,aAAc,SAAQ,UAAU;IAC/C,QAAQ,EAAE,UAAU,CAAC;IACrB,IAAI,EAAE;QACJ,MAAM,EAAE,OAAO,GAAG,YAAY,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC;QAC3E,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;CACH;AAED,6BAA6B;AAC7B,MAAM,WAAW,WAAY,SAAQ,UAAU;IAC7C,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE;QACJ,MAAM,EAAE,oBAAoB,GAAG,gBAAgB,GAAG,cAAc,GAAG,oBAAoB,GAAG,OAAO,CAAC;QAClG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;CACH;AAED,+BAA+B;AAC/B,MAAM,WAAW,aAAc,SAAQ,UAAU;IAC/C,QAAQ,EAAE,UAAU,CAAC;IACrB,IAAI,EAAE;QACJ,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;QAClG,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;CACH;AAID,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAElG,MAAM,WAAW,oBAAoB;IACnC,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,cAAc,EAAE,MAAM,CAAC;IACvB,+BAA+B;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,4BAA4B;IAC5B,OAAO,EAAE,aAAa,CAAC;IACvB,sCAAsC;IACtC,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,WAAW;IAC1B,gDAAgD;IAChD,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;IAC7B,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sDAAsD;IACtD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AA8DD,eAAO,MAAM,MAAM;IAGjB;;OAEG;uBACgB,eAAe,GAAG,IAAI;IAQzC,gCAAgC;iBACnB,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAMhD;;;;;;;;;;;;;;;;;;;OAmBG;gBAEQ,MAAM,WACN,aAAa,YACZ;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,GACvD,MAAM,IAAI;IAyBb;;OAEG;kBACW,MAAM,WAAW,aAAa,aAAa,MAAM,GAAG,MAAM,IAAI;IAI5E;;OAEG;kBACW,MAAM,GAAG,IAAI;IAQ3B;;OAEG;4BACqB,MAAM,GAAG,MAAM;IAavC;;;;;;;;OAQG;eAEK,MAAM,YACF,aAAa,SAChB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YACpB;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,GAClD,UAAU;IA6Eb;;OAEG;oBAEK,MAAM,YACF,aAAa,SAChB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YACpB;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,GAClD,OAAO,CAAC,UAAU,CAAC;IAwDtB;;OAEG;wBACiB,WAAW,GAAG,UAAU,EAAE;IAwB9C,yCAAyC;mBAC3B,MAAM,GAAQ,UAAU,EAAE;IAIxC,0BAA0B;oBACV,IAAI;IAIpB,6CAA6C;2BACzB,MAAM;IAM1B;;;;;;;OAOG;qBACc,MAAM,cAAa,MAAM,GAAW,OAAO,CAAC,UAAU,CAAC;IAcxE;;;;;;;;;;;OAWG;qBACc,MAAM,GAAG,YAAY;IAItC;;;OAGG;wBAEc,MAAM,aACV,CAAC,KAAK,EAAE,UAAU,KAAK;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,aAAa,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,IAAI,GACjH,MAAM,IAAI;IASb;;OAEG;aACM,IAAI;CAWd,CAAC;AAIF,qBAAa,YAAa,YAAW,aAAa,CAAC,UAAU,CAAC;IAC5D,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,QAAQ,CAA8D;IAC9E,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAA6B;gBAE/B,OAAO,EAAE,MAAM;IAa3B,KAAK,IAAI,IAAI;IASb,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,UAAU,CAAC;CAmBpD"}
|
package/dist/events.js
ADDED
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================================
|
|
3
|
+
// Stelo — Typed Event Bus
|
|
4
|
+
// ============================================================================
|
|
5
|
+
// Cross-module event coordination with typed events, wildcards,
|
|
6
|
+
// event history, filtering, and priority-ordered listeners.
|
|
7
|
+
// ============================================================================
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.EventChannel = exports.events = void 0;
|
|
10
|
+
// ── Internal State ───────────────────────────────────────────────────────────
|
|
11
|
+
let _eventId = 0;
|
|
12
|
+
const _listeners = new Map();
|
|
13
|
+
const _history = [];
|
|
14
|
+
let _options = {
|
|
15
|
+
maxHistory: 1000,
|
|
16
|
+
trackHistory: true,
|
|
17
|
+
asyncListeners: true,
|
|
18
|
+
debug: false,
|
|
19
|
+
};
|
|
20
|
+
// ── Event ID Generation ──────────────────────────────────────────────────────
|
|
21
|
+
function nextEventId() {
|
|
22
|
+
return `evt_${Date.now()}_${++_eventId}`;
|
|
23
|
+
}
|
|
24
|
+
function nextListenerId() {
|
|
25
|
+
return `lst_${Date.now()}_${++_eventId}`;
|
|
26
|
+
}
|
|
27
|
+
// ── Pattern Matching ─────────────────────────────────────────────────────────
|
|
28
|
+
/**
|
|
29
|
+
* Match event type against a pattern.
|
|
30
|
+
* Supports:
|
|
31
|
+
* - Exact: 'mouse.move'
|
|
32
|
+
* - Wildcard suffix: 'mouse.*'
|
|
33
|
+
* - Category prefix: 'mouse'
|
|
34
|
+
* - Global wildcard: '*'
|
|
35
|
+
*/
|
|
36
|
+
function matchesPattern(eventType, pattern) {
|
|
37
|
+
if (pattern === '*')
|
|
38
|
+
return true;
|
|
39
|
+
if (pattern === eventType)
|
|
40
|
+
return true;
|
|
41
|
+
// 'mouse.*' matches 'mouse.move', 'mouse.click', etc.
|
|
42
|
+
if (pattern.endsWith('.*')) {
|
|
43
|
+
const prefix = pattern.slice(0, -2);
|
|
44
|
+
return eventType.startsWith(prefix + '.');
|
|
45
|
+
}
|
|
46
|
+
// 'mouse' matches 'mouse.move' (category prefix)
|
|
47
|
+
if (!pattern.includes('.') && !pattern.includes('*')) {
|
|
48
|
+
return eventType.startsWith(pattern + '.');
|
|
49
|
+
}
|
|
50
|
+
// Glob-like: 'mouse.*.done' → regex
|
|
51
|
+
if (pattern.includes('*')) {
|
|
52
|
+
const regex = new RegExp('^' + pattern.replace(/\./g, '\\.').replace(/\*/g, '[^.]+') + '$');
|
|
53
|
+
return regex.test(eventType);
|
|
54
|
+
}
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
// ── Core Event Bus ───────────────────────────────────────────────────────────
|
|
58
|
+
exports.events = {
|
|
59
|
+
// ── Configuration ────────────────────────────────────────────────────────
|
|
60
|
+
/**
|
|
61
|
+
* Configure the event bus.
|
|
62
|
+
*/
|
|
63
|
+
configure(options) {
|
|
64
|
+
_options = { ..._options, ...options };
|
|
65
|
+
// Trim history if maxHistory was reduced
|
|
66
|
+
while (_history.length > _options.maxHistory) {
|
|
67
|
+
_history.shift();
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
/** Get current configuration */
|
|
71
|
+
getConfig() {
|
|
72
|
+
return { ..._options };
|
|
73
|
+
},
|
|
74
|
+
// ── Subscribing ──────────────────────────────────────────────────────────
|
|
75
|
+
/**
|
|
76
|
+
* Subscribe to events matching a pattern.
|
|
77
|
+
*
|
|
78
|
+
* @param pattern - Event pattern to match (e.g. 'mouse.*', 'keyboard.type', '*')
|
|
79
|
+
* @param handler - Listener function
|
|
80
|
+
* @param options - Optional priority and maxInvocations
|
|
81
|
+
* @returns Unsubscribe function
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```ts
|
|
85
|
+
* // Listen to all mouse events
|
|
86
|
+
* const unsub = events.on('mouse.*', (e) => console.log(e));
|
|
87
|
+
*
|
|
88
|
+
* // Listen to specific event, high priority
|
|
89
|
+
* events.on('safety.emergency_stop', handler, { priority: 100 });
|
|
90
|
+
*
|
|
91
|
+
* // One-shot listener
|
|
92
|
+
* events.once('workflow.complete', handler);
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
on(pattern, handler, options) {
|
|
96
|
+
const reg = {
|
|
97
|
+
pattern,
|
|
98
|
+
priority: options?.priority ?? 0,
|
|
99
|
+
maxInvocations: options?.maxInvocations ?? 0,
|
|
100
|
+
invocations: 0,
|
|
101
|
+
handler,
|
|
102
|
+
id: nextListenerId(),
|
|
103
|
+
};
|
|
104
|
+
if (!_listeners.has(pattern)) {
|
|
105
|
+
_listeners.set(pattern, []);
|
|
106
|
+
}
|
|
107
|
+
const list = _listeners.get(pattern);
|
|
108
|
+
list.push(reg);
|
|
109
|
+
// Sort by priority descending (higher priority first)
|
|
110
|
+
list.sort((a, b) => b.priority - a.priority);
|
|
111
|
+
return () => {
|
|
112
|
+
const idx = list.indexOf(reg);
|
|
113
|
+
if (idx !== -1)
|
|
114
|
+
list.splice(idx, 1);
|
|
115
|
+
if (list.length === 0)
|
|
116
|
+
_listeners.delete(pattern);
|
|
117
|
+
};
|
|
118
|
+
},
|
|
119
|
+
/**
|
|
120
|
+
* Subscribe to a single occurrence of an event.
|
|
121
|
+
*/
|
|
122
|
+
once(pattern, handler, priority) {
|
|
123
|
+
return exports.events.on(pattern, handler, { priority, maxInvocations: 1 });
|
|
124
|
+
},
|
|
125
|
+
/**
|
|
126
|
+
* Remove all listeners for a pattern (or all listeners if no pattern).
|
|
127
|
+
*/
|
|
128
|
+
off(pattern) {
|
|
129
|
+
if (pattern) {
|
|
130
|
+
_listeners.delete(pattern);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
_listeners.clear();
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
/**
|
|
137
|
+
* Get count of registered listeners.
|
|
138
|
+
*/
|
|
139
|
+
listenerCount(pattern) {
|
|
140
|
+
if (pattern) {
|
|
141
|
+
return _listeners.get(pattern)?.length ?? 0;
|
|
142
|
+
}
|
|
143
|
+
let total = 0;
|
|
144
|
+
for (const list of _listeners.values()) {
|
|
145
|
+
total += list.length;
|
|
146
|
+
}
|
|
147
|
+
return total;
|
|
148
|
+
},
|
|
149
|
+
// ── Emitting ─────────────────────────────────────────────────────────────
|
|
150
|
+
/**
|
|
151
|
+
* Emit an event. All matching listeners will be invoked.
|
|
152
|
+
*
|
|
153
|
+
* @param type - Event type (e.g. 'mouse.move')
|
|
154
|
+
* @param category - Event category
|
|
155
|
+
* @param data - Event payload
|
|
156
|
+
* @param options - Additional event options
|
|
157
|
+
* @returns The emitted event object
|
|
158
|
+
*/
|
|
159
|
+
emit(type, category, data, options) {
|
|
160
|
+
const event = {
|
|
161
|
+
type,
|
|
162
|
+
timestamp: new Date().toISOString(),
|
|
163
|
+
category,
|
|
164
|
+
data,
|
|
165
|
+
source: options?.source,
|
|
166
|
+
id: nextEventId(),
|
|
167
|
+
cancelable: options?.cancelable ?? false,
|
|
168
|
+
cancelled: false,
|
|
169
|
+
};
|
|
170
|
+
if (_options.debug) {
|
|
171
|
+
console.log(`[Stelo Event] ${type}`, data ?? '');
|
|
172
|
+
}
|
|
173
|
+
// Store in history
|
|
174
|
+
if (_options.trackHistory) {
|
|
175
|
+
_history.push(event);
|
|
176
|
+
while (_history.length > _options.maxHistory) {
|
|
177
|
+
_history.shift();
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
// Collect all matching listeners across all patterns
|
|
181
|
+
const matchedListeners = [];
|
|
182
|
+
for (const [pattern, list] of _listeners.entries()) {
|
|
183
|
+
for (const reg of list) {
|
|
184
|
+
if (matchesPattern(type, pattern)) {
|
|
185
|
+
matchedListeners.push(reg);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
// Sort all matched listeners by priority
|
|
190
|
+
matchedListeners.sort((a, b) => b.priority - a.priority);
|
|
191
|
+
// Invoke listeners
|
|
192
|
+
const toRemove = [];
|
|
193
|
+
for (const reg of matchedListeners) {
|
|
194
|
+
if (event.cancelable && event.cancelled)
|
|
195
|
+
break;
|
|
196
|
+
try {
|
|
197
|
+
const result = reg.handler(event);
|
|
198
|
+
// If async and we support it, let it run
|
|
199
|
+
if (_options.asyncListeners && result instanceof Promise) {
|
|
200
|
+
result.catch((err) => {
|
|
201
|
+
if (_options.debug) {
|
|
202
|
+
console.error(`[Stelo Event] Listener error for ${type}:`, err);
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
catch (err) {
|
|
208
|
+
if (_options.debug) {
|
|
209
|
+
console.error(`[Stelo Event] Listener error for ${type}:`, err);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
reg.invocations++;
|
|
213
|
+
if (reg.maxInvocations > 0 && reg.invocations >= reg.maxInvocations) {
|
|
214
|
+
toRemove.push(reg);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
// Clean up expired listeners
|
|
218
|
+
for (const reg of toRemove) {
|
|
219
|
+
const list = _listeners.get(reg.pattern);
|
|
220
|
+
if (list) {
|
|
221
|
+
const idx = list.indexOf(reg);
|
|
222
|
+
if (idx !== -1)
|
|
223
|
+
list.splice(idx, 1);
|
|
224
|
+
if (list.length === 0)
|
|
225
|
+
_listeners.delete(reg.pattern);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return event;
|
|
229
|
+
},
|
|
230
|
+
/**
|
|
231
|
+
* Emit and wait for all async listeners to complete.
|
|
232
|
+
*/
|
|
233
|
+
async emitAsync(type, category, data, options) {
|
|
234
|
+
const event = {
|
|
235
|
+
type,
|
|
236
|
+
timestamp: new Date().toISOString(),
|
|
237
|
+
category,
|
|
238
|
+
data,
|
|
239
|
+
source: options?.source,
|
|
240
|
+
id: nextEventId(),
|
|
241
|
+
cancelable: options?.cancelable ?? false,
|
|
242
|
+
cancelled: false,
|
|
243
|
+
};
|
|
244
|
+
if (_options.trackHistory) {
|
|
245
|
+
_history.push(event);
|
|
246
|
+
while (_history.length > _options.maxHistory) {
|
|
247
|
+
_history.shift();
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
const matchedListeners = [];
|
|
251
|
+
for (const [pattern, list] of _listeners.entries()) {
|
|
252
|
+
for (const reg of list) {
|
|
253
|
+
if (matchesPattern(type, pattern)) {
|
|
254
|
+
matchedListeners.push(reg);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
matchedListeners.sort((a, b) => b.priority - a.priority);
|
|
259
|
+
for (const reg of matchedListeners) {
|
|
260
|
+
if (event.cancelable && event.cancelled)
|
|
261
|
+
break;
|
|
262
|
+
try {
|
|
263
|
+
await reg.handler(event);
|
|
264
|
+
}
|
|
265
|
+
catch (err) {
|
|
266
|
+
if (_options.debug) {
|
|
267
|
+
console.error(`[Stelo Event] Async listener error for ${type}:`, err);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
reg.invocations++;
|
|
271
|
+
if (reg.maxInvocations > 0 && reg.invocations >= reg.maxInvocations) {
|
|
272
|
+
const list = _listeners.get(reg.pattern);
|
|
273
|
+
if (list) {
|
|
274
|
+
const idx = list.indexOf(reg);
|
|
275
|
+
if (idx !== -1)
|
|
276
|
+
list.splice(idx, 1);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
return event;
|
|
281
|
+
},
|
|
282
|
+
// ── History ──────────────────────────────────────────────────────────────
|
|
283
|
+
/**
|
|
284
|
+
* Get event history, optionally filtered.
|
|
285
|
+
*/
|
|
286
|
+
getHistory(filter) {
|
|
287
|
+
let result = [..._history];
|
|
288
|
+
if (filter?.categories) {
|
|
289
|
+
result = result.filter((e) => filter.categories.includes(e.category));
|
|
290
|
+
}
|
|
291
|
+
if (filter?.patterns) {
|
|
292
|
+
result = result.filter((e) => filter.patterns.some((p) => matchesPattern(e.type, p)));
|
|
293
|
+
}
|
|
294
|
+
if (filter?.sources) {
|
|
295
|
+
result = result.filter((e) => e.source && filter.sources.includes(e.source));
|
|
296
|
+
}
|
|
297
|
+
if (filter?.after) {
|
|
298
|
+
result = result.filter((e) => e.timestamp > filter.after);
|
|
299
|
+
}
|
|
300
|
+
if (filter?.before) {
|
|
301
|
+
result = result.filter((e) => e.timestamp < filter.before);
|
|
302
|
+
}
|
|
303
|
+
return result;
|
|
304
|
+
},
|
|
305
|
+
/** Get the last N events from history */
|
|
306
|
+
recent(count = 10) {
|
|
307
|
+
return _history.slice(-count);
|
|
308
|
+
},
|
|
309
|
+
/** Clear event history */
|
|
310
|
+
clearHistory() {
|
|
311
|
+
_history.length = 0;
|
|
312
|
+
},
|
|
313
|
+
/** Get total events emitted since startup */
|
|
314
|
+
get totalEmitted() {
|
|
315
|
+
return _eventId;
|
|
316
|
+
},
|
|
317
|
+
// ── Utilities ────────────────────────────────────────────────────────────
|
|
318
|
+
/**
|
|
319
|
+
* Wait for a specific event. Returns a promise that resolves with the event.
|
|
320
|
+
*
|
|
321
|
+
* @example
|
|
322
|
+
* ```ts
|
|
323
|
+
* const event = await events.waitFor('workflow.complete', 30000);
|
|
324
|
+
* ```
|
|
325
|
+
*/
|
|
326
|
+
waitFor(pattern, timeoutMs = 30000) {
|
|
327
|
+
return new Promise((resolve, reject) => {
|
|
328
|
+
const timer = setTimeout(() => {
|
|
329
|
+
unsub();
|
|
330
|
+
reject(new Error(`Timed out waiting for event: ${pattern}`));
|
|
331
|
+
}, timeoutMs);
|
|
332
|
+
const unsub = exports.events.once(pattern, (event) => {
|
|
333
|
+
clearTimeout(timer);
|
|
334
|
+
resolve(event);
|
|
335
|
+
});
|
|
336
|
+
});
|
|
337
|
+
},
|
|
338
|
+
/**
|
|
339
|
+
* Create a channel — an async iterable that yields matching events.
|
|
340
|
+
*
|
|
341
|
+
* @example
|
|
342
|
+
* ```ts
|
|
343
|
+
* const channel = events.channel('mouse.*');
|
|
344
|
+
* for await (const event of channel) {
|
|
345
|
+
* console.log(event.type, event.data);
|
|
346
|
+
* if (shouldStop) channel.close();
|
|
347
|
+
* }
|
|
348
|
+
* ```
|
|
349
|
+
*/
|
|
350
|
+
channel(pattern) {
|
|
351
|
+
return new EventChannel(pattern);
|
|
352
|
+
},
|
|
353
|
+
/**
|
|
354
|
+
* Pipe events from one pattern to another type.
|
|
355
|
+
* Useful for event transformation/routing.
|
|
356
|
+
*/
|
|
357
|
+
pipe(sourcePattern, transform) {
|
|
358
|
+
return exports.events.on(sourcePattern, (event) => {
|
|
359
|
+
const transformed = transform(event);
|
|
360
|
+
if (transformed) {
|
|
361
|
+
exports.events.emit(transformed.type, transformed.category, transformed.data, { source: 'pipe' });
|
|
362
|
+
}
|
|
363
|
+
});
|
|
364
|
+
},
|
|
365
|
+
/**
|
|
366
|
+
* Reset the entire event bus (clear listeners + history).
|
|
367
|
+
*/
|
|
368
|
+
reset() {
|
|
369
|
+
_listeners.clear();
|
|
370
|
+
_history.length = 0;
|
|
371
|
+
_eventId = 0;
|
|
372
|
+
_options = {
|
|
373
|
+
maxHistory: 1000,
|
|
374
|
+
trackHistory: true,
|
|
375
|
+
asyncListeners: true,
|
|
376
|
+
debug: false,
|
|
377
|
+
};
|
|
378
|
+
},
|
|
379
|
+
};
|
|
380
|
+
// ── Event Channel (Async Iterable) ──────────────────────────────────────────
|
|
381
|
+
class EventChannel {
|
|
382
|
+
_queue = [];
|
|
383
|
+
_waiting = null;
|
|
384
|
+
_closed = false;
|
|
385
|
+
_unsub = null;
|
|
386
|
+
constructor(pattern) {
|
|
387
|
+
this._unsub = exports.events.on(pattern, (event) => {
|
|
388
|
+
if (this._closed)
|
|
389
|
+
return;
|
|
390
|
+
if (this._waiting) {
|
|
391
|
+
const resolve = this._waiting;
|
|
392
|
+
this._waiting = null;
|
|
393
|
+
resolve({ value: event, done: false });
|
|
394
|
+
}
|
|
395
|
+
else {
|
|
396
|
+
this._queue.push(event);
|
|
397
|
+
}
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
close() {
|
|
401
|
+
this._closed = true;
|
|
402
|
+
this._unsub?.();
|
|
403
|
+
if (this._waiting) {
|
|
404
|
+
this._waiting({ value: undefined, done: true });
|
|
405
|
+
this._waiting = null;
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
[Symbol.asyncIterator]() {
|
|
409
|
+
return {
|
|
410
|
+
next: () => {
|
|
411
|
+
if (this._queue.length > 0) {
|
|
412
|
+
return Promise.resolve({ value: this._queue.shift(), done: false });
|
|
413
|
+
}
|
|
414
|
+
if (this._closed) {
|
|
415
|
+
return Promise.resolve({ value: undefined, done: true });
|
|
416
|
+
}
|
|
417
|
+
return new Promise((resolve) => {
|
|
418
|
+
this._waiting = resolve;
|
|
419
|
+
});
|
|
420
|
+
},
|
|
421
|
+
return: () => {
|
|
422
|
+
this.close();
|
|
423
|
+
return Promise.resolve({ value: undefined, done: true });
|
|
424
|
+
},
|
|
425
|
+
};
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
exports.EventChannel = EventChannel;
|
|
429
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../ts/events.ts"],"names":[],"mappings":"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"}
|