From cbbc1c7333c7dbfa84e7b0260b7a01f906c2bb56 Mon Sep 17 00:00:00 2001 From: Daniel Tschinder Date: Sun, 18 Sep 2016 04:50:54 +0200 Subject: [PATCH] fix default exported classes without a name (#4518) * fix default exported classes without a name This correctly requeues class without name so the es3 transform can transform the default keyword. * Replace phabricator issue number with github --- .../src/index.js | 7 ++++++- .../fixtures/regression/es3-compatibility-class/actual.js | 1 + .../regression/es3-compatibility-class/expected.js | 6 ++++++ .../regression/es3-compatibility-class/options.json | 7 +++++++ .../regression/es3-compatibility-function/actual.js | 1 + .../regression/es3-compatibility-function/expected.js | 7 +++++++ .../regression/es3-compatibility-function/options.json | 7 +++++++ .../regression/es3-compatibility-named-class/actual.js | 1 + .../regression/es3-compatibility-named-class/expected.js | 7 +++++++ .../regression/es3-compatibility-named-class/options.json | 7 +++++++ .../regression/es3-compatibility-named-function/actual.js | 1 + .../es3-compatibility-named-function/expected.js | 7 +++++++ .../es3-compatibility-named-function/options.json | 7 +++++++ 13 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-class/actual.js create mode 100644 packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-class/expected.js create mode 100644 packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-class/options.json create mode 100644 packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-function/actual.js create mode 100644 packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-function/expected.js create mode 100644 packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-function/options.json create mode 100644 packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-named-class/actual.js create mode 100644 packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-named-class/expected.js create mode 100644 packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-named-class/options.json create mode 100644 packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-named-function/actual.js create mode 100644 packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-named-function/expected.js create mode 100644 packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/regression/es3-compatibility-named-function/options.json 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" + ] +}