Skip to content

Commit

Permalink
fix(es/minifier): Pass keep_* in config to compress and mangle (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
cyjake committed Mar 21, 2023
1 parent 3315419 commit 6a1201c
Show file tree
Hide file tree
Showing 3 changed files with 109 additions and 2 deletions.
68 changes: 68 additions & 0 deletions crates/swc/src/config/mod.rs
Expand Up @@ -415,6 +415,74 @@ impl Options {
});
}

if js_minify.is_some() && js_minify.as_ref().unwrap().keep_fnames {
js_minify = js_minify.map(|c| {
let compress = c
.compress
.unwrap_as_option(|default| match default {
Some(true) => Some(Default::default()),
_ => None,
})
.map(|mut c| {
c.keep_fnames = true;
c
})
.map(BoolOrDataConfig::from_obj)
.unwrap_or_else(|| BoolOrDataConfig::from_bool(false));
let mangle = c
.mangle
.unwrap_as_option(|default| match default {
Some(true) => Some(Default::default()),
_ => None,
})
.map(|mut c| {
c.keep_fn_names = true;
c
})
.map(BoolOrDataConfig::from_obj)
.unwrap_or_else(|| BoolOrDataConfig::from_bool(false));
JsMinifyOptions {
compress,
mangle,
..c
}
});
}

if js_minify.is_some() && js_minify.as_ref().unwrap().keep_classnames {
js_minify = js_minify.map(|c| {
let compress = c
.compress
.unwrap_as_option(|default| match default {
Some(true) => Some(Default::default()),
_ => None,
})
.map(|mut c| {
c.keep_classnames = true;
c
})
.map(BoolOrDataConfig::from_obj)
.unwrap_or_else(|| BoolOrDataConfig::from_bool(false));
let mangle = c
.mangle
.unwrap_as_option(|default| match default {
Some(true) => Some(Default::default()),
_ => None,
})
.map(|mut c| {
c.keep_class_names = true;
c
})
.map(BoolOrDataConfig::from_obj)
.unwrap_or_else(|| BoolOrDataConfig::from_bool(false));
JsMinifyOptions {
compress,
mangle,
..c
}
});
}

let regenerator = transform.regenerator.clone();

let preserve_comments = if preserve_all_comments {
Expand Down
9 changes: 9 additions & 0 deletions crates/swc/src/lib.rs
Expand Up @@ -1028,6 +1028,15 @@ impl Compiler {
}
}

if opts.keep_fnames {
if let Some(opts) = &mut min_opts.compress {
opts.keep_fnames = true;
}
if let Some(opts) = &mut min_opts.mangle {
opts.keep_fn_names = true;
}
}

let comments = SingleThreadedComments::default();

let module = self
Expand Down
34 changes: 32 additions & 2 deletions node-swc/__tests__/minify/issue_6996_test.mjs
@@ -1,7 +1,7 @@
import swc from "../../..";

it("should not throw when keep_fnames is on", async () => {
async function minify() {
async function transform() {
const { code } = await swc.transform('function Foo() {}', {
jsc: {
minify: {
Expand All @@ -11,5 +11,35 @@ it("should not throw when keep_fnames is on", async () => {
});
return code;
}
await expect(minify()).resolves.toEqual('function Foo() {}\n');
// should not reject with unknown field `keep_fnames`
await expect(transform()).resolves.toEqual('function Foo() {}\n');
});

it("should pass on keep_fnames to minify.{mangle,compress}", async () => {
const { code } = await swc.transform('export default function Foo() {}', {
jsc: {
minify: {
compress: {},
mangle: {},
keep_fnames: true,
},
},
minify: true,
});
expect(code).toEqual('export default function Foo(){}');
});

it("should pass on keep_classnames to minify.{mangle,compress}", async () => {
const { code } = await swc.transform('export default class Foo {}', {
jsc: {
minify: {
compress: {},
mangle: {},
keep_classnames: true,
},
target: 'esnext',
},
minify: true,
});
expect(code).toEqual('export default class Foo{}');
});

1 comment on commit 6a1201c

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark

Benchmark suite Current: 6a1201c Previous: df09d2f Ratio
es/full/bugs-1 298931 ns/iter (± 22653) 319396 ns/iter (± 10060) 0.94
es/full/minify/libraries/antd 1517154220 ns/iter (± 32431279) 1592776475 ns/iter (± 22602425) 0.95
es/full/minify/libraries/d3 287226493 ns/iter (± 9431816) 296516679 ns/iter (± 4636608) 0.97
es/full/minify/libraries/echarts 1220130079 ns/iter (± 16820161) 1230243899 ns/iter (± 23499962) 0.99
es/full/minify/libraries/jquery 89425539 ns/iter (± 1094645) 90698995 ns/iter (± 1839172) 0.99
es/full/minify/libraries/lodash 106109853 ns/iter (± 1230343) 106334666 ns/iter (± 2060161) 1.00
es/full/minify/libraries/moment 51739370 ns/iter (± 488117) 53870388 ns/iter (± 1465590) 0.96
es/full/minify/libraries/react 18845663 ns/iter (± 114066) 19199535 ns/iter (± 231004) 0.98
es/full/minify/libraries/terser 243617099 ns/iter (± 4428615) 245698545 ns/iter (± 3439455) 0.99
es/full/minify/libraries/three 428453756 ns/iter (± 9081886) 429433326 ns/iter (± 14241033) 1.00
es/full/minify/libraries/typescript 2887403478 ns/iter (± 29298304) 3049298367 ns/iter (± 19744414) 0.95
es/full/minify/libraries/victory 637299773 ns/iter (± 11137201) 659995108 ns/iter (± 12431567) 0.97
es/full/minify/libraries/vue 126381378 ns/iter (± 1679864) 129657193 ns/iter (± 1943476) 0.97
es/full/codegen/es3 26231 ns/iter (± 153) 26620 ns/iter (± 68) 0.99
es/full/codegen/es5 26640 ns/iter (± 48) 26780 ns/iter (± 40) 0.99
es/full/codegen/es2015 26512 ns/iter (± 50) 26831 ns/iter (± 71) 0.99
es/full/codegen/es2016 26459 ns/iter (± 98) 26812 ns/iter (± 51) 0.99
es/full/codegen/es2017 26467 ns/iter (± 143) 26865 ns/iter (± 139) 0.99
es/full/codegen/es2018 26467 ns/iter (± 87) 26793 ns/iter (± 42) 0.99
es/full/codegen/es2019 26546 ns/iter (± 57) 26861 ns/iter (± 55) 0.99
es/full/codegen/es2020 26351 ns/iter (± 86) 26803 ns/iter (± 42) 0.98
es/full/all/es3 182018634 ns/iter (± 3285062) 184901042 ns/iter (± 4221823) 0.98
es/full/all/es5 172445027 ns/iter (± 4429995) 175276948 ns/iter (± 2043984) 0.98
es/full/all/es2015 137703540 ns/iter (± 3886715) 139341326 ns/iter (± 2592026) 0.99
es/full/all/es2016 135895415 ns/iter (± 1228242) 135134056 ns/iter (± 2199212) 1.01
es/full/all/es2017 133514833 ns/iter (± 2035287) 134883310 ns/iter (± 1492464) 0.99
es/full/all/es2018 129090471 ns/iter (± 1318567) 129662613 ns/iter (± 4017272) 1.00
es/full/all/es2019 127311197 ns/iter (± 1558873) 127967465 ns/iter (± 1700295) 0.99
es/full/all/es2020 119280253 ns/iter (± 1121756) 120712735 ns/iter (± 2148233) 0.99
es/full/parser 533714 ns/iter (± 7534) 541013 ns/iter (± 7953) 0.99
es/full/base/fixer 22336 ns/iter (± 72) 22308 ns/iter (± 48) 1.00
es/full/base/resolver_and_hygiene 83553 ns/iter (± 334) 82195 ns/iter (± 65) 1.02
serialization of ast node 123 ns/iter (± 0) 124 ns/iter (± 0) 0.99
serialization of serde 126 ns/iter (± 0) 126 ns/iter (± 0) 1
css/minify/libraries/bootstrap 28313847 ns/iter (± 163895) 28448216 ns/iter (± 113481) 1.00
css/visitor/compare/clone 2076964 ns/iter (± 29070) 2080982 ns/iter (± 14513) 1.00
css/visitor/compare/visit_mut_span 2263091 ns/iter (± 7261) 2268450 ns/iter (± 5209) 1.00
css/visitor/compare/visit_mut_span_panic 2309475 ns/iter (± 5759) 2325666 ns/iter (± 10961) 0.99
css/visitor/compare/fold_span 3061699 ns/iter (± 13150) 3076964 ns/iter (± 17655) 1.00
css/visitor/compare/fold_span_panic 3211018 ns/iter (± 20439) 3206644 ns/iter (± 17966) 1.00
css/lexer/bootstrap_5_1_3 5120346 ns/iter (± 10003) 5112085 ns/iter (± 17439) 1.00
css/lexer/foundation_6_7_4 4311393 ns/iter (± 2068) 4304774 ns/iter (± 27869) 1.00
css/lexer/tailwind_3_1_1 818412 ns/iter (± 446) 817981 ns/iter (± 291) 1.00
css/parser/bootstrap_5_1_3 22440173 ns/iter (± 144730) 22041932 ns/iter (± 88499) 1.02
css/parser/foundation_6_7_4 17861096 ns/iter (± 57443) 17615931 ns/iter (± 29695) 1.01
css/parser/tailwind_3_1_1 3354746 ns/iter (± 12139) 3390251 ns/iter (± 2849) 0.99
es/codegen/colors 328739 ns/iter (± 183929) 328421 ns/iter (± 183823) 1.00
es/codegen/large 1320884 ns/iter (± 664418) 1178693 ns/iter (± 599923) 1.12
es/codegen/with-parser/colors 47920 ns/iter (± 197) 48055 ns/iter (± 397) 1.00
es/codegen/with-parser/large 522568 ns/iter (± 1433) 526267 ns/iter (± 1089) 0.99
es/minify/libraries/antd 1329940370 ns/iter (± 16289170) 1415147944 ns/iter (± 30681307) 0.94
es/minify/libraries/d3 246629749 ns/iter (± 3628788) 256764005 ns/iter (± 5689038) 0.96
es/minify/libraries/echarts 1031497621 ns/iter (± 12695457) 1032814837 ns/iter (± 19800835) 1.00
es/minify/libraries/jquery 77930345 ns/iter (± 847584) 78570946 ns/iter (± 1140719) 0.99
es/minify/libraries/lodash 93069327 ns/iter (± 524161) 95205599 ns/iter (± 1548471) 0.98
es/minify/libraries/moment 44912149 ns/iter (± 185517) 46194047 ns/iter (± 1550389) 0.97
es/minify/libraries/react 16868154 ns/iter (± 104863) 17199361 ns/iter (± 308644) 0.98
es/minify/libraries/terser 204095032 ns/iter (± 2926389) 207049579 ns/iter (± 3393463) 0.99
es/minify/libraries/three 345676617 ns/iter (± 8415774) 356480454 ns/iter (± 7416499) 0.97
es/minify/libraries/typescript 2450218653 ns/iter (± 17966613) 2579816418 ns/iter (± 23846794) 0.95
es/minify/libraries/victory 535179017 ns/iter (± 5850614) 559799962 ns/iter (± 22863968) 0.96
es/minify/libraries/vue 113886806 ns/iter (± 1113660) 114811511 ns/iter (± 3040566) 0.99
es/visitor/compare/clone 2309626 ns/iter (± 12345) 2314766 ns/iter (± 9580) 1.00
es/visitor/compare/visit_mut_span 2660062 ns/iter (± 7175) 2673673 ns/iter (± 4438) 0.99
es/visitor/compare/visit_mut_span_panic 2690484 ns/iter (± 5797) 2703952 ns/iter (± 4945) 1.00
es/visitor/compare/fold_span 3728456 ns/iter (± 24333) 3768369 ns/iter (± 3831) 0.99
es/visitor/compare/fold_span_panic 3905819 ns/iter (± 51059) 3948651 ns/iter (± 5306) 0.99
es/lexer/colors 15225 ns/iter (± 70) 15462 ns/iter (± 92) 0.98
es/lexer/angular 7389782 ns/iter (± 16280) 7425642 ns/iter (± 4267) 1.00
es/lexer/backbone 983289 ns/iter (± 4016) 988848 ns/iter (± 335) 0.99
es/lexer/jquery 5519698 ns/iter (± 13890) 5573328 ns/iter (± 4624) 0.99
es/lexer/jquery mobile 8504000 ns/iter (± 37139) 8556756 ns/iter (± 3389) 0.99
es/lexer/mootools 4413633 ns/iter (± 21100) 4420926 ns/iter (± 2746) 1.00
es/lexer/underscore 827381 ns/iter (± 3053) 831550 ns/iter (± 204) 0.99
es/lexer/three 26042799 ns/iter (± 62570) 26232093 ns/iter (± 19901) 0.99
es/lexer/yui 4641493 ns/iter (± 15101) 4669679 ns/iter (± 1637) 0.99
es/parser/colors 29218 ns/iter (± 192) 29662 ns/iter (± 116) 0.99
es/parser/angular 15284782 ns/iter (± 162368) 15384246 ns/iter (± 114616) 0.99
es/parser/backbone 2231010 ns/iter (± 33872) 2235444 ns/iter (± 13095) 1.00
es/parser/jquery 12076069 ns/iter (± 64528) 12174108 ns/iter (± 88296) 0.99
es/parser/jquery mobile 18640540 ns/iter (± 78015) 18989133 ns/iter (± 189279) 0.98
es/parser/mootools 9188871 ns/iter (± 44747) 9275336 ns/iter (± 299442) 0.99
es/parser/underscore 1877833 ns/iter (± 5244) 1892031 ns/iter (± 11579) 0.99
es/parser/three 54120566 ns/iter (± 714380) 53900922 ns/iter (± 1452238) 1.00
es/parser/yui 9168123 ns/iter (± 65238) 9260180 ns/iter (± 63216) 0.99
es/preset-env/usage/builtin_type 136688 ns/iter (± 31764) 139387 ns/iter (± 32960) 0.98
es/preset-env/usage/property 21100 ns/iter (± 101) 21182 ns/iter (± 110) 1.00
es/resolver/typescript 112764588 ns/iter (± 1526234) 123076751 ns/iter (± 3342139) 0.92
es/fixer/typescript 77425625 ns/iter (± 775585) 86041578 ns/iter (± 1018269) 0.90
es/hygiene/typescript 164832518 ns/iter (± 1082344) 183534235 ns/iter (± 4542558) 0.90
es/resolver_with_hygiene/typescript 305222959 ns/iter (± 2699123) 331161660 ns/iter (± 2608594) 0.92
es/visitor/base-perf/module_clone 79461 ns/iter (± 1171) 78858 ns/iter (± 824) 1.01
es/visitor/base-perf/fold_empty 89091 ns/iter (± 848) 88916 ns/iter (± 692) 1.00
es/visitor/base-perf/fold_noop_impl_all 89069 ns/iter (± 1422) 89959 ns/iter (± 868) 0.99
es/visitor/base-perf/fold_noop_impl_vec 89324 ns/iter (± 1617) 91622 ns/iter (± 797) 0.97
es/visitor/base-perf/boxing_boxed_clone 56 ns/iter (± 0) 56 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed_clone 53 ns/iter (± 0) 54 ns/iter (± 0) 0.98
es/visitor/base-perf/boxing_boxed 101 ns/iter (± 0) 102 ns/iter (± 0) 0.99
es/visitor/base-perf/boxing_unboxed 99 ns/iter (± 0) 98 ns/iter (± 0) 1.01
es/visitor/base-perf/visit_contains_this 3486 ns/iter (± 58) 3467 ns/iter (± 54) 1.01
es/base/parallel/resolver/typescript 6129934279 ns/iter (± 599473360) 6815801112 ns/iter (± 359212662) 0.90
es/base/parallel/hygiene/typescript 1960199061 ns/iter (± 29303854) 2188195566 ns/iter (± 18953061) 0.90
misc/visitors/time-complexity/time 5 98 ns/iter (± 0) 98 ns/iter (± 0) 1
misc/visitors/time-complexity/time 10 361 ns/iter (± 1) 321 ns/iter (± 0) 1.12
misc/visitors/time-complexity/time 15 708 ns/iter (± 3) 670 ns/iter (± 4) 1.06
misc/visitors/time-complexity/time 20 1297 ns/iter (± 13) 1256 ns/iter (± 0) 1.03
misc/visitors/time-complexity/time 40 6741 ns/iter (± 22) 6774 ns/iter (± 33) 1.00
misc/visitors/time-complexity/time 60 17328 ns/iter (± 56) 17298 ns/iter (± 27) 1.00
es/full-target/es2016 247313 ns/iter (± 931) 249974 ns/iter (± 434) 0.99
es/full-target/es2017 241788 ns/iter (± 446) 242265 ns/iter (± 417) 1.00
es/full-target/es2018 229820 ns/iter (± 800) 231817 ns/iter (± 499) 0.99
es2020_nullish_coalescing 91259 ns/iter (± 431) 91824 ns/iter (± 418) 0.99
es2020_optional_chaining 124366 ns/iter (± 803) 124727 ns/iter (± 514) 1.00
es2022_class_properties 146332 ns/iter (± 518) 147529 ns/iter (± 280) 0.99
es2018_object_rest_spread 94483 ns/iter (± 341) 95475 ns/iter (± 220) 0.99
es2019_optional_catch_binding 83870 ns/iter (± 294) 84896 ns/iter (± 487) 0.99
es2017_async_to_generator 84654 ns/iter (± 293) 84952 ns/iter (± 204) 1.00
es2016_exponentiation 88600 ns/iter (± 295) 89375 ns/iter (± 208) 0.99
es2015_arrow 92935 ns/iter (± 240) 93654 ns/iter (± 239) 0.99
es2015_block_scoped_fn 91218 ns/iter (± 292) 91461 ns/iter (± 371) 1.00
es2015_block_scoping 169053 ns/iter (± 345) 169570 ns/iter (± 326) 1.00

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.