import { IDeliveryClientConfig } from '../config';
import { Contracts } from '../contracts';
import { IContentItem, IContentItemsContainer, IContentItemWithRawDataContainer } from '../models';
export interface IMapItemResult<TContentItem extends IContentItem = IContentItem, TLinkedItemType extends IContentItem = IContentItem> {
    item: TContentItem;
    processedItems: IContentItemsContainer<TLinkedItemType>;
    preparedItems: IContentItemWithRawDataContainer;
    processingStartedForCodenames: string[];
}
export interface IMultipleItemsMapResult<TContentItem extends IContentItem = IContentItem, TLinkedItemType extends IContentItem = IContentItem> {
    items: TContentItem[];
    linkedItems: IContentItemsContainer<TLinkedItemType>;
}
export interface ISingleItemMapResult<TContentItem extends IContentItem = IContentItem, TLinkedItemType extends IContentItem = IContentItem> {
    item: TContentItem;
    linkedItems: IContentItemsContainer<TLinkedItemType>;
}
export declare class ItemMapper<TContentItemType extends IContentItem> {
    readonly config: IDeliveryClientConfig;
    private readonly elementMapper;
    constructor(config: IDeliveryClientConfig);
    /**
     * Maps single item to its proper strongly typed model from the given response
     * @param response Response used to map the item
     * @param queryConfig Query configuration
     */
    mapSingleItemFromResponse<TContentItem extends TContentItemType = TContentItemType>(response: Contracts.IViewContentItemContract): ISingleItemMapResult<TContentItem, TContentItemType>;
    /**
     * Maps multiple items to their strongly typed model from the given  response
     * @param response Response used to map the item
     * @param queryConfig Query configuration
     */
    mapMultipleItemsFromResponse<TContentItem extends TContentItemType = TContentItemType>(response: Contracts.IItemsWithModularContentContract): IMultipleItemsMapResult<TContentItem, TContentItemType>;
    /**
     * Maps item contracts to full models
     */
    mapItems<TContentItem extends TContentItemType = TContentItemType>(data: {
        mainItems: Contracts.IContentItemContract[];
        linkedItems: Contracts.IContentItemContract[];
    }): IMultipleItemsMapResult<TContentItem, TContentItemType>;
    /**
     * Maps item contract to full model
     */
    private mapItem;
    private createContentItem;
}
