diff --git a/lib/6to5/transformation/helpers/remap-async-to-generator.js b/lib/6to5/transformation/helpers/remap-async-to-generator.js new file mode 100644 index 0000000000..86a2c00ba7 --- /dev/null +++ b/lib/6to5/transformation/helpers/remap-async-to-generator.js @@ -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; + } +}; diff --git a/lib/6to5/transformation/transformers/optional-async-to-generator.js b/lib/6to5/transformation/transformers/optional-async-to-generator.js index 551c9f7c71..143445a9c2 100644 --- a/lib/6to5/transformation/transformers/optional-async-to-generator.js +++ b/lib/6to5/transformation/transformers/optional-async-to-generator.js @@ -1,4 +1,5 @@ -var bluebirdCoroutines = require("./optional-bluebird-coroutines"); +var remapAsyncToGenerator = require("../helpers/remap-async-to-generator"); +var bluebirdCoroutines = require("./optional-bluebird-coroutines"); exports.optional = true; @@ -7,5 +8,5 @@ exports.manipulateOptions = bluebirdCoroutines.manipulateOptions; exports.Function = function (node, parent, file) { if (!node.async || node.generator) return; - return bluebirdCoroutines._Function(node, file.addHelper("async-to-generator")); + return remapAsyncToGenerator(node, file.addHelper("async-to-generator")); }; diff --git a/lib/6to5/transformation/transformers/optional-bluebird-coroutines.js b/lib/6to5/transformation/transformers/optional-bluebird-coroutines.js index cda714330c..08c70ab9d0 100644 --- a/lib/6to5/transformation/transformers/optional-bluebird-coroutines.js +++ b/lib/6to5/transformation/transformers/optional-bluebird-coroutines.js @@ -1,5 +1,6 @@ -var traverse = require("../../traverse"); -var t = require("../../types"); +var remapAsyncToGenerator = require("../helpers/remap-async-to-generator"); +var traverse = require("../../traverse"); +var t = require("../../types"); exports.manipulateOptions = function (opts) { opts.experimental = true; @@ -8,36 +9,12 @@ exports.manipulateOptions = function (opts) { 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) { if (!node.async || node.generator) return; - var id = file.addImport("bluebird"); - return exports._Function(node, t.memberExpression(id, t.identifier("coroutine"))); + return remapAsyncToGenerator( + node, + t.memberExpression(file.addImport("bluebird"), t.identifier("coroutine")) + ); };