export class EventHandlers { private callbacks = new Map>(); add(key: Key, callback: Callback): void { if (this.callbacks.has(key)) { this.callbacks.get(key)!.add(callback); } else { this.callbacks.set(key, new Set([callback])); } } remove(key: Key, callback: Callback): boolean { if (this.callbacks.has(key)) { return this.callbacks.get(key)!.delete(callback); } return false; } async call(key: Key, ...args: unknown[]): Promise { if (this.callbacks.has(key)) { for (const callback of this.callbacks.get(key)!) { await callback(...args); } } } }