From 8b55a581c13b2ecf845e53b28afde8f926d86f05 Mon Sep 17 00:00:00 2001 From: Brian Ng Date: Mon, 1 May 2017 12:56:50 -0500 Subject: [PATCH] Fix incorrect property ordering with obj rest spread on nested --- .../src/index.js | 14 +++++++++++++- .../test/fixtures/object-rest/nested/actual.js | 10 ++++++++++ .../test/fixtures/object-rest/nested/expected.js | 11 +++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 packages/babel-plugin-transform-object-rest-spread/test/fixtures/object-rest/nested/actual.js create mode 100644 packages/babel-plugin-transform-object-rest-spread/test/fixtures/object-rest/nested/expected.js diff --git a/packages/babel-plugin-transform-object-rest-spread/src/index.js b/packages/babel-plugin-transform-object-rest-spread/src/index.js index c5cb95ff1cd0..42a1ec8ce29e 100644 --- a/packages/babel-plugin-transform-object-rest-spread/src/index.js +++ b/packages/babel-plugin-transform-object-rest-spread/src/index.js @@ -117,15 +117,27 @@ export default function ({ types: t }) { } let ref = this.originalPath.node.init; + let refProperty = null; path.findParent((path) => { if (path.isObjectProperty()) { - ref = t.memberExpression(ref, t.identifier(path.node.key.name)); + const id = t.identifier(path.node.key.name); + + if (refProperty) { + ref = t.memberExpression(ref, id); + } else { + refProperty = id; + } + } else if (path.isVariableDeclarator()) { return true; } }); + if (refProperty) { + ref = t.memberExpression(ref, refProperty); + } + const [ argument, callExpression ] = createObjectSpread( file, path.parentPath.node.properties, diff --git a/packages/babel-plugin-transform-object-rest-spread/test/fixtures/object-rest/nested/actual.js b/packages/babel-plugin-transform-object-rest-spread/test/fixtures/object-rest/nested/actual.js new file mode 100644 index 000000000000..a4dfbfaca765 --- /dev/null +++ b/packages/babel-plugin-transform-object-rest-spread/test/fixtures/object-rest/nested/actual.js @@ -0,0 +1,10 @@ +const defunct = { + outer: { + inner: { + three: 'three', + four: 'four' + } + } +} + +const { outer: { inner: { three, ...other } } } = defunct diff --git a/packages/babel-plugin-transform-object-rest-spread/test/fixtures/object-rest/nested/expected.js b/packages/babel-plugin-transform-object-rest-spread/test/fixtures/object-rest/nested/expected.js new file mode 100644 index 000000000000..80b6ebf46762 --- /dev/null +++ b/packages/babel-plugin-transform-object-rest-spread/test/fixtures/object-rest/nested/expected.js @@ -0,0 +1,11 @@ +const defunct = { + outer: { + inner: { + three: 'three', + four: 'four' + } + } +}; + +const { outer: { inner: { three } } } = defunct, + other = babelHelpers.objectWithoutProperties(defunct.outer.inner, ['three']);