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