1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- /*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Tobias Koppers @sokra
- */
- "use strict";
- const createSchemaValidation = require("./util/create-schema-validation");
- /** @typedef {import("../declarations/plugins/IgnorePlugin").IgnorePluginOptions} IgnorePluginOptions */
- /** @typedef {import("./Compiler")} Compiler */
- /** @typedef {import("./NormalModuleFactory").ResolveData} ResolveData */
- const validate = createSchemaValidation(
- require("../schemas/plugins/IgnorePlugin.check.js"),
- () => require("../schemas/plugins/IgnorePlugin.json"),
- {
- name: "Ignore Plugin",
- baseDataPath: "options"
- }
- );
- class IgnorePlugin {
- /**
- * @param {IgnorePluginOptions} options IgnorePlugin options
- */
- constructor(options) {
- validate(options);
- this.options = options;
- /** @private @type {Function} */
- this.checkIgnore = this.checkIgnore.bind(this);
- }
- /**
- * Note that if "contextRegExp" is given, both the "resourceRegExp"
- * and "contextRegExp" have to match.
- *
- * @param {ResolveData} resolveData resolve data
- * @returns {false|undefined} returns false when the request should be ignored, otherwise undefined
- */
- checkIgnore(resolveData) {
- if (
- "checkResource" in this.options &&
- this.options.checkResource &&
- this.options.checkResource(resolveData.request, resolveData.context)
- ) {
- return false;
- }
- if (
- "resourceRegExp" in this.options &&
- this.options.resourceRegExp &&
- this.options.resourceRegExp.test(resolveData.request)
- ) {
- if ("contextRegExp" in this.options && this.options.contextRegExp) {
- // if "contextRegExp" is given,
- // both the "resourceRegExp" and "contextRegExp" have to match.
- if (this.options.contextRegExp.test(resolveData.context)) {
- return false;
- }
- } else {
- return false;
- }
- }
- }
- /**
- * Apply the plugin
- * @param {Compiler} compiler the compiler instance
- * @returns {void}
- */
- apply(compiler) {
- compiler.hooks.normalModuleFactory.tap("IgnorePlugin", nmf => {
- nmf.hooks.beforeResolve.tap("IgnorePlugin", this.checkIgnore);
- });
- compiler.hooks.contextModuleFactory.tap("IgnorePlugin", cmf => {
- cmf.hooks.beforeResolve.tap("IgnorePlugin", this.checkIgnore);
- });
- }
- }
- module.exports = IgnorePlugin;
|