dbg_swc/es/minifier/
compare_opts.rs1use std::{path::PathBuf, sync::Arc};
2
3use anyhow::{Context, Result};
4use clap::Args;
5use swc_common::SourceMap;
6use swc_ecma_minifier::option::{CompressOptions, MangleOptions};
7
8use crate::util::{
9 all_js_files,
10 minifier::{get_minified, get_minified_with_opts},
11 print_js,
12};
13
14#[derive(Debug, Args)]
17pub struct CompareOptsCommand {
18 pub path: PathBuf,
19}
20
21impl CompareOptsCommand {
22 pub fn run(self, cm: Arc<SourceMap>) -> Result<()> {
23 let files = all_js_files(&self.path)?;
24
25 let mut default_sum = 0;
26 let mut new_sum = 0;
27
28 for file in files {
29 let default_record = get_minified(cm.clone(), &file, true, true)?;
30 let default_code = print_js(cm.clone(), &default_record.module, true)
31 .context("failed to convert ast to code")?;
32
33 eprintln!("default: {} bytes", default_code.len());
34 default_sum += default_code.len();
35
36 let new_record = get_minified_with_opts(
37 cm.clone(),
38 &file,
39 Some(CompressOptions {
40 keep_classnames: true,
41 keep_fnames: true,
42 ..Default::default()
43 }),
44 Some(MangleOptions {
45 keep_class_names: true,
46 keep_fn_names: true,
47 ..Default::default()
48 }),
49 )?;
50 let new_code = print_js(cm.clone(), &new_record.module, true)
51 .context("failed to convert ast to code")?;
52
53 eprintln!("new: {} bytes", new_code.len());
54 new_sum += new_code.len();
55 }
56
57 eprintln!("default (total): {default_sum} bytes");
58 eprintln!("new (total): {new_sum} bytes");
59
60 Ok(())
61 }
62}