UNPKG

@discoveryjs/discovery

Version:

Frontend framework for rapid data (JSON) analysis, shareable serverless reports and dashboards

50 lines (49 loc) 1.17 kB
export class Emitter { listeners; constructor() { this.listeners = /* @__PURE__ */ Object.create(null); } on(event, callback) { this.listeners[event] = { callback, next: this.listeners[event] || null }; return this; } once(event, callback) { return this.on(event, function wrapper(...args) { callback.apply(this, args); this.off(event, wrapper); }); } off(event, callback) { let cursor = this.listeners[event] || null; let prev = null; while (cursor !== null) { if (cursor.callback === callback) { cursor.callback = null; if (prev) { prev.next = cursor.next; } else { this.listeners[event] = cursor.next; } break; } prev = cursor; cursor = cursor.next; } return this; } emit(event, ...args) { let cursor = this.listeners[event] || null; let hadListeners = false; while (cursor !== null) { if (typeof cursor.callback === "function") { cursor.callback.apply(this, args); } hadListeners = true; cursor = cursor.next; } return hadListeners; } }