diff --git a/NOTES.md b/NOTES.md new file mode 100644 index 0000000000..c97032fd33 --- /dev/null +++ b/NOTES.md @@ -0,0 +1,3 @@ +# Notes + + * Wildcard exports/imports wont normalise if `export default` is a non-object. diff --git a/lib/6to5/file.js b/lib/6to5/file.js index be2f61a613..3d0bf8b4e3 100644 --- a/lib/6to5/file.js +++ b/lib/6to5/file.js @@ -34,7 +34,8 @@ File.helpers = [ "define-property", "async-to-generator", "interop-require-wildcard", - "typeof" + "typeof", + "exports-wildcard" ]; File.excludeHelpersFromRuntime = [ diff --git a/lib/6to5/transformation/modules/_default.js b/lib/6to5/transformation/modules/_default.js index 7713fff73c..084197352a 100644 --- a/lib/6to5/transformation/modules/_default.js +++ b/lib/6to5/transformation/modules/_default.js @@ -162,9 +162,9 @@ DefaultFormatter.prototype._exportSpecifier = function (getRef, specifier, node, }; DefaultFormatter.prototype._exportsWildcard = function (objectIdentifier) { - return util.template("exports-wildcard", { - OBJECT: objectIdentifier - }, true); + return t.expressionStatement(t.callExpression(this.file.addHelper("exports-wildcard"), [ + t.callExpression(this.file.addHelper("interop-require-wildcard"), [objectIdentifier]) + ])); }; DefaultFormatter.prototype._exportsAssign = function (id, init) { diff --git a/lib/6to5/transformation/templates/exports-wildcard.js b/lib/6to5/transformation/templates/exports-wildcard.js index 26e5b73c7d..fc4db3f90a 100644 --- a/lib/6to5/transformation/templates/exports-wildcard.js +++ b/lib/6to5/transformation/templates/exports-wildcard.js @@ -1,5 +1,7 @@ (function (obj) { for (var i in obj) { - exports[i] = obj[i]; + if (exports[i] !== undefined) { + exports[i] = obj[i]; + } } -})(OBJECT); +}) diff --git a/test/fixtures/transformation/es6-modules-amd/exports-from/expected.js b/test/fixtures/transformation/es6-modules-amd/exports-from/expected.js index 7483137265..7faee68424 100644 --- a/test/fixtures/transformation/es6-modules-amd/exports-from/expected.js +++ b/test/fixtures/transformation/es6-modules-amd/exports-from/expected.js @@ -5,11 +5,21 @@ define(["exports", "foo"], function (exports, _foo) { return obj && (obj["default"] || obj); }; - (function (obj) { + var _interopRequireWildcard = function (obj) { + return obj && obj.constructor === Object ? obj : { + "default": obj + }; + }; + + var _exportsWildcard = function (obj) { for (var i in obj) { - exports[i] = obj[i]; + if (exports[i] !== undefined) { + exports[i] = obj[i]; + } } - })(_foo); + }; + + _exportsWildcard(_interopRequireWildcard(_foo)); exports.foo = _interopRequire(_foo); exports.foo = _interopRequire(_foo); diff --git a/test/fixtures/transformation/es6-modules-common/exports-from/expected.js b/test/fixtures/transformation/es6-modules-common/exports-from/expected.js index 23274cc873..1107502014 100644 --- a/test/fixtures/transformation/es6-modules-common/exports-from/expected.js +++ b/test/fixtures/transformation/es6-modules-common/exports-from/expected.js @@ -4,11 +4,21 @@ var _interopRequire = function (obj) { return obj && (obj["default"] || obj); }; -(function (obj) { +var _interopRequireWildcard = function (obj) { + return obj && obj.constructor === Object ? obj : { + "default": obj + }; +}; + +var _exportsWildcard = function (obj) { for (var i in obj) { - exports[i] = obj[i]; + if (exports[i] !== undefined) { + exports[i] = obj[i]; + } } -})(require("foo")); +}; + +_exportsWildcard(_interopRequireWildcard(require("foo"))); exports.foo = _interopRequire(require("foo")); exports.foo = _interopRequire(require("foo")); diff --git a/test/fixtures/transformation/es6-modules-umd/exports-from/expected.js b/test/fixtures/transformation/es6-modules-umd/exports-from/expected.js index 70af3ecb6f..9575b15b17 100644 --- a/test/fixtures/transformation/es6-modules-umd/exports-from/expected.js +++ b/test/fixtures/transformation/es6-modules-umd/exports-from/expected.js @@ -11,11 +11,21 @@ return obj && (obj["default"] || obj); }; - (function (obj) { + var _interopRequireWildcard = function (obj) { + return obj && obj.constructor === Object ? obj : { + "default": obj + }; + }; + + var _exportsWildcard = function (obj) { for (var i in obj) { - exports[i] = obj[i]; + if (exports[i] !== undefined) { + exports[i] = obj[i]; + } } - })(_foo); + }; + + _exportsWildcard(_interopRequireWildcard(_foo)); exports.foo = _interopRequire(_foo); exports.foo = _interopRequire(_foo);