add generators support via regenerator

This commit is contained in:
Sebastian McKenzie
2014-10-14 10:11:51 +11:00
parent 7db9abb9dd
commit 73b8daf370
12 changed files with 77 additions and 14 deletions

View File

@@ -91,6 +91,7 @@ File.prototype.transform = function (ast) {
var result = util.generate(ast, opts);
if (this.shebang) {
// add back shebang
result.code = this.shebang + result.code;
}

View File

@@ -1,2 +1,3 @@
require("es6-symbol/implement");
require("es6-shim");
global.regeneratorRuntime = require("regenerator/runtime");

View File

@@ -30,6 +30,7 @@ transform.test = function (task, assert) {
actualCode = recast.prettyPrint(actualAst).code;
if (exec) {
require("./polyfill");
var fn = new Function("assert", actualCode);
fn(assert);
}
@@ -79,12 +80,12 @@ transform.transformers = {
templateLiterals: require("./transformers/template-literals"),
propertyMethodAssignment: require("./transformers/property-method-assignment"),
defaultParameters: require("./transformers/default-parameters"),
generators: require("./transformers/generators"),
letScoping: require("./transformers/let-scoping"),
restParameters: require("./transformers/rest-parameters"),
destructuring: require("./transformers/destructuring"),
forOf: require("./transformers/for-of"),
unicodeRegex: require("./transformers/unicode-regex"),
generators: require("./transformers/generators"),
_aliasFunctions: require("./transformers/_alias-functions")
};

View File

@@ -9,10 +9,14 @@ function Transformer(key, transformer) {
}
Transformer.normalise = function (transformer) {
_.each(transformer, function (fns, type) {
if (_.isFunction(fns)) fns = { enter: fns };
transformer[type] = fns;
});
if (_.isFunction(transformer)) {
transformer = { ast: transformer };
} else {
_.each(transformer, function (fns, type) {
if (_.isFunction(fns)) fns = { enter: fns };
transformer[type] = fns;
});
}
return transformer;
};
@@ -20,6 +24,11 @@ Transformer.prototype.transform = function (file) {
if (!this.canRun(file)) return;
var transformer = this.transformer;
var ast = file.ast;
if (transformer.ast) {
transformer.ast(ast);
}
var build = function (exit) {
return function (node, parent) {
@@ -43,7 +52,7 @@ Transformer.prototype.transform = function (file) {
};
};
traverse(file.ast, {
traverse(ast, {
enter: build(),
exit: build(true)
});

View File

@@ -0,0 +1,3 @@
var regenerator = require("regenerator");
module.exports = regenerator.transform;