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 ,
@@ -1002,34 +1003,24 @@ impl PageEndpoint {
10021003 NextRuntime :: Edge => edge_chunking_context,
10031004 } ;
10041005
1005- let mut current_chunks = OutputAssets :: empty ( ) ;
1006- let mut current_referenced_assets = OutputAssets :: empty ( ) ;
1007- let mut current_availability_info = AvailabilityInfo :: Root ;
1006+ let mut current_chunk_group = ChunkGroupResult :: empty_resolved ( ) ;
10081007 for layout in [ document_module, app_module] . iter ( ) . flatten ( ) . copied ( ) {
10091008 let span = tracing:: trace_span!(
10101009 "layout segment" ,
10111010 name = display( layout. ident( ) . to_string( ) . await ?)
10121011 ) ;
10131012 async {
1014- let ChunkGroupResult {
1015- assets,
1016- referenced_assets,
1017- availability_info,
1018- } = * chunking_context
1019- . chunk_group (
1020- layout. ident ( ) ,
1021- ChunkGroup :: Shared ( layout) ,
1022- ssr_module_graph,
1023- current_availability_info,
1024- )
1025- . await ?;
1013+ let chunk_group = chunking_context. chunk_group (
1014+ layout. ident ( ) ,
1015+ ChunkGroup :: Shared ( layout) ,
1016+ ssr_module_graph,
1017+ current_chunk_group. await ?. availability_info ,
1018+ ) ;
10261019
1027- current_chunks = current_chunks. concatenate ( * assets) . resolve ( ) . await ?;
1028- current_referenced_assets = current_referenced_assets
1029- . concatenate ( * referenced_assets)
1030- . resolve ( )
1020+ current_chunk_group = current_chunk_group
1021+ . concatenate ( chunk_group)
1022+ . to_resolved ( )
10311023 . await ?;
1032- current_availability_info = availability_info;
10331024
10341025 anyhow:: Ok ( ( ) )
10351026 }
@@ -1041,27 +1032,22 @@ impl PageEndpoint {
10411032 . context ( "could not process page loader entry module" ) ?;
10421033 let is_edge = matches ! ( runtime, NextRuntime :: Edge ) ;
10431034 if is_edge {
1044- let OutputAssetsWithReferenced {
1045- assets : edge_assets,
1046- referenced_assets : edge_referenced_assets,
1047- } = * edge_chunking_context
1048- . evaluated_chunk_group_assets (
1049- ssr_module. ident ( ) ,
1050- ChunkGroup :: Entry ( vec ! [ ResolvedVc :: upcast( ssr_module_evaluatable) ] ) ,
1051- ssr_module_graph,
1052- current_availability_info,
1053- )
1035+ let chunk_assets = edge_chunking_context. evaluated_chunk_group_assets (
1036+ ssr_module. ident ( ) ,
1037+ ChunkGroup :: Entry ( vec ! [ ResolvedVc :: upcast( ssr_module_evaluatable) ] ) ,
1038+ ssr_module_graph,
1039+ current_chunk_group. await ?. availability_info ,
1040+ ) ;
1041+
1042+ let chunk_assets = current_chunk_group
1043+ . output_assets_with_referenced ( )
1044+ . concatenate ( chunk_assets)
1045+ . to_resolved ( )
10541046 . await ?;
10551047
10561048 Ok ( SsrChunk :: Edge {
1057- assets : current_chunks
1058- . concatenate ( * edge_assets)
1059- . to_resolved ( )
1060- . await ?,
1061- referenced_assets : current_referenced_assets
1062- . concatenate ( * edge_referenced_assets)
1063- . to_resolved ( )
1064- . await ?,
1049+ assets : chunk_assets. assets ( ) . to_resolved ( ) . await ?,
1050+ referenced_assets : chunk_assets. referenced_assets ( ) . to_resolved ( ) . await ?,
10651051 dynamic_import_entries,
10661052 regions : regions. clone ( ) ,
10671053 }
@@ -1078,9 +1064,9 @@ impl PageEndpoint {
10781064 ssr_entry_chunk_path,
10791065 EvaluatableAssets :: empty ( ) . with_entry ( * ssr_module_evaluatable) ,
10801066 ssr_module_graph,
1081- current_chunks ,
1082- current_referenced_assets ,
1083- current_availability_info ,
1067+ current_chunk_group . assets ( ) ,
1068+ current_chunk_group . referenced_assets ( ) ,
1069+ current_chunk_group . await ? . availability_info ,
10841070 )
10851071 . to_resolved ( )
10861072 . await ?;
@@ -1320,21 +1306,14 @@ impl PageEndpoint {
13201306
13211307 let ssr_chunk = match this. ty {
13221308 PageEndpointType :: Html => {
1323- let client_chunk_group = self . client_chunk_group ( ) . await ?;
1324- let client_chunks = * client_chunk_group. assets ;
1325- client_assets. extend ( client_chunks. await ?. iter ( ) . map ( |asset| * * asset) ) ;
1326- client_assets. extend (
1327- client_chunk_group
1328- . referenced_assets
1329- . await ?
1330- . iter ( )
1331- . map ( |asset| * * asset) ,
1332- ) ;
1309+ let client_chunk_group = self . client_chunk_group ( ) ;
1310+ client_assets. extend ( client_chunk_group. direct_assets ( ) . await ?. iter ( ) . copied ( ) ) ;
1311+ let client_chunks = * client_chunk_group. await ?. assets ;
13331312
13341313 let build_manifest = self . build_manifest ( client_chunks) . to_resolved ( ) . await ?;
1335- let page_loader = self . page_loader ( client_chunks) ;
1314+ let page_loader = self . page_loader ( client_chunks) . to_resolved ( ) . await ? ;
13361315 let client_build_manifest = self
1337- . client_build_manifest ( page_loader)
1316+ . client_build_manifest ( * page_loader)
13381317 . to_resolved ( )
13391318 . await ?;
13401319 client_assets. push ( page_loader) ;
@@ -1349,7 +1328,7 @@ impl PageEndpoint {
13491328 PageEndpointType :: SsrOnly => self . ssr_chunk ( emit_manifests) ,
13501329 } ;
13511330
1352- let client_assets = OutputAssets :: new ( client_assets) . to_resolved ( ) . await ? ;
1331+ let client_assets: ResolvedVc < OutputAssets > = ResolvedVc :: cell ( client_assets) ;
13531332
13541333 let manifest_path_prefix = get_asset_prefix_from_pathname ( & this. pathname ) ;
13551334 let node_root = this. pages_project . project ( ) . node_root ( ) . owned ( ) . await ?;
@@ -1380,7 +1359,7 @@ impl PageEndpoint {
13801359 let webpack_stats = generate_webpack_stats (
13811360 self . client_module_graph ( ) ,
13821361 this. original_name . clone ( ) ,
1383- client_assets. await ?. iter ( ) . copied ( ) ,
1362+ client_assets. await ?. into_iter ( ) . copied ( ) ,
13841363 )
13851364 . await ?;
13861365 let stats_output = VirtualOutputAsset :: new (
0 commit comments