post-me
Version:
Use web Workers and other Windows through a simple Promise API
55 lines (54 loc) • 1.99 kB
TypeScript
import { EventsType } from './common';
/**
* A simple event emitter interface used to implement the observer pattern throughout the codebase.
*
* @public
*
*/
export interface Emitter<E extends EventsType> {
/**
* Add a listener to a specific event.
*
* @param eventName - The name of the event
* @param listener - A listener function that takes as parameter the payload of the event
*/
addEventListener<K extends keyof E>(eventName: K, listener: (data: E[K]) => void): void;
/**
* Remove a listener from a specific event.
*
* @param eventName - The name of the event
* @param listener - A listener function that had been added previously
*/
removeEventListener<K extends keyof E>(eventName: K, listener: (data: E[K]) => void): void;
/**
* Add a listener to a specific event, that will only be invoked once
*
* @remarks
*
* After the first occurrence of the specified event, the listener will be invoked and
* immediately removed.
*
* @param eventName - The name of the event
* @param listener - A listener function that had been added previously
*/
once<K extends keyof E>(eventName: K): Promise<E[K]>;
}
/**
* A concrete implementation of the {@link Emitter} interface
*
* @public
*/
export declare class ConcreteEmitter<E extends EventsType> implements Emitter<E> {
private _listeners;
constructor();
/** {@inheritDoc Emitter.addEventListener} */
addEventListener<K extends keyof E>(eventName: K, listener: (data: E[K]) => void): void;
/** {@inheritDoc Emitter.removeEventListener} */
removeEventListener<K extends keyof E>(eventName: K, listener: (data: E[K]) => void): void;
/** {@inheritDoc Emitter.once} */
once<K extends keyof E>(eventName: K): Promise<E[K]>;
/** @internal */
protected emit<K extends keyof E>(eventName: K, data: E[K]): void;
/** @internal */
protected removeAllListeners(): void;
}