135 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			135 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
/**
 | 
						|
 * 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;
 |