const events = {}; export default class EventObject { hasEvent(event) { return event in events; } on(event, listener) { if (!this.hasEvent(event)) { events[event] = []; } events[event].push(listener); } off(event, listener = null) { if (!this.hasEvent(event)) { return; } if (listener === null) { return (events[event] = []); } events[event] = events[event].filter( (eventListener) => eventListener !== listener ); } trigger(event, ...data) { if (this.hasEvent(event)) { let stopped = false; events[event].forEach((listener) => { if (stopped) { return; } if (listener(...data) === false) { stopped = true; } }); } } }