type TypeOrArray = T | T[]; interface LiteralSegment { type: 'literal'; value?: string; } interface ParameterSegment { type: 'parameter'; name: string; value?: string; wildcard: boolean; optional: boolean; constraints: readonly Constraint[]; } type RouteSegment = LiteralSegment | ParameterSegment; type TokenType = 'Literal' | 'OpenBrace' | 'CloseBrace' | 'Colon' | 'QuestionMark' | 'Asterisk' | 'Identifier' | 'Comma' | 'LeftParen' | 'RightParen' | 'EscapedChar' | 'EndOfInput'; interface Token { type: TokenType; value?: string; position: number; } interface Constraint { type: string; params: string; } interface ConstraintValidation { (paramName: string, value: string | number | boolean | undefined, params: string): void; verify(this: void, paramName: string, params: string): void; toRegExp(this: void, params: string): string; } type MatchedParam = Record; export type { Constraint as C, LiteralSegment as L, MatchedParam as M, ParameterSegment as P, RouteSegment as R, Token as T, ConstraintValidation as a, TokenType as b, TypeOrArray as c };