import { type Middleware, type SpecialNextParam } from '../middlewares/shared.js'; import { MiddlewareComposite } from '../middlewares/composite-sync.js'; import { MiddlewareRoute, type Routable, type RouteBuilder, type RouteBuilderArguments } from './route.js'; import type { UriTemplate } from '../uri-template/index.js'; export interface RouterOptions { caseSensitive?: boolean; mergeParams?: boolean; strict?: boolean; length?: number; separator?: string; name?: string; } export type Routes = { [key: string]: ((...args: T) => TReturnType) | Routes; }; export type ParamCallback = (req: any, paramVal: unknown, name: string, ...rest: any[]) => Promise; /** * Use routes. * @param {Routes} routes - The routes. * @param {MiddlewareComposite & { route: RouteBuilder }} [parent] - The parent middleware composite. * @returns {MiddlewareComposite} The middleware composite. */ export declare function useRoutes(routes: Routes, parent?: MiddlewareComposite & { route: RouteBuilder; }): MiddlewareComposite; /** * Router class. * @template T * @extends {MiddlewareComposite} * @implements {Middleware} */ export declare class Router; }, ...unknown[]], TSpecialNextParam extends SpecialNextParam = SpecialNextParam> extends MiddlewareComposite implements Middleware { /** * Creates an instance of Router. * @param {RouterOptions} [options] - The router options. */ constructor(options?: RouterOptions); /** * Creates a new route. * @param {...RouteBuilderArguments} args - The route builder arguments. * @returns {MiddlewareRoute} The middleware route. */ route(...args: RouteBuilderArguments): MiddlewareRoute; /** * Uses routes. * @param {Routes} routes - The routes. * @returns {this} The router instance. */ useRoutes(routes: Routes): this; /** * Uses middleware. * @param {string | UriTemplate} route - The route. * @param {...Middleware} middlewares - The middlewares. * @returns {this} The router instance. */ useMiddleware(route: string | UriTemplate, ...middlewares: Middleware[]): this; useMiddleware(...middlewares: Middleware[]): this; /** * Uses middleware. * @param {string | UriTemplate} route - The route. * @param {...((...args: T) => unknown)} middlewares - The middlewares. * @returns {this} The router instance. */ use(route: string | UriTemplate, ...middlewares: ((...args: T) => unknown)[]): this; use(...middlewares: ((...args: T) => unknown)[]): this; }