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};
11
12#[turbo_tasks::function]
13pub async fn get_app_client_shared_chunk_group(
14 ident: Vc<AssetIdent>,
15 app_client_runtime_entries: Vc<EvaluatableAssets>,
16 module_graph: Vc<ModuleGraph>,
17 client_chunking_context: Vc<Box<dyn ChunkingContext>>,
18) -> Result<Vc<ChunkGroupResult>> {
19 if app_client_runtime_entries.await?.is_empty() {
20 return Ok(ChunkGroupResult::empty());
21 }
22
23 let span = tracing::trace_span!("app client shared");
24 let app_client_shared_chunk_grou = async {
25 client_chunking_context
26 .evaluated_chunk_group(
27 ident,
28 ChunkGroup::Entry(
29 app_client_runtime_entries
30 .await?
31 .iter()
32 .map(|v| ResolvedVc::upcast(*v))
33 .collect(),
34 ),
35 module_graph,
36 AvailabilityInfo::root(),
37 )
38 .resolve()
39 .await
40 }
41 .instrument(span)
42 .await?;
43
44 Ok(app_client_shared_chunk_grou)
45}