@xylabs/events 5.0.82 → 5.0.84

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.
@@ -2,21 +2,73 @@ import type { BaseParams } from '@xylabs/base';
2
2
  import { Base } from '@xylabs/base';
3
3
  import type { EmptyObject } from '@xylabs/object';
4
4
  import type { EventAnyListener, EventData, EventEmitter, EventListener } from './model/index.ts';
5
+ /** Fields specific to BaseEmitter configuration parameters. */
5
6
  export interface BaseEmitterParamsFields {
6
7
  }
8
+ /** Parameters type for configuring a BaseEmitter instance. */
7
9
  export type BaseEmitterParams<T extends EmptyObject = EmptyObject> = BaseParams<T & BaseEmitterParamsFields & T>;
10
+ /**
11
+ * Base class that combines the Base utility class with typed event emission capabilities.
12
+ * Delegates all event operations to an internal Events instance.
13
+ */
8
14
  export declare class BaseEmitter<TParams extends BaseParams = BaseParams, TEventData extends EventData = EventData> extends Base<TParams> implements EventEmitter<TEventData> {
9
15
  eventData: TEventData;
10
16
  private events;
11
17
  constructor(params: BaseParams<TParams>);
18
+ /**
19
+ * Removes all listeners for the specified event name(s).
20
+ * @param eventNames - One or more event names to clear listeners for.
21
+ * @returns This instance for chaining.
22
+ */
12
23
  clearListeners(eventNames: keyof TEventData | (keyof TEventData)[]): this;
24
+ /**
25
+ * Emits an event, invoking all registered listeners concurrently.
26
+ * @param eventName - The event to emit.
27
+ * @param eventArgs - The data to pass to listeners.
28
+ */
13
29
  emit<TEventName extends keyof TEventData = keyof TEventData, TEventArgs extends TEventData[TEventName] = TEventData[TEventName]>(eventName: TEventName, eventArgs: TEventArgs): Promise<void>;
30
+ /**
31
+ * Emits an event, invoking all registered listeners sequentially in order.
32
+ * @param eventName - The event to emit.
33
+ * @param eventArgs - The data to pass to listeners.
34
+ */
14
35
  emitSerial<TEventName extends keyof TEventData = keyof TEventData, TEventArgs extends TEventData[TEventName] = TEventData[TEventName]>(eventName: TEventName, eventArgs: TEventArgs): Promise<void>;
36
+ /**
37
+ * Returns the total number of listeners registered for the specified event name(s).
38
+ * @param eventNames - One or more event names to count listeners for.
39
+ * @returns The total listener count.
40
+ */
15
41
  listenerCount(eventNames: keyof TEventData | (keyof TEventData)[]): number;
42
+ /**
43
+ * Removes a specific listener from the specified event name(s).
44
+ * @param eventNames - One or more event names to unsubscribe from.
45
+ * @param listener - The listener to remove.
46
+ */
16
47
  off<TEventName extends keyof TEventData>(eventNames: TEventName | TEventName[], listener: EventListener<TEventData[TEventName]>): void;
48
+ /**
49
+ * Removes a wildcard listener that was receiving all events.
50
+ * @param listener - The wildcard listener to remove.
51
+ */
17
52
  offAny(listener: EventAnyListener): void;
53
+ /**
54
+ * Subscribes a listener to the specified event name(s).
55
+ * @param eventNames - One or more event names to listen for.
56
+ * @param listener - The callback to invoke when the event fires.
57
+ * @returns An unsubscribe function.
58
+ */
18
59
  on<TEventName extends keyof TEventData>(eventNames: TEventName | TEventName[], listener: EventListener<TEventData[TEventName]>): () => void;
60
+ /**
61
+ * Subscribes a wildcard listener that receives all events.
62
+ * @param listener - The callback to invoke for any event.
63
+ * @returns An unsubscribe function.
64
+ */
19
65
  onAny(listener: EventAnyListener): () => void;
66
+ /**
67
+ * Subscribes a listener that will be invoked only once for the specified event, then automatically removed.
68
+ * @param eventName - The event to listen for.
69
+ * @param listener - The callback to invoke once.
70
+ * @returns An unsubscribe function.
71
+ */
20
72
  once<TEventName extends keyof TEventData>(eventName: TEventName, listener: EventListener<TEventData[TEventName]>): () => void;
21
73
  }
22
74
  //# sourceMappingURL=BaseEmitter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BaseEmitter.d.ts","sourceRoot":"","sources":["../../src/BaseEmitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACnC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAGjD,OAAO,KAAK,EACV,gBAAgB,EAAE,SAAS,EAAE,YAAY,EACzC,aAAa,EACd,MAAM,kBAAkB,CAAA;AAEzB,MAAM,WAAW,uBAAuB;CAAG;AAE3C,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,IAAI,UAAU,CAAC,CAAC,GAAG,uBAAuB,GAAG,CAAC,CAAC,CAAA;AAEhH,qBAAa,WAAW,CAAC,OAAO,SAAS,UAAU,GAAG,UAAU,EAAE,UAAU,SAAS,SAAS,GAAG,SAAS,CACxG,SAAQ,IAAI,CAAC,OAAO,CAAE,YAAW,YAAY,CAAC,UAAU,CAAC;IAEzD,SAAS,EAAS,UAAU,CAAA;IAE5B,OAAO,CAAC,MAAM,CAAoB;gBAEtB,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC;IAKvC,cAAc,CAAC,UAAU,EAAE,MAAM,UAAU,GAAG,CAAC,MAAM,UAAU,CAAC,EAAE;IAKlE,IAAI,CAAC,UAAU,SAAS,MAAM,UAAU,GAAG,MAAM,UAAU,EAAE,UAAU,SAAS,UAAU,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC,EAC7H,SAAS,EAAE,UAAU,EACrB,SAAS,EAAE,UAAU;IAKvB,UAAU,CAAC,UAAU,SAAS,MAAM,UAAU,GAAG,MAAM,UAAU,EAAE,UAAU,SAAS,UAAU,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC,EACnI,SAAS,EAAE,UAAU,EACrB,SAAS,EAAE,UAAU;IAKvB,aAAa,CAAC,UAAU,EAAE,MAAM,UAAU,GAAG,CAAC,MAAM,UAAU,CAAC,EAAE;IAIjE,GAAG,CAAC,UAAU,SAAS,MAAM,UAAU,EAAE,UAAU,EAAE,UAAU,GAAG,UAAU,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAI/H,MAAM,CAAC,QAAQ,EAAE,gBAAgB;IAIjC,EAAE,CAAC,UAAU,SAAS,MAAM,UAAU,EAAE,UAAU,EAAE,UAAU,GAAG,UAAU,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAI9H,KAAK,CAAC,QAAQ,EAAE,gBAAgB;IAIhC,IAAI,CAAC,UAAU,SAAS,MAAM,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;CAGjH"}
1
+ {"version":3,"file":"BaseEmitter.d.ts","sourceRoot":"","sources":["../../src/BaseEmitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACnC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAGjD,OAAO,KAAK,EACV,gBAAgB,EAAE,SAAS,EAAE,YAAY,EACzC,aAAa,EACd,MAAM,kBAAkB,CAAA;AAEzB,+DAA+D;AAC/D,MAAM,WAAW,uBAAuB;CAAG;AAE3C,8DAA8D;AAC9D,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,IAAI,UAAU,CAAC,CAAC,GAAG,uBAAuB,GAAG,CAAC,CAAC,CAAA;AAEhH;;;GAGG;AACH,qBAAa,WAAW,CAAC,OAAO,SAAS,UAAU,GAAG,UAAU,EAAE,UAAU,SAAS,SAAS,GAAG,SAAS,CACxG,SAAQ,IAAI,CAAC,OAAO,CAAE,YAAW,YAAY,CAAC,UAAU,CAAC;IAEzD,SAAS,EAAS,UAAU,CAAA;IAE5B,OAAO,CAAC,MAAM,CAAoB;gBAEtB,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC;IAKvC;;;;OAIG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,UAAU,GAAG,CAAC,MAAM,UAAU,CAAC,EAAE;IAKlE;;;;OAIG;IACH,IAAI,CAAC,UAAU,SAAS,MAAM,UAAU,GAAG,MAAM,UAAU,EAAE,UAAU,SAAS,UAAU,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC,EAC7H,SAAS,EAAE,UAAU,EACrB,SAAS,EAAE,UAAU;IAKvB;;;;OAIG;IACH,UAAU,CAAC,UAAU,SAAS,MAAM,UAAU,GAAG,MAAM,UAAU,EAAE,UAAU,SAAS,UAAU,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC,EACnI,SAAS,EAAE,UAAU,EACrB,SAAS,EAAE,UAAU;IAKvB;;;;OAIG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,UAAU,GAAG,CAAC,MAAM,UAAU,CAAC,EAAE;IAIjE;;;;OAIG;IACH,GAAG,CAAC,UAAU,SAAS,MAAM,UAAU,EAAE,UAAU,EAAE,UAAU,GAAG,UAAU,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAI/H;;;OAGG;IACH,MAAM,CAAC,QAAQ,EAAE,gBAAgB;IAIjC;;;;;OAKG;IACH,EAAE,CAAC,UAAU,SAAS,MAAM,UAAU,EAAE,UAAU,EAAE,UAAU,GAAG,UAAU,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAI9H;;;;OAIG;IACH,KAAK,CAAC,QAAQ,EAAE,gBAAgB;IAIhC;;;;;OAKG;IACH,IAAI,CAAC,UAAU,SAAS,MAAM,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;CAGjH"}
@@ -10,6 +10,7 @@ on the Emittery class, or `myEmitter.debug.enabled` on an instance of it for deb
10
10
  See API for more information on how debugging works.
11
11
  */
12
12
  export type DebugLogger = (type: string, debugName: string, eventName?: EventName, eventData?: EventArgs) => void;
13
+ /** Information about a registered event listener, including an optional filter for selective invocation. */
13
14
  export type EventListenerInfo<TEventArgs extends EventArgs = EventArgs> = {
14
15
  filter?: TEventArgs;
15
16
  listener: EventListener<TEventArgs>;
@@ -22,6 +23,7 @@ export type DebugOptions = {
22
23
  logger?: DebugLogger;
23
24
  readonly name: string;
24
25
  };
26
+ /** Data shape for internal meta events that fire when listeners are added or removed. */
25
27
  export type MetaEventData<TEventData extends EventData> = {
26
28
  listenerAdded: {
27
29
  eventName?: keyof TEventData;
@@ -32,9 +34,14 @@ export type MetaEventData<TEventData extends EventData> = {
32
34
  listener: EventListener<TEventData[keyof TEventData]> | EventAnyListener<TEventData[keyof TEventData]>;
33
35
  };
34
36
  };
37
+ /** Parameters for constructing an Events instance, with optional debug configuration. */
35
38
  export type EventsParams = BaseParams<{
36
39
  readonly debug?: DebugOptions;
37
40
  }>;
41
+ /**
42
+ * Core typed event emitter implementation supporting named events, wildcard listeners,
43
+ * serial and concurrent emission, listener filtering, and debug logging.
44
+ */
38
45
  export declare class Events<TEventData extends EventData = EventData> extends Base<EventsParams> implements EventEmitter<TEventData> {
39
46
  protected static anyMap: WeakMap<object, Set<EventAnyListener>>;
40
47
  protected static eventsMap: WeakMap<object, Map<PropertyKey, Set<EventListenerInfo<EventArgs>>>>;
@@ -42,19 +49,79 @@ export declare class Events<TEventData extends EventData = EventData> extends Ba
42
49
  eventData: TEventData;
43
50
  private _canEmitMetaEvents;
44
51
  constructor(params?: EventsParams);
52
+ /** Whether debug mode is enabled globally or via the DEBUG environment variable. */
45
53
  static get isDebugEnabled(): boolean;
46
54
  static set isDebugEnabled(newValue: boolean);
55
+ /** The debug configuration for this instance, if provided. */
47
56
  get debug(): DebugOptions | undefined;
57
+ /**
58
+ * Removes all listeners for the specified event name(s).
59
+ * @param eventNames - One or more event names to clear listeners for.
60
+ */
48
61
  clearListeners(eventNames: keyof TEventData | (keyof TEventData)[]): void;
62
+ /**
63
+ * Emits an event, invoking all registered listeners concurrently.
64
+ * @param eventName - The event to emit.
65
+ * @param eventArgs - The data to pass to listeners.
66
+ */
49
67
  emit<TEventName extends keyof TEventData>(eventName: TEventName, eventArgs: TEventData[TEventName]): Promise<void>;
68
+ /**
69
+ * Emits an internal meta event (listenerAdded or listenerRemoved).
70
+ * @param eventName - The meta event name.
71
+ * @param eventArgs - The meta event data containing listener and event information.
72
+ * @returns True if the meta event was emitted successfully.
73
+ */
50
74
  emitMetaEvent<TEventName extends keyof MetaEventData<TEventData>>(eventName: TEventName, eventArgs: MetaEventData<TEventData>[TEventName]): Promise<boolean | undefined>;
75
+ /**
76
+ * Emits an event, invoking all registered listeners sequentially in order.
77
+ * @param eventName - The event to emit.
78
+ * @param eventArgs - The data to pass to listeners.
79
+ */
51
80
  emitSerial<TEventName extends keyof TEventData>(eventName: TEventName, eventArgs: TEventData[TEventName]): Promise<void>;
81
+ /**
82
+ * Returns the total number of listeners registered for the specified event name(s).
83
+ * @param eventNames - One or more event names to count listeners for.
84
+ * @returns The total listener count.
85
+ */
52
86
  listenerCount(eventNames?: keyof TEventData | (keyof TEventData)[]): number;
87
+ /**
88
+ * Logs debug information if debug mode is enabled.
89
+ * @param type - The type of operation being logged.
90
+ * @param eventName - The event name, if applicable.
91
+ * @param eventArgs - The event data, if applicable.
92
+ */
53
93
  logIfDebugEnabled<TEventName extends EventName>(type: string, eventName?: TEventName, eventArgs?: EventArgs): void;
94
+ /**
95
+ * Removes a specific listener from the specified event name(s).
96
+ * @param eventNames - One or more event names to unsubscribe from.
97
+ * @param listener - The listener to remove.
98
+ */
54
99
  off<TEventName extends keyof TEventData, TEventListener = EventListener<TEventData[TEventName]>>(eventNames: TEventName | TEventName[], listener: TEventListener): void;
100
+ /**
101
+ * Removes a wildcard listener that was receiving all events.
102
+ * @param listener - The wildcard listener to remove.
103
+ */
55
104
  offAny(listener: EventAnyListener): void;
105
+ /**
106
+ * Subscribes a listener to the specified event name(s).
107
+ * @param eventNames - One or more event names to listen for.
108
+ * @param listener - The callback to invoke when the event fires.
109
+ * @param filter - Optional filter to selectively invoke the listener based on event data.
110
+ * @returns An unsubscribe function.
111
+ */
56
112
  on<TEventName extends keyof TEventData = keyof TEventData>(eventNames: TEventName | TEventName[], listener: EventListener<TEventData[TEventName]>, filter?: TEventData[TEventName]): () => void;
113
+ /**
114
+ * Subscribes a wildcard listener that receives all events.
115
+ * @param listener - The callback to invoke for any event.
116
+ * @returns An unsubscribe function.
117
+ */
57
118
  onAny(listener: EventAnyListener): () => void;
119
+ /**
120
+ * Subscribes a listener that will be invoked only once for the specified event, then automatically removed.
121
+ * @param eventName - The event to listen for.
122
+ * @param listener - The callback to invoke once.
123
+ * @returns An unsubscribe function.
124
+ */
58
125
  once<TEventName extends keyof TEventData>(eventName: TEventName, listener: EventListener<TEventData[TEventName]>): () => void;
59
126
  private emitInternal;
60
127
  private emitMetaEventInternal;
@@ -1 +1 @@
1
- {"version":3,"file":"Events.d.ts","sourceRoot":"","sources":["../../../src/Events/Events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Events.d.ts","sourceRoot":"","sources":["../../../src/Events/Events.ts"],"names":[],"mappings":"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"}
@@ -38,6 +38,7 @@ var Events = class _Events extends Base {
38
38
  _Events.anyMap.set(this, /* @__PURE__ */ new Set());
39
39
  _Events.eventsMap.set(this, /* @__PURE__ */ new Map());
40
40
  }
41
+ /** Whether debug mode is enabled globally or via the DEBUG environment variable. */
41
42
  static get isDebugEnabled() {
42
43
  if (typeof globalThis.process?.env !== "object") {
43
44
  return _Events.isGlobalDebugEnabled;
@@ -48,9 +49,14 @@ var Events = class _Events extends Base {
48
49
  static set isDebugEnabled(newValue) {
49
50
  this.isGlobalDebugEnabled = newValue;
50
51
  }
52
+ /** The debug configuration for this instance, if provided. */
51
53
  get debug() {
52
54
  return this.params.debug;
53
55
  }
56
+ /**
57
+ * Removes all listeners for the specified event name(s).
58
+ * @param eventNames - One or more event names to clear listeners for.
59
+ */
54
60
  clearListeners(eventNames) {
55
61
  const eventNamesArray = Array.isArray(eventNames) ? eventNames : [eventNames];
56
62
  for (const eventName of eventNamesArray) {
@@ -69,9 +75,20 @@ var Events = class _Events extends Base {
69
75
  }
70
76
  }
71
77
  }
78
+ /**
79
+ * Emits an event, invoking all registered listeners concurrently.
80
+ * @param eventName - The event to emit.
81
+ * @param eventArgs - The data to pass to listeners.
82
+ */
72
83
  async emit(eventName, eventArgs) {
73
84
  return await this.emitInternal(eventName, eventArgs);
74
85
  }
86
+ /**
87
+ * Emits an internal meta event (listenerAdded or listenerRemoved).
88
+ * @param eventName - The meta event name.
89
+ * @param eventArgs - The meta event data containing listener and event information.
90
+ * @returns True if the meta event was emitted successfully.
91
+ */
75
92
  async emitMetaEvent(eventName, eventArgs) {
76
93
  if (isMetaEvent(eventName)) {
77
94
  try {
@@ -84,6 +101,11 @@ var Events = class _Events extends Base {
84
101
  }
85
102
  }
86
103
  }
104
+ /**
105
+ * Emits an event, invoking all registered listeners sequentially in order.
106
+ * @param eventName - The event to emit.
107
+ * @param eventArgs - The data to pass to listeners.
108
+ */
87
109
  async emitSerial(eventName, eventArgs) {
88
110
  if (isMetaEvent(eventName) && !this._canEmitMetaEvents) {
89
111
  throw new TypeError(NO_META_EVENT_ERROR_MESSAGE);
@@ -112,6 +134,11 @@ var Events = class _Events extends Base {
112
134
  await this.safeCallAnyListener(eventName, eventArgs, listener);
113
135
  }
114
136
  }
137
+ /**
138
+ * Returns the total number of listeners registered for the specified event name(s).
139
+ * @param eventNames - One or more event names to count listeners for.
140
+ * @returns The total listener count.
141
+ */
115
142
  // TODO: Make test for this
116
143
  listenerCount(eventNames) {
117
144
  const eventNamesArray = Array.isArray(eventNames) ? eventNames : [eventNames];
@@ -128,11 +155,22 @@ var Events = class _Events extends Base {
128
155
  }
129
156
  return count;
130
157
  }
158
+ /**
159
+ * Logs debug information if debug mode is enabled.
160
+ * @param type - The type of operation being logged.
161
+ * @param eventName - The event name, if applicable.
162
+ * @param eventArgs - The event data, if applicable.
163
+ */
131
164
  logIfDebugEnabled(type, eventName, eventArgs) {
132
165
  if (_Events.isDebugEnabled || this.debug?.enabled) {
133
166
  this.debug?.logger?.(type, this.debug.name, eventName, eventArgs);
134
167
  }
135
168
  }
169
+ /**
170
+ * Removes a specific listener from the specified event name(s).
171
+ * @param eventNames - One or more event names to unsubscribe from.
172
+ * @param listener - The listener to remove.
173
+ */
136
174
  off(eventNames, listener) {
137
175
  const eventNamesArray = Array.isArray(eventNames) ? eventNames : [eventNames];
138
176
  for (const eventName of eventNamesArray) {
@@ -150,12 +188,23 @@ var Events = class _Events extends Base {
150
188
  }
151
189
  }
152
190
  }
191
+ /**
192
+ * Removes a wildcard listener that was receiving all events.
193
+ * @param listener - The wildcard listener to remove.
194
+ */
153
195
  offAny(listener) {
154
196
  this.logIfDebugEnabled("unsubscribeAny");
155
197
  const typedMap = _Events.anyMap.get(this);
156
198
  typedMap?.delete(listener);
157
199
  forget(this.emitMetaEvent("listenerRemoved", { listener }));
158
200
  }
201
+ /**
202
+ * Subscribes a listener to the specified event name(s).
203
+ * @param eventNames - One or more event names to listen for.
204
+ * @param listener - The callback to invoke when the event fires.
205
+ * @param filter - Optional filter to selectively invoke the listener based on event data.
206
+ * @returns An unsubscribe function.
207
+ */
159
208
  on(eventNames, listener, filter) {
160
209
  const eventNamesArray = Array.isArray(eventNames) ? eventNames : [eventNames];
161
210
  for (const eventName of eventNamesArray) {
@@ -173,12 +222,23 @@ var Events = class _Events extends Base {
173
222
  }
174
223
  return this.off.bind(this, eventNames, listener);
175
224
  }
225
+ /**
226
+ * Subscribes a wildcard listener that receives all events.
227
+ * @param listener - The callback to invoke for any event.
228
+ * @returns An unsubscribe function.
229
+ */
176
230
  onAny(listener) {
177
231
  this.logIfDebugEnabled("subscribeAny");
178
232
  _Events.anyMap.get(this)?.add(listener);
179
233
  forget(this.emitMetaEvent("listenerAdded", { listener }));
180
234
  return this.offAny.bind(this, listener);
181
235
  }
236
+ /**
237
+ * Subscribes a listener that will be invoked only once for the specified event, then automatically removed.
238
+ * @param eventName - The event to listen for.
239
+ * @param listener - The callback to invoke once.
240
+ * @returns An unsubscribe function.
241
+ */
182
242
  once(eventName, listener) {
183
243
  const subListener = async (args) => {
184
244
  this.off(eventName, subListener);
@@ -270,31 +330,77 @@ var BaseEmitter = class extends Base2 {
270
330
  super(params);
271
331
  this.events = new Events();
272
332
  }
333
+ /**
334
+ * Removes all listeners for the specified event name(s).
335
+ * @param eventNames - One or more event names to clear listeners for.
336
+ * @returns This instance for chaining.
337
+ */
273
338
  clearListeners(eventNames) {
274
339
  this.events.clearListeners(eventNames);
275
340
  return this;
276
341
  }
342
+ /**
343
+ * Emits an event, invoking all registered listeners concurrently.
344
+ * @param eventName - The event to emit.
345
+ * @param eventArgs - The data to pass to listeners.
346
+ */
277
347
  emit(eventName, eventArgs) {
278
348
  return this.events.emit(eventName, eventArgs);
279
349
  }
350
+ /**
351
+ * Emits an event, invoking all registered listeners sequentially in order.
352
+ * @param eventName - The event to emit.
353
+ * @param eventArgs - The data to pass to listeners.
354
+ */
280
355
  emitSerial(eventName, eventArgs) {
281
356
  return this.events.emitSerial(eventName, eventArgs);
282
357
  }
358
+ /**
359
+ * Returns the total number of listeners registered for the specified event name(s).
360
+ * @param eventNames - One or more event names to count listeners for.
361
+ * @returns The total listener count.
362
+ */
283
363
  listenerCount(eventNames) {
284
364
  return this.events.listenerCount(eventNames);
285
365
  }
366
+ /**
367
+ * Removes a specific listener from the specified event name(s).
368
+ * @param eventNames - One or more event names to unsubscribe from.
369
+ * @param listener - The listener to remove.
370
+ */
286
371
  off(eventNames, listener) {
287
372
  return this.events.off(eventNames, listener);
288
373
  }
374
+ /**
375
+ * Removes a wildcard listener that was receiving all events.
376
+ * @param listener - The wildcard listener to remove.
377
+ */
289
378
  offAny(listener) {
290
379
  return this.events.offAny(listener);
291
380
  }
381
+ /**
382
+ * Subscribes a listener to the specified event name(s).
383
+ * @param eventNames - One or more event names to listen for.
384
+ * @param listener - The callback to invoke when the event fires.
385
+ * @returns An unsubscribe function.
386
+ */
292
387
  on(eventNames, listener) {
293
388
  return this.events.on(eventNames, listener);
294
389
  }
390
+ /**
391
+ * Subscribes a wildcard listener that receives all events.
392
+ * @param listener - The callback to invoke for any event.
393
+ * @returns An unsubscribe function.
394
+ */
295
395
  onAny(listener) {
296
396
  return this.events.onAny(listener);
297
397
  }
398
+ /**
399
+ * Subscribes a listener that will be invoked only once for the specified event, then automatically removed.
400
+ * @param eventName - The event to listen for.
401
+ * @param listener - The callback to invoke once.
402
+ * @returns An unsubscribe function.
403
+ */
298
404
  once(eventName, listener) {
299
405
  return this.events.once(eventName, listener);
300
406
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/BaseEmitter.ts","../../src/Events/Events.ts"],"sourcesContent":["import type { BaseParams } from '@xylabs/base'\nimport { Base } from '@xylabs/base'\nimport type { EmptyObject } from '@xylabs/object'\n\nimport { Events } from './Events/index.ts'\nimport type {\n EventAnyListener, EventData, EventEmitter,\n EventListener,\n} from './model/index.ts'\n\nexport interface BaseEmitterParamsFields {}\n\nexport type BaseEmitterParams<T extends EmptyObject = EmptyObject> = BaseParams<T & BaseEmitterParamsFields & T>\n\nexport class BaseEmitter<TParams extends BaseParams = BaseParams, TEventData extends EventData = EventData>\n extends Base<TParams> implements EventEmitter<TEventData> {\n // just here to query types\n eventData = {} as TEventData\n\n private events: Events<TEventData>\n\n constructor(params: BaseParams<TParams>) {\n super(params)\n this.events = new Events<TEventData>()\n }\n\n clearListeners(eventNames: keyof TEventData | (keyof TEventData)[]) {\n this.events.clearListeners(eventNames)\n return this\n }\n\n emit<TEventName extends keyof TEventData = keyof TEventData, TEventArgs extends TEventData[TEventName] = TEventData[TEventName]>(\n eventName: TEventName,\n eventArgs: TEventArgs,\n ) {\n return this.events.emit(eventName, eventArgs)\n }\n\n emitSerial<TEventName extends keyof TEventData = keyof TEventData, TEventArgs extends TEventData[TEventName] = TEventData[TEventName]>(\n eventName: TEventName,\n eventArgs: TEventArgs,\n ) {\n return this.events.emitSerial(eventName, eventArgs)\n }\n\n listenerCount(eventNames: keyof TEventData | (keyof TEventData)[]) {\n return this.events.listenerCount(eventNames)\n }\n\n off<TEventName extends keyof TEventData>(eventNames: TEventName | TEventName[], listener: EventListener<TEventData[TEventName]>) {\n return this.events.off(eventNames, listener)\n }\n\n offAny(listener: EventAnyListener) {\n return this.events.offAny(listener)\n }\n\n on<TEventName extends keyof TEventData>(eventNames: TEventName | TEventName[], listener: EventListener<TEventData[TEventName]>) {\n return this.events.on(eventNames, listener)\n }\n\n onAny(listener: EventAnyListener) {\n return this.events.onAny(listener)\n }\n\n once<TEventName extends keyof TEventData>(eventName: TEventName, listener: EventListener<TEventData[TEventName]>) {\n return this.events.once(eventName, listener)\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { BaseParams } from '@xylabs/base'\nimport { Base } from '@xylabs/base'\nimport { handleError } from '@xylabs/error'\nimport { forget } from '@xylabs/forget'\nimport { isDefined } from '@xylabs/typeof'\n\nimport type {\n EventAnyListener, EventArgs, EventData, EventEmitter, EventListener, EventName,\n} from '../model/index.ts'\n\n/**\nEmittery can collect and log debug information.\n\nTo enable this feature set the `DEBUG` environment variable to `emittery` or `*`. Additionally, you can set the static `isDebugEnabled` variable to true\non the Emittery class, or `myEmitter.debug.enabled` on an instance of it for debugging a single instance.\n\nSee API for more information on how debugging works.\n*/\nexport type DebugLogger = (type: string, debugName: string, eventName?: EventName, eventData?: EventArgs) => void\n\nexport type EventListenerInfo<TEventArgs extends EventArgs = EventArgs> = {\n filter?: TEventArgs\n listener: EventListener<TEventArgs>\n}\n\nconst NO_META_EVENT_ERROR_MESSAGE = '`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`'\n\n/**\nConfigure debug options of an instance.\n*/\n/* v8 ignore next 5 */\nexport type DebugOptions = {\n enabled?: boolean\n logger?: DebugLogger\n readonly name: string\n}\n\nconst resolvedPromise = Promise.resolve()\n\nexport type MetaEventData<TEventData extends EventData> = {\n listenerAdded: {\n eventName?: keyof TEventData\n listener: EventListener<TEventData[keyof TEventData]> | EventAnyListener<TEventData[keyof TEventData]>\n }\n listenerRemoved: {\n eventName?: keyof TEventData\n listener: EventListener<TEventData[keyof TEventData]> | EventAnyListener<TEventData[keyof TEventData]>\n }\n}\n\nconst isMetaEvent = (eventName: EventName) => eventName === 'listenerAdded' || eventName === 'listenerRemoved'\n\nexport type EventsParams = BaseParams<{ readonly debug?: DebugOptions }>\n\nexport class Events<TEventData extends EventData = EventData> extends Base<EventsParams> implements EventEmitter<TEventData> {\n protected static anyMap = new WeakMap<object, Set<EventAnyListener>>()\n protected static eventsMap = new WeakMap<object, Map<EventName, Set<EventListenerInfo>>>()\n\n private static isGlobalDebugEnabled = false\n\n // this is here to be able to query the type, not use\n eventData = {} as TEventData\n\n private _canEmitMetaEvents = false\n\n constructor(params: EventsParams = {}) {\n const mutatedParams = { ...params }\n if (mutatedParams.debug) {\n mutatedParams.debug.logger\n = mutatedParams.debug.logger\n ?? ((type: string, debugName: string, eventName?: EventName, eventData?: EventArgs) => {\n let eventDataString: string\n try {\n eventDataString = JSON.stringify(eventData)\n } catch {\n eventDataString = `Object with the following keys failed to stringify: ${Object.keys(eventData ?? {}).join(',')}`\n }\n\n const eventNameString = typeof eventName === 'symbol' || typeof eventName === 'number' ? eventName.toString() : eventName\n\n const currentTime = new Date()\n const logTime = `${currentTime.getHours()}:${currentTime.getMinutes()}:${currentTime.getSeconds()}.${currentTime.getMilliseconds()}`\n this.logger?.log(`[${logTime}][events:${type}][${debugName}] Event Name: ${eventNameString}\\n\\tdata: ${eventDataString}`)\n })\n }\n super(mutatedParams)\n Events.anyMap.set(this, new Set<EventAnyListener>())\n Events.eventsMap.set(this, new Map<keyof TEventData, Set<EventListenerInfo>>())\n }\n\n static get isDebugEnabled() {\n // In a browser environment, `globalThis.process` can potentially reference a DOM Element with a `#process` ID,\n // so instead of just type checking `globalThis.process`, we need to make sure that `globalThis.process.env` exists.\n\n if (typeof globalThis.process?.env !== 'object') {\n return Events.isGlobalDebugEnabled\n }\n\n const { env } = globalThis.process\n return env.DEBUG === 'events' || env.DEBUG === '*' || Events.isGlobalDebugEnabled\n }\n\n static set isDebugEnabled(newValue) {\n this.isGlobalDebugEnabled = newValue\n }\n\n get debug() {\n return this.params.debug\n }\n\n clearListeners(eventNames: keyof TEventData | (keyof TEventData)[]) {\n const eventNamesArray = Array.isArray(eventNames) ? eventNames : [eventNames]\n\n for (const eventName of eventNamesArray) {\n this.logIfDebugEnabled('clear', eventName)\n\n if (typeof eventName === 'string' || typeof eventName === 'symbol' || typeof eventName === 'number') {\n const set = this.getListeners(eventName)\n if (set) {\n set.clear()\n }\n } else {\n Events.anyMap.get(this)?.clear()\n\n for (const [eventName, listeners] of assertEx(Events.eventsMap.get(this)).entries()) {\n listeners.clear()\n Events.eventsMap.get(this)?.delete(eventName)\n }\n }\n }\n }\n\n async emit<TEventName extends keyof TEventData>(eventName: TEventName, eventArgs: TEventData[TEventName]) {\n return await this.emitInternal(eventName, eventArgs)\n }\n\n async emitMetaEvent<TEventName extends keyof MetaEventData<TEventData>>(eventName: TEventName, eventArgs: MetaEventData<TEventData>[TEventName]) {\n if (isMetaEvent(eventName)) {\n try {\n this._canEmitMetaEvents = true\n await this.emitMetaEventInternal(eventName, eventArgs)\n return true\n } finally {\n this._canEmitMetaEvents = false\n return false\n }\n }\n }\n\n async emitSerial<TEventName extends keyof TEventData>(eventName: TEventName, eventArgs: TEventData[TEventName]) {\n if (isMetaEvent(eventName) && !this._canEmitMetaEvents) {\n throw new TypeError(NO_META_EVENT_ERROR_MESSAGE)\n }\n\n const filterMatch = (args: TEventData[TEventName], filter: TEventData[TEventName]) => {\n switch (typeof filter) {\n case 'object': {\n // eslint-disable-next-line unicorn/no-array-reduce\n return Object.entries(args).reduce((prev, [key, value]) => ((filter as Record<PropertyKey, unknown>)[key] === value ? true : prev), false)\n }\n default: {\n return args === filter\n }\n }\n }\n\n this.logIfDebugEnabled('emitSerial', eventName, eventArgs)\n\n const listeners = this.getListeners(eventName) ?? new Set()\n const filteredListeners = [...listeners.values()]\n .filter(value => (isDefined(value.filter) ? filterMatch(eventArgs, value.filter as TEventData[TEventName]) : true))\n .map(info => info.listener)\n const anyListeners = assertEx(Events.anyMap.get(this))\n const staticListeners = [...filteredListeners]\n const staticAnyListeners = [...anyListeners]\n\n await resolvedPromise\n\n for (const listener of staticListeners) {\n await this.safeCallListener(eventName, eventArgs, listener)\n }\n\n for (const listener of staticAnyListeners) {\n await this.safeCallAnyListener(eventName, eventArgs, listener)\n }\n }\n\n // TODO: Make test for this\n listenerCount(eventNames?: keyof TEventData | (keyof TEventData)[]) {\n const eventNamesArray = Array.isArray(eventNames) ? eventNames : [eventNames]\n let count = 0\n\n for (const eventName of eventNamesArray) {\n if (typeof eventName === 'string') {\n count += assertEx(Events.anyMap.get(this)).size + (this.getListeners(eventName)?.size ?? 0)\n\n continue\n }\n\n count += assertEx(Events.anyMap.get(this)).size\n\n for (const value of assertEx(Events.eventsMap.get(this)).values()) {\n count += value.size\n }\n }\n\n return count\n }\n\n logIfDebugEnabled<TEventName extends EventName>(type: string, eventName?: TEventName, eventArgs?: EventArgs) {\n if (Events.isDebugEnabled || this.debug?.enabled) {\n this.debug?.logger?.(type, this.debug.name, eventName, eventArgs)\n }\n }\n\n off<TEventName extends keyof TEventData, TEventListener = EventListener<TEventData[TEventName]>>(\n eventNames: TEventName | TEventName[],\n listener: TEventListener,\n ) {\n const eventNamesArray = Array.isArray(eventNames) ? eventNames : [eventNames]\n for (const eventName of eventNamesArray) {\n const set = this.getListeners(eventName) as Set<TEventListener> | undefined\n if (set) {\n set.delete(listener)\n if (set.size === 0) {\n const events = Events.eventsMap.get(this)\n events?.delete(eventName)\n }\n }\n\n this.logIfDebugEnabled('unsubscribe', eventName)\n\n /* v8 ignore next 3 -- meta events don't reach this path via public API */\n if (!isMetaEvent(eventName)) {\n forget(this.emitMetaEvent('listenerRemoved', { eventName, listener: listener as EventListener }))\n }\n }\n }\n\n offAny(listener: EventAnyListener) {\n this.logIfDebugEnabled('unsubscribeAny')\n\n const typedMap = Events.anyMap.get(this) as Set<EventAnyListener<TEventData[keyof TEventData]>>\n typedMap?.delete(listener)\n forget(this.emitMetaEvent('listenerRemoved', { listener: listener as EventAnyListener }))\n }\n\n on<TEventName extends keyof TEventData = keyof TEventData>(\n eventNames: TEventName | TEventName[],\n listener: EventListener<TEventData[TEventName]>,\n filter?: TEventData[TEventName],\n ) {\n const eventNamesArray = Array.isArray(eventNames) ? eventNames : [eventNames]\n for (const eventName of eventNamesArray) {\n let set = this.getListeners(eventName)\n if (!set) {\n set = new Set()\n const events = Events.eventsMap.get(this)\n events?.set(eventName, set)\n }\n\n set.add({ filter, listener: listener as EventListener })\n\n this.logIfDebugEnabled('subscribe', eventName)\n\n if (!isMetaEvent(eventName)) {\n forget(this.emitMetaEvent('listenerAdded', { eventName, listener: listener as EventListener }))\n }\n }\n\n return this.off.bind(this, eventNames, listener as EventListener)\n }\n\n onAny(listener: EventAnyListener) {\n this.logIfDebugEnabled('subscribeAny')\n\n Events.anyMap.get(this)?.add(listener as EventAnyListener)\n forget(this.emitMetaEvent('listenerAdded', { listener: listener as EventAnyListener }))\n return this.offAny.bind(this, listener as EventAnyListener)\n }\n\n once<TEventName extends keyof TEventData>(eventName: TEventName, listener: EventListener<TEventData[TEventName]>) {\n const subListener = async (args: TEventData[TEventName]) => {\n this.off(eventName, subListener)\n await this.safeCallListener(eventName, args, listener)\n }\n this.on(eventName, subListener)\n return this.off.bind(this, eventName, subListener as EventListener)\n }\n\n private async emitInternal<TEventName extends keyof TEventData, TEventArgs extends TEventData[TEventName]>(\n eventName: TEventName,\n eventArgs: TEventArgs,\n filter?: TEventArgs,\n ) {\n if (isMetaEvent(eventName) && !this._canEmitMetaEvents) {\n throw new TypeError(NO_META_EVENT_ERROR_MESSAGE)\n }\n\n this.logIfDebugEnabled('emit', eventName, eventArgs)\n\n const listeners = this.getListeners(eventName) ?? new Set()\n /* v8 ignore start -- filter parameter is reserved for future use; anyListeners.has is a race condition guard */\n const filteredListeners = [...listeners.values()].filter(value => (isDefined(filter) ? isDefined(value.listener) : true)).map(info => info.listener)\n const anyListeners = assertEx(Events.anyMap.get(this))\n const staticListeners = [...filteredListeners]\n const staticAnyListeners = isMetaEvent(eventName) ? [] : [...anyListeners]\n\n await resolvedPromise\n await Promise.all([\n ...staticListeners.map(async (listener) => {\n await this.safeCallListener(eventName, eventArgs, listener)\n }),\n ...staticAnyListeners.map(async (listener) => {\n if (anyListeners.has(listener)) {\n await this.safeCallAnyListener(eventName, eventArgs, listener)\n }\n }),\n ])\n /* v8 ignore stop */\n }\n\n private async emitMetaEventInternal<TEventName extends keyof MetaEventData<TEventData>>(\n eventName: TEventName,\n eventArgs: MetaEventData<TEventData>[TEventName],\n ) {\n if (isMetaEvent(eventName) && !this._canEmitMetaEvents) {\n throw new TypeError('`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`')\n }\n\n this.logIfDebugEnabled('emit', eventName, eventArgs)\n\n const listeners = this.getListeners(eventName) ?? new Set()\n const filteredListeners = [...listeners.values()].map(info => info.listener)\n const anyListeners = assertEx(Events.anyMap.get(this))\n const staticListeners = [...filteredListeners]\n const staticAnyListeners = isMetaEvent(eventName) ? [] : [...anyListeners]\n\n await resolvedPromise\n await Promise.all([\n ...staticListeners.map(async (listener) => {\n await this.safeCallListener(eventName, eventArgs, listener)\n }),\n /* v8 ignore start -- race condition guard */\n ...staticAnyListeners.map(async (listener) => {\n if (anyListeners.has(listener)) {\n await this.safeCallAnyListener(eventName, eventArgs, listener)\n }\n }),\n /* v8 ignore stop */\n ])\n return true\n }\n\n private getListeners<TEventName extends keyof TEventData>(eventName: TEventName) {\n const events = assertEx(Events.eventsMap.get(this))\n if (!events.has(eventName)) {\n return\n }\n\n return events.get(eventName)\n }\n\n private async safeCallAnyListener<TEventData extends EventData, TEventName extends keyof EventData>(\n eventName: TEventName,\n eventArgs: TEventData[TEventName],\n listener: EventAnyListener<TEventData[TEventName]>,\n ) {\n try {\n return await listener(eventName, eventArgs)\n } catch (ex) {\n handleError(ex, (error) => {\n this.logger?.error(`Listener[${String(eventName)}] Excepted: ${error.message}`)\n })\n }\n }\n\n private async safeCallListener<TEventData extends EventData, TEventName extends keyof EventData>(\n eventName: TEventName,\n eventArgs: TEventData[TEventName],\n listener: EventListener<TEventData[TEventName]>,\n ) {\n try {\n return await listener(eventArgs)\n } catch (ex) {\n handleError(ex, (error) => {\n this.logger?.error(`Listener[${String(eventName)}] Excepted: ${error.message}`)\n })\n }\n }\n}\n"],"mappings":"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","names":["Base","eventName","Base"]}
1
+ {"version":3,"sources":["../../src/BaseEmitter.ts","../../src/Events/Events.ts"],"sourcesContent":["import type { BaseParams } from '@xylabs/base'\nimport { Base } from '@xylabs/base'\nimport type { EmptyObject } from '@xylabs/object'\n\nimport { Events } from './Events/index.ts'\nimport type {\n EventAnyListener, EventData, EventEmitter,\n EventListener,\n} from './model/index.ts'\n\n/** Fields specific to BaseEmitter configuration parameters. */\nexport interface BaseEmitterParamsFields {}\n\n/** Parameters type for configuring a BaseEmitter instance. */\nexport type BaseEmitterParams<T extends EmptyObject = EmptyObject> = BaseParams<T & BaseEmitterParamsFields & T>\n\n/**\n * Base class that combines the Base utility class with typed event emission capabilities.\n * Delegates all event operations to an internal Events instance.\n */\nexport class BaseEmitter<TParams extends BaseParams = BaseParams, TEventData extends EventData = EventData>\n extends Base<TParams> implements EventEmitter<TEventData> {\n // just here to query types\n eventData = {} as TEventData\n\n private events: Events<TEventData>\n\n constructor(params: BaseParams<TParams>) {\n super(params)\n this.events = new Events<TEventData>()\n }\n\n /**\n * Removes all listeners for the specified event name(s).\n * @param eventNames - One or more event names to clear listeners for.\n * @returns This instance for chaining.\n */\n clearListeners(eventNames: keyof TEventData | (keyof TEventData)[]) {\n this.events.clearListeners(eventNames)\n return this\n }\n\n /**\n * Emits an event, invoking all registered listeners concurrently.\n * @param eventName - The event to emit.\n * @param eventArgs - The data to pass to listeners.\n */\n emit<TEventName extends keyof TEventData = keyof TEventData, TEventArgs extends TEventData[TEventName] = TEventData[TEventName]>(\n eventName: TEventName,\n eventArgs: TEventArgs,\n ) {\n return this.events.emit(eventName, eventArgs)\n }\n\n /**\n * Emits an event, invoking all registered listeners sequentially in order.\n * @param eventName - The event to emit.\n * @param eventArgs - The data to pass to listeners.\n */\n emitSerial<TEventName extends keyof TEventData = keyof TEventData, TEventArgs extends TEventData[TEventName] = TEventData[TEventName]>(\n eventName: TEventName,\n eventArgs: TEventArgs,\n ) {\n return this.events.emitSerial(eventName, eventArgs)\n }\n\n /**\n * Returns the total number of listeners registered for the specified event name(s).\n * @param eventNames - One or more event names to count listeners for.\n * @returns The total listener count.\n */\n listenerCount(eventNames: keyof TEventData | (keyof TEventData)[]) {\n return this.events.listenerCount(eventNames)\n }\n\n /**\n * Removes a specific listener from the specified event name(s).\n * @param eventNames - One or more event names to unsubscribe from.\n * @param listener - The listener to remove.\n */\n off<TEventName extends keyof TEventData>(eventNames: TEventName | TEventName[], listener: EventListener<TEventData[TEventName]>) {\n return this.events.off(eventNames, listener)\n }\n\n /**\n * Removes a wildcard listener that was receiving all events.\n * @param listener - The wildcard listener to remove.\n */\n offAny(listener: EventAnyListener) {\n return this.events.offAny(listener)\n }\n\n /**\n * Subscribes a listener to the specified event name(s).\n * @param eventNames - One or more event names to listen for.\n * @param listener - The callback to invoke when the event fires.\n * @returns An unsubscribe function.\n */\n on<TEventName extends keyof TEventData>(eventNames: TEventName | TEventName[], listener: EventListener<TEventData[TEventName]>) {\n return this.events.on(eventNames, listener)\n }\n\n /**\n * Subscribes a wildcard listener that receives all events.\n * @param listener - The callback to invoke for any event.\n * @returns An unsubscribe function.\n */\n onAny(listener: EventAnyListener) {\n return this.events.onAny(listener)\n }\n\n /**\n * Subscribes a listener that will be invoked only once for the specified event, then automatically removed.\n * @param eventName - The event to listen for.\n * @param listener - The callback to invoke once.\n * @returns An unsubscribe function.\n */\n once<TEventName extends keyof TEventData>(eventName: TEventName, listener: EventListener<TEventData[TEventName]>) {\n return this.events.once(eventName, listener)\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { BaseParams } from '@xylabs/base'\nimport { Base } from '@xylabs/base'\nimport { handleError } from '@xylabs/error'\nimport { forget } from '@xylabs/forget'\nimport { isDefined } from '@xylabs/typeof'\n\nimport type {\n EventAnyListener, EventArgs, EventData, EventEmitter, EventListener, EventName,\n} from '../model/index.ts'\n\n/**\nEmittery can collect and log debug information.\n\nTo enable this feature set the `DEBUG` environment variable to `emittery` or `*`. Additionally, you can set the static `isDebugEnabled` variable to true\non the Emittery class, or `myEmitter.debug.enabled` on an instance of it for debugging a single instance.\n\nSee API for more information on how debugging works.\n*/\nexport type DebugLogger = (type: string, debugName: string, eventName?: EventName, eventData?: EventArgs) => void\n\n/** Information about a registered event listener, including an optional filter for selective invocation. */\nexport type EventListenerInfo<TEventArgs extends EventArgs = EventArgs> = {\n filter?: TEventArgs\n listener: EventListener<TEventArgs>\n}\n\nconst NO_META_EVENT_ERROR_MESSAGE = '`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`'\n\n/**\nConfigure debug options of an instance.\n*/\n/* v8 ignore next 5 */\nexport type DebugOptions = {\n enabled?: boolean\n logger?: DebugLogger\n readonly name: string\n}\n\nconst resolvedPromise = Promise.resolve()\n\n/** Data shape for internal meta events that fire when listeners are added or removed. */\nexport type MetaEventData<TEventData extends EventData> = {\n listenerAdded: {\n eventName?: keyof TEventData\n listener: EventListener<TEventData[keyof TEventData]> | EventAnyListener<TEventData[keyof TEventData]>\n }\n listenerRemoved: {\n eventName?: keyof TEventData\n listener: EventListener<TEventData[keyof TEventData]> | EventAnyListener<TEventData[keyof TEventData]>\n }\n}\n\nconst isMetaEvent = (eventName: EventName) => eventName === 'listenerAdded' || eventName === 'listenerRemoved'\n\n/** Parameters for constructing an Events instance, with optional debug configuration. */\nexport type EventsParams = BaseParams<{ readonly debug?: DebugOptions }>\n\n/**\n * Core typed event emitter implementation supporting named events, wildcard listeners,\n * serial and concurrent emission, listener filtering, and debug logging.\n */\nexport class Events<TEventData extends EventData = EventData> extends Base<EventsParams> implements EventEmitter<TEventData> {\n protected static anyMap = new WeakMap<object, Set<EventAnyListener>>()\n protected static eventsMap = new WeakMap<object, Map<EventName, Set<EventListenerInfo>>>()\n\n private static isGlobalDebugEnabled = false\n\n // this is here to be able to query the type, not use\n eventData = {} as TEventData\n\n private _canEmitMetaEvents = false\n\n constructor(params: EventsParams = {}) {\n const mutatedParams = { ...params }\n if (mutatedParams.debug) {\n mutatedParams.debug.logger\n = mutatedParams.debug.logger\n ?? ((type: string, debugName: string, eventName?: EventName, eventData?: EventArgs) => {\n let eventDataString: string\n try {\n eventDataString = JSON.stringify(eventData)\n } catch {\n eventDataString = `Object with the following keys failed to stringify: ${Object.keys(eventData ?? {}).join(',')}`\n }\n\n const eventNameString = typeof eventName === 'symbol' || typeof eventName === 'number' ? eventName.toString() : eventName\n\n const currentTime = new Date()\n const logTime = `${currentTime.getHours()}:${currentTime.getMinutes()}:${currentTime.getSeconds()}.${currentTime.getMilliseconds()}`\n this.logger?.log(`[${logTime}][events:${type}][${debugName}] Event Name: ${eventNameString}\\n\\tdata: ${eventDataString}`)\n })\n }\n super(mutatedParams)\n Events.anyMap.set(this, new Set<EventAnyListener>())\n Events.eventsMap.set(this, new Map<keyof TEventData, Set<EventListenerInfo>>())\n }\n\n /** Whether debug mode is enabled globally or via the DEBUG environment variable. */\n static get isDebugEnabled() {\n // In a browser environment, `globalThis.process` can potentially reference a DOM Element with a `#process` ID,\n // so instead of just type checking `globalThis.process`, we need to make sure that `globalThis.process.env` exists.\n\n if (typeof globalThis.process?.env !== 'object') {\n return Events.isGlobalDebugEnabled\n }\n\n const { env } = globalThis.process\n return env.DEBUG === 'events' || env.DEBUG === '*' || Events.isGlobalDebugEnabled\n }\n\n static set isDebugEnabled(newValue) {\n this.isGlobalDebugEnabled = newValue\n }\n\n /** The debug configuration for this instance, if provided. */\n get debug() {\n return this.params.debug\n }\n\n /**\n * Removes all listeners for the specified event name(s).\n * @param eventNames - One or more event names to clear listeners for.\n */\n clearListeners(eventNames: keyof TEventData | (keyof TEventData)[]) {\n const eventNamesArray = Array.isArray(eventNames) ? eventNames : [eventNames]\n\n for (const eventName of eventNamesArray) {\n this.logIfDebugEnabled('clear', eventName)\n\n if (typeof eventName === 'string' || typeof eventName === 'symbol' || typeof eventName === 'number') {\n const set = this.getListeners(eventName)\n if (set) {\n set.clear()\n }\n } else {\n Events.anyMap.get(this)?.clear()\n\n for (const [eventName, listeners] of assertEx(Events.eventsMap.get(this)).entries()) {\n listeners.clear()\n Events.eventsMap.get(this)?.delete(eventName)\n }\n }\n }\n }\n\n /**\n * Emits an event, invoking all registered listeners concurrently.\n * @param eventName - The event to emit.\n * @param eventArgs - The data to pass to listeners.\n */\n async emit<TEventName extends keyof TEventData>(eventName: TEventName, eventArgs: TEventData[TEventName]) {\n return await this.emitInternal(eventName, eventArgs)\n }\n\n /**\n * Emits an internal meta event (listenerAdded or listenerRemoved).\n * @param eventName - The meta event name.\n * @param eventArgs - The meta event data containing listener and event information.\n * @returns True if the meta event was emitted successfully.\n */\n async emitMetaEvent<TEventName extends keyof MetaEventData<TEventData>>(eventName: TEventName, eventArgs: MetaEventData<TEventData>[TEventName]) {\n if (isMetaEvent(eventName)) {\n try {\n this._canEmitMetaEvents = true\n await this.emitMetaEventInternal(eventName, eventArgs)\n return true\n } finally {\n this._canEmitMetaEvents = false\n return false\n }\n }\n }\n\n /**\n * Emits an event, invoking all registered listeners sequentially in order.\n * @param eventName - The event to emit.\n * @param eventArgs - The data to pass to listeners.\n */\n async emitSerial<TEventName extends keyof TEventData>(eventName: TEventName, eventArgs: TEventData[TEventName]) {\n if (isMetaEvent(eventName) && !this._canEmitMetaEvents) {\n throw new TypeError(NO_META_EVENT_ERROR_MESSAGE)\n }\n\n const filterMatch = (args: TEventData[TEventName], filter: TEventData[TEventName]) => {\n switch (typeof filter) {\n case 'object': {\n // eslint-disable-next-line unicorn/no-array-reduce\n return Object.entries(args).reduce((prev, [key, value]) => ((filter as Record<PropertyKey, unknown>)[key] === value ? true : prev), false)\n }\n default: {\n return args === filter\n }\n }\n }\n\n this.logIfDebugEnabled('emitSerial', eventName, eventArgs)\n\n const listeners = this.getListeners(eventName) ?? new Set()\n const filteredListeners = [...listeners.values()]\n .filter(value => (isDefined(value.filter) ? filterMatch(eventArgs, value.filter as TEventData[TEventName]) : true))\n .map(info => info.listener)\n const anyListeners = assertEx(Events.anyMap.get(this))\n const staticListeners = [...filteredListeners]\n const staticAnyListeners = [...anyListeners]\n\n await resolvedPromise\n\n for (const listener of staticListeners) {\n await this.safeCallListener(eventName, eventArgs, listener)\n }\n\n for (const listener of staticAnyListeners) {\n await this.safeCallAnyListener(eventName, eventArgs, listener)\n }\n }\n\n /**\n * Returns the total number of listeners registered for the specified event name(s).\n * @param eventNames - One or more event names to count listeners for.\n * @returns The total listener count.\n */\n // TODO: Make test for this\n listenerCount(eventNames?: keyof TEventData | (keyof TEventData)[]) {\n const eventNamesArray = Array.isArray(eventNames) ? eventNames : [eventNames]\n let count = 0\n\n for (const eventName of eventNamesArray) {\n if (typeof eventName === 'string') {\n count += assertEx(Events.anyMap.get(this)).size + (this.getListeners(eventName)?.size ?? 0)\n\n continue\n }\n\n count += assertEx(Events.anyMap.get(this)).size\n\n for (const value of assertEx(Events.eventsMap.get(this)).values()) {\n count += value.size\n }\n }\n\n return count\n }\n\n /**\n * Logs debug information if debug mode is enabled.\n * @param type - The type of operation being logged.\n * @param eventName - The event name, if applicable.\n * @param eventArgs - The event data, if applicable.\n */\n logIfDebugEnabled<TEventName extends EventName>(type: string, eventName?: TEventName, eventArgs?: EventArgs) {\n if (Events.isDebugEnabled || this.debug?.enabled) {\n this.debug?.logger?.(type, this.debug.name, eventName, eventArgs)\n }\n }\n\n /**\n * Removes a specific listener from the specified event name(s).\n * @param eventNames - One or more event names to unsubscribe from.\n * @param listener - The listener to remove.\n */\n off<TEventName extends keyof TEventData, TEventListener = EventListener<TEventData[TEventName]>>(\n eventNames: TEventName | TEventName[],\n listener: TEventListener,\n ) {\n const eventNamesArray = Array.isArray(eventNames) ? eventNames : [eventNames]\n for (const eventName of eventNamesArray) {\n const set = this.getListeners(eventName) as Set<TEventListener> | undefined\n if (set) {\n set.delete(listener)\n if (set.size === 0) {\n const events = Events.eventsMap.get(this)\n events?.delete(eventName)\n }\n }\n\n this.logIfDebugEnabled('unsubscribe', eventName)\n\n /* v8 ignore next 3 -- meta events don't reach this path via public API */\n if (!isMetaEvent(eventName)) {\n forget(this.emitMetaEvent('listenerRemoved', { eventName, listener: listener as EventListener }))\n }\n }\n }\n\n /**\n * Removes a wildcard listener that was receiving all events.\n * @param listener - The wildcard listener to remove.\n */\n offAny(listener: EventAnyListener) {\n this.logIfDebugEnabled('unsubscribeAny')\n\n const typedMap = Events.anyMap.get(this) as Set<EventAnyListener<TEventData[keyof TEventData]>>\n typedMap?.delete(listener)\n forget(this.emitMetaEvent('listenerRemoved', { listener: listener as EventAnyListener }))\n }\n\n /**\n * Subscribes a listener to the specified event name(s).\n * @param eventNames - One or more event names to listen for.\n * @param listener - The callback to invoke when the event fires.\n * @param filter - Optional filter to selectively invoke the listener based on event data.\n * @returns An unsubscribe function.\n */\n on<TEventName extends keyof TEventData = keyof TEventData>(\n eventNames: TEventName | TEventName[],\n listener: EventListener<TEventData[TEventName]>,\n filter?: TEventData[TEventName],\n ) {\n const eventNamesArray = Array.isArray(eventNames) ? eventNames : [eventNames]\n for (const eventName of eventNamesArray) {\n let set = this.getListeners(eventName)\n if (!set) {\n set = new Set()\n const events = Events.eventsMap.get(this)\n events?.set(eventName, set)\n }\n\n set.add({ filter, listener: listener as EventListener })\n\n this.logIfDebugEnabled('subscribe', eventName)\n\n if (!isMetaEvent(eventName)) {\n forget(this.emitMetaEvent('listenerAdded', { eventName, listener: listener as EventListener }))\n }\n }\n\n return this.off.bind(this, eventNames, listener as EventListener)\n }\n\n /**\n * Subscribes a wildcard listener that receives all events.\n * @param listener - The callback to invoke for any event.\n * @returns An unsubscribe function.\n */\n onAny(listener: EventAnyListener) {\n this.logIfDebugEnabled('subscribeAny')\n\n Events.anyMap.get(this)?.add(listener as EventAnyListener)\n forget(this.emitMetaEvent('listenerAdded', { listener: listener as EventAnyListener }))\n return this.offAny.bind(this, listener as EventAnyListener)\n }\n\n /**\n * Subscribes a listener that will be invoked only once for the specified event, then automatically removed.\n * @param eventName - The event to listen for.\n * @param listener - The callback to invoke once.\n * @returns An unsubscribe function.\n */\n once<TEventName extends keyof TEventData>(eventName: TEventName, listener: EventListener<TEventData[TEventName]>) {\n const subListener = async (args: TEventData[TEventName]) => {\n this.off(eventName, subListener)\n await this.safeCallListener(eventName, args, listener)\n }\n this.on(eventName, subListener)\n return this.off.bind(this, eventName, subListener as EventListener)\n }\n\n private async emitInternal<TEventName extends keyof TEventData, TEventArgs extends TEventData[TEventName]>(\n eventName: TEventName,\n eventArgs: TEventArgs,\n filter?: TEventArgs,\n ) {\n if (isMetaEvent(eventName) && !this._canEmitMetaEvents) {\n throw new TypeError(NO_META_EVENT_ERROR_MESSAGE)\n }\n\n this.logIfDebugEnabled('emit', eventName, eventArgs)\n\n const listeners = this.getListeners(eventName) ?? new Set()\n /* v8 ignore start -- filter parameter is reserved for future use; anyListeners.has is a race condition guard */\n const filteredListeners = [...listeners.values()].filter(value => (isDefined(filter) ? isDefined(value.listener) : true)).map(info => info.listener)\n const anyListeners = assertEx(Events.anyMap.get(this))\n const staticListeners = [...filteredListeners]\n const staticAnyListeners = isMetaEvent(eventName) ? [] : [...anyListeners]\n\n await resolvedPromise\n await Promise.all([\n ...staticListeners.map(async (listener) => {\n await this.safeCallListener(eventName, eventArgs, listener)\n }),\n ...staticAnyListeners.map(async (listener) => {\n if (anyListeners.has(listener)) {\n await this.safeCallAnyListener(eventName, eventArgs, listener)\n }\n }),\n ])\n /* v8 ignore stop */\n }\n\n private async emitMetaEventInternal<TEventName extends keyof MetaEventData<TEventData>>(\n eventName: TEventName,\n eventArgs: MetaEventData<TEventData>[TEventName],\n ) {\n if (isMetaEvent(eventName) && !this._canEmitMetaEvents) {\n throw new TypeError('`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`')\n }\n\n this.logIfDebugEnabled('emit', eventName, eventArgs)\n\n const listeners = this.getListeners(eventName) ?? new Set()\n const filteredListeners = [...listeners.values()].map(info => info.listener)\n const anyListeners = assertEx(Events.anyMap.get(this))\n const staticListeners = [...filteredListeners]\n const staticAnyListeners = isMetaEvent(eventName) ? [] : [...anyListeners]\n\n await resolvedPromise\n await Promise.all([\n ...staticListeners.map(async (listener) => {\n await this.safeCallListener(eventName, eventArgs, listener)\n }),\n /* v8 ignore start -- race condition guard */\n ...staticAnyListeners.map(async (listener) => {\n if (anyListeners.has(listener)) {\n await this.safeCallAnyListener(eventName, eventArgs, listener)\n }\n }),\n /* v8 ignore stop */\n ])\n return true\n }\n\n private getListeners<TEventName extends keyof TEventData>(eventName: TEventName) {\n const events = assertEx(Events.eventsMap.get(this))\n if (!events.has(eventName)) {\n return\n }\n\n return events.get(eventName)\n }\n\n private async safeCallAnyListener<TEventData extends EventData, TEventName extends keyof EventData>(\n eventName: TEventName,\n eventArgs: TEventData[TEventName],\n listener: EventAnyListener<TEventData[TEventName]>,\n ) {\n try {\n return await listener(eventName, eventArgs)\n } catch (ex) {\n handleError(ex, (error) => {\n this.logger?.error(`Listener[${String(eventName)}] Excepted: ${error.message}`)\n })\n }\n }\n\n private async safeCallListener<TEventData extends EventData, TEventName extends keyof EventData>(\n eventName: TEventName,\n eventArgs: TEventData[TEventName],\n listener: EventListener<TEventData[TEventName]>,\n ) {\n try {\n return await listener(eventArgs)\n } catch (ex) {\n handleError(ex, (error) => {\n this.logger?.error(`Listener[${String(eventName)}] Excepted: ${error.message}`)\n })\n }\n }\n}\n"],"mappings":"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","names":["Base","eventName","Base"]}
@@ -1,10 +1,23 @@
1
1
  import type { Promisable } from '@xylabs/promise';
2
+ /** A valid event name, which can be any property key (string, number, or symbol). */
2
3
  export type EventName = PropertyKey;
4
+ /** The allowed types for event argument payloads. */
3
5
  export type EventArgs = string | number | object;
6
+ /** A mapping of event names to their corresponding event argument types. */
4
7
  export type EventData = {
5
8
  [key: EventName]: EventArgs;
6
9
  };
10
+ /** A function returned by event subscription methods that unsubscribes the listener when called. */
7
11
  export type EventUnsubscribeFunction = () => void;
12
+ /**
13
+ * A listener that receives all events regardless of name.
14
+ * @param eventName - The name of the emitted event.
15
+ * @param eventData - The data associated with the event.
16
+ */
8
17
  export type EventAnyListener<TEventArgs extends EventArgs = EventArgs> = (eventName: EventName, eventData: TEventArgs) => Promisable<void>;
18
+ /**
19
+ * A listener for a specific event type.
20
+ * @param eventData - The data associated with the event.
21
+ */
9
22
  export type EventListener<TEventArgs extends EventArgs = EventArgs> = (eventData: TEventArgs) => Promisable<void>;
10
23
  //# sourceMappingURL=Event.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Event.d.ts","sourceRoot":"","sources":["../../../src/model/Event.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,MAAM,MAAM,SAAS,GAAG,WAAW,CAAA;AACnC,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;AAChD,MAAM,MAAM,SAAS,GAAG;IAAE,CAAC,GAAG,EAAE,SAAS,GAAG,SAAS,CAAA;CAAE,CAAA;AACvD,MAAM,MAAM,wBAAwB,GAAG,MAAM,IAAI,CAAA;AACjD,MAAM,MAAM,gBAAgB,CAAC,UAAU,SAAS,SAAS,GAAG,SAAS,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,KAAK,UAAU,CAAC,IAAI,CAAC,CAAA;AAC1I,MAAM,MAAM,aAAa,CAAC,UAAU,SAAS,SAAS,GAAG,SAAS,IAAI,CAAC,SAAS,EAAE,UAAU,KAAK,UAAU,CAAC,IAAI,CAAC,CAAA"}
1
+ {"version":3,"file":"Event.d.ts","sourceRoot":"","sources":["../../../src/model/Event.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,qFAAqF;AACrF,MAAM,MAAM,SAAS,GAAG,WAAW,CAAA;AAEnC,qDAAqD;AACrD,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;AAEhD,4EAA4E;AAC5E,MAAM,MAAM,SAAS,GAAG;IAAE,CAAC,GAAG,EAAE,SAAS,GAAG,SAAS,CAAA;CAAE,CAAA;AAEvD,oGAAoG;AACpG,MAAM,MAAM,wBAAwB,GAAG,MAAM,IAAI,CAAA;AAEjD;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,CAAC,UAAU,SAAS,SAAS,GAAG,SAAS,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,KAAK,UAAU,CAAC,IAAI,CAAC,CAAA;AAE1I;;;GAGG;AACH,MAAM,MAAM,aAAa,CAAC,UAAU,SAAS,SAAS,GAAG,SAAS,IAAI,CAAC,SAAS,EAAE,UAAU,KAAK,UAAU,CAAC,IAAI,CAAC,CAAA"}
@@ -1,14 +1,25 @@
1
1
  import type { EventAnyListener, EventData, EventListener, EventUnsubscribeFunction } from './Event.ts';
2
+ /** Interface for a typed event emitter that supports subscribing, unsubscribing, and emitting events. */
2
3
  export interface EventEmitter<T extends EventData> {
4
+ /** Type-level reference to the event data shape for external type queries. */
3
5
  eventData: T;
6
+ /** Removes all listeners for the specified event name(s). */
4
7
  clearListeners(eventNames: keyof T | (keyof T)[]): void;
8
+ /** Emits an event, invoking all registered listeners concurrently. */
5
9
  emit<TEventName extends keyof T>(eventName: TEventName, eventArgs: T[TEventName]): Promise<void>;
10
+ /** Emits an event, invoking all registered listeners sequentially in order. */
6
11
  emitSerial<TEventName extends keyof T>(eventName: TEventName, eventArgs: T[TEventName]): Promise<void>;
12
+ /** Returns the total number of listeners registered for the specified event name(s). */
7
13
  listenerCount(eventNames: keyof T | (keyof T)[]): number;
14
+ /** Removes a specific listener from the specified event name(s). */
8
15
  off<TEventName extends keyof T>(eventNames: TEventName | TEventName[], listener: EventListener<T[TEventName]>): void;
16
+ /** Removes a wildcard listener that was receiving all events. */
9
17
  offAny(listener: EventAnyListener | Promise<void>): void;
18
+ /** Subscribes a listener to the specified event name(s) and returns an unsubscribe function. */
10
19
  on<TEventName extends keyof T>(eventNames: TEventName | TEventName[], listener: EventListener<T[TEventName]>): EventUnsubscribeFunction;
20
+ /** Subscribes a wildcard listener that receives all events and returns an unsubscribe function. */
11
21
  onAny(listener: EventAnyListener): EventUnsubscribeFunction;
22
+ /** Subscribes a listener that will be invoked only once for the specified event, then automatically removed. */
12
23
  once<TEventName extends keyof T>(eventName: TEventName, listener: EventListener<T[TEventName]>): EventUnsubscribeFunction;
13
24
  }
14
25
  //# sourceMappingURL=EventEmitter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EventEmitter.d.ts","sourceRoot":"","sources":["../../../src/model/EventEmitter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAAE,SAAS,EAAE,aAAa,EAAE,wBAAwB,EACrE,MAAM,YAAY,CAAA;AAEnB,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,SAAS;IAC/C,SAAS,EAAE,CAAC,CAAA;IACZ,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,IAAI,CAAA;IACvD,IAAI,CAAC,UAAU,SAAS,MAAM,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAChG,UAAU,CAAC,UAAU,SAAS,MAAM,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACtG,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,MAAM,CAAA;IACxD,GAAG,CAAC,UAAU,SAAS,MAAM,CAAC,EAAE,UAAU,EAAE,UAAU,GAAG,UAAU,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,CAAA;IACpH,MAAM,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACxD,EAAE,CAAC,UAAU,SAAS,MAAM,CAAC,EAC3B,UAAU,EAAE,UAAU,GAAG,UAAU,EAAE,EACrC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GACrC,wBAAwB,CAAA;IAC3B,KAAK,CAAC,QAAQ,EAAE,gBAAgB,GAAG,wBAAwB,CAAA;IAC3D,IAAI,CAAC,UAAU,SAAS,MAAM,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,wBAAwB,CAAA;CAC1H"}
1
+ {"version":3,"file":"EventEmitter.d.ts","sourceRoot":"","sources":["../../../src/model/EventEmitter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAAE,SAAS,EAAE,aAAa,EAAE,wBAAwB,EACrE,MAAM,YAAY,CAAA;AAEnB,yGAAyG;AACzG,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,SAAS;IAC/C,8EAA8E;IAC9E,SAAS,EAAE,CAAC,CAAA;IACZ,6DAA6D;IAC7D,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,IAAI,CAAA;IACvD,sEAAsE;IACtE,IAAI,CAAC,UAAU,SAAS,MAAM,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAChG,+EAA+E;IAC/E,UAAU,CAAC,UAAU,SAAS,MAAM,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACtG,wFAAwF;IACxF,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,MAAM,CAAA;IACxD,oEAAoE;IACpE,GAAG,CAAC,UAAU,SAAS,MAAM,CAAC,EAAE,UAAU,EAAE,UAAU,GAAG,UAAU,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,CAAA;IACpH,iEAAiE;IACjE,MAAM,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACxD,gGAAgG;IAChG,EAAE,CAAC,UAAU,SAAS,MAAM,CAAC,EAC3B,UAAU,EAAE,UAAU,GAAG,UAAU,EAAE,EACrC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GACrC,wBAAwB,CAAA;IAC3B,mGAAmG;IACnG,KAAK,CAAC,QAAQ,EAAE,gBAAgB,GAAG,wBAAwB,CAAA;IAC3D,gHAAgH;IAChH,IAAI,CAAC,UAAU,SAAS,MAAM,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,wBAAwB,CAAA;CAC1H"}