All files / src/event eventhandler.ts

100% Statements 8/8
100% Branches 6/6
100% Functions 4/4
100% Lines 8/8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36    1x       606x                   2216x 2216x                   4376x 4376x 3269x         1x  
export type EventCallback = (event: string, data: any) => void;
 
export class EventHandler {
	listeners: { [event: string]: Array<EventCallback> };
 
	constructor(){
		this.listeners = {};
	}
 
	/**
	 * Add an event listener.
	 *
	 * @param event {string} - Event name or '*' for any event.
	 * @param callback {function} - Called any time even triggers.
	 */
	on(event: string, callback: EventCallback){
		this.listeners[event] = this.listeners[event] || [];
		this.listeners[event].push(callback);
	}
 
	/**
	 * Trigger event causing all listeners to be called.
	 *
	 * @param event {string} - Event name.
	 * @param [data] {any} - Event data.
	 */
	trigger(event: string, data: any){
		const callbacks = [].concat(this.listeners[event] || [], this.listeners['*'] || []);
		callbacks.forEach(listener => {
			listener.call(null, event, data);
		});
	}
}
 
export default EventHandler;