@@ -59,9 +59,8 @@ type ClientReferenceMeta = {
5959type ServerRerferenceMeta = {
6060 importId : string
6161 referenceKey : string
62- // TODO: expose only "use server" exports
63- // TODO: tree shake unused exports
64- // exportNames: string[]
62+ // TODO: tree shake unused server functions
63+ exportNames : string [ ]
6564}
6665
6766const PKG_NAME = '@vitejs/plugin-rsc'
@@ -1458,6 +1457,7 @@ function vitePluginUseServer(
14581457 manager . serverReferenceMetaMap [ id ] = {
14591458 importId : id ,
14601459 referenceKey : getNormalizedId ( ) ,
1460+ exportNames : 'names' in result ? result . names : result . exportNames ,
14611461 }
14621462 const importSource = resolvePackage ( `${ PKG_NAME } /react/rsc` )
14631463 output . prepend ( `import * as $$ReactServer from "${ importSource } ";\n` )
@@ -1499,6 +1499,7 @@ function vitePluginUseServer(
14991499 manager . serverReferenceMetaMap [ id ] = {
15001500 importId : id ,
15011501 referenceKey : getNormalizedId ( ) ,
1502+ exportNames : result . exportNames ,
15021503 }
15031504 const name =
15041505 this . environment . name === browserEnvironmentName ? 'browser' : 'ssr'
@@ -1519,7 +1520,15 @@ function vitePluginUseServer(
15191520 for ( const meta of Object . values ( manager . serverReferenceMetaMap ) ) {
15201521 const key = JSON . stringify ( meta . referenceKey )
15211522 const id = JSON . stringify ( meta . importId )
1522- code += `${ key } : () => import(${ id } ),`
1523+ const exports = meta . exportNames
1524+ . map ( ( name ) => ( name === 'default' ? 'default: _default' : name ) )
1525+ . sort ( )
1526+ code += `
1527+ ${ key } : async () => {
1528+ const {${ exports } } = await import(${ id } );
1529+ return {${ exports } };
1530+ },
1531+ `
15231532 }
15241533 code = `export default {${ code } };\n`
15251534 return { code, map : null }
0 commit comments