import '../polifils/array-find-last.js';
import type { StrictOmit } from 'ts-gems';
import { type Validator } from 'valgen';
import type { ComplexType } from '../document/index.js';
import { ResponsiveMap } from '../helpers/index.js';
import { OpraSchema } from '../schema/index.js';
import { ComparisonExpression, type ComparisonOperator, Expression } from './ast/index.js';
export declare namespace FilterRules {
    interface Options {
        caseSensitive?: boolean;
    }
    interface Rule {
        operators?: ComparisonOperator[];
        description?: string;
        prepare?: (args: ComparisonExpression.PrepareArgs) => any;
        mappedField?: string;
    }
}
export declare class FilterRules {
    protected _rules: ResponsiveMap<FilterRules.Rule>;
    protected _decoderCache: WeakMap<any, Validator<any, any, import("valgen").ExecutionOptions>>;
    constructor(rules?: Record<string, FilterRules.Rule>, options?: FilterRules.Options);
    set(fieldName: string, options?: Partial<StrictOmit<FilterRules.Rule, 'operators'>> & {
        operators?: ComparisonOperator[] | string;
    }): void;
    normalizeFilter(filter: OpraSchema.Field.QualifiedName | Expression, currentType?: ComplexType, scope?: string | '*'): Expression | undefined;
    protected normalizeFilterAst(ast: Expression, stack: Expression[], currentType?: ComplexType, scope?: string | '*'): Expression | undefined;
    toJSON(): Record<string, FilterRules.Rule>;
    [Symbol.iterator](): IterableIterator<[string, FilterRules.Rule]>;
}
