'use strict';
(({}) => {
let defaultMaxListeners = 10;
class EventEmitter extends EventTarget {
constructor() {
super();
this._maxListeners = undefined;
}
static get defaultMaxListeners() {
return defaultMaxListeners;
}
static set defaultMaxListeners(n) {
if (typeof n !== 'number' || n < 0 || Number.isNaN(n)) {
throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + n);
}
defaultMaxListeners = n;
}
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 this._maxListeners === undefined ? defaultMaxListeners : this._maxListeners;
}
emit(eventName, ...args) {
const listeners = this.__listeners__.get(String(eventName));
if (!listeners || listeners.length === 0) {
if (eventName === 'error') {
const err = args[0];
if (err instanceof Error) {
throw err;
}
const error = new Error('Unhandled error.' + (err ? ' (' + err + ')' : ''));
error.context = err;
throw error;
}
return false;
}
const listenersCopy = listeners.slice();
for (let i = 0; i < listenersCopy.length; i++) {
listenersCopy[i].apply(this, args);
}
return true;
}
addListener(eventName, listener) {
return this._addListener(eventName, listener, false);
}
on(eventName, listener) {
return this.addListener(eventName, listener);
}
once(eventName, listener) {
if (typeof listener !== 'function') {
throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener);
}
const wrapped = (...args) => {
this.removeListener(eventName, wrapped);
listener.apply(this, args);
};
wrapped.listener = listener;
return this._addListener(eventName, wrapped, false);
}
prependListener(eventName, listener) {
return this._addListener(eventName, listener, true);
}
prependOnceListener(eventName, listener) {
if (typeof listener !== 'function') {
throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener);
}
const wrapped = (...args) => {
this.removeListener(eventName, wrapped);
listener.apply(this, args);
};
wrapped.listener = listener;
return this._addListener(eventName, wrapped, true);
}
_addListener(eventName, listener, prepend) {
if (typeof listener !== 'function') {
throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener);
}
const typeStr = String(eventName);
const newListenerListeners = this.__listeners__.get('newListener');
if (newListenerListeners && newListenerListeners.length > 0) {
this.emit('newListener', eventName, listener.listener || listener);
}
let listeners = this.__listeners__.get(typeStr);
if (!listeners) {
listeners = [];
this.__listeners__.set(typeStr, listeners);
}
if (prepend) {
listeners.unshift(listener);
} else {
listeners.push(listener);
}
const maxListeners = this.getMaxListeners();
if (maxListeners > 0 && listeners.length > maxListeners && !listeners._warned) {
console.error(
'MaxListenersExceededWarning: Possible EventEmitter memory leak detected. ' +
listeners.length + ' ' + typeStr + ' listeners added. ' +
'Use emitter.setMaxListeners() to increase limit'
);
listeners._warned = true;
}
return this;
}
removeListener(eventName, listener) {
if (typeof listener !== 'function') {
throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener);
}
const typeStr = String(eventName);
const listeners = this.__listeners__.get(typeStr);
if (!listeners) {
return this;
}
for (let i = listeners.length - 1; i >= 0; i--) {
if (listeners[i] === listener || listeners[i].listener === listener) {
listeners.splice(i, 1);
const removeListenerListeners = this.__listeners__.get('removeListener');
if (removeListenerListeners && removeListenerListeners.length > 0) {
this.emit('removeListener', eventName, listener);
}
break;
}
}
return this;
}
off(eventName, listener) {
return this.removeListener(eventName, listener);
}
removeAllListeners(eventName) {
if (arguments.length === 0) {
const eventNames = Array.from(this.__listeners__.keys());
for (const name of eventNames) {
if (name !== 'removeListener') {
this.removeAllListeners(name);
}
}
this.__listeners__.delete('removeListener');
return this;
}
const typeStr = String(eventName);
const listeners = this.__listeners__.get(typeStr);
if (!listeners) {
return this;
}
const removeListenerListeners = this.__listeners__.get('removeListener');
if (removeListenerListeners && removeListenerListeners.length > 0) {
for (let i = listeners.length - 1; i >= 0; i--) {
this.emit('removeListener', eventName, listeners[i].listener || listeners[i]);
}
}
this.__listeners__.delete(typeStr);
return this;
}
listeners(eventName) {
const listeners = this.__listeners__.get(String(eventName));
if (!listeners) {
return [];
}
return listeners.map(listener => listener.listener || listener);
}
rawListeners(eventName) {
const listeners = this.__listeners__.get(String(eventName));
if (!listeners) {
return [];
}
return listeners.slice();
}
listenerCount(eventName) {
const listeners = this.__listeners__.get(String(eventName));
return listeners ? listeners.length : 0;
}
eventNames() {
return Array.from(this.__listeners__.keys());
}
}
function once(emitter, eventName) {
return new Promise((resolve, reject) => {
const eventListener = (...args) => {
if (errorListener) {
emitter.removeListener('error', errorListener);
}
resolve(args);
};
let errorListener;
if (eventName !== 'error') {
errorListener = (err) => {
emitter.removeListener(eventName, eventListener);
reject(err);
};
emitter.once('error', errorListener);
}
emitter.once(eventName, eventListener);
});
}
function listenerCount(emitter, eventName) {
return emitter.listenerCount(eventName);
}
function getEventListeners(emitter, eventName) {
if (typeof emitter.listeners === 'function') {
return emitter.listeners(eventName);
}
return [];
}
const events = {
EventEmitter,
once,
listenerCount,
getEventListeners,
default: EventEmitter,
};
globalThis.__node_modules = globalThis.__node_modules || {};
globalThis.__node_modules['node:events'] = events;
globalThis.__node_modules['events'] = events;
});