From d4cc8fefd1c18645c44015b7b6d021aebcc1f37e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alu=C3=ADsio=20Augusto=20Silva=20Gon=C3=A7alves?= Date: Sat, 17 Jan 2015 23:02:20 -0200 Subject: [PATCH] Add transformer to import regeneratorRuntime from a module Thanks to facebook/regenerator#167 Regenerator's runtime can be now required as a module (though not in an easily self-containable way). This transformer, together with `coreAliasing` and `externalRuntime`, allows users to ditch a runtime dependency on `6to5`/`6to5-core` to depend directly on `core-js` and `regenerator`. --- lib/6to5/transformation/transform.js | 1 + .../optional-external-regenerator-runtime.js | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 lib/6to5/transformation/transformers/optional-external-regenerator-runtime.js diff --git a/lib/6to5/transformation/transform.js b/lib/6to5/transformation/transform.js index 74079d5d0b..9d32b62fa9 100644 --- a/lib/6to5/transformation/transform.js +++ b/lib/6to5/transformation/transform.js @@ -95,6 +95,7 @@ _.each({ typeofSymbol: require("./transformers/optional-typeof-symbol"), coreAliasing: require("./transformers/optional-core-aliasing"), + externalRegenerator: require("./transformers/optional-external-regenerator-runtime"), undefinedToVoid: require("./transformers/optional-undefined-to-void"), // spec diff --git a/lib/6to5/transformation/transformers/optional-external-regenerator-runtime.js b/lib/6to5/transformation/transformers/optional-external-regenerator-runtime.js new file mode 100644 index 0000000000..9294a6c76e --- /dev/null +++ b/lib/6to5/transformation/transformers/optional-external-regenerator-runtime.js @@ -0,0 +1,16 @@ +var t = require("../../types"); + +exports.optional = true; + +exports.ast = { + enter: function (ast, file) { + file._regeneratorId = file.addImport("regenerator/runtime-module", "regeneratorRuntime"); + } +}; + +exports.MemberExpression = function (node, parent, scope, context, file) { + var obj = node.object; + var prop = node.property; + if (!t.isReferenced(node, parent) || !t.isReferenced(obj, node)) return; + if (obj.name === "regeneratorRuntime") return t.memberExpression(file._regeneratorId, prop); +};