<!-- When reporting a bug or requesting a feature, please do the following: * Describe what esbuild is doing incorrectly and what it should be doing instead. * Provide a way to reproduce the issue. The best way to do this is to demonstrate the issue on the playground (https://esbuild.github.io/try/) and paste the URL here. A link to a minimal code sample with instructions for how to reproduce the issue may also work. Issues without a way to reproduce them may be closed. --> [Playground link](https://esbuild.github.io/try/#dAAwLjI4LjAAAGNvbnN0IGZvbyA9ICgpID0+IChhcmdzKSA9PiBjbGFzcyBBIHt9OwpuZXcgKGZvbygpYGJhcmApKCk7Cgpjb25zdCBiYXogPSAoKSA9PiAoeyBxdXg6IGNsYXNzIEEge30gfSkKbmV3IChiYXooKT8ucXV4KSgpOw) For input code: ```js const foo = () => (args) => class A {}; new (foo()`bar`)(); const baz = () => ({ qux: class A {} }) new (baz()?.qux)(); ``` esbuild produced following output: ```js const foo = () => (args) => class A { }; new foo()`bar`(); const baz = () => ({ qux: class A { } }); new (baz())?.qux(); ``` that drop/misplace the parentheses around callee of `NewExpression`, which change the runtime semantic. ----- This bug was first observed from [SvelteJS' compiler](https://github.com/sveltejs/esrap) and we'd discovered same issue for a bunch of transpiler including [Babel](https://github.com/babel/babel/issues/18045), [oxc](https://github.com/oxc-project/oxc/issues/22961), [SWC](https://github.com/swc-project/swc/issues/11921), esbuild and more.