import type { DB } from "../../core";
import type { EntityData, RepoQueryIn, RepositoryResponse } from "../../data";
import type { Insertable, Selectable, Updateable } from "kysely";
import { type BaseModuleApiOptions, ModuleApi, type PrimaryFieldType } from "../../modules";
import type { FetchPromise, ResponseObject } from "../../modules/ModuleApi";
export type DataApiOptions = BaseModuleApiOptions & {
    queryLengthLimit: number;
    defaultQuery: Partial<RepoQueryIn>;
};
export declare class DataApi extends ModuleApi<DataApiOptions> {
    protected getDefaultOptions(): Partial<DataApiOptions>;
    private requireObjectSet;
    readOne<E extends keyof DB | string>(entity: E, id: PrimaryFieldType, query?: Omit<RepoQueryIn, "where" | "limit" | "offset">): FetchPromise<ResponseObject<Pick<RepositoryResponse<E extends keyof DB ? Selectable<DB[E]> : EntityData>, "data" | "meta">, E extends keyof DB ? Selectable<DB[E]> : EntityData>>;
    readOneBy<E extends keyof DB | string>(entity: E, query?: Omit<RepoQueryIn, "limit" | "offset" | "sort">): FetchPromise<ResponseObject<Pick<RepositoryResponse<E extends keyof DB ? Selectable<DB[E]> : EntityData>, "data" | "meta">>>;
    readMany<E extends keyof DB | string>(entity: E, query?: RepoQueryIn): FetchPromise<ResponseObject<Pick<RepositoryResponse<(E extends keyof DB ? Selectable<DB[E]> : EntityData)[]>, "data" | "meta">, (E extends keyof DB ? Selectable<DB[E]> : EntityData)[]>>;
    readManyByReference<E extends keyof DB | string, R extends keyof DB | string>(entity: E, id: PrimaryFieldType, reference: R, query?: RepoQueryIn): FetchPromise<ResponseObject<Pick<RepositoryResponse<(R extends keyof DB ? Selectable<DB[R]> : EntityData)[]>, "data" | "meta">, (R extends keyof DB ? Selectable<DB[R]> : EntityData)[]>>;
    createOne<E extends keyof DB | string, Input = E extends keyof DB ? DB[E] : EntityData>(entity: E, input: Insertable<Input>): FetchPromise<ResponseObject<RepositoryResponse<E extends keyof DB ? Selectable<DB[E]> : EntityData>, E extends keyof DB ? Selectable<DB[E]> : EntityData>>;
    createMany<E extends keyof DB | string, Input = E extends keyof DB ? DB[E] : EntityData>(entity: E, input: Insertable<Input>[]): FetchPromise<ResponseObject<RepositoryResponse<(E extends keyof DB ? Selectable<DB[E]> : EntityData)[]>, (E extends keyof DB ? Selectable<DB[E]> : EntityData)[]>>;
    updateOne<E extends keyof DB | string, Input = E extends keyof DB ? DB[E] : EntityData>(entity: E, id: PrimaryFieldType, input: Updateable<Input>): FetchPromise<ResponseObject<RepositoryResponse<E extends keyof DB ? Selectable<DB[E]> : EntityData>, E extends keyof DB ? Selectable<DB[E]> : EntityData>>;
    updateMany<E extends keyof DB | string, Input = E extends keyof DB ? DB[E] : EntityData>(entity: E, where: RepoQueryIn["where"], update: Updateable<Input>): FetchPromise<ResponseObject<RepositoryResponse<(E extends keyof DB ? Selectable<DB[E]> : EntityData)[]>, (E extends keyof DB ? Selectable<DB[E]> : EntityData)[]>>;
    deleteOne<E extends keyof DB | string>(entity: E, id: PrimaryFieldType): FetchPromise<ResponseObject<RepositoryResponse<E extends keyof DB ? Selectable<DB[E]> : EntityData>, E extends keyof DB ? Selectable<DB[E]> : EntityData>>;
    deleteMany<E extends keyof DB | string>(entity: E, where: RepoQueryIn["where"]): FetchPromise<ResponseObject<RepositoryResponse<E extends keyof DB ? Selectable<DB[E]> : EntityData>, E extends keyof DB ? Selectable<DB[E]> : EntityData>>;
    count<E extends keyof DB | string>(entity: E, where?: RepoQueryIn["where"]): FetchPromise<ResponseObject<RepositoryResponse<{
        entity: E;
        count: number;
    }>, {
        entity: E;
        count: number;
    }>>;
    exists<E extends keyof DB | string>(entity: E, where?: RepoQueryIn["where"]): FetchPromise<ResponseObject<RepositoryResponse<{
        entity: E;
        exists: boolean;
    }>, {
        entity: E;
        exists: boolean;
    }>>;
}
