import { Collection } from '@goatlab/js-utils';
import { FindByIdFilter, FluentHasManyParams, FluentBelongsToParams, FluentBelongsToManyParams, FluentQuery, Primitives, QueryFieldSelector, QueryOutput, AnyObject } from './types';
export declare abstract class BaseConnector<ModelDTO, InputDTO, OutputDTO> {
    protected outputKeys: string[];
    protected relatedQuery?: {
        entity: new () => ModelDTO;
        query?: FluentQuery<ModelDTO>;
        repository?: any;
        key?: string;
        pivot?: any;
    };
    protected chunk: null;
    protected pullSize: null;
    protected paginator: undefined;
    protected rawQuery: undefined;
    protected modelRelations: any;
    isMongoDB: boolean;
    constructor();
    insertMany(data: InputDTO[]): Promise<OutputDTO[]>;
    updateById(id: string, data: InputDTO): Promise<OutputDTO>;
    findMany<T extends FluentQuery<ModelDTO>>(query?: T): Promise<QueryOutput<T, ModelDTO>[]>;
    findFirst<T extends FluentQuery<ModelDTO>>(query?: T): Promise<QueryOutput<T, ModelDTO> | null>;
    requireById(id: string, q?: FindByIdFilter<ModelDTO>): Promise<QueryOutput<FindByIdFilter<ModelDTO>, ModelDTO>>;
    requireFirst<T extends FluentQuery<ModelDTO>>(query?: T): Promise<QueryOutput<T, ModelDTO>>;
    findByIds<T extends FindByIdFilter<ModelDTO>>(ids: string[], q?: T): Promise<QueryOutput<T, ModelDTO>[]>;
    findById<T extends FindByIdFilter<ModelDTO>>(id: string, q?: T): Promise<QueryOutput<T, ModelDTO> | null>;
    collect(query: FluentQuery<ModelDTO>): Promise<Collection<OutputDTO>>;
    pluck(path: QueryFieldSelector<ModelDTO>, query?: FluentQuery<ModelDTO>): Promise<Primitives[]>;
    protected setRelatedQuery(r: {
        entity: new () => ModelDTO;
        query?: FluentQuery<ModelDTO>;
        repository?: any;
        key?: string;
    }): void;
    associate(data: InputDTO | OutputDTO): Promise<OutputDTO[]>;
    attach(id: string, pivot?: AnyObject): Promise<any[]>;
    protected hasMany<T extends FluentHasManyParams<T>>(r: T): InstanceType<T['repository']>;
    protected belongsTo<T extends FluentBelongsToParams<T>>(r: T): InstanceType<T['repository']>;
    protected hasOne(): void;
    protected belongsToMany<T extends FluentBelongsToManyParams<T>>(r: T): InstanceType<T['repository']>;
    protected hasManyThrough(): void;
    protected jsApplySelect(select: FluentQuery<ModelDTO>['select'], data: ModelDTO[]): ModelDTO[];
}
