From 1adb3b73a09e9f29978eca509cd498f850f9b02c Mon Sep 17 00:00:00 2001 From: zodern Date: Wed, 25 May 2022 12:36:16 -0500 Subject: [PATCH] Allow export.__esModule to be overwritten Avoids an error if the file was already compiled by babel, and babel adds the line `exports.__esModule = true`. Fixes https://github.com/meteor/meteor/issues/12035 --- lib/runtime/utils.js | 2 +- test/misc-tests.js | 6 ++++++ test/misc/__esModule-export-after.js | 3 +++ test/misc/__esModule-export-before.js | 10 ++++++++++ 4 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 test/misc/__esModule-export-after.js create mode 100644 test/misc/__esModule-export-before.js diff --git a/lib/runtime/utils.js b/lib/runtime/utils.js index df8db147..aebddb99 100644 --- a/lib/runtime/utils.js +++ b/lib/runtime/utils.js @@ -70,7 +70,7 @@ function setESModule(exported) { configurable: true, enumerable: false, value: true, - writable: false + writable: true }); } } diff --git a/test/misc-tests.js b/test/misc-tests.js index 97b5ff29..c7f8a59b 100644 --- a/test/misc-tests.js +++ b/test/misc-tests.js @@ -92,3 +92,9 @@ describe("object-like module.exports", () => { assert.strictEqual(typeof forEach, "function"); }); }); + +describe("setEsModule", () => { + it("should not error if __esModule is set before or after setEsModule is called", () => { + import './misc/__esModule-export-after'; + }); +}); diff --git a/test/misc/__esModule-export-after.js b/test/misc/__esModule-export-after.js new file mode 100644 index 00000000..e1962a57 --- /dev/null +++ b/test/misc/__esModule-export-after.js @@ -0,0 +1,3 @@ +import './__esModule-export-before.js'; + +exports.__esModule = true diff --git a/test/misc/__esModule-export-before.js b/test/misc/__esModule-export-before.js new file mode 100644 index 00000000..0816829e --- /dev/null +++ b/test/misc/__esModule-export-before.js @@ -0,0 +1,10 @@ +Object.defineProperty(module.exports, '__esModule', { + configurable: false, + enumerable: false, + value: true, + writable: false +}); + +module.export({ + a: () => 5 +});