import { ContextValue } from './ContextValue.js';
import { JinjaExpression, JinjaVariable } from './JinjaVariable.js';
export interface JinjaContextVariableConfig<Metadata = any> {
    initialValue?: any;
    expression?: JinjaExpression;
    metadata?: Metadata;
}
export interface JinjaContextConfig {
    variables: Record<string, JinjaContextVariableConfig>;
    /**
     * Can be used to identify the context.
     */
    name?: string;
    /**
     * Adds a prefix to every variable in this context. Useful for avoiding name conflicts for different scopes.
     *
     * @example
     * if prefix is 'account', then the variable at `variables.example` will be referred by the name `account.example` instead of `example`.
     */
    prefix?: string;
    parent?: JinjaContextValue;
}
export declare class JinjaContextValue extends ContextValue {
    readonly prefix?: string;
    readonly variables: Record<string, JinjaVariable>;
    readonly parent?: JinjaContextValue | undefined;
    constructor({ name, prefix, variables, parent }: JinjaContextConfig);
    protected findVariableByKey(key: string): JinjaVariable;
    getVariableInContext(key: string): JinjaVariable | undefined;
    getAllInContext(): any;
    protected addVariablesToContext(variables: JinjaVariable[]): void;
    forEachVariable(iteratee: (v: JinjaVariable) => void): void;
}
//# sourceMappingURL=JinjaContextValue.d.ts.map