From 92d9b3ff5f718f2bc3cd9fd7562c98a09a91529c Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Tue, 3 Feb 2015 14:41:11 +1100 Subject: [PATCH] make it illegal to export a __esModule property - #673 --- lib/6to5/transformation/modules/_default.js | 7 +++++++ .../es6-modules-common/illegal-export-esmodule-2/actual.js | 1 + .../illegal-export-esmodule-2/options.json | 3 +++ .../es6-modules-common/illegal-export-esmodule/actual.js | 1 + .../illegal-export-esmodule/options.json | 3 +++ 5 files changed, 15 insertions(+) create mode 100644 test/fixtures/transformation/es6-modules-common/illegal-export-esmodule-2/actual.js create mode 100644 test/fixtures/transformation/es6-modules-common/illegal-export-esmodule-2/options.json create mode 100644 test/fixtures/transformation/es6-modules-common/illegal-export-esmodule/actual.js create mode 100644 test/fixtures/transformation/es6-modules-common/illegal-export-esmodule/options.json diff --git a/lib/6to5/transformation/modules/_default.js b/lib/6to5/transformation/modules/_default.js index 495ffd60c5..300c12ab18 100644 --- a/lib/6to5/transformation/modules/_default.js +++ b/lib/6to5/transformation/modules/_default.js @@ -212,6 +212,12 @@ DefaultFormatter.prototype.getExternalReference = function (node, nodes) { } }; +DefaultFormatter.prototype.checkExportIdentifier = function (node) { + if (t.isIdentifier(node, { name: "__esModule" })) { + throw this.file.errorWithNode(node, "Illegal export __esModule - this is used internally for CommonJS interop"); + } +}; + DefaultFormatter.prototype.exportSpecifier = function (specifier, node, nodes) { var inherits = false; if (node.specifiers.length === 1) inherits = node; @@ -251,6 +257,7 @@ DefaultFormatter.prototype.buildExportsWildcard = function (objectIdentifier) { }; DefaultFormatter.prototype.buildExportsAssignment = function (id, init) { + this.checkExportIdentifier(id); return util.template("exports-assign", { VALUE: init, KEY: id diff --git a/test/fixtures/transformation/es6-modules-common/illegal-export-esmodule-2/actual.js b/test/fixtures/transformation/es6-modules-common/illegal-export-esmodule-2/actual.js new file mode 100644 index 0000000000..2d4f3f2cd7 --- /dev/null +++ b/test/fixtures/transformation/es6-modules-common/illegal-export-esmodule-2/actual.js @@ -0,0 +1 @@ +export { __esModule }; diff --git a/test/fixtures/transformation/es6-modules-common/illegal-export-esmodule-2/options.json b/test/fixtures/transformation/es6-modules-common/illegal-export-esmodule-2/options.json new file mode 100644 index 0000000000..5e33c8dbe1 --- /dev/null +++ b/test/fixtures/transformation/es6-modules-common/illegal-export-esmodule-2/options.json @@ -0,0 +1,3 @@ +{ + "throws": "Illegal export __esModule - this is used internally for CommonJS interop" +} diff --git a/test/fixtures/transformation/es6-modules-common/illegal-export-esmodule/actual.js b/test/fixtures/transformation/es6-modules-common/illegal-export-esmodule/actual.js new file mode 100644 index 0000000000..c8e52fd594 --- /dev/null +++ b/test/fixtures/transformation/es6-modules-common/illegal-export-esmodule/actual.js @@ -0,0 +1 @@ +export var __esModule = false; diff --git a/test/fixtures/transformation/es6-modules-common/illegal-export-esmodule/options.json b/test/fixtures/transformation/es6-modules-common/illegal-export-esmodule/options.json new file mode 100644 index 0000000000..5e33c8dbe1 --- /dev/null +++ b/test/fixtures/transformation/es6-modules-common/illegal-export-esmodule/options.json @@ -0,0 +1,3 @@ +{ + "throws": "Illegal export __esModule - this is used internally for CommonJS interop" +}