| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 | /*	MIT License http://www.opensource.org/licenses/mit-license.php	Author Tobias Koppers @sokra*/"use strict";const ConstDependency = require("./dependencies/ConstDependency");const NullFactory = require("./NullFactory");/** @typedef {import("./Compiler")} Compiler */class CompatibilityPlugin {	/**	 * Apply the plugin	 * @param {Compiler} compiler Webpack Compiler	 * @returns {void}	 */	apply(compiler) {		compiler.hooks.compilation.tap(			"CompatibilityPlugin",			(compilation, { normalModuleFactory }) => {				compilation.dependencyFactories.set(ConstDependency, new NullFactory());				compilation.dependencyTemplates.set(					ConstDependency,					new ConstDependency.Template()				);				normalModuleFactory.hooks.parser					.for("javascript/auto")					.tap("CompatibilityPlugin", (parser, parserOptions) => {						if (							parserOptions.browserify !== undefined &&							!parserOptions.browserify						)							return;						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]);								if (!second.isBoolean()) return;								if (second.asBool() !== true) return;								const dep = new ConstDependency("require", expr.callee.range);								dep.loc = expr.loc;								if (parser.state.current.dependencies.length > 1) {									const last =										parser.state.current.dependencies[											parser.state.current.dependencies.length - 1										];									if (										last.critical &&										last.options &&										last.options.request === "." &&										last.userRequest === "." &&										last.options.recursive									)										parser.state.current.dependencies.pop();								}								parser.state.current.addDependency(dep);								return true;							});					});			}		);	}}module.exports = CompatibilityPlugin;
 |