Sha256: 7dfb8900662c7e5c87958cf90ebb9b5463714ccb035972ef7c92cc99ee4f0f67

Contents?: true

Size: 1.57 KB

Versions: 27

Compression:

Stored size: 1.57 KB

Contents

/*
	MIT License http://www.opensource.org/licenses/mit-license.php
	Author Tobias Koppers @sokra
*/
"use strict";

const ConstDependency = require("./dependencies/ConstDependency");

/** @typedef {import("./Compiler")} Compiler */

class UseStrictPlugin {
	/**
	 * @param {Compiler} compiler Webpack Compiler
	 * @returns {void}
	 */
	apply(compiler) {
		compiler.hooks.compilation.tap(
			"UseStrictPlugin",
			(compilation, { normalModuleFactory }) => {
				const handler = parser => {
					parser.hooks.program.tap("UseStrictPlugin", ast => {
						const firstNode = ast.body[0];
						if (
							firstNode &&
							firstNode.type === "ExpressionStatement" &&
							firstNode.expression.type === "Literal" &&
							firstNode.expression.value === "use strict"
						) {
							// Remove "use strict" expression. It will be added later by the renderer again.
							// This is necessary in order to not break the strict mode when webpack prepends code.
							// @see https://github.com/webpack/webpack/issues/1970
							const dep = new ConstDependency("", firstNode.range);
							dep.loc = firstNode.loc;
							parser.state.current.addDependency(dep);
							parser.state.module.buildInfo.strict = true;
						}
					});
				};

				normalModuleFactory.hooks.parser
					.for("javascript/auto")
					.tap("UseStrictPlugin", handler);
				normalModuleFactory.hooks.parser
					.for("javascript/dynamic")
					.tap("UseStrictPlugin", handler);
				normalModuleFactory.hooks.parser
					.for("javascript/esm")
					.tap("UseStrictPlugin", handler);
			}
		);
	}
}

module.exports = UseStrictPlugin;

Version data entries

27 entries across 26 versions & 9 rubygems

Version Path
ezii-os-5.2.1 node_modules/webpack/lib/UseStrictPlugin.js
ezii-os-2.0.1 node_modules/webpack/lib/UseStrictPlugin.js
ezii-os-1.1.0 node_modules/webpack/lib/UseStrictPlugin.js
ezii-os-1.0.0 node_modules/webpack/lib/UseStrictPlugin.js
ezii-os-0.0.0.1.0 node_modules/webpack/lib/UseStrictPlugin.js
ezii-os-0.0.0.0.1 node_modules/webpack/lib/UseStrictPlugin.js
locomotivecms-4.0.0.alpha1 app/javascript/node_modules/webpack/lib/UseStrictPlugin.js