import { MetaType } from '../metaTypeCreator'; import { WhereFilterOp } from '../alias'; import { ErrorWhereCompareValueMustBeArray, ErrorWhereNotInArrayContainsAny, ErrorWhereNotInNotEqual, ErrorWhereArrayContainsArrayContainsAny, ErrorWhereInequalityOpStrSameField, ErrorWhereOnlyOneNotEqual, ErrorWhereNoNeverEmptyArray, ErrorWhereInOrNotInValueIsNotArray } from '../error'; import { QueryConstraints, WhereConstraint } from '../queryConstraints'; import { GeneralQuery } from '../refs'; import { GetCorrectDocumentIdBasedOnRef } from '../fieldPath'; import { In, NotIn, ArrayContainsAny, NotEqual, ArrayContains, InequalityOpStr, ValueOfOptStr, ArrayOfOptStr, ValueOfOnlyArrayOptStr, ElementOfOptStr } from './utils'; import { DeepValue } from '../objectFlatten'; type ValidateWhereNotInArrayContainsAny, PreviousQCs extends QueryConstraints[]> = U['opStr'] extends In | NotIn | ArrayContainsAny ? Extract, In | NotIn | ArrayContainsAny> extends never ? true : ErrorWhereNotInArrayContainsAny : true; type ValidateWhereNotInNotEqual, PreviousQCs extends QueryConstraints[]> = U['opStr'] extends NotIn ? Extract, NotEqual> extends never ? true : ErrorWhereNotInNotEqual : U['opStr'] extends NotEqual ? Extract, NotIn> extends never ? Extract, NotEqual> extends never ? true : ErrorWhereOnlyOneNotEqual : ErrorWhereNotInNotEqual : true; type ValidateWhereArrayContainsArrayContainsAny, PreviousQCs extends QueryConstraints[]> = U['opStr'] extends ArrayContains ? Extract, ArrayContains | ArrayContainsAny> extends never ? true : ErrorWhereArrayContainsArrayContainsAny : U['opStr'] extends ArrayContainsAny ? Extract, ArrayContains> extends never ? true : ErrorWhereArrayContainsArrayContainsAny : true; type ValidateWhereInequalityOpStrSameField, PreviousQCs extends QueryConstraints[]> = U['opStr'] extends InequalityOpStr ? Extract, WhereConstraint> extends never ? true : Exclude, WhereConstraint>, WhereConstraint> extends never ? true : ErrorWhereInequalityOpStrSameField : true; export type GetFirstInequalityWhere = QCs extends [infer H, ...infer Rest] ? H extends WhereConstraint ? H : Rest extends QueryConstraints[] ? GetFirstInequalityWhere : never : true; export type GetAllWhereConstraint> = QCs extends [infer H, ...infer R] ? R extends QueryConstraints[] ? WhereConstraintsAcc | GetAllWhereConstraint ? H : never) | WhereConstraintsAcc> : WhereConstraintsAcc : WhereConstraintsAcc; type GetAllWhereConstraintOpStr = QCs extends [infer H, ...infer R] ? R extends QueryConstraints[] ? OpStrAcc | GetAllWhereConstraintOpStr ? H['opStr'] : never) | OpStrAcc> : OpStrAcc : OpStrAcc; export type WhereConstraintLimitation, U extends WhereConstraint, PreviousQCs extends QueryConstraints[]> = ValidateWhereNotInArrayContainsAny extends string ? ValidateWhereNotInArrayContainsAny : ValidateWhereNotInNotEqual extends string ? ValidateWhereNotInNotEqual : ValidateWhereArrayContainsArrayContainsAny extends string ? ValidateWhereArrayContainsArrayContainsAny : ValidateWhereInequalityOpStrSameField extends string ? ValidateWhereInequalityOpStrSameField : U['opStr'] extends ValueOfOptStr ? WhereConstraint> : U['opStr'] extends ArrayOfOptStr ? WhereConstraint[] : ErrorWhereInOrNotInValueIsNotArray> : U['opStr'] extends ValueOfOnlyArrayOptStr ? WhereConstraint extends readonly unknown[] ? DeepValue : ErrorWhereCompareValueMustBeArray> : U['opStr'] extends ElementOfOptStr ? WhereConstraint extends readonly (infer R)[] ? R : ErrorWhereCompareValueMustBeArray> : never; export {};