New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
keep_classnames doesn't work with var MyClass = class {} when using toplevel: true #1484
Comments
I have discovered an additional bug, that I'm not sure is related to this one. With this config: {
toplevel: true,
keep_classnames: true,
mangle: {
keep_classnames: true,
reserved: ['X', 'Y']
},
} And this input: var X = 'foo',
Y = class {};
export {X}
export default Y The output I get is var X="foo";export{X};export default class{} The name The issue disappears if I change the syntax of the default output: var X = 'foo',
Y = class {};
export {X, Y as default}
// becomes
var X="foo",Y=class{};export{X,Y as default};
// as expected |
This is very inconsistent with The second case is definitely valid as well, and should apply to |
Bug report or Feature request?
Bug Report
Version (complete output of
terser -V
or specific git commit)terser 5.26.0
Complete CLI command or
minify()
options usedOptions:
Input:
terser
output or errorExpected result
We are using terser to minify a library meant to be used by other developers.
The fact that terser mangles the class names in the demonstrated manner makes so that users of our library will see minified classnames when inspecting objects in the dev inspector in chrome, for example. Chrome (and node, and others probably too) use the var name to assign a name to the class.
The demonstrated mangling breaks that. I would expect
keep_classnames
to prevent this, just as it does in the direct class definition (Foo
). These statements (var X = class {}
) are generated by esbuild during bundling, so we don't have much control over that.The text was updated successfully, but these errors were encountered: