import { IObj, IResult } from '../interfaces';
import type { IStringifier, IParser } from './jsonCache.types';
/**
 * @internal
 */
export interface IFlattener {
    flatten(obj: IObj): IResult;
    unflatten(result: IResult): IObj;
}
/**
 * @internal
 *
 * Class for flattening and unflattening an object / array
 *
 * This could've been a simple function but is rather a class
 * because we are instantiating it during the constructor phase of
 * JSONCache class by calling it with stringifier & parser options.
 */
export declare class Flattener implements IFlattener {
    private stringifier;
    private parser;
    constructor(stringifier?: IStringifier, parser?: IParser);
    /**
     * Flattens the given object and converts it
     * to a dept of 1
     *
     * @param obj Object to be flattened
     */
    flatten(obj: IObj): IResult;
    /**
     * Unflattens the given object to its original
     * format and also applies the necessary types
     * that it originally had
     *
     * @param flattened Flattened object
     */
    unflatten(flattened: IResult): IObj;
    /***********************************
     * PRIVATE METHODS - Flatten helpers
     **********************************/
    private traverse;
    private assignResult;
    /*************************************
     * PRIVATE METHODS - Unflatten helpers
     *************************************/
    private mergeTypes;
    private scaffoldStructure;
}
