add support to specify mangled name (#5815)

This commit is contained in:
Lauri Rooden 2023-11-13 13:17:56 +02:00
parent f0ca9cfbe6
commit 5ab2a21b02
3 changed files with 30 additions and 1 deletions

View File

@ -1029,6 +1029,15 @@ discarded by the compressor as not referenced.
The safest comments where to place copyright information (or other info that
needs to be kept in the output) are comments attached to toplevel nodes.
### Specify preferred mangled name in comment annotations
`/*@mangleTo:X*/` or `/*@mangleTo:X*/` comments allow you to choose the name.
```javascript
(function(one /*#mangleTo:H*/, two /*#mangleTo:i*/) { /*..*/ })(1, 2);
// results (function(H,i){ /*..*/ )(1,2);
```
### The `unsafe` `compress` option
It enables some transformations that *might* break code logic in certain

View File

@ -565,7 +565,13 @@ function next_mangled_name(def, options) {
scopes.push(scope);
} while (scope = scope.parent_scope);
});
var name;
var comment = def.orig[0].start.comments_after[0]?.value;
var preferred_name = comment && /[@#]mangleTo:(.*)/.exec(comment);
var name = preferred_name && preferred_name[1];
if (name && !names.has(name)) {
in_use.set(name, true);
return name;
}
for (var i = 0; i < holes.length; i++) {
name = base54(holes[i]);
if (names.has(name)) continue;

View File

@ -965,6 +965,20 @@ function_name_mangle: {
expect_stdout: "function"
}
function_name_mangle_from_preferred_comment: {
options = {
keep_fargs: false,
}
mangle = {}
input: {
(function(one /*#mangleTo:W*/, two) {
console.log(one, two);
})(1, 2);
}
expect_exact: "(function(W,o){console.log(W,o)})(1,2);"
expect_stdout: "1 2"
}
function_name_mangle_ie8: {
options = {
keep_fargs: false,