@@ -121,20 +121,16 @@ export class MatcherPatternPathStar
121121// new MatcherPatternPathStatic('/team')
122122
123123export interface Param_GetSet <
124- TIn extends string | string [ ] | null | undefined =
125- | string
126- | string [ ]
127- | null
128- | undefined ,
129124 TOut = string | string [ ] | null ,
125+ TIn extends string | string [ ] | null = string | string [ ] | null ,
130126> {
131127 get ?: ( value : NoInfer < TIn > ) => TOut
132128 set ?: ( value : NoInfer < TOut > ) => TIn
133129}
134130
135131export type ParamParser_Generic =
136- | Param_GetSet < string , any >
137- | Param_GetSet < string [ ] , any >
132+ | Param_GetSet < any , string >
133+ | Param_GetSet < any , string [ ] >
138134// TODO: these are possible values for optional params
139135// | null | undefined
140136
@@ -147,7 +143,7 @@ export type ParamParser_Generic =
147143export function defineParamParser < TOut , TIn extends string | string [ ] > ( parser : {
148144 get ?: ( value : TIn ) => TOut
149145 set ?: ( value : TOut ) => TIn
150- } ) : Param_GetSet < TIn , TOut > {
146+ } ) : Param_GetSet < TOut , TIn > {
151147 return parser
152148}
153149
@@ -189,7 +185,7 @@ export const PATH_PARAM_DEFAULT_PARSER: Param_GetSet = {
189185 */
190186
191187export type ParamsFromParsers < P extends Record < string , ParamParser_Generic > > = {
192- [ K in keyof P ] : P [ K ] extends Param_GetSet < infer TIn , infer TOut >
188+ [ K in keyof P ] : P [ K ] extends Param_GetSet < infer TOut , infer TIn >
193189 ? unknown extends TOut // if any or unknown, use the value of TIn, which defaults to string | string[]
194190 ? TIn
195191 : TOut
@@ -199,7 +195,7 @@ export type ParamsFromParsers<P extends Record<string, ParamParser_Generic>> = {
199195interface MatcherPatternPathCustomParamOptions <
200196 TIn extends string | string [ ] | null = string | string [ ] | null ,
201197 TOut = string | string [ ] | null ,
202- > extends Param_GetSet < TIn , TOut > {
198+ > extends Param_GetSet < TOut , TIn > {
203199 repeat ?: boolean
204200 // NOTE: not needed because in the regexp, the value is undefined if
205201 // the group is optional and not given
@@ -221,7 +217,7 @@ type ExtractParamTypeFromOptions<TParamsOptions> = {
221217
222218const IS_INTEGER_RE = / ^ - ? [ 1 - 9 ] \d * $ /
223219
224- export const PARAM_INTEGER = {
220+ export const PARAM_INTEGER_SINGLE = {
225221 get : ( value : string ) => {
226222 if ( IS_INTEGER_RE . test ( value ) ) {
227223 const num = Number ( value )
@@ -232,26 +228,46 @@ export const PARAM_INTEGER = {
232228 throw miss ( )
233229 } ,
234230 set : ( value : number ) => String ( value ) ,
235- } satisfies Param_GetSet < string , number >
231+ } satisfies Param_GetSet < number , string >
236232
237233export const PARAM_NUMBER_OPTIONAL = {
238234 get : ( value : string | null ) =>
239- value == null ? null : PARAM_INTEGER . get ( value ) ,
235+ value == null ? null : PARAM_INTEGER_SINGLE . get ( value ) ,
240236 set : ( value : number | null ) =>
241- value != null ? PARAM_INTEGER . set ( value ) : null ,
242- } satisfies Param_GetSet < string | null , number | null >
237+ value != null ? PARAM_INTEGER_SINGLE . set ( value ) : null ,
238+ } satisfies Param_GetSet < number | null , string | null >
243239
244240export const PARAM_NUMBER_REPEATABLE = {
245- get : ( value : string [ ] ) => value . map ( PARAM_INTEGER . get ) ,
246- set : ( value : number [ ] ) => value . map ( PARAM_INTEGER . set ) ,
247- } satisfies Param_GetSet < string [ ] , number [ ] >
241+ get : ( value : string [ ] ) => value . map ( PARAM_INTEGER_SINGLE . get ) ,
242+ set : ( value : number [ ] ) => value . map ( PARAM_INTEGER_SINGLE . set ) ,
243+ } satisfies Param_GetSet < number [ ] , string [ ] >
248244
249245export const PARAM_NUMBER_REPEATABLE_OPTIONAL = {
250246 get : ( value : string [ ] | null ) =>
251247 value == null ? null : PARAM_NUMBER_REPEATABLE . get ( value ) ,
252248 set : ( value : number [ ] | null ) =>
253249 value != null ? PARAM_NUMBER_REPEATABLE . set ( value ) : null ,
254- } satisfies Param_GetSet < string [ ] | null , number [ ] | null >
250+ } satisfies Param_GetSet < number [ ] | null , string [ ] | null >
251+
252+ /**
253+ * Native Param parser for integers.
254+ *
255+ * @internal
256+ */
257+ export const PARAM_PARSER_INTEGER : Param_GetSet < number | number [ ] | null > = {
258+ get : value =>
259+ Array . isArray ( value )
260+ ? PARAM_NUMBER_REPEATABLE . get ( value )
261+ : value != null
262+ ? PARAM_INTEGER_SINGLE . get ( value )
263+ : null ,
264+ set : value =>
265+ Array . isArray ( value )
266+ ? PARAM_NUMBER_REPEATABLE . set ( value )
267+ : value != null
268+ ? PARAM_INTEGER_SINGLE . set ( value )
269+ : null ,
270+ }
255271
256272export class MatcherPatternPathCustomParams <
257273 TParamsOptions ,
0 commit comments