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 {
22 assets: OutputAssets::empty().to_resolved().await?,
23 referenced_assets: OutputAssets::empty().to_resolved().await?,
24 availability_info: AvailabilityInfo::Root,
25 }
26 .cell());
27 }
28
29 let span = tracing::trace_span!("app client shared");
30 let app_client_shared_chunk_grou = async {
31 client_chunking_context
32 .evaluated_chunk_group(
33 ident,
34 ChunkGroup::Entry(
35 app_client_runtime_entries
36 .await?
37 .iter()
38 .map(|v| ResolvedVc::upcast(*v))
39 .collect(),
40 ),
41 module_graph,
42 AvailabilityInfo::Root,
43 )
44 .resolve()
45 .await
46 }
47 .instrument(span)
48 .await?;
49
50 Ok(app_client_shared_chunk_grou)
51}