From 95f5eb612cbbe687bfe0dffae3236ec156ea68a6 Mon Sep 17 00:00:00 2001 From: Erik Arvidsson Date: Fri, 10 Aug 2018 19:44:57 -0700 Subject: [PATCH] Enable Object Rest Spread by default (#1835) This uses Babel's plugin: https://babeljs.io/docs/en/babel-plugin-transform-object-rest-spread Spec: https://tc39.github.io/ecma262/#sec-object-initializer-runtime-semantics-propertydefinitionevaluation Fixes #1221, #1422 --- packages/core/parcel/package.json | 1 + packages/core/parcel/src/transforms/babel.js | 8 ++++++++ .../object-rest-spread/object-rest-spread.js | 7 +++++++ packages/core/parcel/test/javascript.js | 17 +++++++++++++++++ yarn.lock | 11 +++++++++++ 5 files changed, 44 insertions(+) create mode 100644 packages/core/parcel/test/integration/object-rest-spread/object-rest-spread.js diff --git a/packages/core/parcel/package.json b/packages/core/parcel/package.json index fe02cf5cd76..bbda5fc5be3 100644 --- a/packages/core/parcel/package.json +++ b/packages/core/parcel/package.json @@ -20,6 +20,7 @@ "babel-core": "^6.25.0", "babel-generator": "^6.25.0", "babel-plugin-transform-es2015-modules-commonjs": "^6.26.0", + "babel-plugin-transform-object-rest-spread": "^6.26.0", "babel-plugin-transform-react-jsx": "^6.24.1", "babel-preset-env": "^1.7.0", "babel-template": "^6.26.0", diff --git a/packages/core/parcel/src/transforms/babel.js b/packages/core/parcel/src/transforms/babel.js index 841d6a65ba9..4b14dfe6f27 100644 --- a/packages/core/parcel/src/transforms/babel.js +++ b/packages/core/parcel/src/transforms/babel.js @@ -265,6 +265,14 @@ async function getEnvPlugins(targets, useBuiltIns = false) { {}, {targets, modules: false, useBuiltIns: useBuiltIns ? 'entry' : false} ).plugins; + + // babel-preset-env version 6.x does not cover object-rest-spread so always + // add it. + plugins.push([ + require('babel-plugin-transform-object-rest-spread'), + {useBuiltIns} + ]); + envCache.set(key, plugins); return plugins; } diff --git a/packages/core/parcel/test/integration/object-rest-spread/object-rest-spread.js b/packages/core/parcel/test/integration/object-rest-spread/object-rest-spread.js new file mode 100644 index 00000000000..5a47ee9be8f --- /dev/null +++ b/packages/core/parcel/test/integration/object-rest-spread/object-rest-spread.js @@ -0,0 +1,7 @@ +var x = {a: 'a', b: 'b'}; +var {a: y, ...ys} = x; +var z = {y, ...ys}; + +export default function () { + return {x, y, z, ys}; +} diff --git a/packages/core/parcel/test/javascript.js b/packages/core/parcel/test/javascript.js index 5a05db1b17b..e2a28891da5 100644 --- a/packages/core/parcel/test/javascript.js +++ b/packages/core/parcel/test/javascript.js @@ -28,6 +28,23 @@ describe('javascript', function() { assert.equal(output.default(), 3); }); + it('should produce a basic JS bundle with object rest spread support', async function() { + let b = await bundle( + __dirname + '/integration/object-rest-spread/object-rest-spread.js' + ); + + assert.equal(b.assets.size, 1); + + let output = await run(b); + assert.equal(typeof output, 'object'); + assert.equal(typeof output.default, 'function'); + + let res = output.default(); + assert.equal(res.y, 'a'); + assert.deepEqual(res.z, {y: 'a', b: 'b'}); + assert.deepEqual(res.ys, {b: 'b'}); + }); + it('should bundle node_modules on --target=browser', async function() { let b = await bundle(__dirname + '/integration/node_require/main.js', { target: 'browser' diff --git a/yarn.lock b/yarn.lock index 21ec9283731..fa1b85b3f9a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -543,6 +543,10 @@ babel-plugin-syntax-jsx@^6.8.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" +babel-plugin-syntax-object-rest-spread@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + babel-plugin-syntax-trailing-function-commas@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" @@ -737,6 +741,13 @@ babel-plugin-transform-exponentiation-operator@^6.22.0: babel-plugin-syntax-exponentiation-operator "^6.8.0" babel-runtime "^6.22.0" +babel-plugin-transform-object-rest-spread@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" + dependencies: + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-runtime "^6.26.0" + babel-plugin-transform-react-jsx@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3"