import { IRepository } from "../interfaces/IRepository";
import { Constructor, Model } from "@decaf-ts/decorator-validation";
import { Context } from "./Context";
export declare abstract class BaseRepository<M extends Model> implements IRepository<M> {
    private readonly _class;
    private _pk;
    get class(): Constructor<M>;
    get pk(): string;
    protected constructor(clazz?: Constructor<M>);
    abstract create(model: M, ...args: any[]): Promise<M>;
    createAll(models: M[], ...args: any[]): Promise<M[]>;
    protected createPrefix(model: M, ...args: any[]): Promise<any[]>;
    protected createSuffix(model: M, context: Context<M>): Promise<M>;
    protected createAllPrefix(models: M[], ...args: any[]): Promise<any[]>;
    protected createAllSuffix(models: M[], context: Context<M>): Promise<M[]>;
    abstract read(key: string | number, ...args: any[]): Promise<M>;
    readAll(keys: string[] | number[], ...args: any[]): Promise<M[]>;
    protected readSuffix(model: M, context: Context<M>): Promise<M>;
    protected readPrefix(key: string, ...args: any[]): Promise<any[]>;
    protected readAllPrefix(keys: string[] | number[], ...args: any[]): Promise<any[]>;
    protected readAllSuffix(models: M[], context: Context<M>): Promise<M[]>;
    abstract update(model: M, ...args: any[]): Promise<M>;
    updateAll(models: M[], ...args: any): Promise<M[]>;
    protected updateSuffix(model: M, context: Context<M>): Promise<M>;
    protected updatePrefix(model: M, ...args: any[]): Promise<any[]>;
    protected updateAllPrefix(models: M[], ...args: any[]): Promise<any[]>;
    protected updateAllSuffix(models: M[], context: Context<M>): Promise<M[]>;
    abstract delete(key: string | number, ...args: any[]): Promise<M>;
    deleteAll(keys: string[] | number[], ...args: any[]): Promise<M[]>;
    protected deleteSuffix(model: M, context: Context<M>): Promise<M>;
    protected deletePrefix(key: any, ...args: any[]): Promise<any[]>;
    protected deleteAllPrefix(keys: string[] | number[], ...args: any[]): Promise<any[]>;
    protected deleteAllSuffix(models: M[], context: Context<M>): Promise<M[]>;
    protected merge(oldModel: M, model: M): M;
    toString(): string;
}
