import { TypedExpressionVisitor } from "./TypedExpressionVisitor";
import { FieldReference } from "./FieldReference";
import type { BooleanPredicateBuilder } from "./BooleanPredicateBuilder";
type Sort = {
    field: string;
    sort?: "desc";
};
export interface ODataV4QuerySegments {
    select?: string[];
    orderBy?: Sort[];
    skip?: number;
    top?: number;
    filter?: string;
    key?: unknown;
    count?: boolean;
    expand?: string[];
    value?: boolean;
}
/**
 * Converts a version-agnistic @type {Expression} into an object that holds information that adheres to ODataV4 speifications.
 */
export declare class ODataV4ExpressionVisitor extends TypedExpressionVisitor {
    readonly oDataQuery: ODataV4QuerySegments;
    selectVisitor(...fields: [FieldReference<unknown>, ...FieldReference<unknown>[]]): void;
    orderByVisitor(...fields: FieldReference<unknown>[]): void;
    orderByDescendingVisitor(...fields: FieldReference<unknown>[]): void;
    skipVisitor(value: number): void;
    topVisitor(value: number): void;
    expandVisitor(...fields: FieldReference<unknown>[]): void;
    expandAllVisitor(): void;
    getWithCountVisitor(): void;
    getByKeyVisitor(key: unknown): void;
    valueVisitor(): void;
    predicateVisitor(predicate: BooleanPredicateBuilder<unknown>): void;
    private translatePredicateExpression;
    private reduceTranslatedExpression;
    private deriveLiteral;
}
export {};
