import type { Clause } from './build';
export declare type Result = string | number | boolean | null | undefined | Date | Result[] | {
    [key: string]: Result;
};
declare type LookupType<R> = {
    [key: string]: R | (R | LookupType<R>)[] | LookupType<R>;
};
export declare type Context = LookupType<Result>;
declare type AsyncFunction = (...args: any[]) => Promise<Result>;
declare type TemplateFunction = (...args: any[]) => Promise<Result | AsyncFunction>;
export declare type Functions = LookupType<TemplateFunction>;
export default class Evaluator {
    private readonly context;
    private readonly functions;
    private readonly operator_functions;
    constructor(context: Context, functions: Functions);
    evaluate(c: Clause): Promise<Result>;
    private var;
    private func_run;
    private func_get;
    private operation;
    private filter_run;
    private op_mult_div;
    private op_add;
    private add_numbers;
    private add_arrays;
    private add_objects;
    private op_subtract;
    private subtract_numbers;
    private op_in;
    private op_equals;
    private op_not_equals;
    private op_and;
    private op_or;
    private modifiers;
    private lookup_value;
}
export {};
