summaryrefslogtreecommitdiffstats
path: root/node_modules/watchpack/lib/watchpack.js
diff options
context:
space:
mode:
authorGravatar Piotr Russ <mail@pruss.it> 2020-11-16 00:10:28 +0100
committerGravatar Piotr Russ <mail@pruss.it> 2020-11-16 00:10:28 +0100
commite06ec920f7a5d784e674c4c4b4e6d1da3dc7391d (patch)
tree55713f725f77b44ebfec86e4eec3ce33e71458ca /node_modules/watchpack/lib/watchpack.js
downloadwebsite_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.tar.gz
website_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.tar.bz2
website_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.zip
api, login, auth
Diffstat (limited to 'node_modules/watchpack/lib/watchpack.js')
-rw-r--r--node_modules/watchpack/lib/watchpack.js145
1 files changed, 145 insertions, 0 deletions
diff --git a/node_modules/watchpack/lib/watchpack.js b/node_modules/watchpack/lib/watchpack.js
new file mode 100644
index 0000000..cccbf02
--- /dev/null
+++ b/node_modules/watchpack/lib/watchpack.js
@@ -0,0 +1,145 @@
+/*
+ MIT License http://www.opensource.org/licenses/mit-license.php
+ Author Tobias Koppers @sokra
+*/
+"use strict";
+
+var watcherManager = require("./watcherManager");
+var EventEmitter = require("events").EventEmitter;
+
+function Watchpack(options) {
+ EventEmitter.call(this);
+ if(!options) options = {};
+ if(!options.aggregateTimeout) options.aggregateTimeout = 200;
+ this.options = options;
+ this.watcherOptions = {
+ ignored: options.ignored,
+ poll: options.poll
+ };
+ this.fileWatchers = [];
+ this.dirWatchers = [];
+ this.mtimes = Object.create(null);
+ this.paused = false;
+ this.aggregatedChanges = [];
+ this.aggregatedRemovals = [];
+ this.aggregateTimeout = 0;
+ this._onTimeout = this._onTimeout.bind(this);
+}
+
+module.exports = Watchpack;
+
+Watchpack.prototype = Object.create(EventEmitter.prototype);
+
+Watchpack.prototype.watch = function watch(files, directories, startTime) {
+ this.paused = false;
+ var oldFileWatchers = this.fileWatchers;
+ var oldDirWatchers = this.dirWatchers;
+ this.fileWatchers = files.map(function(file) {
+ return this._fileWatcher(file, watcherManager.watchFile(file, this.watcherOptions, startTime));
+ }, this);
+ this.dirWatchers = directories.map(function(dir) {
+ return this._dirWatcher(dir, watcherManager.watchDirectory(dir, this.watcherOptions, startTime));
+ }, this);
+ oldFileWatchers.forEach(function(w) {
+ w.close();
+ }, this);
+ oldDirWatchers.forEach(function(w) {
+ w.close();
+ }, this);
+};
+
+Watchpack.prototype.close = function resume() {
+ this.paused = true;
+ if(this.aggregateTimeout)
+ clearTimeout(this.aggregateTimeout);
+ this.fileWatchers.forEach(function(w) {
+ w.close();
+ }, this);
+ this.dirWatchers.forEach(function(w) {
+ w.close();
+ }, this);
+ this.fileWatchers.length = 0;
+ this.dirWatchers.length = 0;
+};
+
+Watchpack.prototype.pause = function pause() {
+ this.paused = true;
+ if(this.aggregateTimeout)
+ clearTimeout(this.aggregateTimeout);
+};
+
+function addWatchersToArray(watchers, array) {
+ watchers.forEach(function(w) {
+ if(array.indexOf(w.directoryWatcher) < 0) {
+ array.push(w.directoryWatcher);
+ addWatchersToArray(Object.keys(w.directoryWatcher.directories).reduce(function(a, dir) {
+ if(w.directoryWatcher.directories[dir] !== true)
+ a.push(w.directoryWatcher.directories[dir]);
+ return a;
+ }, []), array);
+ }
+ });
+}
+
+Watchpack.prototype.getTimes = function() {
+ var directoryWatchers = [];
+ addWatchersToArray(this.fileWatchers.concat(this.dirWatchers), directoryWatchers);
+ var obj = Object.create(null);
+ directoryWatchers.forEach(function(w) {
+ var times = w.getTimes();
+ Object.keys(times).forEach(function(file) {
+ obj[file] = times[file];
+ });
+ });
+ return obj;
+};
+
+Watchpack.prototype._fileWatcher = function _fileWatcher(file, watcher) {
+ watcher.on("change", function(mtime, type) {
+ this._onChange(file, mtime, file, type);
+ }.bind(this));
+ watcher.on("remove", function(type) {
+ this._onRemove(file, file, type);
+ }.bind(this));
+ return watcher;
+};
+
+Watchpack.prototype._dirWatcher = function _dirWatcher(item, watcher) {
+ watcher.on("change", function(file, mtime, type) {
+ this._onChange(item, mtime, file, type);
+ }.bind(this));
+ return watcher;
+};
+
+Watchpack.prototype._onChange = function _onChange(item, mtime, file) {
+ file = file || item;
+ this.mtimes[file] = mtime;
+ if(this.paused) return;
+ this.emit("change", file, mtime);
+ if(this.aggregateTimeout)
+ clearTimeout(this.aggregateTimeout);
+ if(this.aggregatedChanges.indexOf(item) < 0)
+ this.aggregatedChanges.push(item);
+ this.aggregateTimeout = setTimeout(this._onTimeout, this.options.aggregateTimeout);
+};
+
+Watchpack.prototype._onRemove = function _onRemove(item, file) {
+ file = file || item;
+ delete this.mtimes[item];
+ if(this.paused) return;
+ this.emit("remove", item);
+ if(this.aggregateTimeout)
+ clearTimeout(this.aggregateTimeout);
+ if(this.aggregatedRemovals.indexOf(item) < 0)
+ this.aggregatedRemovals.push(item);
+ this.aggregateTimeout = setTimeout(this._onTimeout, this.options.aggregateTimeout);
+};
+
+Watchpack.prototype._onTimeout = function _onTimeout() {
+ this.aggregateTimeout = 0;
+ var changes = this.aggregatedChanges;
+ var removals = this.aggregatedRemovals;
+ this.aggregatedChanges = [];
+ this.aggregatedRemovals = [];
+ this.emit("aggregated", changes, removals);
+};