aboutsummaryrefslogtreecommitdiff
path: root/node_modules/webpack/lib/node/NodeWatchFileSystem.js
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2017-05-03 15:35:00 +0200
committerFlorian Dold <florian.dold@gmail.com>2017-05-03 15:35:00 +0200
commitde98e0b232509d5f40c135d540a70e415272ff85 (patch)
treea79222a5b58484ab3b80d18efcaaa7ccc4769b33 /node_modules/webpack/lib/node/NodeWatchFileSystem.js
parente0c9d480a73fa629c1e4a47d3e721f1d2d345406 (diff)
node_modules
Diffstat (limited to 'node_modules/webpack/lib/node/NodeWatchFileSystem.js')
-rw-r--r--node_modules/webpack/lib/node/NodeWatchFileSystem.js72
1 files changed, 72 insertions, 0 deletions
diff --git a/node_modules/webpack/lib/node/NodeWatchFileSystem.js b/node_modules/webpack/lib/node/NodeWatchFileSystem.js
new file mode 100644
index 000000000..a4ff6c6b5
--- /dev/null
+++ b/node_modules/webpack/lib/node/NodeWatchFileSystem.js
@@ -0,0 +1,72 @@
+/*
+ MIT License http://www.opensource.org/licenses/mit-license.php
+ Author Tobias Koppers @sokra
+*/
+"use strict";
+
+const Watchpack = require("watchpack");
+
+class NodeWatchFileSystem {
+ constructor(inputFileSystem) {
+ this.inputFileSystem = inputFileSystem;
+ this.watcherOptions = {
+ aggregateTimeout: 0
+ };
+ this.watcher = new Watchpack(this.watcherOptions);
+ }
+
+ watch(files, dirs, missing, startTime, options, callback, callbackUndelayed) {
+ if(!Array.isArray(files))
+ throw new Error("Invalid arguments: 'files'");
+ if(!Array.isArray(dirs))
+ throw new Error("Invalid arguments: 'dirs'");
+ if(!Array.isArray(missing))
+ throw new Error("Invalid arguments: 'missing'");
+ if(typeof callback !== "function")
+ throw new Error("Invalid arguments: 'callback'");
+ if(typeof startTime !== "number" && startTime)
+ throw new Error("Invalid arguments: 'startTime'");
+ if(typeof options !== "object")
+ throw new Error("Invalid arguments: 'options'");
+ if(typeof callbackUndelayed !== "function" && callbackUndelayed)
+ throw new Error("Invalid arguments: 'callbackUndelayed'");
+ const oldWatcher = this.watcher;
+ this.watcher = new Watchpack(options);
+
+ if(callbackUndelayed)
+ this.watcher.once("change", callbackUndelayed);
+
+ this.watcher.once("aggregated", (changes, removals) => {
+ changes = changes.concat(removals);
+ if(this.inputFileSystem && this.inputFileSystem.purge) {
+ this.inputFileSystem.purge(changes);
+ }
+ const times = this.watcher.getTimes();
+ callback(null,
+ changes.filter(file => files.indexOf(file) >= 0).sort(),
+ changes.filter(file => dirs.indexOf(file) >= 0).sort(),
+ changes.filter(file => missing.indexOf(file) >= 0).sort(), times, times);
+ });
+
+ this.watcher.watch(files.concat(missing), dirs, startTime);
+
+ if(oldWatcher) {
+ oldWatcher.close();
+ }
+ return {
+ close: () => {
+ if(this.watcher) {
+ this.watcher.close();
+ this.watcher = null;
+ }
+ },
+ pause: () => {
+ if(this.watcher) {
+ this.watcher.pause();
+ }
+ }
+ };
+ }
+}
+
+module.exports = NodeWatchFileSystem;