Wrapper library for directory and file watching.
watchpack high level API doesn't map directly to watchers. Instead a three level architecture ensures that for each directory only a single watcher exists.
- The high level API requests
DirectoryWatchersfrom aWatcherManager, which ensures that only a singleDirectoryWatcherper directory is created. - A user-faced
Watchercan be obtained from aDirectoryWatcherand provides a filtered view on theDirectoryWatcher. - Reference-counting is used on the
DirectoryWatcherandWatcherto decide when to close them. - The real watchers are created by the
DirectoryWatcher. - Files are never watched directly. This should keep the watcher count low.
- Watching can be started in the past. This way watching can start after file reading.
- Symlinks are not followed, instead the symlink is watched.
varWatchpack=require("watchpack");varwp=newWatchpack({// options:aggregateTimeout: 1000// fire "aggregated" event when after a change for 1000ms no additional change occurred// aggregated defaults to undefined, which doesn't fire an "aggregated" eventpoll: true// poll: true - use polling with the default interval// poll: 10000 - use polling with an interval of 10s// poll defaults to undefined, which prefer native watching methods// Note: enable polling when watching on a network path// When WATCHPACK_POLLING environment variable is set it will override this option});// Watchpack.prototype.watch(files: string[], directories: string[], startTime?: number)wp.watch(listOfFiles,listOfDirectories,Date.now()-10000);// starts watching these files and directories// calling this again will override the files and directorieswp.on("change",function(filePath,mtime){// filePath: the changed file// mtime: last modified time for the changed file (null if file was removed)// for folders it's a time before that all changes in the directory happened});wp.on("aggregated",function(changes,removals){// changes: a Set of all changed files// removals: a Set of all removed files});// Watchpack.prototype.pause()wp.pause();// stops emitting events, but keeps watchers open// next "watch" call can reuse the watchers// Watchpack.prototype.close()wp.close();// stops emitting events and closes all watchers// Watchpack.prototype.getTimeInfoEntries()varfileTimes=wp.getTimeInfoEntries();// returns a Map with all known time info objects for files and directories// this include info from files not directly watched// key: absolute path, value: object with { safeTime, timestamp }// safeTime: the time before that all changes happened// timestamp: only for files, the mtime timestamp of the file// (deprecated)// Watchpack.prototype.getTimes()varfileTimes=wp.getTimes();// returns an object with all known change times for files// this include timestamps from files not directly watched// key: absolute path, value: timestamp as number