| 
									
										
										
										
											2014-08-25 15:50:26 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 	MIT License http://www.opensource.org/licenses/mit-license.php
 | 
					
						
							|  |  |  | 	Author Tobias Koppers @sokra | 
					
						
							|  |  |  | */ | 
					
						
							| 
									
										
										
										
											2017-01-09 02:11:26 +08:00
										 |  |  | "use strict"; | 
					
						
							| 
									
										
										
										
											2014-08-25 15:50:26 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-26 23:49:41 +08:00
										 |  |  | const ConstDependency = require("./dependencies/ConstDependency"); | 
					
						
							|  |  |  | const ParserHelpers = require("./ParserHelpers"); | 
					
						
							|  |  |  | const NullFactory = require("./NullFactory"); | 
					
						
							| 
									
										
										
										
											2014-08-25 15:50:26 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-26 23:49:41 +08:00
										 |  |  | const REPLACEMENTS = { | 
					
						
							| 
									
										
										
										
											2017-03-22 23:09:53 +08:00
										 |  |  | 	__webpack_hash__: "__webpack_require__.h", // eslint-disable-line camelcase
 | 
					
						
							|  |  |  | 	__webpack_chunkname__: "__webpack_require__.cn" // eslint-disable-line camelcase
 | 
					
						
							| 
									
										
										
										
											2014-08-25 15:50:26 +08:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2017-02-26 23:49:41 +08:00
										 |  |  | const REPLACEMENT_TYPES = { | 
					
						
							| 
									
										
										
										
											2017-03-22 23:09:53 +08:00
										 |  |  | 	__webpack_hash__: "string", // eslint-disable-line camelcase
 | 
					
						
							|  |  |  | 	__webpack_chunkname__: "string" // eslint-disable-line camelcase
 | 
					
						
							| 
									
										
										
										
											2014-08-25 15:50:26 +08:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-26 23:49:41 +08:00
										 |  |  | class ExtendedAPIPlugin { | 
					
						
							|  |  |  | 	apply(compiler) { | 
					
						
							|  |  |  | 		compiler.plugin("compilation", (compilation, params) => { | 
					
						
							|  |  |  | 			compilation.dependencyFactories.set(ConstDependency, new NullFactory()); | 
					
						
							|  |  |  | 			compilation.dependencyTemplates.set(ConstDependency, new ConstDependency.Template()); | 
					
						
							|  |  |  | 			compilation.mainTemplate.plugin("require-extensions", function(source, chunk, hash) { | 
					
						
							| 
									
										
										
										
											2017-02-27 16:21:35 +08:00
										 |  |  | 				const buf = [source]; | 
					
						
							| 
									
										
										
										
											2017-02-26 23:49:41 +08:00
										 |  |  | 				buf.push(""); | 
					
						
							|  |  |  | 				buf.push("// __webpack_hash__"); | 
					
						
							| 
									
										
										
										
											2017-02-27 16:21:35 +08:00
										 |  |  | 				buf.push(`${this.requireFn}.h = ${JSON.stringify(hash)};`); | 
					
						
							| 
									
										
										
										
											2017-03-22 23:09:53 +08:00
										 |  |  | 				buf.push(""); | 
					
						
							|  |  |  | 				buf.push("// __webpack_chunkname__"); | 
					
						
							|  |  |  | 				buf.push(`${this.requireFn}.cn = ${JSON.stringify(chunk.name)};`); | 
					
						
							| 
									
										
										
										
											2017-02-26 23:49:41 +08:00
										 |  |  | 				return this.asString(buf); | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 			compilation.mainTemplate.plugin("global-hash", () => true); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			params.normalModuleFactory.plugin("parser", (parser, parserOptions) => { | 
					
						
							|  |  |  | 				Object.keys(REPLACEMENTS).forEach(key => { | 
					
						
							| 
									
										
										
										
											2017-02-27 16:21:35 +08:00
										 |  |  | 					parser.plugin(`expression ${key}`, ParserHelpers.toConstantDependency(REPLACEMENTS[key])); | 
					
						
							|  |  |  | 					parser.plugin(`evaluate typeof ${key}`, ParserHelpers.evaluateToString(REPLACEMENT_TYPES[key])); | 
					
						
							| 
									
										
										
										
											2017-02-26 23:49:41 +08:00
										 |  |  | 				}); | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 			}); | 
					
						
							| 
									
										
										
										
											2014-08-25 15:50:26 +08:00
										 |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2017-02-26 23:49:41 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module.exports = ExtendedAPIPlugin; |