export interface TransportEmitter void> { on(listener: TListener): () => void; emit(...args: Parameters): void; clear(): void; } export function createTransportEmitter< TListener extends (...args: never[]) => void >(): TransportEmitter { const listeners = new Set(); return { on(listener) { listeners.add(listener); return () => { listeners.delete(listener); }; }, emit(...args) { for (const listener of [...listeners]) listener(...args); }, clear() { listeners.clear(); } }; }