mirror of https://github.com/webpack/webpack.git
				
				
				
			Use Parser#hooks instead of Tapable#plugin
This commit is contained in:
		
							parent
							
								
									84a3b2cd17
								
							
						
					
					
						commit
						9669c9e013
					
				|  | @ -41,8 +41,8 @@ class APIPlugin { | |||
| 
 | ||||
| 			const handler = parser => { | ||||
| 				Object.keys(REPLACEMENTS).forEach(key => { | ||||
| 					parser.plugin(`expression ${key}`, NO_WEBPACK_REQUIRE[key] ? ParserHelpers.toConstantDependency(parser, REPLACEMENTS[key]) : ParserHelpers.toConstantDependencyWithWebpackRequire(parser, REPLACEMENTS[key])); | ||||
| 					parser.plugin(`evaluate typeof ${key}`, ParserHelpers.evaluateToString(REPLACEMENT_TYPES[key])); | ||||
| 					parser.hooks.expression.for(key).tap("APIPlugin", NO_WEBPACK_REQUIRE[key] ? ParserHelpers.toConstantDependency(parser, REPLACEMENTS[key]) : ParserHelpers.toConstantDependencyWithWebpackRequire(parser, REPLACEMENTS[key])); | ||||
| 					parser.hooks.evaluateTypeof.for(key).tap("APIPlugin", ParserHelpers.evaluateToString(REPLACEMENT_TYPES[key])); | ||||
| 				}); | ||||
| 			}; | ||||
| 
 | ||||
|  |  | |||
|  | @ -22,7 +22,7 @@ class CompatibilityPlugin { | |||
| 				if(typeof parserOptions.browserify !== "undefined" && !parserOptions.browserify) | ||||
| 					return; | ||||
| 
 | ||||
| 				parser.plugin("call require", (expr) => { | ||||
| 				parser.hooks.call.for("require").tap("CompatibilityPlugin", (expr) => { | ||||
| 					// support for browserify style require delegator: "require(o, !0)"
 | ||||
| 					if(expr.arguments.length !== 2) return; | ||||
| 					const second = parser.evaluateExpression(expr.arguments[1]); | ||||
|  |  | |||
|  | @ -21,7 +21,7 @@ class ConstPlugin { | |||
| 			compilation.dependencyTemplates.set(ConstDependency, new ConstDependency.Template()); | ||||
| 
 | ||||
| 			const handler = parser => { | ||||
| 				parser.plugin("statement if", statement => { | ||||
| 				parser.hooks.statementIf.tap("ConstPlugin", statement => { | ||||
| 					const param = parser.evaluateExpression(statement.test); | ||||
| 					const bool = param.asBool(); | ||||
| 					if(typeof bool === "boolean") { | ||||
|  | @ -33,7 +33,7 @@ class ConstPlugin { | |||
| 						return bool; | ||||
| 					} | ||||
| 				}); | ||||
| 				parser.plugin("expression ?:", expression => { | ||||
| 				parser.hooks.expressionConditionalOperator.tap("ConstPlugin", expression => { | ||||
| 					const param = parser.evaluateExpression(expression.test); | ||||
| 					const bool = param.asBool(); | ||||
| 					if(typeof bool === "boolean") { | ||||
|  | @ -45,11 +45,11 @@ class ConstPlugin { | |||
| 						return bool; | ||||
| 					} | ||||
| 				}); | ||||
| 				parser.plugin("evaluate Identifier __resourceQuery", expr => { | ||||
| 				parser.hooks.evaluateIdentifier.for("__resourceQuery").tap("ConstPlugin", expr => { | ||||
| 					if(!parser.state.module) return; | ||||
| 					return ParserHelpers.evaluateToString(getQuery(parser.state.module.resource))(expr); | ||||
| 				}); | ||||
| 				parser.plugin("expression __resourceQuery", () => { | ||||
| 				parser.hooks.expression.for("__resourceQuery").tap("ConstPlugin", () => { | ||||
| 					if(!parser.state.module) return; | ||||
| 					parser.state.current.addVariable("__resourceQuery", JSON.stringify(getQuery(parser.state.module.resource))); | ||||
| 					return true; | ||||
|  |  | |||
|  | @ -56,7 +56,7 @@ class DefinePlugin { | |||
| 					const splittedKey = key.split("."); | ||||
| 					splittedKey.slice(1).forEach((_, i) => { | ||||
| 						const fullKey = prefix + splittedKey.slice(0, i + 1).join("."); | ||||
| 						parser.plugin("can-rename " + fullKey, ParserHelpers.approve); | ||||
| 						parser.hooks.canRename.for(fullKey).tap("DefinePlugin", ParserHelpers.approve); | ||||
| 					}); | ||||
| 				}; | ||||
| 
 | ||||
|  | @ -67,8 +67,8 @@ class DefinePlugin { | |||
| 					let recurseTypeof = false; | ||||
| 					code = toCode(code); | ||||
| 					if(!isTypeof) { | ||||
| 						parser.plugin("can-rename " + key, ParserHelpers.approve); | ||||
| 						parser.plugin("evaluate Identifier " + key, (expr) => { | ||||
| 						parser.hooks.canRename.for(key).tap("DefinePlugin", ParserHelpers.approve); | ||||
| 						parser.hooks.evaluateIdentifier.for(key).tap("DefinePlugin", (expr) => { | ||||
| 							/** | ||||
| 							 * this is needed in case there is a recursion in the DefinePlugin | ||||
| 							 * to prevent an endless recursion | ||||
|  | @ -84,10 +84,10 @@ class DefinePlugin { | |||
| 							res.setRange(expr.range); | ||||
| 							return res; | ||||
| 						}); | ||||
| 						parser.plugin("expression " + key, /__webpack_require__/.test(code) ? ParserHelpers.toConstantDependencyWithWebpackRequire(parser, code) : ParserHelpers.toConstantDependency(parser, code)); | ||||
| 						parser.hooks.expression.for(key).tap("DefinePlugin", /__webpack_require__/.test(code) ? ParserHelpers.toConstantDependencyWithWebpackRequire(parser, code) : ParserHelpers.toConstantDependency(parser, code)); | ||||
| 					} | ||||
| 					const typeofCode = isTypeof ? code : "typeof (" + code + ")"; | ||||
| 					parser.plugin("evaluate typeof " + key, (expr) => { | ||||
| 					parser.hooks.evaluateTypeof.for(key).tap("DefinePlugin", (expr) => { | ||||
| 						/** | ||||
| 						 * this is needed in case there is a recursion in the DefinePlugin | ||||
| 						 * to prevent an endless recursion | ||||
|  | @ -103,7 +103,7 @@ class DefinePlugin { | |||
| 						res.setRange(expr.range); | ||||
| 						return res; | ||||
| 					}); | ||||
| 					parser.plugin("typeof " + key, (expr) => { | ||||
| 					parser.hooks.typeof.for(key).tap("DefinePlugin", (expr) => { | ||||
| 						const res = parser.evaluate(typeofCode); | ||||
| 						if(!res.isString()) return; | ||||
| 						return ParserHelpers.toConstantDependency(parser, JSON.stringify(res.string)).bind(parser)(expr); | ||||
|  | @ -112,11 +112,11 @@ class DefinePlugin { | |||
| 
 | ||||
| 				const applyObjectDefine = (key, obj) => { | ||||
| 					const code = stringifyObj(obj); | ||||
| 					parser.plugin("can-rename " + key, ParserHelpers.approve); | ||||
| 					parser.plugin("evaluate Identifier " + key, (expr) => new BasicEvaluatedExpression().setTruthy().setRange(expr.range)); | ||||
| 					parser.plugin("evaluate typeof " + key, ParserHelpers.evaluateToString("object")); | ||||
| 					parser.plugin("expression " + key, /__webpack_require__/.test(code) ? ParserHelpers.toConstantDependencyWithWebpackRequire(parser, code) : ParserHelpers.toConstantDependency(parser, code)); | ||||
| 					parser.plugin("typeof " + key, ParserHelpers.toConstantDependency(parser, JSON.stringify("object"))); | ||||
| 					parser.hooks.canRename.for(key).tap("DefinePlugin", ParserHelpers.approve); | ||||
| 					parser.hooks.evaluateIdentifier.for(key).tap("DefinePlugin", (expr) => new BasicEvaluatedExpression().setTruthy().setRange(expr.range)); | ||||
| 					parser.hooks.evaluateTypeof.for(key).tap("DefinePlugin", ParserHelpers.evaluateToString("object")); | ||||
| 					parser.hooks.expression.for(key).tap("DefinePlugin", /__webpack_require__/.test(code) ? ParserHelpers.toConstantDependencyWithWebpackRequire(parser, code) : ParserHelpers.toConstantDependency(parser, code)); | ||||
| 					parser.hooks.typeof.for(key).tap("DefinePlugin", ParserHelpers.toConstantDependency(parser, JSON.stringify("object"))); | ||||
| 				}; | ||||
| 
 | ||||
| 				walkDefinitions(definitions, ""); | ||||
|  |  | |||
|  | @ -41,8 +41,8 @@ class ExtendedAPIPlugin { | |||
| 
 | ||||
| 			const handler = (parser, parserOptions) => { | ||||
| 				Object.keys(REPLACEMENTS).forEach(key => { | ||||
| 					parser.plugin(`expression ${key}`, ParserHelpers.toConstantDependencyWithWebpackRequire(parser, REPLACEMENTS[key])); | ||||
| 					parser.plugin(`evaluate typeof ${key}`, ParserHelpers.evaluateToString(REPLACEMENT_TYPES[key])); | ||||
| 					parser.hooks.expression.for(key).tap("ExtendedAPIPlugin", ParserHelpers.toConstantDependencyWithWebpackRequire(parser, REPLACEMENTS[key])); | ||||
| 					parser.hooks.evaluateTypeof.for(key).tap("ExtendedAPIPlugin", ParserHelpers.evaluateToString(REPLACEMENT_TYPES[key])); | ||||
| 				}); | ||||
| 			}; | ||||
| 
 | ||||
|  |  | |||
|  | @ -193,9 +193,9 @@ module.exports = class HotModuleReplacementPlugin { | |||
| 			}); | ||||
| 
 | ||||
| 			const handler = (parser, parserOptions) => { | ||||
| 				parser.plugin("expression __webpack_hash__", ParserHelpers.toConstantDependencyWithWebpackRequire(parser, "__webpack_require__.h()")); | ||||
| 				parser.plugin("evaluate typeof __webpack_hash__", ParserHelpers.evaluateToString("string")); | ||||
| 				parser.plugin("evaluate Identifier module.hot", expr => { | ||||
| 				parser.hooks.expression.for("__webpack_hash__").tap("HotModuleReplacementPlugin", ParserHelpers.toConstantDependencyWithWebpackRequire(parser, "__webpack_require__.h()")); | ||||
| 				parser.hooks.evaluateTypeof.for("__webpack_hash__").tap("HotModuleReplacementPlugin", ParserHelpers.evaluateToString("string")); | ||||
| 				parser.hooks.evaluateIdentifier.for("module.hot").tap("HotModuleReplacementPlugin", expr => { | ||||
| 					return ParserHelpers.evaluateToIdentifier("module.hot", !!parser.state.compilation.hotUpdateChunkTemplate)(expr); | ||||
| 				}); | ||||
| 				// TODO webpack 5: refactor this, no custom hooks
 | ||||
|  | @ -203,7 +203,7 @@ module.exports = class HotModuleReplacementPlugin { | |||
| 					parser.hooks.hotAcceptCallback = new SyncBailHook(["expression", "requests"]); | ||||
| 				if(!parser.hooks.hotAcceptWithoutCallback) | ||||
| 					parser.hooks.hotAcceptWithoutCallback = new SyncBailHook(["expression", "requests"]); | ||||
| 				parser.plugin("call module.hot.accept", expr => { | ||||
| 				parser.hooks.call.for("module.hot.accept").tap("HotModuleReplacementPlugin", expr => { | ||||
| 					if(!parser.state.compilation.hotUpdateChunkTemplate) return false; | ||||
| 					if(expr.arguments.length >= 1) { | ||||
| 						const arg = parser.evaluateExpression(expr.arguments[0]); | ||||
|  | @ -231,7 +231,7 @@ module.exports = class HotModuleReplacementPlugin { | |||
| 						} | ||||
| 					} | ||||
| 				}); | ||||
| 				parser.plugin("call module.hot.decline", expr => { | ||||
| 				parser.hooks.call.for("module.hot.decline").tap("HotModuleReplacementPlugin", expr => { | ||||
| 					if(!parser.state.compilation.hotUpdateChunkTemplate) return false; | ||||
| 					if(expr.arguments.length === 1) { | ||||
| 						const arg = parser.evaluateExpression(expr.arguments[0]); | ||||
|  | @ -250,7 +250,7 @@ module.exports = class HotModuleReplacementPlugin { | |||
| 						}); | ||||
| 					} | ||||
| 				}); | ||||
| 				parser.plugin("expression module.hot", ParserHelpers.skipTraversal); | ||||
| 				parser.hooks.expression.for("module.hot").tap("HotModuleReplacementPlugin", ParserHelpers.skipTraversal); | ||||
| 			}; | ||||
| 
 | ||||
| 			// TODO add HMR support for javascript/esm
 | ||||
|  |  | |||
|  | @ -32,14 +32,14 @@ class NodeStuffPlugin { | |||
| 					localOptions = Object.assign({}, localOptions, parserOptions.node); | ||||
| 
 | ||||
| 				const setConstant = (expressionName, value) => { | ||||
| 					parser.plugin(`expression ${expressionName}`, () => { | ||||
| 					parser.hooks.expression.for(expressionName).tap("NodeStuffPlugin", () => { | ||||
| 						parser.state.current.addVariable(expressionName, JSON.stringify(value)); | ||||
| 						return true; | ||||
| 					}); | ||||
| 				}; | ||||
| 
 | ||||
| 				const setModuleConstant = (expressionName, fn) => { | ||||
| 					parser.plugin(`expression ${expressionName}`, () => { | ||||
| 					parser.hooks.expression.for(expressionName).tap("NodeStuffPlugin", () => { | ||||
| 						parser.state.current.addVariable(expressionName, JSON.stringify(fn(parser.state.module))); | ||||
| 						return true; | ||||
| 					}); | ||||
|  | @ -50,7 +50,7 @@ class NodeStuffPlugin { | |||
| 				} else if(localOptions.__filename) { | ||||
| 					setModuleConstant("__filename", module => path.relative(context, module.resource)); | ||||
| 				} | ||||
| 				parser.plugin("evaluate Identifier __filename", expr => { | ||||
| 				parser.hooks.evaluateIdentifier.for("__filename").tap("NodeStuffPlugin", expr => { | ||||
| 					if(!parser.state.module) return; | ||||
| 					const resource = parser.state.module.resource; | ||||
| 					const i = resource.indexOf("?"); | ||||
|  | @ -61,31 +61,28 @@ class NodeStuffPlugin { | |||
| 				} else if(localOptions.__dirname) { | ||||
| 					setModuleConstant("__dirname", module => path.relative(context, module.context)); | ||||
| 				} | ||||
| 				parser.plugin("evaluate Identifier __dirname", expr => { | ||||
| 				parser.hooks.evaluateIdentifier.for("__dirname").tap("NodeStuffPlugin", expr => { | ||||
| 					if(!parser.state.module) return; | ||||
| 					return ParserHelpers.evaluateToString(parser.state.module.context)(expr); | ||||
| 				}); | ||||
| 				parser.plugin("expression require.main", ParserHelpers.toConstantDependencyWithWebpackRequire(parser, "__webpack_require__.c[__webpack_require__.s]")); | ||||
| 				parser.plugin( | ||||
| 					"expression require.extensions", | ||||
| 					ParserHelpers.expressionIsUnsupported(parser, "require.extensions is not supported by webpack. Use a loader instead.") | ||||
| 				); | ||||
| 				parser.plugin("expression module.loaded", expr => { | ||||
| 				parser.hooks.expression.for("require.main").tap("NodeStuffPlugin", ParserHelpers.toConstantDependencyWithWebpackRequire(parser, "__webpack_require__.c[__webpack_require__.s]")); | ||||
| 				parser.hooks.expression.for("require.extensions").tap("NodeStuffPlugin", ParserHelpers.expressionIsUnsupported(parser, "require.extensions is not supported by webpack. Use a loader instead.")); | ||||
| 				parser.hooks.expression.for("module.loaded").tap("NodeStuffPlugin", expr => { | ||||
| 					parser.state.module.buildMeta.moduleConcatenationBailout = "module.loaded"; | ||||
| 					return ParserHelpers.toConstantDependency(parser, "module.l")(expr); | ||||
| 				}); | ||||
| 				parser.plugin("expression module.id", expr => { | ||||
| 				parser.hooks.expression.for("module.id").tap("NodeStuffPlugin", expr => { | ||||
| 					parser.state.module.buildMeta.moduleConcatenationBailout = "module.id"; | ||||
| 					return ParserHelpers.toConstantDependency(parser, "module.i")(expr); | ||||
| 				}); | ||||
| 				parser.plugin("expression module.exports", () => { | ||||
| 				parser.hooks.expression.for("module.exports").tap("NodeStuffPlugin", () => { | ||||
| 					const module = parser.state.module; | ||||
| 					const isHarmony = module.buildMeta && module.buildMeta.harmonyModule; | ||||
| 					if(!isHarmony) | ||||
| 						return true; | ||||
| 				}); | ||||
| 				parser.plugin("evaluate Identifier module.hot", ParserHelpers.evaluateToIdentifier("module.hot", false)); | ||||
| 				parser.plugin("expression module", () => { | ||||
| 				parser.hooks.evaluateIdentifier.for("module.hot").tap("NodeStuffPlugin", ParserHelpers.evaluateToIdentifier("module.hot", false)); | ||||
| 				parser.hooks.expression.for("module").tap("NodeStuffPlugin", () => { | ||||
| 					const module = parser.state.module; | ||||
| 					const isHarmony = module.buildMeta && module.buildMeta.harmonyModule; | ||||
| 					let moduleJsPath = path.join(__dirname, "..", "buildin", isHarmony ? "harmony-module.js" : "module.js"); | ||||
|  |  | |||
|  | @ -70,13 +70,13 @@ class Parser extends Tapable { | |||
| 			assigned: new HookMap(() => new SyncBailHook(["expression"])), | ||||
| 			assign: new HookMap(() => new SyncBailHook(["expression"])), | ||||
| 			typeof: new HookMap(() => new SyncBailHook(["expression"])), | ||||
| 			expressionConditionalOperator: new SyncBailHook(["expression"]), | ||||
| 			importCall: new SyncBailHook(["expression"]), | ||||
| 			call: new HookMap(() => new SyncBailHook(["expression"])), | ||||
| 			callAnyMember: new HookMap(() => new SyncBailHook(["expression"])), | ||||
| 			new: new HookMap(() => new SyncBailHook(["expression"])), | ||||
| 			expression: new HookMap(() => new SyncBailHook(["expression"])), | ||||
| 			expressionAnyMember: new HookMap(() => new SyncBailHook(["expression"])), | ||||
| 			expressionConditionalOperator: new SyncBailHook(["expression"]), | ||||
| 			program: new SyncBailHook(["ast", "comments"]), | ||||
| 		}; | ||||
| 		const HOOK_MAP_COMPAT_CONFIG = { | ||||
|  | @ -95,10 +95,10 @@ class Parser extends Tapable { | |||
| 			typeof: /^typeof (.+)$/, | ||||
| 			assigned: /^assigned (.+)$/, | ||||
| 			assign: /^assign (.+)$/, | ||||
| 			expressionConditionalOperator: /^expression \?:$/, | ||||
| 			callAnyMember: /^call (.+)\.\*$/, | ||||
| 			call: /^call (.+)$/, | ||||
| 			new: /^new (.+)$/, | ||||
| 			expressionConditionalOperator: /^expression \?:$/, | ||||
| 			expressionAnyMember: /^expression (.+)\.\*$/, | ||||
| 			expression: /^expression (.+)$/, | ||||
| 		}; | ||||
|  | @ -123,7 +123,7 @@ class Parser extends Tapable { | |||
| 	} | ||||
| 
 | ||||
| 	initializeEvaluating() { | ||||
| 		this.plugin("evaluate Literal", expr => { | ||||
| 		this.hooks.evaluate.for("Literal").tap("Parser", expr => { | ||||
| 			switch(typeof expr.value) { | ||||
| 				case "number": | ||||
| 					return new BasicEvaluatedExpression().setNumber(expr.value).setRange(expr.range); | ||||
|  | @ -137,7 +137,7 @@ class Parser extends Tapable { | |||
| 			if(expr.value instanceof RegExp) | ||||
| 				return new BasicEvaluatedExpression().setRegExp(expr.value).setRange(expr.range); | ||||
| 		}); | ||||
| 		this.plugin("evaluate LogicalExpression", expr => { | ||||
| 		this.hooks.evaluate.for("LogicalExpression").tap("Parser", expr => { | ||||
| 			let left; | ||||
| 			let leftAsBool; | ||||
| 			let right; | ||||
|  | @ -157,7 +157,7 @@ class Parser extends Tapable { | |||
| 				return right.setRange(expr.range); | ||||
| 			} | ||||
| 		}); | ||||
| 		this.plugin("evaluate BinaryExpression", expr => { | ||||
| 		this.hooks.evaluate.for("BinaryExpression").tap("Parser", expr => { | ||||
| 			let left; | ||||
| 			let right; | ||||
| 			let res; | ||||
|  | @ -340,7 +340,7 @@ class Parser extends Tapable { | |||
| 				return res; | ||||
| 			} | ||||
| 		}); | ||||
| 		this.plugin("evaluate UnaryExpression", expr => { | ||||
| 		this.hooks.evaluate.for("UnaryExpression").tap("Parser", expr => { | ||||
| 			if(expr.operator === "typeof") { | ||||
| 				let res; | ||||
| 				let name; | ||||
|  | @ -396,10 +396,10 @@ class Parser extends Tapable { | |||
| 				return res; | ||||
| 			} | ||||
| 		}); | ||||
| 		this.plugin("evaluate typeof undefined", expr => { | ||||
| 		this.hooks.evaluateTypeof.for("undefined").tap("Parser", expr => { | ||||
| 			return new BasicEvaluatedExpression().setString("undefined").setRange(expr.range); | ||||
| 		}); | ||||
| 		this.plugin("evaluate Identifier", expr => { | ||||
| 		this.hooks.evaluate.for("Identifier").tap("Parser", expr => { | ||||
| 			const name = this.scope.renames.get(expr.name) || expr.name; | ||||
| 			if(!this.scope.definitions.has(expr.name)) { | ||||
| 				const hook = this.hooks.evaluateIdentifier.get(name); | ||||
|  | @ -415,7 +415,7 @@ class Parser extends Tapable { | |||
| 				} | ||||
| 			} | ||||
| 		}); | ||||
| 		this.plugin("evaluate ThisExpression", expr => { | ||||
| 		this.hooks.evaluate.for("ThisExpression").tap("Parser", expr => { | ||||
| 			const name = this.scope.renames.get("this"); | ||||
| 			if(name) { | ||||
| 				const hook = this.hooks.evaluateIdentifier.get(name); | ||||
|  | @ -426,7 +426,7 @@ class Parser extends Tapable { | |||
| 				return new BasicEvaluatedExpression().setIdentifier(name).setRange(expr.range); | ||||
| 			} | ||||
| 		}); | ||||
| 		this.plugin("evaluate MemberExpression", expression => { | ||||
| 		this.hooks.evaluate.for("MemberExpression").tap("Parser", expression => { | ||||
| 			let exprName = this.getNameForExpression(expression); | ||||
| 			if(exprName) { | ||||
| 				if(exprName.free) { | ||||
|  | @ -444,7 +444,7 @@ class Parser extends Tapable { | |||
| 				} | ||||
| 			} | ||||
| 		}); | ||||
| 		this.plugin("evaluate CallExpression", expr => { | ||||
| 		this.hooks.evaluate.for("CallExpression").tap("Parser", expr => { | ||||
| 			if(expr.callee.type !== "MemberExpression") return; | ||||
| 			if(expr.callee.property.type !== (expr.callee.computed ? "Literal" : "Identifier")) return; | ||||
| 			const param = this.evaluateExpression(expr.callee.object); | ||||
|  | @ -455,7 +455,7 @@ class Parser extends Tapable { | |||
| 				return hook.call(expr, param); | ||||
| 			} | ||||
| 		}); | ||||
| 		this.plugin("evaluate CallExpression .replace", (expr, param) => { | ||||
| 		this.hooks.evaluateCallExpressionMember.for("replace").tap("Parser", (expr, param) => { | ||||
| 			if(!param.isString()) return; | ||||
| 			if(expr.arguments.length !== 2) return; | ||||
| 			let arg1 = this.evaluateExpression(expr.arguments[0]); | ||||
|  | @ -467,7 +467,7 @@ class Parser extends Tapable { | |||
| 			return new BasicEvaluatedExpression().setString(param.string.replace(arg1, arg2)).setRange(expr.range); | ||||
| 		}); | ||||
| 		["substr", "substring"].forEach(fn => { | ||||
| 			this.plugin("evaluate CallExpression ." + fn, (expr, param) => { | ||||
| 			this.hooks.evaluateCallExpressionMember.for(fn).tap("Parser", (expr, param) => { | ||||
| 				if(!param.isString()) return; | ||||
| 				let arg1; | ||||
| 				let result, str = param.string; | ||||
|  | @ -519,20 +519,20 @@ class Parser extends Tapable { | |||
| 			return parts; | ||||
| 		}; | ||||
| 
 | ||||
| 		this.plugin("evaluate TemplateLiteral", node => { | ||||
| 		this.hooks.evaluate.for("TemplateLiteral").tap("Parser", node => { | ||||
| 			const parts = getSimplifiedTemplateResult.call(this, "cooked", node.quasis, node.expressions); | ||||
| 			if(parts.length === 1) { | ||||
| 				return parts[0].setRange(node.range); | ||||
| 			} | ||||
| 			return new BasicEvaluatedExpression().setTemplateString(parts).setRange(node.range); | ||||
| 		}); | ||||
| 		this.plugin("evaluate TaggedTemplateExpression", node => { | ||||
| 		this.hooks.evaluate.for("TaggedTemplateExpression").tap("Parser", node => { | ||||
| 			if(this.evaluateExpression(node.tag).identifier !== "String.raw") return; | ||||
| 			const parts = getSimplifiedTemplateResult.call(this, "raw", node.quasi.quasis, node.quasi.expressions); | ||||
| 			return new BasicEvaluatedExpression().setTemplateString(parts).setRange(node.range); | ||||
| 		}); | ||||
| 
 | ||||
| 		this.plugin("evaluate CallExpression .concat", (expr, param) => { | ||||
| 		this.hooks.evaluateCallExpressionMember.for("concat").tap("Parser", (expr, param) => { | ||||
| 			if(!param.isString() && !param.isWrapped()) return; | ||||
| 
 | ||||
| 			let stringSuffix = null; | ||||
|  | @ -562,7 +562,7 @@ class Parser extends Tapable { | |||
| 				return new BasicEvaluatedExpression().setString(newString).setRange(expr.range); | ||||
| 			} | ||||
| 		}); | ||||
| 		this.plugin("evaluate CallExpression .split", (expr, param) => { | ||||
| 		this.hooks.evaluateCallExpressionMember.for("split").tap("Parser", (expr, param) => { | ||||
| 			if(!param.isString()) return; | ||||
| 			if(expr.arguments.length !== 1) return; | ||||
| 			let result; | ||||
|  | @ -574,7 +574,7 @@ class Parser extends Tapable { | |||
| 			} else return; | ||||
| 			return new BasicEvaluatedExpression().setArray(result).setRange(expr.range); | ||||
| 		}); | ||||
| 		this.plugin("evaluate ConditionalExpression", expr => { | ||||
| 		this.hooks.evaluate.for("ConditionalExpression").tap("Parser", expr => { | ||||
| 			const condition = this.evaluateExpression(expr.test); | ||||
| 			const conditionValue = condition.asBool(); | ||||
| 			let res; | ||||
|  | @ -597,7 +597,7 @@ class Parser extends Tapable { | |||
| 			res.setRange(expr.range); | ||||
| 			return res; | ||||
| 		}); | ||||
| 		this.plugin("evaluate ArrayExpression", expr => { | ||||
| 		this.hooks.evaluate.for("ArrayExpression").tap("Parser", expr => { | ||||
| 			const items = expr.elements.map(element => { | ||||
| 				return element !== null && this.evaluateExpression(element); | ||||
| 			}); | ||||
|  |  | |||
|  | @ -20,11 +20,11 @@ module.exports = class RequireJsStuffPlugin { | |||
| 				if(typeof parserOptions.requireJs !== "undefined" && !parserOptions.requireJs) | ||||
| 					return; | ||||
| 
 | ||||
| 				parser.plugin("call require.config", ParserHelpers.toConstantDependency(parser, "undefined")); | ||||
| 				parser.plugin("call requirejs.config", ParserHelpers.toConstantDependency(parser, "undefined")); | ||||
| 				parser.hooks.call.for("require.config").tap("RequireJsStuffPlugin", ParserHelpers.toConstantDependency(parser, "undefined")); | ||||
| 				parser.hooks.call.for("requirejs.config").tap("RequireJsStuffPlugin", ParserHelpers.toConstantDependency(parser, "undefined")); | ||||
| 
 | ||||
| 				parser.plugin("expression require.version", ParserHelpers.toConstantDependency(parser, JSON.stringify("0.0.0"))); | ||||
| 				parser.plugin("expression requirejs.onError", ParserHelpers.toConstantDependencyWithWebpackRequire(parser, "__webpack_require__.oe")); | ||||
| 				parser.hooks.expression.for("require.version").tap("RequireJsStuffPlugin", ParserHelpers.toConstantDependency(parser, JSON.stringify("0.0.0"))); | ||||
| 				parser.hooks.expression.for("requirejs.onError").tap("RequireJsStuffPlugin", ParserHelpers.toConstantDependencyWithWebpackRequire(parser, "__webpack_require__.oe")); | ||||
| 			}; | ||||
| 			normalModuleFactory.hooks.parser.for("javascript/auto").tap("RequireJsStuffPlugin", handler); | ||||
| 			normalModuleFactory.hooks.parser.for("javascript/dynamic").tap("RequireJsStuffPlugin", handler); | ||||
|  |  | |||
|  | @ -123,7 +123,7 @@ class AMDDefineDependencyParserPlugin { | |||
| 			return true; | ||||
| 		}; | ||||
| 
 | ||||
| 		parser.plugin("call define", (expr) => { | ||||
| 		parser.hooks.call.for("define").tap("AMDDefineDependencyParserPlugin", (expr) => { | ||||
| 			let array, fn, obj, namedModule; | ||||
| 			switch(expr.arguments.length) { | ||||
| 				case 1: | ||||
|  |  | |||
|  | @ -61,7 +61,7 @@ class AMDPlugin { | |||
| 					return; | ||||
| 
 | ||||
| 				const setExpressionToModule = (outerExpr, module) => { | ||||
| 					parser.plugin("expression " + outerExpr, (expr) => { | ||||
| 					parser.hooks.expression.for(outerExpr).tap("AMDPlugin", (expr) => { | ||||
| 						const dep = new AMDRequireItemDependency(module, expr.range); | ||||
| 						dep.userRequest = outerExpr; | ||||
| 						dep.loc = expr.loc; | ||||
|  | @ -77,24 +77,24 @@ class AMDPlugin { | |||
| 				setExpressionToModule("define.amd", "!!webpack amd options"); | ||||
| 				setExpressionToModule("define", "!!webpack amd define"); | ||||
| 
 | ||||
| 				parser.plugin("expression __webpack_amd_options__", () => | ||||
| 				parser.hooks.expression.for("__webpack_amd_options__").tap("AMDPlugin", () => | ||||
| 					parser.state.current.addVariable("__webpack_amd_options__", JSON.stringify(amdOptions))); | ||||
| 				parser.plugin("evaluate typeof define.amd", ParserHelpers.evaluateToString(typeof amdOptions)); | ||||
| 				parser.plugin("evaluate typeof require.amd", ParserHelpers.evaluateToString(typeof amdOptions)); | ||||
| 				parser.plugin("evaluate Identifier define.amd", ParserHelpers.evaluateToIdentifier("define.amd", true)); | ||||
| 				parser.plugin("evaluate Identifier require.amd", ParserHelpers.evaluateToIdentifier("require.amd", true)); | ||||
| 				parser.plugin("typeof define", ParserHelpers.toConstantDependency(parser, JSON.stringify("function"))); | ||||
| 				parser.plugin("evaluate typeof define", ParserHelpers.evaluateToString("function")); | ||||
| 				parser.plugin("can-rename define", ParserHelpers.approve); | ||||
| 				parser.plugin("rename define", (expr) => { | ||||
| 				parser.hooks.evaluateTypeof.for("define.amd").tap("AMDPlugin", ParserHelpers.evaluateToString(typeof amdOptions)); | ||||
| 				parser.hooks.evaluateTypeof.for("require.amd").tap("AMDPlugin", ParserHelpers.evaluateToString(typeof amdOptions)); | ||||
| 				parser.hooks.evaluateIdentifier.for("define.amd").tap("AMDPlugin", ParserHelpers.evaluateToIdentifier("define.amd", true)); | ||||
| 				parser.hooks.evaluateIdentifier.for("require.amd").tap("AMDPlugin", ParserHelpers.evaluateToIdentifier("require.amd", true)); | ||||
| 				parser.hooks.typeof.for("define").tap("AMDPlugin", ParserHelpers.toConstantDependency(parser, JSON.stringify("function"))); | ||||
| 				parser.hooks.evaluateTypeof.for("define").tap("AMDPlugin", ParserHelpers.evaluateToString("function")); | ||||
| 				parser.hooks.canRename.for("define").tap("AMDPlugin", ParserHelpers.approve); | ||||
| 				parser.hooks.rename.for("define").tap("AMDPlugin", (expr) => { | ||||
| 					const dep = new AMDRequireItemDependency("!!webpack amd define", expr.range); | ||||
| 					dep.userRequest = "define"; | ||||
| 					dep.loc = expr.loc; | ||||
| 					parser.state.current.addDependency(dep); | ||||
| 					return false; | ||||
| 				}); | ||||
| 				parser.plugin("typeof require", ParserHelpers.toConstantDependency(parser, JSON.stringify("function"))); | ||||
| 				parser.plugin("evaluate typeof require", ParserHelpers.evaluateToString("function")); | ||||
| 				parser.hooks.typeof.for("require").tap("AMDPlugin", ParserHelpers.toConstantDependency(parser, JSON.stringify("function"))); | ||||
| 				parser.hooks.evaluateTypeof.for("require").tap("AMDPlugin", ParserHelpers.evaluateToString("function")); | ||||
| 			}; | ||||
| 
 | ||||
| 			normalModuleFactory.hooks.parser.for("javascript/auto").tap("AMDPlugin", handler); | ||||
|  |  | |||
|  | @ -119,7 +119,7 @@ class AMDRequireDependenciesBlockParserPlugin { | |||
| 			return true; | ||||
| 		}; | ||||
| 
 | ||||
| 		parser.plugin("call require", (expr) => { | ||||
| 		parser.hooks.call.for("require").tap("AMDRequireDependenciesBlockParserPlugin", (expr) => { | ||||
| 			let param; | ||||
| 			let dep; | ||||
| 			let result; | ||||
|  |  | |||
|  | @ -53,13 +53,13 @@ class CommonJsPlugin { | |||
| 
 | ||||
| 				const requireExpressions = ["require", "require.resolve", "require.resolveWeak"]; | ||||
| 				for(let expression of requireExpressions) { | ||||
| 					parser.plugin(`typeof ${expression}`, ParserHelpers.toConstantDependency(parser, JSON.stringify("function"))); | ||||
| 					parser.plugin(`evaluate typeof ${expression}`, ParserHelpers.evaluateToString("function")); | ||||
| 					parser.plugin(`evaluate Identifier ${expression}`, ParserHelpers.evaluateToIdentifier(expression, true)); | ||||
| 					parser.hooks.typeof.for(expression).tap("CommonJsPlugin", ParserHelpers.toConstantDependency(parser, JSON.stringify("function"))); | ||||
| 					parser.hooks.evaluateTypeof.for(expression).tap("CommonJsPlugin", ParserHelpers.evaluateToString("function")); | ||||
| 					parser.hooks.evaluateIdentifier.for(expression).tap("CommonJsPlugin", ParserHelpers.evaluateToIdentifier(expression, true)); | ||||
| 				} | ||||
| 
 | ||||
| 				parser.plugin("evaluate typeof module", ParserHelpers.evaluateToString("object")); | ||||
| 				parser.plugin("assign require", (expr) => { | ||||
| 				parser.hooks.evaluateTypeof.for("module").tap("CommonJsPlugin", ParserHelpers.evaluateToString("object")); | ||||
| 				parser.hooks.assign.for("require").tap("CommonJsPlugin", (expr) => { | ||||
| 					// to not leak to global "require", we need to define a local require here.
 | ||||
| 					const dep = new ConstDependency("var require;", 0); | ||||
| 					dep.loc = expr.loc; | ||||
|  | @ -67,16 +67,16 @@ class CommonJsPlugin { | |||
| 					parser.scope.definitions.add("require"); | ||||
| 					return true; | ||||
| 				}); | ||||
| 				parser.plugin("can-rename require", () => true); | ||||
| 				parser.plugin("rename require", (expr) => { | ||||
| 				parser.hooks.canRename.for("require").tap("CommonJsPlugin", () => true); | ||||
| 				parser.hooks.rename.for("require").tap("CommonJsPlugin", (expr) => { | ||||
| 					// define the require variable. It's still undefined, but not "not defined".
 | ||||
| 					const dep = new ConstDependency("var require;", 0); | ||||
| 					dep.loc = expr.loc; | ||||
| 					parser.state.current.addDependency(dep); | ||||
| 					return false; | ||||
| 				}); | ||||
| 				parser.plugin("typeof module", () => true); | ||||
| 				parser.plugin("evaluate typeof exports", ParserHelpers.evaluateToString("object")); | ||||
| 				parser.hooks.typeof.for("module").tap("CommonJsPlugin", () => true); | ||||
| 				parser.hooks.evaluateTypeof.for("exports").tap("CommonJsPlugin", ParserHelpers.evaluateToString("object")); | ||||
| 
 | ||||
| 				new CommonJsRequireDependencyParserPlugin(options).apply(parser); | ||||
| 				new RequireResolveDependencyParserPlugin(options).apply(parser); | ||||
|  |  | |||
|  | @ -38,8 +38,8 @@ class CommonJsRequireDependencyParserPlugin { | |||
| 			return true; | ||||
| 		}; | ||||
| 
 | ||||
| 		parser.plugin("expression require.cache", ParserHelpers.toConstantDependencyWithWebpackRequire(parser, "__webpack_require__.c")); | ||||
| 		parser.plugin("expression require", (expr) => { | ||||
| 		parser.hooks.expression.for("require.cache").tap("CommonJsRequireDependencyParserPlugin", ParserHelpers.toConstantDependencyWithWebpackRequire(parser, "__webpack_require__.c")); | ||||
| 		parser.hooks.expression.for("require").tap("CommonJsRequireDependencyParserPlugin", (expr) => { | ||||
| 			const dep = new CommonJsRequireContextDependency({ | ||||
| 				request: options.unknownContextRequest, | ||||
| 				recursive: options.unknownContextRecursive, | ||||
|  | @ -52,7 +52,7 @@ class CommonJsRequireDependencyParserPlugin { | |||
| 			parser.state.current.addDependency(dep); | ||||
| 			return true; | ||||
| 		}); | ||||
| 		parser.plugin("call require", (expr) => { | ||||
| 		parser.hooks.call.for("require").tap("CommonJsRequireDependencyParserPlugin", (expr) => { | ||||
| 			if(expr.arguments.length !== 1) return; | ||||
| 			let localModule; | ||||
| 			const param = parser.evaluateExpression(expr.arguments[0]); | ||||
|  |  | |||
|  | @ -9,7 +9,7 @@ const HarmonyInitDependency = require("./HarmonyInitDependency"); | |||
| 
 | ||||
| module.exports = class HarmonyDetectionParserPlugin { | ||||
| 	apply(parser) { | ||||
| 		parser.plugin("program", (ast) => { | ||||
| 		parser.hooks.program.tap("HarmonyDetectionParserPlugin", (ast) => { | ||||
| 			const isStrictHarmony = parser.state.module.type === "javascript/esm"; | ||||
| 			const isHarmony = isStrictHarmony || ast.body.some(statement => { | ||||
| 				return /^(Import|Export).*Declaration$/.test(statement.type); | ||||
|  | @ -67,11 +67,11 @@ module.exports = class HarmonyDetectionParserPlugin { | |||
| 
 | ||||
| 		const nonHarmonyIdentifiers = ["define", "exports"]; | ||||
| 		nonHarmonyIdentifiers.forEach(identifer => { | ||||
| 			parser.plugin(`evaluate typeof ${identifer}`, nullInHarmony); | ||||
| 			parser.plugin(`typeof ${identifer}`, skipInHarmony); | ||||
| 			parser.plugin(`evaluate ${identifer}`, nullInHarmony); | ||||
| 			parser.plugin(`expression ${identifer}`, skipInHarmony); | ||||
| 			parser.plugin(`call ${identifer}`, skipInHarmony); | ||||
| 			parser.hooks.evaluateTypeof.for(identifer).tap("HarmonyDetectionParserPlugin", nullInHarmony); | ||||
| 			parser.hooks.typeof.for(identifer).tap("HarmonyDetectionParserPlugin", skipInHarmony); | ||||
| 			parser.hooks.evaluate.for(identifer).tap("HarmonyDetectionParserPlugin", nullInHarmony); | ||||
| 			parser.hooks.expression.for(identifer).tap("HarmonyDetectionParserPlugin", skipInHarmony); | ||||
| 			parser.hooks.call.for(identifer).tap("HarmonyDetectionParserPlugin", skipInHarmony); | ||||
| 		}); | ||||
| 	} | ||||
| }; | ||||
|  |  | |||
|  | @ -17,14 +17,14 @@ module.exports = class HarmonyExportDependencyParserPlugin { | |||
| 	} | ||||
| 
 | ||||
| 	apply(parser) { | ||||
| 		parser.plugin("export", statement => { | ||||
| 		parser.hooks.export.tap("HarmonyExportDependencyParserPlugin", statement => { | ||||
| 			const dep = new HarmonyExportHeaderDependency(statement.declaration && statement.declaration.range, statement.range); | ||||
| 			dep.loc = Object.create(statement.loc); | ||||
| 			dep.loc.index = -1; | ||||
| 			parser.state.current.addDependency(dep); | ||||
| 			return true; | ||||
| 		}); | ||||
| 		parser.plugin("export import", (statement, source) => { | ||||
| 		parser.hooks.exportImport.tap("HarmonyExportDependencyParserPlugin", (statement, source) => { | ||||
| 			parser.state.lastHarmonyImportOrder = (parser.state.lastHarmonyImportOrder || 0) + 1; | ||||
| 			const clearDep = new ConstDependency("", statement.range); | ||||
| 			clearDep.loc = Object.create(statement.loc); | ||||
|  | @ -36,15 +36,15 @@ module.exports = class HarmonyExportDependencyParserPlugin { | |||
| 			parser.state.current.addDependency(sideEffectDep); | ||||
| 			return true; | ||||
| 		}); | ||||
| 		parser.plugin("export expression", (statement, expr) => { | ||||
| 		parser.hooks.exportExpression.tap("HarmonyExportDependencyParserPlugin", (statement, expr) => { | ||||
| 			const dep = new HarmonyExportExpressionDependency(parser.state.module, expr.range, statement.range); | ||||
| 			dep.loc = Object.create(statement.loc); | ||||
| 			dep.loc.index = -1; | ||||
| 			parser.state.current.addDependency(dep); | ||||
| 			return true; | ||||
| 		}); | ||||
| 		parser.plugin("export declaration", statement => {}); | ||||
| 		parser.plugin("export specifier", (statement, id, name, idx) => { | ||||
| 		parser.hooks.exportDeclaration.tap("HarmonyExportDependencyParserPlugin", statement => {}); | ||||
| 		parser.hooks.exportSpecifier.tap("HarmonyExportDependencyParserPlugin", (statement, id, name, idx) => { | ||||
| 			const rename = parser.scope.renames.get(id); | ||||
| 			let dep; | ||||
| 			const harmonyNamedExports = parser.state.harmonyNamedExports = parser.state.harmonyNamedExports || new Set(); | ||||
|  | @ -60,7 +60,7 @@ module.exports = class HarmonyExportDependencyParserPlugin { | |||
| 			parser.state.current.addDependency(dep); | ||||
| 			return true; | ||||
| 		}); | ||||
| 		parser.plugin("export import specifier", (statement, source, id, name, idx) => { | ||||
| 		parser.hooks.exportImportSpecifier.tap("HarmonyExportDependencyParserPlugin", (statement, source, id, name, idx) => { | ||||
| 			const harmonyNamedExports = parser.state.harmonyNamedExports = parser.state.harmonyNamedExports || new Set(); | ||||
| 			let harmonyStarExports = null; | ||||
| 			if(name) { | ||||
|  |  | |||
|  | @ -18,7 +18,7 @@ module.exports = class HarmonyImportDependencyParserPlugin { | |||
| 	} | ||||
| 
 | ||||
| 	apply(parser) { | ||||
| 		parser.plugin("import", (statement, source) => { | ||||
| 		parser.hooks.import.tap("HarmonyImportDependencyParserPlugin", (statement, source) => { | ||||
| 			parser.state.lastHarmonyImportOrder = (parser.state.lastHarmonyImportOrder || 0) + 1; | ||||
| 			const clearDep = new ConstDependency("", statement.range); | ||||
| 			clearDep.loc = statement.loc; | ||||
|  | @ -28,7 +28,7 @@ module.exports = class HarmonyImportDependencyParserPlugin { | |||
| 			parser.state.module.addDependency(sideEffectDep); | ||||
| 			return true; | ||||
| 		}); | ||||
| 		parser.plugin("import specifier", (statement, source, id, name) => { | ||||
| 		parser.hooks.importSpecifier.tap("HarmonyImportDependencyParserPlugin", (statement, source, id, name) => { | ||||
| 			parser.scope.definitions.delete(name); | ||||
| 			parser.scope.renames.set(name, "imported var"); | ||||
| 			if(!parser.state.harmonySpecifier) parser.state.harmonySpecifier = new Map(); | ||||
|  | @ -39,7 +39,7 @@ module.exports = class HarmonyImportDependencyParserPlugin { | |||
| 			}); | ||||
| 			return true; | ||||
| 		}); | ||||
| 		parser.plugin("expression imported var", (expr) => { | ||||
| 		parser.hooks.expression.for("imported var").tap("HarmonyImportDependencyParserPlugin", (expr) => { | ||||
| 			const name = expr.name; | ||||
| 			const settings = parser.state.harmonySpecifier.get(name); | ||||
| 			const dep = new HarmonyImportSpecifierDependency(settings.source, parser.state.module, settings.sourceOrder, parser.state.harmonyParserScope, settings.id, name, expr.range, this.strictExportPresence); | ||||
|  | @ -49,7 +49,7 @@ module.exports = class HarmonyImportDependencyParserPlugin { | |||
| 			parser.state.module.addDependency(dep); | ||||
| 			return true; | ||||
| 		}); | ||||
| 		parser.plugin("expression imported var.*", (expr) => { | ||||
| 		parser.hooks.expressionAnyMember.for("imported var").tap("HarmonyImportDependencyParserPlugin", (expr) => { | ||||
| 			const name = expr.object.name; | ||||
| 			const settings = parser.state.harmonySpecifier.get(name); | ||||
| 			if(settings.id !== null) | ||||
|  | @ -63,7 +63,7 @@ module.exports = class HarmonyImportDependencyParserPlugin { | |||
| 		}); | ||||
| 		if(this.strictThisContextOnImports) { | ||||
| 			// only in case when we strictly follow the spec we need a special case here
 | ||||
| 			parser.plugin("call imported var.*", (expr) => { | ||||
| 			parser.hooks.callAnyMember.for("imported var").tap("HarmonyImportDependencyParserPlugin", (expr) => { | ||||
| 				if(expr.callee.type !== "MemberExpression") return; | ||||
| 				if(expr.callee.object.type !== "Identifier") return; | ||||
| 				const name = expr.callee.object.name; | ||||
|  | @ -81,7 +81,7 @@ module.exports = class HarmonyImportDependencyParserPlugin { | |||
| 				return true; | ||||
| 			}); | ||||
| 		} | ||||
| 		parser.plugin("call imported var", (expr) => { | ||||
| 		parser.hooks.call.for("imported var").tap("HarmonyImportDependencyParserPlugin", (expr) => { | ||||
| 			const args = expr.arguments; | ||||
| 			const fullExpr = expr; | ||||
| 			expr = expr.callee; | ||||
|  | @ -103,7 +103,7 @@ module.exports = class HarmonyImportDependencyParserPlugin { | |||
| 			parser.hooks.hotAcceptCallback = new SyncBailHook(["expression", "requests"]); | ||||
| 		if(!parser.hooks.hotAcceptWithoutCallback) | ||||
| 			parser.hooks.hotAcceptWithoutCallback = new SyncBailHook(["expression", "requests"]); | ||||
| 		parser.plugin("hot accept callback", (expr, requests) => { | ||||
| 		parser.hooks.hotAcceptCallback.tap("HarmonyImportDependencyParserPlugin", (expr, requests) => { | ||||
| 			const dependencies = requests | ||||
| 				.map(request => { | ||||
| 					const dep = new HarmonyAcceptImportDependency(request, parser.state.module, parser.state.harmonyParserScope); | ||||
|  | @ -117,7 +117,7 @@ module.exports = class HarmonyImportDependencyParserPlugin { | |||
| 				parser.state.module.addDependency(dep); | ||||
| 			} | ||||
| 		}); | ||||
| 		parser.plugin("hot accept without callback", (expr, requests) => { | ||||
| 		parser.hooks.hotAcceptWithoutCallback.tap("HarmonyImportDependencyParserPlugin", (expr, requests) => { | ||||
| 			const dependencies = requests | ||||
| 				.map(request => { | ||||
| 					const dep = new HarmonyAcceptImportDependency(request, parser.state.module, parser.state.harmonyParserScope); | ||||
|  |  | |||
|  | @ -18,8 +18,7 @@ class ImportParserPlugin { | |||
| 
 | ||||
| 	apply(parser) { | ||||
| 		const options = this.options; | ||||
| 
 | ||||
| 		parser.plugin(["call System.import", "import-call"], (expr) => { | ||||
| 		const handler = (expr) => { | ||||
| 			if(expr.arguments.length !== 1) | ||||
| 				throw new Error("Incorrect number of arguments provided to 'import(module: string) -> Promise'."); | ||||
| 
 | ||||
|  | @ -98,7 +97,10 @@ class ImportParserPlugin { | |||
| 				parser.state.current.addDependency(dep); | ||||
| 				return true; | ||||
| 			} | ||||
| 		}); | ||||
| 		}; | ||||
| 
 | ||||
| 		parser.hooks.call.for("System.import").tap("ImportParserPlugin", handler); | ||||
| 		parser.hooks.importCall.tap("ImportParserPlugin", handler); | ||||
| 	} | ||||
| } | ||||
| module.exports = ImportParserPlugin; | ||||
|  |  | |||
|  | @ -8,7 +8,7 @@ const RequireContextDependency = require("./RequireContextDependency"); | |||
| 
 | ||||
| module.exports = class RequireContextDependencyParserPlugin { | ||||
| 	apply(parser) { | ||||
| 		parser.plugin("call require.context", expr => { | ||||
| 		parser.hooks.call.for("require.context").tap("RequireContextDependencyParserPlugin", expr => { | ||||
| 			let regExp = /^\.\/.*$/; | ||||
| 			let recursive = true; | ||||
| 			let mode = "sync"; | ||||
|  |  | |||
|  | @ -10,7 +10,7 @@ const getFunctionExpression = require("./getFunctionExpression"); | |||
| 
 | ||||
| module.exports = class RequireEnsureDependenciesBlockParserPlugin { | ||||
| 	apply(parser) { | ||||
| 		parser.plugin("call require.ensure", expr => { | ||||
| 		parser.hooks.call.for("require.ensure").tap("RequireEnsureDependenciesBlockParserPlugin", expr => { | ||||
| 			let chunkName = null; | ||||
| 			let chunkNameRange = null; | ||||
| 			let errorExpressionArg = null; | ||||
|  |  | |||
|  | @ -30,8 +30,8 @@ class RequireEnsurePlugin { | |||
| 					return; | ||||
| 
 | ||||
| 				new RequireEnsureDependenciesBlockParserPlugin().apply(parser); | ||||
| 				parser.plugin("evaluate typeof require.ensure", ParserHelpers.evaluateToString("function")); | ||||
| 				parser.plugin("typeof require.ensure", ParserHelpers.toConstantDependency(parser, JSON.stringify("function"))); | ||||
| 				parser.hooks.evaluateTypeof.for("require.ensure").tap("RequireEnsurePlugin", ParserHelpers.evaluateToString("function")); | ||||
| 				parser.hooks.typeof.for("require.ensure").tap("RequireEnsurePlugin", ParserHelpers.toConstantDependency(parser, JSON.stringify("function"))); | ||||
| 			}; | ||||
| 
 | ||||
| 			normalModuleFactory.hooks.parser.for("javascript/auto").tap("RequireEnsurePlugin", handler); | ||||
|  |  | |||
|  | @ -8,7 +8,7 @@ const RequireIncludeDependency = require("./RequireIncludeDependency"); | |||
| 
 | ||||
| module.exports = class RequireIncludeDependencyParserPlugin { | ||||
| 	apply(parser) { | ||||
| 		parser.plugin("call require.include", expr => { | ||||
| 		parser.hooks.call.for("require.include").tap("RequireIncludeDependencyParserPlugin", expr => { | ||||
| 			if(expr.arguments.length !== 1) return; | ||||
| 			const param = parser.evaluateExpression(expr.arguments[0]); | ||||
| 			if(!param.isString()) return; | ||||
|  |  | |||
|  | @ -22,8 +22,8 @@ class RequireIncludePlugin { | |||
| 					return; | ||||
| 
 | ||||
| 				new RequireIncludeDependencyParserPlugin().apply(parser); | ||||
| 				parser.plugin("evaluate typeof require.include", ParserHelpers.evaluateToString("function")); | ||||
| 				parser.plugin("typeof require.include", ParserHelpers.toConstantDependency(parser, JSON.stringify("function"))); | ||||
| 				parser.hooks.evaluateTypeof.for("require.include").tap("RequireIncludePlugin", ParserHelpers.evaluateToString("function")); | ||||
| 				parser.hooks.typeof.for("require.include").tap("RequireIncludePlugin", ParserHelpers.toConstantDependency(parser, JSON.stringify("function"))); | ||||
| 			}; | ||||
| 
 | ||||
| 			normalModuleFactory.hooks.parser.for("javascript/auto").tap("RequireIncludePlugin", handler); | ||||
|  |  | |||
|  | @ -63,10 +63,10 @@ class RequireResolveDependencyParserPlugin { | |||
| 			return true; | ||||
| 		}; | ||||
| 
 | ||||
| 		parser.plugin("call require.resolve", (expr) => { | ||||
| 		parser.hooks.call.for("require.resolve").tap("RequireResolveDependencyParserPlugin", (expr) => { | ||||
| 			return process(expr, false); | ||||
| 		}); | ||||
| 		parser.plugin("call require.resolveWeak", (expr) => { | ||||
| 		parser.hooks.call.for("require.resolveWeak").tap("RequireResolveDependencyParserPlugin", (expr) => { | ||||
| 			return process(expr, true); | ||||
| 		}); | ||||
| 	} | ||||
|  |  | |||
|  | @ -19,21 +19,22 @@ class SystemPlugin { | |||
| 					return; | ||||
| 
 | ||||
| 				const setNotSupported = name => { | ||||
| 					parser.plugin("evaluate typeof " + name, ParserHelpers.evaluateToString("undefined")); | ||||
| 					parser.plugin("expression " + name, | ||||
| 					parser.hooks.evaluateTypeof.for(name).tap("SystemPlugin", ParserHelpers.evaluateToString("undefined")); | ||||
| 					parser.hooks.expression.for(name).tap("SystemPlugin", | ||||
| 						ParserHelpers.expressionIsUnsupported(parser, name + " is not supported by webpack.") | ||||
| 					); | ||||
| 				}; | ||||
| 
 | ||||
| 				parser.plugin("typeof System.import", ParserHelpers.toConstantDependency(parser, JSON.stringify("function"))); | ||||
| 				parser.plugin("evaluate typeof System.import", ParserHelpers.evaluateToString("function")); | ||||
| 				parser.plugin("typeof System", ParserHelpers.toConstantDependency(parser, JSON.stringify("object"))); | ||||
| 				parser.plugin("evaluate typeof System", ParserHelpers.evaluateToString("object")); | ||||
| 				parser.hooks.typeof.for("System.import").tap("SystemPlugin", ParserHelpers.toConstantDependency(parser, JSON.stringify("function"))); | ||||
| 				parser.hooks.evaluateTypeof.for("System.import").tap("SystemPlugin", ParserHelpers.evaluateToString("function")); | ||||
| 				parser.hooks.typeof.for("System").tap("SystemPlugin", ParserHelpers.toConstantDependency(parser, JSON.stringify("object"))); | ||||
| 				parser.hooks.evaluateTypeof.for("System").tap("SystemPlugin", ParserHelpers.evaluateToString("object")); | ||||
| 
 | ||||
| 				setNotSupported("System.set"); | ||||
| 				setNotSupported("System.get"); | ||||
| 				setNotSupported("System.register"); | ||||
| 				parser.plugin("expression System", () => { | ||||
| 
 | ||||
| 				parser.hooks.expression.for("System").tap("SystemPlugin", () => { | ||||
| 					const systemPolyfillRequire = ParserHelpers.requireFileAsExpression( | ||||
| 						parser.state.module.context, require.resolve("../../buildin/system.js")); | ||||
| 					return ParserHelpers.addParsedVariableToModule(parser, "System", systemPolyfillRequire); | ||||
|  |  | |||
|  | @ -29,7 +29,7 @@ module.exports = class NodeSourcePlugin { | |||
| 
 | ||||
| 		const addExpression = (parser, name, module, type, suffix) => { | ||||
| 			suffix = suffix || ""; | ||||
| 			parser.plugin(`expression ${name}`, () => { | ||||
| 			parser.hooks.expression.for(name).tap("NodeSourcePlugin", () => { | ||||
| 				if(parser.state.module && parser.state.module.resource === getPathToModule(module, type)) return; | ||||
| 				const mockModule = ParserHelpers.requireFileAsExpression(parser.state.module.context, getPathToModule(module, type)); | ||||
| 				return ParserHelpers.addParsedVariableToModule(parser, name, mockModule + suffix); | ||||
|  | @ -48,7 +48,7 @@ module.exports = class NodeSourcePlugin { | |||
| 					localOptions = Object.assign({}, localOptions, parserOptions.node); | ||||
| 
 | ||||
| 				if(localOptions.global) { | ||||
| 					parser.plugin("expression global", () => { | ||||
| 					parser.hooks.expression.for("global").tap("NodeSourcePlugin", () => { | ||||
| 						const retrieveGlobalModule = ParserHelpers.requireFileAsExpression(parser.state.module.context, require.resolve("../../buildin/global.js")); | ||||
| 						return ParserHelpers.addParsedVariableToModule(parser, "global", retrieveGlobalModule); | ||||
| 					}); | ||||
|  |  | |||
|  | @ -26,7 +26,7 @@ class ModuleConcatenationPlugin { | |||
| 			normalModuleFactory | ||||
| 		}) => { | ||||
| 			const handler = (parser, parserOptions) => { | ||||
| 				parser.plugin("call eval", () => { | ||||
| 				parser.hooks.call.for("eval").tap("ModuleConcatenationPlugin", () => { | ||||
| 					// Because of variable renaming we can't use modules with eval.
 | ||||
| 					parser.state.module.buildMeta.moduleConcatenationBailout = "eval()"; | ||||
| 				}); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue