From 155fd5995444d9643746e5296ee064ecbd7e67d8 Mon Sep 17 00:00:00 2001 From: Nikita Kirsanov Date: Tue, 12 May 2020 19:29:51 +0200 Subject: [PATCH 1/2] fix(plugin-proposal-object-rest-spread): use computed memberExpression for literal keys --- .../src/index.js | 6 +++++- .../object-rest/nested-literal-property/input.js | 7 +++++++ .../object-rest/nested-literal-property/output.js | 14 ++++++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 packages/babel-plugin-proposal-object-rest-spread/test/fixtures/object-rest/nested-literal-property/input.js create mode 100644 packages/babel-plugin-proposal-object-rest-spread/test/fixtures/object-rest/nested-literal-property/output.js diff --git a/packages/babel-plugin-proposal-object-rest-spread/src/index.js b/packages/babel-plugin-proposal-object-rest-spread/src/index.js index 784a4b67cbdc..92588102bc66 100644 --- a/packages/babel-plugin-proposal-object-rest-spread/src/index.js +++ b/packages/babel-plugin-proposal-object-rest-spread/src/index.js @@ -346,7 +346,11 @@ export default declare((api, opts) => { ); refPropertyPath.forEach(prop => { const { node } = prop; - ref = t.memberExpression(ref, t.cloneNode(node.key), node.computed); + ref = t.memberExpression( + ref, + t.cloneNode(node.key), + t.isLiteral(node.key) || node.computed, + ); }); const objectPatternPath = path.findParent(path => diff --git a/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/object-rest/nested-literal-property/input.js b/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/object-rest/nested-literal-property/input.js new file mode 100644 index 000000000000..dbfc8a130d78 --- /dev/null +++ b/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/object-rest/nested-literal-property/input.js @@ -0,0 +1,7 @@ +let useState = [{ some: 42 }, () => null]; + +let { + 0: { numeric,...rest1 }, + '2': { str,...rest2 }, + 1: setState, +} = useState; diff --git a/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/object-rest/nested-literal-property/output.js b/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/object-rest/nested-literal-property/output.js new file mode 100644 index 000000000000..dbdd42dbeb44 --- /dev/null +++ b/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/object-rest/nested-literal-property/output.js @@ -0,0 +1,14 @@ +let useState = [{ + some: 42 +}, () => null]; +let { + 0: { + numeric + }, + '2': { + str + }, + 1: setState +} = useState, + rest1 = babelHelpers.objectWithoutProperties(useState[0], ["numeric"]), + rest2 = babelHelpers.objectWithoutProperties(useState['2'], ["str"]); From ba4525eacc92dc1e9bc0e80a98f6788410f971e0 Mon Sep 17 00:00:00 2001 From: Nikita Kirsanov Date: Tue, 12 May 2020 22:04:46 +0200 Subject: [PATCH 2/2] chore: :recycle: first check if property is computed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Huáng Jùnliàng --- packages/babel-plugin-proposal-object-rest-spread/src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/babel-plugin-proposal-object-rest-spread/src/index.js b/packages/babel-plugin-proposal-object-rest-spread/src/index.js index 92588102bc66..124a53c1e3ec 100644 --- a/packages/babel-plugin-proposal-object-rest-spread/src/index.js +++ b/packages/babel-plugin-proposal-object-rest-spread/src/index.js @@ -349,7 +349,7 @@ export default declare((api, opts) => { ref = t.memberExpression( ref, t.cloneNode(node.key), - t.isLiteral(node.key) || node.computed, + node.computed || t.isLiteral(node.key), ); });