firelordjs
Version:
🔥 High Precision Typescript Wrapper for Firestore Web, Providing Unparalleled Type Safe and Dev Experience
22 lines (21 loc) • 1.78 kB
TypeScript
import { MetaType } from '../metaTypeCreator';
import { Firestore_ } from '../alias';
import { QueryAllConstraints, QueryConstraints } from '../queryConstraints';
import { QueryConstraintLimitation, FlattenQueryCompositeFilterConstraint, ValidateTopLevelQueryCompositeFilterPartOne, ValidateTopLevelQueryCompositeFilterPartTwo, ValidateOrderByAndInequalityWhere } from '../queryConstraintsLimitations';
import { CollectionReference } from './collection';
import { CollectionGroup } from './collectionGroup';
/**
* A `Query` refers to a query which you can read or listen to. You can also
* construct refined `Query` objects by adding filters and ordering.
*/
export interface Query<T extends MetaType> {
/** The type of this Firestore reference. */
readonly type: 'query' | 'collection';
/**
* The `Firestore` instance for the Firestore database (useful for performing
* transactions, etc.).
*/
readonly firestore: Firestore_;
}
export type GeneralQuery<T extends MetaType> = Query<T> | CollectionReference<T> | CollectionGroup<T>;
export type QueryFunction = <T extends MetaType, Q extends GeneralQuery<T>, const QQCs extends readonly QueryAllConstraints[]>(query: Q extends never ? Q : GeneralQuery<T>, ...queryConstraints: QQCs extends never ? QQCs : T extends infer V extends MetaType ? ValidateTopLevelQueryCompositeFilterPartOne<V, QQCs> extends infer B extends string ? B : ValidateTopLevelQueryCompositeFilterPartTwo<V, QQCs> extends infer C extends string ? C : FlattenQueryCompositeFilterConstraint<V, QQCs> extends infer AllFlattenQCs extends QueryConstraints[] ? ValidateOrderByAndInequalityWhere<V, AllFlattenQCs> extends infer K extends string ? K : QueryConstraintLimitation<V, Q, QQCs, [], AllFlattenQCs> : never : never) => Query<T>;