Skip to main content

next_core/next_app/
app_client_shared_chunks.rs

1use 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}