@xyo-network/module-events 2.75.0 → 2.75.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/browser/Events/Events.d.cts +63 -0
  2. package/dist/browser/Events/Events.d.cts.map +1 -0
  3. package/dist/browser/Events/Events.js +29 -30
  4. package/dist/browser/Events/Events.js.map +1 -1
  5. package/dist/browser/Events/index.d.cts +2 -0
  6. package/dist/browser/Events/index.d.cts.map +1 -0
  7. package/dist/browser/Events/index.js +1 -261
  8. package/dist/browser/Events/index.js.map +1 -1
  9. package/dist/browser/index.d.cts +3 -0
  10. package/dist/browser/index.d.cts.map +1 -0
  11. package/dist/browser/index.js +2 -261
  12. package/dist/browser/index.js.map +1 -1
  13. package/dist/browser/model/Event.d.cts +22 -0
  14. package/dist/browser/model/Event.d.cts.map +1 -0
  15. package/dist/browser/model/index.d.cts +2 -0
  16. package/dist/browser/model/index.d.cts.map +1 -0
  17. package/dist/browser/model/index.js +1 -0
  18. package/dist/browser/model/index.js.map +1 -1
  19. package/dist/docs.json +5785 -0
  20. package/dist/node/Events/Events.d.cts +63 -0
  21. package/dist/node/Events/Events.d.cts.map +1 -0
  22. package/dist/node/Events/Events.js +45 -36
  23. package/dist/node/Events/Events.js.map +1 -1
  24. package/dist/node/Events/Events.mjs +44 -36
  25. package/dist/node/Events/Events.mjs.map +1 -1
  26. package/dist/node/Events/index.d.cts +2 -0
  27. package/dist/node/Events/index.d.cts.map +1 -0
  28. package/dist/node/Events/index.js +276 -3
  29. package/dist/node/Events/index.js.map +1 -1
  30. package/dist/node/Events/index.mjs +268 -1
  31. package/dist/node/Events/index.mjs.map +1 -1
  32. package/dist/node/index.d.cts +3 -0
  33. package/dist/node/index.d.cts.map +1 -0
  34. package/dist/node/index.js +276 -5
  35. package/dist/node/index.js.map +1 -1
  36. package/dist/node/index.mjs +268 -2
  37. package/dist/node/index.mjs.map +1 -1
  38. package/dist/node/model/Event.d.cts +22 -0
  39. package/dist/node/model/Event.d.cts.map +1 -0
  40. package/dist/node/model/Event.js +2 -0
  41. package/dist/node/model/Event.js.map +1 -1
  42. package/dist/node/model/index.d.cts +2 -0
  43. package/dist/node/model/index.d.cts.map +1 -0
  44. package/dist/node/model/index.js +2 -6
  45. package/dist/node/model/index.js.map +1 -1
  46. package/dist/node/model/index.mjs +0 -1
  47. package/dist/node/model/index.mjs.map +1 -1
  48. package/package.json +10 -10
@@ -0,0 +1,63 @@
1
+ import { Base, BaseParams } from '@xyo-network/core';
2
+ import { EventAnyListener, EventArgs, EventData, EventFunctions, EventListener, EventName } from '../model';
3
+ /**
4
+ Emittery can collect and log debug information.
5
+
6
+ To enable this feature set the `DEBUG` environment variable to `emittery` or `*`. Additionally, you can set the static `isDebugEnabled` variable to true on the Emittery class, or `myEmitter.debug.enabled` on an instance of it for debugging a single instance.
7
+
8
+ See API for more information on how debugging works.
9
+ */
10
+ export type DebugLogger = (type: string, debugName: string, eventName?: EventName, eventData?: EventArgs) => void;
11
+ export type EventListenerInfo<TEventArgs extends EventArgs = EventArgs> = {
12
+ filter?: TEventArgs;
13
+ listener: EventListener<TEventArgs>;
14
+ };
15
+ /**
16
+ Configure debug options of an instance.
17
+ */
18
+ export type DebugOptions = {
19
+ enabled?: boolean;
20
+ logger?: DebugLogger;
21
+ readonly name: string;
22
+ };
23
+ export type MetaEventData<TEventData extends EventData> = {
24
+ listenerAdded: {
25
+ eventName?: keyof TEventData;
26
+ listener: EventListener<TEventData[keyof TEventData]> | EventAnyListener<TEventData[keyof TEventData]>;
27
+ };
28
+ listenerRemoved: {
29
+ eventName?: keyof TEventData;
30
+ listener: EventListener<TEventData[keyof TEventData]> | EventAnyListener<TEventData[keyof TEventData]>;
31
+ };
32
+ };
33
+ export type EventsParams = BaseParams<{
34
+ readonly debug?: DebugOptions;
35
+ }>;
36
+ export declare class Events<TEventData extends EventData = EventData> extends Base<EventsParams> implements EventFunctions<TEventData> {
37
+ protected static anyMap: WeakMap<object, Set<EventAnyListener>>;
38
+ protected static eventsMap: WeakMap<object, Map<PropertyKey, Set<EventListenerInfo<EventArgs>>>>;
39
+ private static canEmitMetaEvents;
40
+ private static isGlobalDebugEnabled;
41
+ eventData: TEventData;
42
+ constructor(params?: EventsParams);
43
+ static get isDebugEnabled(): boolean;
44
+ static set isDebugEnabled(newValue: boolean);
45
+ get debug(): DebugOptions | undefined;
46
+ clearListeners(eventNames: keyof TEventData | (keyof TEventData)[]): void;
47
+ emit<TEventName extends keyof TEventData>(eventName: TEventName, eventArgs: TEventData[TEventName]): Promise<void>;
48
+ emitMetaEvent<TEventName extends keyof MetaEventData<TEventData>>(eventName: TEventName, eventArgs: MetaEventData<TEventData>[TEventName]): Promise<void>;
49
+ emitSerial<TEventName extends keyof TEventData>(eventName: TEventName, eventArgs: TEventData[TEventName]): Promise<void>;
50
+ listenerCount(eventNames?: keyof TEventData | (keyof TEventData)[]): number;
51
+ logIfDebugEnabled<TEventName extends EventName>(type: string, eventName?: TEventName, eventArgs?: EventArgs): void;
52
+ off<TEventName extends keyof TEventData, TEventListener = EventListener<TEventData[TEventName]>>(eventNames: TEventName | TEventName[], listener: TEventListener): void;
53
+ offAny(listener: EventAnyListener): void;
54
+ on<TEventName extends keyof TEventData = keyof TEventData>(eventNames: TEventName | TEventName[], listener: EventListener<TEventData[TEventName]>, filter?: TEventData[TEventName]): () => void;
55
+ onAny(listener: EventAnyListener): () => void;
56
+ once<TEventName extends keyof TEventData>(eventName: TEventName, listener: EventListener<TEventData[TEventName]>): () => void;
57
+ private emitInternal;
58
+ private emitMetaEventInternal;
59
+ private getListeners;
60
+ private safeCallAnyListener;
61
+ private safeCallListener;
62
+ }
63
+ //# sourceMappingURL=Events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Events.d.ts","sourceRoot":"","sources":["../../../src/Events/Events.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,8 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/Events/Events.ts
19
21
  var Events_exports = {};
20
22
  __export(Events_exports, {
21
23
  Events: () => Events
@@ -25,9 +27,9 @@ var import_assert = require("@xylabs/assert");
25
27
  var import_forget = require("@xylabs/forget");
26
28
  var import_core = require("@xyo-network/core");
27
29
  var import_error = require("@xyo-network/error");
28
- const resolvedPromise = Promise.resolve();
29
- const isMetaEvent = (eventName) => eventName === "listenerAdded" || eventName === "listenerRemoved";
30
- class Events extends import_core.Base {
30
+ var resolvedPromise = Promise.resolve();
31
+ var isMetaEvent = (eventName) => eventName === "listenerAdded" || eventName === "listenerRemoved";
32
+ var Events = class _Events extends import_core.Base {
31
33
  static anyMap = /* @__PURE__ */ new WeakMap();
32
34
  static eventsMap = /* @__PURE__ */ new WeakMap();
33
35
  static canEmitMetaEvents = false;
@@ -57,23 +59,25 @@ class Events extends import_core.Base {
57
59
  });
58
60
  }
59
61
  super(mutatedParams);
60
- Events.anyMap.set(this, /* @__PURE__ */ new Set());
61
- Events.eventsMap.set(this, /* @__PURE__ */ new Map());
62
+ _Events.anyMap.set(this, /* @__PURE__ */ new Set());
63
+ _Events.eventsMap.set(this, /* @__PURE__ */ new Map());
62
64
  }
63
65
  static get isDebugEnabled() {
64
- if (typeof globalThis.process?.env !== "object") {
65
- return Events.isGlobalDebugEnabled;
66
+ var _a;
67
+ if (typeof ((_a = globalThis.process) == null ? void 0 : _a.env) !== "object") {
68
+ return _Events.isGlobalDebugEnabled;
66
69
  }
67
70
  const { env } = globalThis.process ?? { env: {} };
68
- return env.DEBUG === "events" || env.DEBUG === "*" || Events.isGlobalDebugEnabled;
71
+ return env.DEBUG === "events" || env.DEBUG === "*" || _Events.isGlobalDebugEnabled;
69
72
  }
70
73
  static set isDebugEnabled(newValue) {
71
- Events.isGlobalDebugEnabled = newValue;
74
+ _Events.isGlobalDebugEnabled = newValue;
72
75
  }
73
76
  get debug() {
74
77
  return this.params.debug;
75
78
  }
76
79
  clearListeners(eventNames) {
80
+ var _a, _b;
77
81
  const eventNamesArray = Array.isArray(eventNames) ? eventNames : [eventNames];
78
82
  for (const eventName of eventNamesArray) {
79
83
  this.logIfDebugEnabled("clear", eventName, void 0);
@@ -83,10 +87,10 @@ class Events extends import_core.Base {
83
87
  set.clear();
84
88
  }
85
89
  } else {
86
- Events.anyMap.get(this)?.clear();
87
- for (const [eventName2, listeners] of (0, import_assert.assertEx)(Events.eventsMap.get(this)).entries()) {
90
+ (_a = _Events.anyMap.get(this)) == null ? void 0 : _a.clear();
91
+ for (const [eventName2, listeners] of (0, import_assert.assertEx)(_Events.eventsMap.get(this)).entries()) {
88
92
  listeners.clear();
89
- Events.eventsMap.get(this)?.delete(eventName2);
93
+ (_b = _Events.eventsMap.get(this)) == null ? void 0 : _b.delete(eventName2);
90
94
  }
91
95
  }
92
96
  }
@@ -97,15 +101,15 @@ class Events extends import_core.Base {
97
101
  async emitMetaEvent(eventName, eventArgs) {
98
102
  if (isMetaEvent(eventName)) {
99
103
  try {
100
- Events.canEmitMetaEvents = true;
104
+ _Events.canEmitMetaEvents = true;
101
105
  await this.emitMetaEventInternal(eventName, eventArgs);
102
106
  } finally {
103
- Events.canEmitMetaEvents = false;
107
+ _Events.canEmitMetaEvents = false;
104
108
  }
105
109
  }
106
110
  }
107
111
  async emitSerial(eventName, eventArgs) {
108
- if (isMetaEvent(eventName) && !Events.canEmitMetaEvents) {
112
+ if (isMetaEvent(eventName) && !_Events.canEmitMetaEvents) {
109
113
  throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");
110
114
  }
111
115
  const filterMatch = (args, filter) => {
@@ -122,7 +126,7 @@ class Events extends import_core.Base {
122
126
  this.logIfDebugEnabled("emitSerial", eventName, eventArgs);
123
127
  const listeners = this.getListeners(eventName) ?? /* @__PURE__ */ new Set();
124
128
  const filteredListeners = [...listeners.values()].filter((value) => value.filter ? filterMatch(eventArgs, value.filter) : true).map((info) => info.listener);
125
- const anyListeners = (0, import_assert.assertEx)(Events.anyMap.get(this));
129
+ const anyListeners = (0, import_assert.assertEx)(_Events.anyMap.get(this));
126
130
  const staticListeners = [...filteredListeners];
127
131
  const staticAnyListeners = [...anyListeners];
128
132
  await resolvedPromise;
@@ -135,23 +139,25 @@ class Events extends import_core.Base {
135
139
  }
136
140
  //TODO: Make test for this
137
141
  listenerCount(eventNames) {
142
+ var _a;
138
143
  const eventNamesArray = Array.isArray(eventNames) ? eventNames : [eventNames];
139
144
  let count = 0;
140
145
  for (const eventName of eventNamesArray) {
141
146
  if (typeof eventName === "string") {
142
- count += (0, import_assert.assertEx)(Events.anyMap.get(this)).size + (this.getListeners(eventName)?.size ?? 0);
147
+ count += (0, import_assert.assertEx)(_Events.anyMap.get(this)).size + (((_a = this.getListeners(eventName)) == null ? void 0 : _a.size) ?? 0);
143
148
  continue;
144
149
  }
145
- count += (0, import_assert.assertEx)(Events.anyMap.get(this)).size;
146
- for (const value of (0, import_assert.assertEx)(Events.eventsMap.get(this)).values()) {
150
+ count += (0, import_assert.assertEx)(_Events.anyMap.get(this)).size;
151
+ for (const value of (0, import_assert.assertEx)(_Events.eventsMap.get(this)).values()) {
147
152
  count += value.size;
148
153
  }
149
154
  }
150
155
  return count;
151
156
  }
152
157
  logIfDebugEnabled(type, eventName, eventArgs) {
153
- if (Events.isDebugEnabled || this.debug?.enabled) {
154
- this.debug?.logger?.(type, this.debug.name, eventName, eventArgs);
158
+ var _a, _b, _c;
159
+ if (_Events.isDebugEnabled || ((_a = this.debug) == null ? void 0 : _a.enabled)) {
160
+ (_c = (_b = this.debug) == null ? void 0 : _b.logger) == null ? void 0 : _c.call(_b, type, this.debug.name, eventName, eventArgs);
155
161
  }
156
162
  }
157
163
  off(eventNames, listener) {
@@ -161,8 +167,8 @@ class Events extends import_core.Base {
161
167
  if (set) {
162
168
  set.delete(listener);
163
169
  if (set.size === 0) {
164
- const events = Events.eventsMap.get(this);
165
- events?.delete(eventName);
170
+ const events = _Events.eventsMap.get(this);
171
+ events == null ? void 0 : events.delete(eventName);
166
172
  }
167
173
  }
168
174
  this.logIfDebugEnabled("unsubscribe", eventName, void 0);
@@ -173,8 +179,8 @@ class Events extends import_core.Base {
173
179
  }
174
180
  offAny(listener) {
175
181
  this.logIfDebugEnabled("unsubscribeAny", void 0, void 0);
176
- const typedMap = Events.anyMap.get(this);
177
- typedMap?.delete(listener);
182
+ const typedMap = _Events.anyMap.get(this);
183
+ typedMap == null ? void 0 : typedMap.delete(listener);
178
184
  (0, import_forget.forget)(this.emitMetaEvent("listenerRemoved", { listener }));
179
185
  }
180
186
  on(eventNames, listener, filter) {
@@ -183,8 +189,8 @@ class Events extends import_core.Base {
183
189
  let set = this.getListeners(eventName);
184
190
  if (!set) {
185
191
  set = /* @__PURE__ */ new Set();
186
- const events = Events.eventsMap.get(this);
187
- events?.set(eventName, set);
192
+ const events = _Events.eventsMap.get(this);
193
+ events == null ? void 0 : events.set(eventName, set);
188
194
  }
189
195
  set.add({ filter, listener });
190
196
  this.logIfDebugEnabled("subscribe", eventName, void 0);
@@ -195,8 +201,9 @@ class Events extends import_core.Base {
195
201
  return this.off.bind(this, eventNames, listener);
196
202
  }
197
203
  onAny(listener) {
204
+ var _a;
198
205
  this.logIfDebugEnabled("subscribeAny", void 0, void 0);
199
- Events.anyMap.get(this)?.add(listener);
206
+ (_a = _Events.anyMap.get(this)) == null ? void 0 : _a.add(listener);
200
207
  (0, import_forget.forget)(this.emitMetaEvent("listenerAdded", { listener }));
201
208
  return this.offAny.bind(this, listener);
202
209
  }
@@ -209,13 +216,13 @@ class Events extends import_core.Base {
209
216
  return this.off.bind(this, eventName, subListener);
210
217
  }
211
218
  async emitInternal(eventName, eventArgs, filter) {
212
- if (isMetaEvent(eventName) && !Events.canEmitMetaEvents) {
219
+ if (isMetaEvent(eventName) && !_Events.canEmitMetaEvents) {
213
220
  throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");
214
221
  }
215
222
  this.logIfDebugEnabled("emit", eventName, eventArgs);
216
223
  const listeners = this.getListeners(eventName) ?? /* @__PURE__ */ new Set();
217
224
  const filteredListeners = [...listeners.values()].filter((value) => filter ? value.listener : true).map((info) => info.listener);
218
- const anyListeners = (0, import_assert.assertEx)(Events.anyMap.get(this));
225
+ const anyListeners = (0, import_assert.assertEx)(_Events.anyMap.get(this));
219
226
  const staticListeners = [...filteredListeners];
220
227
  const staticAnyListeners = isMetaEvent(eventName) ? [] : [...anyListeners];
221
228
  await resolvedPromise;
@@ -231,13 +238,13 @@ class Events extends import_core.Base {
231
238
  ]);
232
239
  }
233
240
  async emitMetaEventInternal(eventName, eventArgs) {
234
- if (isMetaEvent(eventName) && !Events.canEmitMetaEvents) {
241
+ if (isMetaEvent(eventName) && !_Events.canEmitMetaEvents) {
235
242
  throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");
236
243
  }
237
244
  this.logIfDebugEnabled("emit", eventName, eventArgs);
238
245
  const listeners = this.getListeners(eventName) ?? /* @__PURE__ */ new Set();
239
246
  const filteredListeners = [...listeners.values()].map((info) => info.listener);
240
- const anyListeners = (0, import_assert.assertEx)(Events.anyMap.get(this));
247
+ const anyListeners = (0, import_assert.assertEx)(_Events.anyMap.get(this));
241
248
  const staticListeners = [...filteredListeners];
242
249
  const staticAnyListeners = isMetaEvent(eventName) ? [] : [...anyListeners];
243
250
  await resolvedPromise;
@@ -253,7 +260,7 @@ class Events extends import_core.Base {
253
260
  ]);
254
261
  }
255
262
  getListeners(eventName) {
256
- const events = (0, import_assert.assertEx)(Events.eventsMap.get(this));
263
+ const events = (0, import_assert.assertEx)(_Events.eventsMap.get(this));
257
264
  if (!events.has(eventName)) {
258
265
  return;
259
266
  }
@@ -264,7 +271,8 @@ class Events extends import_core.Base {
264
271
  return await listener(eventName, eventArgs);
265
272
  } catch (ex) {
266
273
  (0, import_error.handleError)(ex, (error) => {
267
- this.logger?.error(`Listener[${String(eventName)}] Excepted: ${error.message}`);
274
+ var _a;
275
+ (_a = this.logger) == null ? void 0 : _a.error(`Listener[${String(eventName)}] Excepted: ${error.message}`);
268
276
  });
269
277
  }
270
278
  }
@@ -273,11 +281,12 @@ class Events extends import_core.Base {
273
281
  return await listener(eventArgs);
274
282
  } catch (ex) {
275
283
  (0, import_error.handleError)(ex, (error) => {
276
- this.logger?.error(`Listener[${String(eventName)}] Excepted: ${error.message}`);
284
+ var _a;
285
+ (_a = this.logger) == null ? void 0 : _a.error(`Listener[${String(eventName)}] Excepted: ${error.message}`);
277
286
  });
278
287
  }
279
288
  }
280
- }
289
+ };
281
290
  // Annotate the CommonJS export names for ESM import in node:
282
291
  0 && (module.exports = {
283
292
  Events
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/Events/Events.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { forget } from '@xylabs/forget'\nimport { Base, BaseParams } from '@xyo-network/core'\nimport { handleError } from '@xyo-network/error'\n\nimport { EventAnyListener, EventArgs, EventData, EventFunctions, EventListener, EventName } from '../model'\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 on 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\n/**\nConfigure debug options of an instance.\n*/\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 EventFunctions<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 canEmitMetaEvents = false\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 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 let eventNameString: string | undefined\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 if (typeof eventName === 'symbol' || typeof eventName === 'number') {\n eventNameString = eventName.toString()\n } else {\n eventNameString = eventName\n }\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 ?? { env: {} }\n return env.DEBUG === 'events' || env.DEBUG === '*' || Events.isGlobalDebugEnabled\n }\n\n static set isDebugEnabled(newValue) {\n Events.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, undefined)\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 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 Events.canEmitMetaEvents = true\n await this.emitMetaEventInternal(eventName, eventArgs)\n } finally {\n Events.canEmitMetaEvents = false\n }\n }\n }\n\n async emitSerial<TEventName extends keyof TEventData>(eventName: TEventName, eventArgs: TEventData[TEventName]) {\n if (isMetaEvent(eventName) && !Events.canEmitMetaEvents) {\n throw new TypeError('`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`')\n }\n\n const filterMatch = (args: TEventData[TEventName], filter: TEventData[TEventName]) => {\n if (filter) {\n switch (typeof filter) {\n case 'object':\n return Object.entries(args).reduce((prev, [key, value]) => ((filter as Record<PropertyKey, unknown>)[key] === value ? true : prev), false)\n default:\n return args === filter\n }\n }\n return true\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) => (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>\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, undefined)\n\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', undefined, undefined)\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, undefined)\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', undefined, undefined)\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) && !Events.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()].filter((value) => (filter ? 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 }\n\n private async emitMetaEventInternal<TEventName extends keyof MetaEventData<TEventData>>(\n eventName: TEventName,\n eventArgs: MetaEventData<TEventData>[TEventName],\n ) {\n if (isMetaEvent(eventName) && !Events.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 ...staticAnyListeners.map(async (listener) => {\n if (anyListeners.has(listener)) {\n await this.safeCallAnyListener(eventName, eventArgs, listener)\n }\n }),\n ])\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":["eventName"]}
1
+ {"version":3,"sources":["../../../src/Events/Events.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { forget } from '@xylabs/forget'\nimport { Base, BaseParams } from '@xyo-network/core'\nimport { handleError } from '@xyo-network/error'\n\nimport { EventAnyListener, EventArgs, EventData, EventFunctions, EventListener, EventName } from '../model'\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 on 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\n/**\nConfigure debug options of an instance.\n*/\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 EventFunctions<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 canEmitMetaEvents = false\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 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 let eventNameString: string | undefined\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 if (typeof eventName === 'symbol' || typeof eventName === 'number') {\n eventNameString = eventName.toString()\n } else {\n eventNameString = eventName\n }\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 ?? { env: {} }\n return env.DEBUG === 'events' || env.DEBUG === '*' || Events.isGlobalDebugEnabled\n }\n\n static set isDebugEnabled(newValue) {\n Events.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, undefined)\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 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 Events.canEmitMetaEvents = true\n await this.emitMetaEventInternal(eventName, eventArgs)\n } finally {\n Events.canEmitMetaEvents = false\n }\n }\n }\n\n async emitSerial<TEventName extends keyof TEventData>(eventName: TEventName, eventArgs: TEventData[TEventName]) {\n if (isMetaEvent(eventName) && !Events.canEmitMetaEvents) {\n throw new TypeError('`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`')\n }\n\n const filterMatch = (args: TEventData[TEventName], filter: TEventData[TEventName]) => {\n if (filter) {\n switch (typeof filter) {\n case 'object':\n return Object.entries(args).reduce((prev, [key, value]) => ((filter as Record<PropertyKey, unknown>)[key] === value ? true : prev), false)\n default:\n return args === filter\n }\n }\n return true\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) => (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>\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, undefined)\n\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', undefined, undefined)\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, undefined)\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', undefined, undefined)\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) && !Events.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()].filter((value) => (filter ? 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 }\n\n private async emitMetaEventInternal<TEventName extends keyof MetaEventData<TEventData>>(\n eventName: TEventName,\n eventArgs: MetaEventData<TEventData>[TEventName],\n ) {\n if (isMetaEvent(eventName) && !Events.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 ...staticAnyListeners.map(async (listener) => {\n if (anyListeners.has(listener)) {\n await this.safeCallAnyListener(eventName, eventArgs, listener)\n }\n }),\n ])\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":["eventName"]}
@@ -1,10 +1,11 @@
1
+ // src/Events/Events.ts
1
2
  import { assertEx } from "@xylabs/assert";
2
3
  import { forget } from "@xylabs/forget";
3
4
  import { Base } from "@xyo-network/core";
4
5
  import { handleError } from "@xyo-network/error";
5
- const resolvedPromise = Promise.resolve();
6
- const isMetaEvent = (eventName) => eventName === "listenerAdded" || eventName === "listenerRemoved";
7
- class Events extends Base {
6
+ var resolvedPromise = Promise.resolve();
7
+ var isMetaEvent = (eventName) => eventName === "listenerAdded" || eventName === "listenerRemoved";
8
+ var Events = class _Events extends Base {
8
9
  static anyMap = /* @__PURE__ */ new WeakMap();
9
10
  static eventsMap = /* @__PURE__ */ new WeakMap();
10
11
  static canEmitMetaEvents = false;
@@ -34,23 +35,25 @@ class Events extends Base {
34
35
  });
35
36
  }
36
37
  super(mutatedParams);
37
- Events.anyMap.set(this, /* @__PURE__ */ new Set());
38
- Events.eventsMap.set(this, /* @__PURE__ */ new Map());
38
+ _Events.anyMap.set(this, /* @__PURE__ */ new Set());
39
+ _Events.eventsMap.set(this, /* @__PURE__ */ new Map());
39
40
  }
40
41
  static get isDebugEnabled() {
41
- if (typeof globalThis.process?.env !== "object") {
42
- return Events.isGlobalDebugEnabled;
42
+ var _a;
43
+ if (typeof ((_a = globalThis.process) == null ? void 0 : _a.env) !== "object") {
44
+ return _Events.isGlobalDebugEnabled;
43
45
  }
44
46
  const { env } = globalThis.process ?? { env: {} };
45
- return env.DEBUG === "events" || env.DEBUG === "*" || Events.isGlobalDebugEnabled;
47
+ return env.DEBUG === "events" || env.DEBUG === "*" || _Events.isGlobalDebugEnabled;
46
48
  }
47
49
  static set isDebugEnabled(newValue) {
48
- Events.isGlobalDebugEnabled = newValue;
50
+ _Events.isGlobalDebugEnabled = newValue;
49
51
  }
50
52
  get debug() {
51
53
  return this.params.debug;
52
54
  }
53
55
  clearListeners(eventNames) {
56
+ var _a, _b;
54
57
  const eventNamesArray = Array.isArray(eventNames) ? eventNames : [eventNames];
55
58
  for (const eventName of eventNamesArray) {
56
59
  this.logIfDebugEnabled("clear", eventName, void 0);
@@ -60,10 +63,10 @@ class Events extends Base {
60
63
  set.clear();
61
64
  }
62
65
  } else {
63
- Events.anyMap.get(this)?.clear();
64
- for (const [eventName2, listeners] of assertEx(Events.eventsMap.get(this)).entries()) {
66
+ (_a = _Events.anyMap.get(this)) == null ? void 0 : _a.clear();
67
+ for (const [eventName2, listeners] of assertEx(_Events.eventsMap.get(this)).entries()) {
65
68
  listeners.clear();
66
- Events.eventsMap.get(this)?.delete(eventName2);
69
+ (_b = _Events.eventsMap.get(this)) == null ? void 0 : _b.delete(eventName2);
67
70
  }
68
71
  }
69
72
  }
@@ -74,15 +77,15 @@ class Events extends Base {
74
77
  async emitMetaEvent(eventName, eventArgs) {
75
78
  if (isMetaEvent(eventName)) {
76
79
  try {
77
- Events.canEmitMetaEvents = true;
80
+ _Events.canEmitMetaEvents = true;
78
81
  await this.emitMetaEventInternal(eventName, eventArgs);
79
82
  } finally {
80
- Events.canEmitMetaEvents = false;
83
+ _Events.canEmitMetaEvents = false;
81
84
  }
82
85
  }
83
86
  }
84
87
  async emitSerial(eventName, eventArgs) {
85
- if (isMetaEvent(eventName) && !Events.canEmitMetaEvents) {
88
+ if (isMetaEvent(eventName) && !_Events.canEmitMetaEvents) {
86
89
  throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");
87
90
  }
88
91
  const filterMatch = (args, filter) => {
@@ -99,7 +102,7 @@ class Events extends Base {
99
102
  this.logIfDebugEnabled("emitSerial", eventName, eventArgs);
100
103
  const listeners = this.getListeners(eventName) ?? /* @__PURE__ */ new Set();
101
104
  const filteredListeners = [...listeners.values()].filter((value) => value.filter ? filterMatch(eventArgs, value.filter) : true).map((info) => info.listener);
102
- const anyListeners = assertEx(Events.anyMap.get(this));
105
+ const anyListeners = assertEx(_Events.anyMap.get(this));
103
106
  const staticListeners = [...filteredListeners];
104
107
  const staticAnyListeners = [...anyListeners];
105
108
  await resolvedPromise;
@@ -112,23 +115,25 @@ class Events extends Base {
112
115
  }
113
116
  //TODO: Make test for this
114
117
  listenerCount(eventNames) {
118
+ var _a;
115
119
  const eventNamesArray = Array.isArray(eventNames) ? eventNames : [eventNames];
116
120
  let count = 0;
117
121
  for (const eventName of eventNamesArray) {
118
122
  if (typeof eventName === "string") {
119
- count += assertEx(Events.anyMap.get(this)).size + (this.getListeners(eventName)?.size ?? 0);
123
+ count += assertEx(_Events.anyMap.get(this)).size + (((_a = this.getListeners(eventName)) == null ? void 0 : _a.size) ?? 0);
120
124
  continue;
121
125
  }
122
- count += assertEx(Events.anyMap.get(this)).size;
123
- for (const value of assertEx(Events.eventsMap.get(this)).values()) {
126
+ count += assertEx(_Events.anyMap.get(this)).size;
127
+ for (const value of assertEx(_Events.eventsMap.get(this)).values()) {
124
128
  count += value.size;
125
129
  }
126
130
  }
127
131
  return count;
128
132
  }
129
133
  logIfDebugEnabled(type, eventName, eventArgs) {
130
- if (Events.isDebugEnabled || this.debug?.enabled) {
131
- this.debug?.logger?.(type, this.debug.name, eventName, eventArgs);
134
+ var _a, _b, _c;
135
+ if (_Events.isDebugEnabled || ((_a = this.debug) == null ? void 0 : _a.enabled)) {
136
+ (_c = (_b = this.debug) == null ? void 0 : _b.logger) == null ? void 0 : _c.call(_b, type, this.debug.name, eventName, eventArgs);
132
137
  }
133
138
  }
134
139
  off(eventNames, listener) {
@@ -138,8 +143,8 @@ class Events extends Base {
138
143
  if (set) {
139
144
  set.delete(listener);
140
145
  if (set.size === 0) {
141
- const events = Events.eventsMap.get(this);
142
- events?.delete(eventName);
146
+ const events = _Events.eventsMap.get(this);
147
+ events == null ? void 0 : events.delete(eventName);
143
148
  }
144
149
  }
145
150
  this.logIfDebugEnabled("unsubscribe", eventName, void 0);
@@ -150,8 +155,8 @@ class Events extends Base {
150
155
  }
151
156
  offAny(listener) {
152
157
  this.logIfDebugEnabled("unsubscribeAny", void 0, void 0);
153
- const typedMap = Events.anyMap.get(this);
154
- typedMap?.delete(listener);
158
+ const typedMap = _Events.anyMap.get(this);
159
+ typedMap == null ? void 0 : typedMap.delete(listener);
155
160
  forget(this.emitMetaEvent("listenerRemoved", { listener }));
156
161
  }
157
162
  on(eventNames, listener, filter) {
@@ -160,8 +165,8 @@ class Events extends Base {
160
165
  let set = this.getListeners(eventName);
161
166
  if (!set) {
162
167
  set = /* @__PURE__ */ new Set();
163
- const events = Events.eventsMap.get(this);
164
- events?.set(eventName, set);
168
+ const events = _Events.eventsMap.get(this);
169
+ events == null ? void 0 : events.set(eventName, set);
165
170
  }
166
171
  set.add({ filter, listener });
167
172
  this.logIfDebugEnabled("subscribe", eventName, void 0);
@@ -172,8 +177,9 @@ class Events extends Base {
172
177
  return this.off.bind(this, eventNames, listener);
173
178
  }
174
179
  onAny(listener) {
180
+ var _a;
175
181
  this.logIfDebugEnabled("subscribeAny", void 0, void 0);
176
- Events.anyMap.get(this)?.add(listener);
182
+ (_a = _Events.anyMap.get(this)) == null ? void 0 : _a.add(listener);
177
183
  forget(this.emitMetaEvent("listenerAdded", { listener }));
178
184
  return this.offAny.bind(this, listener);
179
185
  }
@@ -186,13 +192,13 @@ class Events extends Base {
186
192
  return this.off.bind(this, eventName, subListener);
187
193
  }
188
194
  async emitInternal(eventName, eventArgs, filter) {
189
- if (isMetaEvent(eventName) && !Events.canEmitMetaEvents) {
195
+ if (isMetaEvent(eventName) && !_Events.canEmitMetaEvents) {
190
196
  throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");
191
197
  }
192
198
  this.logIfDebugEnabled("emit", eventName, eventArgs);
193
199
  const listeners = this.getListeners(eventName) ?? /* @__PURE__ */ new Set();
194
200
  const filteredListeners = [...listeners.values()].filter((value) => filter ? value.listener : true).map((info) => info.listener);
195
- const anyListeners = assertEx(Events.anyMap.get(this));
201
+ const anyListeners = assertEx(_Events.anyMap.get(this));
196
202
  const staticListeners = [...filteredListeners];
197
203
  const staticAnyListeners = isMetaEvent(eventName) ? [] : [...anyListeners];
198
204
  await resolvedPromise;
@@ -208,13 +214,13 @@ class Events extends Base {
208
214
  ]);
209
215
  }
210
216
  async emitMetaEventInternal(eventName, eventArgs) {
211
- if (isMetaEvent(eventName) && !Events.canEmitMetaEvents) {
217
+ if (isMetaEvent(eventName) && !_Events.canEmitMetaEvents) {
212
218
  throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");
213
219
  }
214
220
  this.logIfDebugEnabled("emit", eventName, eventArgs);
215
221
  const listeners = this.getListeners(eventName) ?? /* @__PURE__ */ new Set();
216
222
  const filteredListeners = [...listeners.values()].map((info) => info.listener);
217
- const anyListeners = assertEx(Events.anyMap.get(this));
223
+ const anyListeners = assertEx(_Events.anyMap.get(this));
218
224
  const staticListeners = [...filteredListeners];
219
225
  const staticAnyListeners = isMetaEvent(eventName) ? [] : [...anyListeners];
220
226
  await resolvedPromise;
@@ -230,7 +236,7 @@ class Events extends Base {
230
236
  ]);
231
237
  }
232
238
  getListeners(eventName) {
233
- const events = assertEx(Events.eventsMap.get(this));
239
+ const events = assertEx(_Events.eventsMap.get(this));
234
240
  if (!events.has(eventName)) {
235
241
  return;
236
242
  }
@@ -241,7 +247,8 @@ class Events extends Base {
241
247
  return await listener(eventName, eventArgs);
242
248
  } catch (ex) {
243
249
  handleError(ex, (error) => {
244
- this.logger?.error(`Listener[${String(eventName)}] Excepted: ${error.message}`);
250
+ var _a;
251
+ (_a = this.logger) == null ? void 0 : _a.error(`Listener[${String(eventName)}] Excepted: ${error.message}`);
245
252
  });
246
253
  }
247
254
  }
@@ -250,11 +257,12 @@ class Events extends Base {
250
257
  return await listener(eventArgs);
251
258
  } catch (ex) {
252
259
  handleError(ex, (error) => {
253
- this.logger?.error(`Listener[${String(eventName)}] Excepted: ${error.message}`);
260
+ var _a;
261
+ (_a = this.logger) == null ? void 0 : _a.error(`Listener[${String(eventName)}] Excepted: ${error.message}`);
254
262
  });
255
263
  }
256
264
  }
257
- }
265
+ };
258
266
  export {
259
267
  Events
260
268
  };