import { DeflateOrInflateOptions } from '../options'; import PropertySerializer from '../property_serializer'; import TypeSerializer from '../type_serializer'; import { Constructor, Provider } from '../util'; /** Metadata container for serializables */ export default class MetadataContainer { readonly backend: string; readonly projection: string; readonly proto: Object; /** * Metadata version number. * * It is possible to mix multiple serialazy versions which came from different dependencies. * To make sure that we access a compatible version of metadata (or throw an error instead) * we use a metadata version number. * * It's not directly linked with package (NPM) version, but: * * Several consecutive major package versions can share the same metadata version. * (If there are chages in public API, but not in metadata format) * * Metadata version increase is a **breaking change**, so the major part * of package versions should be increased as well */ static VERSION: number; /** Metadata instance version number */ readonly version: number; /** Type constructor */ readonly ctor: Constructor; /** Type name */ readonly name: string; private typeSerializerProvider; private propertySerializers; constructor(backend: string, projection: string, proto: Object); setOwnTypeSerializer(typeSerializer: TypeSerializer | Provider>): void; getOwnTypeSerializer(): TypeSerializer; addOwnPropertySerializer(propSerializer: PropertySerializer): void; getOwnPropertySerializers(): ReadonlyMap>; /** Check if it has own or inherited property serializers */ hasPropertySerializers(): boolean; /** * Get own type serializer or build type serializer * based on own and inherited property serializers */ getTypeSerializer(options?: DeflateOrInflateOptions): TypeSerializer; /** Build type serializer based on own and inherited property serializers */ private buildPropertyBagSerializer; /** Aggregate all property serializers: own and inherited */ private aggregatePropertySerializers; }