Skip to content

Commit c43a4d1

Browse files
authored
Turbopack: add flags to AvailabilityInfo (#85771)
### What? Change AvailabilityInfo from an enum to a struct with flags.
1 parent 6499a15 commit c43a4d1

File tree

14 files changed

+70
-64
lines changed

14 files changed

+70
-64
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/next-api/src/app.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1247,7 +1247,7 @@ impl AppEndpoint {
12471247
client_shared_chunk_group.assets.owned().await?,
12481248
)
12491249
} else {
1250-
(AvailabilityInfo::Root, vec![])
1250+
(AvailabilityInfo::root(), vec![])
12511251
};
12521252

12531253
let per_page_module_graph = *project.per_page_module_graph().await?;
@@ -1710,7 +1710,7 @@ impl AppEndpoint {
17101710
.collect(),
17111711
),
17121712
module_graph,
1713-
AvailabilityInfo::Root,
1713+
AvailabilityInfo::root(),
17141714
);
17151715

17161716
let chunk_group2_assets = chunking_context.evaluated_chunk_group_assets(
@@ -1752,7 +1752,7 @@ impl AppEndpoint {
17521752
// TODO this should be ChunkGroup::Shared
17531753
ChunkGroup::Entry(server_utils),
17541754
module_graph,
1755-
AvailabilityInfo::Root,
1755+
AvailabilityInfo::root(),
17561756
)
17571757
.to_resolved()
17581758
.await?;

crates/next-api/src/instrumentation.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ impl InstrumentationEndpoint {
107107
module.ident(),
108108
ChunkGroup::Entry(vec![module]),
109109
module_graph,
110-
AvailabilityInfo::Root,
110+
AvailabilityInfo::root(),
111111
))
112112
}
113113

@@ -134,7 +134,7 @@ impl InstrumentationEndpoint {
134134
module_graph,
135135
OutputAssets::empty(),
136136
OutputAssets::empty(),
137-
AvailabilityInfo::Root,
137+
AvailabilityInfo::root(),
138138
)
139139
.await?;
140140
Ok(*chunk)

crates/next-api/src/middleware.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ impl MiddlewareEndpoint {
119119
module.ident(),
120120
ChunkGroup::Entry(vec![module]),
121121
module_graph,
122-
AvailabilityInfo::Root,
122+
AvailabilityInfo::root(),
123123
);
124124
Ok(edge_chunk_grou)
125125
}
@@ -147,7 +147,7 @@ impl MiddlewareEndpoint {
147147
module_graph,
148148
OutputAssets::empty(),
149149
OutputAssets::empty(),
150-
AvailabilityInfo::Root,
150+
AvailabilityInfo::root(),
151151
)
152152
.await?;
153153
Ok(*chunk)

crates/next-api/src/pages.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -781,7 +781,7 @@ impl PageEndpoint {
781781
AssetIdent::from_path(this.page.await?.base_path.clone()),
782782
ChunkGroup::Entry(evaluatable_assets),
783783
module_graph,
784-
AvailabilityInfo::Root,
784+
AvailabilityInfo::root(),
785785
);
786786

787787
Ok(client_chunk_group)

crates/next-core/src/next_app/app_client_shared_chunks.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ pub async fn get_app_client_shared_chunk_group(
3333
.collect(),
3434
),
3535
module_graph,
36-
AvailabilityInfo::Root,
36+
AvailabilityInfo::root(),
3737
)
3838
.resolve()
3939
.await

turbopack/crates/turbopack-browser/src/chunking_context.rs

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -680,15 +680,9 @@ impl ChunkingContext for BrowserChunkingContext {
680680

681681
if this.enable_hot_module_replacement {
682682
let mut ident = ident;
683-
match input_availability_info {
684-
AvailabilityInfo::Root => {}
685-
AvailabilityInfo::Untracked => {
686-
ident = ident.with_modifier(rcstr!("untracked"));
687-
}
688-
AvailabilityInfo::Complete { available_modules } => {
689-
ident =
690-
ident.with_modifier(available_modules.hash().await?.to_string().into());
691-
}
683+
if let Some(input_availability_info_ident) = input_availability_info.ident().await?
684+
{
685+
ident = ident.with_modifier(input_availability_info_ident);
692686
}
693687
let other_assets = Vc::cell(assets.clone());
694688
assets.push(
@@ -764,15 +758,9 @@ impl ChunkingContext for BrowserChunkingContext {
764758

765759
if this.enable_hot_module_replacement {
766760
let mut ident = ident;
767-
match input_availability_info {
768-
AvailabilityInfo::Root => {}
769-
AvailabilityInfo::Untracked => {
770-
ident = ident.with_modifier(rcstr!("untracked"));
771-
}
772-
AvailabilityInfo::Complete { available_modules } => {
773-
ident =
774-
ident.with_modifier(available_modules.hash().await?.to_string().into());
775-
}
761+
if let Some(input_availability_info_ident) = input_availability_info.ident().await?
762+
{
763+
ident = ident.with_modifier(input_availability_info_ident);
776764
}
777765
assets.push(
778766
self.generate_chunk_list_register_chunk(

turbopack/crates/turbopack-cli/src/build/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -444,7 +444,7 @@ async fn build_internal(
444444
[ResolvedVc::upcast(ecmascript)].into_iter().collect(),
445445
),
446446
module_graph,
447-
AvailabilityInfo::Root,
447+
AvailabilityInfo::root(),
448448
),
449449
Target::Node => OutputAssetsWithReferenced {
450450
assets: ResolvedVc::cell(vec![
@@ -464,7 +464,7 @@ async fn build_internal(
464464
module_graph,
465465
OutputAssets::empty(),
466466
OutputAssets::empty(),
467-
AvailabilityInfo::Root,
467+
AvailabilityInfo::root(),
468468
)
469469
.await?
470470
.asset,

turbopack/crates/turbopack-core/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ workspace = true
1616
anyhow = { workspace = true }
1717
async-trait = { workspace = true }
1818
auto-hash-map = { workspace = true }
19+
bitfield = { workspace = true }
1920
browserslist-rs = { workspace = true }
2021
bytes-str = { workspace = true }
2122
const_format = { workspace = true }
Lines changed: 42 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
11
use anyhow::Result;
2+
use bitfield::bitfield;
23
use serde::{Deserialize, Serialize};
4+
use turbo_rcstr::RcStr;
35
use turbo_tasks::{NonLocalValue, ResolvedVc, TaskInput, Vc, trace::TraceRawVcs};
46

57
use super::available_modules::{AvailableModules, AvailableModulesSet};
68

9+
bitfield! {
10+
#[derive(Clone, Copy, Default, TaskInput, TraceRawVcs, NonLocalValue, Serialize, Deserialize, PartialEq, Eq, Hash)]
11+
pub struct AvailabilityFlags(u8);
12+
impl Debug;
13+
}
14+
715
#[derive(
816
Eq,
917
PartialEq,
@@ -17,40 +25,48 @@ use super::available_modules::{AvailableModules, AvailableModulesSet};
1725
Serialize,
1826
Deserialize,
1927
)]
20-
pub enum AvailabilityInfo {
21-
/// Availability of modules is not tracked
22-
Untracked,
23-
/// Availability of modules is tracked, but no modules are available
24-
Root,
28+
pub struct AvailabilityInfo {
29+
flags: AvailabilityFlags,
2530
/// There are modules already available.
26-
Complete {
27-
available_modules: ResolvedVc<AvailableModules>,
28-
},
31+
available_modules: Option<ResolvedVc<AvailableModules>>,
2932
}
3033

3134
impl AvailabilityInfo {
32-
pub fn available_modules(&self) -> Option<ResolvedVc<AvailableModules>> {
33-
match self {
34-
Self::Untracked => None,
35-
Self::Root => None,
36-
Self::Complete {
37-
available_modules, ..
38-
} => Some(*available_modules),
35+
pub fn root() -> Self {
36+
Self {
37+
flags: AvailabilityFlags::default(),
38+
available_modules: None,
3939
}
4040
}
4141

42+
pub fn available_modules(&self) -> Option<ResolvedVc<AvailableModules>> {
43+
self.available_modules
44+
}
45+
4246
pub async fn with_modules(self, modules: Vc<AvailableModulesSet>) -> Result<Self> {
43-
Ok(match self {
44-
AvailabilityInfo::Untracked => AvailabilityInfo::Untracked,
45-
AvailabilityInfo::Root => AvailabilityInfo::Complete {
46-
available_modules: AvailableModules::new(modules).to_resolved().await?,
47-
},
48-
AvailabilityInfo::Complete { available_modules } => AvailabilityInfo::Complete {
49-
available_modules: available_modules
50-
.with_modules(modules)
51-
.to_resolved()
52-
.await?,
53-
},
47+
Ok(if let Some(available_modules) = self.available_modules {
48+
Self {
49+
flags: self.flags,
50+
available_modules: Some(
51+
available_modules
52+
.with_modules(modules)
53+
.to_resolved()
54+
.await?,
55+
),
56+
}
57+
} else {
58+
Self {
59+
flags: self.flags,
60+
available_modules: Some(AvailableModules::new(modules).to_resolved().await?),
61+
}
62+
})
63+
}
64+
65+
pub async fn ident(&self) -> Result<Option<RcStr>> {
66+
Ok(if let Some(available_modules) = self.available_modules {
67+
Some(available_modules.hash().await?.to_string().into())
68+
} else {
69+
None
5470
})
5571
}
5672
}

0 commit comments

Comments
 (0)