You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							58 lines
						
					
					
						
							1.5 KiB
						
					
					
				
			
		
		
	
	
							58 lines
						
					
					
						
							1.5 KiB
						
					
					
				/* | 
						|
	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;
 | 
						|
 |