@@ -10,67 +10,77 @@ import { makeRouteBuilder, type RouteBuilder } from './make-route-builder';
1010import type { Prettify } from './types' ;
1111
1212type AnyRouteBuilder =
13- | RouteBuilder < any , any >
14- | RouteBuilder < any , never >
15- | RouteBuilder < never , any >
16- | RouteBuilder < never , never > ;
13+ | RouteBuilder < string , any , any >
14+ | RouteBuilder < string , any , never >
15+ | RouteBuilder < string , never , any >
16+ | RouteBuilder < string , never , never > ;
1717
1818type NavigationConfig = Record < string , AnyRouteBuilder > ;
1919
20- type SafeRootRoute = ( ) => string ;
20+ type SafeRootRoute < Path extends string > = ( ) => Path ;
2121
22- type SafeRouteWithParams < Params extends z . ZodSchema > = {
23- ( options : z . input < Params > ) : string ;
22+ type SafeRouteWithParams < Path extends string , Params extends z . ZodSchema > = {
23+ ( options : z . input < Params > ) : Path ;
2424 $parseParams : ( params : unknown ) => z . output < Params > ;
2525} ;
2626
27- type SafeRouteWithSearch < Search extends z . ZodSchema > = {
28- ( options ?: { search ?: z . input < Search > } ) : string ;
27+ type SafeRouteWithSearch < Path extends string , Search extends z . ZodSchema > = {
28+ ( options ?: { search ?: z . input < Search > } ) : Path ;
2929 $parseSearchParams : ( searchParams : unknown ) => z . output < Search > ;
3030} ;
3131
32- type SafeRouteWithRequiredSearch < Search extends z . ZodSchema > = {
33- ( options : { search : z . input < Search > } ) : string ;
32+ type SafeRouteWithRequiredSearch <
33+ Path extends string ,
34+ Search extends z . ZodSchema ,
35+ > = {
36+ ( options : { search : z . input < Search > } ) : Path ;
3437 $parseSearchParams : ( searchParams : unknown ) => z . output < Search > ;
3538} ;
3639
3740type SafeRouteWithParamsAndSearch <
41+ Path extends string ,
3842 Params extends z . ZodSchema ,
3943 Search extends z . ZodSchema ,
4044 Options = z . input < Params > & { search ?: z . input < Search > } ,
4145> = {
42- ( options : Prettify < Options > ) : string ;
46+ ( options : Prettify < Options > ) : Path ;
4347 $parseParams : ( params : unknown ) => z . output < Params > ;
4448 $parseSearchParams : ( searchParams : unknown ) => z . output < Search > ;
4549} ;
4650
4751type SafeRouteWithParamsAndRequiredSearch <
52+ Path extends string ,
4853 Params extends z . ZodSchema ,
4954 Search extends z . ZodSchema ,
5055 Options = z . input < Params > & { search : z . input < Search > } ,
5156> = {
52- ( options : Prettify < Options > ) : string ;
57+ ( options : Prettify < Options > ) : Path ;
5358 $parseParams : ( params : unknown ) => z . output < Params > ;
5459 $parseSearchParams : ( searchParams : unknown ) => z . output < Search > ;
5560} ;
5661
57- type SafeRoute < Params extends z . ZodSchema , Search extends z . ZodSchema > =
58- [ Params , Search ] extends [ never , never ] ? SafeRootRoute
59- : [ Params , Search ] extends [ z . ZodSchema , never ] ? SafeRouteWithParams < Params >
62+ type SafeRoute <
63+ Path extends string ,
64+ Params extends z . ZodSchema ,
65+ Search extends z . ZodSchema ,
66+ > =
67+ [ Params , Search ] extends [ never , never ] ? SafeRootRoute < Path >
68+ : [ Params , Search ] extends [ z . ZodSchema , never ] ?
69+ SafeRouteWithParams < Path , Params >
6070 : [ Params , Search ] extends [ never , z . ZodSchema ] ?
6171 undefined extends z . input < Search > ?
62- SafeRouteWithSearch < Search >
63- : SafeRouteWithRequiredSearch < Search >
72+ SafeRouteWithSearch < Path , Search >
73+ : SafeRouteWithRequiredSearch < Path , Search >
6474 : [ Params , Search ] extends [ z . ZodSchema , z . ZodSchema ] ?
6575 undefined extends z . input < Search > ?
66- SafeRouteWithParamsAndSearch < Params , Search >
67- : SafeRouteWithParamsAndRequiredSearch < Params , Search >
76+ SafeRouteWithParamsAndSearch < Path , Params , Search >
77+ : SafeRouteWithParamsAndRequiredSearch < Path , Params , Search >
6878 : never ;
6979
7080type RouteWithParams < Config extends NavigationConfig > = {
7181 [ Route in keyof Config & string ] : Config [ Route ] extends (
72- | RouteBuilder < infer Params extends z . ZodSchema , never >
73- | RouteBuilder < infer Params extends z . ZodSchema , any >
82+ | RouteBuilder < string , infer Params extends z . ZodSchema , never >
83+ | RouteBuilder < string , infer Params extends z . ZodSchema , any >
7484 ) ?
7585 Params extends z . ZodSchema ?
7686 Route
@@ -80,8 +90,8 @@ type RouteWithParams<Config extends NavigationConfig> = {
8090
8191type RouteWithSearchParams < Config extends NavigationConfig > = {
8292 [ Route in keyof Config & string ] : Config [ Route ] extends (
83- | RouteBuilder < never , infer Search extends z . ZodSchema >
84- | RouteBuilder < any , infer Search extends z . ZodSchema >
93+ | RouteBuilder < string , never , infer Search extends z . ZodSchema >
94+ | RouteBuilder < string , any , infer Search extends z . ZodSchema >
8595 ) ?
8696 Search extends z . ZodSchema ?
8797 Route
@@ -92,11 +102,12 @@ type RouteWithSearchParams<Config extends NavigationConfig> = {
92102type SafeNavigation < Config extends NavigationConfig > = {
93103 [ Route in keyof Config ] : Config [ Route ] extends (
94104 RouteBuilder <
105+ infer Path extends string ,
95106 infer Params extends z . ZodSchema ,
96107 infer Search extends z . ZodSchema
97108 >
98109 ) ?
99- SafeRoute < Params , Search >
110+ SafeRoute < Path , Params , Search >
100111 : never ;
101112} ;
102113
@@ -108,8 +119,8 @@ type ValidatedRouteParams<
108119> =
109120 Route extends keyof Pick < Router , AcceptableRoute & keyof Router > ?
110121 Router [ Route ] extends (
111- | SafeRoute < infer Params extends z . ZodSchema , any >
112- | SafeRoute < infer Params extends z . ZodSchema , never >
122+ | SafeRoute < string , infer Params extends z . ZodSchema , any >
123+ | SafeRoute < string , infer Params extends z . ZodSchema , never >
113124 ) ?
114125 z . output < Params >
115126 : never
@@ -123,8 +134,8 @@ type ValidatedRouteSearchParams<
123134> =
124135 Route extends keyof Pick < Router , AcceptableRoute & keyof Router > ?
125136 Router [ Route ] extends (
126- | SafeRoute < any , infer Search extends z . ZodSchema >
127- | SafeRoute < never , infer Search extends z . ZodSchema >
137+ | SafeRoute < string , any , infer Search extends z . ZodSchema >
138+ | SafeRoute < string , never , infer Search extends z . ZodSchema >
128139 ) ?
129140 z . output < Search >
130141 : never
0 commit comments