var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/index.ts var src_exports = {}; __export(src_exports, { Emitter: () => Emitter, MemoryLeakError: () => MemoryLeakError }); module.exports = __toCommonJS(src_exports); // src/MemoryLeakError.ts var MemoryLeakError = class extends Error { constructor(emitter, type, count) { super( `Possible EventEmitter memory leak detected. ${count} ${type.toString()} listeners added. Use emitter.setMaxListeners() to increase limit` ); this.emitter = emitter; this.type = type; this.count = count; this.name = "MaxListenersExceededWarning"; } }; // src/Emitter.ts var _Emitter = class { static listenerCount(emitter, eventName) { return emitter.listenerCount(eventName); } constructor() { this.events = /* @__PURE__ */ new Map(); this.maxListeners = _Emitter.defaultMaxListeners; this.hasWarnedAboutPotentialMemoryLeak = false; } _emitInternalEvent(internalEventName, eventName, listener) { this.emit( internalEventName, ...[eventName, listener] ); } _getListeners(eventName) { return Array.prototype.concat.apply([], this.events.get(eventName)) || []; } _removeListener(listeners, listener) { const index = listeners.indexOf(listener); if (index > -1) { listeners.splice(index, 1); } return []; } _wrapOnceListener(eventName, listener) { const onceListener = (...data) => { this.removeListener(eventName, onceListener); return listener.apply(this, data); }; Object.defineProperty(onceListener, "name", { value: listener.name }); return onceListener; } setMaxListeners(maxListeners) { this.maxListeners = maxListeners; return this; } /** * Returns the current max listener value for the `Emitter` which is * either set by `emitter.setMaxListeners(n)` or defaults to * `Emitter.defaultMaxListeners`. */ getMaxListeners() { return this.maxListeners; } /** * Returns an array listing the events for which the emitter has registered listeners. * The values in the array will be strings or Symbols. */ eventNames() { return Array.from(this.events.keys()); } /** * Synchronously calls each of the listeners registered for the event named `eventName`, * in the order they were registered, passing the supplied arguments to each. * Returns `true` if the event has listeners, `false` otherwise. * * @example * const emitter = new Emitter<{ hello: [string] }>() * emitter.emit('hello', 'John') */ emit(eventName, ...data) { const listeners = this._getListeners(eventName); listeners.forEach((listener) => { listener.apply(this, data); }); return listeners.length > 0; } addListener(eventName, listener) { this._emitInternalEvent("newListener", eventName, listener); const nextListeners = this._getListeners(eventName).concat(listener); this.events.set(eventName, nextListeners); if (this.maxListeners > 0 && this.listenerCount(eventName) > this.maxListeners && !this.hasWarnedAboutPotentialMemoryLeak) { this.hasWarnedAboutPotentialMemoryLeak = true; const memoryLeakWarning = new MemoryLeakError( this, eventName, this.listenerCount(eventName) ); console.warn(memoryLeakWarning); } return this; } on(eventName, listener) { return this.addListener(eventName, listener); } once(eventName, listener) { return this.addListener( eventName, this._wrapOnceListener(eventName, listener) ); } prependListener(eventName, listener) { const listeners = this._getListeners(eventName); if (listeners.length > 0) { const nextListeners = [listener].concat(listeners); this.events.set(eventName, nextListeners); } else { this.events.set(eventName, listeners.concat(listener)); } return this; } prependOnceListener(eventName, listener) { return this.prependListener( eventName, this._wrapOnceListener(eventName, listener) ); } removeListener(eventName, listener) { const listeners = this._getListeners(eventName); if (listeners.length > 0) { this._removeListener(listeners, listener); this.events.set(eventName, listeners); this._emitInternalEvent("removeListener", eventName, listener); } return this; } /** * Alias for `emitter.removeListener()`. * * @example * emitter.off('hello', listener) */ off(eventName, listener) { return this.removeListener(eventName, listener); } removeAllListeners(eventName) { if (eventName) { this.events.delete(eventName); } else { this.events.clear(); } return this; } /** * Returns a copy of the array of listeners for the event named `eventName`. */ listeners(eventName) { return Array.from(this._getListeners(eventName)); } /** * Returns the number of listeners listening to the event named `eventName`. */ listenerCount(eventName) { return this._getListeners(eventName).length; } rawListeners(eventName) { return this.listeners(eventName); } }; var Emitter = _Emitter; Emitter.defaultMaxListeners = 10; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { Emitter, MemoryLeakError }); //# sourceMappingURL=index.js.map