Always use the native (or polyfilled) Promise in transform-async-to-generator (#5536)
* Always use the native (or polyfilled) Promise in transform-async-to-generator Fixes #5531 * Simplify scope handling to only un-shadow the Program's Promise Only the helper needs to see the native Promise.
This commit is contained in:
@@ -9,6 +9,13 @@ export default function () {
|
||||
Function(path, state) {
|
||||
if (!path.node.async || path.node.generator) return;
|
||||
|
||||
// Ensure any Promise bindings at the Program level are renamed
|
||||
// so the asyncToGenerator helper only sees the native Promise
|
||||
const programScope = path.scope.getProgramParent();
|
||||
if (programScope.hasBinding("Promise", true)) {
|
||||
programScope.rename("Promise");
|
||||
}
|
||||
|
||||
remapAsyncToGenerator(path, state.file, {
|
||||
wrapAsync: state.addHelper("asyncToGenerator"),
|
||||
});
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
import Promise from 'somewhere';
|
||||
|
||||
async function foo() {
|
||||
await Promise.resolve();
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
let foo = (() => {
|
||||
var _ref = _asyncToGenerator(function* () {
|
||||
yield _Promise.resolve();
|
||||
});
|
||||
|
||||
return function foo() {
|
||||
return _ref.apply(this, arguments);
|
||||
};
|
||||
})();
|
||||
|
||||
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 { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
|
||||
|
||||
import _Promise from 'somewhere';
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"plugins": [
|
||||
"transform-async-to-generator"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
let Promise;
|
||||
|
||||
async function foo() {
|
||||
let Promise;
|
||||
|
||||
await bar();
|
||||
|
||||
async function bar() {
|
||||
return Promise.resolve();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
let foo = (() => {
|
||||
var _ref = _asyncToGenerator(function* () {
|
||||
let bar = (() => {
|
||||
var _ref2 = _asyncToGenerator(function* () {
|
||||
return Promise.resolve();
|
||||
});
|
||||
|
||||
return function bar() {
|
||||
return _ref2.apply(this, arguments);
|
||||
};
|
||||
})();
|
||||
|
||||
let Promise;
|
||||
|
||||
yield bar();
|
||||
});
|
||||
|
||||
return function foo() {
|
||||
return _ref.apply(this, arguments);
|
||||
};
|
||||
})();
|
||||
|
||||
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 { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
|
||||
|
||||
let _Promise;
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"plugins": [
|
||||
"transform-async-to-generator"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
let Promise;
|
||||
async function foo() {
|
||||
await new Promise(resolve => { resolve() });
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
let foo = (() => {
|
||||
var _ref = _asyncToGenerator(function* () {
|
||||
yield new _Promise(function (resolve) {
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
|
||||
return function foo() {
|
||||
return _ref.apply(this, arguments);
|
||||
};
|
||||
})();
|
||||
|
||||
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 { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
|
||||
|
||||
let _Promise;
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"plugins": [
|
||||
"transform-async-to-generator"
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user