@@ -32,10 +32,10 @@ export interface ResourceOptions {
3232 * @param base The base route pattern to use for the resource
3333 * @param options Options to configure the resource routes
3434 */
35- export function createResource < P extends string , const O extends ResourceOptions > (
36- base : P | RoutePattern < P > ,
37- options ?: O ,
38- ) : BuildResourceMap < P , O > {
35+ export function createResource < base extends string , const options extends ResourceOptions > (
36+ base : base | RoutePattern < base > ,
37+ options ?: options ,
38+ ) : BuildResourceMap < base , options > {
3939 let only = options ?. only ?? ( ResourceMethods as readonly ResourceMethod [ ] )
4040 let newName = options ?. names ?. new ?? 'new'
4141 let showName = options ?. names ?. show ?? 'show'
@@ -65,25 +65,28 @@ export function createResource<P extends string, const O extends ResourceOptions
6565 routes [ destroyName ] = { method : 'DELETE' , pattern : `/` }
6666 }
6767
68- return createRoutes ( base , routes ) as BuildResourceMap < P , O >
68+ return createRoutes ( base , routes ) as BuildResourceMap < base , options >
6969}
7070
71- type BuildResourceMap < B extends string , O extends ResourceOptions > = BuildRouteMap <
72- B ,
71+ type BuildResourceMap < base extends string , options extends ResourceOptions > = BuildRouteMap <
72+ base ,
7373 BuildResourceRoutes <
74- O ,
75- O extends { only : readonly ResourceMethod [ ] } ? O [ 'only' ] [ number ] : ResourceMethod
74+ options ,
75+ options extends { only : readonly ResourceMethod [ ] } ? options [ 'only' ] [ number ] : ResourceMethod
7676 >
7777>
7878
79- type BuildResourceRoutes < O extends ResourceOptions , M extends ResourceMethod > = {
80- [ K in M as GetRouteName < O , K > ] : ResourceRoutes [ K ]
79+ type BuildResourceRoutes < options extends ResourceOptions , method extends ResourceMethod > = {
80+ [ methodName in method as GetRouteName < options , methodName > ] : ResourceRoutes [ methodName ]
8181}
8282
83- type GetRouteName < O extends ResourceOptions , M extends ResourceMethod > = M extends ResourceMethod
84- ? O extends { names : { [ K in M ] : infer N extends string } }
85- ? N
86- : M
83+ type GetRouteName <
84+ options extends ResourceOptions ,
85+ method extends ResourceMethod ,
86+ > = method extends ResourceMethod
87+ ? options extends { names : { [ methodName in method ] : infer customName extends string } }
88+ ? customName
89+ : method
8790 : never
8891
8992type ResourceRoutes = {
@@ -130,10 +133,10 @@ export type ResourcesOptions = {
130133 * @param base The base route pattern to use for the resources
131134 * @param options Options to configure the resource routes
132135 */
133- export function createResources < P extends string , const O extends ResourcesOptions > (
134- base : P | RoutePattern < P > ,
135- options ?: O ,
136- ) : BuildResourcesMap < P , O > {
136+ export function createResources < base extends string , const options extends ResourcesOptions > (
137+ base : base | RoutePattern < base > ,
138+ options ?: options ,
139+ ) : BuildResourcesMap < base , options > {
137140 let only = options ?. only ?? ( ResourcesMethods as readonly ResourcesMethod [ ] )
138141 let param = options ?. param ?? 'id'
139142 let indexName = options ?. names ?. index ?? 'index'
@@ -168,43 +171,48 @@ export function createResources<P extends string, const O extends ResourcesOptio
168171 routes [ destroyName ] = { method : 'DELETE' , pattern : `/:${ param } ` }
169172 }
170173
171- return createRoutes ( base , routes ) as BuildResourcesMap < P , O >
174+ return createRoutes ( base , routes ) as BuildResourcesMap < base , options >
172175}
173176
174- type BuildResourcesMap < B extends string , O extends ResourcesOptions > = BuildRouteMap <
175- B ,
177+ type BuildResourcesMap < base extends string , options extends ResourcesOptions > = BuildRouteMap <
178+ base ,
176179 BuildResourcesRoutes <
177- O ,
178- O extends { only : readonly ResourcesMethod [ ] } ? O [ 'only' ] [ number ] : ResourcesMethod ,
179- GetParam < O >
180+ options ,
181+ options extends { only : readonly ResourcesMethod [ ] }
182+ ? options [ 'only' ] [ number ]
183+ : ResourcesMethod ,
184+ GetParam < options >
180185 >
181186>
182187
188+ // prettier-ignore
183189type BuildResourcesRoutes <
184- O extends ResourcesOptions ,
185- M extends ResourcesMethod ,
186- Param extends string ,
190+ options extends ResourcesOptions ,
191+ method extends ResourcesMethod ,
192+ param extends string ,
187193> = {
188- [ K in M as GetResourcesRouteName < O , K > ] : ResourcesRoutes < Param > [ K ]
194+ [ methodName in method as GetResourcesRouteName < options , methodName > ] : ResourcesRoutes < param > [ methodName ]
189195}
190196
191197type GetResourcesRouteName <
192- O extends ResourcesOptions ,
193- M extends ResourcesMethod ,
194- > = M extends ResourcesMethod
195- ? O extends { names : { [ K in M ] : infer N extends string } }
196- ? N
197- : M
198+ options extends ResourcesOptions ,
199+ method extends ResourcesMethod ,
200+ > = method extends ResourcesMethod
201+ ? options extends { names : { [ methodName in method ] : infer customName extends string } }
202+ ? customName
203+ : method
198204 : never
199205
200- type ResourcesRoutes < Param extends string > = {
206+ type ResourcesRoutes < param extends string > = {
201207 index : { method : 'GET' ; pattern : `/` }
202208 new : { method : 'GET' ; pattern : `/new` }
203- show : { method : 'GET' ; pattern : `/:${Param } ` }
209+ show : { method : 'GET' ; pattern : `/:${param } ` }
204210 create : { method : 'POST' ; pattern : `/` }
205- edit : { method : 'GET' ; pattern : `/:${Param } /edit` }
206- update : { method : 'PUT' ; pattern : `/:${Param } ` }
207- destroy : { method : 'DELETE' ; pattern : `/:${Param } ` }
211+ edit : { method : 'GET' ; pattern : `/:${param } /edit` }
212+ update : { method : 'PUT' ; pattern : `/:${param } ` }
213+ destroy : { method : 'DELETE' ; pattern : `/:${param } ` }
208214}
209215
210- type GetParam < O extends ResourcesOptions > = O extends { param : infer P extends string } ? P : 'id'
216+ // prettier-ignore
217+ type GetParam < options extends ResourcesOptions > =
218+ options extends { param : infer param extends string } ? param : 'id'
0 commit comments