diff --git a/packages/babel-helpers/src/helpers.js b/packages/babel-helpers/src/helpers.js index 04902294d308..1349696a2294 100644 --- a/packages/babel-helpers/src/helpers.js +++ b/packages/babel-helpers/src/helpers.js @@ -449,7 +449,16 @@ helpers.interopRequireWildcard = defineHelper(` var newObj = {}; if (obj != null) { for (var key in obj) { - if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; + if (Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = Object.defineProperty && Object.getOwnPropertyDescriptor + ? Object.getOwnPropertyDescriptor(obj, key) + : {}; + if (desc.get || desc.set) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } } } newObj.default = obj; diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters-star/actual.js b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters-star/actual.js new file mode 100644 index 000000000000..3c1ee98b31c2 --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters-star/actual.js @@ -0,0 +1,3 @@ +import * as foo from "./moduleWithGetter"; + +export { foo }; diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters-star/exec.js b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters-star/exec.js new file mode 100644 index 000000000000..fd8cb897517c --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters-star/exec.js @@ -0,0 +1,5 @@ +import * as foo from "./moduleWithGetter"; + +assert.throws(() => foo.boo); + +// No exception should be thrown diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters-star/expected.js b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters-star/expected.js new file mode 100644 index 000000000000..71696cd623e0 --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters-star/expected.js @@ -0,0 +1,12 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.foo = void 0; + +var foo = _interopRequireWildcard(require("./moduleWithGetter")); + +exports.foo = foo; + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters-star/moduleWithGetter.js b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters-star/moduleWithGetter.js new file mode 100644 index 000000000000..fd8a292c9324 --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters-star/moduleWithGetter.js @@ -0,0 +1,6 @@ +var Obj = { + baz: 123, + get boo() { throw new Error('Should never be triggered'); } +} + +module.exports = Obj; diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters/actual.js b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters/actual.js new file mode 100644 index 000000000000..02d42b8597ba --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters/actual.js @@ -0,0 +1,3 @@ +import Foo, { baz } from "./moduleWithGetter"; + +export { Foo, baz }; diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters/exec.js b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters/exec.js new file mode 100644 index 000000000000..cdb5546b8258 --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters/exec.js @@ -0,0 +1,3 @@ +import Foo, { baz } from "./moduleWithGetter"; + +// No exception should be thrown diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters/expected.js b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters/expected.js new file mode 100644 index 000000000000..c545f5310d85 --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters/expected.js @@ -0,0 +1,21 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "Foo", { + enumerable: true, + get: function () { + return _moduleWithGetter.default; + } +}); +Object.defineProperty(exports, "baz", { + enumerable: true, + get: function () { + return _moduleWithGetter.baz; + } +}); + +var _moduleWithGetter = _interopRequireWildcard(require("./moduleWithGetter")); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters/moduleWithGetter.js b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters/moduleWithGetter.js new file mode 100644 index 000000000000..fd8a292c9324 --- /dev/null +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/copy-getters-setters/moduleWithGetter.js @@ -0,0 +1,6 @@ +var Obj = { + baz: 123, + get boo() { throw new Error('Should never be triggered'); } +} + +module.exports = Obj; diff --git a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/import-const-throw/expected.js b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/import-const-throw/expected.js index 0e20561dd7cf..2433845dbdc2 100644 --- a/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/import-const-throw/expected.js +++ b/packages/babel-plugin-transform-modules-commonjs/test/fixtures/misc/import-const-throw/expected.js @@ -6,7 +6,7 @@ var Bar = _interopRequireWildcard(require("bar")); var _baz = require("baz"); -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }