diff --git a/packages/babel-core/test/fixtures/transformation/misc/regression-2892/expected.js b/packages/babel-core/test/fixtures/transformation/misc/regression-2892/expected.js index 35ae9bdf5a..5693044d70 100644 --- a/packages/babel-core/test/fixtures/transformation/misc/regression-2892/expected.js +++ b/packages/babel-core/test/fixtures/transformation/misc/regression-2892/expected.js @@ -46,7 +46,7 @@ var foo = function () { }; }(); -function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _next(value) { step("next", value); } function _throw(err) { step("throw", err); } _next(); }); }; } +function _asyncToGenerator(fn) { return function () { var _this = this, _arguments = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(_this, _arguments); function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _next(value) { step("next", value); } function _throw(err) { step("throw", err); } _next(); }); }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } diff --git a/packages/babel-helpers/src/helpers.js b/packages/babel-helpers/src/helpers.js index 430d4b394e..3c5194ac11 100644 --- a/packages/babel-helpers/src/helpers.js +++ b/packages/babel-helpers/src/helpers.js @@ -216,8 +216,8 @@ helpers.asyncGeneratorDelegate = template(` helpers.asyncToGenerator = template(` (function (fn) { return function () { - var gen = fn.apply(this, arguments); - return new Promise(function (resolve, reject) { + return new Promise((resolve, reject) => { + var gen = fn.apply(this, arguments); function step(key, arg) { try { var info = gen[key](arg); diff --git a/packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/async-default-arguments/actual.js b/packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/async-default-arguments/actual.js new file mode 100644 index 0000000000..8ce1cefd3d --- /dev/null +++ b/packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/async-default-arguments/actual.js @@ -0,0 +1,7 @@ +function mandatory(paramName) { + throw new Error(`Missing parameter: ${paramName}`); +} + +async function foo({ a, b = mandatory("b") }) { + return Promise.resolve(b); +} diff --git a/packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/async-default-arguments/expected.js b/packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/async-default-arguments/expected.js new file mode 100644 index 0000000000..926e40d6cd --- /dev/null +++ b/packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/async-default-arguments/expected.js @@ -0,0 +1,15 @@ +let foo = (() => { + var _ref2 = babelHelpers.asyncToGenerator(function* (_ref) { + let { a, b = mandatory("b") } = _ref; + + return Promise.resolve(b); + }); + + return function foo(_x) { + return _ref2.apply(this, arguments); + }; +})(); + +function mandatory(paramName) { + throw new Error(`Missing parameter: ${paramName}`); +} diff --git a/packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/shadowed-promise-import/expected.js b/packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/shadowed-promise-import/expected.js index 3a92217bb2..c7ff990b5f 100644 --- a/packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/shadowed-promise-import/expected.js +++ b/packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/shadowed-promise-import/expected.js @@ -8,6 +8,6 @@ let foo = (() => { }; })(); -function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _next(value) { step("next", value); } function _throw(err) { step("throw", err); } _next(); }); }; } +function _asyncToGenerator(fn) { return function () { return new Promise((resolve, reject) => { var gen = fn.apply(this, arguments); function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _next(value) { step("next", value); } function _throw(err) { step("throw", err); } _next(); }); }; } import _Promise from 'somewhere'; diff --git a/packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/shadowed-promise-nested/expected.js b/packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/shadowed-promise-nested/expected.js index 236621c6b7..39d342060f 100644 --- a/packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/shadowed-promise-nested/expected.js +++ b/packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/shadowed-promise-nested/expected.js @@ -20,6 +20,6 @@ let foo = (() => { }; })(); -function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _next(value) { step("next", value); } function _throw(err) { step("throw", err); } _next(); }); }; } +function _asyncToGenerator(fn) { return function () { return new Promise((resolve, reject) => { var gen = fn.apply(this, arguments); function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _next(value) { step("next", value); } function _throw(err) { step("throw", err); } _next(); }); }; } let _Promise; diff --git a/packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/shadowed-promise/expected.js b/packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/shadowed-promise/expected.js index 2e0998af82..b759133cbe 100644 --- a/packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/shadowed-promise/expected.js +++ b/packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/shadowed-promise/expected.js @@ -10,6 +10,6 @@ let foo = (() => { }; })(); -function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _next(value) { step("next", value); } function _throw(err) { step("throw", err); } _next(); }); }; } +function _asyncToGenerator(fn) { return function () { return new Promise((resolve, reject) => { var gen = fn.apply(this, arguments); function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _next(value) { step("next", value); } function _throw(err) { step("throw", err); } _next(); }); }; } let _Promise; diff --git a/packages/babel-plugin-transform-async-to-generator/test/fixtures/regression/4943/actual.js b/packages/babel-plugin-transform-async-to-generator/test/fixtures/regression/4943/actual.js new file mode 100644 index 0000000000..a5d6442f4e --- /dev/null +++ b/packages/babel-plugin-transform-async-to-generator/test/fixtures/regression/4943/actual.js @@ -0,0 +1,9 @@ +"use strict"; + +function mandatory(paramName) { + throw new Error(`Missing parameter: ${paramName}`); +} + +async function foo({ a, b = mandatory("b") }) { + return Promise.resolve(b); +} diff --git a/packages/babel-plugin-transform-async-to-generator/test/fixtures/regression/4943/exec.js b/packages/babel-plugin-transform-async-to-generator/test/fixtures/regression/4943/exec.js new file mode 100644 index 0000000000..c7e048de58 --- /dev/null +++ b/packages/babel-plugin-transform-async-to-generator/test/fixtures/regression/4943/exec.js @@ -0,0 +1,19 @@ +"use strict"; + +function mandatory(paramName) { + throw new Error(`Missing parameter: ${paramName}`); +} + +async function foo({ a, b = mandatory("b") } = {}) { + return Promise.resolve(b); +} + +return (async () => { + assert.doesNotThrow(() => { + foo() + .then(() => { + throw new Error('should not occcur'); + }) + .catch(() => true); + }); +})(); diff --git a/packages/babel-plugin-transform-async-to-generator/test/fixtures/regression/4943/expected.js b/packages/babel-plugin-transform-async-to-generator/test/fixtures/regression/4943/expected.js new file mode 100644 index 0000000000..a5c21a754e --- /dev/null +++ b/packages/babel-plugin-transform-async-to-generator/test/fixtures/regression/4943/expected.js @@ -0,0 +1,21 @@ +"use strict"; + +let foo = (() => { + var _ref = _asyncToGenerator(function* (_ref2) { + let a = _ref2.a; + var _ref2$b = _ref2.b; + let b = _ref2$b === undefined ? mandatory("b") : _ref2$b; + + return Promise.resolve(b); + }); + + return function foo(_x) { + return _ref.apply(this, arguments); + }; +})(); + +function _asyncToGenerator(fn) { return function () { return new Promise((resolve, reject) => { var gen = fn.apply(this, arguments); function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _next(value) { step("next", value); } function _throw(err) { step("throw", err); } _next(); }); }; } + +function mandatory(paramName) { + throw new Error(`Missing parameter: ${paramName}`); +} diff --git a/packages/babel-plugin-transform-async-to-generator/test/fixtures/regression/4943/options.json b/packages/babel-plugin-transform-async-to-generator/test/fixtures/regression/4943/options.json new file mode 100644 index 0000000000..2f78050706 --- /dev/null +++ b/packages/babel-plugin-transform-async-to-generator/test/fixtures/regression/4943/options.json @@ -0,0 +1,10 @@ +{ + "plugins": [ + "transform-async-to-generator", + "transform-es2015-destructuring", + "transform-es2015-parameters" + ], + "parserOpts": { + "allowReturnOutsideFunction": true + } +} diff --git a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/async-function/expected.js b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/async-function/expected.js index 28854cd24b..90ca00c046 100644 --- a/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/async-function/expected.js +++ b/packages/babel-plugin-transform-react-constant-elements/test/fixtures/constant-elements/async-function/expected.js @@ -1,4 +1,4 @@ -function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _next(value) { step("next", value); } function _throw(err) { step("throw", err); } _next(); }); }; } +function _asyncToGenerator(fn) { return function () { return new Promise((resolve, reject) => { var gen = fn.apply(this, arguments); function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _next(value) { step("next", value); } function _throw(err) { step("throw", err); } _next(); }); }; } export default { function(name) { @@ -10,4 +10,4 @@ export default { return ; })(); } -}; \ No newline at end of file +};