From 6f53980bfcb8ea57634b80050a5eaa7a256138c5 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Sun, 8 Mar 2015 04:04:40 +1100 Subject: [PATCH] move runtime helpers to separate modules - babel/ember-cli-babel#24 --- .gitignore | 1 + packages/babel-runtime/helpers/.gitkeep | 0 packages/build-runtime.js | 33 +++++++++++-------- src/babel/build-external-helpers.js | 15 ++++++++- src/babel/build-helpers.js | 15 --------- src/babel/transformation/file.js | 11 +++++-- .../templates/self-contained-helpers-head.js | 2 +- .../transformers/other/runtime.js | 4 +-- .../transformation/runtime/full/expected.js | 6 ++-- .../runtime/modules-amd/expected.js | 6 ++-- .../runtime/modules-common/expected.js | 4 +-- .../runtime/modules-system/expected.js | 10 +++--- .../runtime/modules-umd/expected.js | 10 +++--- 13 files changed, 63 insertions(+), 54 deletions(-) create mode 100644 packages/babel-runtime/helpers/.gitkeep delete mode 100644 src/babel/build-helpers.js diff --git a/.gitignore b/.gitignore index bd8b1c1bce..3900d8c2ff 100644 --- a/.gitignore +++ b/.gitignore @@ -12,5 +12,6 @@ coverage dist .package.json packages/babel-runtime/*.js +packages/babel-runtime/helpers/*.js packages/babel-runtime/regenerator/*.js lib diff --git a/packages/babel-runtime/helpers/.gitkeep b/packages/babel-runtime/helpers/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/build-runtime.js b/packages/build-runtime.js index 272eea0962..d589606520 100644 --- a/packages/build-runtime.js +++ b/packages/build-runtime.js @@ -1,11 +1,12 @@ "use strict"; -var transform = require("../lib/babel/transformation"); -var buildHelpers = require("../lib/babel/build-helpers"); -var util = require("../lib/babel/util"); -var fs = require("fs"); -var t = require("../lib/babel/types"); -var _ = require("lodash"); +var transform = require("../lib/babel/transformation"); +var each = require("lodash/collection/each"); +var File = require("../lib/babel/transformation/file"); +var util = require("../lib/babel/util"); +var fs = require("fs"); +var t = require("../lib/babel/types"); +var _ = require("lodash"); var relative = function (filename) { return __dirname + "/babel-runtime/" + filename; @@ -39,22 +40,26 @@ var updatePackage = function () { var selfContainify = function (code) { return transform(code, { - optional: ["selfContained"] + optional: ["runtime"] }).code; }; -var buildHelpers2 = function () { - var body = util.template("self-contained-helpers-head"); - var tree = t.program(body); - - buildHelpers(body, t.identifier("helpers")); +var buildHelper = function (helperName) { + var tree = t.program( + util.template("self-contained-helpers-head", { + HELPER: util.template(helperName) + }) + ); return transform.fromAst(tree, null, { - optional: ["selfContained"] + optional: ["runtime"] }).code; }; -writeFile("helpers.js", buildHelpers2()); +each(File.helpers, function (helperName) { + writeFile("helpers/" + helperName + ".js", buildHelper(helperName)); +}); + writeFile("core-js.js", readFile("core-js/library", true)); writeFile("regenerator/index.js", readFile("regenerator-babel/runtime-module", true)); writeFile("regenerator/runtime.js", selfContainify(readFile("regenerator-babel/runtime"))); diff --git a/src/babel/build-external-helpers.js b/src/babel/build-external-helpers.js index 0d405ec8e2..91c393fcc5 100644 --- a/src/babel/build-external-helpers.js +++ b/src/babel/build-external-helpers.js @@ -1,7 +1,8 @@ -import buildHelpers from "./build-helpers"; import generator from "./generation"; import * as messages from "./messages"; import * as util from "./util"; +import File from "./transformation/file"; +import each from "lodash/collection/each"; import t from "./types"; function buildGlobal(namespace, builder) { @@ -49,8 +50,20 @@ function buildVar(namespace, builder) { return t.program(body); } +function buildHelpers(body, namespace, whitelist = []) { + each(File.helpers, function (name) { + if (whitelist.length && whitelist.indexOf(name) === -1) return; + + var key = t.identifier(t.toIdentifier(name)); + body.push(t.expressionStatement( + t.assignmentExpression("=", t.memberExpression(namespace, key), util.template(name)) + )); + }); +} + export default function (whitelist, outputType = "global") { var namespace = t.identifier("babelHelpers"); + var builder = function (body) { return buildHelpers(body, namespace, whitelist); }; diff --git a/src/babel/build-helpers.js b/src/babel/build-helpers.js deleted file mode 100644 index 8793445ed3..0000000000 --- a/src/babel/build-helpers.js +++ /dev/null @@ -1,15 +0,0 @@ -import File from "./transformation/file"; -import * as util from "./util"; -import each from "lodash/collection/each"; -import t from "./types"; - -export default function (body, namespace, whitelist = []) { - each(File.helpers, function (name) { - if (whitelist.length && whitelist.indexOf(name) === -1) return; - - var key = t.identifier(t.toIdentifier(name)); - body.push(t.expressionStatement( - t.assignmentExpression("=", t.memberExpression(namespace, key), util.template(name)) - )); - }); -}; diff --git a/src/babel/transformation/file.js b/src/babel/transformation/file.js index a2727ac2ce..f3b1502c38 100644 --- a/src/babel/transformation/file.js +++ b/src/babel/transformation/file.js @@ -377,10 +377,15 @@ export default class File { this.usedHelpers[name] = true; + var generator = this.get("helperGenerator"); var runtime = this.get("helpersNamespace"); - if (runtime) { - name = t.identifier(t.toIdentifier(name)); - return t.memberExpression(runtime, name); + if (runtime || generator) { + var id = t.identifier(t.toIdentifier(name)); + if (generator) { + return generator(name, id); + } else { + return t.memberExpression(runtime, id); + } } else { var ref = util.template(name); ref._compact = true; diff --git a/src/babel/transformation/templates/self-contained-helpers-head.js b/src/babel/transformation/templates/self-contained-helpers-head.js index 78cc1934e6..3d45833803 100644 --- a/src/babel/transformation/templates/self-contained-helpers-head.js +++ b/src/babel/transformation/templates/self-contained-helpers-head.js @@ -1,2 +1,2 @@ -var helpers = exports.default = {}; +exports.default = HELPER; exports.__esModule = true; diff --git a/src/babel/transformation/transformers/other/runtime.js b/src/babel/transformation/transformers/other/runtime.js index bf925d5dd6..3b4a8b4bd3 100644 --- a/src/babel/transformation/transformers/other/runtime.js +++ b/src/babel/transformation/transformers/other/runtime.js @@ -81,8 +81,8 @@ export function Program(node, parent, scope, file) { } export function pre(file) { - file.setDynamic("helpersNamespace", function () { - return file.addImport("babel-runtime/helpers", "babelHelpers"); + file.set("helperGenerator", function (name, id) { + return file.addImport("babel-runtime/helpers/" + name, id); }); file.setDynamic("coreIdentifier", function () { diff --git a/test/fixtures/transformation/runtime/full/expected.js b/test/fixtures/transformation/runtime/full/expected.js index 307aab4110..203cdc99c5 100644 --- a/test/fixtures/transformation/runtime/full/expected.js +++ b/test/fixtures/transformation/runtime/full/expected.js @@ -4,7 +4,7 @@ var _core = require("babel-runtime/core-js")["default"]; var _regeneratorRuntime = require("babel-runtime/regenerator")["default"]; -var _babelHelpers = require("babel-runtime/helpers")["default"]; +var _interopRequire = require("babel-runtime/helpers/interop-require")["default"]; var giveWord = _regeneratorRuntime.mark(function giveWord() { return _regeneratorRuntime.wrap(function giveWord$(context$1$0) { @@ -24,9 +24,9 @@ exports.giveWord = giveWord; var _someModule = require("someModule"); -var foo = _babelHelpers.interopRequire(_someModule); +var foo = _interopRequire(_someModule); -var bar = _babelHelpers.interopRequireWildcard(_someModule); +var bar = _interopRequire(_someModule); var myWord = _core.Symbol("abc"); exports.myWord = myWord; diff --git a/test/fixtures/transformation/runtime/modules-amd/expected.js b/test/fixtures/transformation/runtime/modules-amd/expected.js index ef9e316cb0..9bec3573e2 100644 --- a/test/fixtures/transformation/runtime/modules-amd/expected.js +++ b/test/fixtures/transformation/runtime/modules-amd/expected.js @@ -1,7 +1,7 @@ -define(["exports", "foo", "babel-runtime/helpers"], function (exports, _foo, _babelRuntimeHelpers) { +define(["exports", "foo", "babel-runtime/helpers/interop-require"], function (exports, _foo, _babelRuntimeHelpersInteropRequire) { "use strict"; - var _babelHelpers = _babelRuntimeHelpers["default"]; + var _interopRequire = _babelRuntimeHelpersInteropRequire["default"]; - var foo = _babelHelpers.interopRequire(_foo); + var foo = _interopRequire(_foo); }); \ No newline at end of file diff --git a/test/fixtures/transformation/runtime/modules-common/expected.js b/test/fixtures/transformation/runtime/modules-common/expected.js index 9f58721474..85ff7ecc0a 100644 --- a/test/fixtures/transformation/runtime/modules-common/expected.js +++ b/test/fixtures/transformation/runtime/modules-common/expected.js @@ -1,5 +1,5 @@ "use strict"; -var _babelHelpers = require("babel-runtime/helpers")["default"]; +var _interopRequire = require("babel-runtime/helpers/interop-require")["default"]; -var foo = _babelHelpers.interopRequire(require("foo")); \ No newline at end of file +var foo = _interopRequire(require("foo")); \ No newline at end of file diff --git a/test/fixtures/transformation/runtime/modules-system/expected.js b/test/fixtures/transformation/runtime/modules-system/expected.js index cdd6623fbf..3ccf69068d 100644 --- a/test/fixtures/transformation/runtime/modules-system/expected.js +++ b/test/fixtures/transformation/runtime/modules-system/expected.js @@ -1,14 +1,14 @@ -System.register(["babel-runtime/helpers"], function (_export) { - var _babelHelpers; +System.register(["babel-runtime/helpers/to-consumable-array"], function (_export) { + var _toConsumableArray; return { - setters: [function (_babelRuntimeHelpers) { - _babelHelpers = _babelRuntimeHelpers["default"]; + setters: [function (_babelRuntimeHelpersToConsumableArray) { + _toConsumableArray = _babelRuntimeHelpersToConsumableArray["default"]; }], execute: function () { "use strict"; - foo.apply(undefined, _babelHelpers.toConsumableArray(bar)); + foo.apply(undefined, _toConsumableArray(bar)); } }; }); \ No newline at end of file diff --git a/test/fixtures/transformation/runtime/modules-umd/expected.js b/test/fixtures/transformation/runtime/modules-umd/expected.js index 5868c4ac04..6365e2a2c0 100644 --- a/test/fixtures/transformation/runtime/modules-umd/expected.js +++ b/test/fixtures/transformation/runtime/modules-umd/expected.js @@ -1,13 +1,13 @@ (function (factory) { if (typeof define === "function" && define.amd) { - define(["exports", "foo", "babel-runtime/helpers"], factory); + define(["exports", "foo", "babel-runtime/helpers/interop-require"], factory); } else if (typeof exports !== "undefined") { - factory(exports, require("foo"), require("babel-runtime/helpers")); + factory(exports, require("foo"), require("babel-runtime/helpers/interop-require")); } -})(function (exports, _foo, _babelRuntimeHelpers) { +})(function (exports, _foo, _babelRuntimeHelpersInteropRequire) { "use strict"; - var _babelHelpers = _babelRuntimeHelpers["default"]; + var _interopRequire = _babelRuntimeHelpersInteropRequire["default"]; - var foo = _babelHelpers.interopRequire(_foo); + var foo = _interopRequire(_foo); }); \ No newline at end of file