From 543a929ba0ac11dc0fb42c23ce62c601c60a5a4f Mon Sep 17 00:00:00 2001 From: Erik Arvidsson Date: Wed, 1 Aug 2018 21:45:47 -0700 Subject: [PATCH] Enable Object Rest Spread by default 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 --- src/assets/JSAsset.js | 2 +- .../object-rest-spread/object-rest-spread.js | 7 +++++++ test/javascript.js | 15 +++++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 test/integration/object-rest-spread/object-rest-spread.js diff --git a/src/assets/JSAsset.js b/src/assets/JSAsset.js index 3e089da0924..fda7e9a005d 100644 --- a/src/assets/JSAsset.js +++ b/src/assets/JSAsset.js @@ -70,7 +70,7 @@ class JSAsset extends Asset { strictMode: false, sourceType: 'module', locations: true, - plugins: ['exportExtensions', 'dynamicImport'] + plugins: ['exportExtensions', 'dynamicImport', 'objectRestSpread'] }; // Check if there is a babel config file. If so, determine which parser plugins to enable diff --git a/test/integration/object-rest-spread/object-rest-spread.js b/test/integration/object-rest-spread/object-rest-spread.js new file mode 100644 index 00000000000..5a47ee9be8f --- /dev/null +++ b/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/test/javascript.js b/test/javascript.js index 5a05db1b17b..e0c3096d68d 100644 --- a/test/javascript.js +++ b/test/javascript.js @@ -28,6 +28,21 @@ 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/es6/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'