fix regenerator resolution bug, don't depend on 6to5 being linked - closes #85

This commit is contained in:
Sebastian McKenzie 2014-10-22 07:23:29 +11:00
parent 3467d509f7
commit b8b670e607

View File

@ -17,7 +17,12 @@ var vm = require("vm");
var _ = require("lodash"); var _ = require("lodash");
var readResolve = function (filename) { var readResolve = function (filename) {
return fs.readFileSync(require.resolve(filename), "utf8"); try {
filename = require.resolve(filename);
} catch (err) {
return null;
}
return fs.readFileSync(filename, "utf8");
}; };
var getVersion = function (name) { var getVersion = function (name) {
@ -38,6 +43,7 @@ _.each([
var compilers = { var compilers = {
"6to5": { "6to5": {
version: getVersion(".."),
compile: function (code, filename) { compile: function (code, filename) {
return to5.transform(code, { filename: filename }).code; return to5.transform(code, { filename: filename }).code;
} }
@ -54,7 +60,7 @@ var compilers = {
}, },
esnext: { esnext: {
runtime: readResolve("esnext/node_modules/regenerator/runtime.js"), runtime: readResolve("esnext/node_modules/regenerator/runtime.js") || readResolve("regenerator/runtime.js"),
compile: function (code, filename) { compile: function (code, filename) {
return esnext.compile(code).code; return esnext.compile(code).code;
} }
@ -87,7 +93,7 @@ var compilers = {
var uglifyTitle = "uglify v" + getVersion("uglify-js"); var uglifyTitle = "uglify v" + getVersion("uglify-js");
_.each(compilers, function (compiler, name) { _.each(compilers, function (compiler, name) {
compiler.title = name + " v" + getVersion(name); compiler.title = name + " v" + (compiler.version || getVersion(name));
}); });
// //
@ -96,14 +102,13 @@ var sizeBenchmark = function (code, loc, name, compiler) {
var log = function (output, title) { var log = function (output, title) {
title = [compiler.title].concat(title || []).join(" + "); title = [compiler.title].concat(title || []).join(" + ");
var kilo = (output.length / 1024).toFixed(2);
var text; var text;
var color; var color;
if (output === false) { if (output.stack) {
text = "error"; text = "error";
color = "red"; color = "red";
} else { } else {
var kilo = (output.length / 1024).toFixed(2);
text = kilo + "KB"; text = kilo + "KB";
color = "cyan"; color = "cyan";
} }
@ -111,6 +116,10 @@ var sizeBenchmark = function (code, loc, name, compiler) {
text = matcha.utils.color(matcha.utils.padBefore(text, 22), color); text = matcha.utils.color(matcha.utils.padBefore(text, 22), color);
console.log(text, matcha.utils.color("» " + title, "gray")); console.log(text, matcha.utils.color("» " + title, "gray"));
if (output.stack) {
console.error(output.stack);
}
}; };
var go = function (getOutput, title) { var go = function (getOutput, title) {
@ -118,7 +127,7 @@ var sizeBenchmark = function (code, loc, name, compiler) {
try { try {
code = getOutput(); code = getOutput();
} catch (err) { } catch (err) {
log(false, title); log(err, title);
return; return;
} }
@ -127,7 +136,7 @@ var sizeBenchmark = function (code, loc, name, compiler) {
var output; var output;
go(function () { go(function () {
return output = output || compiler.compile(code, loc); return output = compiler.compile(code, loc);
}); });
if (!output) return; if (!output) return;