compare-path
Version:
An easy-to-use package to detect if two URLs match each other by comparing their abstract paths
30 lines • 1.2 kB
TypeScript
/**
* Type-level extraction of route parameters from a path shape string.
*
* Supports:
*
* - `:param` for dynamic segments (e.g., /user/:id)
* - `[param]` for dynamic segments (e.g., /user/[id])
* - `**` wildcard for catch-all segments (e.g., /files/**)
* - `[...param]` wildcard for named catch-all segments (e.g., /files/[...slug])
*
* Returns a mapped type of parameters with `string` values or `{ rest: string[] }` for wildcards.
*/
export type ExtractRouteParams<S extends string> = S extends `/${infer Segment}/${infer Rest}` ? (Segment extends `:${infer Param}` ? {
[K in Param]: string;
} : Segment extends `[...${infer Param}]` ? {
[K in Param]: string[];
} : Segment extends `[${infer Param}]` ? {
[K in Param]: string;
} : Segment extends '**' ? {
rest: string[];
} : {}) & ExtractRouteParams<`/${Rest}`> : S extends `/${infer Segment}` ? Segment extends `:${infer Param}` ? {
[K in Param]: string;
} : Segment extends `[...${infer Param}]` ? {
[K in Param]: string[];
} : Segment extends `[${infer Param}]` ? {
[K in Param]: string;
} : Segment extends '**' ? {
rest: string[];
} : {} : {};
//# sourceMappingURL=extract-route-params.d.ts.map