/*!
 * express
 * Copyright(c) 2009-2013 TJ Holowaychuk
 * Copyright(c) 2013 Roman Shtylman
 * Copyright(c) 2014-2015 Douglas Christopher Wilson
 * Copyright(c) 2024 Emmanuel Paul Elom
 * MIT Licensed
 */
/**
 * Module dependencies.
 * @private
 */
import Route from './Route';
import Layer from './layer';
import IAny from '../IAny';
interface RouterOptions {
    caseSensitive?: boolean;
    mergeParams?: boolean;
    strict?: boolean;
}
/**
 * Initialize a new `Router` with the given `options`.
 *
 * @param {Object} [options]
 * @return {Router} which is a callable function
 * @public
 */
interface Router {
    (req: any, res: any, next: any): void;
    params: Record<string, any[]>;
    _params: any[];
    caseSensitive: boolean;
    mergeParams: boolean;
    strict: boolean;
    stack: any[];
    param(name: string | Function, fn: Function): Router;
    handle(req: any, res: any, out: any): void;
    use(fn: Function | string, ...fns: Function[]): Router;
    route(path: string): Route;
    [method: string]: any;
}
declare class Router {
    constructor(options: RouterOptions);
    /**
     * Process any parameters for the layer.
     * @private
     */
    private process_params;
    /**
     * Append methods to a list of methods.
     *
     * @param {Array} list
     * @param {Array} addition
     * @private
     */
    appendMethods(list: any[], addition: string | any[]): void;
    /**
     * Get get protocol + host for a URL.
     *
     * @param {string} url
     * @private
     */
    getProtohost(url: string): string | undefined;
    /**
     * Get type for error message.
     *
     * @param  {Mixed} thing
     * @return {String}
     * @private
     */
    gettype(thing: any): string;
    /**
     * Merge params with parent params
     *
     * @param {Object} params
     * @param {Object} parent
     * @return {Object} merged params
     * @private
     */
    mergeParamsFn(params: any[], parent: any): IAny;
    /**
     * Restore obj props after function.
     *
     * @param {Object} obj
     * @param {String} prop
     * @param {Mixed} val
     * @return {Function}
     * @private
     */
    restore(fn: Function, obj: {
        [x: string]: any;
    }, ..._properties: any[]): (err?: any) => any;
    /**
     * Wrap a function
     *
     * @param {function} old
     * @param {function} fn
     * @return {function}
     * @private
     */
    wrap(old: (err?: any) => any, fn: {
        (old: any, err: any): any;
        apply?: any;
    }): (this: any) => void;
    /**
     * Match path to a layer.
     *
     * @param {Layer} layer
     * @param {string} path
     * @private
     */
    matchLayer(layer: Layer, path: string): unknown;
}
export default Router;
