import Expression, { type Context } from './Expression.js';
import { type BinaryOpFunction, type FunctionFunction, type UnaryOpFunction, type Grammar, type TransformFunction } from './grammar.js';
export declare class Jexl {
    grammar: Grammar;
    constructor();
    addBinaryOp(operator: string, precedence: number, fn: BinaryOpFunction, manualEval?: boolean): void;
    addFunction(name: string, fn: FunctionFunction): void;
    addFunctions(map: Record<string, FunctionFunction>): void;
    addUnaryOp(operator: string, fn: UnaryOpFunction): void;
    addTransform(name: string, fn: TransformFunction): void;
    addTransforms(map: Record<string, TransformFunction>): void;
    compile<R>(expression: string): Expression<R>;
    createExpression<R = unknown>(expression: string): Expression<R>;
    getFunction(name: string): FunctionFunction;
    getTransform(name: string): TransformFunction;
    eval<R = unknown>(expression: string, context?: Context): Promise<R>;
    evalAsString(expression: string, context?: Context): Promise<string>;
    evalAsNumber(expression: string, context?: Context): Promise<number>;
    evalAsBoolean(expression: string, context?: Context): Promise<boolean>;
    evalAsArray<T = unknown>(expression: string, context?: Context): Promise<T[]>;
    evalAsEnum<T = string | number | boolean>(expression: string, context: Context | undefined, allowedValues: readonly T[]): Promise<T | undefined>;
    evalWithDefault<T = unknown>(expression: string, context: Context | undefined, defaultValue: T): Promise<T>;
    expr(strings: string[] | TemplateStringsArray, ...args: unknown[]): Expression;
    removeOp(operator: string): void;
    private _addGrammarElement;
}
//# sourceMappingURL=Jexl.d.ts.map