@@ -82,7 +82,6 @@ class RscPluginManager {
8282 rscBundle ! : Rollup . OutputBundle
8383 buildAssetsManifest : AssetsManifest | undefined
8484 isScanBuild : boolean = false
85- serverReferences : Record < string , string > = { }
8685 clientReferenceMetaMap : Record < string , ClientReferenceMeta > = { }
8786 serverReferenceMetaMap : Record < string , ServerRerferenceMeta > = { }
8887 serverResourcesMetaMap : Record < string , { key : string } > = { }
@@ -1436,7 +1435,7 @@ function vitePluginUseServer(
14361435 )
14371436 const enableEncryption =
14381437 useServerPluginOptions . enableActionEncryption ?? true
1439- const { output } = transformServerActionServer_ ( code , ast , {
1438+ const result = transformServerActionServer_ ( code , ast , {
14401439 runtime : ( value , name ) =>
14411440 `$$ReactServer.registerServerReference(${ value } , ${ JSON . stringify (
14421441 getNormalizedId ( ) ,
@@ -1451,8 +1450,14 @@ function vitePluginUseServer(
14511450 `await __vite_rsc_encryption_runtime.decryptActionBoundArgs(${ value } )`
14521451 : undefined ,
14531452 } )
1453+ if ( ! result ) return
1454+ const output = result . output
14541455 if ( ! output . hasChanged ( ) ) return
1455- manager . serverReferences [ getNormalizedId ( ) ] = id
1456+ manager . serverReferenceMetaMap [ id ] = {
1457+ importId : id ,
1458+ referenceKey : getNormalizedId ( ) ,
1459+ exportNames : 'names' in result ? result . names : result . exportNames ,
1460+ }
14561461 const importSource = resolvePackage ( `${ PKG_NAME } /react/rsc` )
14571462 output . prepend ( `import * as $$ReactServer from "${ importSource } ";\n` )
14581463 if ( enableEncryption ) {
@@ -1487,9 +1492,14 @@ function vitePluginUseServer(
14871492 directive : 'use server' ,
14881493 rejectNonAsyncFunction : true ,
14891494 } )
1495+ if ( ! result ) return
14901496 const output = result ?. output
14911497 if ( ! output ?. hasChanged ( ) ) return
1492- manager . serverReferences [ getNormalizedId ( ) ] = id
1498+ manager . serverReferenceMetaMap [ id ] = {
1499+ importId : id ,
1500+ referenceKey : getNormalizedId ( ) ,
1501+ exportNames : result . exportNames ,
1502+ }
14931503 const name =
14941504 this . environment . name === browserEnvironmentName ? 'browser' : 'ssr'
14951505 const importSource = resolvePackage ( `${ PKG_NAME } /react/${ name } ` )
@@ -1505,7 +1515,19 @@ function vitePluginUseServer(
15051515 if ( this . environment . mode === 'dev' ) {
15061516 return { code : `export {}` , map : null }
15071517 }
1508- const code = generateDynamicImportCode ( manager . serverReferences )
1518+ let code = ''
1519+ for ( const meta of Object . values ( manager . serverReferenceMetaMap ) ) {
1520+ const key = JSON . stringify ( meta . referenceKey )
1521+ const id = JSON . stringify ( meta . importId )
1522+ const exports = meta . exportNames . join ( ',' )
1523+ code += `
1524+ ${ key } : async () => {
1525+ const {${ exports } } = await import(${ id } );
1526+ return {${ exports } };
1527+ },
1528+ `
1529+ }
1530+ code = `export default {${ code } };\n`
15091531 return { code, map : null }
15101532 } ) ,
15111533 ]
@@ -1550,16 +1572,6 @@ function createVirtualPlugin(name: string, load: Plugin['load']) {
15501572 } satisfies Plugin
15511573}
15521574
1553- function generateDynamicImportCode ( map : Record < string , string > ) {
1554- let code = Object . entries ( map )
1555- . map (
1556- ( [ key , id ] ) =>
1557- `${ JSON . stringify ( key ) } : () => import(${ JSON . stringify ( id ) } ),` ,
1558- )
1559- . join ( '\n' )
1560- return `export default {${ code } };\n`
1561- }
1562-
15631575class RuntimeAsset {
15641576 runtime : string
15651577 constructor ( value : string ) {
0 commit comments