From 5ce38cacaa8c55e15cd98b5620fe5fec83a59338 Mon Sep 17 00:00:00 2001 From: jeffmo Date: Tue, 21 Apr 2015 11:21:18 -0400 Subject: [PATCH] Copy statics off of foreign exports objects when doing an ES6 import --- .../templates/helper-interop-require-wildcard.js | 15 ++++++++++++++- .../es6.modules-amd/exports-from/expected.js | 4 ++-- .../es6.modules-common/exports-from/expected.js | 4 ++-- .../imports-default/expected.js | 4 ++-- .../es6.modules-common/imports-glob/expected.js | 2 +- .../es6.modules-common/imports-mixing/expected.js | 4 ++-- .../es6.modules-common/overview/expected.js | 4 ++-- .../es6.modules-umd/exports-from/expected.js | 4 ++-- 8 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/babel/transformation/templates/helper-interop-require-wildcard.js b/src/babel/transformation/templates/helper-interop-require-wildcard.js index 495e2ee2d0..6e4e95f3f6 100644 --- a/src/babel/transformation/templates/helper-interop-require-wildcard.js +++ b/src/babel/transformation/templates/helper-interop-require-wildcard.js @@ -1,3 +1,16 @@ (function (obj) { - return obj && obj.__esModule ? obj : { default: obj }; + if (obj && obj.__esModule) { + return obj; + } else { + var hop = Object.prototype.hasOwnProperty; + var es_obj = { "default": obj }; + if (typeof obj === "object" && obj !== null) { + for (var key in obj) { + if (key !== "default" && hop.call(obj, key)) { + es_obj[key] = obj[key]; + } + } + } + return es_obj; + } }) diff --git a/test/core/fixtures/transformation/es6.modules-amd/exports-from/expected.js b/test/core/fixtures/transformation/es6.modules-amd/exports-from/expected.js index c958aae569..996f66aea3 100644 --- a/test/core/fixtures/transformation/es6.modules-amd/exports-from/expected.js +++ b/test/core/fixtures/transformation/es6.modules-amd/exports-from/expected.js @@ -1,7 +1,7 @@ define(["exports", "foo"], function (exports, _foo) { "use strict"; - var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { "default": obj }; }; + var _interopRequireWildcard = function (obj) { if (obj && obj.__esModule) { return obj; } else { var hop = Object.prototype.hasOwnProperty; var es_obj = { "default": obj }; if (typeof obj === "object" && obj !== null) { for (var key in obj) { if (key !== "default" && hop.call(obj, key)) { es_obj[key] = obj[key]; } } } return es_obj; } }; var _defaults = function (obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }; @@ -53,4 +53,4 @@ define(["exports", "foo"], function (exports, _foo) { return _foo.bar; } }); -}); \ No newline at end of file +}); diff --git a/test/core/fixtures/transformation/es6.modules-common/exports-from/expected.js b/test/core/fixtures/transformation/es6.modules-common/exports-from/expected.js index f88819cd70..1a75c39e4a 100644 --- a/test/core/fixtures/transformation/es6.modules-common/exports-from/expected.js +++ b/test/core/fixtures/transformation/es6.modules-common/exports-from/expected.js @@ -1,6 +1,6 @@ "use strict"; -var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { "default": obj }; }; +var _interopRequireWildcard = function (obj) { if (obj && obj.__esModule) { return obj; } else { var hop = Object.prototype.hasOwnProperty; var es_obj = { "default": obj }; if (typeof obj === "object" && obj !== null) { for (var key in obj) { if (key !== "default" && hop.call(obj, key)) { es_obj[key] = obj[key]; } } } return es_obj; } }; var _defaults = function (obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }; @@ -53,4 +53,4 @@ Object.defineProperty(exports, "bar", { get: function get() { return _foo.bar; } -}); \ No newline at end of file +}); diff --git a/test/core/fixtures/transformation/es6.modules-common/imports-default/expected.js b/test/core/fixtures/transformation/es6.modules-common/imports-default/expected.js index c9c905db61..e2402e5892 100644 --- a/test/core/fixtures/transformation/es6.modules-common/imports-default/expected.js +++ b/test/core/fixtures/transformation/es6.modules-common/imports-default/expected.js @@ -1,6 +1,6 @@ "use strict"; -var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { "default": obj }; }; +var _interopRequireWildcard = function (obj) { if (obj && obj.__esModule) { return obj; } else { var hop = Object.prototype.hasOwnProperty; var es_obj = { "default": obj }; if (typeof obj === "object" && obj !== null) { for (var key in obj) { if (key !== "default" && hop.call(obj, key)) { es_obj[key] = obj[key]; } } } return es_obj; } }; var _foo = require("foo"); @@ -9,4 +9,4 @@ var _foo2 = _interopRequireWildcard(_foo); var _foo22 = _interopRequireWildcard(_foo); _foo2["default"]; -_foo22["default"]; \ No newline at end of file +_foo22["default"]; diff --git a/test/core/fixtures/transformation/es6.modules-common/imports-glob/expected.js b/test/core/fixtures/transformation/es6.modules-common/imports-glob/expected.js index 25b6add2d6..7122feb0d4 100644 --- a/test/core/fixtures/transformation/es6.modules-common/imports-glob/expected.js +++ b/test/core/fixtures/transformation/es6.modules-common/imports-glob/expected.js @@ -1,6 +1,6 @@ "use strict"; -var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { "default": obj }; }; +var _interopRequireWildcard = function (obj) { if (obj && obj.__esModule) { return obj; } else { var hop = Object.prototype.hasOwnProperty; var es_obj = { "default": obj }; if (typeof obj === "object" && obj !== null) { for (var key in obj) { if (key !== "default" && hop.call(obj, key)) { es_obj[key] = obj[key]; } } } return es_obj; } }; var _import = require("foo"); diff --git a/test/core/fixtures/transformation/es6.modules-common/imports-mixing/expected.js b/test/core/fixtures/transformation/es6.modules-common/imports-mixing/expected.js index 083ed5c427..23c26deb1d 100644 --- a/test/core/fixtures/transformation/es6.modules-common/imports-mixing/expected.js +++ b/test/core/fixtures/transformation/es6.modules-common/imports-mixing/expected.js @@ -1,10 +1,10 @@ "use strict"; -var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { "default": obj }; }; +var _interopRequireWildcard = function (obj) { if (obj && obj.__esModule) { return obj; } else { var hop = Object.prototype.hasOwnProperty; var es_obj = { "default": obj }; if (typeof obj === "object" && obj !== null) { for (var key in obj) { if (key !== "default" && hop.call(obj, key)) { es_obj[key] = obj[key]; } } } return es_obj; } }; var _foo$xyz = require("foo"); var _foo$xyz2 = _interopRequireWildcard(_foo$xyz); _foo$xyz2["default"]; -_foo$xyz.baz; \ No newline at end of file +_foo$xyz.baz; diff --git a/test/core/fixtures/transformation/es6.modules-common/overview/expected.js b/test/core/fixtures/transformation/es6.modules-common/overview/expected.js index 012ecdadeb..3505641d79 100644 --- a/test/core/fixtures/transformation/es6.modules-common/overview/expected.js +++ b/test/core/fixtures/transformation/es6.modules-common/overview/expected.js @@ -1,6 +1,6 @@ "use strict"; -var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { "default": obj }; }; +var _interopRequireWildcard = function (obj) { if (obj && obj.__esModule) { return obj; } else { var hop = Object.prototype.hasOwnProperty; var es_obj = { "default": obj }; if (typeof obj === "object" && obj !== null) { for (var key in obj) { if (key !== "default" && hop.call(obj, key)) { es_obj[key] = obj[key]; } } } return es_obj; } }; Object.defineProperty(exports, "__esModule", { value: true @@ -30,4 +30,4 @@ var test = 5; exports.test = test; _bar.bar; _bar2.foo; -_foo2["default"]; \ No newline at end of file +_foo2["default"]; diff --git a/test/core/fixtures/transformation/es6.modules-umd/exports-from/expected.js b/test/core/fixtures/transformation/es6.modules-umd/exports-from/expected.js index 52a8b64320..55390f918b 100644 --- a/test/core/fixtures/transformation/es6.modules-umd/exports-from/expected.js +++ b/test/core/fixtures/transformation/es6.modules-umd/exports-from/expected.js @@ -13,7 +13,7 @@ })(this, function (exports, _foo) { "use strict"; - var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { "default": obj }; }; + var _interopRequireWildcard = function (obj) { if (obj && obj.__esModule) { return obj; } else { var hop = Object.prototype.hasOwnProperty; var es_obj = { "default": obj }; if (typeof obj === "object" && obj !== null) { for (var key in obj) { if (key !== "default" && hop.call(obj, key)) { es_obj[key] = obj[key]; } } } return es_obj; } }; var _defaults = function (obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }; @@ -65,4 +65,4 @@ return _foo.bar; } }); -}); \ No newline at end of file +});