import type { SyncDBEventName, SyncDBEventHandler } from './types.js'; export class Emitter { private listeners = new Map>(); on(event: SyncDBEventName, handler: SyncDBEventHandler): () => void { let set = this.listeners.get(event); if (!set) { set = new Set(); this.listeners.set(event, set); } set.add(handler); return () => { set!.delete(handler); }; } emit(event: SyncDBEventName, ...args: unknown[]): void { const set = this.listeners.get(event); if (!set) return; for (const fn of set) { try { fn(...args); } catch { // listener errors must not break the library } } } removeAll(): void { this.listeners.clear(); } }