import { IProvider, ListOptions } from "../provider";
import { Schema } from "../../schemas/schema";
import { RequestContext } from '../../servers/requestContext';
/**
 * Default memory provider
 */
export declare class MemoryProvider implements IProvider<any> {
    private dataFolder;
    private state;
    readonly address: string;
    /**
     * Create a memory provider instance.
     * @param dataFolder : (optional) if provided, data will be persisted on disk on EVERY create, update or delete
     */
    constructor(dataFolder?: string);
    initializeTenantAsync(context: RequestContext, tenant: string): Promise<() => void>;
    private ensureSchema(schema);
    private save(schema);
    static clone(obj: any): any;
    /**
     * Return a list of entities
     * @param options
     * @returns {Promise}
     */
    getAllAsync(schema: Schema, options: ListOptions): Promise<Array<any>>;
    take(schema: Schema, list: any, options: ListOptions): IterableIterator<any>;
    findOneAsync(schema: Schema, query: any): Promise<any>;
    /**
     * 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<{}>;
    /**
     * 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<{}>;
}
