| 
									
										
										
										
											2013-11-06 01:19:04 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 	MIT License http://www.opensource.org/licenses/mit-license.php
 | 
					
						
							|  |  |  | 	Author Tobias Koppers @sokra | 
					
						
							|  |  |  | */ | 
					
						
							| 
									
										
										
										
											2018-07-30 23:08:51 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-31 07:17:33 +08:00
										 |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-27 02:08:09 +08:00
										 |  |  | const validateOptions = require("schema-utils"); | 
					
						
							|  |  |  | const schema = require("../schemas/plugins/IgnorePlugin.json"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-20 16:13:55 +08:00
										 |  |  | /** @typedef {import("../declarations/plugins/IgnorePlugin").IgnorePluginOptions} IgnorePluginOptions */ | 
					
						
							| 
									
										
										
										
											2018-07-09 20:48:28 +08:00
										 |  |  | /** @typedef {import("./Compiler")} Compiler */ | 
					
						
							| 
									
										
										
										
											2019-01-05 02:17:37 +08:00
										 |  |  | /** @typedef {import("./NormalModuleFactory").ResolveData} ResolveData */ | 
					
						
							| 
									
										
										
										
											2018-06-21 18:28:20 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-31 07:17:33 +08:00
										 |  |  | class IgnorePlugin { | 
					
						
							| 
									
										
										
										
											2018-06-21 18:28:20 +08:00
										 |  |  | 	/** | 
					
						
							| 
									
										
										
										
											2018-09-20 16:13:55 +08:00
										 |  |  | 	 * @param {IgnorePluginOptions} options IgnorePlugin options | 
					
						
							| 
									
										
										
										
											2018-06-21 18:28:20 +08:00
										 |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2018-07-27 02:08:09 +08:00
										 |  |  | 	constructor(options) { | 
					
						
							|  |  |  | 		validateOptions(schema, options, "IgnorePlugin"); | 
					
						
							|  |  |  | 		this.options = options; | 
					
						
							| 
									
										
										
										
											2017-04-08 13:36:30 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-21 18:45:33 +08:00
										 |  |  | 		/** @private @type {Function} */ | 
					
						
							| 
									
										
										
										
											2017-04-08 13:36:30 +08:00
										 |  |  | 		this.checkIgnore = this.checkIgnore.bind(this); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-21 18:28:20 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * Note that if "contextRegExp" is given, both the "resourceRegExp" | 
					
						
							| 
									
										
										
										
											2017-04-08 13:36:30 +08:00
										 |  |  | 	 * and "contextRegExp" have to match. | 
					
						
							| 
									
										
										
										
											2018-06-21 18:28:20 +08:00
										 |  |  | 	 * | 
					
						
							| 
									
										
										
										
											2019-01-05 02:17:37 +08:00
										 |  |  | 	 * @param {ResolveData} resolveData resolve data | 
					
						
							|  |  |  | 	 * @returns {false|undefined} returns false when the request should be ignored, otherwise undefined | 
					
						
							| 
									
										
										
										
											2018-06-21 18:28:20 +08:00
										 |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2019-01-05 02:17:37 +08:00
										 |  |  | 	checkIgnore(resolveData) { | 
					
						
							| 
									
										
										
										
											2018-12-18 01:40:51 +08:00
										 |  |  | 		if ( | 
					
						
							|  |  |  | 			"checkResource" in this.options && | 
					
						
							| 
									
										
										
										
											2018-12-20 23:52:06 +08:00
										 |  |  | 			this.options.checkResource && | 
					
						
							| 
									
										
										
										
											2019-01-05 02:17:37 +08:00
										 |  |  | 			this.options.checkResource(resolveData.request, resolveData.context) | 
					
						
							| 
									
										
										
										
											2018-12-18 01:40:51 +08:00
										 |  |  | 		) { | 
					
						
							|  |  |  | 			// TODO webpack 5 remove checkContext, as checkResource already gets context
 | 
					
						
							| 
									
										
										
										
											2018-12-20 23:52:06 +08:00
										 |  |  | 			if ("checkContext" in this.options && this.options.checkContext) { | 
					
						
							| 
									
										
										
										
											2019-01-05 02:17:37 +08:00
										 |  |  | 				if (this.options.checkContext(resolveData.context)) { | 
					
						
							|  |  |  | 					return false; | 
					
						
							| 
									
										
										
										
											2018-12-18 01:40:51 +08:00
										 |  |  | 				} | 
					
						
							|  |  |  | 			} else { | 
					
						
							| 
									
										
										
										
											2019-01-05 02:17:37 +08:00
										 |  |  | 				return false; | 
					
						
							| 
									
										
										
										
											2018-12-18 01:40:51 +08:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2017-04-08 13:36:30 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-12-18 01:40:51 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		if ( | 
					
						
							|  |  |  | 			"resourceRegExp" in this.options && | 
					
						
							| 
									
										
										
										
											2018-12-20 23:52:06 +08:00
										 |  |  | 			this.options.resourceRegExp && | 
					
						
							| 
									
										
										
										
											2019-01-05 02:17:37 +08:00
										 |  |  | 			this.options.resourceRegExp.test(resolveData.request) | 
					
						
							| 
									
										
										
										
											2018-12-18 01:40:51 +08:00
										 |  |  | 		) { | 
					
						
							| 
									
										
										
										
											2018-12-20 23:52:06 +08:00
										 |  |  | 			if ("contextRegExp" in this.options && this.options.contextRegExp) { | 
					
						
							| 
									
										
										
										
											2018-12-18 01:40:51 +08:00
										 |  |  | 				// if "contextRegExp" is given,
 | 
					
						
							|  |  |  | 				// both the "resourceRegExp" and "contextRegExp" have to match.
 | 
					
						
							| 
									
										
										
										
											2019-01-05 02:17:37 +08:00
										 |  |  | 				if (this.options.contextRegExp.test(resolveData.context)) { | 
					
						
							|  |  |  | 					return false; | 
					
						
							| 
									
										
										
										
											2018-12-18 01:40:51 +08:00
										 |  |  | 				} | 
					
						
							|  |  |  | 			} else { | 
					
						
							| 
									
										
										
										
											2019-01-05 02:17:37 +08:00
										 |  |  | 				return false; | 
					
						
							| 
									
										
										
										
											2018-12-18 01:40:51 +08:00
										 |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2016-12-31 07:17:33 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-21 18:28:20 +08:00
										 |  |  | 	/** | 
					
						
							| 
									
										
										
										
											2018-11-03 04:05:46 +08:00
										 |  |  | 	 * @param {Compiler} compiler the compiler instance | 
					
						
							| 
									
										
										
										
											2018-06-21 18:28:20 +08:00
										 |  |  | 	 * @returns {void} | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2016-12-31 07:17:33 +08:00
										 |  |  | 	apply(compiler) { | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		compiler.hooks.normalModuleFactory.tap("IgnorePlugin", nmf => { | 
					
						
							| 
									
										
										
										
											2017-12-14 21:38:53 +08:00
										 |  |  | 			nmf.hooks.beforeResolve.tap("IgnorePlugin", this.checkIgnore); | 
					
						
							| 
									
										
										
										
											2013-11-06 01:19:04 +08:00
										 |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		compiler.hooks.contextModuleFactory.tap("IgnorePlugin", cmf => { | 
					
						
							| 
									
										
										
										
											2017-12-14 21:38:53 +08:00
										 |  |  | 			cmf.hooks.beforeResolve.tap("IgnorePlugin", this.checkIgnore); | 
					
						
							| 
									
										
										
										
											2013-11-06 01:19:04 +08:00
										 |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2016-12-31 07:17:33 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module.exports = IgnorePlugin; |