import { Adapter, QueryOptions, GetOptions, JoinOptions } from './index';
import { ModelCtor } from '../model';
export interface AdapterOptions {
    models: ModelCtor<any>[];
}
export declare abstract class AdapterBase implements Adapter {
    private models;
    constructor(opts: AdapterOptions);
    /**
     * Ensures all tables exist, and waits for them to be ready.
     */
    ensure(): Promise<void>;
    /**
     * Save the model to the Database.
     *
     * If replace is set to true, the entire model will be **replaced**. Otherwise
     * default action would be to update the document.
     */
    save<M>(model: M, replace?: boolean): Promise<M>;
    delete<M>(model: M): Promise<void>;
    join<M>(model: M, relationshipKey: string, opts?: JoinOptions): Promise<M>;
    private getModelByName<T>(name);
    abstract all<T>(ctor: ModelCtor<T>, opts?: QueryOptions): Promise<T[]>;
    abstract find<T>(ctor: ModelCtor<T>, filter: Partial<T>, opts?: QueryOptions): Promise<T[]>;
    abstract findOne<T>(ctor: ModelCtor<T>, filter: Partial<T>, opts?: QueryOptions): Promise<T>;
    abstract get<T>(ctor: ModelCtor<T>, value: any, opts?: GetOptions): Promise<T[]>;
    abstract getOne<T>(ctor: ModelCtor<T>, value: any, opts?: GetOptions): Promise<T>;
    protected abstract ensureTable(ctor: ModelCtor<any>): Promise<void>;
    protected abstract updateStore(model: any, payload: any, replace: boolean): Promise<void>;
    protected abstract deleteFromStore(model: any): Promise<void>;
}
