import type { ProjectEvent } from '#shared/types' type Listener = (e: ProjectEvent) => void const listeners = new Map>() export function subscribeProject(projectId: string, fn: Listener) { let set = listeners.get(projectId) if (!set) listeners.set(projectId, set = new Set()) set.add(fn) return () => { set!.delete(fn) if (!set!.size) listeners.delete(projectId) } } export function emitProject(projectId: string, e: ProjectEvent) { const set = listeners.get(projectId) if (!set) return for (const fn of set) { try { fn(e) } catch (err) { console.error('[events] listener error', err) } } }