/* eslint-disable prettier/prettier */ class Broadcaster { private static instance?: Broadcaster; public static get shared(): Broadcaster { if (this.instance === undefined) this.instance = new Broadcaster(); return this.instance; } private constructor() { } private count = 0; private subscribers: Record void }>> = {}; static subscribe(event: string, callback: (data: any) => void) { let s = Broadcaster.shared; let tag = s.count + 1; if (!Array.isArray(s.subscribers[event])) s.subscribers[event] = []; s.count = tag; (s.subscribers[event] as any).push({ tag: tag, callback: callback }); return { remove: () => { let subs = s.subscribers[event] ?? []; let ind = -1; for (let i = 0; i < subs.length; i++) { let sub = subs[i]; if (sub?.tag === tag) ind = i; } subs.splice(ind, 1); s.subscribers[event] = subs; }, }; } static removeAllSubscription(event: string) { Broadcaster.shared.subscribers[event] = []; } static send(event: string, data: any) { (Broadcaster.shared.subscribers[event] ?? []).map(sub => { sub.callback(data); }); } } export default Broadcaster;