UNPKG

static-path

Version:

Static-path uses TypeScript to prevent 404s and other path generation mistakes at compile time

21 lines (20 loc) 1.18 kB
declare type PathParamNames<Pattern extends string> = Pattern extends `:${infer Param}/${infer Rest}` ? Param | PathParamNames<Rest> : Pattern extends `:${infer Param}` ? Param : Pattern extends `${infer _Prefix}:${infer Rest}` ? PathParamNames<`:${Rest}`> : never; export declare type Params<Pattern extends string> = string extends Pattern ? never : { [K in PathParamNames<Pattern>]: string; }; declare type Part<Pattern extends string> = { kind: 'constant'; value: string; } | { kind: 'param'; paramName: PathParamNames<Pattern>; }; export declare type Path<Pattern extends string> = { (params: Params<Pattern>): string; pattern: NormalizePattern<Pattern>; parts: Part<Pattern>[]; path: <Subpattern extends string>(subpattern: Subpattern) => Path<`${Pattern}/${Subpattern}`>; }; export declare function path<Pattern extends string>(pattern: Pattern): Path<Pattern>; export declare type NormalizePattern<Pattern extends string> = '/' extends Pattern ? '/' : Pattern extends `${infer Prefix}//${infer Suffix}` ? NormalizePattern<`${Prefix}/${Suffix}`> : Pattern extends `${infer Prefix}/` ? NormalizePattern<Prefix> : Pattern; export {};