@eggjs/router
Version:
Router middleware for egg/koa. Provides RESTful resource routing.
115 lines (114 loc) • 3.71 kB
TypeScript
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;
}