add possibility to select format of external helpers

This commit is contained in:
Ondrej Kraus 2015-03-04 02:09:31 +01:00
parent 71b9f19e6a
commit a0fb398ca2
2 changed files with 60 additions and 5 deletions

View File

@ -1,4 +1,13 @@
#!/usr/bin/env node
var commander = require("commander");
var util = require("../lib/babel/util");
var runtime = require("../lib/babel/build-external-helpers");
console.log(runtime());
commander.option("-l, --whitelist [whitelist]", "Whitelist of helpers to ONLY include", util.list);
commander.option("-t, --output-type [type]", "Type of output (global|umd|var)", "global");
commander.usage("[options]");
commander.parse(process.argv);
console.log(runtime(commander.whitelist, commander.outputType));

View File

@ -3,15 +3,30 @@ import generator from "./generation";
import * as util from "./util";
import t from "./types";
export default function (whitelist) {
var namespace = t.identifier("babelHelpers");
function buildGlobal(namespace, builder) {
var body = [];
var container = t.functionExpression(null, [t.identifier("global")], t.blockStatement(body));
var tree = t.program([t.expressionStatement(t.callExpression(container, [util.template("self-global")]))]);
body.push(t.variableDeclaration("var", [
t.variableDeclarator(
namespace,
t.assignmentExpression("=", t.memberExpression(t.identifier("global"), namespace), t.objectExpression([]))
)
]));
builder(body);
return tree;
}
function buildUmd(namespace, builder) {
var body = [];
body.push(t.variableDeclaration("var", [
t.variableDeclarator(namespace, t.identifier("global"))
]));
buildHelpers(body, namespace, whitelist);
builder(body);
var container = util.template("umd-commonjs-strict", {
AMD_ARGUMENTS: t.arrayExpression([t.literal("exports")]),
@ -21,7 +36,38 @@ export default function (whitelist) {
FACTORY_PARAMETERS: t.identifier("global"),
FACTORY_BODY: body
});
var tree = t.program([container]);
return t.program([container]);
}
function buildVar(namespace, builder) {
var body = [];
body.push(t.variableDeclaration("var", [
t.variableDeclarator(namespace, t.objectExpression({}))
]));
builder(body);
return t.program(body);
}
export default function (whitelist, outputType = "global") {
var namespace = t.identifier("babelHelpers");
var builder = function (body) {
return buildHelpers(body, namespace, whitelist);
};
var tree;
switch (outputType) {
case "global":
tree = buildGlobal(namespace, builder);
break;
case "umd":
tree = buildUmd(namespace, builder);
break;
case "var":
tree = buildVar(namespace, builder);
break;
default:
throw new Error("Unsupported output type");
}
return generator(tree).code;
};