From a1c9968b4c41ebbc1eb4f352dfc0a0bf776e702b Mon Sep 17 00:00:00 2001 From: Alexander Marks Date: Thu, 12 Apr 2018 21:57:28 -0700 Subject: [PATCH 1/4] Expand babel helpers. --- packages/build/gulpfile.js | 115 ++++++++++++++++++++++++++++--------- 1 file changed, 87 insertions(+), 28 deletions(-) diff --git a/packages/build/gulpfile.js b/packages/build/gulpfile.js index 71ecbc819..322f4af4e 100644 --- a/packages/build/gulpfile.js +++ b/packages/build/gulpfile.js @@ -101,47 +101,106 @@ gulp.task('depcheck', function() { * There doesn't seem to be documentation on what helpers are available, or * which helpers are required for which transforms. The * source is here: - * https://github.com/babel/babel/blob/6.x/packages/babel-helpers/src/helpers.js + * https://github.com/babel/babel/tree/master/packages/babel-helpers * - * This list is an educated guess at the helpers needed for our transform set - * of ES2015 - modules. When we switch to loose mode we should update the list. + * You can usually tell what the helpers are used for by searching the babel + * source to find out which plugin packages make an `addHelper` call for it. * * All helpers are listed here, with some commented out, so it's clear what * we've excluded. */ const babelHelperWhitelist = [ - 'typeof', // Symbol support, for IE11 - // 'jsx', // we don't support JSX - // 'asyncIterator', // async-iterators are not in ES2015 - // 'asyncGenerator', // async-iterators are not in ES2015 - // 'asyncGeneratorDelegate', // async-iterators are not in ES2015 - // 'asyncToGenerator', // async functions are not in ES2015 + + // __proto__ assignment + 'defaults', + 'extends', + + // es2015 classes + 'assertThisInitialized', 'classCallCheck', + 'construct', 'createClass', + 'get', + 'getPrototypeOf', + 'inherits', + //'inheritsLoose', + 'possibleConstructorReturn', + 'set', + 'setPrototypeOf', + 'superPropBase', + 'wrapNativeSuper', + + // es2015 array-spread + 'slicedToArray', + //'slicedToArrayLoose', + 'toArray', + 'toConsumableArray', + 'arrayWithoutHoles', + 'arrayWithHoles', + 'iterableToArray', + 'iterableToArrayLimit', + //'iterableToArrayLimitLoose', + 'nonIterableSpread', + 'nonIterableRest', + + // es2015 instanceof + 'instanceof', + + // es2015 arrow-functions + 'newArrowCheck', + + // es2015 typeof-symbol + 'typeof', + + // es2015 computed-properties 'defineEnumerableProperties', - 'defaults', // used to make `obj.__proto__ = bar` work 'defineProperty', - 'extends', // used when setting __proto__ - 'get', // needed for class compilation - 'inherits', // used for es6 class inheritance - 'instanceof', - // 'interopRequireDefault', // for modules support - // 'interopRequireWildcard', // for modules support - 'newArrowCheck', // confirms that `this` is correct inside arrow function - // body + + // es2015 block-scoping + 'readOnlyError', + 'temporalRef', + 'temporalUndefined', + + // es2015 destructuring 'objectDestructuringEmpty', 'objectWithoutProperties', - 'possibleConstructorReturn', // can we exclude with loose? - // 'selfGlobal', // not needed. `global` is not ES2015 - 'set', // difficult to tell if needed - 'slicedToArray', - // 'slicedToArrayLoose', + + // es2015 template-literals 'taggedTemplateLiteral', - // 'taggedTemplateLiteralLoose', - 'temporalRef', // not needed in loose? - 'temporalUndefined', - 'toArray', - 'toConsumableArray', + //'taggedTemplateLiteralLoose', + + // es2017 async-to-generator + 'asyncToGenerator', + + // es2018 proposal-async-generator-functions + 'AsyncGenerator', + 'AwaitValue', + 'asyncGeneratorDelegate', + 'asyncIterator', + 'awaitAsyncGenerator', + 'wrapAsyncGenerator', + + // es2018 proposal-object-rest-spread + 'objectSpread', + 'toPropertyKey', + + // modules + 'interopRequireDefault', + 'interopRequireWildcard', + + // proposal-function-sent + //'skipFirstGeneratorNext', + + // proposal-class-properties + //'classNameTDZError', + + // proposal-decorators + //'applyDecoratedDescriptor', + //'initializerDefineProperty', + //'initializerWarningHelper', + + // react-inline-elements + //'jsx', ]; gulp.task('gen-babel-helpers', () => { From aca008528896422c438822a3c17a282433f7870a Mon Sep 17 00:00:00 2001 From: Alexander Marks Date: Fri, 13 Apr 2018 14:48:33 -0700 Subject: [PATCH 2/4] Load Babel module helpers with require.js. --- packages/build/gulpfile.js | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/packages/build/gulpfile.js b/packages/build/gulpfile.js index 322f4af4e..02d738673 100644 --- a/packages/build/gulpfile.js +++ b/packages/build/gulpfile.js @@ -160,11 +160,11 @@ const babelHelperWhitelist = [ 'readOnlyError', 'temporalRef', 'temporalUndefined', - + // es2015 destructuring 'objectDestructuringEmpty', 'objectWithoutProperties', - + // es2015 template-literals 'taggedTemplateLiteral', //'taggedTemplateLiteralLoose', @@ -179,30 +179,36 @@ const babelHelperWhitelist = [ 'asyncIterator', 'awaitAsyncGenerator', 'wrapAsyncGenerator', - + // es2018 proposal-object-rest-spread 'objectSpread', 'toPropertyKey', - // modules - 'interopRequireDefault', - 'interopRequireWildcard', - // proposal-function-sent //'skipFirstGeneratorNext', - + // proposal-class-properties //'classNameTDZError', - + // proposal-decorators //'applyDecoratedDescriptor', //'initializerDefineProperty', //'initializerWarningHelper', - + // react-inline-elements //'jsx', ]; +/** + * Babel helpers needed only for ES module transformation. We bundle these with + * the require.js AMD module loader instead so that the AMD transform does not + * depend on loading all Babel helpers. + */ +const moduleHelpers = [ + 'interopRequireDefault', + 'interopRequireWildcard', +]; + gulp.task('gen-babel-helpers', () => { const helpersCode = babelCore.buildExternalHelpers(babelHelperWhitelist); const minified = @@ -215,8 +221,10 @@ gulp.task('minify-requirejs', () => { const requireJsPath = path.join(path.dirname(require.resolve('requirejs')), '..', 'require.js'); const requireJsCode = fs.readFileSync(requireJsPath, 'utf-8'); + const moduleBabelHelpers = babelCore.buildExternalHelpers(moduleHelpers); + const combined = requireJsCode + moduleBabelHelpers; const minified = - babelCore.transform(requireJsCode, {presets: [babelPresetMinify]}).code; + babelCore.transform(combined, {presets: [babelPresetMinify]}).code; fs.mkdirpSync('./lib/'); fs.writeFileSync('./lib/requirejs.min.js', minified, {encoding: 'utf-8'}); }); From ffc6c16448741002e7184968ce5bcb1e10256361 Mon Sep 17 00:00:00 2001 From: Alexander Marks Date: Fri, 13 Apr 2018 15:01:15 -0700 Subject: [PATCH 3/4] Update polyserve tests. --- .../bower_components/test-modules/golden/test-suite-no-wct.html | 2 +- .../bower_components/test-modules/golden/test-suite-wct.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/polyserve/test/bower_components/test-modules/golden/test-suite-no-wct.html b/packages/polyserve/test/bower_components/test-modules/golden/test-suite-no-wct.html index 3a1597ff8..727b0ffc0 100644 --- a/packages/polyserve/test/bower_components/test-modules/golden/test-suite-no-wct.html +++ b/packages/polyserve/test/bower_components/test-modules/golden/test-suite-no-wct.html @@ -1,5 +1,5 @@ - + diff --git a/packages/polyserve/test/bower_components/test-modules/golden/test-suite-wct.html b/packages/polyserve/test/bower_components/test-modules/golden/test-suite-wct.html index 352340622..c21837a5d 100644 --- a/packages/polyserve/test/bower_components/test-modules/golden/test-suite-wct.html +++ b/packages/polyserve/test/bower_components/test-modules/golden/test-suite-wct.html @@ -22,7 +22,7 @@ - + + diff --git a/packages/cli/src/test/integration/fixtures/build-modules/expected/unbundled-amd/index.html b/packages/cli/src/test/integration/fixtures/build-modules/expected/unbundled-amd/index.html index 6bb5259cd..3a6dfef53 100644 --- a/packages/cli/src/test/integration/fixtures/build-modules/expected/unbundled-amd/index.html +++ b/packages/cli/src/test/integration/fixtures/build-modules/expected/unbundled-amd/index.html @@ -1,5 +1,5 @@ - + diff --git a/packages/cli/src/test/integration/fixtures/build-simple/expected/bundled-compiled/index.html b/packages/cli/src/test/integration/fixtures/build-simple/expected/bundled-compiled/index.html index 7b7521bed..55a20205d 100644 --- a/packages/cli/src/test/integration/fixtures/build-simple/expected/bundled-compiled/index.html +++ b/packages/cli/src/test/integration/fixtures/build-simple/expected/bundled-compiled/index.html @@ -1 +1 @@ -
hello world
\ No newline at end of file +
hello world
\ No newline at end of file diff --git a/packages/cli/src/test/integration/fixtures/build-with-preset/expected/es5-bundled/index.html b/packages/cli/src/test/integration/fixtures/build-with-preset/expected/es5-bundled/index.html index 69e95a312..0513ddbcf 100644 --- a/packages/cli/src/test/integration/fixtures/build-with-preset/expected/es5-bundled/index.html +++ b/packages/cli/src/test/integration/fixtures/build-with-preset/expected/es5-bundled/index.html @@ -1 +1 @@ -
hello world
\ No newline at end of file +
hello world
\ No newline at end of file diff --git a/packages/cli/src/test/integration/fixtures/build-with-preset/expected/es5-bundled/service-worker.js b/packages/cli/src/test/integration/fixtures/build-with-preset/expected/es5-bundled/service-worker.js index 728aa75c0..8fa24e205 100644 --- a/packages/cli/src/test/integration/fixtures/build-with-preset/expected/es5-bundled/service-worker.js +++ b/packages/cli/src/test/integration/fixtures/build-with-preset/expected/es5-bundled/service-worker.js @@ -37,7 +37,7 @@ /* eslint-disable indent, no-unused-vars, no-multiple-empty-lines, max-nested-callbacks, space-before-function-paren, quotes, comma-spacing */ 'use strict'; -var precacheConfig = [["index.html","8eaa46faa928871744a44c5e75bdc01f"]]; +var precacheConfig = [["index.html","feceae29d73077d4093a74582e4efc8f"]]; var cacheName = 'sw-precache-v3--' + (self.registration ? self.registration.scope : '');