import { AnyObject, DeepRequiredExactlyOne, PrimaryKeyType, Value, ModelValueType, ModelDefinitionValue } from '../glossary'; export interface QueryOptions { strict?: boolean; } export interface QuerySelector { where: QuerySelectorWhere; } export declare type WeakQuerySelector = Partial>; export declare type RecursiveQuerySelectorWhere = Value extends Array ? Partial> : Value extends ModelValueType ? Partial> : Value extends AnyObject ? { [K in keyof Value]?: RecursiveQuerySelectorWhere; } : never; export declare type QuerySelectorWhere = { [Key in keyof EntityType]?: RecursiveQuerySelectorWhere; }; export interface WeakQuerySelectorWhere { [key: string]: Partial>; } export declare type SortDirection = 'asc' | 'desc'; export declare type RecursiveOrderBy = Value extends ModelValueType ? SortDirection : Value extends AnyObject ? DeepRequiredExactlyOne<{ [K in keyof Value]?: RecursiveOrderBy; }> : never; export declare type OrderBy = DeepRequiredExactlyOne<{ [Key in keyof EntityType]?: RecursiveOrderBy; }>; export interface BulkQueryBaseOptions { take?: number; orderBy?: OrderBy | OrderBy[]; } interface BulkQueryOffsetOptions extends BulkQueryBaseOptions { skip?: number; cursor?: never; } interface BulkQueryCursorOptions extends BulkQueryBaseOptions { skip?: never; cursor: PrimaryKeyType | null; } export declare type BulkQueryOptions = BulkQueryOffsetOptions | BulkQueryCursorOptions; export declare type ComparatorFn = (expected: ExpectedType, actual: ActualType) => boolean; export declare type QueryToComparator = { [Key in keyof QueryType]: ComparatorFn ? ValueType : QueryType[Key]>; }; export declare type GetQueryFor = ValueType extends string ? StringQuery : ValueType extends number ? NumberQuery : ValueType extends Boolean ? BooleanQuery : ValueType extends Date ? DateQuery : ValueType extends Array ? QuerySelector['where'] : ValueType extends Value ? QuerySelector['where'] : never; export interface StringQuery { equals: string; notEquals: string; contains: string; notContains: string; gt: string; gte: string; lt: string; lte: string; in: string[]; notIn: string[]; } export interface NumberQuery { equals: number; notEquals: number; between: [number, number]; notBetween: [number, number]; gt: number; gte: number; lt: number; lte: number; in: number[]; notIn: number[]; } export interface BooleanQuery { equals: boolean; notEquals: boolean; } export interface DateQuery { equals: Date; notEquals: Date; gt: Date; gte: Date; lt: Date; lte: Date; } export {};