silverbullet/packages/plugos/event.ts

21 lines
514 B
TypeScript
Raw Normal View History

export abstract class EventEmitter<HandlerT> {
private handlers: Partial<HandlerT>[] = [];
on(handlers: Partial<HandlerT>) {
this.handlers.push(handlers);
}
off(handlers: Partial<HandlerT>) {
this.handlers = this.handlers.filter((h) => h !== handlers);
}
2022-10-04 22:33:29 +08:00
async emit(eventName: keyof HandlerT, ...args: any[]): Promise<void> {
for (const handler of this.handlers) {
const fn: any = handler[eventName];
if (fn) {
2022-10-04 22:33:29 +08:00
await Promise.resolve(fn(...args));
}
}
}
}