summaryrefslogtreecommitdiff
path: root/node_modules/webpack/lib/MultiWatching.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/webpack/lib/MultiWatching.js')
-rw-r--r--node_modules/webpack/lib/MultiWatching.js81
1 files changed, 81 insertions, 0 deletions
diff --git a/node_modules/webpack/lib/MultiWatching.js b/node_modules/webpack/lib/MultiWatching.js
new file mode 100644
index 00000000..b4fcd87c
--- /dev/null
+++ b/node_modules/webpack/lib/MultiWatching.js
@@ -0,0 +1,81 @@
+/*
+ MIT License http://www.opensource.org/licenses/mit-license.php
+ Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const asyncLib = require("neo-async");
+
+/** @typedef {import("./MultiCompiler")} MultiCompiler */
+/** @typedef {import("./Watching")} Watching */
+
+/**
+ * @template T
+ * @callback Callback
+ * @param {(Error | null)=} err
+ * @param {T=} result
+ */
+
+class MultiWatching {
+ /**
+ * @param {Watching[]} watchings child compilers' watchers
+ * @param {MultiCompiler} compiler the compiler
+ */
+ constructor(watchings, compiler) {
+ this.watchings = watchings;
+ this.compiler = compiler;
+ }
+
+ /**
+ * @param {Callback<void>=} callback signals when the build has completed again
+ * @returns {void}
+ */
+ invalidate(callback) {
+ if (callback) {
+ asyncLib.each(
+ this.watchings,
+ (watching, callback) => watching.invalidate(callback),
+ callback
+ );
+ } else {
+ for (const watching of this.watchings) {
+ watching.invalidate();
+ }
+ }
+ }
+
+ suspend() {
+ for (const watching of this.watchings) {
+ watching.suspend();
+ }
+ }
+
+ resume() {
+ for (const watching of this.watchings) {
+ watching.resume();
+ }
+ }
+
+ /**
+ * @param {Callback<void>} callback signals when the watcher is closed
+ * @returns {void}
+ */
+ close(callback) {
+ asyncLib.forEach(
+ this.watchings,
+ (watching, finishedCallback) => {
+ watching.close(finishedCallback);
+ },
+ err => {
+ this.compiler.hooks.watchClose.call();
+ if (typeof callback === "function") {
+ this.compiler.running = false;
+ callback(err);
+ }
+ }
+ );
+ }
+}
+
+module.exports = MultiWatching;