import type event from "node:events"; import { FSWatcher, watch } from "node:fs"; import { promises } from "node:fs"; import { join } from "node:path"; import type { DocumentAccessor } from "../model/doc.ts"; const readdir = promises.readdir; export interface DiffWatcherEvent { create: (path: string) => void; delete: (path: string) => void; change: (prev_path: string, cur_path: string) => void; } export interface IDiffWatcher extends event.EventEmitter { on(event: U, listener: DiffWatcherEvent[U]): this; emit(event: U, ...arg: Parameters): boolean; setup(cntr: DocumentAccessor): Promise; } export function linkWatcher(fromWatcher: IDiffWatcher, toWatcher: IDiffWatcher) { fromWatcher.on("create", (p) => toWatcher.emit("create", p)); fromWatcher.on("delete", (p) => toWatcher.emit("delete", p)); fromWatcher.on("change", (p, c) => toWatcher.emit("change", p, c)); }