11//! Compatibility for terser config.
22
3- use crate :: option:: PureGetterOption ;
4-
3+ use super :: true_by_default;
54use super :: CompressOptions ;
65use super :: TopLevelOptions ;
6+ use crate :: option:: PureGetterOption ;
77use fxhash:: FxHashMap ;
8- use serde:: Deserialize ;
8+ use serde:: { Deserialize , Serialize } ;
99use serde_json:: Value ;
1010use swc_atoms:: JsWord ;
1111use swc_common:: input:: SourceFileInput ;
@@ -18,15 +18,21 @@ use swc_ecma_parser::lexer::Lexer;
1818use swc_ecma_parser:: Parser ;
1919use swc_ecma_utils:: drop_span;
2020
21- #[ derive( Debug , Clone , Deserialize ) ]
21+ #[ derive( Debug , Clone , Serialize , Deserialize ) ]
2222#[ serde( deny_unknown_fields) ]
2323#[ serde( untagged) ]
2424pub enum TerserEcmaVersion {
2525 Num ( usize ) ,
2626 Str ( String ) ,
2727}
2828
29- #[ derive( Debug , Clone , Deserialize ) ]
29+ impl Default for TerserEcmaVersion {
30+ fn default ( ) -> Self {
31+ Self :: Num ( 5 )
32+ }
33+ }
34+
35+ #[ derive( Debug , Clone , Serialize , Deserialize ) ]
3036#[ serde( deny_unknown_fields) ]
3137#[ serde( untagged) ]
3238pub enum TerserPureGetterOption {
@@ -42,39 +48,39 @@ impl Default for TerserPureGetterOption {
4248 }
4349}
4450
45- #[ derive( Debug , Clone , Copy , Deserialize ) ]
51+ #[ derive( Debug , Clone , Copy , Serialize , Deserialize ) ]
4652#[ serde( deny_unknown_fields) ]
4753#[ serde( untagged) ]
4854pub enum TerserInlineOption {
4955 Bool ( bool ) ,
5056 Num ( u8 ) ,
5157}
5258
53- #[ derive( Debug , Clone , Deserialize ) ]
59+ #[ derive( Debug , Clone , Serialize , Deserialize ) ]
5460#[ serde( deny_unknown_fields) ]
5561#[ serde( untagged) ]
5662pub enum TerserTopLevelOptions {
5763 Bool ( bool ) ,
5864 Str ( String ) ,
5965}
6066
61- #[ derive( Debug , Clone , Copy , Deserialize ) ]
67+ #[ derive( Debug , Clone , Copy , Serialize , Deserialize ) ]
6268#[ serde( deny_unknown_fields) ]
6369#[ serde( untagged) ]
6470pub enum TerserSequenceOptions {
6571 Bool ( bool ) ,
6672 Num ( u8 ) ,
6773}
6874
69- #[ derive( Debug , Clone , Deserialize ) ]
75+ #[ derive( Debug , Clone , Serialize , Deserialize ) ]
7076#[ serde( deny_unknown_fields) ]
7177#[ serde( untagged) ]
7278pub enum TerserTopRetainOption {
7379 Str ( String ) ,
7480 Seq ( Vec < JsWord > ) ,
7581}
7682
77- #[ derive( Debug , Clone , Deserialize ) ]
83+ #[ derive( Debug , Clone , Serialize , Deserialize ) ]
7884#[ serde( deny_unknown_fields) ]
7985pub struct TerserCompressorOptions {
8086 #[ serde( default ) ]
@@ -104,7 +110,7 @@ pub struct TerserCompressorOptions {
104110 #[ serde( default ) ]
105111 pub dead_code : bool ,
106112
107- #[ serde( default ) ]
113+ #[ serde( default = "true_by_default" ) ]
108114 pub defaults : bool ,
109115
110116 #[ serde( default ) ]
@@ -242,6 +248,67 @@ pub struct TerserCompressorOptions {
242248 pub module : bool ,
243249}
244250
251+ impl Default for TerserCompressorOptions {
252+ fn default ( ) -> Self {
253+ Self {
254+ arguments : Default :: default ( ) ,
255+ arrows : Default :: default ( ) ,
256+ booleans : Default :: default ( ) ,
257+ booleans_as_integers : Default :: default ( ) ,
258+ collapse_vars : Default :: default ( ) ,
259+ comparisons : Default :: default ( ) ,
260+ computed_props : Default :: default ( ) ,
261+ conditionals : Default :: default ( ) ,
262+ dead_code : Default :: default ( ) ,
263+ defaults : true ,
264+ directives : Default :: default ( ) ,
265+ drop_console : Default :: default ( ) ,
266+ drop_debugger : Default :: default ( ) ,
267+ ecma : Default :: default ( ) ,
268+ evaluate : Default :: default ( ) ,
269+ expression : Default :: default ( ) ,
270+ global_defs : Default :: default ( ) ,
271+ hoist_funs : Default :: default ( ) ,
272+ hoist_props : Default :: default ( ) ,
273+ hoist_vars : Default :: default ( ) ,
274+ ie8 : Default :: default ( ) ,
275+ if_return : Default :: default ( ) ,
276+ inline : Default :: default ( ) ,
277+ join_vars : Default :: default ( ) ,
278+ keep_classnames : Default :: default ( ) ,
279+ keep_fargs : Default :: default ( ) ,
280+ keep_fnames : Default :: default ( ) ,
281+ keep_infinity : Default :: default ( ) ,
282+ loops : Default :: default ( ) ,
283+ negate_iife : Default :: default ( ) ,
284+ passes : Default :: default ( ) ,
285+ properties : Default :: default ( ) ,
286+ pure_getters : Default :: default ( ) ,
287+ pure_funcs : Default :: default ( ) ,
288+ reduce_funcs : Default :: default ( ) ,
289+ reduce_vars : Default :: default ( ) ,
290+ sequences : Default :: default ( ) ,
291+ side_effects : Default :: default ( ) ,
292+ switches : Default :: default ( ) ,
293+ top_retain : Default :: default ( ) ,
294+ toplevel : Default :: default ( ) ,
295+ typeofs : Default :: default ( ) ,
296+ unsafe_passes : Default :: default ( ) ,
297+ unsafe_arrows : Default :: default ( ) ,
298+ unsafe_comps : Default :: default ( ) ,
299+ unsafe_function : Default :: default ( ) ,
300+ unsafe_math : Default :: default ( ) ,
301+ unsafe_symbols : Default :: default ( ) ,
302+ unsafe_methods : Default :: default ( ) ,
303+ unsafe_proto : Default :: default ( ) ,
304+ unsafe_regexp : Default :: default ( ) ,
305+ unsafe_undefined : Default :: default ( ) ,
306+ unused : Default :: default ( ) ,
307+ module : Default :: default ( ) ,
308+ }
309+ }
310+ }
311+
245312fn ecma_default ( ) -> TerserEcmaVersion {
246313 TerserEcmaVersion :: Num ( 5 )
247314}
0 commit comments