UNPKG

squee

Version:
144 lines (143 loc) 6.42 kB
/** * Submits application events. * * @template TTypes Event names linked to their arg types. */ export interface IEventSubmitter<TTypes = any> { /** * Emits an event, along with any amount of additional information. * * @param eventName Name of an event. * @param args Any additional information for the event. */ emit<TEventName extends keyof TTypes>(eventName: TEventName, ...args: TTypes[TEventName][]): void; } /** * Receives application events. * * @template TTypes Event names linked to their arg types. */ export interface IEventReceiver<TTypes = any> { /** * Binds an event listener to an event name. * * @param eventName Name of an event. * @param listener Listener for the event. */ on<TEventName extends keyof TTypes>(eventName: TEventName, listener: (...args: TTypes[TEventName][]) => void): void; /** * Binds an event listener to the first time an event name. * * @param eventName Name of an event. * @param listener Listener for the event. * @remarks If the event name was already fired, it's immediately called with the args from the first event. */ onFirst<TEventName extends keyof TTypes>(eventName: TEventName, listener: (...args: TTypes[TEventName][]) => void): void; /** * Binds an event listener to all events. * * @param listener Called on any event with the event name and args. */ onAny(listener: <TEventName extends keyof TTypes>(eventName: TEventName, ...args: TTypes[TEventName][]) => void): void; /** * Removes an event listener from an event name. * If no listener is provided, it removes all listeners for that event name. * If no event name is provided, it removes all listeners for all event names. * * @param eventName Name of an event, if not all events. * @param listener Listener for the event, if not all listeners for the event(s). * @remarks Throws an error if the listener wasn't added for that event name. */ off<TEventName extends keyof TTypes>(eventName?: TEventName, listener?: (...args: TTypes[TEventName][]) => void): void; /** * Creates a Promise to be resolved the next time an event is fired. * * @param eventName Name of an event. * @returns A Promise to be resolved with the first object passed with the event. */ waitFor<TEventName extends keyof TTypes>(eventName: TEventName): Promise<TTypes[TEventName]>; /** * Creates a Promise to be resolved the first time an event is fired. * * @param eventName Name of an event. * @returns A Promise to be resolve with the first object passed with the first event. * @remarks If the event name was already fired, it's immediately resolved with the args from the first event. */ waitForFirst<TEventName extends keyof TTypes>(eventName: TEventName): Promise<TTypes[TEventName]>; } /** * Hub for triggerable application events. * * @template TTypes Event names linked to their arg types. */ export declare class EventEmitter<TTypes = any> implements IEventSubmitter<TTypes> { /** * Listeners to fire on all events. */ private readonly anyRegistrations; /** * Listeners and first args registered to events. */ private registrations; /** * Binds an event listener to an event name. * * @param eventName Name of an event. * @param listener Listener for the event. */ on<TEventName extends keyof TTypes>(eventName: TEventName, listener: (...args: TTypes[TEventName][]) => void): void; /** * Binds an event listener to the first time an event name. * * @param eventName Name of an event. * @param listener Listener for the event. * @remarks If the event name was already fired, it's immediately called with the args from the first event. */ onFirst<TEventName extends keyof TTypes>(eventName: TEventName, listener: (...args: TTypes[TEventName][]) => void): void; /** * Binds an event listener to all events. * * @param listener Called on any event with the event name and args. */ onAny(listener: <TEventName extends keyof TTypes>(eventName: TEventName, ...args: TTypes[TEventName][]) => void): void; /** * Removes an event listener from an event name. * If no listener is provided, it removes all listeners for that event name. * If no event name is provided, it removes all listeners for all event names. * * @param eventName Name of an event, if not all events. * @param listener Listener for the event, if not all listeners for the event(s). * @remarks Throws an error if the listener wasn't added for that event name. */ off<TEventName extends keyof TTypes>(eventName?: TEventName, listener?: (...args: TTypes[TEventName][]) => void): void; /** * Emits an event, along with any amount of additional information. * * @param eventName Name of an event. * @param args Any additional information for the event. */ emit<TEventName extends keyof TTypes>(eventName: TEventName, ...args: TTypes[TEventName][]): void; /** * Creates a Promise to be resolved the next time an event is fired. * * @param eventName Name of an event. * @returns A Promise to be resolved with the first object passed with the event. */ waitFor<TEventName extends keyof TTypes>(eventName: TEventName): Promise<TTypes[TEventName]>; /** * Creates a Promise to be resolved the first time an event is fired. * * @param eventName Name of an event. * @returns A Promise to be resolve with the first object passed with the first event. * @remarks If the event name was already fired, it's immediately resolved with the args from the first event. */ waitForFirst<TEventName extends keyof TTypes>(eventName: TEventName): Promise<TTypes[TEventName]>; /** * Ensures the registrations object for an event exists. * * @param eventName Name of an event. * @returns Registrations for the event. */ private safelyGetRegistration<TEventName>(eventName); } export declare const Squee: typeof EventEmitter;