class EventEmitter { //-------------------------- // constructor //-------------------------- constructor() { this.listeners = new Map(); } //-------------------------- // methods //-------------------------- addListener(label, callback) { this.listeners.has(label) || this.listeners.set(label, []); this.listeners.get(label).push(callback); } removeListener(label, callback) { var isFunction = function(obj) { return typeof obj == 'function' || false; }; var listeners = this.listeners.get(label), index; if (listeners && listeners.length) { index = listeners.reduce((i, listener, index) => { return (isFunction(listener) && listener === callback) ? i = index : i; }, -1); if (index > -1) { listeners.splice(index, 1); this.listeners.set(label, listeners); return true; } } return false; } emitEvent(label, ...args) { var listeners = this.listeners.get(label); if (listeners && listeners.length) { listeners.forEach((listener) => { listener(...args); }); return true; } return false; } //-------------------------- // event handlers //-------------------------- } export default EventEmitter