emberjs / emberjs/ember-cli-babel
Optional Chaining in delete statement removes delete statement
- Dominant language
- JavaScript
- Stars
- 152
- Forks
- 115
- Avg merge
- 23h 22m
- Merged PRs (30d)
- 4
Description
We discovered a discrepancy between transpiled and untranspiled Javascript which was introduced when upgrading `ember-cli-babel` from `7.26.4` to `7.26.11`. Nested `if` statements get transpiled incorrectly (removing the nested `if`):
(source)
```javascript
let isBlogPost = filter.key.includes('post');
let strippedKey = filter.key.replace(FILTER_KEY_REGEX, '');
if (filterQueryParams?.post) {
if (isBlogPost) {
delete filterQueryParams['post']['taxonomy']?.['taxonomy-type'][strippedKey];
if (filterOption?.taxonomyType) {
delete filterQueryParams['post']['taxonomy']?.['taxonomy-type'][filterOption.taxonomyType];
}
} else {
delete filterQueryParams['post'][strippedKey];
}
}
```
(transpiled)
```javascript
let {filter: t, filterQueryParams: i, filterOption: r, selectedValues: n, params: s} = e
, a = t.key.includes("post")
, o = t.key.replace(A, "")
i?.post && (a ? (i.post.taxonomy?.["taxonomy-type"][o],
r?.taxonomyType && i.post.taxonomy?.["taxonomy-type"][r.taxonomyType]) : delete i.post[o])
```
Our interim fix involved refactoring the duplicated, target key to `delete` into a new variable, `taxonomyType`, as follows:
```javascript
const FILTER_KEY_REGEX = /^filter_/;
let isBlogPost = filter.key.includes('post');
let strippedKey = filter.key.replace(FILTER_KEY_REGEX, '');
if (filterQueryParams?.post) {
let taxonomyType = filterQueryParams.post.taxonomy?.['taxonomy-type'];
if (isBlogPost) {
delete taxonomyType[strippedKey];
if (filterOption?.taxonomyType) {
delete taxonomyType[filterOption.taxonomyType];
}
} else {
delete filterQueryParams['post'][strippedKey];
}
}
```
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.