UNPKG

mikro-orm-find-dataloader

Version:

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

40 lines (39 loc) 3.32 kB
import { Collection, type FindOptions, type AnyEntity, type Reference, type Primary, type EntityMetadata, type EntityKey, type FilterItemValue, type Scalar, type ExpandProperty, type ExpandScalar, type EntityProps, type EntityManager, type EntityName } from "@mikro-orm/core"; import { type PartialBy } from "./types"; import type DataLoader from "dataloader"; export interface OperatorMapDataloader<T> { $or?: Array<ExpandQueryDataloader<T>>; } export type FilterValueDataloader<T> = FilterItemValue<T> | FilterItemValue<T>[] | null; export type ExpandQueryDataloader<T> = T extends object ? T extends Scalar ? never : FilterQueryDataloader<T> : FilterValueDataloader<T>; export type FilterObjectDataloader<T> = { -readonly [K in EntityKey<T>]?: ExpandQueryDataloader<ExpandProperty<T[K]>> | FilterValueDataloader<ExpandProperty<T[K]>> | null; }; export type ExpandObjectDataloader<T> = T extends object ? T extends Scalar ? never : FilterObjectDataloader<T> : never; export type ObjectQueryDataloader<T> = OperatorMapDataloader<T> & ExpandObjectDataloader<T>; export type FilterQueryDataloader<T extends object> = ObjectQueryDataloader<T> | NonNullable<ExpandScalar<Primary<T>>> | NonNullable<EntityProps<T> & OperatorMapDataloader<T>> | FilterQueryDataloader<T>[]; export declare function groupPrimaryKeysByEntity<T extends AnyEntity<T>>(refs: Array<Reference<T>>): Map<string, Set<Primary<T>>>; export declare function groupInversedOrMappedKeysByEntity<T extends AnyEntity<T>>(collections: Array<Collection<T, AnyEntity>>): Map<string, Map<string, Set<Primary<T>>>>; export interface DataloaderFind<K extends object, Hint extends string = never, Fields extends string = never> { entityName: string; meta: EntityMetadata<K>; filter: FilterQueryDataloader<K>; options?: Pick<FindOptions<K, Hint, Fields>, "populate">; filtersAndKeys: Array<{ key: string; newFilter: FilterQueryDataloader<K>; }>; many: boolean; } export declare function groupFindQueriesByOpts(dataloaderFinds: Array<PartialBy<DataloaderFind<any, any>, "filtersAndKeys">>): Map<string, [FilterQueryDataloader<any>, { populate?: true | Set<any>; }?]>; export declare function getFindBatchLoadFn<Entity extends object>(em: EntityManager, entityName: EntityName<Entity>): DataLoader.BatchLoadFn<PartialBy<DataloaderFind<any, any>, "filtersAndKeys">, any>; export declare function optsMapToQueries<Entity extends object>(optsMap: Map<string, [FilterQueryDataloader<any>, { populate?: true | Set<any>; }?]>, em: EntityManager, entityName: EntityName<Entity>): Array<Promise<[string, any[]]>>; export declare function assertHasNewFilterAndMapKey(dataloaderFinds: Array<PartialBy<DataloaderFind<any, any>, "filtersAndKeys">>): asserts dataloaderFinds is Array<DataloaderFind<any, any>>; export declare function hasRef<T extends AnyEntity<T>>(entity: T): T & Record<string, Reference<T>>; export declare function hasCol<T extends AnyEntity<T>, K extends object>(entity: T): T & Record<string, Collection<T, K>>; export declare function isRef<T extends AnyEntity<T>, K extends object>(refOrCol: Reference<T> | Collection<T, K>): refOrCol is Reference<T>; export declare function isCol<T extends AnyEntity<T>, K extends object>(refOrCol: Reference<T> | Collection<T, K>): refOrCol is Collection<T, K>;