@@ -59,9 +59,8 @@ type ClientReferenceMeta = {
59
59
type ServerRerferenceMeta = {
60
60
importId : string
61
61
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 [ ]
65
64
}
66
65
67
66
const PKG_NAME = '@vitejs/plugin-rsc'
@@ -1458,6 +1457,7 @@ function vitePluginUseServer(
1458
1457
manager . serverReferenceMetaMap [ id ] = {
1459
1458
importId : id ,
1460
1459
referenceKey : getNormalizedId ( ) ,
1460
+ exportNames : 'names' in result ? result . names : result . exportNames ,
1461
1461
}
1462
1462
const importSource = resolvePackage ( `${ PKG_NAME } /react/rsc` )
1463
1463
output . prepend ( `import * as $$ReactServer from "${ importSource } ";\n` )
@@ -1499,6 +1499,7 @@ function vitePluginUseServer(
1499
1499
manager . serverReferenceMetaMap [ id ] = {
1500
1500
importId : id ,
1501
1501
referenceKey : getNormalizedId ( ) ,
1502
+ exportNames : result . exportNames ,
1502
1503
}
1503
1504
const name =
1504
1505
this . environment . name === browserEnvironmentName ? 'browser' : 'ssr'
@@ -1519,7 +1520,15 @@ function vitePluginUseServer(
1519
1520
for ( const meta of Object . values ( manager . serverReferenceMetaMap ) ) {
1520
1521
const key = JSON . stringify ( meta . referenceKey )
1521
1522
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
+ `
1523
1532
}
1524
1533
code = `export default {${ code } };\n`
1525
1534
return { code, map : null }
0 commit comments