Skip to content

Wrong transpilation when optional chaining is used in assert() #89

@simonihmig

Description

@simonihmig

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!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions