UNPKG

@featurevisor/sdk

Version:

Featurevisor SDK for Node.js and the browser

60 lines (44 loc) 1.21 kB
export type EventName = "datafile_set" | "context_set" | "sticky_set"; export type EventDetails = Record<string, unknown>; export type EventCallback = (details: EventDetails) => void; export type Listeners = Record<EventName, EventCallback[]> | {}; // eslint-disable-line export class Emitter { listeners: Listeners; constructor() { this.listeners = {}; } on(eventName: EventName, callback: EventCallback) { if (!this.listeners[eventName]) { this.listeners[eventName] = []; } const listeners = this.listeners[eventName]; listeners.push(callback); let isActive = true; return function unsubscribe() { if (!isActive) { return; } isActive = false; const index = listeners.indexOf(callback); if (index !== -1) { listeners.splice(index, 1); } }; } trigger(eventName: EventName, details: EventDetails = {}) { const listeners = this.listeners[eventName]; if (!listeners) { return; } listeners.forEach(function (listener) { try { listener(details); } catch (err) { console.error(err); } }); } clearAll() { this.listeners = {}; } }