UNPKG

@eggjs/router

Version:

Router middleware for egg/koa. Provides RESTful resource routing.

115 lines (114 loc) 3.71 kB
import { type Key } from 'path-to-regexp'; import type { MiddlewareFunc, MiddlewareFuncWithParamProperty, ParamMiddlewareFunc } from './types.js'; export interface LayerOptions { prefix?: string; /** route name */ name?: string; /** case sensitive (default: false) */ sensitive?: boolean; /** require the trailing slash (default: false) */ strict?: boolean; ignoreCaptures?: boolean; end?: boolean; } export interface LayerURLOptions { query?: string | object; } export declare class Layer { readonly opts: LayerOptions; readonly name?: string; readonly methods: string[]; readonly stack: MiddlewareFuncWithParamProperty[]; path: string | RegExp; regexp: RegExp; paramNames: Key[]; /** * Initialize a new routing Layer with given `method`, `path`, and `middleware`. * * @param {String|RegExp} path Path string or regular expression. * @param {Array} methods Array of HTTP verbs. * @param {Array|Function} middlewares Layer callback/middleware or series of. * @param {Object=} opts optional params * @param {String=} opts.name route name * @param {String=} opts.sensitive case sensitive (default: false) * @param {String=} opts.strict require the trailing slash (default: false) * @private */ constructor(path: string | RegExp, methods: string[], middlewares: MiddlewareFunc | MiddlewareFunc[], opts?: LayerOptions | string); /** * Returns whether request `path` matches route. * * @param {String} path path string * @return {Boolean} matched or not * @private */ match(path: string): boolean; /** * Returns map of URL parameters for given `path` and `paramNames`. * * @param {String} _path path string * @param {Array.<String>} captures captures strings * @param {Object=} [existingParams] existing params * @return {Object} params object * @private */ params(_path: string, captures: Array<string>, existingParams?: Record<string, string>): Record<string, string>; /** * Returns array of regexp url path captures. * * @param {String} path path string * @return {Array.<String>} captures strings * @private */ captures(path: string): Array<string>; /** * Generate URL for route using given `params`. * * @example * * ```javascript * var route = new Layer(['GET'], '/users/:id', fn); * * route.url(123); // => "/users/123" * route.url('123'); // => "/users/123" * route.url({ id: 123 }); // => "/users/123" * ``` * * @param {Object} params url parameters * @param {Object} paramsOrOptions optional parameters * @return {String} url string * @private */ url(params?: string | number | object, ...paramsOrOptions: (string | number | object | LayerURLOptions)[]): string; /** * Run validations on route named parameters. * * @example * * ```javascript * router * .param('user', function (id, ctx, next) { * ctx.user = users[id]; * if (!user) return ctx.status = 404; * next(); * }) * .get('/users/:user', function (ctx, next) { * ctx.body = ctx.user; * }); * ``` * * @param {String} param param string * @param {Function} fn middleware function * @return {Layer} layer instance * @private */ param(param: string, fn: ParamMiddlewareFunc): Layer; /** * Prefix route path. * * @param {String} prefix prefix string * @return {Layer} layer instance * @private */ setPrefix(prefix: string): Layer; }