Wrong transpilation when optional chaining is used in `assert()`
Opened this issue · 1 comments
simonihmig commented
I have this code:
assert('Need profile data', this.args.window.profile?.data);
When optional chaining is not transpiled, things work fine. The line above is transformed to:
(true && !(this.args.window.profile?.data) && (0, _debug.assert)('Need profile data', this.args.window.profile?.data));
However some automated dependency updates including most Babel stuff changed behavior, in that optional chaining is now transpiled, I believe due to some bug in Chrome, see babel/babel#13145.
But now the transform yields this broken code:
var _this$args$window$pro;
(true && !(_this$args$window$pro.data) && (0, _debug.assert)('Need profile data', (_this$args$window$pro = this.args.window.profile) === null || _this$args$window$pro === void 0 ? void 0 : _this$args$window$pro.data));
Which throws with Cannot read properties of undefined (reading 'data')
as at the time the !(_this$args$window$pro.data)
expression is evaluated _this$args$window$pro
is still undefined!
Techn1x commented
I've hit this as well, and linked an issue where it was brought up in ember-cli-babel