| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 | /*	MIT License http://www.opensource.org/licenses/mit-license.php	Author Tobias Koppers @sokra*/"use strict";const validateOptions = require("schema-utils");const schema = require("../schemas/plugins/WatchIgnorePlugin.json");/** @typedef {import("../declarations/plugins/WatchIgnorePlugin").WatchIgnorePluginOptions} WatchIgnorePluginOptions */class IgnoringWatchFileSystem {	constructor(wfs, paths) {		this.wfs = wfs;		this.paths = paths;	}	watch(files, dirs, missing, startTime, options, callback, callbackUndelayed) {		const ignored = path =>			this.paths.some(p =>				p instanceof RegExp ? p.test(path) : path.indexOf(p) === 0			);		const notIgnored = path => !ignored(path);		const ignoredFiles = files.filter(ignored);		const ignoredDirs = dirs.filter(ignored);		const watcher = this.wfs.watch(			files.filter(notIgnored),			dirs.filter(notIgnored),			missing,			startTime,			options,			(				err,				filesModified,				dirsModified,				missingModified,				fileTimestamps,				dirTimestamps,				removedFiles			) => {				if (err) return callback(err);				for (const path of ignoredFiles) {					fileTimestamps.set(path, 1);				}				for (const path of ignoredDirs) {					dirTimestamps.set(path, 1);				}				callback(					err,					filesModified,					dirsModified,					missingModified,					fileTimestamps,					dirTimestamps,					removedFiles				);			},			callbackUndelayed		);		return {			close: () => watcher.close(),			pause: () => watcher.pause(),			getContextTimestamps: () => {				const dirTimestamps = watcher.getContextTimestamps();				for (const path of ignoredDirs) {					dirTimestamps.set(path, 1);				}				return dirTimestamps;			},			getFileTimestamps: () => {				const fileTimestamps = watcher.getFileTimestamps();				for (const path of ignoredFiles) {					fileTimestamps.set(path, 1);				}				return fileTimestamps;			}		};	}}class WatchIgnorePlugin {	/**	 * @param {WatchIgnorePluginOptions} paths list of paths	 */	constructor(paths) {		validateOptions(schema, paths, "Watch Ignore Plugin");		this.paths = paths;	}	apply(compiler) {		compiler.hooks.afterEnvironment.tap("WatchIgnorePlugin", () => {			compiler.watchFileSystem = new IgnoringWatchFileSystem(				compiler.watchFileSystem,				this.paths			);		});	}}module.exports = WatchIgnorePlugin;
 |