|
|
- /*
- 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");
-
- /** @typedef {import("../declarations/plugins/LoaderOptionsPlugin").LoaderOptionsPluginOptions} LoaderOptionsPluginOptions */
-
- class LoaderOptionsPlugin {
- /**
- * @param {LoaderOptionsPluginOptions} options options object
- */
- 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;
|