import { IModel, ICollection, IEntities } from './core';
import { ICoreIntegratedDriver } from './driver-integrations/index';
export interface ICreateOptions {
    entities: IEntities<IModel>;
    db: any;
    logError?: (err: Error) => never;
}
export interface IPureORM extends ICoreIntegratedDriver {
    getMatching: <T extends IModel>(model: T) => Promise<T>;
    getOneOrNoneMatching: <T extends IModel>(model: T) => Promise<T | void>;
    getAnyMatching: <T extends ICollection<IModel>>(model: IModel) => Promise<T | void>;
    getAllMatching: <T extends ICollection<IModel>>(model: IModel) => Promise<T>;
    create: <T extends IModel>(model: T) => Promise<T>;
    update: <T extends IModel>(model: T, options?: {
        on: string;
    }) => Promise<T>;
    delete: <T extends IModel>(model: T) => Promise<void>;
    deleteMatching: <T extends IModel>(model: T) => Promise<void>;
    getSqlInsertParts: (model: IModel) => {
        columns: string;
        values: Array<string>;
        valuesVar: Array<string>;
    };
    getSqlUpdateParts: (model: IModel, on?: string) => {
        clause: string;
        idVar: string;
        values: Array<string>;
    };
    getMatchingParts: (model: IModel) => {
        whereClause: string;
        values: Array<string>;
    };
    getMatchingPartsObject: (model: IModel) => {
        whereClause: string;
        values: Array<string>;
    };
    getNewWith: (model: IModel, sqlColumns: any, values: any) => IModel;
    getValueBySqlColumn: (model: IModel, sqlColumn: string) => string;
    getSqlColumnForPropertyName: (model: IModel, propertyName: string) => string;
}
export declare const create: ({ entities: externalEntities, db, logError }: ICreateOptions) => IPureORM;
