UNPKG

17.4 kBTypeScriptView Raw
1// Type definitions for koa-router 7.4
2// Project: https://github.com/alexmingoia/koa-router#readme
3// Definitions by: Jerry Chin <https://github.com/hellopao>
4// Pavel Ivanov <https://github.com/schfkt>
5// JounQin <https://github.com/JounQin>
6// Romain Faust <https://github.com/romain-faust>
7// Guillaume Mayer <https://github.com/Guillaume-Mayer>
8// Andrea Gueugnaut <https://github.com/falinor>
9// Yves Kaufmann <https://github.com/yveskaufmann>
10// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
11// TypeScript Version: 2.3
12
13/* =================== USAGE ===================
14
15 import * as Router from "koa-router";
16 var router = new Router();
17
18 =============================================== */
19
20import * as Koa from "koa";
21
22declare namespace Router {
23 export interface IRouterOptions {
24 /**
25 * Prefix for all routes.
26 */
27 prefix?: string | undefined;
28 /**
29 * Methods which should be supported by the router.
30 */
31 methods?: string[] | undefined;
32 routerPath?: string | undefined;
33 /**
34 * Whether or not routing should be case-sensitive.
35 */
36 sensitive?: boolean | undefined;
37 /**
38 * Whether or not routes should matched strictly.
39 *
40 * If strict matching is enabled, the trailing slash is taken into
41 * account when matching routes.
42 */
43 strict?: boolean | undefined;
44 }
45
46 export interface IRouterParamContext<StateT = any, CustomT = {}> {
47 /**
48 * url params
49 */
50 params: Record<string, string>;
51 /**
52 * the router instance
53 */
54 router: Router<StateT, CustomT>;
55 /**
56 * Matched route
57 */
58 _matchedRoute: string | RegExp | undefined;
59 _matchedRouteName: string | undefined;
60 }
61
62 export type RouterContext<StateT = any, CustomT = {}> = Koa.ParameterizedContext<
63 StateT,
64 CustomT & IRouterParamContext<StateT, CustomT>
65 >;
66
67 // For backward compatibility IRouterContext needs to be an interface
68 // But it's deprecated - please use `RouterContext` instead
69 export interface IRouterContext extends RouterContext {}
70
71 export type IMiddleware<StateT = any, CustomT = {}> = Koa.Middleware<
72 StateT,
73 CustomT & IRouterParamContext<StateT, CustomT>
74 >;
75
76 export interface IParamMiddleware<STateT = any, CustomT = {}> {
77 (param: string, ctx: RouterContext<STateT, CustomT>, next: () => Promise<any>): any;
78 }
79
80 export interface IRouterAllowedMethodsOptions {
81 /**
82 * throw error instead of setting status and header
83 */
84 throw?: boolean | undefined;
85 /**
86 * throw the returned value in place of the default NotImplemented error
87 */
88 notImplemented?: (() => any) | undefined;
89 /**
90 * throw the returned value in place of the default MethodNotAllowed error
91 */
92 methodNotAllowed?: (() => any) | undefined;
93 }
94
95 export interface ILayerOptions {
96 name: string;
97 sensitive?: boolean | undefined;
98 strict?: boolean | undefined;
99 end?: boolean | undefined;
100 prefix?: string | undefined;
101 ignoreCaptures?: boolean | undefined;
102 }
103
104 export interface IUrlOptionsQuery {
105 query: object | string;
106 }
107
108 export interface IRoutesMatch {
109 path: Layer[];
110 pathAndMethod: Layer[];
111 route: boolean;
112 }
113
114 export class ParamName {
115 asterisk: boolean;
116 delimiter: string;
117 name: string;
118 optional: boolean;
119 partial: boolean;
120 pattern: string;
121 prefix: string;
122 repeat: string;
123 }
124
125 export class Layer {
126 opts: ILayerOptions;
127 name: string;
128 methods: string[];
129 paramNames: ParamName[];
130 stack: Router.IMiddleware[];
131 regexp: RegExp;
132 path: string;
133
134 constructor(path: string | RegExp, methods: string[], middleware: Router.IMiddleware, opts?: ILayerOptions);
135 constructor(
136 path: string | RegExp,
137 methods: string[],
138 middleware: Array<Router.IMiddleware>,
139 opts?: ILayerOptions,
140 );
141
142 /**
143 * Returns whether request `path` matches route.
144 */
145 match(path: string): boolean;
146
147 /**
148 * Returns map of URL parameters for given `path` and `paramNames`.
149 */
150 params(path: string | RegExp, captures: string[], existingParams?: Object): Object;
151
152 /**
153 * Returns array of regexp url path captures.
154 */
155 captures(path: string): string[];
156
157 /**
158 * Generate URL for route using given `params`.
159 */
160 url(params: Object): string;
161
162 /**
163 * Run validations on route named parameters.
164 */
165 param(param: string, fn: Router.IMiddleware): Layer;
166
167 /**
168 * Prefix route path.
169 */
170 setPrefix(prefix: string): Layer;
171 }
172}
173
174declare class Router<StateT = any, CustomT = {}> {
175 params: Object;
176 stack: Array<Router.Layer>;
177
178 /**
179 * Create a new router.
180 */
181 constructor(opt?: Router.IRouterOptions);
182
183 /**
184 * Use given middleware.
185 *
186 * Middleware run in the order they are defined by `.use()`. They are invoked
187 * sequentially, requests start at the first middleware and work their way
188 * "down" the middleware stack.
189 */
190 use(...middleware: Array<Router.IMiddleware<StateT, CustomT>>): Router<StateT, CustomT>;
191 use(
192 path: string | string[] | RegExp,
193 ...middleware: Array<Router.IMiddleware<StateT, CustomT>>
194 ): Router<StateT, CustomT>;
195
196 /**
197 * HTTP get method
198 */
199 get(
200 name: string,
201 path: string | RegExp,
202 ...middleware: Array<Router.IMiddleware<StateT, CustomT>>
203 ): Router<StateT, CustomT>;
204 get(
205 path: string | RegExp | (string | RegExp)[],
206 ...middleware: Array<Router.IMiddleware<StateT, CustomT>>
207 ): Router<StateT, CustomT>;
208 get<T, U>(
209 name: string,
210 path: string | RegExp,
211 middleware: Koa.Middleware<T, U>,
212 routeHandler: Router.IMiddleware<StateT & T, CustomT & U>,
213 ): Router<StateT & T, CustomT & U>;
214 get<T, U>(
215 path: string | RegExp | (string | RegExp)[],
216 middleware: Koa.Middleware<T, U>,
217 routeHandler: Router.IMiddleware<StateT & T, CustomT & U>,
218 ): Router<StateT & T, CustomT & U>;
219
220 /**
221 * HTTP post method
222 */
223 post(
224 name: string,
225 path: string | RegExp,
226 ...middleware: Array<Router.IMiddleware<StateT, CustomT>>
227 ): Router<StateT, CustomT>;
228 post(
229 path: string | RegExp | (string | RegExp)[],
230 ...middleware: Array<Router.IMiddleware<StateT, CustomT>>
231 ): Router<StateT, CustomT>;
232 post<T, U>(
233 name: string,
234 path: string | RegExp,
235 middleware: Koa.Middleware<T, U>,
236 routeHandler: Router.IMiddleware<StateT & T, CustomT & U>,
237 ): Router<StateT & T, CustomT & U>;
238 post<T, U>(
239 path: string | RegExp | (string | RegExp)[],
240 middleware: Koa.Middleware<T, U>,
241 routeHandler: Router.IMiddleware<StateT & T, CustomT & U>,
242 ): Router<StateT & T, CustomT & U>;
243
244 /**
245 * HTTP put method
246 */
247 put(
248 name: string,
249 path: string | RegExp,
250 ...middleware: Array<Router.IMiddleware<StateT, CustomT>>
251 ): Router<StateT, CustomT>;
252 put(
253 path: string | RegExp | (string | RegExp)[],
254 ...middleware: Array<Router.IMiddleware<StateT, CustomT>>
255 ): Router<StateT, CustomT>;
256 put<T, U>(
257 name: string,
258 path: string | RegExp,
259 middleware: Koa.Middleware<T, U>,
260 routeHandler: Router.IMiddleware<StateT & T, CustomT & U>,
261 ): Router<StateT & T, CustomT & U>;
262 put<T, U>(
263 path: string | RegExp | (string | RegExp)[],
264 middleware: Koa.Middleware<T, U>,
265 routeHandler: Router.IMiddleware<StateT & T, CustomT & U>,
266 ): Router<StateT & T, CustomT & U>;
267
268 /**
269 * HTTP link method
270 */
271 link(
272 name: string,
273 path: string | RegExp,
274 ...middleware: Array<Router.IMiddleware<StateT, CustomT>>
275 ): Router<StateT, CustomT>;
276 link(
277 path: string | RegExp | (string | RegExp)[],
278 ...middleware: Array<Router.IMiddleware<StateT, CustomT>>
279 ): Router<StateT, CustomT>;
280 link<T, U>(
281 name: string,
282 path: string | RegExp,
283 middleware: Koa.Middleware<T, U>,
284 routeHandler: Router.IMiddleware<StateT & T, CustomT & U>,
285 ): Router<StateT & T, CustomT & U>;
286 link<T, U>(
287 path: string | RegExp | (string | RegExp)[],
288 middleware: Koa.Middleware<T, U>,
289 routeHandler: Router.IMiddleware<StateT & T, CustomT & U>,
290 ): Router<StateT & T, CustomT & U>;
291
292 /**
293 * HTTP unlink method
294 */
295 unlink(
296 name: string,
297 path: string | RegExp,
298 ...middleware: Array<Router.IMiddleware<StateT, CustomT>>
299 ): Router<StateT, CustomT>;
300 unlink(
301 path: string | RegExp | (string | RegExp)[],
302 ...middleware: Array<Router.IMiddleware<StateT, CustomT>>
303 ): Router<StateT, CustomT>;
304 unlink<T, U>(
305 name: string,
306 path: string | RegExp,
307 middleware: Koa.Middleware<T, U>,
308 routeHandler: Router.IMiddleware<StateT & T, CustomT & U>,
309 ): Router<StateT & T, CustomT & U>;
310 unlink<T, U>(
311 path: string | RegExp | (string | RegExp)[],
312 middleware: Koa.Middleware<T, U>,
313 routeHandler: Router.IMiddleware<StateT & T, CustomT & U>,
314 ): Router<StateT & T, CustomT & U>;
315
316 /**
317 * HTTP delete method
318 */
319 delete(
320 name: string,
321 path: string | RegExp,
322 ...middleware: Array<Router.IMiddleware<StateT, CustomT>>
323 ): Router<StateT, CustomT>;
324 delete(
325 path: string | RegExp | (string | RegExp)[],
326 ...middleware: Array<Router.IMiddleware<StateT, CustomT>>
327 ): Router<StateT, CustomT>;
328 delete<T, U>(
329 name: string,
330 path: string | RegExp,
331 middleware: Koa.Middleware<T, U>,
332 routeHandler: Router.IMiddleware<StateT & T, CustomT & U>,
333 ): Router<StateT & T, CustomT & U>;
334 delete<T, U>(
335 path: string | RegExp | (string | RegExp)[],
336 middleware: Koa.Middleware<T, U>,
337 routeHandler: Router.IMiddleware<StateT & T, CustomT & U>,
338 ): Router<StateT & T, CustomT & U>;
339
340 /**
341 * Alias for `router.delete()` because delete is a reserved word
342 */
343 del(
344 name: string,
345 path: string | RegExp,
346 ...middleware: Array<Router.IMiddleware<StateT, CustomT>>
347 ): Router<StateT, CustomT>;
348 del(
349 path: string | RegExp | (string | RegExp)[],
350 ...middleware: Array<Router.IMiddleware<StateT, CustomT>>
351 ): Router<StateT, CustomT>;
352 del<T, U>(
353 name: string,
354 path: string | RegExp,
355 middleware: Koa.Middleware<T, U>,
356 routeHandler: Router.IMiddleware<StateT & T, CustomT & U>,
357 ): Router<StateT & T, CustomT & U>;
358 del<T, U>(
359 path: string | RegExp | (string | RegExp)[],
360 middleware: Koa.Middleware<T, U>,
361 routeHandler: Router.IMiddleware<StateT & T, CustomT & U>,
362 ): Router<StateT & T, CustomT & U>;
363
364 /**
365 * HTTP head method
366 */
367 head(
368 name: string,
369 path: string | RegExp,
370 ...middleware: Array<Router.IMiddleware<StateT, CustomT>>
371 ): Router<StateT, CustomT>;
372 head(
373 path: string | RegExp | (string | RegExp)[],
374 ...middleware: Array<Router.IMiddleware<StateT, CustomT>>
375 ): Router<StateT, CustomT>;
376 head<T, U>(
377 name: string,
378 path: string | RegExp,
379 middleware: Koa.Middleware<T, U>,
380 routeHandler: Router.IMiddleware<StateT & T, CustomT & U>,
381 ): Router<StateT & T, CustomT & U>;
382 head<T, U>(
383 path: string | RegExp | (string | RegExp)[],
384 middleware: Koa.Middleware<T, U>,
385 routeHandler: Router.IMiddleware<StateT & T, CustomT & U>,
386 ): Router<StateT & T, CustomT & U>;
387
388 /**
389 * HTTP options method
390 */
391 options(
392 name: string,
393 path: string | RegExp,
394 ...middleware: Array<Router.IMiddleware<StateT, CustomT>>
395 ): Router<StateT, CustomT>;
396 options(
397 path: string | RegExp | (string | RegExp)[],
398 ...middleware: Array<Router.IMiddleware<StateT, CustomT>>
399 ): Router<StateT, CustomT>;
400 options<T, U>(
401 name: string,
402 path: string | RegExp,
403 middleware: Koa.Middleware<T, U>,
404 routeHandler: Router.IMiddleware<StateT & T, CustomT & U>,
405 ): Router<StateT & T, CustomT & U>;
406 options<T, U>(
407 path: string | RegExp | (string | RegExp)[],
408 middleware: Koa.Middleware<T, U>,
409 routeHandler: Router.IMiddleware<StateT & T, CustomT & U>,
410 ): Router<StateT & T, CustomT & U>;
411
412 /**
413 * HTTP patch method
414 */
415 patch(
416 name: string,
417 path: string | RegExp,
418 ...middleware: Array<Router.IMiddleware<StateT, CustomT>>
419 ): Router<StateT, CustomT>;
420 patch(
421 path: string | RegExp | (string | RegExp)[],
422 ...middleware: Array<Router.IMiddleware<StateT, CustomT>>
423 ): Router<StateT, CustomT>;
424 patch<T, U>(
425 name: string,
426 path: string | RegExp,
427 middleware: Koa.Middleware<T, U>,
428 routeHandler: Router.IMiddleware<StateT & T, CustomT & U>,
429 ): Router<StateT & T, CustomT & U>;
430 patch<T, U>(
431 path: string | RegExp | (string | RegExp)[],
432 middleware: Koa.Middleware<T, U>,
433 routeHandler: Router.IMiddleware<StateT & T, CustomT & U>,
434 ): Router<StateT & T, CustomT & U>;
435
436 /**
437 * Register route with all methods.
438 */
439 all(
440 name: string,
441 path: string | RegExp,
442 ...middleware: Array<Router.IMiddleware<StateT, CustomT>>
443 ): Router<StateT, CustomT>;
444 all(
445 path: string | RegExp | (string | RegExp)[],
446 ...middleware: Array<Router.IMiddleware<StateT, CustomT>>
447 ): Router<StateT, CustomT>;
448 all<T, U>(
449 name: string,
450 path: string | RegExp,
451 middleware: Koa.Middleware<T, U>,
452 routeHandler: Router.IMiddleware<StateT & T, CustomT & U>,
453 ): Router<StateT & T, CustomT & U>;
454 all<T, U>(
455 path: string | RegExp | (string | RegExp)[],
456 middleware: Koa.Middleware<T, U>,
457 routeHandler: Router.IMiddleware<StateT & T, CustomT & U>,
458 ): Router<StateT & T, CustomT & U>;
459
460 /**
461 * Set the path prefix for a Router instance that was already initialized.
462 */
463 prefix(prefix: string): Router<StateT, CustomT>;
464
465 /**
466 * Returns router middleware which dispatches a route matching the request.
467 */
468 routes(): Router.IMiddleware<StateT, CustomT>;
469
470 /**
471 * Returns router middleware which dispatches a route matching the request.
472 */
473 middleware(): Router.IMiddleware<StateT, CustomT>;
474
475 /**
476 * Returns separate middleware for responding to `OPTIONS` requests with
477 * an `Allow` header containing the allowed methods, as well as responding
478 * with `405 Method Not Allowed` and `501 Not Implemented` as appropriate.
479 */
480 allowedMethods(options?: Router.IRouterAllowedMethodsOptions): Router.IMiddleware<StateT, CustomT>;
481
482 /**
483 * Redirect `source` to `destination` URL with optional 30x status `code`.
484 *
485 * Both `source` and `destination` can be route names.
486 */
487 redirect(source: string, destination: string, code?: number): Router<StateT, CustomT>;
488
489 /**
490 * Create and register a route.
491 */
492 register(
493 path: string | RegExp,
494 methods: string[],
495 middleware: Router.IMiddleware<StateT, CustomT> | Array<Router.IMiddleware<StateT, CustomT>>,
496 opts?: Router.ILayerOptions,
497 ): Router.Layer;
498
499 /**
500 * Lookup route with given `name`.
501 */
502 route(name: string): Router.Layer;
503 route(name: string): boolean;
504
505 /**
506 * Generate URL for route. Takes either map of named `params` or series of
507 * arguments (for regular expression routes)
508 *
509 * router = new Router();
510 * router.get('user', "/users/:id", ...
511 *
512 * router.url('user', { id: 3 });
513 * // => "/users/3"
514 *
515 * Query can be generated from third argument:
516 *
517 * router.url('user', { id: 3 }, { query: { limit: 1 } });
518 * // => "/users/3?limit=1"
519 *
520 * router.url('user', { id: 3 }, { query: "limit=1" });
521 * // => "/users/3?limit=1"
522 *
523 */
524 url(name: string, params: any, options?: Router.IUrlOptionsQuery): string;
525 url(name: string, params: any, options?: Router.IUrlOptionsQuery): Error;
526
527 /**
528 * Match given `path` and return corresponding routes.
529 */
530 match(path: string, method: string): Router.IRoutesMatch;
531
532 /**
533 * Run middleware for named route parameters. Useful for auto-loading or validation.
534 */
535 param(param: string, middleware: Router.IParamMiddleware<StateT, CustomT>): Router<StateT, CustomT>;
536
537 /**
538 * Generate URL from url pattern and given `params`.
539 */
540 static url(path: string | RegExp, params: Object): string;
541}
542
543export = Router;
544
\No newline at end of file