@@ -2317,21 +2317,6 @@ async function handlePrerender(
2317
2317
matches ,
2318
2318
`Unable to prerender path because it does not match any routes: ${ path } `
2319
2319
) ;
2320
- let hasLoaders = matches . some (
2321
- ( m ) => build . assets . routes [ m . route . id ] ?. hasLoader
2322
- ) ;
2323
- let data : string | undefined ;
2324
- if ( hasLoaders ) {
2325
- data = await prerenderData (
2326
- handler ,
2327
- path ,
2328
- clientBuildDirectory ,
2329
- reactRouterConfig ,
2330
- viteConfig ,
2331
- { headers }
2332
- ) ;
2333
- }
2334
-
2335
2320
// When prerendering a resource route, we don't want to pass along the
2336
2321
// `.data` file since we want to prerender the raw Response returned from
2337
2322
// the loader. Presumably this is for routes where a file extension is
@@ -2343,7 +2328,20 @@ async function handlePrerender(
2343
2328
manifestRoute && ! manifestRoute . default && ! manifestRoute . ErrorBoundary ;
2344
2329
2345
2330
if ( isResourceRoute ) {
2346
- if ( manifestRoute ?. loader ) {
2331
+ invariant ( leafRoute ) ;
2332
+ invariant ( manifestRoute ) ;
2333
+ if ( manifestRoute . loader ) {
2334
+ // Prerender a .data file for turbo-stream consumption
2335
+ await prerenderData (
2336
+ handler ,
2337
+ path ,
2338
+ [ leafRoute . id ] ,
2339
+ clientBuildDirectory ,
2340
+ reactRouterConfig ,
2341
+ viteConfig ,
2342
+ { headers }
2343
+ ) ;
2344
+ // Prerender a raw file for external consumption
2347
2345
await prerenderResourceRoute (
2348
2346
handler ,
2349
2347
path ,
@@ -2358,6 +2356,22 @@ async function handlePrerender(
2358
2356
) ;
2359
2357
}
2360
2358
} else {
2359
+ let hasLoaders = matches . some (
2360
+ ( m ) => build . assets . routes [ m . route . id ] ?. hasLoader
2361
+ ) ;
2362
+ let data : string | undefined ;
2363
+ if ( ! isResourceRoute && hasLoaders ) {
2364
+ data = await prerenderData (
2365
+ handler ,
2366
+ path ,
2367
+ null ,
2368
+ clientBuildDirectory ,
2369
+ reactRouterConfig ,
2370
+ viteConfig ,
2371
+ { headers }
2372
+ ) ;
2373
+ }
2374
+
2361
2375
await prerenderRoute (
2362
2376
handler ,
2363
2377
path ,
@@ -2411,6 +2425,7 @@ function getStaticPrerenderPaths(routes: DataRouteObject[]) {
2411
2425
async function prerenderData (
2412
2426
handler : RequestHandler ,
2413
2427
prerenderPath : string ,
2428
+ onlyRoutes : string [ ] | null ,
2414
2429
clientBuildDirectory : string ,
2415
2430
reactRouterConfig : ResolvedReactRouterConfig ,
2416
2431
viteConfig : Vite . ResolvedConfig ,
@@ -2421,7 +2436,11 @@ async function prerenderData(
2421
2436
? "/_root.data"
2422
2437
: `${ prerenderPath . replace ( / \/ $ / , "" ) } .data`
2423
2438
} `. replace ( / \/ \/ + / g, "/" ) ;
2424
- let request = new Request ( `http://localhost${ normalizedPath } ` , requestInit ) ;
2439
+ let url = new URL ( `http://localhost${ normalizedPath } ` ) ;
2440
+ if ( onlyRoutes ?. length ) {
2441
+ url . searchParams . set ( "_routes" , onlyRoutes . join ( "," ) ) ;
2442
+ }
2443
+ let request = new Request ( url , requestInit ) ;
2425
2444
let response = await handler ( request ) ;
2426
2445
let data = await response . text ( ) ;
2427
2446
0 commit comments