From c74c82bd60a50494b94d80d2df62bf2099744994 Mon Sep 17 00:00:00 2001 From: Chris Garrett Date: Tue, 20 Aug 2019 09:59:03 -0700 Subject: [PATCH 1/2] [BUGFIX lts] Adds the babel-helpers injection plugin back Helpers were no longer being externalized in our builds, which adds a significant amount to the final payload. This adds them back into the build. Also fixes an issue where the template compiler was not being included in the vendor folder for Ember. --- lib/index.js | 9 ++++++++- {broccoli => lib}/transforms/inject-babel-helpers.js | 0 package.json | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) rename {broccoli => lib}/transforms/inject-babel-helpers.js (100%) diff --git a/lib/index.js b/lib/index.js index b9ab147c8ee..dc45f8b5b1a 100644 --- a/lib/index.js +++ b/lib/index.js @@ -7,6 +7,7 @@ const resolve = require('resolve'); const concatBundle = require('./concat-bundle'); const buildDebugMacroPlugin = require('./build-debug-macro-plugin'); const buildStripClassCallcheckPlugin = require('./build-strip-class-callcheck-plugin'); +const injectBabelHelpers = require('./transforms/inject-babel-helpers'); const isProduction = process.env.EMBER_ENV === 'production'; @@ -79,6 +80,7 @@ module.exports = { babel: Object.assign({}, babelOptions, { loose: true, plugins: [ + injectBabelHelpers, buildDebugMacroPlugin(!isProduction), [ require.resolve('@babel/plugin-transform-block-scoping'), @@ -157,6 +159,11 @@ module.exports = { files: ['jquery.js'], }); + let templateCompiler = new Funnel(tree, { + destDir: 'ember', + include: ['ember-template-compiler.js', 'ember-template-compiler.map'], + }); + let ember; let targets = (this.project && this.project.targets && this.project.targets.browsers) || []; @@ -174,6 +181,6 @@ module.exports = { }); } - return new MergeTrees([ember, jquery]); + return new MergeTrees([ember, templateCompiler, jquery]); }, }; diff --git a/broccoli/transforms/inject-babel-helpers.js b/lib/transforms/inject-babel-helpers.js similarity index 100% rename from broccoli/transforms/inject-babel-helpers.js rename to lib/transforms/inject-babel-helpers.js diff --git a/package.json b/package.json index f1256821c6f..fd86e790407 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,7 @@ "test:browserstack": "node bin/run-browserstack-tests.js" }, "dependencies": { + "@babel/helper-module-imports": "^7.0.0", "@babel/plugin-transform-block-scoping": "^7.4.4", "@babel/plugin-transform-object-assign": "^7.2.0", "babel-plugin-debug-macros": "^0.3.2", @@ -70,7 +71,6 @@ "silent-error": "^1.1.1" }, "devDependencies": { - "@babel/helper-module-imports": "^7.0.0", "@babel/preset-env": "^7.5.5", "@glimmer/compiler": "0.38.5-alpha.2", "@glimmer/env": "^0.1.7", From 4bf158fe32ba3c99c0e3bf14225b24e6573b9ad7 Mon Sep 17 00:00:00 2001 From: Chris Garrett Date: Tue, 20 Aug 2019 17:22:08 -0700 Subject: [PATCH 2/2] ensure async helpers are inlined in dev --- lib/index.js | 6 ++++- lib/transforms/inject-babel-helpers.js | 37 ++++++++++++++++---------- 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/lib/index.js b/lib/index.js index dc45f8b5b1a..72d0203cc54 100644 --- a/lib/index.js +++ b/lib/index.js @@ -72,6 +72,10 @@ module.exports = { let appOptions = this.app && this.app.options; let babelOptions = (parentOptions || appOptions || {}).babel; + // We want to enable async/generator helpers if we are developing locally, + // but not for any other project. + let isEmberSource = this.project.name() === 'ember-source'; + let options = { 'ember-cli-babel': { disableDebugTooling: true, @@ -80,7 +84,7 @@ module.exports = { babel: Object.assign({}, babelOptions, { loose: true, plugins: [ - injectBabelHelpers, + injectBabelHelpers(isEmberSource), buildDebugMacroPlugin(!isProduction), [ require.resolve('@babel/plugin-transform-block-scoping'), diff --git a/lib/transforms/inject-babel-helpers.js b/lib/transforms/inject-babel-helpers.js index 7e7e212164e..18cc33ed212 100644 --- a/lib/transforms/inject-babel-helpers.js +++ b/lib/transforms/inject-babel-helpers.js @@ -2,21 +2,30 @@ const { addNamed } = require('@babel/helper-module-imports'); -function injectBabelHelpers() { - return { - pre(file) { - file.set('helperGenerator', function(name) { - if (name === 'extends') { - return addNamed(file.path, 'assign', '@ember/polyfills'); - } - return addNamed(file.path, name, 'ember-babel'); - }); - }, +function injectBabelHelpers(isEmberSource = false) { + function injectBabelHelpersPlugin() { + return { + pre(file) { + file.set('helperGenerator', function(name) { + if (name === 'extends') { + return addNamed(file.path, 'assign', '@ember/polyfills'); + } else if (isEmberSource && name === 'asyncToGenerator') { + // Returning a falsy value will cause the helper to be inlined, + // which is fine for local tests + return false; + } + + return addNamed(file.path, name, 'ember-babel'); + }); + }, + }; + } + + injectBabelHelpersPlugin.baseDir = function() { + return 'babel-core'; }; -} -injectBabelHelpers.baseDir = function() { - return 'babel-core'; -}; + return injectBabelHelpersPlugin; +} module.exports = injectBabelHelpers;