From f7c4934e591bc14bc965cb28bc6b9ca1d8ac1350 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Wed, 10 Jan 2024 03:55:25 +0900 Subject: [PATCH] fix(es/minifier): Correctly escape more characters (#8490) **Related issue:** - Closes #8484 --- .../fixture/issues-8xxx/8484/input/.swcrc | 65 +++++++++++++++++++ .../tests/fixture/issues-8xxx/8484/input/1.js | 1 + .../fixture/issues-8xxx/8484/output/1.js | 1 + .../src/compress/pure/strings.rs | 4 ++ 4 files changed, 71 insertions(+) create mode 100644 crates/swc/tests/fixture/issues-8xxx/8484/input/.swcrc create mode 100644 crates/swc/tests/fixture/issues-8xxx/8484/input/1.js create mode 100644 crates/swc/tests/fixture/issues-8xxx/8484/output/1.js diff --git a/crates/swc/tests/fixture/issues-8xxx/8484/input/.swcrc b/crates/swc/tests/fixture/issues-8xxx/8484/input/.swcrc new file mode 100644 index 000000000000..9e546b0fd3c6 --- /dev/null +++ b/crates/swc/tests/fixture/issues-8xxx/8484/input/.swcrc @@ -0,0 +1,65 @@ +{ + "jsc": { + "parser": { + "syntax": "ecmascript", + "jsx": true, + }, + "target": "es2022", + "transform": { + "react": { + "development": true + } + }, + "minify": { + "compress": { + "arguments": false, + "arrows": true, + "booleans": true, + "booleans_as_integers": false, + "collapse_vars": true, + "comparisons": true, + "computed_props": true, + "conditionals": true, + "dead_code": true, + "directives": true, + "drop_console": false, + "drop_debugger": true, + "evaluate": true, + "expression": false, + "hoist_funs": false, + "hoist_props": true, + "hoist_vars": false, + "if_return": true, + "join_vars": true, + "keep_classnames": false, + "keep_fargs": true, + "keep_fnames": false, + "keep_infinity": false, + "loops": true, + "negate_iife": true, + "properties": true, + "reduce_funcs": false, + "reduce_vars": false, + "side_effects": true, + "switches": true, + "typeofs": true, + "unsafe": false, + "unsafe_arrows": false, + "unsafe_comps": false, + "unsafe_Function": false, + "unsafe_math": false, + "unsafe_symbols": false, + "unsafe_methods": false, + "unsafe_proto": false, + "unsafe_regexp": false, + "unsafe_undefined": false, + "unused": true, + "const_to_let": true, + "pristine_globals": true + }, + "mangle": false, + "inlineSourcesContent": false + } + }, + "minify": false, +} \ No newline at end of file diff --git a/crates/swc/tests/fixture/issues-8xxx/8484/input/1.js b/crates/swc/tests/fixture/issues-8xxx/8484/input/1.js new file mode 100644 index 000000000000..7d4aaa1c4a43 --- /dev/null +++ b/crates/swc/tests/fixture/issues-8xxx/8484/input/1.js @@ -0,0 +1 @@ +console.log(`\t`) diff --git a/crates/swc/tests/fixture/issues-8xxx/8484/output/1.js b/crates/swc/tests/fixture/issues-8xxx/8484/output/1.js new file mode 100644 index 000000000000..f42124346f8a --- /dev/null +++ b/crates/swc/tests/fixture/issues-8xxx/8484/output/1.js @@ -0,0 +1 @@ +console.log(" "); diff --git a/crates/swc_ecma_minifier/src/compress/pure/strings.rs b/crates/swc_ecma_minifier/src/compress/pure/strings.rs index 0bde9693057c..36ab38a58ad8 100644 --- a/crates/swc_ecma_minifier/src/compress/pure/strings.rs +++ b/crates/swc_ecma_minifier/src/compress/pure/strings.rs @@ -222,8 +222,12 @@ impl Pure<'_> { let value = c .replace("\\`", "`") .replace("\\$", "$") + .replace("\\b", "\u{0008}") + .replace("\\f", "\u{000C}") .replace("\\n", "\n") .replace("\\r", "\r") + .replace("\\t", "\t") + .replace("\\v", "\u{000B}") .replace("\\\\", "\\"); report_change!("converting a template literal to a string literal");