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