next_core/next_app/
app_client_shared_chunks.rs1use anyhow::Result;
2use tracing::Instrument;
3use turbo_tasks::{ResolvedVc, 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::empty());
22 }
23
24 let span = tracing::trace_span!("app client shared");
25 let app_client_shared_chunk_group = async {
26 client_chunking_context
27 .evaluated_chunk_group(
28 ident,
29 ChunkGroup::Entry(
30 app_client_runtime_entries
31 .await?
32 .iter()
33 .map(|v| ResolvedVc::upcast(*v))
34 .collect(),
35 ),
36 module_graph,
37 OutputAssets::empty(),
41 AvailabilityInfo::root(),
42 )
43 .to_resolved()
44 .await
45 .map(|r| *r)
46 }
47 .instrument(span)
48 .await?;
49
50 Ok(app_client_shared_chunk_group)
51}