type Listener = (data?: T) => void; class EventBus { private listeners: Record[]> = {}; on(event: string, callback: Listener): () => void { if (!this.listeners[event]) { this.listeners[event] = []; } this.listeners[event].push(callback); return () => this.off(event, callback); } off(event: string, callback: Listener): void { if (!this.listeners[event]) return; this.listeners[event] = this.listeners[event].filter( (fn) => fn !== callback, ); } emit(event: string, data?: T): void { this.listeners[event]?.forEach((callback) => { callback(data); }); } } export const eventBus = new EventBus();