import { EventEmitter } from "node:events"; import type { DocumentAccessor } from "../../model/doc"; import { type DiffWatcherEvent, type IDiffWatcher, linkWatcher } from "../watcher"; export class WatcherCompositer extends EventEmitter implements IDiffWatcher { refWatchers: IDiffWatcher[]; on(event: U, listener: DiffWatcherEvent[U]): this { return super.on(event, listener); } emit(event: U, ...arg: Parameters): boolean { return super.emit(event, ...arg); } constructor(refWatchers: IDiffWatcher[]) { super(); this.refWatchers = refWatchers; for (const refWatcher of this.refWatchers) { linkWatcher(refWatcher, this); } } async setup(cntr: DocumentAccessor): Promise { await Promise.all(this.refWatchers.map((x) => x.setup(cntr))); } }