25 lines
981 B
TypeScript
25 lines
981 B
TypeScript
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<U extends keyof DiffWatcherEvent>(event: U, listener: DiffWatcherEvent[U]): this;
|
|
emit<U extends keyof DiffWatcherEvent>(event: U, ...arg: Parameters<DiffWatcherEvent[U]>): boolean;
|
|
setup(cntr: DocumentAccessor): Promise<void>;
|
|
}
|
|
|
|
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));
|
|
}
|