Daniel Kezerashvili 40e43f5a14
fix: Duplicate function call in variable destructuring (#13711)
* Add test case demonstrating invalid behavior

* Add conditional check for child properties so RHS is not duplicated

* Add recursive check to find any nested non single-property case

* Add case for array destructuring

* Add test case for a nested rest element

* More safely recurse through array destructuring

* Traverse assignment and nested rest operations

* Refactor to be more clear which case statement we are executing against

* Update missed snapshots

* Update packages/babel-plugin-proposal-object-rest-spread/src/index.js

Co-authored-by: Huáng Jùnliàng <jlhwung@gmail.com>

* Filter null array elements, add early return, remove optional chaining

* Use stronger type assertions

* Update fall through to be false; add early return to RestElement case

* Move hasMoreThanOneBinding to its own file with distinct tests

* Rename testing helper to more appropriately match business logic

* Yarn Dedup & rename hasMoreThanOneBinding to shouldStoreRHSInTemporaryVariable

Co-authored-by: Huáng Jùnliàng <jlhwung@gmail.com>
2021-09-07 17:27:52 -04:00

177 lines
3.0 KiB
JavaScript

const _z = z(),
{} = _z,
y15 = babelHelpers.extends({}, _z.x15);
let {
x: {
a: xa,
[d]: f
}
} = complex,
asdf = babelHelpers.objectWithoutProperties(complex.x, ["a", d].map(babelHelpers.toPropertyKey)),
d = babelHelpers.extends({}, complex.y),
g = babelHelpers.objectWithoutProperties(complex, ["x"]);
let _z2 = z(),
{} = _z2,
y4 = babelHelpers.extends({}, _z2.x4);
let _z3 = z(),
{
x5: {
w5
}
} = _z3,
y5 = babelHelpers.objectWithoutProperties(_z3.x5, ["w5"]);
let _z4 = z(),
{
x6: {
w6: {
a6
}
}
} = _z4,
y6 = babelHelpers.objectWithoutProperties(_z4.x6.w6, ["a6"]);
let _z5 = z(),
{
x7: {
e7,
r7
},
q7: {
w7: {
a7
}
}
} = _z5,
y7 = babelHelpers.objectWithoutProperties(_z5.q7.w7, ["a7"]);
let _z6 = z(),
{
x8
} = _z6,
y8 = babelHelpers.objectWithoutProperties(_z6, ["x8"]);
let _z7 = z(),
{
x9: {
w9: {
a9
}
},
x10: {
a10
}
} = _z7,
y9 = babelHelpers.objectWithoutProperties(_z7.x9.w9, ["a9"]),
y10 = babelHelpers.objectWithoutProperties(_z7.x10, ["a10"]);
let _z8 = z(),
{
x11: [{
w11
}]
} = _z8,
z11 = babelHelpers.objectWithoutProperties(_z8.x11, ["w11"]);
let _z9 = z(),
{
x12: [{
a12,
b12
}, {
c12
}]
} = _z9,
d12 = babelHelpers.objectWithoutProperties(_z9.x12, ["c12"]);
let _z10 = z(),
{
x13: [, {
c13
}]
} = _z10,
d13 = babelHelpers.objectWithoutProperties(_z10.x13, ["c13"]);
const _z11 = z(),
{
x14: [...{
q14
}]
} = _z11,
y14 = babelHelpers.objectWithoutProperties(_z11.x14, ["q14"]);
const _z12 = z(),
{} = _z12,
y16 = babelHelpers.extends({}, _z12.x15);
const {
x16: []
} = z();
const [...[...y17]] = z();
const [..._ref] = z();
const y18 = babelHelpers.extends({}, _ref);
const [..._ref2] = z();
const {
a19
} = _ref2,
y19 = babelHelpers.objectWithoutProperties(_ref2, ["a19"]);
const _z13 = z(),
{} = _z13,
y20 = babelHelpers.extends({}, _z13.x20);
const _z14 = z(),
{
x22: {
q22
} = {}
} = _z14,
y22 = babelHelpers.objectWithoutProperties(_z14.x22, ["q22"]);
const [[...y23] = []] = z();
const [_ref3 = []] = z();
const y24 = babelHelpers.extends({}, _ref3);
const {
x25: [...y25] = []
} = z();
const {
x26: [q26, ...y26] = []
} = z();
const {} = {};
const [,, x27] = z();
const _z15 = z(),
{} = _z15,
y28 = babelHelpers.extends({}, _z15.x28);
const _z16 = z(),
{
x29: [,, {
q29
}]
} = _z16,
y29 = babelHelpers.objectWithoutProperties(_z16.x29, ["q29"]);
const [,, _ref4] = z();
const {
y30
} = _ref4,
x30 = babelHelpers.objectWithoutProperties(_ref4, ["y30"]);
const [,, _ref5] = z();
const x31 = babelHelpers.extends({}, _ref5);
const _z17 = z(),
{
x32: {}
} = _z17,
y32 = babelHelpers.extends({}, _z17.w32);
const [,, {}, _ref6] = z();
const q32 = babelHelpers.extends({}, _ref6);
const _z18 = z(),
y33 = babelHelpers.extends({}, _z18);