import { EntityRepository, type EntityManager, type FindOptions, type Loaded, type EntityName, type FilterQuery, type FindOneOptions, type FindOneOrFailOptions } from "@mikro-orm/core";
import { type FilterQueryDataloader } from "./findDataloader";
export interface IFindDataloaderEntityRepository<Entity extends object, D extends boolean> extends EntityRepository<Entity> {
    readonly dataloader: D;
    find<Hint extends string = never, Fields extends string = never>(where: FilterQuery<Entity>, options?: {
        dataloader: false;
    } & FindOptions<Entity, Hint, Fields>): Promise<Array<Loaded<Entity, Hint, Fields>>>;
    find<Hint extends string = never, Fields extends string = never>(where: FilterQueryDataloader<Entity>, options?: {
        dataloader: boolean;
    } & Pick<FindOptions<Entity, Hint, Fields>, "populate">): Promise<Array<Loaded<Entity, Hint, Fields>>>;
    find<Hint extends string = never, Fields extends string = never>(where: D extends true ? FilterQueryDataloader<Entity> : FilterQueryDataloader<Entity> | FilterQuery<Entity>, options?: {
        dataloader?: undefined;
    } & (D extends true ? Pick<FindOptions<Entity, Hint, Fields>, "populate"> : FindOptions<Entity, Hint, Fields>)): Promise<Array<Loaded<Entity, Hint, Fields>>>;
    findOne<Hint extends string = never, Fields extends string = never>(where: FilterQuery<Entity>, options?: {
        dataloader: false;
    } & FindOneOptions<Entity, Hint, Fields>): Promise<Loaded<Entity, Hint, Fields> | null>;
    findOne<Hint extends string = never, Fields extends string = never>(where: FilterQueryDataloader<Entity>, options?: {
        dataloader: boolean;
    } & Pick<FindOneOptions<Entity, Hint, Fields>, "populate">): Promise<Loaded<Entity, Hint, Fields> | null>;
    findOne<Hint extends string = never, Fields extends string = never>(where: D extends true ? FilterQueryDataloader<Entity> : FilterQueryDataloader<Entity> | FilterQuery<Entity>, options?: {
        dataloader?: undefined;
    } & (D extends true ? Pick<FindOneOptions<Entity, Hint, Fields>, "populate"> : FindOneOptions<Entity, Hint, Fields>)): Promise<Loaded<Entity, Hint, Fields> | null>;
    findOneOrFail<Hint extends string = never, Fields extends string = never>(where: FilterQuery<Entity>, options?: {
        dataloader: false;
    } & FindOneOrFailOptions<Entity, Hint, Fields>): Promise<Loaded<Entity, Hint, Fields>>;
    findOneOrFail<Hint extends string = never, Fields extends string = never>(where: FilterQueryDataloader<Entity>, options?: {
        dataloader: boolean;
    } & Pick<FindOneOrFailOptions<Entity, Hint, Fields>, "populate">): Promise<Loaded<Entity, Hint, Fields>>;
    findOneOrFail<Hint extends string = never, Fields extends string = never>(where: D extends true ? FilterQueryDataloader<Entity> : FilterQueryDataloader<Entity> | FilterQuery<Entity>, options?: {
        dataloader?: undefined;
    } & (D extends true ? Pick<FindOneOrFailOptions<Entity, Hint, Fields>, "populate"> : FindOneOrFailOptions<Entity, Hint, Fields>)): Promise<Loaded<Entity, Hint, Fields>>;
}
export type FindDataloaderEntityRepositoryCtor<Entity extends object, D extends boolean> = new (em: EntityManager, entityName: EntityName<Entity>) => IFindDataloaderEntityRepository<Entity, D>;
export declare function getFindDataloaderEntityRepository<Entity extends object, D extends boolean>(defaultEnabled: D): FindDataloaderEntityRepositoryCtor<Entity, D>;
