next_core/next_app/
app_client_shared_chunks.rs1use anyhow::Result;
2use tracing::Instrument;
3use turbo_tasks::{ResolvedVc, Value, Vc};
4use turbopack_core::{
5 chunk::{
6 ChunkGroupResult, ChunkingContext, EvaluatableAssets, availability_info::AvailabilityInfo,
7 },
8 ident::AssetIdent,
9 module_graph::{ModuleGraph, chunk_group_info::ChunkGroup},
10 output::OutputAssets,
11};
12
13#[turbo_tasks::function]
14pub async fn get_app_client_shared_chunk_group(
15 ident: Vc<AssetIdent>,
16 app_client_runtime_entries: Vc<EvaluatableAssets>,
17 module_graph: Vc<ModuleGraph>,
18 client_chunking_context: Vc<Box<dyn ChunkingContext>>,
19) -> Result<Vc<ChunkGroupResult>> {
20 if app_client_runtime_entries.await?.is_empty() {
21 return Ok(ChunkGroupResult {
22 assets: OutputAssets::empty().to_resolved().await?,
23 availability_info: AvailabilityInfo::Root,
24 }
25 .cell());
26 }
27
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?;
48
49 Ok(app_client_shared_chunk_grou)
50}