import { Route } from "./Route";
import { SauceConfig } from "../resources/SauceConfig";
import { Application } from "express";
import { Sauce } from "../Sauce";
import { ObjectOfAnything } from "../resources/Common";
import { FormattedRoute, RouteGrouping } from "../@types/Routes.types";
interface BindRoutesArgs<custom> {
    app: Application;
    sauceCustom: Sauce<custom>["custom"];
}
/**
 * Manages the application's route configurations.
 *
 * @property {Array} routesArray -
 * It's strongly recommended to utilize the RouteDefinitions
 * file to manage your defined routes. This will make your
 * configured routes far more manageable and readable
 */
export declare class Routes {
    private config;
    routesArray: Route[];
    private controllerMap;
    constructor(config: SauceConfig);
    getFormattedRoutes(stripHidden?: boolean): Promise<(FormattedRoute | RouteGrouping)[]>;
    processRoutes(routeGroups: (FormattedRoute | RouteGrouping)[]): (FormattedRoute | RouteGrouping)[];
    sortRoutes(routes: (FormattedRoute | RouteGrouping)[]): (FormattedRoute | RouteGrouping)[];
    sortRouteGroups(routes: RouteGrouping[]): RouteGrouping[];
    private formatRoutes;
    private cleanRouteParams;
    private addToControllerMap;
    private getControllerPathFromRoute;
    /** This should only run on startup so it's fine that it's not async */
    bindRoutes<custom = ObjectOfAnything>({ app, sauceCustom }: BindRoutesArgs<custom>): void;
}
export {};
