import { Logger, RequestContext } from './../../servers/requestContext';
import { IProvider, ListOptions } from "../provider";
import { Schema } from "../../schemas/schema";
/**
 * Default mongo provider
 */
export declare class MongoProvider implements IProvider<any> {
    private _logger;
    private ctx;
    private options;
    state: {
        keyPropertyNameBySchemas: Map<string, string>;
        uri: string;
        dispose?: () => void;
        _mongo?;
    };
    readonly address: string;
    constructor(_logger: Logger, ctx: RequestContext, uri: string, options?: any);
    initializeTenantAsync(context: RequestContext, tenant: string): Promise<{}>;
    private ensureSchemaReadyAsync(schema);
    /**
     * Return a list of entities
     * @param options
     * @returns {Promise}
     */
    getAllAsync(schema: Schema, options: ListOptions): Promise<Array<any>>;
    findOneAsync(schema: Schema, query: any): Promise<{}>;
    /**
     * Read an entity
     * @param name
     * @returns {Promise}
     */
    getAsync(schema: Schema, name: string): Promise<{}>;
    /**
     * Delete an entity
     * @param id
     * @returns {Promise}
     */
    deleteAsync(schema: Schema, old: string | any): Promise<{}>;
    private normalizeErrors(id, err);
    /**
     * Persist an entity
     * @param entity
     * @returns {Promise}
     */
    createAsync(schema: Schema, entity: any): Promise<{}>;
    /**
     * Update an entity
     * @param entity
     * @param old
     * @returns {Promise<T>}
     */
    updateAsync(schema: Schema, entity: any, old: any): Promise<{}>;
}
