diff --git a/bin/babel-external-helpers b/bin/babel-external-helpers index c60b3d36f6..35eab0ca6a 100755 --- a/bin/babel-external-helpers +++ b/bin/babel-external-helpers @@ -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)); diff --git a/src/babel/build-external-helpers.js b/src/babel/build-external-helpers.js index 0db0f3be56..dbde9d20a1 100644 --- a/src/babel/build-external-helpers.js +++ b/src/babel/build-external-helpers.js @@ -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; };