@@ -45,6 +45,7 @@ import {
4545 getEntrySource ,
4646 hashString ,
4747 normalizeRelativePath ,
48+ getFetchHandlerExport ,
4849 sortObject ,
4950 withRollupError ,
5051} from './plugins/utils'
@@ -514,13 +515,14 @@ export default function vitePluginRsc(
514515 `[vite-rsc] failed to resolve server handler '${ source } '` ,
515516 )
516517 const mod = await environment . runner . import ( resolved . id )
518+ const fetchHandler = getFetchHandlerExport ( mod )
517519 // expose original request url to server handler.
518520 // for example, this restores `base` which is automatically stripped by Vite.
519521 // https://github.com/vitejs/vite/blob/84079a84ad94de4c1ef4f1bdb2ab448ff2c01196/packages/vite/src/node/server/middlewares/base.ts#L18-L20
520522 req . url = req . originalUrl ?? req . url
521523 // ensure catching rejected promise
522524 // https://github.com/mjackson/remix-the-web/blob/b5aa2ae24558f5d926af576482caf6e9b35461dc/packages/node-fetch-server/src/lib/request-listener.ts#L87
523- await createRequestListener ( mod . default ) ( req , res )
525+ await createRequestListener ( fetchHandler ) ( req , res )
524526 } catch ( e ) {
525527 next ( e )
526528 }
@@ -541,7 +543,8 @@ export default function vitePluginRsc(
541543 )
542544 const entry = pathToFileURL ( entryFile ) . href
543545 const mod = await import ( /* @vite -ignore */ entry )
544- const handler = createRequestListener ( mod . default )
546+ const fetchHandler = getFetchHandlerExport ( mod )
547+ const handler = createRequestListener ( fetchHandler )
545548
546549 // disable compressions since it breaks html streaming
547550 // https://github.com/vitejs/vite/blob/9f5c59f07aefb1756a37bcb1c0aff24d54288950/packages/vite/src/node/preview.ts#L178
0 commit comments