import { MetaType, Query, CollectionReference, QueryConstraints, QueryConstraintLimitation, AddSentinelFieldPathToCompare, IsEqual, AddSentinelFieldPathToCompareHighLevel } from '../types';
/**
 * Creates a new immutable instance of {@link Query} that is extended to also include
 * additional query constraints.
 *
 * @param query - The {@link Query} instance to use as a base for the new constraints.
 * @param queryConstraints - The list of {@link QueryConstraint}s to apply.
 * @throws if any of the provided query constraints cannot be combined with the
 * existing or new constraints.
 */
export declare const query: <T extends MetaType, Q extends Query<T>, QC extends QueryConstraints<AddSentinelFieldPathToCompare<T>>[]>(query: Q extends never ? Q : IsEqual<Q, Query<T>> extends true ? Query<T> : IsEqual<Q, CollectionReference<T>> extends true ? CollectionReference<T> : never, ...queryConstraints: QC extends never ? QC : QueryConstraintLimitation<AddSentinelFieldPathToCompare<T>, AddSentinelFieldPathToCompareHighLevel<T, Q>, QC, [], QC>) => Query<T>;
