Skip to content

Commit 60fb2f1

Browse files
authored
build(turbopack): Update swc_core to v27.0.1 (#80338)
### What? ChangeLog: swc-project/swc@[email protected][email protected] ChangeLog for plugins: swc-project/plugins#466 ### Why? Apply `swc_sourcemap` performance optimization.
1 parent 4e71be3 commit 60fb2f1

File tree

16 files changed

+312
-369
lines changed

16 files changed

+312
-369
lines changed

Cargo.lock

Lines changed: 193 additions & 280 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ opt-level = "s"
162162
[profile.release.package.zstd-sys]
163163
opt-level = 3
164164

165-
[profile.release.package.sourcemap]
165+
[profile.release.package.swc_sourcemap]
166166
opt-level = 3
167167

168168
[profile.release.package.turbopack-wasm]
@@ -292,21 +292,21 @@ turbopack-trace-utils = { path = "turbopack/crates/turbopack-trace-utils" }
292292
turbopack-wasm = { path = "turbopack/crates/turbopack-wasm" }
293293

294294
# SWC crates
295-
swc_core = { version = "26.4.4", features = [
295+
swc_core = { version = "27.0.1", features = [
296296
"ecma_loader_lru",
297297
"ecma_loader_parking_lot",
298298
"parallel_rayon",
299299
] }
300-
testing = { version = "12.0.0" }
300+
testing = { version = "13.0.0" }
301301

302302
# Keep consistent with preset_env_base through swc_core
303303
browserslist-rs = { version = "0.18.0" }
304304
mdxjs = "1.0.3"
305-
modularize_imports = { version = "0.86.0" }
306-
styled_components = { version = "0.114.0" }
307-
styled_jsx = { version = "0.90.3" }
308-
swc_emotion = { version = "0.90.0" }
309-
swc_relay = { version = "0.60.0" }
305+
modularize_imports = { version = "0.87.0" }
306+
styled_components = { version = "0.115.0" }
307+
styled_jsx = { version = "0.91.1" }
308+
swc_emotion = { version = "0.91.0" }
309+
swc_relay = { version = "0.61.0" }
310310

311311
# General Deps
312312
chromiumoxide = { version = "0.5.4", features = [
@@ -328,6 +328,7 @@ async-compression = { version = "0.3.13", default-features = false, features = [
328328
async-trait = "0.1.64"
329329
bitfield = "0.18.0"
330330
bytes = "1.1.0"
331+
bytes-str = "0.2.6"
331332
chrono = "0.4.23"
332333
clap = { version = "4.5.2", features = ["derive"] }
333334
concurrent-queue = "2.5.0"
@@ -402,7 +403,7 @@ smallvec = { version = "1.13.1", features = [
402403
"union",
403404
"const_new",
404405
] }
405-
sourcemap = "9.2.2"
406+
swc_sourcemap = "9.2.2"
406407
strsim = "0.11.1"
407408
shrink-to-fit = "0.2.10"
408409
syn = "2.0.100"
@@ -422,4 +423,4 @@ vergen-gitcl = { version = "1.0.8", features = ["cargo"] }
422423
webbrowser = "0.8.7"
423424

424425
[patch.crates-io]
425-
sourcemap = { git = "https://github.com/kdy1/rust-sourcemap", branch = "main" }
426+
mdxjs = { git = "https://github.com/kdy1/mdxjs-rs.git", branch = "swc-core-27" }

crates/next-core/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ lazy_static = { workspace = true }
3232
thiserror = { workspace = true }
3333
tracing = { workspace = true }
3434
rustc-hash = { workspace = true }
35-
react_remove_properties = "0.40.0"
36-
remove_console = "0.41.0"
35+
react_remove_properties = "0.41.0"
36+
remove_console = "0.42.0"
3737
itertools = { workspace = true }
3838
percent-encoding = "2.3.1"
3939
serde_path_to_error = { workspace = true }

crates/next-custom-transforms/Cargo.toml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ workspace = true
2222

2323
[dependencies]
2424
base64 = "0.21.0"
25+
bytes-str = { workspace = true }
2526
chrono = "0.4"
2627
easy-error = "1.0.0"
2728
either = "1"
@@ -67,8 +68,8 @@ turbopack-ecmascript-plugins = { workspace = true, optional = true }
6768
turbo-rcstr = { workspace = true }
6869
urlencoding = { workspace = true }
6970

70-
react_remove_properties = "0.40.0"
71-
remove_console = "0.41.0"
71+
react_remove_properties = "0.41.0"
72+
remove_console = "0.42.0"
7273
preset_env_base = "3.0.1"
7374

7475
[dev-dependencies]

crates/next-custom-transforms/src/react_compiler.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,8 @@ mod tests {
138138

139139
fn assert_required(code: &str, required: bool) {
140140
run_test2(false, |cm, _| {
141-
let fm = cm.new_source_file(FileName::Custom("test.tsx".into()).into(), code.into());
141+
let fm =
142+
cm.new_source_file(FileName::Custom("test.tsx".into()).into(), code.to_string());
142143

143144
let program = parse_file_as_program(
144145
&fm,

crates/next-custom-transforms/tests/fixture.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ use std::{
22
env::current_dir,
33
iter::FromIterator,
44
path::{Path, PathBuf},
5-
sync::Arc,
65
};
76

7+
use bytes_str::BytesStr;
88
use next_custom_transforms::transforms::{
99
amp_attributes::amp_attributes,
1010
cjs_optimizer::cjs_optimizer,
@@ -366,8 +366,8 @@ fn next_ssg_fixture(input: PathBuf) {
366366
next: false.into(),
367367
runtime: None,
368368
import_source: Some("".into()),
369-
pragma: Some(Arc::new("__jsx".into())),
370-
pragma_frag: Some(Arc::new("__jsxFrag".into())),
369+
pragma: Some(BytesStr::from_str_slice("__jsx")),
370+
pragma_frag: Some(BytesStr::from_str_slice("__jsxFrag")),
371371
throw_if_namespace: false.into(),
372372
development: false.into(),
373373
refresh: Default::default(),
@@ -802,8 +802,8 @@ fn run_stip_page_exports_test(input: &Path, output: &Path, mode: ExportFilter) {
802802
next: false.into(),
803803
runtime: None,
804804
import_source: Some("".into()),
805-
pragma: Some(Arc::new("__jsx".into())),
806-
pragma_frag: Some(Arc::new("__jsxFrag".into())),
805+
pragma: Some(BytesStr::from_str_slice("__jsx")),
806+
pragma_frag: Some(BytesStr::from_str_slice("__jsxFrag")),
807807
throw_if_namespace: false.into(),
808808
development: false.into(),
809809
..Default::default()

crates/wasm/src/lib.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ pub fn minify_sync(s: JsString, opts: JsValue) -> Result<JsValue, JsValue> {
4040
},
4141
|handler| {
4242
GLOBALS.set(&Default::default(), || {
43-
let fm = c.cm.new_source_file(FileName::Anon.into(), s.into());
43+
let fm = c.cm.new_source_file(FileName::Anon.into(), String::from(s));
4444
let program = c
4545
.minify(fm, handler, &opts, Default::default())
4646
.context("failed to minify file")?;
@@ -89,7 +89,7 @@ pub fn transform_sync(s: JsValue, opts: JsValue) -> Result<JsValue, JsValue> {
8989
} else {
9090
FileName::Real(opts.swc.filename.clone().into()).into()
9191
},
92-
s.into(),
92+
String::from(s),
9393
);
9494
let cm = c.cm.clone();
9595
let file = fm.clone();
@@ -154,7 +154,7 @@ pub fn parse_sync(s: JsString, opts: JsValue) -> Result<JsValue, JsValue> {
154154
|handler| {
155155
c.run(|| {
156156
GLOBALS.set(&Default::default(), || {
157-
let fm = c.cm.new_source_file(FileName::Anon.into(), s.into());
157+
let fm = c.cm.new_source_file(FileName::Anon.into(), String::from(s));
158158

159159
let cmts = c.comments().clone();
160160
let comments = if opts.comments {

turbopack/crates/turbo-rcstr/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ serde = { workspace = true }
1616
new_debug_unreachable = "1.0.6"
1717
shrink-to-fit = { workspace = true }
1818
rustc-hash = { workspace = true }
19+
bytes-str = { workspace = true }
1920

2021
[target.'cfg(not(target_family = "wasm"))'.dependencies]
2122
napi = { workspace = true, optional = true }

turbopack/crates/turbo-rcstr/src/lib.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use std::{
99
path::{Path, PathBuf},
1010
};
1111

12+
use bytes_str::BytesStr;
1213
use debug_unreachable::debug_unreachable;
1314
use serde::{Deserialize, Deserializer, Serialize, Serializer};
1415
use shrink_to_fit::ShrinkToFit;
@@ -160,6 +161,16 @@ impl Borrow<str> for RcStr {
160161
}
161162
}
162163

164+
impl From<BytesStr> for RcStr {
165+
fn from(s: BytesStr) -> Self {
166+
let bytes: Vec<u8> = s.into_bytes().into();
167+
RcStr::from(unsafe {
168+
// Safety: BytesStr are valid utf-8
169+
String::from_utf8_unchecked(bytes)
170+
})
171+
}
172+
}
173+
163174
impl From<Arc<String>> for RcStr {
164175
fn from(s: Arc<String>) -> Self {
165176
match Arc::try_unwrap(s) {

turbopack/crates/turbopack-core/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ serde = { workspace = true, features = ["rc"] }
3434
serde_bytes = { workspace = true }
3535
serde_json = { workspace = true, features = ["preserve_order"] }
3636
smallvec = { workspace = true }
37-
sourcemap = { workspace = true }
37+
swc_sourcemap = { workspace = true }
3838
swc_core = { workspace = true, features = ["ecma_preset_env", "common"] }
3939
tracing = { workspace = true }
4040
turbo-prehash = { workspace = true }
@@ -44,6 +44,7 @@ turbo-tasks-env = { workspace = true }
4444
turbo-tasks-fs = { workspace = true }
4545
turbo-tasks-hash = { workspace = true }
4646
urlencoding = { workspace = true }
47+
bytes-str = { workspace = true }
4748

4849
[build-dependencies]
4950
turbo-tasks-build = { workspace = true }

turbopack/crates/turbopack-core/src/source_map/mod.rs

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
use std::{borrow::Cow, io::Write, ops::Deref, sync::Arc};
22

33
use anyhow::Result;
4+
use bytes_str::BytesStr;
45
use once_cell::sync::Lazy;
56
use ref_cast::RefCast;
67
use regex::Regex;
78
use serde::{Deserialize, Deserializer, Serialize, Serializer};
8-
use sourcemap::{DecodedMap, SourceMap as RegularMap, SourceMapBuilder, SourceMapIndex};
9+
use swc_sourcemap::{DecodedMap, SourceMap as RegularMap, SourceMapBuilder, SourceMapIndex};
910
use turbo_rcstr::RcStr;
1011
use turbo_tasks::{ResolvedVc, TryJoinIterExt, ValueToString, Vc};
1112
use turbo_tasks_fs::{
@@ -148,18 +149,20 @@ impl Token {
148149
}
149150
}
150151

151-
impl From<sourcemap::Token<'_>> for Token {
152-
fn from(t: sourcemap::Token) -> Self {
152+
impl From<swc_sourcemap::Token<'_>> for Token {
153+
fn from(t: swc_sourcemap::Token) -> Self {
153154
if t.has_source() {
154155
Token::Original(OriginalToken {
155156
generated_line: t.get_dst_line(),
156157
generated_column: t.get_dst_col(),
157158
original_file: RcStr::from(
158-
t.get_source().expect("already checked token has source"),
159+
t.get_source()
160+
.expect("already checked token has source")
161+
.clone(),
159162
),
160163
original_line: t.get_src_line(),
161164
original_column: t.get_src_col(),
162-
name: t.get_name().map(RcStr::from),
165+
name: t.get_name().cloned().map(RcStr::from),
163166
})
164167
} else {
165168
Token::Synthetic(SyntheticToken {
@@ -171,12 +174,12 @@ impl From<sourcemap::Token<'_>> for Token {
171174
}
172175
}
173176

174-
impl TryInto<sourcemap::RawToken> for Token {
177+
impl TryInto<swc_sourcemap::RawToken> for Token {
175178
type Error = std::num::ParseIntError;
176179

177-
fn try_into(self) -> Result<sourcemap::RawToken, Self::Error> {
180+
fn try_into(self) -> Result<swc_sourcemap::RawToken, Self::Error> {
178181
Ok(match self {
179-
Self::Original(t) => sourcemap::RawToken {
182+
Self::Original(t) => swc_sourcemap::RawToken {
180183
dst_col: t.generated_column,
181184
dst_line: t.generated_line,
182185
name_id: match t.name {
@@ -188,7 +191,7 @@ impl TryInto<sourcemap::RawToken> for Token {
188191
src_id: t.original_file.parse()?,
189192
is_range: false,
190193
},
191-
Self::Synthetic(t) => sourcemap::RawToken {
194+
Self::Synthetic(t) => swc_sourcemap::RawToken {
192195
dst_col: t.generated_column,
193196
dst_line: t.generated_line,
194197
name_id: SOURCEMAP_CRATE_NONE_U32,
@@ -273,13 +276,13 @@ impl SourceMap {
273276
.sections
274277
.iter()
275278
.map(|s| {
276-
sourcemap::SourceMapSection::new(
279+
swc_sourcemap::SourceMapSection::new(
277280
(s.offset.line, s.offset.column),
278281
None,
279282
Some(s.map.0.clone()),
280283
)
281284
})
282-
.collect::<Vec<sourcemap::SourceMapSection>>();
285+
.collect::<Vec<swc_sourcemap::SourceMapSection>>();
283286
Arc::new(CrateMapWrapper(DecodedMap::Index(SourceMapIndex::new(
284287
None, sections,
285288
))))
@@ -406,10 +409,10 @@ impl SourceMap {
406409

407410
pub async fn with_resolved_sources(&self, origin: Vc<FileSystemPath>) -> Result<Self> {
408411
async fn resolve_source(
409-
source_request: Arc<str>,
410-
source_content: Option<Arc<str>>,
412+
source_request: BytesStr,
413+
source_content: Option<BytesStr>,
411414
origin: Vc<FileSystemPath>,
412-
) -> Result<(Arc<str>, Arc<str>)> {
415+
) -> Result<(BytesStr, BytesStr)> {
413416
Ok(
414417
if let Some(path) = *origin.parent().try_join((&*source_request).into()).await? {
415418
let path_str = path.to_string().await?;
@@ -448,14 +451,14 @@ impl SourceMap {
448451
origin: Vc<FileSystemPath>,
449452
) -> Result<RegularMap> {
450453
let map = &map.0;
451-
let file = map.get_file().map(Arc::<str>::from);
454+
let file = map.get_file().cloned();
452455
let tokens = map.tokens().map(|t| t.get_raw_token()).collect();
453-
let names = map.names().map(Arc::<str>::from).collect();
456+
let names = map.names().cloned().collect();
454457
let count = map.get_source_count() as usize;
455-
let sources = map.sources().map(Arc::<str>::from).collect::<Vec<_>>();
458+
let sources = map.sources().cloned().collect::<Vec<_>>();
456459
let source_contents = map
457460
.source_contents()
458-
.map(|s| s.map(Arc::<str>::from))
461+
.map(|s| s.cloned())
459462
.collect::<Vec<_>>();
460463
let mut new_sources = Vec::with_capacity(count);
461464
let mut new_source_contents = Vec::with_capacity(count);
@@ -482,7 +485,7 @@ impl SourceMap {
482485
}
483486
DecodedMap::Index(map) => {
484487
let count = map.get_section_count() as usize;
485-
let file = map.get_file().map(ToString::to_string);
488+
let file = map.get_file().cloned();
486489
let sections = map
487490
.sections()
488491
.filter_map(|section| {
@@ -503,7 +506,7 @@ impl SourceMap {
503506
.await?;
504507
let mut new_sections = Vec::with_capacity(count);
505508
for (offset, map) in sections {
506-
new_sections.push(sourcemap::SourceMapSection::new(
509+
new_sections.push(swc_sourcemap::SourceMapSection::new(
507510
offset,
508511
// Urls are deprecated and we don't accept them
509512
None,
@@ -573,7 +576,7 @@ impl SourceMap {
573576
&& let DecodedMap::Regular(map) = &map.map.0
574577
&& map.get_source_count() == 1
575578
{
576-
let source = map.sources().next().unwrap();
579+
let source = map.sources().next().unwrap().clone();
577580
*guessed_original_file = Some(RcStr::from(source));
578581
}
579582

@@ -588,7 +591,10 @@ impl SourceMap {
588591
let content = map.get_source_contents(src_id);
589592

590593
let (name, content) = name.zip(content)?;
591-
Some(sourcemap_content_source(name.into(), content.into()))
594+
Some(sourcemap_content_source(
595+
name.clone().into(),
596+
content.clone().into(),
597+
))
592598
});
593599
}
594600

turbopack/crates/turbopack-core/src/source_map/utils.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use turbo_tasks_fs::{
1212

1313
use crate::SOURCE_URL_PROTOCOL;
1414

15-
pub fn add_default_ignore_list(map: &mut sourcemap::SourceMap) {
15+
pub fn add_default_ignore_list(map: &mut swc_sourcemap::SourceMap) {
1616
let mut ignored_ids = HashSet::new();
1717

1818
for (source_id, source) in map.sources().enumerate() {

turbopack/crates/turbopack-css/src/process.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -588,11 +588,11 @@ fn generate_css_source_map(source_map: &parcel_sourcemap::SourceMap) -> Result<R
588588
let mut builder = SourceMapBuilder::new(None);
589589

590590
for src in source_map.get_sources() {
591-
builder.add_source(&format!("{SOURCE_URL_PROTOCOL}///{src}"));
591+
builder.add_source(format!("{SOURCE_URL_PROTOCOL}///{src}").into());
592592
}
593593

594594
for (idx, content) in source_map.get_sources_content().iter().enumerate() {
595-
builder.set_source_contents(idx as _, Some(content));
595+
builder.set_source_contents(idx as _, Some(content.clone().into()));
596596
}
597597

598598
for m in source_map.get_mappings() {

0 commit comments

Comments
 (0)