| /** |
| * Minimal `EventEmitter` interface that is molded against the Node.js |
| * `EventEmitter` interface. |
| */ |
| declare class EventEmitter< |
| EventTypes extends EventEmitter.ValidEventTypes = string | symbol, |
| Context extends any = any |
| > { |
| static prefixed: string | boolean; |
| |
| /** |
| * Return an array listing the events for which the emitter has registered |
| * listeners. |
| */ |
| eventNames(): Array<EventEmitter.EventNames<EventTypes>>; |
| |
| /** |
| * Return the listeners registered for a given event. |
| */ |
| listeners<T extends EventEmitter.EventNames<EventTypes>>( |
| event: T |
| ): Array<EventEmitter.EventListener<EventTypes, T>>; |
| |
| /** |
| * Return the number of listeners listening to a given event. |
| */ |
| listenerCount(event: EventEmitter.EventNames<EventTypes>): number; |
| |
| /** |
| * Calls each of the listeners registered for a given event. |
| */ |
| emit<T extends EventEmitter.EventNames<EventTypes>>( |
| event: T, |
| ...args: EventEmitter.EventArgs<EventTypes, T> |
| ): boolean; |
| |
| /** |
| * Add a listener for a given event. |
| */ |
| on<T extends EventEmitter.EventNames<EventTypes>>( |
| event: T, |
| fn: EventEmitter.EventListener<EventTypes, T>, |
| context?: Context |
| ): this; |
| addListener<T extends EventEmitter.EventNames<EventTypes>>( |
| event: T, |
| fn: EventEmitter.EventListener<EventTypes, T>, |
| context?: Context |
| ): this; |
| |
| /** |
| * Add a one-time listener for a given event. |
| */ |
| once<T extends EventEmitter.EventNames<EventTypes>>( |
| event: T, |
| fn: EventEmitter.EventListener<EventTypes, T>, |
| context?: Context |
| ): this; |
| |
| /** |
| * Remove the listeners of a given event. |
| */ |
| removeListener<T extends EventEmitter.EventNames<EventTypes>>( |
| event: T, |
| fn?: EventEmitter.EventListener<EventTypes, T>, |
| context?: Context, |
| once?: boolean |
| ): this; |
| off<T extends EventEmitter.EventNames<EventTypes>>( |
| event: T, |
| fn?: EventEmitter.EventListener<EventTypes, T>, |
| context?: Context, |
| once?: boolean |
| ): this; |
| |
| /** |
| * Remove all listeners, or those of the specified event. |
| */ |
| removeAllListeners(event?: EventEmitter.EventNames<EventTypes>): this; |
| } |
| |
| declare namespace EventEmitter { |
| export interface ListenerFn<Args extends any[] = any[]> { |
| (...args: Args): void; |
| } |
| |
| export interface EventEmitterStatic { |
| new < |
| EventTypes extends ValidEventTypes = string | symbol, |
| Context = any |
| >(): EventEmitter<EventTypes, Context>; |
| } |
| |
| /** |
| * `object` should be in either of the following forms: |
| * ``` |
| * interface EventTypes { |
| * 'event-with-parameters': any[] |
| * 'event-with-example-handler': (...args: any[]) => void |
| * } |
| * ``` |
| */ |
| export type ValidEventTypes = string | symbol | object; |
| |
| export type EventNames<T extends ValidEventTypes> = T extends string | symbol |
| ? T |
| : keyof T; |
| |
| export type ArgumentMap<T extends object> = { |
| [K in keyof T]: T[K] extends (...args: any[]) => void |
| ? Parameters<T[K]> |
| : T[K] extends any[] |
| ? T[K] |
| : any[]; |
| }; |
| |
| export type EventListener< |
| T extends ValidEventTypes, |
| K extends EventNames<T> |
| > = T extends string | symbol |
| ? (...args: any[]) => void |
| : ( |
| ...args: ArgumentMap<Exclude<T, string | symbol>>[Extract<K, keyof T>] |
| ) => void; |
| |
| export type EventArgs< |
| T extends ValidEventTypes, |
| K extends EventNames<T> |
| > = Parameters<EventListener<T, K>>; |
| |
| export const EventEmitter: EventEmitterStatic; |
| } |
| |
| export = EventEmitter; |