UNPKG

3.68 kBTypeScriptView Raw
1/**
2 * Encode a string into another string.
3 */
4export type Encode = (value: string) => string;
5/**
6 * Decode a string into another string.
7 */
8export type Decode = (value: string) => string;
9export interface ParseOptions {
10 /**
11 * A function for encoding input strings.
12 */
13 encodePath?: Encode;
14}
15export interface PathToRegexpOptions {
16 /**
17 * Matches the path completely without trailing characters. (default: `true`)
18 */
19 end?: boolean;
20 /**
21 * Allows optional trailing delimiter to match. (default: `true`)
22 */
23 trailing?: boolean;
24 /**
25 * Match will be case sensitive. (default: `false`)
26 */
27 sensitive?: boolean;
28 /**
29 * The default delimiter for segments. (default: `'/'`)
30 */
31 delimiter?: string;
32}
33export interface MatchOptions extends PathToRegexpOptions {
34 /**
35 * Function for decoding strings for params, or `false` to disable entirely. (default: `decodeURIComponent`)
36 */
37 decode?: Decode | false;
38}
39export interface CompileOptions {
40 /**
41 * Function for encoding input strings for output into the path, or `false` to disable entirely. (default: `encodeURIComponent`)
42 */
43 encode?: Encode | false;
44 /**
45 * The default delimiter for segments. (default: `'/'`)
46 */
47 delimiter?: string;
48}
49/**
50 * Plain text.
51 */
52export interface Text {
53 type: "text";
54 value: string;
55}
56/**
57 * A parameter designed to match arbitrary text within a segment.
58 */
59export interface Parameter {
60 type: "param";
61 name: string;
62}
63/**
64 * A wildcard parameter designed to match multiple segments.
65 */
66export interface Wildcard {
67 type: "wildcard";
68 name: string;
69}
70/**
71 * A set of possible tokens to expand when matching.
72 */
73export interface Group {
74 type: "group";
75 tokens: Token[];
76}
77/**
78 * A token that corresponds with a regexp capture.
79 */
80export type Key = Parameter | Wildcard;
81/**
82 * A sequence of `path-to-regexp` keys that match capturing groups.
83 */
84export type Keys = Array<Key>;
85/**
86 * A sequence of path match characters.
87 */
88export type Token = Text | Parameter | Wildcard | Group;
89/**
90 * Tokenized path instance.
91 */
92export declare class TokenData {
93 readonly tokens: Token[];
94 constructor(tokens: Token[]);
95}
96/**
97 * Parse a string for the raw tokens.
98 */
99export declare function parse(str: string, options?: ParseOptions): TokenData;
100/**
101 * Compile a string to a template function for the path.
102 */
103export declare function compile<P extends ParamData = ParamData>(path: Path, options?: CompileOptions & ParseOptions): (data?: P) => string;
104export type ParamData = Partial<Record<string, string | string[]>>;
105export type PathFunction<P extends ParamData> = (data?: P) => string;
106/**
107 * A match result contains data about the path match.
108 */
109export interface MatchResult<P extends ParamData> {
110 path: string;
111 params: P;
112}
113/**
114 * A match is either `false` (no match) or a match result.
115 */
116export type Match<P extends ParamData> = false | MatchResult<P>;
117/**
118 * The match function takes a string and returns whether it matched the path.
119 */
120export type MatchFunction<P extends ParamData> = (path: string) => Match<P>;
121/**
122 * Supported path types.
123 */
124export type Path = string | TokenData;
125/**
126 * Transform a path into a match function.
127 */
128export declare function match<P extends ParamData>(path: Path | Path[], options?: MatchOptions & ParseOptions): MatchFunction<P>;
129export declare function pathToRegexp(path: Path | Path[], options?: PathToRegexpOptions & ParseOptions): {
130 regexp: RegExp;
131 keys: Keys;
132};
133/**
134 * Stringify token data into a path string.
135 */
136export declare function stringify(data: TokenData): string;