11use anyhow:: { Context , Result , bail} ;
22use futures:: future:: BoxFuture ;
33use next_core:: {
4- PageLoaderAsset , all_assets_from_entries , create_page_loader_entry_module ,
5- get_asset_path_from_pathname , get_edge_resolve_options_context,
4+ PageLoaderAsset , create_page_loader_entry_module , get_asset_path_from_pathname ,
5+ get_edge_resolve_options_context,
66 hmr_entry:: HmrEntryModule ,
77 mode:: NextMode ,
88 next_client:: {
@@ -56,7 +56,8 @@ use turbopack_core::{
5656 GraphEntries , ModuleGraph , SingleModuleGraph , VisitedModules ,
5757 chunk_group_info:: { ChunkGroup , ChunkGroupEntry } ,
5858 } ,
59- output:: { OptionOutputAsset , OutputAsset , OutputAssets , OutputAssetsWithReferenced } ,
59+ output:: { OptionOutputAsset , OutputAsset , OutputAssets } ,
60+ reference:: all_assets_from_entries,
6061 reference_type:: { EcmaScriptModulesReferenceSubType , EntryReferenceSubType , ReferenceType } ,
6162 resolve:: { origin:: PlainResolveOrigin , parse:: Request , pattern:: Pattern } ,
6263 source:: Source ,
@@ -1003,34 +1004,24 @@ impl PageEndpoint {
10031004 NextRuntime :: Edge => edge_chunking_context,
10041005 } ;
10051006
1006- let mut current_chunks = OutputAssets :: empty ( ) ;
1007- let mut current_referenced_assets = OutputAssets :: empty ( ) ;
1008- let mut current_availability_info = AvailabilityInfo :: Root ;
1007+ let mut current_chunk_group = ChunkGroupResult :: empty_resolved ( ) ;
10091008 for layout in [ document_module, app_module] . iter ( ) . flatten ( ) . copied ( ) {
10101009 let span = tracing:: trace_span!(
10111010 "layout segment" ,
10121011 name = display( layout. ident( ) . to_string( ) . await ?)
10131012 ) ;
10141013 async {
1015- let ChunkGroupResult {
1016- assets,
1017- referenced_assets,
1018- availability_info,
1019- } = * chunking_context
1020- . chunk_group (
1021- layout. ident ( ) ,
1022- ChunkGroup :: Shared ( layout) ,
1023- ssr_module_graph,
1024- current_availability_info,
1025- )
1026- . await ?;
1014+ let chunk_group = chunking_context. chunk_group (
1015+ layout. ident ( ) ,
1016+ ChunkGroup :: Shared ( layout) ,
1017+ ssr_module_graph,
1018+ current_chunk_group. await ?. availability_info ,
1019+ ) ;
10271020
1028- current_chunks = current_chunks. concatenate ( * assets) . resolve ( ) . await ?;
1029- current_referenced_assets = current_referenced_assets
1030- . concatenate ( * referenced_assets)
1031- . resolve ( )
1021+ current_chunk_group = current_chunk_group
1022+ . concatenate ( chunk_group)
1023+ . to_resolved ( )
10321024 . await ?;
1033- current_availability_info = availability_info;
10341025
10351026 anyhow:: Ok ( ( ) )
10361027 }
@@ -1042,27 +1033,22 @@ impl PageEndpoint {
10421033 . context ( "could not process page loader entry module" ) ?;
10431034 let is_edge = matches ! ( runtime, NextRuntime :: Edge ) ;
10441035 if is_edge {
1045- let OutputAssetsWithReferenced {
1046- assets : edge_assets,
1047- referenced_assets : edge_referenced_assets,
1048- } = * edge_chunking_context
1049- . evaluated_chunk_group_assets (
1050- ssr_module. ident ( ) ,
1051- ChunkGroup :: Entry ( vec ! [ ResolvedVc :: upcast( ssr_module_evaluatable) ] ) ,
1052- ssr_module_graph,
1053- current_availability_info,
1054- )
1036+ let chunk_assets = edge_chunking_context. evaluated_chunk_group_assets (
1037+ ssr_module. ident ( ) ,
1038+ ChunkGroup :: Entry ( vec ! [ ResolvedVc :: upcast( ssr_module_evaluatable) ] ) ,
1039+ ssr_module_graph,
1040+ current_chunk_group. await ?. availability_info ,
1041+ ) ;
1042+
1043+ let chunk_assets = current_chunk_group
1044+ . output_assets_with_referenced ( )
1045+ . concatenate ( chunk_assets)
1046+ . to_resolved ( )
10551047 . await ?;
10561048
10571049 Ok ( SsrChunk :: Edge {
1058- assets : current_chunks
1059- . concatenate ( * edge_assets)
1060- . to_resolved ( )
1061- . await ?,
1062- referenced_assets : current_referenced_assets
1063- . concatenate ( * edge_referenced_assets)
1064- . to_resolved ( )
1065- . await ?,
1050+ assets : chunk_assets. primary_assets ( ) . to_resolved ( ) . await ?,
1051+ referenced_assets : chunk_assets. referenced_assets ( ) . to_resolved ( ) . await ?,
10661052 dynamic_import_entries,
10671053 regions : regions. clone ( ) ,
10681054 }
@@ -1079,9 +1065,9 @@ impl PageEndpoint {
10791065 ssr_entry_chunk_path,
10801066 EvaluatableAssets :: empty ( ) . with_entry ( * ssr_module_evaluatable) ,
10811067 ssr_module_graph,
1082- current_chunks ,
1083- current_referenced_assets ,
1084- current_availability_info ,
1068+ current_chunk_group . primary_assets ( ) ,
1069+ current_chunk_group . referenced_assets ( ) ,
1070+ current_chunk_group . await ? . availability_info ,
10851071 )
10861072 . to_resolved ( )
10871073 . await ?;
@@ -1321,21 +1307,14 @@ impl PageEndpoint {
13211307
13221308 let ssr_chunk = match this. ty {
13231309 PageEndpointType :: Html => {
1324- let client_chunk_group = self . client_chunk_group ( ) . await ?;
1325- let client_chunks = * client_chunk_group. assets ;
1326- client_assets. extend ( client_chunks. await ?. iter ( ) . map ( |asset| * * asset) ) ;
1327- client_assets. extend (
1328- client_chunk_group
1329- . referenced_assets
1330- . await ?
1331- . iter ( )
1332- . map ( |asset| * * asset) ,
1333- ) ;
1310+ let client_chunk_group = self . client_chunk_group ( ) ;
1311+ client_assets. extend ( client_chunk_group. all_assets ( ) . await ?. iter ( ) . copied ( ) ) ;
1312+ let client_chunks = * client_chunk_group. await ?. assets ;
13341313
13351314 let build_manifest = self . build_manifest ( client_chunks) . to_resolved ( ) . await ?;
1336- let page_loader = self . page_loader ( client_chunks) ;
1315+ let page_loader = self . page_loader ( client_chunks) . to_resolved ( ) . await ? ;
13371316 let client_build_manifest = self
1338- . client_build_manifest ( page_loader)
1317+ . client_build_manifest ( * page_loader)
13391318 . to_resolved ( )
13401319 . await ?;
13411320 client_assets. push ( page_loader) ;
@@ -1350,7 +1329,7 @@ impl PageEndpoint {
13501329 PageEndpointType :: SsrOnly => self . ssr_chunk ( emit_manifests) ,
13511330 } ;
13521331
1353- let client_assets = OutputAssets :: new ( client_assets) . to_resolved ( ) . await ? ;
1332+ let client_assets: ResolvedVc < OutputAssets > = ResolvedVc :: cell ( client_assets) ;
13541333
13551334 let manifest_path_prefix = get_asset_prefix_from_pathname ( & this. pathname ) ;
13561335 let node_root = this. pages_project . project ( ) . node_root ( ) . owned ( ) . await ?;
@@ -1381,7 +1360,7 @@ impl PageEndpoint {
13811360 let webpack_stats = generate_webpack_stats (
13821361 self . client_module_graph ( ) ,
13831362 this. original_name . clone ( ) ,
1384- client_assets. await ?. iter ( ) . copied ( ) ,
1363+ client_assets. await ?. into_iter ( ) . copied ( ) ,
13851364 )
13861365 . await ?;
13871366 let stats_output = VirtualOutputAsset :: new (
0 commit comments