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);
}
}
}