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