From 9a52019019527be8c179ea7c9025fa2355f16170 Mon Sep 17 00:00:00 2001 From: Nikita Kirsanov Date: Tue, 12 May 2020 22:56:03 +0200 Subject: [PATCH] Use computed memberExpression for literal keys with object rest (#11550) --- .../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..124a53c1e3ec 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), + node.computed || t.isLiteral(node.key), + ); }); 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"]);