// Type definitions for koa-router 7.4 // Project: https://github.com/alexmingoia/koa-router#readme // Definitions by: Jerry Chin // Pavel Ivanov // JounQin // Romain Faust // Guillaume Mayer // Andrea Gueugnaut // Yves Kaufmann // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.3 /* =================== USAGE =================== import * as Router from "koa-router"; var router = new Router(); =============================================== */ import * as Koa from "koa"; declare namespace Router { export interface IRouterOptions { /** * Prefix for all routes. */ prefix?: string | undefined; /** * Methods which should be supported by the router. */ methods?: string[] | undefined; routerPath?: string | undefined; /** * Whether or not routing should be case-sensitive. */ sensitive?: boolean | undefined; /** * Whether or not routes should matched strictly. * * If strict matching is enabled, the trailing slash is taken into * account when matching routes. */ strict?: boolean | undefined; } export interface IRouterParamContext { /** * url params */ params: Record; /** * the router instance */ router: Router; /** * Matched route */ _matchedRoute: string | RegExp | undefined; _matchedRouteName: string | undefined; } export type RouterContext = Koa.ParameterizedContext< StateT, CustomT & IRouterParamContext >; // For backward compatibility IRouterContext needs to be an interface // But it's deprecated - please use `RouterContext` instead export interface IRouterContext extends RouterContext {} export type IMiddleware = Koa.Middleware< StateT, CustomT & IRouterParamContext >; export interface IParamMiddleware { (param: string, ctx: RouterContext, next: () => Promise): any; } export interface IRouterAllowedMethodsOptions { /** * throw error instead of setting status and header */ throw?: boolean | undefined; /** * throw the returned value in place of the default NotImplemented error */ notImplemented?: (() => any) | undefined; /** * throw the returned value in place of the default MethodNotAllowed error */ methodNotAllowed?: (() => any) | undefined; } export interface ILayerOptions { name: string; sensitive?: boolean | undefined; strict?: boolean | undefined; end?: boolean | undefined; prefix?: string | undefined; ignoreCaptures?: boolean | undefined; } export interface IUrlOptionsQuery { query: object | string; } export interface IRoutesMatch { path: Layer[]; pathAndMethod: Layer[]; route: boolean; } export class ParamName { asterisk: boolean; delimiter: string; name: string; optional: boolean; partial: boolean; pattern: string; prefix: string; repeat: string; } export class Layer { opts: ILayerOptions; name: string; methods: string[]; paramNames: ParamName[]; stack: Router.IMiddleware[]; regexp: RegExp; path: string; constructor(path: string | RegExp, methods: string[], middleware: Router.IMiddleware, opts?: ILayerOptions); constructor( path: string | RegExp, methods: string[], middleware: Array, opts?: ILayerOptions, ); /** * Returns whether request `path` matches route. */ match(path: string): boolean; /** * Returns map of URL parameters for given `path` and `paramNames`. */ params(path: string | RegExp, captures: string[], existingParams?: Object): Object; /** * Returns array of regexp url path captures. */ captures(path: string): string[]; /** * Generate URL for route using given `params`. */ url(params: Object): string; /** * Run validations on route named parameters. */ param(param: string, fn: Router.IMiddleware): Layer; /** * Prefix route path. */ setPrefix(prefix: string): Layer; } } declare class Router { params: Object; stack: Array; /** * Create a new router. */ constructor(opt?: Router.IRouterOptions); /** * Use given middleware. * * Middleware run in the order they are defined by `.use()`. They are invoked * sequentially, requests start at the first middleware and work their way * "down" the middleware stack. */ use(...middleware: Array>): Router; use( path: string | string[] | RegExp, ...middleware: Array> ): Router; /** * HTTP get method */ get( name: string, path: string | RegExp, ...middleware: Array> ): Router; get( path: string | RegExp | (string | RegExp)[], ...middleware: Array> ): Router; get( name: string, path: string | RegExp, middleware: Koa.Middleware, routeHandler: Router.IMiddleware, ): Router; get( path: string | RegExp | (string | RegExp)[], middleware: Koa.Middleware, routeHandler: Router.IMiddleware, ): Router; /** * HTTP post method */ post( name: string, path: string | RegExp, ...middleware: Array> ): Router; post( path: string | RegExp | (string | RegExp)[], ...middleware: Array> ): Router; post( name: string, path: string | RegExp, middleware: Koa.Middleware, routeHandler: Router.IMiddleware, ): Router; post( path: string | RegExp | (string | RegExp)[], middleware: Koa.Middleware, routeHandler: Router.IMiddleware, ): Router; /** * HTTP put method */ put( name: string, path: string | RegExp, ...middleware: Array> ): Router; put( path: string | RegExp | (string | RegExp)[], ...middleware: Array> ): Router; put( name: string, path: string | RegExp, middleware: Koa.Middleware, routeHandler: Router.IMiddleware, ): Router; put( path: string | RegExp | (string | RegExp)[], middleware: Koa.Middleware, routeHandler: Router.IMiddleware, ): Router; /** * HTTP link method */ link( name: string, path: string | RegExp, ...middleware: Array> ): Router; link( path: string | RegExp | (string | RegExp)[], ...middleware: Array> ): Router; link( name: string, path: string | RegExp, middleware: Koa.Middleware, routeHandler: Router.IMiddleware, ): Router; link( path: string | RegExp | (string | RegExp)[], middleware: Koa.Middleware, routeHandler: Router.IMiddleware, ): Router; /** * HTTP unlink method */ unlink( name: string, path: string | RegExp, ...middleware: Array> ): Router; unlink( path: string | RegExp | (string | RegExp)[], ...middleware: Array> ): Router; unlink( name: string, path: string | RegExp, middleware: Koa.Middleware, routeHandler: Router.IMiddleware, ): Router; unlink( path: string | RegExp | (string | RegExp)[], middleware: Koa.Middleware, routeHandler: Router.IMiddleware, ): Router; /** * HTTP delete method */ delete( name: string, path: string | RegExp, ...middleware: Array> ): Router; delete( path: string | RegExp | (string | RegExp)[], ...middleware: Array> ): Router; delete( name: string, path: string | RegExp, middleware: Koa.Middleware, routeHandler: Router.IMiddleware, ): Router; delete( path: string | RegExp | (string | RegExp)[], middleware: Koa.Middleware, routeHandler: Router.IMiddleware, ): Router; /** * Alias for `router.delete()` because delete is a reserved word */ del( name: string, path: string | RegExp, ...middleware: Array> ): Router; del( path: string | RegExp | (string | RegExp)[], ...middleware: Array> ): Router; del( name: string, path: string | RegExp, middleware: Koa.Middleware, routeHandler: Router.IMiddleware, ): Router; del( path: string | RegExp | (string | RegExp)[], middleware: Koa.Middleware, routeHandler: Router.IMiddleware, ): Router; /** * HTTP head method */ head( name: string, path: string | RegExp, ...middleware: Array> ): Router; head( path: string | RegExp | (string | RegExp)[], ...middleware: Array> ): Router; head( name: string, path: string | RegExp, middleware: Koa.Middleware, routeHandler: Router.IMiddleware, ): Router; head( path: string | RegExp | (string | RegExp)[], middleware: Koa.Middleware, routeHandler: Router.IMiddleware, ): Router; /** * HTTP options method */ options( name: string, path: string | RegExp, ...middleware: Array> ): Router; options( path: string | RegExp | (string | RegExp)[], ...middleware: Array> ): Router; options( name: string, path: string | RegExp, middleware: Koa.Middleware, routeHandler: Router.IMiddleware, ): Router; options( path: string | RegExp | (string | RegExp)[], middleware: Koa.Middleware, routeHandler: Router.IMiddleware, ): Router; /** * HTTP patch method */ patch( name: string, path: string | RegExp, ...middleware: Array> ): Router; patch( path: string | RegExp | (string | RegExp)[], ...middleware: Array> ): Router; patch( name: string, path: string | RegExp, middleware: Koa.Middleware, routeHandler: Router.IMiddleware, ): Router; patch( path: string | RegExp | (string | RegExp)[], middleware: Koa.Middleware, routeHandler: Router.IMiddleware, ): Router; /** * Register route with all methods. */ all( name: string, path: string | RegExp, ...middleware: Array> ): Router; all( path: string | RegExp | (string | RegExp)[], ...middleware: Array> ): Router; all( name: string, path: string | RegExp, middleware: Koa.Middleware, routeHandler: Router.IMiddleware, ): Router; all( path: string | RegExp | (string | RegExp)[], middleware: Koa.Middleware, routeHandler: Router.IMiddleware, ): Router; /** * Set the path prefix for a Router instance that was already initialized. */ prefix(prefix: string): Router; /** * Returns router middleware which dispatches a route matching the request. */ routes(): Router.IMiddleware; /** * Returns router middleware which dispatches a route matching the request. */ middleware(): Router.IMiddleware; /** * Returns separate middleware for responding to `OPTIONS` requests with * an `Allow` header containing the allowed methods, as well as responding * with `405 Method Not Allowed` and `501 Not Implemented` as appropriate. */ allowedMethods(options?: Router.IRouterAllowedMethodsOptions): Router.IMiddleware; /** * Redirect `source` to `destination` URL with optional 30x status `code`. * * Both `source` and `destination` can be route names. */ redirect(source: string, destination: string, code?: number): Router; /** * Create and register a route. */ register( path: string | RegExp, methods: string[], middleware: Router.IMiddleware | Array>, opts?: Router.ILayerOptions, ): Router.Layer; /** * Lookup route with given `name`. */ route(name: string): Router.Layer; route(name: string): boolean; /** * Generate URL for route. Takes either map of named `params` or series of * arguments (for regular expression routes) * * router = new Router(); * router.get('user', "/users/:id", ... * * router.url('user', { id: 3 }); * // => "/users/3" * * Query can be generated from third argument: * * router.url('user', { id: 3 }, { query: { limit: 1 } }); * // => "/users/3?limit=1" * * router.url('user', { id: 3 }, { query: "limit=1" }); * // => "/users/3?limit=1" * */ url(name: string, params: any, options?: Router.IUrlOptionsQuery): string; url(name: string, params: any, options?: Router.IUrlOptionsQuery): Error; /** * Match given `path` and return corresponding routes. */ match(path: string, method: string): Router.IRoutesMatch; /** * Run middleware for named route parameters. Useful for auto-loading or validation. */ param(param: string, middleware: Router.IParamMiddleware): Router; /** * Generate URL from url pattern and given `params`. */ static url(path: string | RegExp, params: Object): string; } export = Router;