/** * @typed/fp/Path is a collection of helpers for constructing paths that follow * the path-to-regexp syntax and type-level combinators for parsing that syntax and * for interpolating values. * @since 0.13.0 */ import { A, N } from 'ts-toolbelt'; /** * Template for parameters * @category Model * @since 0.13.0 */ export declare type Param = `:${A}`; /** * @category Constructor * @since 0.13.0 */ export declare const param: (param: A) => `:${A}`; /** * Template for optional path parts * @category Model * @since 0.13.0 */ export declare type Optional = `${A}?`; /** * @category Constructor * @since 0.13.0 */ export declare const optional: (param: A) => `${A}?`; /** * Construct a custom prefix * @category Model * @since 0.13.0 */ export declare type Prefix

= `{${P}${A}}`; /** * @category Constructor * @since 0.13.0 */ export declare const prefix:

(prefix: P, param: A) => `{${P}${A}}`; /** * Construct query params * @category Model * @since 0.13.0 */ export declare type QueryParam = `` extends V ? K : `${K}=${V}`; /** * Construct query params * @category Constructor * @since 0.13.0 */ export declare const queryParam: (key: K, value: V) => QueryParam; /** * zero or more path parts will be matched to this param * @category Model * @since 0.13.0 */ export declare type ZeroOrMore = `${Param}*`; /** * @category Constructor * @since 0.13.0 */ export declare const zeroOrMore: (param: A) => `:${A}*`; /** * @category Model * @since 0.13.0 */ export declare type OneOrMore = `${Param}+`; /** * one or more path parts will be matched to this param * @category Constructor * @since 0.13.0 */ export declare const oneOrMore: (param: A) => `:${A}+`; /** * Creates the path-to-regexp syntax for query parameters * @category Model * @since 0.13.0 */ export declare type QueryParams[], R extends string = ``> = Q extends readonly [infer Head, ...infer Tail] ? QueryParams[]>, `` extends R ? `\\?${A.Cast}` : `${R}&${A.Cast}`> : R; /** * @category Constructor * @since 0.13.0 */ export declare const queryParams:

(...params: P) => QueryParams; /** * @category Constructor * @since 0.13.0 */ export declare const unnamed: "(.*)"; /** * @category Model * @since 0.13.0 */ export declare type Unnamed = typeof unnamed; /** * Composes other path parts into a single path * @category Type-level * @since 0.13.0 */ export declare type PathJoin> = A extends readonly [ infer Head, ...infer Tail ] ? `${FormatPart>}${PathJoin>>}` : ``; /** * @category Combinator * @since 0.13.0 */ export declare const pathJoin:

(...parts: P) => PathJoin

; /** * Formats a piece of a path * @category Combinator * @since 0.13.0 */ export declare const formatPart: (part: string) => string; /** * @category Type-level * @since 0.13.0 */ export declare type FormatPart

= `` extends P ? P : RemoveLeadingSlash

extends `\\?${infer _}` ? RemoveLeadingSlash

: RemoveLeadingSlash

extends `{${infer _}` ? RemoveLeadingSlash

: P extends QueryParam | QueryParams ? P : `/${RemoveLeadingSlash

}`; /** * Remove forward slashes prefixes recursively * @category Type-level * @since 0.13.0 */ export declare type RemoveLeadingSlash = A extends `/${infer R}` ? RemoveLeadingSlash : A; /** * @category Combinator * @since 0.13.0 */ export declare const removeLeadingSlash: (a: A) => RemoveLeadingSlash; /** * @category Type-level * @since 0.13.0 */ export declare type ParamsOf = Compact>>; /** * @category Type-level * @since 0.13.0 */ export declare type QueryParamsOf

= Compact>>; /** * @category Type-level * @since 0.13.0 */ export declare type PathToParts

= P extends `${infer Head}\\?${infer Tail}` ? readonly [...PathToParts, `\\?${Tail}`] : P extends `${infer Head}/${infer Tail}` ? readonly [...PathToParts, ...PathToParts] : P extends `${infer Head}{${infer Q}}?${infer Tail}` ? readonly [...PathToParts, `{${Q}}?`, ...PathToParts<`${Tail}`>] : P extends `${infer Head}{${infer Q}}${infer Tail}` ? readonly [...PathToParts, `{${Q}}`, ...PathToParts<`${Tail}`>] : `` extends P ? readonly [] : readonly [P]; /** * @category Type-level * @since 0.13.0 */ export declare type PartsToParams, AST = {}> = A extends readonly [ infer Head, ...infer Tail ] ? PartsToParams, AST & PartToParam, AST>> : AST; /** * @category Type-level * @since 0.13.0 */ export declare type PartToParam = A extends `\\${infer R}` ? PartsToParams, AST> : A extends Unnamed ? { readonly [K in FindNextIndex extends number ? FindNextIndex : never]: string; } : A extends `${infer _}${Unnamed}}?` ? { readonly [K in FindNextIndex extends number ? FindNextIndex : never]?: string; } : A extends `${infer _}${Unnamed}}` ? { readonly [K in FindNextIndex extends number ? FindNextIndex : never]: string; } : A extends `${infer _}${Param}}?` ? { readonly [K in R]?: string; } : A extends `${infer _}${Param}}` ? { readonly [K in R]: string; } : A extends `${infer _}${Param}?` ? { readonly [K in R]?: string; } : A extends `${infer _}${Param}+` ? { readonly [K in R]: readonly [string, ...string[]]; } : A extends `${infer _}${Param}*` ? { readonly [K in R]: readonly string[]; } : A extends `${infer _}${Param}` ? { readonly [K in R]: string; } : {}; /** * @category Type-level * @since 0.13.0 */ export declare type QueryParamsToParts> = Q extends `\\?${infer Q}` ? QueryParamsToParts : Q extends `?${infer Q}` ? QueryParamsToParts : Q extends `${infer Head}&${infer Tail}` ? QueryParamsToParts> : readonly [...R, QueryParamValue]; /** * @category Type-level * @since 0.13.0 */ export declare type QueryToParams = Q extends `${infer Head}&${infer Tail}` ? QueryToParams> : Q extends `?${infer K}` ? QueryToParams : Q extends `${infer K}?` ? AST & Partial> : Q extends `${infer K}` ? AST & QueryParamAst : AST; /** * @category Type-level * @since 0.13.0 */ export declare type FindNextIndex = I extends keyof AST ? FindNextIndex> : I; /** * @category Type-level * @since 0.13.0 */ export declare type PathToQuery

= P extends `${infer _}\\${infer Q}` ? Q : ``; declare type QueryParamValue = K extends `${infer _}=${infer R}` ? R : string; declare type QueryParamAst = Readonly, QueryParamAstValue>>; declare type QueryParamAstKey = K extends `${infer K}=${infer _}` ? K : K; declare type QueryParamAstValue = K extends `${infer _}=${infer R}` ? R extends Param | Unnamed ? string : R : string; declare type Compact = { readonly [K in keyof A]: A[K]; }; /** * @category Type-level * @since 0.13.0 */ export declare type Interpolate

> = P extends `${infer Head}\\?${infer Tail}` ? PathJoin, Params, InpterpolateParts, Params>>[0]> : PathJoin, Params>[0]>; /** * @category Type-level * @since 0.13.0 */ export declare type InpterpolateParts = Parts extends readonly [infer H, ...infer T] ? H extends Optional> ? FindNextIndex extends keyof Params ? InpterpolateParts], string | number>}`>, AST & Record]>> : InpterpolateParts : H extends Prefix ? InpterpolateParts, keyof Params>], string | number>}`>, AST & Record, keyof Params>]>> : H extends Optional>> ? P extends keyof Params ? InpterpolateParts], string>>, AST & Record]>> : InpterpolateParts : H extends Prefix> ? InpterpolateParts], string>>, AST & Record]>> : InterpolatePart extends readonly [infer A, infer B] ? InpterpolatePartsWithNext : InpterpolateParts : readonly [R, AST]; /** * @category Type-level * @since 0.13.0 */ export declare type AppendPrefix = R extends readonly [...infer Init, infer L] ? readonly [...Init, `${A.Cast}${Pre}${P}`] : R; /** * @category Type-level * @since 0.13.0 */ export declare type InpterpolatePartsWithNext = InpterpolateParts; /** * @category Type-level * @since 0.13.0 */ export declare type InterpolatePart = P extends Optional> ? R extends keyof Params ? readonly [Params[R], AST & Record] : readonly ['', AST] : P extends Param ? R extends keyof Params ? readonly [Params[R], AST & Record] : readonly [P, AST] : P extends Unnamed ? FindNextIndex extends keyof Params ? InterpolateUnnamedPart, AST> : readonly [P, AST] : P extends Prefix> ? R extends keyof Params ? [`${Pre}${A.Cast}`, AST & Record] : [] : P extends Optional>> ? R extends keyof Params ? [`${Pre}${A.Cast}`, AST & Partial>] : [] : readonly [P, AST]; /** * @category Type-level * @since 0.13.0 */ export declare type InterpolateUnnamedPart = readonly [ Params[K], AST & Record ]; declare type InterpolateWithQueryParams = Q extends readonly [infer Head, ...infer Tail] ? InterpolateWithQueryParams, Params, InterpolateQueryParamPart[0], InterpolateQueryParamPart[1]> : Previous; /** * @category Type-level * @since 0.13.0 */ export declare type InterpolateQueryParamPart = Part extends QueryParam ? InterpolateQueryParamPartWithKey, First> : readonly [[[...Previous[0], Part], Previous[1]], false]; declare type InterpolateQueryParamPartWithKey = '' extends Previous[0] ? [[Parts, Previous[1]], First] : [[[...Parts, `${K}=${Previous[0]}`], Previous[1]], false]; declare type SplitQueryParams

= P extends `${infer Head}&${infer Tail}` ? readonly [Head, ...SplitQueryParams] : readonly [P]; export {}; //# sourceMappingURL=Path.d.ts.map