ionian/packages/server/src/diff/watcher/compositer.ts
2024-03-29 00:19:36 +09:00

23 lines
862 B
TypeScript

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<U extends keyof DiffWatcherEvent>(event: U, listener: DiffWatcherEvent[U]): this {
return super.on(event, listener);
}
emit<U extends keyof DiffWatcherEvent>(event: U, ...arg: Parameters<DiffWatcherEvent[U]>): 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<void> {
await Promise.all(this.refWatchers.map((x) => x.setup(cntr)));
}
}