import type { TAnyKeyValueObject, TDeserializeOptions, TJsonApiBody, TJsonApiData, TJsonApiLinks, TModel, TRelationships, TResourceIdObj } from '../types'; declare class JsonPropertiesMapper { createModel(type: string): TModel; setId(model: TModel, id: string | number): void; setAttributes(model: TModel, attributes: TAnyKeyValueObject): void; setMeta(model: TModel, meta: TAnyKeyValueObject): void; setLinks(model: TModel, links: TJsonApiLinks): void; setResourceIdObjMeta(model: TModel, meta: TResourceIdObj): void; setRelationships(model: TModel, relationships: TRelationships): void; } declare class DeserializeCache { cachedModels: { [key: string]: TModel; }; getCachedModel(data: TJsonApiData, resourceIdObject?: TResourceIdObj): TModel | null; handleModel(model: TModel, data: TJsonApiData, resourceIdObject?: TResourceIdObj): void; createCacheKey(data: TJsonApiData, resourceIdObject?: TResourceIdObj): string; } export declare class JsonDeserializer { #private; constructor(propertiesMapper: JsonPropertiesMapper, deserializeCache: DeserializeCache, options?: TAnyKeyValueObject); setJsonParsedObject(body: TJsonApiBody): void; build(): TModel | TModel[]; } export declare const deserialize: (body: TJsonApiBody | string, options?: TDeserializeOptions) => TModel | Array; export {};