Skip to content

Commit

Permalink
refactor(es/minifier): Move JS options to swc_ecma_minifier (#8028)
Browse files Browse the repository at this point in the history
**Description:**

This is not a public API, though.
  • Loading branch information
kdy1 committed Sep 29, 2023
1 parent 2153c05 commit 725f7f5
Show file tree
Hide file tree
Showing 3 changed files with 212 additions and 200 deletions.
201 changes: 1 addition & 200 deletions crates/swc/src/config/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ use swc_ecma_loader::{
resolvers::{lru::CachingResolver, node::NodeModulesResolver, tsc::TsConfigResolver},
TargetEnv,
};
pub use swc_ecma_minifier::js::*;
use swc_ecma_minifier::option::{
terser::{TerserCompressorOptions, TerserEcmaVersion, TerserTopLevelOptions},
MangleOptions,
Expand Down Expand Up @@ -1070,206 +1071,6 @@ pub struct Config {
pub schema: Option<String>,
}

/// Second argument of `minify`.
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(deny_unknown_fields, rename_all = "camelCase")]
pub struct JsMinifyOptions {
#[serde(default)]
pub parse: JsMinifyParseOptions,

#[serde(default)]
pub compress: BoolOrDataConfig<TerserCompressorOptions>,

#[serde(default)]
pub mangle: BoolOrDataConfig<MangleOptions>,

#[serde(default, alias = "output")]
pub format: JsMinifyFormatOptions,

#[serde(default)]
pub ecma: TerserEcmaVersion,

#[serde(default, alias = "keep_classnames")]
pub keep_classnames: bool,

#[serde(default, alias = "keep_fnames")]
pub keep_fnames: bool,

#[serde(default)]
pub module: bool,

#[serde(default)]
pub safari10: bool,

#[serde(default = "true_by_default")]
pub toplevel: bool,

#[serde(default)]
pub source_map: BoolOrDataConfig<TerserSourceMapOption>,

#[serde(default)]
pub output_path: Option<String>,

#[serde(default = "true_by_default")]
pub inline_sources_content: bool,

#[serde(default = "true_by_default")]
pub emit_source_map_columns: bool,
}

fn true_by_default() -> bool {
true
}

/// `jsc.minify.sourceMap`
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(deny_unknown_fields, rename_all = "camelCase")]
pub struct TerserSourceMapOption {
#[serde(default)]
pub filename: Option<String>,

#[serde(default)]
pub url: Option<String>,

#[serde(default)]
pub root: Option<String>,

#[serde(default)]
pub content: Option<String>,
}

/// Parser options for `minify()`, which should have the same API as terser.
///
/// `jsc.minify.parse` is ignored.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(deny_unknown_fields, rename_all = "camelCase")]
pub struct JsMinifyParseOptions {
/// Not supported.
#[serde(default, alias = "bare_returns")]
pub bare_returns: bool,

/// Ignored, and always parsed.
#[serde(default = "true_by_default", alias = "html5_comments")]
pub html5_comments: bool,

/// Ignored, and always parsed.
#[serde(default = "true_by_default")]
pub shebang: bool,

/// Not supported.
#[serde(default)]
pub spidermonkey: bool,
}

/// `jsc.minify.format`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(deny_unknown_fields, rename_all = "camelCase")]
pub struct JsMinifyFormatOptions {
/// Not implemented yet.
#[serde(default, alias = "ascii_only")]
pub ascii_only: bool,

/// Not implemented yet.
#[serde(default)]
pub beautify: bool,

/// Not implemented yet.
#[serde(default)]
pub braces: bool,

#[serde(default = "default_comments")]
pub comments: BoolOrDataConfig<JsMinifyCommentOption>,

/// Not implemented yet.
#[serde(default)]
pub ecma: usize,

/// Not implemented yet.
#[serde(default, alias = "indent_level")]
pub indent_level: Option<usize>,

/// Not implemented yet.
#[serde(default, alias = "indent_start")]
pub indent_start: bool,

/// Not implemented yet.
#[serde(default, alias = "inline_script")]
pub inline_script: bool,

/// Not implemented yet.
#[serde(default, alias = "keep_numbers")]
pub keep_numbers: bool,

/// Not implemented yet.
#[serde(default, alias = "keep_quoted_props")]
pub keep_quoted_props: bool,

/// Not implemented yet.
#[serde(default, alias = "max_line_len")]
pub max_line_len: usize,

/// Not implemented yet.
#[serde(default)]
pub preamble: String,

/// Not implemented yet.
#[serde(default, alias = "quote_keys")]
pub quote_keys: bool,

/// Not implemented yet.
#[serde(default, alias = "quote_style")]
pub quote_style: usize,

/// Not implemented yet.
#[serde(default, alias = "preserve_annotations")]
pub preserve_annotations: bool,

/// Not implemented yet.
#[serde(default)]
pub safari10: bool,

/// Not implemented yet.
#[serde(default)]
pub semicolons: bool,

/// Not implemented yet.
#[serde(default)]
pub shebang: bool,

/// Not implemented yet.
#[serde(default)]
pub webkit: bool,

/// Not implemented yet.
#[serde(default, alias = "warp_iife")]
pub wrap_iife: bool,

/// Not implemented yet.
#[serde(default, alias = "wrap_func_args")]
pub wrap_func_args: bool,

#[serde(default)]
pub emit_assert_for_import_attributes: bool,
}

fn default_comments() -> BoolOrDataConfig<JsMinifyCommentOption> {
BoolOrDataConfig::from_obj(JsMinifyCommentOption::PreserveSomeComments)
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum JsMinifyCommentOption {
#[serde(rename = "some")]
PreserveSomeComments,
#[serde(rename = "all")]
PreserveAllComments,
}

impl Default for JsMinifyCommentOption {
fn default() -> Self {
JsMinifyCommentOption::PreserveSomeComments
}
}

impl Config {
/// Adjust config for `file`.
///
Expand Down

1 comment on commit 725f7f5

@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: 725f7f5 Previous: 990ca06 Ratio
es/full/bugs-1 275732 ns/iter (± 5271) 272701 ns/iter (± 3954) 1.01
es/full/minify/libraries/antd 1317335861 ns/iter (± 18339464) 1310024887 ns/iter (± 8530139) 1.01
es/full/minify/libraries/d3 278448673 ns/iter (± 4068117) 277664242 ns/iter (± 7499981) 1.00
es/full/minify/libraries/echarts 1069715861 ns/iter (± 18519258) 1048424393 ns/iter (± 5539176) 1.02
es/full/minify/libraries/jquery 83943412 ns/iter (± 356041) 83856022 ns/iter (± 73184) 1.00
es/full/minify/libraries/lodash 97164732 ns/iter (± 1003130) 97608585 ns/iter (± 272292) 1.00
es/full/minify/libraries/moment 49692797 ns/iter (± 507924) 49666353 ns/iter (± 91177) 1.00
es/full/minify/libraries/react 17927125 ns/iter (± 121391) 18003635 ns/iter (± 86471) 1.00
es/full/minify/libraries/terser 217851544 ns/iter (± 556096) 218993554 ns/iter (± 1732851) 0.99
es/full/minify/libraries/three 384824470 ns/iter (± 4641007) 386424969 ns/iter (± 1309000) 1.00
es/full/minify/libraries/typescript 2619621222 ns/iter (± 14311976) 2640979970 ns/iter (± 9003195) 0.99
es/full/minify/libraries/victory 565626120 ns/iter (± 13492290) 560204218 ns/iter (± 1926784) 1.01
es/full/minify/libraries/vue 119160498 ns/iter (± 887111) 118546813 ns/iter (± 285313) 1.01
es/full/codegen/es3 32902 ns/iter (± 350) 35213 ns/iter (± 281) 0.93
es/full/codegen/es5 33216 ns/iter (± 105) 35409 ns/iter (± 182) 0.94
es/full/codegen/es2015 33148 ns/iter (± 326) 35426 ns/iter (± 115) 0.94
es/full/codegen/es2016 33032 ns/iter (± 342) 35209 ns/iter (± 100) 0.94
es/full/codegen/es2017 32954 ns/iter (± 237) 35197 ns/iter (± 95) 0.94
es/full/codegen/es2018 32607 ns/iter (± 355) 35300 ns/iter (± 62) 0.92
es/full/codegen/es2019 32854 ns/iter (± 245) 35284 ns/iter (± 70) 0.93
es/full/codegen/es2020 32569 ns/iter (± 558) 35304 ns/iter (± 119) 0.92
es/full/all/es3 163851776 ns/iter (± 2172918) 166509852 ns/iter (± 1091118) 0.98
es/full/all/es5 156793280 ns/iter (± 1166950) 157687708 ns/iter (± 2014599) 0.99
es/full/all/es2015 116819362 ns/iter (± 1439385) 118045243 ns/iter (± 894207) 0.99
es/full/all/es2016 114867685 ns/iter (± 1483834) 116724243 ns/iter (± 613111) 0.98
es/full/all/es2017 114815280 ns/iter (± 882306) 116692041 ns/iter (± 652392) 0.98
es/full/all/es2018 112425090 ns/iter (± 1664909) 114056826 ns/iter (± 319474) 0.99
es/full/all/es2019 111800171 ns/iter (± 927539) 112795409 ns/iter (± 700139) 0.99
es/full/all/es2020 107668447 ns/iter (± 879134) 109587809 ns/iter (± 867732) 0.98
es/full/parser 484279 ns/iter (± 7857) 491719 ns/iter (± 5355) 0.98
es/full/base/fixer 18425 ns/iter (± 241) 17804 ns/iter (± 92) 1.03
es/full/base/resolver_and_hygiene 78884 ns/iter (± 922) 80528 ns/iter (± 150) 0.98
serialization of serde 292 ns/iter (± 4) 298 ns/iter (± 0) 0.98
css/minify/libraries/bootstrap 28571554 ns/iter (± 166387) 28654653 ns/iter (± 67265) 1.00
css/visitor/compare/clone 1658669 ns/iter (± 27158) 1625967 ns/iter (± 3054) 1.02
css/visitor/compare/visit_mut_span 1778345 ns/iter (± 28642) 1774074 ns/iter (± 3936) 1.00
css/visitor/compare/visit_mut_span_panic 1819411 ns/iter (± 17472) 1840951 ns/iter (± 4884) 0.99
css/visitor/compare/fold_span 2551628 ns/iter (± 37351) 2578599 ns/iter (± 6096) 0.99
css/visitor/compare/fold_span_panic 2710718 ns/iter (± 23759) 2744024 ns/iter (± 8959) 0.99
css/lexer/bootstrap_5_1_3 4368781 ns/iter (± 36202) 4466830 ns/iter (± 3648) 0.98
css/lexer/foundation_6_7_4 3649328 ns/iter (± 37023) 3718922 ns/iter (± 3019) 0.98
css/lexer/tailwind_3_1_1 699141 ns/iter (± 7796) 709416 ns/iter (± 565) 0.99
css/parser/bootstrap_5_1_3 19507195 ns/iter (± 107247) 19847077 ns/iter (± 29980) 0.98
css/parser/foundation_6_7_4 15369069 ns/iter (± 149483) 15757518 ns/iter (± 15787) 0.98
css/parser/tailwind_3_1_1 2935752 ns/iter (± 20993) 3013407 ns/iter (± 7057) 0.97
es/codegen/colors 732509 ns/iter (± 408260) 737693 ns/iter (± 402648) 0.99
es/codegen/large 3122810 ns/iter (± 1678876) 3155651 ns/iter (± 1682745) 0.99
es/codegen/with-parser/colors 44560 ns/iter (± 705) 46227 ns/iter (± 489) 0.96
es/codegen/with-parser/large 488405 ns/iter (± 5436) 491545 ns/iter (± 1190) 0.99
es/minify/libraries/antd 1130907656 ns/iter (± 10723165) 1138115577 ns/iter (± 13958086) 0.99
es/minify/libraries/d3 237961089 ns/iter (± 1538540) 238220295 ns/iter (± 364094) 1.00
es/minify/libraries/echarts 888009339 ns/iter (± 10472149) 896254983 ns/iter (± 2646848) 0.99
es/minify/libraries/jquery 73137544 ns/iter (± 272435) 72809177 ns/iter (± 135168) 1.00
es/minify/libraries/lodash 86877099 ns/iter (± 326835) 86905028 ns/iter (± 309860) 1.00
es/minify/libraries/moment 43221937 ns/iter (± 183897) 43229088 ns/iter (± 124333) 1.00
es/minify/libraries/react 15771255 ns/iter (± 163715) 15960645 ns/iter (± 65109) 0.99
es/minify/libraries/terser 186526908 ns/iter (± 939445) 185018609 ns/iter (± 440052) 1.01
es/minify/libraries/three 321915971 ns/iter (± 3749302) 318999302 ns/iter (± 827479) 1.01
es/minify/libraries/typescript 2188233498 ns/iter (± 17891730) 2226783082 ns/iter (± 11510849) 0.98
es/minify/libraries/victory 462084458 ns/iter (± 5928545) 474708606 ns/iter (± 1539603) 0.97
es/minify/libraries/vue 105172328 ns/iter (± 883419) 105118332 ns/iter (± 286175) 1.00
es/visitor/compare/clone 1944556 ns/iter (± 20144) 1943538 ns/iter (± 1198) 1.00
es/visitor/compare/visit_mut_span 2254195 ns/iter (± 21896) 2279862 ns/iter (± 2830) 0.99
es/visitor/compare/visit_mut_span_panic 2310732 ns/iter (± 17503) 2318328 ns/iter (± 2427) 1.00
es/visitor/compare/fold_span 3303070 ns/iter (± 40144) 3376219 ns/iter (± 8501) 0.98
es/visitor/compare/fold_span_panic 3467384 ns/iter (± 42055) 3518504 ns/iter (± 7817) 0.99
es/lexer/colors 13057 ns/iter (± 114) 13344 ns/iter (± 38) 0.98
es/lexer/angular 6063585 ns/iter (± 45154) 6203643 ns/iter (± 7787) 0.98
es/lexer/backbone 784455 ns/iter (± 9362) 805770 ns/iter (± 3462) 0.97
es/lexer/jquery 4502845 ns/iter (± 65099) 4601497 ns/iter (± 5838) 0.98
es/lexer/jquery mobile 6792364 ns/iter (± 66167) 6978353 ns/iter (± 11132) 0.97
es/lexer/mootools 3497828 ns/iter (± 37644) 3636549 ns/iter (± 10199) 0.96
es/lexer/underscore 664762 ns/iter (± 8707) 673296 ns/iter (± 781) 0.99
es/lexer/three 21106575 ns/iter (± 209588) 21802645 ns/iter (± 39858) 0.97
es/lexer/yui 3754426 ns/iter (± 27305) 3898552 ns/iter (± 3643) 0.96
es/parser/colors 27404 ns/iter (± 303) 26884 ns/iter (± 80) 1.02
es/parser/angular 13634723 ns/iter (± 416453) 13483233 ns/iter (± 61588) 1.01
es/parser/backbone 1993905 ns/iter (± 23539) 1986632 ns/iter (± 7830) 1.00
es/parser/jquery 10829890 ns/iter (± 78940) 10832550 ns/iter (± 45609) 1.00
es/parser/jquery mobile 16682825 ns/iter (± 223259) 16612768 ns/iter (± 113574) 1.00
es/parser/mootools 8325680 ns/iter (± 55534) 8320340 ns/iter (± 17075) 1.00
es/parser/underscore 1714937 ns/iter (± 30180) 1705183 ns/iter (± 9793) 1.01
es/parser/three 46391255 ns/iter (± 405661) 46365347 ns/iter (± 445383) 1.00
es/parser/yui 8202543 ns/iter (± 61183) 8237225 ns/iter (± 36534) 1.00
es/preset-env/usage/builtin_type 135233 ns/iter (± 32254) 139017 ns/iter (± 32721) 0.97
es/preset-env/usage/property 16152 ns/iter (± 149) 17203 ns/iter (± 446) 0.94
es/resolver/typescript 89805043 ns/iter (± 1825204) 91178184 ns/iter (± 1145124) 0.98
es/fixer/typescript 61597657 ns/iter (± 932520) 63345493 ns/iter (± 458378) 0.97
es/hygiene/typescript 128323985 ns/iter (± 896064) 129205791 ns/iter (± 689524) 0.99
es/resolver_with_hygiene/typescript 242674890 ns/iter (± 1569547) 242497418 ns/iter (± 901474) 1.00
es/visitor/base-perf/module_clone 58332 ns/iter (± 756) 59487 ns/iter (± 434) 0.98
es/visitor/base-perf/fold_empty 62887 ns/iter (± 150) 63972 ns/iter (± 380) 0.98
es/visitor/base-perf/fold_noop_impl_all 62300 ns/iter (± 1101) 63816 ns/iter (± 206) 0.98
es/visitor/base-perf/fold_noop_impl_vec 63400 ns/iter (± 256) 64064 ns/iter (± 295) 0.99
es/visitor/base-perf/boxing_boxed_clone 55 ns/iter (± 0) 56 ns/iter (± 0) 0.98
es/visitor/base-perf/boxing_unboxed_clone 40 ns/iter (± 0) 40 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 107 ns/iter (± 0) 109 ns/iter (± 0) 0.98
es/visitor/base-perf/boxing_unboxed 78 ns/iter (± 0) 78 ns/iter (± 0) 1
es/visitor/base-perf/visit_empty 0 ns/iter (± 0) 0 ns/iter (± 0) NaN
es/visitor/base-perf/visit_contains_this 2503 ns/iter (± 13) 2467 ns/iter (± 13) 1.01
es/base/parallel/resolver/typescript 3712918077 ns/iter (± 284870820) 4291795164 ns/iter (± 236737097) 0.87
es/base/parallel/hygiene/typescript 1439535954 ns/iter (± 20388250) 1451187043 ns/iter (± 19549366) 0.99
misc/visitors/time-complexity/time 5 134 ns/iter (± 2) 136 ns/iter (± 1) 0.99
misc/visitors/time-complexity/time 10 379 ns/iter (± 4) 384 ns/iter (± 3) 0.99
misc/visitors/time-complexity/time 15 666 ns/iter (± 9) 683 ns/iter (± 7) 0.98
misc/visitors/time-complexity/time 20 1074 ns/iter (± 9) 1063 ns/iter (± 54) 1.01
misc/visitors/time-complexity/time 40 3532 ns/iter (± 46) 3565 ns/iter (± 19) 0.99
misc/visitors/time-complexity/time 60 8810 ns/iter (± 51) 7389 ns/iter (± 30) 1.19

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

Please sign in to comment.