@@ -23,7 +23,7 @@ use crate::{
2323 asset:: { Asset , AssetVc , AssetsVc } ,
2424 environment:: EnvironmentVc ,
2525 reference:: { AssetReference , AssetReferenceVc , AssetReferencesVc } ,
26- resolve:: { ResolveResult , ResolveResultVc } ,
26+ resolve:: { PrimaryResolveResult , ResolveResult , ResolveResultVc } ,
2727} ;
2828
2929/// A module id, which can be a number or string
@@ -132,10 +132,16 @@ impl ChunkGroupVc {
132132 if * pc. is_loaded_in_parallel ( ) . await ? {
133133 result = r
134134 . resolve_reference ( )
135- . primary_assets ( )
136135 . await ?
136+ . primary
137137 . iter ( )
138- . map ( |r| async move { Ok ( ChunkVc :: resolve_from ( r) . await ?) } )
138+ . map ( |r| async move {
139+ Ok ( if let PrimaryResolveResult :: Asset ( a) = r {
140+ ChunkVc :: resolve_from ( a) . await ?
141+ } else {
142+ None
143+ } )
144+ } )
139145 . try_join ( )
140146 . await ?;
141147 }
@@ -270,7 +276,7 @@ impl ChunkReferenceVc {
270276impl AssetReference for ChunkReference {
271277 #[ turbo_tasks:: function]
272278 fn resolve_reference ( & self ) -> ResolveResultVc {
273- ResolveResult :: Single ( self . chunk . into ( ) , Vec :: new ( ) ) . into ( )
279+ ResolveResult :: asset ( self . chunk . into ( ) ) . into ( )
274280 }
275281}
276282
@@ -318,7 +324,7 @@ impl AssetReference for ChunkGroupReference {
318324 . iter ( )
319325 . map ( |c| c. as_asset ( ) )
320326 . collect ( ) ;
321- Ok ( ResolveResult :: Alternatives ( set, Vec :: new ( ) ) . into ( ) )
327+ Ok ( ResolveResult :: assets ( set) . into ( ) )
322328 }
323329}
324330
@@ -369,8 +375,8 @@ pub async fn chunk_content<I: FromChunkableAsset>(
369375
370376enum ChunkContentWorkItem {
371377 AssetReferences ( AssetReferencesVc ) ,
372- Assets {
373- assets : AssetsVc ,
378+ ResolveResult {
379+ result : ResolveResultVc ,
374380 reference : AssetReferenceVc ,
375381 chunking_type : ChunkingType ,
376382 } ,
@@ -413,8 +419,8 @@ async fn chunk_content_internal<I: FromChunkableAsset>(
413419 for r in item. await ?. iter ( ) {
414420 if let Some ( pc) = ChunkableAssetReferenceVc :: resolve_from ( r) . await ? {
415421 if let Some ( chunking_type) = * pc. chunking_type ( context) . await ? {
416- queue. push_back ( ChunkContentWorkItem :: Assets {
417- assets : r. resolve_reference ( ) . primary_assets ( ) ,
422+ queue. push_back ( ChunkContentWorkItem :: ResolveResult {
423+ result : r. resolve_reference ( ) ,
418424 reference : * r,
419425 chunking_type,
420426 } ) ;
@@ -424,8 +430,8 @@ async fn chunk_content_internal<I: FromChunkableAsset>(
424430 external_asset_references. push ( * r) ;
425431 }
426432 }
427- ChunkContentWorkItem :: Assets {
428- assets ,
433+ ChunkContentWorkItem :: ResolveResult {
434+ result ,
429435 reference,
430436 chunking_type,
431437 } => {
@@ -444,13 +450,16 @@ async fn chunk_content_internal<I: FromChunkableAsset>(
444450 // not loaded in parallel
445451 let mut inner_chunk_groups = Vec :: new ( ) ;
446452
447- for asset in assets
448- . await ?
449- . iter ( )
450- . filter ( |asset| processed_assets. insert ( ( chunking_type, * * asset) ) )
451- {
452- let asset: & AssetVc = asset;
453-
453+ let result = result. await ?;
454+ let assets = result. primary . iter ( ) . filter_map ( |result| {
455+ if let PrimaryResolveResult :: Asset ( asset) = * result {
456+ if processed_assets. insert ( ( chunking_type, asset) ) {
457+ return Some ( asset) ;
458+ }
459+ }
460+ None
461+ } ) ;
462+ for asset in assets {
454463 let chunkable_asset = match ChunkableAssetVc :: resolve_from ( asset) . await ? {
455464 Some ( chunkable_asset) => chunkable_asset,
456465 _ => {
@@ -461,7 +470,7 @@ async fn chunk_content_internal<I: FromChunkableAsset>(
461470
462471 match chunking_type {
463472 ChunkingType :: Placed => {
464- if let Some ( chunk_item) = I :: from_asset ( context, * asset) . await ? {
473+ if let Some ( chunk_item) = I :: from_asset ( context, asset) . await ? {
465474 inner_chunk_items. push ( chunk_item) ;
466475 } else {
467476 return Err ( anyhow ! (
@@ -477,9 +486,9 @@ async fn chunk_content_internal<I: FromChunkableAsset>(
477486 }
478487 ChunkingType :: PlacedOrParallel => {
479488 // heuristic for being in the same chunk
480- if !split && * context. can_be_in_same_chunk ( entry, * asset) . await ? {
489+ if !split && * context. can_be_in_same_chunk ( entry, asset) . await ? {
481490 // chunk item, chunk or other asset?
482- if let Some ( chunk_item) = I :: from_asset ( context, * asset) . await ? {
491+ if let Some ( chunk_item) = I :: from_asset ( context, asset) . await ? {
483492 inner_chunk_items. push ( chunk_item) ;
484493 continue ;
485494 }
0 commit comments