diff --git a/.eslintignore b/.eslintignore index 5ea6066c60..02e6e29eb7 100644 --- a/.eslintignore +++ b/.eslintignore @@ -6,6 +6,7 @@ packages/*/node_modules packages/*/lib packages/*/dist packages/*/test/fixtures +packages/*/test/tmp vendor _babel.github.io Gulpfile.js diff --git a/packages/babel-helper-remap-async-to-generator/src/index.js b/packages/babel-helper-remap-async-to-generator/src/index.js index 8cabe9ee06..5cdf041f30 100644 --- a/packages/babel-helper-remap-async-to-generator/src/index.js +++ b/packages/babel-helper-remap-async-to-generator/src/index.js @@ -146,6 +146,23 @@ function plainFunction(path: NodePath, callId: Object) { ]); declar._blockHoist = true; + if (path.parentPath.isExportDefaultDeclaration()) { + // change the path type so that replaceWith() does not wrap + // the identifier into an expressionStatement + path.parentPath.insertBefore(declar); + path.parentPath.replaceWith( + t.exportNamedDeclaration(null, + [ + t.exportSpecifier( + t.identifier(asyncFnId.name), + t.identifier("default") + ) + ] + ) + ); + return; + } + path.replaceWith(declar); } else { const retFunction = container.body.body[1].argument; diff --git a/packages/babel-plugin-transform-async-to-generator/test/fixtures/export-async/default-arrow-export/actual.js b/packages/babel-plugin-transform-async-to-generator/test/fixtures/export-async/default-arrow-export/actual.js new file mode 100644 index 0000000000..22ad33dc07 --- /dev/null +++ b/packages/babel-plugin-transform-async-to-generator/test/fixtures/export-async/default-arrow-export/actual.js @@ -0,0 +1 @@ +export default async () => { return await foo(); } diff --git a/packages/babel-plugin-transform-async-to-generator/test/fixtures/export-async/default-arrow-export/expected.js b/packages/babel-plugin-transform-async-to-generator/test/fixtures/export-async/default-arrow-export/expected.js new file mode 100644 index 0000000000..130cbb5e7f --- /dev/null +++ b/packages/babel-plugin-transform-async-to-generator/test/fixtures/export-async/default-arrow-export/expected.js @@ -0,0 +1,8 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = babelHelpers.asyncToGenerator(function* () { + return yield foo(); +}); \ No newline at end of file diff --git a/packages/babel-plugin-transform-async-to-generator/test/fixtures/export-async/default-export/actual.js b/packages/babel-plugin-transform-async-to-generator/test/fixtures/export-async/default-export/actual.js new file mode 100644 index 0000000000..9c82a22d00 --- /dev/null +++ b/packages/babel-plugin-transform-async-to-generator/test/fixtures/export-async/default-export/actual.js @@ -0,0 +1 @@ +export default async function myFunc() {} diff --git a/packages/babel-plugin-transform-async-to-generator/test/fixtures/export-async/default-export/expected.js b/packages/babel-plugin-transform-async-to-generator/test/fixtures/export-async/default-export/expected.js new file mode 100644 index 0000000000..84d8c21afc --- /dev/null +++ b/packages/babel-plugin-transform-async-to-generator/test/fixtures/export-async/default-export/expected.js @@ -0,0 +1,15 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +let myFunc = (() => { + var _ref = babelHelpers.asyncToGenerator(function* () {}); + + return function myFunc() { + return _ref.apply(this, arguments); + }; +})(); + +exports.default = myFunc; \ No newline at end of file