abstract away remap async to generator helper
This commit is contained in:
parent
6f7da38957
commit
50d7a46c7f
29
lib/6to5/transformation/helpers/remap-async-to-generator.js
Normal file
29
lib/6to5/transformation/helpers/remap-async-to-generator.js
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
var traverse = require("../../traverse");
|
||||||
|
var t = require("../../types");
|
||||||
|
|
||||||
|
module.exports = function (node, callId) {
|
||||||
|
node.async = false;
|
||||||
|
node.generator = true;
|
||||||
|
|
||||||
|
traverse(node, {
|
||||||
|
enter: function (node) {
|
||||||
|
if (t.isFunction(node)) this.skip();
|
||||||
|
|
||||||
|
if (t.isAwaitExpression(node)) {
|
||||||
|
node.type = "YieldExpression";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var call = t.callExpression(callId, [node]);
|
||||||
|
|
||||||
|
if (t.isFunctionDeclaration(node)) {
|
||||||
|
var declar = t.variableDeclaration("var", [
|
||||||
|
t.variableDeclarator(node.id, call)
|
||||||
|
]);
|
||||||
|
declar._blockHoist = true;
|
||||||
|
return declar;
|
||||||
|
} else {
|
||||||
|
return call;
|
||||||
|
}
|
||||||
|
};
|
||||||
@ -1,3 +1,4 @@
|
|||||||
|
var remapAsyncToGenerator = require("../helpers/remap-async-to-generator");
|
||||||
var bluebirdCoroutines = require("./optional-bluebird-coroutines");
|
var bluebirdCoroutines = require("./optional-bluebird-coroutines");
|
||||||
|
|
||||||
exports.optional = true;
|
exports.optional = true;
|
||||||
@ -7,5 +8,5 @@ exports.manipulateOptions = bluebirdCoroutines.manipulateOptions;
|
|||||||
exports.Function = function (node, parent, file) {
|
exports.Function = function (node, parent, file) {
|
||||||
if (!node.async || node.generator) return;
|
if (!node.async || node.generator) return;
|
||||||
|
|
||||||
return bluebirdCoroutines._Function(node, file.addHelper("async-to-generator"));
|
return remapAsyncToGenerator(node, file.addHelper("async-to-generator"));
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
var remapAsyncToGenerator = require("../helpers/remap-async-to-generator");
|
||||||
var traverse = require("../../traverse");
|
var traverse = require("../../traverse");
|
||||||
var t = require("../../types");
|
var t = require("../../types");
|
||||||
|
|
||||||
@ -8,36 +9,12 @@ exports.manipulateOptions = function (opts) {
|
|||||||
|
|
||||||
exports.optional = true;
|
exports.optional = true;
|
||||||
|
|
||||||
exports._Function = function (node, callId) {
|
|
||||||
node.async = false;
|
|
||||||
node.generator = true;
|
|
||||||
|
|
||||||
traverse(node, {
|
|
||||||
enter: function (node) {
|
|
||||||
if (t.isFunction(node)) this.skip();
|
|
||||||
|
|
||||||
if (t.isAwaitExpression(node)) {
|
|
||||||
node.type = "YieldExpression";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
var call = t.callExpression(callId, [node]);
|
|
||||||
|
|
||||||
if (t.isFunctionDeclaration(node)) {
|
|
||||||
var declar = t.variableDeclaration("var", [
|
|
||||||
t.variableDeclarator(node.id, call)
|
|
||||||
]);
|
|
||||||
declar._blockHoist = true;
|
|
||||||
return declar;
|
|
||||||
} else {
|
|
||||||
return call;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.Function = function (node, parent, file) {
|
exports.Function = function (node, parent, file) {
|
||||||
if (!node.async || node.generator) return;
|
if (!node.async || node.generator) return;
|
||||||
|
|
||||||
var id = file.addImport("bluebird");
|
return remapAsyncToGenerator(
|
||||||
return exports._Function(node, t.memberExpression(id, t.identifier("coroutine")));
|
node,
|
||||||
|
t.memberExpression(file.addImport("bluebird"), t.identifier("coroutine"))
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user