From e95e836d5abf993ced2a16a10087323ee7ec9f8f Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Fri, 31 Jul 2015 01:29:46 +0100 Subject: [PATCH] export * should not export default --- .../babel/src/transformation/file/index.js | 1 + .../src/transformation/modules/_default.js | 5 ++++- .../src/transformation/modules/system.js | 5 ++++- .../helper-interop-export-wildcard.js | 5 +++++ .../transformers/es6/spec.modules.js | 20 +++++++++++++++++++ .../es6.modules-amd/exports-from/expected.js | 4 ++-- .../exports-from/expected.js | 4 ++-- .../exports-from/expected.js | 2 +- .../es6.modules-umd/exports-from/expected.js | 4 ++-- .../setters/expected.js | 2 +- 10 files changed, 42 insertions(+), 10 deletions(-) create mode 100644 packages/babel/src/transformation/templates/helper-interop-export-wildcard.js create mode 100644 packages/babel/src/transformation/transformers/es6/spec.modules.js diff --git a/packages/babel/src/transformation/file/index.js b/packages/babel/src/transformation/file/index.js index eb5193d9ec..1857804698 100644 --- a/packages/babel/src/transformation/file/index.js +++ b/packages/babel/src/transformation/file/index.js @@ -79,6 +79,7 @@ export default class File { "bind", "define-property", "async-to-generator", + "interop-export-wildcard", "interop-require-wildcard", "interop-require-default", "typeof", diff --git a/packages/babel/src/transformation/modules/_default.js b/packages/babel/src/transformation/modules/_default.js index 7a8e6dd8af..3d06711a13 100644 --- a/packages/babel/src/transformation/modules/_default.js +++ b/packages/babel/src/transformation/modules/_default.js @@ -297,7 +297,10 @@ export default class DefaultFormatter { buildExportsWildcard(objectIdentifier) { return t.expressionStatement(t.callExpression(this.file.addHelper("defaults"), [ t.identifier("exports"), - t.callExpression(this.file.addHelper("interop-require-wildcard"), [objectIdentifier]) + t.callExpression(this.file.addHelper("interop-export-wildcard"), [ + objectIdentifier, + this.file.addHelper("defaults") + ]) ])); } diff --git a/packages/babel/src/transformation/modules/system.js b/packages/babel/src/transformation/modules/system.js index 6d4e82b11d..d0faf47a90 100644 --- a/packages/babel/src/transformation/modules/system.js +++ b/packages/babel/src/transformation/modules/system.js @@ -148,7 +148,10 @@ export default class SystemFormatter extends AMDFormatter { var right = objectIdentifier; var block = t.blockStatement([ - t.expressionStatement(this._buildExportCall(leftIdentifier, valIdentifier)) + t.ifStatement( + t.binaryExpression("!==", leftIdentifier, t.literal("default")), + t.expressionStatement(this._buildExportCall(leftIdentifier, valIdentifier)) + ) ]); return this._addImportSource(t.forInStatement(left, right, block), node); diff --git a/packages/babel/src/transformation/templates/helper-interop-export-wildcard.js b/packages/babel/src/transformation/templates/helper-interop-export-wildcard.js new file mode 100644 index 0000000000..d7af1c412f --- /dev/null +++ b/packages/babel/src/transformation/templates/helper-interop-export-wildcard.js @@ -0,0 +1,5 @@ +(function (obj, defaults) { + var newObj = defaults({}, obj); + delete newObj.default; + return newObj; +}) diff --git a/packages/babel/src/transformation/transformers/es6/spec.modules.js b/packages/babel/src/transformation/transformers/es6/spec.modules.js new file mode 100644 index 0000000000..c92d74fd20 --- /dev/null +++ b/packages/babel/src/transformation/transformers/es6/spec.modules.js @@ -0,0 +1,20 @@ +import * as t from "../../../types"; + +export var metadata = { + group: "builtin-pre", + optional: true +}; + +export var visitor = { + Program() { + var id = this.scope.generateUidIdentifier("null"); + this.unshiftContainer("body", [ + t.variableDeclaration("var", [ + t.variableDeclarator(id, t.literal(null)) + ]), + t.exportNamedDeclaration(null, [ + t.exportSpecifier(id, t.identifier("__proto__")) + ]) + ]); + } +}; diff --git a/packages/babel/test/fixtures/transformation/es6.modules-amd/exports-from/expected.js b/packages/babel/test/fixtures/transformation/es6.modules-amd/exports-from/expected.js index 6da1118573..c8c38d1ede 100644 --- a/packages/babel/test/fixtures/transformation/es6.modules-amd/exports-from/expected.js +++ b/packages/babel/test/fixtures/transformation/es6.modules-amd/exports-from/expected.js @@ -4,7 +4,7 @@ define(["exports", "foo"], function (exports, _foo) { Object.defineProperty(exports, "__esModule", { value: true }); - babelHelpers.defaults(exports, babelHelpers.interopRequireWildcard(_foo)); + babelHelpers.defaults(exports, babelHelpers.interopExportWildcard(_foo, babelHelpers.defaults)); Object.defineProperty(exports, "foo", { enumerable: true, get: function get() { @@ -47,4 +47,4 @@ define(["exports", "foo"], function (exports, _foo) { return _foo.bar; } }); -}); \ No newline at end of file +}); diff --git a/packages/babel/test/fixtures/transformation/es6.modules-common/exports-from/expected.js b/packages/babel/test/fixtures/transformation/es6.modules-common/exports-from/expected.js index 91d377ab2f..f7f8b7203a 100644 --- a/packages/babel/test/fixtures/transformation/es6.modules-common/exports-from/expected.js +++ b/packages/babel/test/fixtures/transformation/es6.modules-common/exports-from/expected.js @@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { var _foo = require("foo"); -babelHelpers.defaults(exports, babelHelpers.interopRequireWildcard(_foo)); +babelHelpers.defaults(exports, babelHelpers.interopExportWildcard(_foo, babelHelpers.defaults)); Object.defineProperty(exports, "foo", { enumerable: true, get: function get() { @@ -48,4 +48,4 @@ Object.defineProperty(exports, "bar", { get: function get() { return _foo.bar; } -}); \ No newline at end of file +}); diff --git a/packages/babel/test/fixtures/transformation/es6.modules-system/exports-from/expected.js b/packages/babel/test/fixtures/transformation/es6.modules-system/exports-from/expected.js index b7b8242360..bafa76e913 100644 --- a/packages/babel/test/fixtures/transformation/es6.modules-system/exports-from/expected.js +++ b/packages/babel/test/fixtures/transformation/es6.modules-system/exports-from/expected.js @@ -4,7 +4,7 @@ System.register(["foo"], function (_export) { return { setters: [function (_foo) { for (var _key in _foo) { - _export(_key, _foo[_key]); + if (_key !== "default") _export(_key, _foo[_key]); } _export("foo", _foo.foo); diff --git a/packages/babel/test/fixtures/transformation/es6.modules-umd/exports-from/expected.js b/packages/babel/test/fixtures/transformation/es6.modules-umd/exports-from/expected.js index 041c97a3d6..aabf9607e2 100644 --- a/packages/babel/test/fixtures/transformation/es6.modules-umd/exports-from/expected.js +++ b/packages/babel/test/fixtures/transformation/es6.modules-umd/exports-from/expected.js @@ -16,7 +16,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); - babelHelpers.defaults(exports, babelHelpers.interopRequireWildcard(_foo)); + babelHelpers.defaults(exports, babelHelpers.interopExportWildcard(_foo, babelHelpers.defaults)); Object.defineProperty(exports, "foo", { enumerable: true, get: function get() { @@ -59,4 +59,4 @@ return _foo.bar; } }); -}); \ No newline at end of file +}); diff --git a/packages/babel/test/fixtures/transformation/optimisation.modules.system/setters/expected.js b/packages/babel/test/fixtures/transformation/optimisation.modules.system/setters/expected.js index 24f9c92628..5e7e71e623 100644 --- a/packages/babel/test/fixtures/transformation/optimisation.modules.system/setters/expected.js +++ b/packages/babel/test/fixtures/transformation/optimisation.modules.system/setters/expected.js @@ -7,7 +7,7 @@ System.register(["foo", "bar"], function (_export) { var _exportObj = {}; for (var _key in _foo) { - _exportObj[_key] = _foo[_key]; + if (_key !== "default") _exportObj[_key] = _foo[_key]; } _exportObj["foo"] = _foo.foo;