UNPKG

mikro-orm-find-dataloader

Version:

Additional dataloaders for the MikroORM EntityManager find/findOne/etc methods.

30 lines (29 loc) 2.31 kB
import { type EntityManager, type AnyEntity, type Primary, type FindOptions, EntityRepository, type EntityName, type EntityKey, type Loaded, type EntityProps, type ExpandProperty, type ExpandScalar, type FilterItemValue, type ExpandQuery, type Scalar } from "@mikro-orm/core"; export interface OperatorMapDataloader<T> { $or?: Array<ExpandQuery<T>>; } export type FilterValueDataloader<T> = FilterItemValue<T> | FilterItemValue<T>[] | null; export type QueryDataloader<T> = T extends object ? T extends Scalar ? never : FilterQueryDataloader<T> : FilterValueDataloader<T>; export type FilterObjectDataloader<T> = { -readonly [K in EntityKey<T>]?: QueryDataloader<ExpandProperty<T[K]>> | FilterValueDataloader<ExpandProperty<T[K]>> | null; }; export type Compute<T> = { [K in keyof T]: T[K]; } & {}; export type ObjectQueryDataloader<T> = Compute<OperatorMapDataloader<T> & FilterObjectDataloader<T>>; export type FilterQueryDataloader<T extends object> = ObjectQueryDataloader<T> | NonNullable<ExpandScalar<Primary<T>>> | NonNullable<EntityProps<T> & OperatorMapDataloader<T>> | FilterQueryDataloader<T>[]; export declare class EntityDataLoader<T extends AnyEntity<T> = any, P extends string = never, F extends string = never> { private readonly em; private readonly bypass; private readonly findLoader; constructor(em: EntityManager, bypass?: boolean); find<K extends object, Hint extends string = never, Fields extends string = never>(repoOrClass: EntityRepository<K> | EntityName<K>, filter: FilterQueryDataloader<K>, options?: Pick<FindOptions<K, Hint, Fields>, "populate"> & { bypass?: boolean; }): Promise<Array<Loaded<K, Hint, Fields>>>; findOne<K extends object, Hint extends string = never, Fields extends string = never>(repoOrClass: EntityRepository<K> | EntityName<K>, filter: FilterQueryDataloader<K>, options?: Pick<FindOptions<K, Hint, Fields>, "populate"> & { bypass?: boolean; }): Promise<Loaded<K, Hint, Fields> | null>; findOneOrFail<K extends object, Hint extends string = never, Fields extends string = never>(repoOrClass: EntityRepository<K> | EntityName<K>, filter: FilterQueryDataloader<K>, options?: Pick<FindOptions<K, Hint, Fields>, "populate"> & { bypass?: boolean; }): Promise<Loaded<K, Hint, Fields>>; }