import { Collection, CollectionOptions, Db } from 'mongodb';
import { OpenAPIV3 } from 'openapi-police';
import { Operation } from '../operation.js';
import { Resource, ResourceDefinition, Routes } from '../resource.js';
import { Method } from '../types.js';
export interface MongoOperationFactory {
    new (resource: MongoResource, path: string, method: Method): Operation;
}
export interface MongoRoutes extends Routes {
    [path: string]: {
        ['get']?: MongoOperationFactory;
        ['put']?: MongoOperationFactory;
        ['post']?: MongoOperationFactory;
        ['delete']?: MongoOperationFactory;
        ['options']?: MongoOperationFactory;
        ['head']?: MongoOperationFactory;
        ['patch']?: MongoOperationFactory;
    };
}
export interface MongoResourceDefinition extends ResourceDefinition {
    collection?: string;
    idIsObjectId?: boolean;
    createIndexes?: boolean;
    escapeProperties?: boolean;
    queryLimit?: number;
}
export declare class MongoResource extends Resource {
    info: MongoResourceDefinition;
    db: Promise<Db>;
    indexesChecked: boolean;
    constructor(db: string | Db | Promise<Db>, info: MongoResourceDefinition, routes?: MongoRoutes);
    protected initInfo(): void;
    get schema(): OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject;
    get requestSchema(): OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject;
    get responseSchema(): OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject;
    checkCollectionIndexes(coll: Collection): Promise<any>;
    getCollection(opts?: CollectionOptions): Promise<Collection>;
    protected getCollectionOptions(): CollectionOptions;
    protected getIndexes(): any[] | undefined;
    static defaultRoutes(): MongoRoutes;
}
