import { LimitConstraint, OriQueryConstraint, ErrorLimitInvalidNumber } from '../types';
export declare const limitCreator: <Type extends "limitToLast" | "limit">(type: Type, clause: (limit: number) => OriQueryConstraint) => <Value extends number>(limit: Value extends 0 ? "Error: do not use negative, 0 or decimal value" : number extends Value ? Value : Value extends infer R ? `${R & number}` extends `-${number}` | `${number}.${number}` ? "Error: do not use negative, 0 or decimal value" : Value : never) => LimitConstraint<Type, Value>;
/**
 * Creates a {@link QueryConstraint} that only returns the first matching documents.
 *
 * @param limit - The maximum number of items to return.
 * @returns The created {@link Query}.
 */
export declare const limit: <Value extends number>(limit: Value extends 0 ? "Error: do not use negative, 0 or decimal value" : number extends Value ? Value : Value extends infer R ? `${R & number}` extends `-${number}` | `${number}.${number}` ? "Error: do not use negative, 0 or decimal value" : Value : never) => LimitConstraint<"limit", Value>;
/**
 * Creates a {@link QueryConstraint} that only returns the last matching documents.
 *
 * You must specify at least one `orderBy` clause for `limitToLast` queries,
 * otherwise an exception will be thrown during execution.(Prevented on type level)
 *
 * @param limit - The maximum number of items to return.
 * @returns The created {@link Query}.
 */
export declare const limitToLast: <Value extends number>(limit: Value extends 0 ? "Error: do not use negative, 0 or decimal value" : number extends Value ? Value : Value extends infer R ? `${R & number}` extends `-${number}` | `${number}.${number}` ? "Error: do not use negative, 0 or decimal value" : Value : never) => LimitConstraint<"limitToLast", Value>;
