UNPKG

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
/** * 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