import { MetaType } from '../metaTypeCreator'; import { WhereFilterOp } from '../alias'; import { ErrorWhereCompareValueMustBeArray, ErrorWhereNotIn, 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, Or } from './utils'; import { DeepValue } from '../objectFlatten'; type ValidateWhereNotIn, PreviousQCs extends readonly QueryConstraints[]> = U['opStr'] extends NotIn ? Extract, NotEqual | In | ArrayContainsAny | Or> extends never ? true : ErrorWhereNotIn : U['opStr'] extends NotEqual | In | ArrayContainsAny | Or ? Extract, NotIn> extends never ? true : ErrorWhereNotIn : true; type ValidateWhereNotEqual, PreviousQCs extends readonly QueryConstraints[]> = U['opStr'] extends NotEqual ? Extract, NotEqual> extends never ? true : ErrorWhereOnlyOneNotEqual : true; export type ValidateWhereArrayContainsArrayContainsAny, PreviousQCs extends readonly QueryConstraints[]> = U['opStr'] extends ArrayContains ? Extract, ArrayContains | ArrayContainsAny> extends never ? true : ErrorWhereArrayContainsArrayContainsAny : U['opStr'] extends ArrayContainsAny ? Extract, ArrayContains | ArrayContainsAny> extends never ? true : ErrorWhereArrayContainsArrayContainsAny : true; type ValidateWhereInequalityOpStrSameField, PreviousQCs extends readonly 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 extends readonly QueryConstraints[]] ? H extends WhereConstraint ? H : GetFirstInequalityWhere : true; export type GetAllWhereConstraint> = AllQCs extends [infer H, ...infer R] ? R extends readonly QueryConstraints[] ? WhereConstraintsAcc | GetAllWhereConstraint ? H : never) | WhereConstraintsAcc> : WhereConstraintsAcc : WhereConstraintsAcc; type GetAllWhereConstraintOpStr = QCs extends [infer H, ...infer R] ? R extends readonly QueryConstraints[] ? OpStrAcc | GetAllWhereConstraintOpStr ? H['opStr'] : never) | OpStrAcc> : OpStrAcc : OpStrAcc; export type WhereConstraintLimitation, U extends WhereConstraint, PreviousQCs extends readonly QueryConstraints[]> = ValidateWhereNotIn extends infer R extends string ? R : ValidateWhereNotEqual extends infer P extends string ? P : ValidateWhereInequalityOpStrSameField extends infer K extends string ? K : 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 {};