diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/src/index.js b/packages/babel-plugin-transform-es2015-modules-commonjs/src/index.js index 9554fa57d6ad..5a3c9694f24e 100644 --- a/packages/babel-plugin-transform-es2015-modules-commonjs/src/index.js +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/src/index.js @@ -267,13 +267,18 @@ export default function () { ]); } else { path.replaceWith(buildExportsAssignment(defNode, t.toExpression(declaration.node))); + + // Manualy re-queue `export default class {}` expressions so that the ES3 transform + // has an opportunity to convert them. Ideally this would happen automatically from the + // replaceWith above. See #4140 for more info. + path.parentPath.requeue(path.get("expression.left")); } } else { path.replaceWith(buildExportsAssignment(t.identifier("default"), declaration.node)); // Manualy re-queue `export default foo;` expressions so that the ES3 transform // has an opportunity to convert them. Ideally this would happen automatically from the - // replaceWith above. See T7166 for more info. + // replaceWith above. See #4140 for more info. path.parentPath.requeue(path.get("expression.left")); } exportDefaultFound = true; diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-class/actual.js b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-class/actual.js new file mode 100644 index 000000000000..a6e68e983892 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-class/actual.js @@ -0,0 +1 @@ +export default class {} diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-class/expected.js b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-class/expected.js new file mode 100644 index 000000000000..b9daa5a71342 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-class/expected.js @@ -0,0 +1,6 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = class {}; diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-class/options.json b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-class/options.json new file mode 100644 index 000000000000..33996fe794ca --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-class/options.json @@ -0,0 +1,7 @@ +{ + "plugins": [ + "transform-es2015-modules-commonjs", + "transform-es3-member-expression-literals", + "transform-es3-property-literals" + ] +} diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-function/actual.js b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-function/actual.js new file mode 100644 index 000000000000..ea9b101e1c22 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-function/actual.js @@ -0,0 +1 @@ +export default function () {} diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-function/expected.js b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-function/expected.js new file mode 100644 index 000000000000..97a39325f31e --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-function/expected.js @@ -0,0 +1,7 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports["default"] = function () {}; diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-function/options.json b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-function/options.json new file mode 100644 index 000000000000..33996fe794ca --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-function/options.json @@ -0,0 +1,7 @@ +{ + "plugins": [ + "transform-es2015-modules-commonjs", + "transform-es3-member-expression-literals", + "transform-es3-property-literals" + ] +} diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-named-class/actual.js b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-named-class/actual.js new file mode 100644 index 000000000000..7804111002d7 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-named-class/actual.js @@ -0,0 +1 @@ +export default class Foo {} diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-named-class/expected.js b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-named-class/expected.js new file mode 100644 index 000000000000..8300c9adfe07 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-named-class/expected.js @@ -0,0 +1,7 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +class Foo {} +exports["default"] = Foo; diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-named-class/options.json b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-named-class/options.json new file mode 100644 index 000000000000..33996fe794ca --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-named-class/options.json @@ -0,0 +1,7 @@ +{ + "plugins": [ + "transform-es2015-modules-commonjs", + "transform-es3-member-expression-literals", + "transform-es3-property-literals" + ] +} diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-named-function/actual.js b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-named-function/actual.js new file mode 100644 index 000000000000..32a45b484ef7 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-named-function/actual.js @@ -0,0 +1 @@ +export default function bat () {} diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-named-function/expected.js b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-named-function/expected.js new file mode 100644 index 000000000000..cb2b5a3cee19 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-named-function/expected.js @@ -0,0 +1,7 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = bat; +function bat() {} diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-named-function/options.json b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-named-function/options.json new file mode 100644 index 000000000000..33996fe794ca --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-named-function/options.json @@ -0,0 +1,7 @@ +{ + "plugins": [ + "transform-es2015-modules-commonjs", + "transform-es3-member-expression-literals", + "transform-es3-property-literals" + ] +}