blowater/app/event-bus.ts

24 lines
604 B
TypeScript
Raw Normal View History

2023-10-04 21:34:43 +00:00
import { chan, Channel, multi } from "https://raw.githubusercontent.com/BlowaterNostr/csp/master/csp.ts";
2023-06-30 14:05:57 +00:00
2023-10-04 21:34:43 +00:00
export class EventBus<T> implements EventEmitter<T>, EventSubscriber<T> {
2023-06-30 14:05:57 +00:00
private readonly c = chan<T>();
private readonly caster = multi<T>(this.c);
emit = async (event: T) => {
2023-06-30 14:05:57 +00:00
await this.c.put(event);
};
2023-06-30 14:05:57 +00:00
onChange() {
return this.caster.copy();
}
}
export type EventEmitter<T> = {
emit: (event: T) => void;
};
export type emitFunc<T extends { type: string }> = (event: T) => void;
2023-10-04 21:34:43 +00:00
export type EventSubscriber<T> = {
onChange(): Channel<T>;
};