firelordjs
Version:
🔥 High Precision Typescript Wrapper for Firestore Web, Providing Unparalleled Type Safe and Dev Experience
26 lines (25 loc) • 2.53 kB
TypeScript
import { MetaType } from '../metaTypeCreator';
import { WhereFilterOp } from '../alias';
import { QueryConstraints, WhereConstraint, OrderByConstraint, CursorConstraint, LimitConstraint, QueryAllConstraints, QueryFilterConstraints, CursorType, QueryCompositeFilterConstraint } from '../queryConstraints';
import { GeneralQuery } from '../refs';
import { LimitToLastConstraintLimitation } from './limit';
import { CursorConstraintLimitation } from './cursor';
import { GetFirstOrderBy } from './orderBy';
import { GetFirstInequalityWhere, WhereConstraintLimitation, ValidateWhereArrayContainsArrayContainsAny } from './where';
import { InequalityOpStr } from './utils';
import { IsSame } from '../utils';
import { ErrorWhereOrderByAndInEquality } from '../error';
import { FlattenQueryCompositeFilterConstraint, QueryFilterConstraintLimitation } from './composite';
export type ValidateOrderByAndInequalityWhere<T extends MetaType, AllQCs extends readonly QueryConstraints[]> = GetFirstInequalityWhere<T, AllQCs> extends infer W extends WhereConstraint<string, InequalityOpStr, unknown> ? GetFirstOrderBy<T, AllQCs> extends infer O ? O extends OrderByConstraint<string> ? IsSame<W['fieldPath'], O['fieldPath']> extends true ? true : ErrorWhereOrderByAndInEquality<O['fieldPath'], W['fieldPath']> : true : true : true;
export type QueryConstraintLimitation<T extends MetaType, Q extends GeneralQuery<T>, RestQQCs extends readonly QueryAllConstraints[], PreviousQCs extends readonly QueryConstraints[], AllQCs extends readonly QueryConstraints[]> = RestQQCs extends [
infer Head extends QueryAllConstraints,
...infer Rest extends QueryAllConstraints[]
] ? [
Head extends LimitConstraint<'limit'> | OrderByConstraint<string> ? Head : Head extends LimitConstraint<'limitToLast'> ? LimitToLastConstraintLimitation<T, Head, AllQCs> : Head extends WhereConstraint<string, WhereFilterOp, unknown> ? ValidateWhereArrayContainsArrayContainsAny<T, Head, PreviousQCs> extends infer J extends string ? J : WhereConstraintLimitation<T, Q, Head, PreviousQCs> : Head extends CursorConstraint<CursorType, unknown[]> ? CursorConstraintLimitation<T, Q, Head, PreviousQCs> : Head extends QueryCompositeFilterConstraint<'and' | 'or', QueryFilterConstraints[]> ? QueryFilterConstraintLimitation<T, Q, [
Head
], PreviousQCs, Head> extends [infer P] ? P : never : never,
...QueryConstraintLimitation<T, Q, Rest, [
...PreviousQCs,
...FlattenQueryCompositeFilterConstraint<T, [Head]>
], AllQCs>
] : RestQQCs;