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
TypeScript
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 {};