From c45ce58f0cc3943a24f4a58c599fa5c2e3164fc3 Mon Sep 17 00:00:00 2001 From: Ondrej Kraus Date: Mon, 2 Mar 2015 15:47:36 +0100 Subject: [PATCH] stop assigning to global in generated helpers code --- src/babel/build-external-helpers.js | 26 +++++++++++++------ .../templates/umd-commonjs-strict.js | 11 ++++++++ 2 files changed, 29 insertions(+), 8 deletions(-) create mode 100644 src/babel/transformation/templates/umd-commonjs-strict.js diff --git a/src/babel/build-external-helpers.js b/src/babel/build-external-helpers.js index 7feab4699b..ab2d705b32 100644 --- a/src/babel/build-external-helpers.js +++ b/src/babel/build-external-helpers.js @@ -6,18 +6,28 @@ import t from "./types"; export default function (whitelist) { var namespace = t.identifier("babelHelpers"); - 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")]))]); - + var body = []; body.push(t.variableDeclaration("var", [ - t.variableDeclarator( - namespace, - t.assignmentExpression("=", t.memberExpression(t.identifier("global"), namespace), t.objectExpression([])) - ) + t.variableDeclarator(namespace, t.identifier("global")) ])); buildHelpers(body, namespace, whitelist); + var globalHelpersDeclar = t.variableDeclaration("var", [ + t.variableDeclarator( + namespace, + t.objectExpression({}) + ) + ]); + var container = util.template("umd-commonjs-strict", { + AMD_ARGUMENTS: t.arrayExpression([t.literal("exports")]), + COMMON_ARGUMENTS: t.identifier("exports"), + BROWSER_ARGUMENTS: t.identifier("root"), + UMD_ROOT: namespace, + FACTORY_PARAMETERS: t.identifier("global"), + FACTORY_BODY: body + }); + var tree = t.program([globalHelpersDeclar, container]); + return generator(tree).code; }; diff --git a/src/babel/transformation/templates/umd-commonjs-strict.js b/src/babel/transformation/templates/umd-commonjs-strict.js new file mode 100644 index 0000000000..bd38d1e96b --- /dev/null +++ b/src/babel/transformation/templates/umd-commonjs-strict.js @@ -0,0 +1,11 @@ +(function (root, factory) { + if (typeof define === "function" && define.amd) { + define(AMD_ARGUMENTS, factory); + } else if (typeof exports === 'object') { + factory(COMMON_ARGUMENTS); + } else { + factory(BROWSER_ARGUMENTS); + } +})(UMD_ROOT, function (FACTORY_PARAMETERS) { + FACTORY_BODY +});