let defaultMaxListeners = 10; export class EventEmitter { __unenv__ = true; _events = /* @__PURE__ */ Object.create(null); _maxListeners; static get defaultMaxListeners() { return defaultMaxListeners; } static set defaultMaxListeners(arg) { if (typeof arg !== "number" || arg < 0 || Number.isNaN(arg)) { throw new RangeError( 'The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + "." ); } defaultMaxListeners = arg; } setMaxListeners(n) { if (typeof n !== "number" || n < 0 || Number.isNaN(n)) { throw new RangeError( 'The value of "n" is out of range. It must be a non-negative number. Received ' + n + "." ); } this._maxListeners = n; return this; } getMaxListeners() { return _getMaxListeners(this); } emit(type, ...args) { if (!this._events[type] || this._events[type].length === 0) { return false; } if (type === "error") { let er; if (args.length > 0) { er = args[0]; } if (er instanceof Error) { throw er; } const err = new Error( "Unhandled error." + (er ? " (" + er.message + ")" : "") ); err.context = er; throw err; } for (const _listener of this._events[type]) { (_listener.listener || _listener).apply(this, args); } return true; } addListener(type, listener) { return _addListener(this, type, listener, false); } on(type, listener) { return _addListener(this, type, listener, false); } prependListener(type, listener) { return _addListener(this, type, listener, true); } once(type, listener) { return this.on(type, _wrapOnce(this, type, listener)); } prependOnceListener(type, listener) { return this.prependListener(type, _wrapOnce(this, type, listener)); } removeListener(type, listener) { return _removeListener(this, type, listener); } off(type, listener) { return this.removeListener(type, listener); } removeAllListeners(type) { return _removeAllListeners(this, type); } listeners(type) { return _listeners(this, type, true); } rawListeners(type) { return _listeners(this, type, false); } listenerCount(type) { return this.rawListeners(type).length; } eventNames() { return Object.keys(this._events); } } export function once(emitter, name) { return new Promise(function(resolve, reject) { function errorListener(err) { emitter.removeListener(name, resolver); reject(err); } function resolver() { if (typeof emitter.removeListener === "function") { emitter.removeListener("error", errorListener); } resolve(Array.prototype.slice.call(arguments)); } _eventTargetAgnosticAddListener(emitter, name, resolver, { once: true }); if (name !== "error") { _addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true }); } }); } function _addListener(target, type, listener, prepend) { _checkListener(listener); if (target._events.newListener !== void 0) { target.emit("newListener", type, listener.listener || listener); } if (!target._events[type]) { target._events[type] = []; } if (prepend) { target._events[type].unshift(listener); } else { target._events[type].push(listener); } const maxListeners = _getMaxListeners(target); if (maxListeners > 0 && target._events[type].length > maxListeners && !target._events[type].warned) { target._events[type].warned = true; const warning = new Error( `[unenv] Possible EventEmitter memory leak detected. ${target._events[type].length} ${type} listeners added. Use emitter.setMaxListeners() to increase limit` ); warning.name = "MaxListenersExceededWarning"; warning.emitter = target; warning.type = type; warning.count = target._events[type]?.length; console.warn(warning); } return target; } function _removeListener(target, type, listener) { _checkListener(listener); if (!target._events[type] || target._events[type].length === 0) { return target; } const lenBeforeFilter = target._events[type].length; target._events[type] = target._events[type].filter((fn) => fn !== listener); if (lenBeforeFilter === target._events[type].length) { return target; } if (target._events.removeListener) { target.emit("removeListener", type, listener.listener || listener); } if (target._events[type].length === 0) { delete target._events[type]; } return target; } function _removeAllListeners(target, type) { if (!target._events[type] || target._events[type].length === 0) { return target; } if (target._events.removeListener) { for (const _listener of target._events[type]) { target.emit("removeListener", type, _listener.listener || _listener); } } delete target._events[type]; return target; } function _wrapOnce(target, type, listener) { let fired = false; const wrapper = (...args) => { if (fired) { return; } target.removeListener(type, wrapper); fired = true; return args.length === 0 ? listener.call(target) : listener.apply(target, args); }; wrapper.listener = listener; return wrapper; } function _getMaxListeners(target) { return target._maxListeners ?? EventEmitter.defaultMaxListeners; } function _listeners(target, type, unwrap) { let listeners = target._events[type]; if (typeof listeners === "function") { listeners = [listeners]; } return unwrap ? listeners.map((l) => l.listener || l) : listeners; } function _checkListener(listener) { if (typeof listener !== "function") { throw new TypeError( 'The "listener" argument must be of type Function. Received type ' + typeof listener ); } } function _addErrorHandlerIfEventEmitter(emitter, handler, flags) { if (typeof emitter.on === "function") { _eventTargetAgnosticAddListener(emitter, "error", handler, flags); } } function _eventTargetAgnosticAddListener(emitter, name, listener, flags) { if (typeof emitter.on === "function") { if (flags.once) { emitter.once(name, listener); } else { emitter.on(name, listener); } } else if (typeof emitter.addEventListener === "function") { emitter.addEventListener(name, listener); } else { throw new TypeError( 'The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter ); } }