From d8a1a77e499642254ac18eff26517be3623c8e2a Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Mon, 20 Jan 2025 13:32:57 +0900 Subject: [PATCH 1/2] fix(minifier): avoid minifing `String(a)` into `"" + a` for symbols --- .../ast_passes/peephole_substitute_alternate_syntax.rs | 5 +++-- tasks/minsize/minsize.snap | 10 +++++----- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/crates/oxc_minifier/src/ast_passes/peephole_substitute_alternate_syntax.rs b/crates/oxc_minifier/src/ast_passes/peephole_substitute_alternate_syntax.rs index 68ee28ca4cce5..f84a2aad1eb15 100644 --- a/crates/oxc_minifier/src/ast_passes/peephole_substitute_alternate_syntax.rs +++ b/crates/oxc_minifier/src/ast_passes/peephole_substitute_alternate_syntax.rs @@ -866,8 +866,7 @@ impl<'a, 'b> PeepholeSubstituteAlternateSyntax { None => Some(ctx.ast.expression_string_literal(span, "", None)), // `String(a)` -> `'' + (a)` Some(arg) => { - if !matches!(arg, Expression::Identifier(_) | Expression::CallExpression(_)) - && !arg.is_literal() + if !arg.is_literal() { return None; } @@ -1973,6 +1972,8 @@ mod test { // Don't fold the existence check to preserve behavior test_same("var a = String?.('hello')"); + test_same("var s = Symbol();var a = String(s);"); + test_same("var a = String('hello', bar());"); test_same("var a = String({valueOf: function() { return 1; }});"); } diff --git a/tasks/minsize/minsize.snap b/tasks/minsize/minsize.snap index 33dbadc624ac7..6a8d41aaf90fb 100644 --- a/tasks/minsize/minsize.snap +++ b/tasks/minsize/minsize.snap @@ -7,21 +7,21 @@ Original | minified | minified | gzip | gzip | Fixture 287.63 kB | 90.08 kB | 90.07 kB | 32.03 kB | 31.95 kB | jquery.js -342.15 kB | 118.14 kB | 118.14 kB | 44.45 kB | 44.37 kB | vue.js +342.15 kB | 118.19 kB | 118.14 kB | 44.45 kB | 44.37 kB | vue.js 544.10 kB | 71.76 kB | 72.48 kB | 26.15 kB | 26.20 kB | lodash.js 555.77 kB | 272.90 kB | 270.13 kB | 90.90 kB | 90.80 kB | d3.js -1.01 MB | 460.15 kB | 458.89 kB | 126.77 kB | 126.71 kB | bundle.min.js +1.01 MB | 460.18 kB | 458.89 kB | 126.78 kB | 126.71 kB | bundle.min.js -1.25 MB | 652.88 kB | 646.76 kB | 163.54 kB | 163.73 kB | three.js +1.25 MB | 652.90 kB | 646.76 kB | 163.54 kB | 163.73 kB | three.js -2.14 MB | 724.05 kB | 724.14 kB | 179.94 kB | 181.07 kB | victory.js +2.14 MB | 724.06 kB | 724.14 kB | 179.94 kB | 181.07 kB | victory.js 3.20 MB | 1.01 MB | 1.01 MB | 332.01 kB | 331.56 kB | echarts.js -6.69 MB | 2.31 MB | 2.31 MB | 492.51 kB | 488.28 kB | antd.js +6.69 MB | 2.31 MB | 2.31 MB | 492.53 kB | 488.28 kB | antd.js 10.95 MB | 3.49 MB | 3.49 MB | 907.24 kB | 915.50 kB | typescript.js From cecdf30b6a24ac851d2aa1cb314377692c9f1391 Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2025 04:34:48 +0000 Subject: [PATCH 2/2] [autofix.ci] apply automated fixes --- .../src/ast_passes/peephole_substitute_alternate_syntax.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/crates/oxc_minifier/src/ast_passes/peephole_substitute_alternate_syntax.rs b/crates/oxc_minifier/src/ast_passes/peephole_substitute_alternate_syntax.rs index f84a2aad1eb15..aec49e14c6760 100644 --- a/crates/oxc_minifier/src/ast_passes/peephole_substitute_alternate_syntax.rs +++ b/crates/oxc_minifier/src/ast_passes/peephole_substitute_alternate_syntax.rs @@ -866,8 +866,7 @@ impl<'a, 'b> PeepholeSubstituteAlternateSyntax { None => Some(ctx.ast.expression_string_literal(span, "", None)), // `String(a)` -> `'' + (a)` Some(arg) => { - if !arg.is_literal() - { + if !arg.is_literal() { return None; } Some(ctx.ast.expression_binary(