mikro-orm-find-dataloader
Version:
Additional dataloaders for the MikroORM EntityManager find/findOne/etc methods.
30 lines (29 loc) • 2.31 kB
TypeScript
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>>;
}