@ma3-pro-plugins/ma3-pro-plugins-lib
Version:
TSTL Library for grandMA3 plugins
48 lines (47 loc) • 1.73 kB
TypeScript
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 {};