|
|
- /*
- 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;
|