@@ -9,6 +9,7 @@ import * as Typegen from "../../typegen";
9
9
import { readFileSync } from "fs" ;
10
10
import { readFile } from "fs/promises" ;
11
11
import path , { join , dirname } from "pathe" ;
12
+ import invariant from "../../invariant" ;
12
13
import {
13
14
type ConfigLoader ,
14
15
type ResolvedReactRouterConfig ,
@@ -32,6 +33,7 @@ export function reactRouterRSCVitePlugin(): Vite.PluginOption[] {
32
33
let configLoader : ConfigLoader ;
33
34
let typegenWatcherPromise : Promise < Typegen . Watcher > | undefined ;
34
35
let viteCommand : Vite . ConfigEnv [ "command" ] ;
36
+ let resolvedViteConfig : Vite . ResolvedConfig ;
35
37
let routeIdByFile : Map < string , string > | undefined ;
36
38
let logger : Vite . Logger ;
37
39
@@ -231,6 +233,9 @@ export function reactRouterRSCVitePlugin(): Vite.PluginOption[] {
231
233
} ,
232
234
} ;
233
235
} ,
236
+ configResolved ( viteConfig ) {
237
+ resolvedViteConfig = viteConfig ;
238
+ } ,
234
239
async configureServer ( viteDevServer ) {
235
240
configLoader . onChange (
236
241
async ( {
@@ -499,6 +504,30 @@ export function reactRouterRSCVitePlugin(): Vite.PluginOption[] {
499
504
return modules ;
500
505
} ,
501
506
} ,
507
+ {
508
+ name : "react-router/rsc/virtual-react-router-serve-config" ,
509
+ resolveId ( id ) {
510
+ if ( id === virtual . reactRouterServeConfig . id ) {
511
+ return virtual . reactRouterServeConfig . resolvedId ;
512
+ }
513
+ } ,
514
+ load ( id ) {
515
+ if ( id === virtual . reactRouterServeConfig . resolvedId ) {
516
+ const rscOutDir = resolvedViteConfig . environments . rsc ?. build ?. outDir ;
517
+ invariant ( rscOutDir , "RSC build directory config not found" ) ;
518
+ const clientOutDir =
519
+ resolvedViteConfig . environments . client ?. build ?. outDir ;
520
+ invariant ( clientOutDir , "Client build directory config not found" ) ;
521
+ const assetsBuildDirectory = Path . relative ( rscOutDir , clientOutDir ) ;
522
+ const publicPath = resolvedViteConfig . base ;
523
+
524
+ return `export default ${ JSON . stringify ( {
525
+ assetsBuildDirectory,
526
+ publicPath,
527
+ } ) } ;`;
528
+ }
529
+ } ,
530
+ } ,
502
531
validatePluginOrder ( ) ,
503
532
warnOnClientSourceMaps ( ) ,
504
533
] ;
@@ -510,6 +539,7 @@ const virtual = {
510
539
hmrRuntime : create ( "unstable_rsc/runtime" ) ,
511
540
basename : create ( "unstable_rsc/basename" ) ,
512
541
rscEntry : create ( "unstable_rsc/rsc-entry" ) ,
542
+ reactRouterServeConfig : create ( "unstable_rsc/react-router-serve-config" ) ,
513
543
} ;
514
544
515
545
function invalidateVirtualModules ( viteDevServer : Vite . ViteDevServer ) {
0 commit comments