UNPKG

@libp2p/interface

Version:
56 lines 1.82 kB
import { setMaxListeners } from './events.js'; /** * An implementation of a typed event target * etc */ export class TypedEventEmitter extends EventTarget { #listeners = new Map(); constructor() { super(); // silence MaxListenersExceededWarning warning on Node.js, this is a red // herring almost all of the time setMaxListeners(Infinity, this); } listenerCount(type) { const listeners = this.#listeners.get(type); if (listeners == null) { return 0; } return listeners.length; } addEventListener(type, listener, options) { super.addEventListener(type, listener, options); let list = this.#listeners.get(type); if (list == null) { list = []; this.#listeners.set(type, list); } list.push({ callback: listener, once: (options !== true && options !== false && options?.once) ?? false }); } removeEventListener(type, listener, options) { super.removeEventListener(type.toString(), listener ?? null, options); let list = this.#listeners.get(type); if (list == null) { return; } list = list.filter(({ callback }) => callback !== listener); this.#listeners.set(type, list); } dispatchEvent(event) { const result = super.dispatchEvent(event); let list = this.#listeners.get(event.type); if (list == null) { return result; } list = list.filter(({ once }) => !once); this.#listeners.set(event.type, list); return result; } safeDispatchEvent(type, detail = {}) { return this.dispatchEvent(new CustomEvent(type, detail)); } } //# sourceMappingURL=event-target.js.map