/// <reference types="mongoose/types/aggregate" />
/// <reference types="mongoose/types/callback" />
/// <reference types="mongoose/types/collection" />
/// <reference types="mongoose/types/connection" />
/// <reference types="mongoose/types/cursor" />
/// <reference types="mongoose/types/document" />
/// <reference types="mongoose/types/error" />
/// <reference types="mongoose/types/expressions" />
/// <reference types="mongoose/types/helpers" />
/// <reference types="mongoose/types/middlewares" />
/// <reference types="mongoose/types/indexes" />
/// <reference types="mongoose/types/models" />
/// <reference types="mongoose/types/mongooseoptions" />
/// <reference types="mongoose/types/pipelinestage" />
/// <reference types="mongoose/types/populate" />
/// <reference types="mongoose/types/query" />
/// <reference types="mongoose/types/schemaoptions" />
/// <reference types="mongoose/types/schematypes" />
/// <reference types="mongoose/types/session" />
/// <reference types="mongoose/types/types" />
/// <reference types="mongoose/types/utility" />
/// <reference types="mongoose/types/validation" />
/// <reference types="mongoose/types/virtuals" />
/// <reference types="mongoose/types/inferschematype" />
/// <reference types="mongoose/types/inferrawdoctype" />
import { Request, Response, Router, NextFunction } from 'express';
import { Document, Model } from 'mongoose';
/**
 * Options for configuring the CRUD controller behavior.
 */
export interface CrudOptions<T extends Document> {
    middleware?: ((req: Request, res: Response, next: NextFunction) => void)[];
    onSuccess?: (res: Response, method: string, result: T | T[] | any) => void;
    onError?: (res: Response, method: string, error: Error) => void;
    methods?: ('POST' | 'GET' | 'PUT' | 'DELETE')[];
    relatedModel?: Model<any>;
    relatedField?: string;
    relatedMethods?: ('POST' | 'GET' | 'PUT' | 'DELETE')[];
    aggregatePipeline?: object[];
    customRoutes?: {
        method: 'post' | 'get' | 'put' | 'delete';
        path: string;
        handler: (req: Request, res: Response) => void;
    }[];
}
/**
 * A generic CRUD Controller for Express/Mongoose API development.
 *
 * It registers standard CRUD endpoints based on the provided model and endpoint string,
 * along with any custom routes.
 */
declare class CrudController<T extends Document> {
    private model;
    private endpoint;
    private router;
    private routes;
    constructor(model: Model<T>, endpoint: string, options?: CrudOptions<T>);
    /**
     * Applies middleware to the route handler.
     * @param routeHandler The original route handler.
     * @param middlewareList Optional array of middleware functions.
     * @returns Array of middleware functions including the route handler.
     */
    private applyMiddleware;
    /**
     * Registers route definitions to the internal list.
     * @param method HTTP method.
     * @param path URL path.
     * @param params Optional route parameter names.
     */
    private registerRoute;
    /**
     * Configures all endpoints based on given options.
     * @param options CrudOptions to setup CRUD behaviors.
     */
    private configureRoutes;
    /**
     * Returns the configured Express router.
     */
    getRouter(): Router;
    /**
     * Returns an array of registered route definitions.
     */
    getRoutes(): {
        method: string;
        path: string;
        params?: string[];
    }[];
}
export default CrudController;
