@xyo-network/module-events 3.6.9 → 3.6.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/neutral/index.mjs +25 -74
- package/dist/neutral/index.mjs.map +1 -1
- package/package.json +10 -10
- package/src/Events/Events.ts +14 -14
package/dist/neutral/index.mjs
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
-
|
|
4
1
|
// src/Events/Events.ts
|
|
5
2
|
import { assertEx } from "@xylabs/assert";
|
|
6
3
|
import { handleError } from "@xylabs/error";
|
|
@@ -8,11 +5,8 @@ import { forget } from "@xylabs/forget";
|
|
|
8
5
|
import { Base } from "@xylabs/object";
|
|
9
6
|
var NO_META_EVENT_ERROR_MESSAGE = "`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`";
|
|
10
7
|
var resolvedPromise = Promise.resolve();
|
|
11
|
-
var isMetaEvent =
|
|
8
|
+
var isMetaEvent = (eventName) => eventName === "listenerAdded" || eventName === "listenerRemoved";
|
|
12
9
|
var Events = class _Events extends Base {
|
|
13
|
-
static {
|
|
14
|
-
__name(this, "Events");
|
|
15
|
-
}
|
|
16
10
|
static anyMap = /* @__PURE__ */ new WeakMap();
|
|
17
11
|
static eventsMap = /* @__PURE__ */ new WeakMap();
|
|
18
12
|
static canEmitMetaEvents = false;
|
|
@@ -20,9 +14,7 @@ var Events = class _Events extends Base {
|
|
|
20
14
|
// this is here to be able to query the type, not use
|
|
21
15
|
eventData = {};
|
|
22
16
|
constructor(params = {}) {
|
|
23
|
-
const mutatedParams = {
|
|
24
|
-
...params
|
|
25
|
-
};
|
|
17
|
+
const mutatedParams = { ...params };
|
|
26
18
|
if (mutatedParams.debug) {
|
|
27
19
|
mutatedParams.debug.logger = mutatedParams.debug.logger ?? ((type, debugName, eventName, eventData) => {
|
|
28
20
|
let eventDataString;
|
|
@@ -46,9 +38,7 @@ var Events = class _Events extends Base {
|
|
|
46
38
|
if (typeof globalThis.process?.env !== "object") {
|
|
47
39
|
return _Events.isGlobalDebugEnabled;
|
|
48
40
|
}
|
|
49
|
-
const { env } = globalThis.process ?? {
|
|
50
|
-
env: {}
|
|
51
|
-
};
|
|
41
|
+
const { env } = globalThis.process ?? { env: {} };
|
|
52
42
|
return env.DEBUG === "events" || env.DEBUG === "*" || _Events.isGlobalDebugEnabled;
|
|
53
43
|
}
|
|
54
44
|
static set isDebugEnabled(newValue) {
|
|
@@ -58,9 +48,7 @@ var Events = class _Events extends Base {
|
|
|
58
48
|
return this.params.debug;
|
|
59
49
|
}
|
|
60
50
|
clearListeners(eventNames) {
|
|
61
|
-
const eventNamesArray = Array.isArray(eventNames) ? eventNames : [
|
|
62
|
-
eventNames
|
|
63
|
-
];
|
|
51
|
+
const eventNamesArray = Array.isArray(eventNames) ? eventNames : [eventNames];
|
|
64
52
|
for (const eventName of eventNamesArray) {
|
|
65
53
|
this.logIfDebugEnabled("clear", eventName);
|
|
66
54
|
if (typeof eventName === "string" || typeof eventName === "symbol" || typeof eventName === "number") {
|
|
@@ -94,7 +82,7 @@ var Events = class _Events extends Base {
|
|
|
94
82
|
if (isMetaEvent(eventName) && !_Events.canEmitMetaEvents) {
|
|
95
83
|
throw new TypeError(NO_META_EVENT_ERROR_MESSAGE);
|
|
96
84
|
}
|
|
97
|
-
const filterMatch =
|
|
85
|
+
const filterMatch = (args, filter) => {
|
|
98
86
|
if (filter) {
|
|
99
87
|
switch (typeof filter) {
|
|
100
88
|
case "object": {
|
|
@@ -106,19 +94,13 @@ var Events = class _Events extends Base {
|
|
|
106
94
|
}
|
|
107
95
|
}
|
|
108
96
|
return true;
|
|
109
|
-
}
|
|
97
|
+
};
|
|
110
98
|
this.logIfDebugEnabled("emitSerial", eventName, eventArgs);
|
|
111
99
|
const listeners = this.getListeners(eventName) ?? /* @__PURE__ */ new Set();
|
|
112
|
-
const filteredListeners = [
|
|
113
|
-
...listeners.values()
|
|
114
|
-
].filter((value) => value.filter ? filterMatch(eventArgs, value.filter) : true).map((info) => info.listener);
|
|
100
|
+
const filteredListeners = [...listeners.values()].filter((value) => value.filter ? filterMatch(eventArgs, value.filter) : true).map((info) => info.listener);
|
|
115
101
|
const anyListeners = assertEx(_Events.anyMap.get(this));
|
|
116
|
-
const staticListeners = [
|
|
117
|
-
|
|
118
|
-
];
|
|
119
|
-
const staticAnyListeners = [
|
|
120
|
-
...anyListeners
|
|
121
|
-
];
|
|
102
|
+
const staticListeners = [...filteredListeners];
|
|
103
|
+
const staticAnyListeners = [...anyListeners];
|
|
122
104
|
await resolvedPromise;
|
|
123
105
|
for (const listener of staticListeners) {
|
|
124
106
|
await this.safeCallListener(eventName, eventArgs, listener);
|
|
@@ -129,9 +111,7 @@ var Events = class _Events extends Base {
|
|
|
129
111
|
}
|
|
130
112
|
// TODO: Make test for this
|
|
131
113
|
listenerCount(eventNames) {
|
|
132
|
-
const eventNamesArray = Array.isArray(eventNames) ? eventNames : [
|
|
133
|
-
eventNames
|
|
134
|
-
];
|
|
114
|
+
const eventNamesArray = Array.isArray(eventNames) ? eventNames : [eventNames];
|
|
135
115
|
let count = 0;
|
|
136
116
|
for (const eventName of eventNamesArray) {
|
|
137
117
|
if (typeof eventName === "string") {
|
|
@@ -151,9 +131,7 @@ var Events = class _Events extends Base {
|
|
|
151
131
|
}
|
|
152
132
|
}
|
|
153
133
|
off(eventNames, listener) {
|
|
154
|
-
const eventNamesArray = Array.isArray(eventNames) ? eventNames : [
|
|
155
|
-
eventNames
|
|
156
|
-
];
|
|
134
|
+
const eventNamesArray = Array.isArray(eventNames) ? eventNames : [eventNames];
|
|
157
135
|
for (const eventName of eventNamesArray) {
|
|
158
136
|
const set = this.getListeners(eventName);
|
|
159
137
|
if (set) {
|
|
@@ -165,10 +143,7 @@ var Events = class _Events extends Base {
|
|
|
165
143
|
}
|
|
166
144
|
this.logIfDebugEnabled("unsubscribe", eventName);
|
|
167
145
|
if (!isMetaEvent(eventName)) {
|
|
168
|
-
forget(this.emitMetaEvent("listenerRemoved", {
|
|
169
|
-
eventName,
|
|
170
|
-
listener
|
|
171
|
-
}));
|
|
146
|
+
forget(this.emitMetaEvent("listenerRemoved", { eventName, listener }));
|
|
172
147
|
}
|
|
173
148
|
}
|
|
174
149
|
}
|
|
@@ -176,14 +151,10 @@ var Events = class _Events extends Base {
|
|
|
176
151
|
this.logIfDebugEnabled("unsubscribeAny");
|
|
177
152
|
const typedMap = _Events.anyMap.get(this);
|
|
178
153
|
typedMap?.delete(listener);
|
|
179
|
-
forget(this.emitMetaEvent("listenerRemoved", {
|
|
180
|
-
listener
|
|
181
|
-
}));
|
|
154
|
+
forget(this.emitMetaEvent("listenerRemoved", { listener }));
|
|
182
155
|
}
|
|
183
156
|
on(eventNames, listener, filter) {
|
|
184
|
-
const eventNamesArray = Array.isArray(eventNames) ? eventNames : [
|
|
185
|
-
eventNames
|
|
186
|
-
];
|
|
157
|
+
const eventNamesArray = Array.isArray(eventNames) ? eventNames : [eventNames];
|
|
187
158
|
for (const eventName of eventNamesArray) {
|
|
188
159
|
let set = this.getListeners(eventName);
|
|
189
160
|
if (!set) {
|
|
@@ -191,16 +162,10 @@ var Events = class _Events extends Base {
|
|
|
191
162
|
const events = _Events.eventsMap.get(this);
|
|
192
163
|
events?.set(eventName, set);
|
|
193
164
|
}
|
|
194
|
-
set.add({
|
|
195
|
-
filter,
|
|
196
|
-
listener
|
|
197
|
-
});
|
|
165
|
+
set.add({ filter, listener });
|
|
198
166
|
this.logIfDebugEnabled("subscribe", eventName);
|
|
199
167
|
if (!isMetaEvent(eventName)) {
|
|
200
|
-
forget(this.emitMetaEvent("listenerAdded", {
|
|
201
|
-
eventName,
|
|
202
|
-
listener
|
|
203
|
-
}));
|
|
168
|
+
forget(this.emitMetaEvent("listenerAdded", { eventName, listener }));
|
|
204
169
|
}
|
|
205
170
|
}
|
|
206
171
|
return this.off.bind(this, eventNames, listener);
|
|
@@ -208,16 +173,14 @@ var Events = class _Events extends Base {
|
|
|
208
173
|
onAny(listener) {
|
|
209
174
|
this.logIfDebugEnabled("subscribeAny");
|
|
210
175
|
_Events.anyMap.get(this)?.add(listener);
|
|
211
|
-
forget(this.emitMetaEvent("listenerAdded", {
|
|
212
|
-
listener
|
|
213
|
-
}));
|
|
176
|
+
forget(this.emitMetaEvent("listenerAdded", { listener }));
|
|
214
177
|
return this.offAny.bind(this, listener);
|
|
215
178
|
}
|
|
216
179
|
once(eventName, listener) {
|
|
217
|
-
const subListener =
|
|
180
|
+
const subListener = async (args) => {
|
|
218
181
|
this.off(eventName, subListener);
|
|
219
182
|
await this.safeCallListener(eventName, args, listener);
|
|
220
|
-
}
|
|
183
|
+
};
|
|
221
184
|
this.on(eventName, subListener);
|
|
222
185
|
return this.off.bind(this, eventName, subListener);
|
|
223
186
|
}
|
|
@@ -227,16 +190,10 @@ var Events = class _Events extends Base {
|
|
|
227
190
|
}
|
|
228
191
|
this.logIfDebugEnabled("emit", eventName, eventArgs);
|
|
229
192
|
const listeners = this.getListeners(eventName) ?? /* @__PURE__ */ new Set();
|
|
230
|
-
const filteredListeners = [
|
|
231
|
-
...listeners.values()
|
|
232
|
-
].filter((value) => filter ? value.listener : true).map((info) => info.listener);
|
|
193
|
+
const filteredListeners = [...listeners.values()].filter((value) => filter ? value.listener : true).map((info) => info.listener);
|
|
233
194
|
const anyListeners = assertEx(_Events.anyMap.get(this));
|
|
234
|
-
const staticListeners = [
|
|
235
|
-
|
|
236
|
-
];
|
|
237
|
-
const staticAnyListeners = isMetaEvent(eventName) ? [] : [
|
|
238
|
-
...anyListeners
|
|
239
|
-
];
|
|
195
|
+
const staticListeners = [...filteredListeners];
|
|
196
|
+
const staticAnyListeners = isMetaEvent(eventName) ? [] : [...anyListeners];
|
|
240
197
|
await resolvedPromise;
|
|
241
198
|
await Promise.all([
|
|
242
199
|
...staticListeners.map(async (listener) => {
|
|
@@ -255,16 +212,10 @@ var Events = class _Events extends Base {
|
|
|
255
212
|
}
|
|
256
213
|
this.logIfDebugEnabled("emit", eventName, eventArgs);
|
|
257
214
|
const listeners = this.getListeners(eventName) ?? /* @__PURE__ */ new Set();
|
|
258
|
-
const filteredListeners = [
|
|
259
|
-
...listeners.values()
|
|
260
|
-
].map((info) => info.listener);
|
|
215
|
+
const filteredListeners = [...listeners.values()].map((info) => info.listener);
|
|
261
216
|
const anyListeners = assertEx(_Events.anyMap.get(this));
|
|
262
|
-
const staticListeners = [
|
|
263
|
-
|
|
264
|
-
];
|
|
265
|
-
const staticAnyListeners = isMetaEvent(eventName) ? [] : [
|
|
266
|
-
...anyListeners
|
|
267
|
-
];
|
|
217
|
+
const staticListeners = [...filteredListeners];
|
|
218
|
+
const staticAnyListeners = isMetaEvent(eventName) ? [] : [...anyListeners];
|
|
268
219
|
await resolvedPromise;
|
|
269
220
|
await Promise.all([
|
|
270
221
|
...staticListeners.map(async (listener) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/Events/Events.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { handleError } from '@xylabs/error'\nimport { forget } from '@xylabs/forget'\nimport type { BaseParams } from '@xylabs/object'\nimport { Base } from '@xylabs/object'\n\nimport type {\n EventAnyListener, EventArgs, EventData, EventFunctions, 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*/\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 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 ?? { 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)\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(NO_META_EVENT_ERROR_MESSAGE)\n }\n\n const filterMatch = (args: TEventData[TEventName], filter: TEventData[TEventName]) => {\n if (filter) {\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 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)\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')\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) && !Events.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 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":["assertEx","handleError","forget","Base","NO_META_EVENT_ERROR_MESSAGE","resolvedPromise","Promise","resolve","isMetaEvent","eventName","Events","Base","anyMap","WeakMap","eventsMap","canEmitMetaEvents","isGlobalDebugEnabled","eventData","constructor","params","mutatedParams","debug","logger","type","debugName","eventDataString","JSON","stringify","Object","keys","join","eventNameString","toString","currentTime","Date","logTime","getHours","getMinutes","getSeconds","getMilliseconds","log","set","Set","Map","isDebugEnabled","globalThis","process","env","DEBUG","newValue","clearListeners","eventNames","eventNamesArray","Array","isArray","logIfDebugEnabled","getListeners","clear","get","listeners","assertEx","entries","delete","emit","eventArgs","emitInternal","emitMetaEvent","emitMetaEventInternal","emitSerial","TypeError","filterMatch","args","filter","reduce","prev","key","value","filteredListeners","values","map","info","listener","anyListeners","staticListeners","staticAnyListeners","safeCallListener","safeCallAnyListener","listenerCount","count","size","enabled","name","off","events","forget","offAny","typedMap","on","add","bind","onAny","once","subListener","all","has","ex","handleError","error","String","message"]}
|
|
1
|
+
{"version":3,"sources":["../../src/Events/Events.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { handleError } from '@xylabs/error'\nimport { forget } from '@xylabs/forget'\nimport type { BaseParams } from '@xylabs/object'\nimport { Base } from '@xylabs/object'\n\nimport type {\n EventAnyListener, EventArgs, EventData, EventFunctions, 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*/\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 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 ?? { 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)\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(NO_META_EVENT_ERROR_MESSAGE)\n }\n\n const filterMatch = (args: TEventData[TEventName], filter: TEventData[TEventName]) => {\n if (filter) {\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 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)\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')\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) && !Events.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 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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xyo-network/module-events",
|
|
3
|
-
"version": "3.6.
|
|
3
|
+
"version": "3.6.10",
|
|
4
4
|
"description": "Primary SDK for using XYO Protocol 2.0",
|
|
5
5
|
"homepage": "https://xyo.network",
|
|
6
6
|
"bugs": {
|
|
@@ -29,19 +29,19 @@
|
|
|
29
29
|
"module": "dist/neutral/index.mjs",
|
|
30
30
|
"types": "dist/neutral/index.d.ts",
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@xylabs/assert": "^4.
|
|
33
|
-
"@xylabs/error": "^4.
|
|
34
|
-
"@xylabs/forget": "^4.
|
|
35
|
-
"@xylabs/object": "^4.
|
|
36
|
-
"@xylabs/promise": "^4.
|
|
32
|
+
"@xylabs/assert": "^4.5.1",
|
|
33
|
+
"@xylabs/error": "^4.5.1",
|
|
34
|
+
"@xylabs/forget": "^4.5.1",
|
|
35
|
+
"@xylabs/object": "^4.5.1",
|
|
36
|
+
"@xylabs/promise": "^4.5.1"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@xylabs/delay": "^4.
|
|
39
|
+
"@xylabs/delay": "^4.5.1",
|
|
40
40
|
"@xylabs/ts-scripts-yarn3": "^4.2.6",
|
|
41
41
|
"@xylabs/tsconfig": "^4.2.6",
|
|
42
|
-
"@xylabs/vitest-extended": "^4.
|
|
43
|
-
"typescript": "^5.7.
|
|
44
|
-
"vitest": "^
|
|
42
|
+
"@xylabs/vitest-extended": "^4.5.1",
|
|
43
|
+
"typescript": "^5.7.3",
|
|
44
|
+
"vitest": "^3.0.4"
|
|
45
45
|
},
|
|
46
46
|
"publishConfig": {
|
|
47
47
|
"access": "public"
|
package/src/Events/Events.ts
CHANGED
|
@@ -66,20 +66,20 @@ export class Events<TEventData extends EventData = EventData> extends Base<Event
|
|
|
66
66
|
if (mutatedParams.debug) {
|
|
67
67
|
mutatedParams.debug.logger
|
|
68
68
|
= mutatedParams.debug.logger
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
69
|
+
?? ((type: string, debugName: string, eventName?: EventName, eventData?: EventArgs) => {
|
|
70
|
+
let eventDataString: string
|
|
71
|
+
try {
|
|
72
|
+
eventDataString = JSON.stringify(eventData)
|
|
73
|
+
} catch {
|
|
74
|
+
eventDataString = `Object with the following keys failed to stringify: ${Object.keys(eventData ?? {}).join(',')}`
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const eventNameString = typeof eventName === 'symbol' || typeof eventName === 'number' ? eventName.toString() : eventName
|
|
78
|
+
|
|
79
|
+
const currentTime = new Date()
|
|
80
|
+
const logTime = `${currentTime.getHours()}:${currentTime.getMinutes()}:${currentTime.getSeconds()}.${currentTime.getMilliseconds()}`
|
|
81
|
+
this.logger?.log(`[${logTime}][events:${type}][${debugName}] Event Name: ${eventNameString}\n\tdata: ${eventDataString}`)
|
|
82
|
+
})
|
|
83
83
|
}
|
|
84
84
|
super(mutatedParams)
|
|
85
85
|
Events.anyMap.set(this, new Set<EventAnyListener>())
|