UNPKG

@ma3-pro-plugins/ma3-pro-plugins-lib

Version:
48 lines (47 loc) 1.73 kB
import { Logger } from './Logger'; /** * Taken from here: https://gist.github.com/mudge/5830382?permalink_comment_id=2658721#gistcomment-2658721 */ export interface EventBase { eventName: string; } type Listener<Event extends EventBase> = (event: Event) => void; export interface EventDispatcher<E> { /** * Adds the event to the event queue. * Multiple events of the same eventName, will be ignored. * @param event */ emit(event: E): void; } export interface EventRegistry<E extends EventBase> { on(eventName: E['eventName'], listener: Listener<E>): () => void; onAny(listener: Listener<E>): () => void; removeListener(eventName: E['eventName'], listener: Listener<E>): void; once(event: E, listener: Listener<E>): () => void; } export declare class EventEmitter<Event extends EventBase> implements EventDispatcher<Event>, EventRegistry<Event> { readonly log: Logger; private readonly eventsListeners; private readonly anyEventsListeners; constructor(log: Logger); /** * Add listener to a specific event * @param eventName * @param listener If listener already exists it will NOT be added again * @returns */ on(eventName: Event['eventName'], listener: Listener<Event>): () => void; /** * Add listener to a specific event * @param eventName * @param listener If listener already exists it will NOT be added again * @returns */ onAny(listener: Listener<Event>): () => void; removeListener(eventName: Event['eventName'], listener: Listener<Event>): void; removeAllListeners(): void; emit(event: Event): void; once(event: Event, listener: Listener<Event>): () => void; } export {};