import { chan, Channel, multi } from "@blowater/csp"; export class EventBus implements EventEmitter, EventSubscriber { private readonly c = chan(); private readonly caster = multi(this.c); emit = async (event: T) => { await this.c.put(event); }; onChange() { return this.caster.copy(); } } export type EventEmitter = { emit: (event: T) => void; }; export type emitFunc = (event: T) => Promise; export type EventSubscriber = { onChange(): Channel; };