emberjs / emberjs/ember-cli-babel

Optional Chaining in delete statement removes delete statement

Open
#440 2 comments 0 reactions 0 assignees View on GitHub
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.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.