next_core/next_app/
app_client_shared_chunks.rs

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