Skip to content

Commit 7c7032a

Browse files
committed
ChunkGroup in evaluated_chunk_group
1 parent 44eb790 commit 7c7032a

File tree

12 files changed

+128
-101
lines changed

12 files changed

+128
-101
lines changed

crates/next-api/src/app.rs

+11-7
Original file line numberDiff line numberDiff line change
@@ -1652,23 +1652,27 @@ impl AppEndpoint {
16521652
} = *chunking_context
16531653
.evaluated_chunk_group(
16541654
server_action_manifest_loader.ident(),
1655-
Vc::cell(vec![server_action_manifest_loader]),
1655+
ChunkGroup::Entry(
1656+
[ResolvedVc::upcast(server_action_manifest_loader)]
1657+
.into_iter()
1658+
.collect(),
1659+
),
16561660
module_graph,
16571661
Value::new(AvailabilityInfo::Root),
16581662
)
16591663
.await?;
16601664

1661-
let mut evaluatable_assets =
1662-
this.app_project.edge_rsc_runtime_entries().owned().await?;
1663-
let evaluatable = ResolvedVc::try_sidecast(app_entry.rsc_entry)
1664-
.context("Entry module must be evaluatable")?;
1665-
evaluatable_assets.push(evaluatable);
1665+
let edge_rsc_runtime_entries = this.app_project.edge_rsc_runtime_entries().await?;
1666+
let evaluatable_assets = edge_rsc_runtime_entries
1667+
.iter()
1668+
.map(|m| ResolvedVc::upcast(*m))
1669+
.chain(std::iter::once(app_entry.rsc_entry));
16661670

16671671
assets.concatenate(
16681672
chunking_context
16691673
.evaluated_chunk_group_assets(
16701674
app_entry.rsc_entry.ident(),
1671-
Vc::cell(evaluatable_assets.clone()),
1675+
ChunkGroup::Entry(evaluatable_assets.collect()),
16721676
module_graph,
16731677
Value::new(availability_info),
16741678
)

crates/next-api/src/instrumentation.rs

+12-19
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,15 @@ use turbopack_core::{
1717
},
1818
context::AssetContext,
1919
module::Module,
20-
module_graph::{chunk_group_info::ChunkGroupEntry, GraphEntries},
20+
module_graph::{
21+
chunk_group_info::{ChunkGroup, ChunkGroupEntry},
22+
GraphEntries,
23+
},
2124
output::{OutputAsset, OutputAssets},
2225
reference_type::{EntryReferenceSubType, ReferenceType},
2326
source::Source,
2427
virtual_output::VirtualOutputAsset,
2528
};
26-
use turbopack_ecmascript::chunk::EcmascriptChunkPlaceable;
2729

2830
use crate::{
2931
nft_json::NftJsonAsset,
@@ -98,12 +100,11 @@ impl InstrumentationEndpoint {
98100
#[turbo_tasks::function]
99101
async fn edge_files(self: Vc<Self>) -> Result<Vc<OutputAssets>> {
100102
let this = self.await?;
101-
102103
let module = self.core_modules().await?.edge_entry_module;
103104

104105
let module_graph = this.project.module_graph(*module);
105106

106-
let mut evaluatable_assets = get_server_runtime_entries(
107+
let evaluatable_assets = get_server_runtime_entries(
107108
Value::new(ServerContextType::Instrumentation {
108109
app_dir: this.app_dir,
109110
ecmascript_client_reference_transition_name: this
@@ -112,24 +113,16 @@ impl InstrumentationEndpoint {
112113
this.project.next_mode(),
113114
)
114115
.resolve_entries(*this.asset_context)
115-
.owned()
116-
.await?;
117-
118-
let Some(module) = ResolvedVc::try_downcast::<Box<dyn EcmascriptChunkPlaceable>>(module)
119-
else {
120-
bail!("Entry module must be evaluatable");
121-
};
122-
123-
let Some(evaluatable) = ResolvedVc::try_sidecast(module) else {
124-
bail!("Entry module must be evaluatable");
125-
};
126-
evaluatable_assets.push(evaluatable);
116+
.await?
117+
.iter()
118+
.map(|m| ResolvedVc::upcast(*m))
119+
.chain(std::iter::once(module))
120+
.collect();
127121

128122
let edge_chunking_context = this.project.edge_chunking_context(false);
129-
130-
let edge_files = edge_chunking_context.evaluated_chunk_group_assets(
123+
let edge_files: Vc<OutputAssets> = edge_chunking_context.evaluated_chunk_group_assets(
131124
module.ident(),
132-
Vc::cell(evaluatable_assets),
125+
ChunkGroup::Entry(evaluatable_assets),
133126
module_graph,
134127
Value::new(AvailabilityInfo::Root),
135128
);

crates/next-api/src/middleware.rs

+16-23
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use std::future::IntoFuture;
22

3-
use anyhow::{bail, Context, Result};
3+
use anyhow::{bail, Result};
44
use next_core::{
55
all_assets_from_entries,
66
middleware::get_middleware_module,
@@ -17,17 +17,19 @@ use turbopack_core::{
1717
asset::AssetContent,
1818
chunk::{
1919
availability_info::AvailabilityInfo, ChunkingContext, ChunkingContextExt,
20-
EntryChunkGroupResult, EvaluatableAsset,
20+
EntryChunkGroupResult,
2121
},
2222
context::AssetContext,
2323
module::Module,
24-
module_graph::{chunk_group_info::ChunkGroupEntry, GraphEntries},
24+
module_graph::{
25+
chunk_group_info::{ChunkGroup, ChunkGroupEntry},
26+
GraphEntries,
27+
},
2528
output::{OutputAsset, OutputAssets},
2629
reference_type::{EntryReferenceSubType, ReferenceType},
2730
source::Source,
2831
virtual_output::VirtualOutputAsset,
2932
};
30-
use turbopack_ecmascript::chunk::EcmascriptChunkPlaceable;
3133

3234
use crate::{
3335
nft_json::NftJsonAsset,
@@ -103,7 +105,9 @@ impl MiddlewareEndpoint {
103105
#[turbo_tasks::function]
104106
async fn edge_files(self: Vc<Self>) -> Result<Vc<OutputAssets>> {
105107
let this = self.await?;
106-
let module = self.entry_module();
108+
let module = self.entry_module().to_resolved().await?;
109+
110+
let module_graph = this.project.module_graph(*module);
107111

108112
let evaluatable_assets = get_server_runtime_entries(
109113
Value::new(ServerContextType::Middleware {
@@ -113,28 +117,17 @@ impl MiddlewareEndpoint {
113117
}),
114118
this.project.next_mode(),
115119
)
116-
.resolve_entries(*this.asset_context);
117-
118-
let mut evaluatable_assets = evaluatable_assets.owned().await?;
119-
120-
let Some(module) =
121-
Vc::try_resolve_downcast::<Box<dyn EcmascriptChunkPlaceable>>(module).await?
122-
else {
123-
bail!("Entry module must be evaluatable");
124-
};
125-
let evaluatable = Vc::try_resolve_sidecast::<Box<dyn EvaluatableAsset>>(module)
126-
.await?
127-
.context("Entry module must be evaluatable")?;
128-
evaluatable_assets.push(evaluatable.to_resolved().await?);
129-
130-
let evaluatable_assets = Vc::cell(evaluatable_assets);
131-
let module_graph = this.project.module_graph_for_entries(evaluatable_assets);
120+
.resolve_entries(*this.asset_context)
121+
.await?
122+
.iter()
123+
.map(|m| ResolvedVc::upcast(*m))
124+
.chain(std::iter::once(module))
125+
.collect();
132126

133127
let edge_chunking_context = this.project.edge_chunking_context(false);
134-
135128
let edge_files = edge_chunking_context.evaluated_chunk_group_assets(
136129
module.ident(),
137-
evaluatable_assets,
130+
ChunkGroup::Entry(evaluatable_assets),
138131
module_graph,
139132
Value::new(AvailabilityInfo::Root),
140133
);

crates/next-api/src/pages.rs

+17-6
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,10 @@ use turbopack_core::{
5252
file_source::FileSource,
5353
ident::AssetIdent,
5454
module::Module,
55-
module_graph::{chunk_group_info::ChunkGroupEntry, GraphEntries, ModuleGraph},
55+
module_graph::{
56+
chunk_group_info::{ChunkGroup, ChunkGroupEntry},
57+
GraphEntries, ModuleGraph,
58+
},
5659
output::{OptionOutputAsset, OutputAsset, OutputAssets},
5760
reference_type::{EcmaScriptModulesReferenceSubType, EntryReferenceSubType, ReferenceType},
5861
resolve::{origin::PlainResolveOrigin, parse::Request, pattern::Pattern},
@@ -782,10 +785,15 @@ impl PageEndpoint {
782785

783786
let module_graph = self.client_module_graph();
784787

785-
let evaluatable_assets = self.client_evaluatable_assets();
788+
let evaluatable_assets = self
789+
.client_evaluatable_assets()
790+
.await?
791+
.iter()
792+
.map(|m| ResolvedVc::upcast(*m))
793+
.collect();
786794
let client_chunk_group = client_chunking_context.evaluated_chunk_group(
787795
AssetIdent::from_path(*this.page.await?.base_path),
788-
evaluatable_assets,
796+
ChunkGroup::Entry(evaluatable_assets),
789797
module_graph,
790798
Value::new(AvailabilityInfo::Root),
791799
);
@@ -961,13 +969,16 @@ impl PageEndpoint {
961969
.context("could not process page loader entry module")?;
962970
let is_edge = matches!(runtime, NextRuntime::Edge);
963971
if is_edge {
964-
let mut evaluatable_assets = edge_runtime_entries.owned().await?;
965-
evaluatable_assets.push(ssr_module_evaluatable);
972+
let edge_runtime_entries = edge_runtime_entries.await?;
973+
let evaluatable_assets = edge_runtime_entries
974+
.iter()
975+
.map(|m| ResolvedVc::upcast(*m))
976+
.chain(std::iter::once(ResolvedVc::upcast(ssr_module_evaluatable)));
966977

967978
let edge_files = edge_chunking_context
968979
.evaluated_chunk_group_assets(
969980
ssr_module.ident(),
970-
Vc::cell(evaluatable_assets),
981+
ChunkGroup::Entry(evaluatable_assets.collect()),
971982
module_graph,
972983
Value::new(AvailabilityInfo::Root),
973984
)

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

+23-9
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
use anyhow::Result;
2-
use turbo_tasks::{Value, Vc};
2+
use tracing::Instrument;
3+
use turbo_tasks::{ResolvedVc, Value, Vc};
34
use turbopack_core::{
45
chunk::{
56
availability_info::AvailabilityInfo, ChunkGroupResult, ChunkingContext, EvaluatableAssets,
67
},
78
ident::AssetIdent,
8-
module_graph::ModuleGraph,
9+
module_graph::{chunk_group_info::ChunkGroup, ModuleGraph},
910
output::OutputAssets,
1011
};
1112

@@ -24,13 +25,26 @@ pub async fn get_app_client_shared_chunk_group(
2425
.cell());
2526
}
2627

27-
let _span = tracing::trace_span!("app client shared").entered();
28-
let app_client_shared_chunk_grou = client_chunking_context.evaluated_chunk_group(
29-
ident,
30-
app_client_runtime_entries,
31-
module_graph,
32-
Value::new(AvailabilityInfo::Root),
33-
);
28+
let span = tracing::trace_span!("app client shared");
29+
let app_client_shared_chunk_grou = async {
30+
client_chunking_context
31+
.evaluated_chunk_group(
32+
ident,
33+
ChunkGroup::Entry(
34+
app_client_runtime_entries
35+
.await?
36+
.iter()
37+
.map(|v| ResolvedVc::upcast(*v))
38+
.collect(),
39+
),
40+
module_graph,
41+
Value::new(AvailabilityInfo::Root),
42+
)
43+
.resolve()
44+
.await
45+
}
46+
.instrument(span)
47+
.await?;
3448

3549
Ok(app_client_shared_chunk_grou)
3650
}

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

+16-10
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ use turbopack_core::{
1010
chunk_group::{make_chunk_group, MakeChunkGroupResult},
1111
module_id_strategies::{DevModuleIdStrategy, ModuleIdStrategy},
1212
Chunk, ChunkGroupResult, ChunkItem, ChunkableModule, ChunkingConfig, ChunkingConfigs,
13-
ChunkingContext, EntryChunkGroupResult, EvaluatableAssets, MinifyType, ModuleId,
14-
SourceMapsType,
13+
ChunkingContext, EntryChunkGroupResult, EvaluatableAsset, EvaluatableAssets, MinifyType,
14+
ModuleId, SourceMapsType,
1515
},
1616
environment::Environment,
1717
ident::AssetIdent,
@@ -483,7 +483,7 @@ impl ChunkingContext for BrowserChunkingContext {
483483
async fn evaluated_chunk_group(
484484
self: ResolvedVc<Self>,
485485
ident: Vc<AssetIdent>,
486-
evaluatable_assets: Vc<EvaluatableAssets>,
486+
chunk_group: ChunkGroup,
487487
module_graph: Vc<ModuleGraph>,
488488
availability_info: Value<AvailabilityInfo>,
489489
) -> Result<Vc<ChunkGroupResult>> {
@@ -495,11 +495,7 @@ impl ChunkingContext for BrowserChunkingContext {
495495
let this = self.await?;
496496
let availability_info = availability_info.into_value();
497497

498-
let evaluatable_assets_ref = evaluatable_assets.await?;
499-
500-
let entries = evaluatable_assets_ref
501-
.iter()
502-
.map(|&evaluatable| ResolvedVc::upcast(evaluatable));
498+
let entries = chunk_group.entries();
503499

504500
let MakeChunkGroupResult {
505501
chunks,
@@ -520,11 +516,21 @@ impl ChunkingContext for BrowserChunkingContext {
520516

521517
let other_assets = Vc::cell(assets.clone());
522518

519+
let entries = Vc::cell(
520+
chunk_group
521+
.entries()
522+
.map(|m| {
523+
ResolvedVc::try_downcast::<Box<dyn EvaluatableAsset>>(m)
524+
.context("evaluated_chunk_group entries must be evaluatable assets")
525+
})
526+
.collect::<Result<Vec<_>>>()?,
527+
);
528+
523529
if this.enable_hot_module_replacement {
524530
assets.push(
525531
self.generate_chunk_list_register_chunk(
526532
ident,
527-
evaluatable_assets,
533+
entries,
528534
other_assets,
529535
Value::new(EcmascriptDevChunkListSource::Entry),
530536
)
@@ -534,7 +540,7 @@ impl ChunkingContext for BrowserChunkingContext {
534540
}
535541

536542
assets.push(
537-
self.generate_evaluate_chunk(ident, other_assets, evaluatable_assets, module_graph)
543+
self.generate_evaluate_chunk(ident, other_assets, entries, module_graph)
538544
.to_resolved()
539545
.await?,
540546
);

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

+7-2
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,10 @@ use turbopack_core::{
2929
ident::AssetIdent,
3030
issue::{handle_issues, IssueReporter, IssueSeverity},
3131
module::Module,
32-
module_graph::{chunk_group_info::ChunkGroupEntry, ModuleGraph},
32+
module_graph::{
33+
chunk_group_info::{ChunkGroup, ChunkGroupEntry},
34+
ModuleGraph,
35+
},
3336
output::{OutputAsset, OutputAssets},
3437
reference::all_assets_from_entries,
3538
reference_type::{EntryReferenceSubType, ReferenceType},
@@ -396,7 +399,9 @@ async fn build_internal(
396399
)
397400
.with_extension("entry.js".into()),
398401
),
399-
EvaluatableAssets::one(*ResolvedVc::upcast(ecmascript)),
402+
ChunkGroup::Entry(
403+
[ResolvedVc::upcast(ecmascript)].into_iter().collect(),
404+
),
400405
module_graph,
401406
Value::new(AvailabilityInfo::Root),
402407
)

0 commit comments

Comments
 (0)