sam522's picture
node
d4b85c0
declare type EventMap = {
[eventName: string]: Array<unknown>;
};
declare type InternalEventNames = 'newListener' | 'removeListener';
declare type InternalListener<Events extends EventMap> = Listener<[
eventName: keyof Events,
listener: Listener<Array<unknown>>
]>;
declare type Listener<Data extends Array<unknown>> = (...data: Data) => void;
/**
* Node.js-compatible implementation of `EventEmitter`.
*
* @example
* const emitter = new Emitter<{ hello: [string] }>()
* emitter.on('hello', (name) => console.log(name))
* emitter.emit('hello', 'John')
*/
declare class Emitter<Events extends EventMap> {
private events;
private maxListeners;
private hasWarnedAboutPotentialMemoryLeak;
static defaultMaxListeners: number;
static listenerCount<Events extends EventMap>(emitter: Emitter<EventMap>, eventName: keyof Events): number;
constructor();
private _emitInternalEvent;
private _getListeners;
private _removeListener;
private _wrapOnceListener;
setMaxListeners(maxListeners: number): this;
/**
* Returns the current max listener value for the `Emitter` which is
* either set by `emitter.setMaxListeners(n)` or defaults to
* `Emitter.defaultMaxListeners`.
*/
getMaxListeners(): number;
/**
* Returns an array listing the events for which the emitter has registered listeners.
* The values in the array will be strings or Symbols.
*/
eventNames(): Array<keyof Events>;
/**
* 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 extends keyof Events>(eventName: EventName, ...data: Events[EventName]): boolean;
addListener(eventName: InternalEventNames, listener: InternalListener<Events>): this;
addListener<EventName extends keyof Events>(eventName: EventName, listener: Listener<Events[EventName]>): this;
on(eventName: InternalEventNames, listener: InternalListener<Events>): this;
on<EventName extends keyof Events>(eventName: EventName, listener: Listener<Events[EventName]>): this;
once(eventName: InternalEventNames, listener: InternalListener<Events>): this;
once<EventName extends keyof Events>(eventName: EventName, listener: Listener<Events[EventName]>): this;
prependListener(eventName: InternalEventNames, listener: InternalListener<Events>): this;
prependListener<EventName extends keyof Events>(eventName: EventName, listener: Listener<Events[EventName]>): this;
prependOnceListener(eventName: InternalEventNames, listener: InternalListener<Events>): this;
prependOnceListener<EventName extends keyof Events>(eventName: EventName, listener: Listener<Events[EventName]>): this;
removeListener(eventName: InternalEventNames, listener: InternalListener<Events>): this;
removeListener<EventName extends keyof Events>(eventName: EventName, listener: Listener<Events[EventName]>): this;
off(eventName: InternalEventNames, listener: InternalListener<Events>): this;
off<EventName extends keyof Events>(eventName: EventName, listener: Listener<Events[EventName]>): this;
removeAllListeners(eventName?: InternalEventNames): this;
removeAllListeners<EventName extends keyof Events>(eventName?: EventName): this;
listeners(eventName: InternalEventNames): Array<Listener<any>>;
listeners<EventName extends keyof Events>(eventName: EventName): Array<Listener<Events[EventName]>>;
listenerCount(eventName: InternalEventNames): number;
listenerCount<EventName extends keyof Events>(eventName: EventName): number;
rawListeners<EventName extends keyof Events>(eventName: EventName): Array<Listener<Events[EventName]>>;
}
declare class MemoryLeakError extends Error {
readonly emitter: Emitter<any>;
readonly type: string | number | symbol;
readonly count: number;
constructor(emitter: Emitter<any>, type: string | number | symbol, count: number);
}
export { Emitter, EventMap, InternalEventNames, InternalListener, Listener, MemoryLeakError };