import type { EventBus } from "./types.js"; /** @internal */ export function createEventBus< TEventMap extends object = Record, >(): EventBus { const listeners = new Map void | Promise>>(); return { emit(event, data) { const handlers = listeners.get(event); if (!handlers) return; for (const handler of handlers) { try { void handler(data); } catch { // swallow handler errors to avoid breaking the emit loop } } }, on(event, handler) { const typedHandler = handler as unknown as (data: unknown) => void | Promise; let set = listeners.get(event); if (!set) { set = new Set(); listeners.set(event, set); } set.add(typedHandler); }, off(event, handler) { listeners.get(event)?.delete(handler as unknown as (data: unknown) => void | Promise); }, }; }