import type { QueryOperator } from './operators.js';
export declare const FIELD_SYMBOL: unique symbol;
export interface FieldReference<T, K extends keyof T = keyof T> {
    [FIELD_SYMBOL]: true;
    fieldName: K;
    eq(value: T[K]): FieldCondition<T, K>;
    ne(value: T[K]): FieldCondition<T, K>;
    gt(value: T[K]): FieldCondition<T, K>;
    gte(value: T[K]): FieldCondition<T, K>;
    lt(value: T[K]): FieldCondition<T, K>;
    lte(value: T[K]): FieldCondition<T, K>;
    in(values: T[K][]): FieldCondition<T, K>;
    notIn(values: T[K][]): FieldCondition<T, K>;
    contains(value: string): FieldCondition<T, K>;
    startsWith(value: string): FieldCondition<T, K>;
    endsWith(value: string): FieldCondition<T, K>;
    between(min: T[K], max: T[K]): FieldCondition<T, K>;
    isNull(): FieldCondition<T, K>;
    isNotNull(): FieldCondition<T, K>;
    asc(): OrderByCondition<T, K>;
    desc(): OrderByCondition<T, K>;
}
export interface FieldCondition<T, K extends keyof T = keyof T> {
    [FIELD_SYMBOL]: true;
    fieldName: K;
    operator: QueryOperator;
}
export interface OrderByCondition<T, K extends keyof T = keyof T> {
    [FIELD_SYMBOL]: true;
    fieldName: K;
    direction: 'asc' | 'desc';
}
export declare function isFieldCondition(value: any): value is FieldCondition<any>;
export declare function isOrderByCondition(value: any): value is OrderByCondition<any>;
export declare function isFieldReference(value: any): value is FieldReference<any>;
export type FieldsProxy<T> = {
    readonly [K in keyof T]: FieldReference<T, K>;
};
/**
 * Creates a proxy that returns typed field references for any property access
 */
export declare function createFieldsProxy<T extends Record<string, any>>(): FieldsProxy<T>;
