1 | import { Observable } from 'rxjs';
|
2 |
|
3 | type O = Record<string, unknown>;
|
4 |
|
5 | export type Event<P extends O = any> = {
|
6 | type: string;
|
7 | payload: P;
|
8 | };
|
9 |
|
10 | export type FireEvent<E extends Event = Event> = (event: E) => void;
|
11 |
|
12 | export type EventBus<E extends Event = Event> = {
|
13 | event$: Observable<E>;
|
14 | fire: FireEvent<E>;
|
15 | type<T extends Event>(): EventBus<T>;
|
16 | filter<T extends Event = E>(fn: EventBusFilter<T>): EventBus<T>;
|
17 | };
|
18 |
|
19 | export type EventBusFilter<E extends Event> = (e: E) => boolean;
|