export type Subscriber = (value: A) => void; export class EventStream { private subscribers: Subscriber[] = []; subscribe(handler: Subscriber) { this.subscribers.push(handler); return handler; } unsubscribe(handler: Subscriber) { this.subscribers = this.subscribers.filter((x) => x !== handler); } publish(value: A) { for (const handler of this.subscribers) { handler(value); } } }