Set ascii_only for swc emit#9243
Conversation
| swc_core::ecma::codegen::Config::default().with_target(swc_core::ecma::ast::EsVersion::Es5); | ||
| let config = swc_core::ecma::codegen::Config::default() | ||
| .with_target(swc_core::ecma::ast::EsVersion::Es5) | ||
| .with_ascii_only(true); |
There was a problem hiding this comment.
Does this also affect pre-existing unicode characters? E.g. does it turn '🙂' into '\uD83D\uDE42'?
There was a problem hiding this comment.
You're right. So I think we shouldn't actually do this.
This leads to the question: if Chrome allows 🙂, then why does it not allow some other unicode that is probably equally valid? (Unless it isn't valid which is what I asked about here)
There was a problem hiding this comment.
What changed in 2.7 that caused this issue in the first place?
There was a problem hiding this comment.
Probably a swc upgrade.
Input: ["\u0085", "\u200b", "\ufffe", "🙂"];
With 2.6.2: ["\x85", "\u200B", "\uFFFE", "\uD83D\uDE42"]
With 2.7.0: ["\x85", "", "�", "\uD83D\uDE42"]
With 2.9.0: ["\x85", "", "�", "\uD83D\uDE42"]
So your concern is already the case, it just doesn't happen for single-codepoint characters (or something like that)
does it turn
'🙂'into'\uD83D\uDE42'?
There was a problem hiding this comment.
So yeah, this PR would restore the behavior from 2.6.2, which is perfectly fine to me and hasn't bothered anyone since.
c5e6f5f to
c4f1ce1
Compare
Benchmark ResultsKitchen Sink ✅
Timings
Cold Bundles
Cached Bundles
React HackerNews ✅
Timings
Cold Bundles
Cached BundlesNo bundle changes detected. AtlasKit Editor ✅
Timings
Cold Bundles
Cached BundlesNo bundle changes detected. Three.js ✅
Timings
Cold Bundles
Cached Bundles
|
Closes #8877
Don't replace unicode escape sequences with the corresponding unicode character, but leave that to the optimizer (which makes it possible to disable the replacement with a terserrc)
This was the case some time ago