import type { ScrubberConfig, ScrubbersMap, ScrubbersSQLMap } from './scrubber.model.js';
export declare class Scrubber {
    private cfg;
    private readonly scrubbersMap;
    private readonly scrubbersSQLMap;
    private readonly initializationVector;
    private readonly rootType?;
    /**
     * Create new scrubber instance
     *
     * @param cfg
     * @param additionalScrubbersMap optional additional scrubbers
     * @param additionalScrubbersSQLMap optional additional scrubbers SQL
     * @param initializationVector optional initialization vector used by some scrubbers.
     * @param rootType optional root type. Assumes all objects passed to this scubber is of named type for the sake of parent matching.
     */
    constructor(cfg: ScrubberConfig, additionalScrubbersMap?: ScrubbersMap, additionalScrubbersSQLMap?: ScrubbersSQLMap, initializationVector?: string, rootType?: string);
    static getScrubberForType(rootType: string, cfg: ScrubberConfig, additionalScrubbersImpl?: ScrubbersMap, additionalScrubbersSQLImpl?: ScrubbersSQLMap, initializationVector?: string): Scrubber;
    /**
     * Returns undefined if there's no scrubber defined for the field.
     */
    getScrubberSql(fieldName: string): string | undefined;
    scrub<T>(data: T): T;
    private applyScrubbers;
    private expandCfg;
    private checkIfScrubbersExistAndRaise;
    private splitFields;
    /**
     * returns true if all entries in b are equal to the end of entries of a. a may be longer than b.
     * Supports objects inside of arrays by removing any integer entries from a before comparing
     */
    private arrayContainsInOrder;
}
