From 0c4e157196740d1c47f6b1affc4e55a9835b71f1 Mon Sep 17 00:00:00 2001 From: Tobias Koppers Date: Wed, 10 Feb 2021 19:12:51 +0100 Subject: [PATCH] fix incorrect parsing of define functions fix invalid code when using declaring local modules and arrow functions are supported --- lib/dependencies/AMDDefineDependency.js | 2 +- lib/dependencies/AMDDefineDependencyParserPlugin.js | 8 ++++++++ test/cases/parsing/declared-api/index.js | 3 +++ test/cases/parsing/declared-api/module.js | 11 +++++++++++ 4 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 test/cases/parsing/declared-api/index.js create mode 100644 test/cases/parsing/declared-api/module.js diff --git a/lib/dependencies/AMDDefineDependency.js b/lib/dependencies/AMDDefineDependency.js index 0255a148d..1a0816ae8 100644 --- a/lib/dependencies/AMDDefineDependency.js +++ b/lib/dependencies/AMDDefineDependency.js @@ -68,7 +68,7 @@ const DEFINITIONS = { lf: { definition: "var XXX, XXXmodule;", content: - "!(XXXmodule = { id: YYY, exports: {}, loaded: false }, XXX = #.call(XXXmodule.exports, __webpack_require__, XXXmodule.exports, XXXmodule), XXXmodule.loaded = true, XXX === undefined && (XXX = XXXmodule.exports))", + "!(XXXmodule = { id: YYY, exports: {}, loaded: false }, XXX = (#).call(XXXmodule.exports, __webpack_require__, XXXmodule.exports, XXXmodule), XXXmodule.loaded = true, XXX === undefined && (XXX = XXXmodule.exports))", requests: [RuntimeGlobals.require, RuntimeGlobals.module] }, lo: { diff --git a/lib/dependencies/AMDDefineDependencyParserPlugin.js b/lib/dependencies/AMDDefineDependencyParserPlugin.js index 6ae14110e..7d1c7e9e0 100644 --- a/lib/dependencies/AMDDefineDependencyParserPlugin.js +++ b/lib/dependencies/AMDDefineDependencyParserPlugin.js @@ -276,6 +276,10 @@ class AMDDefineDependencyParserPlugin { } parser.scope.inTry = inTry; if (fn.body.type === "BlockStatement") { + parser.detectMode(fn.body.body); + const prev = parser.prevStatement; + parser.preWalkStatement(fn.body); + parser.prevStatement = prev; parser.walkStatement(fn.body); } else { parser.walkExpression(fn.body); @@ -293,6 +297,10 @@ class AMDDefineDependencyParserPlugin { } parser.scope.inTry = inTry; if (fn.callee.object.body.type === "BlockStatement") { + parser.detectMode(fn.callee.object.body.body); + const prev = parser.prevStatement; + parser.preWalkStatement(fn.callee.object.body); + parser.prevStatement = prev; parser.walkStatement(fn.callee.object.body); } else { parser.walkExpression(fn.callee.object.body); diff --git a/test/cases/parsing/declared-api/index.js b/test/cases/parsing/declared-api/index.js new file mode 100644 index 000000000..520779abb --- /dev/null +++ b/test/cases/parsing/declared-api/index.js @@ -0,0 +1,3 @@ +it("should not replace declared variables", () => { + expect(require("./module")).toBe(42 + 42); +}); diff --git a/test/cases/parsing/declared-api/module.js b/test/cases/parsing/declared-api/module.js new file mode 100644 index 000000000..8cbf2f878 --- /dev/null +++ b/test/cases/parsing/declared-api/module.js @@ -0,0 +1,11 @@ +define("local", () => { + var __webpack_modules__ = 42; + + return __webpack_modules__; +}); + +define(["local"], l => { + var __webpack_modules__ = 42 + l; + + return __webpack_modules__; +});