import type {inferPlainTypeFromZentity} from "./entity/zentity"; export type Entity = Record type NumberFilter = | number | { eq?: number; ne?: number; gt?: number; gte?: number; lt?: number; lte?: number; in?: number[]; nin?: number[] }; type StringFilter = | string | {eq:string} | {regex:string, flags?:string} | { ne: string } | { gt: string } | { gte: string } | { lt: string } | { lte: string } | { in: string[] } | { nin: string[] } type BooleanFilter = | boolean | { eq?: boolean; ne?: boolean }; type DateFilter = | Date | { eq?: Date; ne?: Date; gt?: Date; gte?: Date; lt?: Date; lte?: Date; in?: Date[]; nin?: Date[] }; type ArrayFilter = | T[] | { eq?: T[]; ne?: T[]; in?: T[]; nin?: T[] }; export type Filter = T extends number ? NumberFilter : T extends string ? StringFilter : T extends boolean ? BooleanFilter : T extends Date ? DateFilter : T extends Array ? ArrayFilter : never export type WhereOptions = | { [K in keyof E]?: Filter } | { and: WhereOptions[] } | { or: WhereOptions[] } export type SortDirection = 'asc' | 'desc' export type SortOptions = { [K in keyof E]?: SortDirection } type ProjectionOptions1 = { [K in keyof E]?: 1 } type ProjectionOptions0 = { [K in keyof E]?: 0 } export type ProjectionOptions = ProjectionOptions1 | ProjectionOptions0 export type FindOptions = { where?: WhereOptions, limit?: number, skip?: number, sort?: SortOptions, }