@@ -4,7 +4,7 @@ import * as Pathe from "pathe/utils";
44
55import  {  type  RouteManifest ,  type  RouteManifestEntry  }  from  "../config/routes" ; 
66import  {  type  Context  }  from  "./context" ; 
7- import  {  getTypesPath  }  from  "./paths" ; 
7+ import  {  getTypesDir ,   getTypesPath  }  from  "./paths" ; 
88
99export  function  generate ( ctx : Context ,  route : RouteManifestEntry ) : string  { 
1010  const  lineage  =  getRouteLineage ( ctx . config . routes ,  route ) ; 
@@ -120,3 +120,44 @@ function parseParams(urlpath: string) {
120120  if  ( hasSplat )  result [ "*" ]  =  [ false ] ; 
121121  return  result ; 
122122} 
123+ 
124+ export  function  generateRouteManifest ( ctx : Context )  { 
125+   return  ts ` 
126+     export type RouteManifest = { 
127+       ${ Object . entries ( ctx . config . routes )  
128+         . map ( ( [ routeId ,  routeEntry ] ,  i )  =>  {  
129+           const  indent  =  i  ===  0  ? ""  : "  " . repeat ( 3 ) ;  
130+           const  routeTypeFile  =  Path . relative (  
131+             getTypesDir ( ctx ) ,  
132+             getTypesPath ( ctx ,  routeEntry )  
133+           ) ;  
134+           return  `${ indent }  "${ routeId }  ": import("./${ routeTypeFile }  ").Info,` ;  
135+         } )  
136+         . join ( "\n" ) }  
137+     }; 
138+ 
139+     export type RouteId = keyof RouteManifest; 
140+   ` ; 
141+ } 
142+ 
143+ export  function  generateUseRouteLoaderDataType ( ctx : Context )  { 
144+   if  ( ctx . config . future . typesafeUseRouteLoaderData )  { 
145+     return  ts ` 
146+       import type { RouteId, RouteManifest } from "./routeManifest"; 
147+ 
148+       declare module "react-router" { 
149+         export function useRouteLoaderData<RI extends RouteId>( 
150+           id: RI, 
151+         ): RouteManifest[RI]["loaderData"] | undefined; 
152+       } 
153+     ` ; 
154+   } 
155+ 
156+   return  ts ` 
157+     declare module "react-router" { 
158+       export function useRouteLoaderData<T = any>( 
159+         routeId: string 
160+       ): SerializeFrom<T> | undefined; 
161+     } 
162+   ` ; 
163+ } 
0 commit comments