1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 | import * as Koa from "koa";
|
21 |
|
22 | declare namespace Router {
|
23 | export interface IRouterOptions {
|
24 | |
25 |
|
26 |
|
27 | prefix?: string | undefined;
|
28 | |
29 |
|
30 |
|
31 | methods?: string[] | undefined;
|
32 | routerPath?: string | undefined;
|
33 | |
34 |
|
35 |
|
36 | sensitive?: boolean | undefined;
|
37 | |
38 |
|
39 |
|
40 |
|
41 |
|
42 |
|
43 | strict?: boolean | undefined;
|
44 | }
|
45 |
|
46 | export interface IRouterParamContext<StateT = any, CustomT = {}> {
|
47 | |
48 |
|
49 |
|
50 | params: Record<string, string>;
|
51 | |
52 |
|
53 |
|
54 | router: Router<StateT, CustomT>;
|
55 | |
56 |
|
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 |
|
68 |
|
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 |
|
83 |
|
84 | throw?: boolean | undefined;
|
85 | |
86 |
|
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 |
|
174 | declare 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 | *
|
514 | *
|
515 | * Query can be generated from third argument:
|
516 | *
|
517 | * router.url('user', { id: 3 }, { query: { limit: 1 } });
|
518 | *
|
519 | *
|
520 | * router.url('user', { id: 3 }, { query: "limit=1" });
|
521 | *
|
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 |
|
529 |
|
530 | match(path: string, method: string): Router.IRoutesMatch;
|
531 |
|
532 | |
533 |
|
534 |
|
535 | param(param: string, middleware: Router.IParamMiddleware<StateT, CustomT>): Router<StateT, CustomT>;
|
536 |
|
537 | |
538 |
|
539 |
|
540 | static url(path: string | RegExp, params: Object): string;
|
541 | }
|
542 |
|
543 | export = Router;
|
544 |
|
\ | No newline at end of file |