import { MetaType } from '../metaTypeCreator'; import { WhereFilterOp } from '../alias'; import { WhereConstraint, OrderByConstraint, CursorConstraint, LimitConstraint, QueryFilterConstraints, QueryConstraints, QueryAllConstraints, CursorType, QueryCompositeFilterConstraint } from '../queryConstraints'; import { GeneralQuery } from '../refs'; import { WhereConstraintLimitation } from './where'; import { ErrorOrAndInvalidConstraints, ErrorInvalidTopLevelFilter, ErrorCannotUseNotInOrQuery } from '../error'; import { NotIn } from './utils'; type GetAllQueryFilterCompositeConstraint> = QQCs extends [infer H, ...infer R extends QueryAllConstraints[]] ? QueryCompositeConstraintAcc | GetAllQueryFilterCompositeConstraint ? H : never) | QueryCompositeConstraintAcc> : QueryCompositeConstraintAcc; export type ValidateTopLevelQueryCompositeFilterPartOne = AllQQCs extends (infer P)[] ? Extract> extends never ? true : GetAllQueryFilterCompositeConstraint extends never ? true : ErrorInvalidTopLevelFilter : true; export type ValidateTopLevelQueryCompositeFilterPartTwo = AllQQCs extends [infer Head, ...infer Rest extends QueryAllConstraints[]] ? Head extends QueryCompositeFilterConstraint<'and' | 'or', QueryFilterConstraints[]> ? AlreadyExist extends false ? ValidateTopLevelQueryCompositeFilterPartTwo : ErrorInvalidTopLevelFilter : ValidateTopLevelQueryCompositeFilterPartTwo : true; export type FlattenQueryCompositeFilterConstraint = QQCs extends [infer Head, ...infer Rest extends QueryAllConstraints[]] ? FlattenQueryCompositeFilterConstraint ? [ ...ACC, ...FlattenQueryCompositeFilterConstraint ] : ACC> : ACC; export type QueryFilterConstraintLimitation, RestQQCs extends readonly QueryAllConstraints[], PreviousQCs extends readonly QueryConstraints[], ParentConstraint extends QueryCompositeFilterConstraint<'and' | 'or', QueryFilterConstraints[]>> = RestQQCs extends [ infer Head extends QueryConstraints | QueryCompositeFilterConstraint<'and' | 'or', QueryFilterConstraints[]>, ...infer Rest extends QueryAllConstraints[] ] ? [ Head extends LimitConstraint<'limit' | 'limitToLast', number> | OrderByConstraint | CursorConstraint ? ErrorOrAndInvalidConstraints : Head extends WhereConstraint ? Head['opStr'] extends NotIn ? 'or' extends ParentConstraint['type'] ? ParentConstraint['constraints']['length'] extends 1 ? WhereConstraintLimitation : ErrorCannotUseNotInOrQuery : WhereConstraintLimitation : WhereConstraintLimitation : Head extends QueryCompositeFilterConstraint<'and' | 'or', QueryFilterConstraints[]> ? QueryCompositeFilterConstraint> : never, ...QueryFilterConstraintLimitation ], ParentConstraint> ] : RestQQCs; export {};