/* IMPORT */ import { FileType, TargetEvent } from './enums.js'; import LazyMapSet from './lazy_map_set.js'; import Utils from './utils.js'; import WatcherStats from './watcher_stats.js'; /* MAIN */ class WatcherPoller { constructor() { /* VARIABLES */ this.inos = {}; this.paths = new LazyMapSet(); this.stats = new Map(); } /* API */ getIno(targetPath, event, type) { const inos = this.inos[event]; if (!inos) return; const ino = inos[targetPath]; if (!ino) return; if (type && ino[1] !== type) return; return ino[0]; } getStats(targetPath) { return this.stats.get(targetPath); } async poll(targetPath, timeout) { const stats = await Utils.fs.poll(targetPath, timeout); if (!stats) return; const isSupported = stats.isFile() || stats.isDirectory(); if (!isSupported) return; return new WatcherStats(stats); } reset() { this.inos = {}; this.paths = new LazyMapSet(); this.stats = new Map(); } async update(targetPath, timeout) { const prev = this.getStats(targetPath); const next = await this.poll(targetPath, timeout); this.updateStats(targetPath, next); if (!prev && next) { if (next.isFile()) { this.updateIno(targetPath, TargetEvent.ADD, next); return [TargetEvent.ADD]; } if (next.isDirectory()) { this.updateIno(targetPath, TargetEvent.ADD_DIR, next); return [TargetEvent.ADD_DIR]; } } else if (prev && !next) { if (prev.isFile()) { this.updateIno(targetPath, TargetEvent.UNLINK, prev); return [TargetEvent.UNLINK]; } if (prev.isDirectory()) { this.updateIno(targetPath, TargetEvent.UNLINK_DIR, prev); return [TargetEvent.UNLINK_DIR]; } } else if (prev && next) { if (prev.isFile()) { if (next.isFile()) { if (prev.ino === next.ino && !prev.size && !next.size) return []; // Same path, same content and same file, nothing actually changed this.updateIno(targetPath, TargetEvent.CHANGE, next); return [TargetEvent.CHANGE]; } if (next.isDirectory()) { this.updateIno(targetPath, TargetEvent.UNLINK, prev); this.updateIno(targetPath, TargetEvent.ADD_DIR, next); return [TargetEvent.UNLINK, TargetEvent.ADD_DIR]; } } else if (prev.isDirectory()) { if (next.isFile()) { this.updateIno(targetPath, TargetEvent.UNLINK_DIR, prev); this.updateIno(targetPath, TargetEvent.ADD, next); return [TargetEvent.UNLINK_DIR, TargetEvent.ADD]; } if (next.isDirectory()) { if (prev.ino === next.ino) return []; // Same path and same directory, nothing actually changed this.updateIno(targetPath, TargetEvent.UNLINK_DIR, prev); this.updateIno(targetPath, TargetEvent.ADD_DIR, next); return [TargetEvent.UNLINK_DIR, TargetEvent.ADD_DIR]; } } } return []; } updateIno(targetPath, event, stats) { const inos = this.inos[event] = this.inos[event] || (this.inos[event] = {}); const type = stats.isFile() ? FileType.FILE : FileType.DIR; inos[targetPath] = [stats.ino, type]; } updateStats(targetPath, stats) { if (stats) { this.paths.set(stats.ino, targetPath); this.stats.set(targetPath, stats); } else { const ino = this.stats.get(targetPath)?.ino || -1; this.paths.delete(ino, targetPath); this.stats.delete(targetPath); } } } /* EXPORT */ export default WatcherPoller; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0Y2hlcl9wb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy93YXRjaGVyX3BvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxZQUFZO0FBRVosT0FBTyxFQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDakQsT0FBTyxVQUFVLE1BQU0sbUJBQW1CLENBQUM7QUFDM0MsT0FBTyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBQy9CLE9BQU8sWUFBWSxNQUFNLG9CQUFvQixDQUFDO0FBRzlDLFVBQVU7QUFFVixNQUFNLGFBQWE7SUFBbkI7UUFFRSxlQUFlO1FBRWYsU0FBSSxHQUFnRSxFQUFFLENBQUM7UUFDdkUsVUFBSyxHQUEwQixJQUFJLFVBQVUsRUFBRyxDQUFDO1FBQ2pELFVBQUssR0FBNEIsSUFBSSxHQUFHLEVBQUcsQ0FBQztJQTJLOUMsQ0FBQztJQXpLQyxTQUFTO0lBRVQsTUFBTSxDQUFHLFVBQWdCLEVBQUUsS0FBa0IsRUFBRSxJQUFlO1FBRTVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFOUIsSUFBSyxDQUFDLElBQUk7WUFBRyxPQUFPO1FBRXBCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUU3QixJQUFLLENBQUMsR0FBRztZQUFHLE9BQU87UUFFbkIsSUFBSyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUk7WUFBRyxPQUFPO1FBRXRDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWhCLENBQUM7SUFFRCxRQUFRLENBQUcsVUFBZ0I7UUFFekIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBRyxVQUFVLENBQUUsQ0FBQztJQUV2QyxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUksQ0FBRyxVQUFnQixFQUFFLE9BQWdCO1FBRTdDLE1BQU0sS0FBSyxHQUFHLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUcsVUFBVSxFQUFFLE9BQU8sQ0FBRSxDQUFDO1FBRTFELElBQUssQ0FBQyxLQUFLO1lBQUcsT0FBTztRQUVyQixNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFHLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRyxDQUFDO1FBRTVELElBQUssQ0FBQyxXQUFXO1lBQUcsT0FBTztRQUUzQixPQUFPLElBQUksWUFBWSxDQUFHLEtBQUssQ0FBRSxDQUFDO0lBRXBDLENBQUM7SUFFRCxLQUFLO1FBRUgsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksVUFBVSxFQUFHLENBQUM7UUFDL0IsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRyxDQUFDO0lBRTFCLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUFHLFVBQWdCLEVBQUUsT0FBZ0I7UUFFL0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBRyxVQUFVLENBQUUsQ0FBQztRQUMxQyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUcsVUFBVSxFQUFFLE9BQU8sQ0FBRSxDQUFDO1FBRXJELElBQUksQ0FBQyxXQUFXLENBQUcsVUFBVSxFQUFFLElBQUksQ0FBRSxDQUFDO1FBRXRDLElBQUssQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFHLENBQUM7WUFFcEIsSUFBSyxJQUFJLENBQUMsTUFBTSxFQUFHLEVBQUcsQ0FBQztnQkFFckIsSUFBSSxDQUFDLFNBQVMsQ0FBRyxVQUFVLEVBQUUsV0FBVyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUUsQ0FBQztnQkFFckQsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUUzQixDQUFDO1lBRUQsSUFBSyxJQUFJLENBQUMsV0FBVyxFQUFHLEVBQUcsQ0FBQztnQkFFMUIsSUFBSSxDQUFDLFNBQVMsQ0FBRyxVQUFVLEVBQUUsV0FBVyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUUsQ0FBQztnQkFFekQsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUUvQixDQUFDO1FBRUgsQ0FBQzthQUFNLElBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFHLENBQUM7WUFFM0IsSUFBSyxJQUFJLENBQUMsTUFBTSxFQUFHLEVBQUcsQ0FBQztnQkFFckIsSUFBSSxDQUFDLFNBQVMsQ0FBRyxVQUFVLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUUsQ0FBQztnQkFFeEQsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUU5QixDQUFDO1lBRUQsSUFBSyxJQUFJLENBQUMsV0FBVyxFQUFHLEVBQUcsQ0FBQztnQkFFMUIsSUFBSSxDQUFDLFNBQVMsQ0FBRyxVQUFVLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUUsQ0FBQztnQkFFNUQsT0FBTyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUVsQyxDQUFDO1FBRUgsQ0FBQzthQUFNLElBQUssSUFBSSxJQUFJLElBQUksRUFBRyxDQUFDO1lBRTFCLElBQUssSUFBSSxDQUFDLE1BQU0sRUFBRyxFQUFHLENBQUM7Z0JBRXJCLElBQUssSUFBSSxDQUFDLE1BQU0sRUFBRyxFQUFHLENBQUM7b0JBRXJCLElBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJO3dCQUFHLE9BQU8sRUFBRSxDQUFDLENBQUMsa0VBQWtFO29CQUV0SSxJQUFJLENBQUMsU0FBUyxDQUFHLFVBQVUsRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBRSxDQUFDO29CQUV4RCxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUU5QixDQUFDO2dCQUVELElBQUssSUFBSSxDQUFDLFdBQVcsRUFBRyxFQUFHLENBQUM7b0JBRTFCLElBQUksQ0FBQyxTQUFTLENBQUcsVUFBVSxFQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFFLENBQUM7b0JBQ3hELElBQUksQ0FBQyxTQUFTLENBQUcsVUFBVSxFQUFFLFdBQVcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFFLENBQUM7b0JBRXpELE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFFbkQsQ0FBQztZQUVILENBQUM7aUJBQU0sSUFBSyxJQUFJLENBQUMsV0FBVyxFQUFHLEVBQUcsQ0FBQztnQkFFakMsSUFBSyxJQUFJLENBQUMsTUFBTSxFQUFHLEVBQUcsQ0FBQztvQkFFckIsSUFBSSxDQUFDLFNBQVMsQ0FBRyxVQUFVLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUUsQ0FBQztvQkFDNUQsSUFBSSxDQUFDLFNBQVMsQ0FBRyxVQUFVLEVBQUUsV0FBVyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUUsQ0FBQztvQkFFckQsT0FBTyxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUVuRCxDQUFDO2dCQUVELElBQUssSUFBSSxDQUFDLFdBQVcsRUFBRyxFQUFHLENBQUM7b0JBRTFCLElBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRzt3QkFBRyxPQUFPLEVBQUUsQ0FBQyxDQUFDLHlEQUF5RDtvQkFFakcsSUFBSSxDQUFDLFNBQVMsQ0FBRyxVQUFVLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUUsQ0FBQztvQkFDNUQsSUFBSSxDQUFDLFNBQVMsQ0FBRyxVQUFVLEVBQUUsV0FBVyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUUsQ0FBQztvQkFFekQsT0FBTyxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUV2RCxDQUFDO1lBRUgsQ0FBQztRQUVILENBQUM7UUFFRCxPQUFPLEVBQUUsQ0FBQztJQUVaLENBQUM7SUFFRCxTQUFTLENBQUcsVUFBZ0IsRUFBRSxLQUFrQixFQUFFLEtBQW1CO1FBRW5FLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFFLENBQUM7UUFDOUUsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO1FBRTVELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFdkMsQ0FBQztJQUVELFdBQVcsQ0FBRyxVQUFnQixFQUFFLEtBQW9CO1FBRWxELElBQUssS0FBSyxFQUFHLENBQUM7WUFFWixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFHLFVBQVUsRUFBRSxLQUFLLENBQUUsQ0FBQztRQUV2QyxDQUFDO2FBQU0sQ0FBQztZQUVOLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFHLFVBQVUsQ0FBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUVyRCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBRyxHQUFHLEVBQUUsVUFBVSxDQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUcsVUFBVSxDQUFFLENBQUM7UUFFbkMsQ0FBQztJQUVILENBQUM7Q0FFRjtBQUVELFlBQVk7QUFFWixlQUFlLGFBQWEsQ0FBQyJ9