From 1fe5c3a803daf247709ac51f8c637ba7e56181bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Thu, 13 Apr 2023 15:58:43 +0900 Subject: [PATCH] feat(es): Use `minify.format.ascii_only` if `output.charset` is not specified (#7258) **Related issue:** - Closes https://github.com/swc-project/swc/issues/7240. --- crates/swc/src/config/mod.rs | 10 +++++- .../fixture/issues-7xxx/7240/input/.swcrc | 33 +++++++++++++++++++ .../fixture/issues-7xxx/7240/input/index.js | 5 +++ .../fixture/issues-7xxx/7240/output/index.js | 13 ++++++++ 4 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 crates/swc/tests/fixture/issues-7xxx/7240/input/.swcrc create mode 100644 crates/swc/tests/fixture/issues-7xxx/7240/input/index.js create mode 100644 crates/swc/tests/fixture/issues-7xxx/7240/output/index.js diff --git a/crates/swc/src/config/mod.rs b/crates/swc/src/config/mod.rs index 9b1dbae148a4..81d56b6d1b33 100644 --- a/crates/swc/src/config/mod.rs +++ b/crates/swc/src/config/mod.rs @@ -577,6 +577,14 @@ impl Options { _ => TsImportExportAssignConfig::Classic, }; + let charset = cfg.jsc.output.charset.or_else(|| { + if js_minify.as_ref()?.format.ascii_only { + Some(OutputCharset::Ascii) + } else { + None + } + }); + let pass = PassBuilder::new( cm, handler, @@ -782,7 +790,7 @@ impl Options { comments: comments.cloned(), preserve_comments, emit_source_map_columns: cfg.emit_source_map_columns.into_bool(), - output: cfg.jsc.output, + output: JscOutputConfig { charset }, }) } } diff --git a/crates/swc/tests/fixture/issues-7xxx/7240/input/.swcrc b/crates/swc/tests/fixture/issues-7xxx/7240/input/.swcrc new file mode 100644 index 000000000000..0b9b2b894465 --- /dev/null +++ b/crates/swc/tests/fixture/issues-7xxx/7240/input/.swcrc @@ -0,0 +1,33 @@ +{ + "jsc": { + "parser": { + "syntax": "ecmascript", + "jsx": false + }, + "target": "es5", + "loose": true, + "minify": { + "compress": { + "dead_code": true, + "drop_console": true, + "drop_debugger": true, + "passes": 3 + }, + "format": { + "asciiOnly": true + }, + "mangle": { + "toplevel": false, + "keep_classnames": false, + "keep_fnames": false, + "keep_private_props": false, + "ie8": false, + "safari10": false + } + } + }, + "module": { + "type": "commonjs" + }, + "isModule": true +} \ No newline at end of file diff --git a/crates/swc/tests/fixture/issues-7xxx/7240/input/index.js b/crates/swc/tests/fixture/issues-7xxx/7240/input/index.js new file mode 100644 index 000000000000..9f3bf303445e --- /dev/null +++ b/crates/swc/tests/fixture/issues-7xxx/7240/input/index.js @@ -0,0 +1,5 @@ +export default { + \u3131: '\u11B0', + '\u3141': '\u11B1', + ['\u3142']: '\u11B2', +} diff --git a/crates/swc/tests/fixture/issues-7xxx/7240/output/index.js b/crates/swc/tests/fixture/issues-7xxx/7240/output/index.js new file mode 100644 index 000000000000..240bd27309fd --- /dev/null +++ b/crates/swc/tests/fixture/issues-7xxx/7240/output/index.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: !0 +}), Object.defineProperty(exports, "default", { + enumerable: !0, + get: function() { + return _default; + } +}); +var _obj, _default = ((_obj = { + \u3131: "\u11B0", + \u3141: "\u11B1" +})["\u3142"] = "\u11B2", _obj);