From 666483fc5c2c34beeba4c6215ce8a1dee8a46ea7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Wed, 14 Dec 2022 16:10:19 +0900 Subject: [PATCH 01/17] Rename --- crates/dbg-swc/src/main.rs | 4 ++-- crates/dbg-swc/src/{minify => minifier}/compare.rs | 0 crates/dbg-swc/src/{minify => minifier}/diff_options.rs | 0 crates/dbg-swc/src/{minify => minifier}/ensure_size.rs | 0 crates/dbg-swc/src/{minify => minifier}/mod.rs | 0 crates/dbg-swc/src/{minify => minifier}/next/check_size.rs | 0 crates/dbg-swc/src/{minify => minifier}/next/mod.rs | 0 crates/dbg-swc/src/{minify => minifier}/reduce.rs | 0 8 files changed, 2 insertions(+), 2 deletions(-) rename crates/dbg-swc/src/{minify => minifier}/compare.rs (100%) rename crates/dbg-swc/src/{minify => minifier}/diff_options.rs (100%) rename crates/dbg-swc/src/{minify => minifier}/ensure_size.rs (100%) rename crates/dbg-swc/src/{minify => minifier}/mod.rs (100%) rename crates/dbg-swc/src/{minify => minifier}/next/check_size.rs (100%) rename crates/dbg-swc/src/{minify => minifier}/next/mod.rs (100%) rename crates/dbg-swc/src/{minify => minifier}/reduce.rs (100%) diff --git a/crates/dbg-swc/src/main.rs b/crates/dbg-swc/src/main.rs index d64c448c4bc0..8ca503ce3e1f 100644 --- a/crates/dbg-swc/src/main.rs +++ b/crates/dbg-swc/src/main.rs @@ -10,14 +10,14 @@ use swc_error_reporters::handler::{try_with_handler, HandlerOpts}; use tracing_subscriber::EnvFilter; use self::{ - minify::MinifyCommand, + minifier::MinifyCommand, test::TestCommand, util::{minifier::get_esbuild_output, print_js}, }; use crate::util::minifier::{get_minified, get_terser_output}; mod bundle; -mod minify; +mod minifier; mod test; mod util; diff --git a/crates/dbg-swc/src/minify/compare.rs b/crates/dbg-swc/src/minifier/compare.rs similarity index 100% rename from crates/dbg-swc/src/minify/compare.rs rename to crates/dbg-swc/src/minifier/compare.rs diff --git a/crates/dbg-swc/src/minify/diff_options.rs b/crates/dbg-swc/src/minifier/diff_options.rs similarity index 100% rename from crates/dbg-swc/src/minify/diff_options.rs rename to crates/dbg-swc/src/minifier/diff_options.rs diff --git a/crates/dbg-swc/src/minify/ensure_size.rs b/crates/dbg-swc/src/minifier/ensure_size.rs similarity index 100% rename from crates/dbg-swc/src/minify/ensure_size.rs rename to crates/dbg-swc/src/minifier/ensure_size.rs diff --git a/crates/dbg-swc/src/minify/mod.rs b/crates/dbg-swc/src/minifier/mod.rs similarity index 100% rename from crates/dbg-swc/src/minify/mod.rs rename to crates/dbg-swc/src/minifier/mod.rs diff --git a/crates/dbg-swc/src/minify/next/check_size.rs b/crates/dbg-swc/src/minifier/next/check_size.rs similarity index 100% rename from crates/dbg-swc/src/minify/next/check_size.rs rename to crates/dbg-swc/src/minifier/next/check_size.rs diff --git a/crates/dbg-swc/src/minify/next/mod.rs b/crates/dbg-swc/src/minifier/next/mod.rs similarity index 100% rename from crates/dbg-swc/src/minify/next/mod.rs rename to crates/dbg-swc/src/minifier/next/mod.rs diff --git a/crates/dbg-swc/src/minify/reduce.rs b/crates/dbg-swc/src/minifier/reduce.rs similarity index 100% rename from crates/dbg-swc/src/minify/reduce.rs rename to crates/dbg-swc/src/minifier/reduce.rs From db9820ee1dcb5df1bbf0422e1f6ac86bc7f0ae02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Wed, 14 Dec 2022 16:11:47 +0900 Subject: [PATCH 02/17] rename --- crates/dbg-swc/src/main.rs | 6 +++--- crates/dbg-swc/src/minifier/mod.rs | 14 +++++++------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/crates/dbg-swc/src/main.rs b/crates/dbg-swc/src/main.rs index 8ca503ce3e1f..e1feb48ba8d5 100644 --- a/crates/dbg-swc/src/main.rs +++ b/crates/dbg-swc/src/main.rs @@ -10,7 +10,7 @@ use swc_error_reporters::handler::{try_with_handler, HandlerOpts}; use tracing_subscriber::EnvFilter; use self::{ - minifier::MinifyCommand, + minifier::MinifierCommand, test::TestCommand, util::{minifier::get_esbuild_output, print_js}, }; @@ -34,7 +34,7 @@ struct AppArgs { #[derive(Debug, Subcommand)] enum Cmd { #[clap(subcommand)] - Minify(MinifyCommand), + Minifier(MinifierCommand), #[clap(subcommand)] Test(TestCommand), } @@ -142,7 +142,7 @@ fn main() -> Result<()> { |handler| { GLOBALS.set(&Globals::default(), || { HANDLER.set(handler, || match args.cmd { - Cmd::Minify(cmd) => cmd.run(cm), + Cmd::Minifier(cmd) => cmd.run(cm), Cmd::Test(cmd) => cmd.run(cm), }) }) diff --git a/crates/dbg-swc/src/minifier/mod.rs b/crates/dbg-swc/src/minifier/mod.rs index d160131f9129..23890e52e24d 100644 --- a/crates/dbg-swc/src/minifier/mod.rs +++ b/crates/dbg-swc/src/minifier/mod.rs @@ -17,7 +17,7 @@ mod reduce; /// Debug swc es minifier #[derive(Debug, Subcommand)] -pub enum MinifyCommand { +pub enum MinifierCommand { #[clap(subcommand)] Next(NextCommand), Reduce(ReduceCommand), @@ -26,14 +26,14 @@ pub enum MinifyCommand { EnsureSize(EnsureSize), } -impl MinifyCommand { +impl MinifierCommand { pub fn run(self, cm: Arc) -> Result<()> { match self { - MinifyCommand::Next(cmd) => cmd.run(cm), - MinifyCommand::Reduce(cmd) => cmd.run(cm), - MinifyCommand::EnsureSize(cmd) => cmd.run(cm), - MinifyCommand::Compare(cmd) => cmd.run(cm), - MinifyCommand::DiffOption(cmd) => cmd.run(cm), + MinifierCommand::Next(cmd) => cmd.run(cm), + MinifierCommand::Reduce(cmd) => cmd.run(cm), + MinifierCommand::EnsureSize(cmd) => cmd.run(cm), + MinifierCommand::Compare(cmd) => cmd.run(cm), + MinifierCommand::DiffOption(cmd) => cmd.run(cm), } } } From 5405f10a92fddd1da1708321d29728c7e80f6c1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Wed, 14 Dec 2022 16:12:28 +0900 Subject: [PATCH 03/17] Doc --- crates/dbg-swc/src/minifier/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/dbg-swc/src/minifier/mod.rs b/crates/dbg-swc/src/minifier/mod.rs index 23890e52e24d..6d85a7f5b0e7 100644 --- a/crates/dbg-swc/src/minifier/mod.rs +++ b/crates/dbg-swc/src/minifier/mod.rs @@ -15,7 +15,7 @@ mod ensure_size; mod next; mod reduce; -/// Debug swc es minifier +/// Debug the ECMAScript Minifier. #[derive(Debug, Subcommand)] pub enum MinifierCommand { #[clap(subcommand)] From 24b7c620b657f44ce959c6eb10416dedbfd37cff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Wed, 14 Dec 2022 16:13:02 +0900 Subject: [PATCH 04/17] Rename --- crates/dbg-swc/src/{test.rs => exec_test.rs} | 6 +++--- crates/dbg-swc/src/main.rs | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) rename crates/dbg-swc/src/{test.rs => exec_test.rs} (96%) diff --git a/crates/dbg-swc/src/test.rs b/crates/dbg-swc/src/exec_test.rs similarity index 96% rename from crates/dbg-swc/src/test.rs rename to crates/dbg-swc/src/exec_test.rs index edd4537f9bcf..a1a11086f239 100644 --- a/crates/dbg-swc/src/test.rs +++ b/crates/dbg-swc/src/exec_test.rs @@ -18,11 +18,11 @@ use crate::{bundle::bundle, util::print_js}; /// Execute a javascript file after performing some preprocessing. #[derive(Debug, Subcommand)] -pub enum TestCommand { +pub enum ExecForTestingCommand { MinifiedBundle(TestMinifiedBundleCommand), } -impl TestCommand { +impl ExecForTestingCommand { pub fn run(self, cm: Arc) -> Result<()> { let _timer = timer!("test"); @@ -30,7 +30,7 @@ impl TestCommand { let _timer = timer!("process"); match self { - TestCommand::MinifiedBundle(cmd) => cmd.run(cm), + ExecForTestingCommand::MinifiedBundle(cmd) => cmd.run(cm), }? }; diff --git a/crates/dbg-swc/src/main.rs b/crates/dbg-swc/src/main.rs index e1feb48ba8d5..d4c965aab72b 100644 --- a/crates/dbg-swc/src/main.rs +++ b/crates/dbg-swc/src/main.rs @@ -10,15 +10,15 @@ use swc_error_reporters::handler::{try_with_handler, HandlerOpts}; use tracing_subscriber::EnvFilter; use self::{ + exec_test::ExecForTestingCommand, minifier::MinifierCommand, - test::TestCommand, util::{minifier::get_esbuild_output, print_js}, }; use crate::util::minifier::{get_minified, get_terser_output}; mod bundle; +mod exec_test; mod minifier; -mod test; mod util; const CREDUCE_INPUT_ENV_VAR: &str = "CREDUCE_INPUT"; @@ -36,7 +36,7 @@ enum Cmd { #[clap(subcommand)] Minifier(MinifierCommand), #[clap(subcommand)] - Test(TestCommand), + ExecForTesting(ExecForTestingCommand), } fn init() -> Result<()> { @@ -143,7 +143,7 @@ fn main() -> Result<()> { GLOBALS.set(&Globals::default(), || { HANDLER.set(handler, || match args.cmd { Cmd::Minifier(cmd) => cmd.run(cm), - Cmd::Test(cmd) => cmd.run(cm), + Cmd::ExecForTesting(cmd) => cmd.run(cm), }) }) }, From c842cc60c240a38db03ec12410a7e4041204fdeb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Wed, 14 Dec 2022 16:16:26 +0900 Subject: [PATCH 05/17] Namespace --- crates/dbg-swc/src/{ => es}/exec_test.rs | 0 .../dbg-swc/src/{ => es}/minifier/compare.rs | 0 .../src/{ => es}/minifier/diff_options.rs | 0 .../src/{ => es}/minifier/ensure_size.rs | 0 crates/dbg-swc/src/{ => es}/minifier/mod.rs | 0 .../src/{ => es}/minifier/next/check_size.rs | 0 .../dbg-swc/src/{ => es}/minifier/next/mod.rs | 0 .../dbg-swc/src/{ => es}/minifier/reduce.rs | 0 crates/dbg-swc/src/es/mod.rs | 28 +++++++++++++++++++ crates/dbg-swc/src/main.rs | 17 ++++------- 10 files changed, 33 insertions(+), 12 deletions(-) rename crates/dbg-swc/src/{ => es}/exec_test.rs (100%) rename crates/dbg-swc/src/{ => es}/minifier/compare.rs (100%) rename crates/dbg-swc/src/{ => es}/minifier/diff_options.rs (100%) rename crates/dbg-swc/src/{ => es}/minifier/ensure_size.rs (100%) rename crates/dbg-swc/src/{ => es}/minifier/mod.rs (100%) rename crates/dbg-swc/src/{ => es}/minifier/next/check_size.rs (100%) rename crates/dbg-swc/src/{ => es}/minifier/next/mod.rs (100%) rename crates/dbg-swc/src/{ => es}/minifier/reduce.rs (100%) create mode 100644 crates/dbg-swc/src/es/mod.rs diff --git a/crates/dbg-swc/src/exec_test.rs b/crates/dbg-swc/src/es/exec_test.rs similarity index 100% rename from crates/dbg-swc/src/exec_test.rs rename to crates/dbg-swc/src/es/exec_test.rs diff --git a/crates/dbg-swc/src/minifier/compare.rs b/crates/dbg-swc/src/es/minifier/compare.rs similarity index 100% rename from crates/dbg-swc/src/minifier/compare.rs rename to crates/dbg-swc/src/es/minifier/compare.rs diff --git a/crates/dbg-swc/src/minifier/diff_options.rs b/crates/dbg-swc/src/es/minifier/diff_options.rs similarity index 100% rename from crates/dbg-swc/src/minifier/diff_options.rs rename to crates/dbg-swc/src/es/minifier/diff_options.rs diff --git a/crates/dbg-swc/src/minifier/ensure_size.rs b/crates/dbg-swc/src/es/minifier/ensure_size.rs similarity index 100% rename from crates/dbg-swc/src/minifier/ensure_size.rs rename to crates/dbg-swc/src/es/minifier/ensure_size.rs diff --git a/crates/dbg-swc/src/minifier/mod.rs b/crates/dbg-swc/src/es/minifier/mod.rs similarity index 100% rename from crates/dbg-swc/src/minifier/mod.rs rename to crates/dbg-swc/src/es/minifier/mod.rs diff --git a/crates/dbg-swc/src/minifier/next/check_size.rs b/crates/dbg-swc/src/es/minifier/next/check_size.rs similarity index 100% rename from crates/dbg-swc/src/minifier/next/check_size.rs rename to crates/dbg-swc/src/es/minifier/next/check_size.rs diff --git a/crates/dbg-swc/src/minifier/next/mod.rs b/crates/dbg-swc/src/es/minifier/next/mod.rs similarity index 100% rename from crates/dbg-swc/src/minifier/next/mod.rs rename to crates/dbg-swc/src/es/minifier/next/mod.rs diff --git a/crates/dbg-swc/src/minifier/reduce.rs b/crates/dbg-swc/src/es/minifier/reduce.rs similarity index 100% rename from crates/dbg-swc/src/minifier/reduce.rs rename to crates/dbg-swc/src/es/minifier/reduce.rs diff --git a/crates/dbg-swc/src/es/mod.rs b/crates/dbg-swc/src/es/mod.rs new file mode 100644 index 000000000000..fb6fc76526f9 --- /dev/null +++ b/crates/dbg-swc/src/es/mod.rs @@ -0,0 +1,28 @@ +use std::sync::Arc; + +use anyhow::Result; +use clap::Subcommand; +use swc_common::SourceMap; + +use self::{exec_test::ExecForTestingCommand, minifier::MinifierCommand}; + +mod exec_test; +mod minifier; + +/// Debug modules related to ECMAScript +#[derive(Debug, Subcommand)] +pub(crate) enum EsCommand { + #[clap(subcommand)] + Minifier(MinifierCommand), + #[clap(subcommand)] + ExecForTesting(ExecForTestingCommand), +} + +impl EsCommand { + pub fn run(self, cm: Arc) -> Result<()> { + match self { + Self::Minifier(cmd) => cmd.run(cm), + Self::ExecForTesting(cmd) => cmd.run(cm), + } + } +} diff --git a/crates/dbg-swc/src/main.rs b/crates/dbg-swc/src/main.rs index d4c965aab72b..9756572d45a3 100644 --- a/crates/dbg-swc/src/main.rs +++ b/crates/dbg-swc/src/main.rs @@ -2,6 +2,7 @@ use std::{env, path::PathBuf, str::FromStr, sync::Arc}; use anyhow::{bail, Result}; use clap::{StructOpt, Subcommand}; +use es::EsCommand; use swc_common::{ errors::{ColorConfig, HANDLER}, Globals, SourceMap, GLOBALS, @@ -9,16 +10,11 @@ use swc_common::{ use swc_error_reporters::handler::{try_with_handler, HandlerOpts}; use tracing_subscriber::EnvFilter; -use self::{ - exec_test::ExecForTestingCommand, - minifier::MinifierCommand, - util::{minifier::get_esbuild_output, print_js}, -}; +use self::util::{minifier::get_esbuild_output, print_js}; use crate::util::minifier::{get_minified, get_terser_output}; mod bundle; -mod exec_test; -mod minifier; +mod es; mod util; const CREDUCE_INPUT_ENV_VAR: &str = "CREDUCE_INPUT"; @@ -34,9 +30,7 @@ struct AppArgs { #[derive(Debug, Subcommand)] enum Cmd { #[clap(subcommand)] - Minifier(MinifierCommand), - #[clap(subcommand)] - ExecForTesting(ExecForTestingCommand), + Es(EsCommand), } fn init() -> Result<()> { @@ -142,8 +136,7 @@ fn main() -> Result<()> { |handler| { GLOBALS.set(&Globals::default(), || { HANDLER.set(handler, || match args.cmd { - Cmd::Minifier(cmd) => cmd.run(cm), - Cmd::ExecForTesting(cmd) => cmd.run(cm), + Cmd::Es(cmd) => cmd.run(cm), }) }) }, From 240d11744039a93d0951f4b763e225adf4b75f03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Wed, 14 Dec 2022 16:18:04 +0900 Subject: [PATCH 06/17] Remove unused --- .../dbg-swc/src/es/minifier/diff_options.rs | 124 ------------------ crates/dbg-swc/src/es/minifier/mod.rs | 6 +- 2 files changed, 1 insertion(+), 129 deletions(-) delete mode 100644 crates/dbg-swc/src/es/minifier/diff_options.rs diff --git a/crates/dbg-swc/src/es/minifier/diff_options.rs b/crates/dbg-swc/src/es/minifier/diff_options.rs deleted file mode 100644 index b7dce4e87572..000000000000 --- a/crates/dbg-swc/src/es/minifier/diff_options.rs +++ /dev/null @@ -1,124 +0,0 @@ -use std::{ - fs, - path::{Path, PathBuf}, - process::Command, - sync::Arc, -}; - -use anyhow::{Context, Result}; -use clap::Args; -use rayon::prelude::*; -use swc_common::{SourceMap, GLOBALS}; -use swc_ecma_minifier::option::{CompressOptions, MinifyOptions}; -use swc_ecma_transforms_base::fixer::fixer; -use swc_ecma_visit::VisitMutWith; -use tracing::info; - -use crate::util::{all_js_files, make_pretty, parse_js, print_js}; - -/// Useful for checking if the minifier is working correctly, even with the new -/// option. -#[derive(Debug, Args)] -pub struct DiffOptionCommand { - pub path: PathBuf, - - #[clap(long)] - pub open: bool, -} - -impl DiffOptionCommand { - pub fn run(self, cm: Arc) -> Result<()> { - let js_files = all_js_files(&self.path)?; - - let inputs = js_files - .into_iter() - .filter(|p| p.file_name() == Some("input.js".as_ref())) - .collect::>(); - - let files = GLOBALS.with(|globals| { - inputs - .into_par_iter() - .map(|f| GLOBALS.set(globals, || self.process_file(cm.clone(), &f))) - .collect::>>() - })?; - - for (orig_path, new_path) in files.into_iter().flatten() { - if self.open { - let mut c = Command::new("code"); - c.arg("--diff").arg("--wait"); - c.arg(&orig_path); - c.arg(&new_path); - c.output().context("failed to run vscode")?; - } - } - - Ok(()) - } - - fn process_file(&self, cm: Arc, f: &Path) -> Result> { - info!("Processing `{}`", f.display()); - - let fm = cm.load_file(f)?; - let m = parse_js(fm)?; - - let orig = { - let m = m.clone(); - let mut m = swc_ecma_minifier::optimize( - m.module.into(), - cm.clone(), - Some(&m.comments), - None, - &MinifyOptions { - compress: Some(Default::default()), - mangle: None, - ..Default::default() - }, - &swc_ecma_minifier::option::ExtraOptions { - unresolved_mark: m.unresolved_mark, - top_level_mark: m.top_level_mark, - }, - ) - .expect_module(); - m.visit_mut_with(&mut fixer(None)); - print_js(cm.clone(), &m, false)? - }; - - let new = { - let mut m = swc_ecma_minifier::optimize( - m.module.into(), - cm.clone(), - Some(&m.comments), - None, - &MinifyOptions { - compress: Some(CompressOptions { - conditionals: true, - ..Default::default() - }), - mangle: None, - ..Default::default() - }, - &swc_ecma_minifier::option::ExtraOptions { - unresolved_mark: m.unresolved_mark, - top_level_mark: m.top_level_mark, - }, - ) - .expect_module(); - m.visit_mut_with(&mut fixer(None)); - print_js(cm, &m, false)? - }; - - if orig == new { - fs::remove_file(f)?; - return Ok(None); - } - - let orig_path = f.with_extension("orig.js"); - fs::write(&orig_path, orig)?; - make_pretty(&orig_path)?; - let new_path = f.with_extension("new.js"); - fs::write(&new_path, new)?; - make_pretty(&new_path)?; - - Ok(Some((orig_path, new_path))) - } -} diff --git a/crates/dbg-swc/src/es/minifier/mod.rs b/crates/dbg-swc/src/es/minifier/mod.rs index 6d85a7f5b0e7..a585782d4456 100644 --- a/crates/dbg-swc/src/es/minifier/mod.rs +++ b/crates/dbg-swc/src/es/minifier/mod.rs @@ -5,12 +5,10 @@ use clap::Subcommand; use swc_common::SourceMap; use self::{ - compare::CompareCommand, diff_options::DiffOptionCommand, ensure_size::EnsureSize, - next::NextCommand, reduce::ReduceCommand, + compare::CompareCommand, ensure_size::EnsureSize, next::NextCommand, reduce::ReduceCommand, }; mod compare; -mod diff_options; mod ensure_size; mod next; mod reduce; @@ -22,7 +20,6 @@ pub enum MinifierCommand { Next(NextCommand), Reduce(ReduceCommand), Compare(CompareCommand), - DiffOption(DiffOptionCommand), EnsureSize(EnsureSize), } @@ -33,7 +30,6 @@ impl MinifierCommand { MinifierCommand::Reduce(cmd) => cmd.run(cm), MinifierCommand::EnsureSize(cmd) => cmd.run(cm), MinifierCommand::Compare(cmd) => cmd.run(cm), - MinifierCommand::DiffOption(cmd) => cmd.run(cm), } } } From d6a8da582d21cc9d002108f7717355f836dce1f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Wed, 14 Dec 2022 16:19:23 +0900 Subject: [PATCH 07/17] Doc --- crates/dbg-swc/src/es/exec_test.rs | 3 ++- crates/dbg-swc/src/es/minifier/next/mod.rs | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/crates/dbg-swc/src/es/exec_test.rs b/crates/dbg-swc/src/es/exec_test.rs index a1a11086f239..71ff9ec7e048 100644 --- a/crates/dbg-swc/src/es/exec_test.rs +++ b/crates/dbg-swc/src/es/exec_test.rs @@ -16,7 +16,8 @@ use tracing::info; use crate::{bundle::bundle, util::print_js}; -/// Execute a javascript file after performing some preprocessing. +/// [Experimental] Execute a javascript file after performing some +/// preprocessing. #[derive(Debug, Subcommand)] pub enum ExecForTestingCommand { MinifiedBundle(TestMinifiedBundleCommand), diff --git a/crates/dbg-swc/src/es/minifier/next/mod.rs b/crates/dbg-swc/src/es/minifier/next/mod.rs index 3b583050824c..6d5b911f59bc 100644 --- a/crates/dbg-swc/src/es/minifier/next/mod.rs +++ b/crates/dbg-swc/src/es/minifier/next/mod.rs @@ -8,7 +8,7 @@ use self::check_size::CheckSizeCommand; mod check_size; -/// Debug the minifier issue related to next.js application. +/// [Experimental] Debug the minifier issue related to next.js application. #[derive(Debug, Subcommand)] pub enum NextCommand { CheckSize(CheckSizeCommand), From 09e8d04d5ef254ef40a3c0b860e89bdb0512fce2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Wed, 14 Dec 2022 16:20:58 +0900 Subject: [PATCH 08/17] Doc --- crates/dbg-swc/src/es/minifier/reduce.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/crates/dbg-swc/src/es/minifier/reduce.rs b/crates/dbg-swc/src/es/minifier/reduce.rs index 6e75d3952a48..558b3f48aa78 100644 --- a/crates/dbg-swc/src/es/minifier/reduce.rs +++ b/crates/dbg-swc/src/es/minifier/reduce.rs @@ -18,6 +18,9 @@ use crate::{ CREDUCE_INPUT_ENV_VAR, CREDUCE_MODE_ENV_VAR, }; +/// Reduce input files to minimal reproduction cases +/// +/// This command requires `creduce`. #[derive(Debug, Args)] pub struct ReduceCommand { pub path: PathBuf, From fc88573250df9470333e63e942f7de5b605afbd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Wed, 14 Dec 2022 16:21:47 +0900 Subject: [PATCH 09/17] [Experimental] --- crates/dbg-swc/src/es/minifier/compare.rs | 3 ++- crates/dbg-swc/src/es/minifier/ensure_size.rs | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/crates/dbg-swc/src/es/minifier/compare.rs b/crates/dbg-swc/src/es/minifier/compare.rs index 54a25ed50ae4..61a4f1147ccf 100644 --- a/crates/dbg-swc/src/es/minifier/compare.rs +++ b/crates/dbg-swc/src/es/minifier/compare.rs @@ -10,7 +10,8 @@ use crate::util::{ print_js, }; -/// Opens vscode for diffing output of swc minifier and terser/esbuild +/// [Experimental] Opens vscode for diffing output of swc minifier and +/// terser/esbuild #[derive(Debug, Args)] pub struct CompareCommand { pub path: PathBuf, diff --git a/crates/dbg-swc/src/es/minifier/ensure_size.rs b/crates/dbg-swc/src/es/minifier/ensure_size.rs index 027d6f554026..8c960e4ec0ab 100644 --- a/crates/dbg-swc/src/es/minifier/ensure_size.rs +++ b/crates/dbg-swc/src/es/minifier/ensure_size.rs @@ -18,7 +18,8 @@ use crate::util::{ print_js, wrap_task, }; -/// Ensure that we are performing better than other minification tools. +/// [Experimental] Ensure that we are performing better than other minification +/// tools. #[derive(Debug, Args)] pub struct EnsureSize { #[clap(long)] From e4a83c135454be5e0abd18850c722eb043ec2a08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Wed, 14 Dec 2022 16:25:10 +0900 Subject: [PATCH 10/17] Doc --- crates/dbg-swc/src/es/minifier/reduce.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/crates/dbg-swc/src/es/minifier/reduce.rs b/crates/dbg-swc/src/es/minifier/reduce.rs index 558b3f48aa78..5caa48bb6e87 100644 --- a/crates/dbg-swc/src/es/minifier/reduce.rs +++ b/crates/dbg-swc/src/es/minifier/reduce.rs @@ -20,11 +20,18 @@ use crate::{ /// Reduce input files to minimal reproduction cases /// -/// This command requires `creduce`. +/// This command requires `creduce` in PATH. +/// See https://embed.cs.utah.edu/creduce/ for more information. #[derive(Debug, Args)] pub struct ReduceCommand { pub path: PathBuf, + /// In 'size' mode, this command tries to find the minimal input file where + /// the size of the output file of swc minifier is larger than the one from + /// terser. + /// + /// In 'semantics' mode, this command tries to reduce the input file to a + /// minimal reproduction case which trigeers the bug. #[clap(long, arg_enum)] pub mode: ReduceMode, From 8585490a0de5c161e0655da36ac0cdb345bc2679 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Wed, 14 Dec 2022 16:26:44 +0900 Subject: [PATCH 11/17] doc --- crates/dbg-swc/src/es/minifier/reduce.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/crates/dbg-swc/src/es/minifier/reduce.rs b/crates/dbg-swc/src/es/minifier/reduce.rs index 5caa48bb6e87..61193056a4ac 100644 --- a/crates/dbg-swc/src/es/minifier/reduce.rs +++ b/crates/dbg-swc/src/es/minifier/reduce.rs @@ -24,6 +24,8 @@ use crate::{ /// See https://embed.cs.utah.edu/creduce/ for more information. #[derive(Debug, Args)] pub struct ReduceCommand { + /// The path to the input file. You can specify a directory if you want to + /// reduce every '.js' file within a directory, in a recursive manner. pub path: PathBuf, /// In 'size' mode, this command tries to find the minimal input file where @@ -35,7 +37,8 @@ pub struct ReduceCommand { #[clap(long, arg_enum)] pub mode: ReduceMode, - /// If true, the input file will be removed after the reduction. + /// If true, the input file will be removed after the reduction. This can be + /// used for pausing and resuming the process of reducing. #[clap(long)] pub remove: bool, } From e1b82cea355d576257a47a7a53146c3b5e860e08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Wed, 14 Dec 2022 16:28:24 +0900 Subject: [PATCH 12/17] Doc output --- crates/dbg-swc/src/es/minifier/reduce.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/crates/dbg-swc/src/es/minifier/reduce.rs b/crates/dbg-swc/src/es/minifier/reduce.rs index 61193056a4ac..cc256848f2fb 100644 --- a/crates/dbg-swc/src/es/minifier/reduce.rs +++ b/crates/dbg-swc/src/es/minifier/reduce.rs @@ -22,6 +22,8 @@ use crate::{ /// /// This command requires `creduce` in PATH. /// See https://embed.cs.utah.edu/creduce/ for more information. +/// +/// After reducing, the reduced file will be moved to `.swc-reduce` directory. #[derive(Debug, Args)] pub struct ReduceCommand { /// The path to the input file. You can specify a directory if you want to @@ -128,9 +130,9 @@ fn move_to_data_dir(input_path: &Path) -> Result { let result = hasher.finalize(); let hash_str = format!("{:x}", result); - create_dir_all(format!("data/{}", hash_str)).context("failed to create `.data`")?; + create_dir_all(format!(".swc-reduce/{}", hash_str)).context("failed to create `.data`")?; - let to = PathBuf::from(format!("data/{}/input.js", hash_str)); + let to = PathBuf::from(format!(".swc-reduce/{}/input.js", hash_str)); fs::write(&to, src.as_bytes()).context("failed to write")?; Ok(to) From 6587791ca6f6239366400eb0a7dcdb394ddb11dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Wed, 14 Dec 2022 16:30:20 +0900 Subject: [PATCH 13/17] terser only --- crates/dbg-swc/src/main.rs | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/crates/dbg-swc/src/main.rs b/crates/dbg-swc/src/main.rs index 9756572d45a3..0bd47447c16b 100644 --- a/crates/dbg-swc/src/main.rs +++ b/crates/dbg-swc/src/main.rs @@ -10,7 +10,7 @@ use swc_common::{ use swc_error_reporters::handler::{try_with_handler, HandlerOpts}; use tracing_subscriber::EnvFilter; -use self::util::{minifier::get_esbuild_output, print_js}; +use self::util::print_js; use crate::util::minifier::{get_minified, get_terser_output}; mod bundle; @@ -83,24 +83,6 @@ fn main() -> Result<()> { return Ok(()); } - // We only care about length, so we can replace it. - // - // We target es5, but esbuild does not support it - let swc_output = swc_output.replace("\\n", "_"); - - let esbuild_output = get_esbuild_output(&input, true)?; - - if swc_output.len() > esbuild_output.len() { - // It's interesting, as our output is larger than esbuild's. - return Ok(()); - } - - println!( - "swc size = {}, esbuild size = {}", - swc_output.len(), - esbuild_output.len() - ); - bail!("We don't care about this file") } else if mode == "SEMANTICS" { let m = get_minified(cm.clone(), &input, true, false)?; From 9cec814fd4069d8105c00f42f4e70fc4b63b6fa9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Wed, 14 Dec 2022 16:31:16 +0900 Subject: [PATCH 14/17] Doc terser --- crates/dbg-swc/src/es/minifier/reduce.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/crates/dbg-swc/src/es/minifier/reduce.rs b/crates/dbg-swc/src/es/minifier/reduce.rs index cc256848f2fb..4383e26d03bc 100644 --- a/crates/dbg-swc/src/es/minifier/reduce.rs +++ b/crates/dbg-swc/src/es/minifier/reduce.rs @@ -20,9 +20,12 @@ use crate::{ /// Reduce input files to minimal reproduction cases /// -/// This command requires `creduce` in PATH. +/// This command requires `creduce` and `terser` in PATH. /// See https://embed.cs.utah.edu/creduce/ for more information. /// +/// For `terser`, this command uses `npx terser` to invoke `terser` for +/// comparison. +/// /// After reducing, the reduced file will be moved to `.swc-reduce` directory. #[derive(Debug, Args)] pub struct ReduceCommand { From cf38aa1b7eedd48b99e47a5e906f5cf74a24c955 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Wed, 14 Dec 2022 16:42:23 +0900 Subject: [PATCH 15/17] Typo --- crates/dbg-swc/src/es/minifier/reduce.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/dbg-swc/src/es/minifier/reduce.rs b/crates/dbg-swc/src/es/minifier/reduce.rs index 4383e26d03bc..a6c35f1a6b0e 100644 --- a/crates/dbg-swc/src/es/minifier/reduce.rs +++ b/crates/dbg-swc/src/es/minifier/reduce.rs @@ -38,7 +38,7 @@ pub struct ReduceCommand { /// terser. /// /// In 'semantics' mode, this command tries to reduce the input file to a - /// minimal reproduction case which trigeers the bug. + /// minimal reproduction case which triggers the bug. #[clap(long, arg_enum)] pub mode: ReduceMode, From be24904954e0592f5921873cb6c03c099be1cada Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Wed, 14 Dec 2022 16:43:11 +0900 Subject: [PATCH 16/17] Note --- crates/dbg-swc/src/es/minifier/reduce.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/crates/dbg-swc/src/es/minifier/reduce.rs b/crates/dbg-swc/src/es/minifier/reduce.rs index a6c35f1a6b0e..1b2cb7d70410 100644 --- a/crates/dbg-swc/src/es/minifier/reduce.rs +++ b/crates/dbg-swc/src/es/minifier/reduce.rs @@ -27,6 +27,10 @@ use crate::{ /// comparison. /// /// After reducing, the reduced file will be moved to `.swc-reduce` directory. +/// +/// +/// Note: This tool is not perfect, and it may reduce input file way too much, +/// or fail to reduce an input file. #[derive(Debug, Args)] pub struct ReduceCommand { /// The path to the input file. You can specify a directory if you want to From a2cbd24422c0351dc93d4f77b2452d55b6125b97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Wed, 14 Dec 2022 16:43:56 +0900 Subject: [PATCH 17/17] homebrew --- crates/dbg-swc/src/es/minifier/reduce.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/crates/dbg-swc/src/es/minifier/reduce.rs b/crates/dbg-swc/src/es/minifier/reduce.rs index 1b2cb7d70410..bda2aa4ea4d3 100644 --- a/crates/dbg-swc/src/es/minifier/reduce.rs +++ b/crates/dbg-swc/src/es/minifier/reduce.rs @@ -21,7 +21,9 @@ use crate::{ /// Reduce input files to minimal reproduction cases /// /// This command requires `creduce` and `terser` in PATH. -/// See https://embed.cs.utah.edu/creduce/ for more information. +/// +/// For `creduce`, see https://embed.cs.utah.edu/creduce/ for more information. +/// If you are using homebrew, install it with `brew install creduce`. /// /// For `terser`, this command uses `npx terser` to invoke `terser` for /// comparison.