import { JSONPathNodeList } from "./node";
import { JSONPathQuery } from "./path";
import { Token } from "./token";
import { FilterContext, SerializationOptions } from "./types";
/**
 * Base class for all filter expressions.
 */
export declare abstract class FilterExpression {
    readonly token: Token;
    constructor(token: Token);
    /**
     * Evaluate the filter expression in the given context.
     * @param context - Evaluation context.
     */
    abstract evaluate(context: FilterContext): unknown;
    /**
     * Return a string representation of the expression.
     */
    abstract toString(options?: SerializationOptions): string;
}
/**
 * Base class for JSONPath ValueType literals.
 */
export declare abstract class FilterExpressionLiteral extends FilterExpression {
}
export declare class NullLiteral extends FilterExpressionLiteral {
    evaluate(): null;
    toString(): string;
}
export declare class BooleanLiteral extends FilterExpressionLiteral {
    readonly token: Token;
    readonly value: boolean;
    constructor(token: Token, value: boolean);
    evaluate(): boolean;
    toString(): string;
}
export declare class StringLiteral extends FilterExpressionLiteral {
    readonly token: Token;
    readonly value: string;
    constructor(token: Token, value: string);
    evaluate(): string;
    toString(): string;
}
export declare class NumberLiteral extends FilterExpressionLiteral {
    readonly token: Token;
    readonly value: number;
    constructor(token: Token, value: number);
    evaluate(): number;
    toString(): string;
}
export declare class PrefixExpression extends FilterExpression {
    readonly token: Token;
    readonly operator: string;
    readonly right: FilterExpression;
    constructor(token: Token, operator: string, right: FilterExpression);
    evaluate(context: FilterContext): boolean;
    toString(options?: SerializationOptions): string;
}
export declare class InfixExpression extends FilterExpression {
    readonly token: Token;
    readonly left: FilterExpression;
    readonly operator: string;
    readonly right: FilterExpression;
    readonly logical: boolean;
    constructor(token: Token, left: FilterExpression, operator: string, right: FilterExpression);
    evaluate(context: FilterContext): boolean;
    toString(options?: SerializationOptions): string;
}
export declare class LogicalExpression extends FilterExpression {
    readonly token: Token;
    readonly expression: FilterExpression;
    constructor(token: Token, expression: FilterExpression);
    evaluate(context: FilterContext): boolean;
    toString(options?: SerializationOptions): string;
}
/**
 * Base class for relative and absolute JSONPath query expressions.
 */
export declare abstract class FilterQuery extends FilterExpression {
    readonly token: Token;
    readonly path: JSONPathQuery;
    constructor(token: Token, path: JSONPathQuery);
}
export declare class RelativeQuery extends FilterQuery {
    evaluate(context: FilterContext): JSONPathNodeList;
    toString(options?: SerializationOptions): string;
}
export declare class RootQuery extends FilterQuery {
    evaluate(context: FilterContext): JSONPathNodeList;
    toString(options?: SerializationOptions): string;
}
export declare class FunctionExtension extends FilterExpression {
    readonly token: Token;
    readonly name: string;
    readonly args: FilterExpression[];
    constructor(token: Token, name: string, args: FilterExpression[]);
    evaluate(context: FilterContext): unknown;
    toString(options?: SerializationOptions): string;
    private unpack_node_list;
}
export declare function compare(left: unknown, operator: string, right: unknown): boolean;
