text: /*
  	MIT License http://www.opensource.org/licenses/mit-license.php
  	Author Tobias Koppers @sokra
  */
  "use strict";
  
  const ModuleFilenameHelpers = require("./ModuleFilenameHelpers");
  
  const validateOptions = require("schema-utils");
  const schema = require("../schemas/plugins/LoaderOptionsPlugin.json");
  
  class LoaderOptionsPlugin {
  	constructor(options) {
  		validateOptions(schema, options || {}, "Loader Options Plugin");
  
  		if (typeof options !== "object") options = {};
  		if (!options.test) {
  			options.test = {
  				test: () => true
  			};
  		}
  		this.options = options;
  	}
  
  	apply(compiler) {
  		const options = this.options;
  		compiler.hooks.compilation.tap("LoaderOptionsPlugin", compilation => {
  			compilation.hooks.normalModuleLoader.tap(
  				"LoaderOptionsPlugin",
  				(context, module) => {
  					const resource = module.resource;
  					if (!resource) return;
  					const i = resource.indexOf("?");
  					if (
  						ModuleFilenameHelpers.matchObject(
  							options,
  							i < 0 ? resource : resource.substr(0, i)
  						)
  					) {
  						for (const key of Object.keys(options)) {
  							if (key === "include" || key === "exclude" || key === "test") {
  								continue;
  							}
  							context[key] = options[key];
  						}
  					}
  				}
  			);
  		});
  	}
  }
  
  module.exports = LoaderOptionsPlugin;
  