in src/lib/eventify.js [10:59]
export default function eventify(object: Object): Object {
if (!object) {
object = {};
}
assertObjectHasNoReservedKeywords(object);
const listeners = new Map(); // eventName -> Set() of listeners
object.on = on;
object.off = off;
object.trigger = trigger;
return object;
function on(eventName: string, callback: Function): void {
let eventListeners = listeners.get(eventName);
if (!eventListeners) {
eventListeners = new Set();
listeners.set(eventName, eventListeners);
}
eventListeners.add(callback);
}
function trigger(eventName: string, ...args): void {
const eventListeners = listeners.get(eventName);
if (eventListeners) {
eventListeners.forEach(listener => listener.apply(null, args));
}
}
function off(eventName: string, callback: Function): Object {
if (!callback) {
// we want to unsubscribe from all events
listeners.delete(eventName);
return object;
}
let eventListeners = listeners.get(eventName);
if (!eventListeners) {
// no listeners, nothing to unsubscribe from
return object;
}
// remove this specific callback from this event
eventListeners.delete(callback);
return object;
}
}