@@ -1078,30 +1078,34 @@ export function createRpcClient(params) {
10781078 }
10791079
10801080 const assetDeps = collectAssetDeps ( bundle )
1081- const entry = Object . values ( assetDeps ) . find (
1082- ( v ) => v . chunk . name === 'index' && v . chunk . isEntry ,
1083- )
1084- assert ( entry )
1085- const entryUrl = assetsURL ( entry . chunk . fileName , manager )
1086- const clientReferenceDeps : Record < string , AssetDeps > = { }
1087- for ( const meta of Object . values ( manager . clientReferenceMetaMap ) ) {
1088- const deps : AssetDeps = assetDeps [ meta . groupChunkId ! ] ?. deps ?? {
1089- js : [ ] ,
1090- css : [ ] ,
1081+
1082+ // Check if there are any importAsset entries with isEntry: true
1083+ const importAssetEntries : Array < {
1084+ resolvedId : string
1085+ chunk : Rollup . OutputChunk
1086+ deps : AssetDeps
1087+ } > = [ ]
1088+ for ( const metas of Object . values ( manager . assetImportMetaMap ) ) {
1089+ for ( const [ resolvedId , meta ] of Object . entries ( metas ) ) {
1090+ if ( meta . isEntry ) {
1091+ const chunk = Object . values ( bundle ) . find (
1092+ ( c ) : c is Rollup . OutputChunk =>
1093+ c . type === 'chunk' && c . facadeModuleId === resolvedId ,
1094+ )
1095+ if ( chunk ) {
1096+ const chunkDeps = assetDeps [ chunk . fileName ]
1097+ if ( chunkDeps ) {
1098+ importAssetEntries . push ( {
1099+ resolvedId,
1100+ chunk,
1101+ deps : chunkDeps . deps ,
1102+ } )
1103+ }
1104+ }
1105+ }
10911106 }
1092- clientReferenceDeps [ meta . referenceKey ] = assetsURLOfDeps (
1093- mergeAssetDeps ( deps , entry . deps ) ,
1094- manager ,
1095- )
1096- }
1097- let bootstrapScriptContent : string | RuntimeAsset
1098- if ( typeof entryUrl === 'string' ) {
1099- bootstrapScriptContent = `import(${ JSON . stringify ( entryUrl ) } )`
1100- } else {
1101- bootstrapScriptContent = new RuntimeAsset (
1102- `"import(" + JSON.stringify(${ entryUrl . runtime } ) + ")"` ,
1103- )
11041107 }
1108+
11051109 // Compute importAssets from assetImportMetaMap
11061110 const importAssets : Record < string , { url : string | RuntimeAsset } > =
11071111 { }
@@ -1119,6 +1123,55 @@ export function createRpcClient(params) {
11191123 }
11201124 }
11211125
1126+ let bootstrapScriptContent : string | RuntimeAsset = ''
1127+ const clientReferenceDeps : Record < string , AssetDeps > = { }
1128+
1129+ if ( importAssetEntries . length > 0 ) {
1130+ // Use importAsset entries for merging deps into client references
1131+ // Merge all entry deps together
1132+ let entryDeps : AssetDeps = { js : [ ] , css : [ ] }
1133+ for ( const entry of importAssetEntries ) {
1134+ entryDeps = mergeAssetDeps ( entryDeps , entry . deps )
1135+ }
1136+ for ( const meta of Object . values ( manager . clientReferenceMetaMap ) ) {
1137+ const deps : AssetDeps = assetDeps [ meta . groupChunkId ! ] ?. deps ?? {
1138+ js : [ ] ,
1139+ css : [ ] ,
1140+ }
1141+ clientReferenceDeps [ meta . referenceKey ] = assetsURLOfDeps (
1142+ mergeAssetDeps ( deps , entryDeps ) ,
1143+ manager ,
1144+ )
1145+ }
1146+ } else {
1147+ // Fall back to "index" entry convention
1148+ const entry = Object . values ( assetDeps ) . find (
1149+ ( v ) => v . chunk . name === 'index' && v . chunk . isEntry ,
1150+ )
1151+ assert (
1152+ entry ,
1153+ `[vite-rsc] missing "index" entry. Use importAsset with { entry: true } or configure client entry.` ,
1154+ )
1155+ const entryUrl = assetsURL ( entry . chunk . fileName , manager )
1156+ for ( const meta of Object . values ( manager . clientReferenceMetaMap ) ) {
1157+ const deps : AssetDeps = assetDeps [ meta . groupChunkId ! ] ?. deps ?? {
1158+ js : [ ] ,
1159+ css : [ ] ,
1160+ }
1161+ clientReferenceDeps [ meta . referenceKey ] = assetsURLOfDeps (
1162+ mergeAssetDeps ( deps , entry . deps ) ,
1163+ manager ,
1164+ )
1165+ }
1166+ if ( typeof entryUrl === 'string' ) {
1167+ bootstrapScriptContent = `import(${ JSON . stringify ( entryUrl ) } )`
1168+ } else {
1169+ bootstrapScriptContent = new RuntimeAsset (
1170+ `"import(" + JSON.stringify(${ entryUrl . runtime } ) + ")"` ,
1171+ )
1172+ }
1173+ }
1174+
11221175 manager . buildAssetsManifest = {
11231176 bootstrapScriptContent,
11241177 clientReferenceDeps,
0 commit comments