@dipscope/type-manager
Version:
Transform JSON strings or plain objects into JS class instances.
413 lines • 15.2 kB
TypeScript
import { Alias } from './alias';
import { CustomKey } from './custom-key';
import { CustomOption } from './custom-option';
import { CustomValue } from './custom-value';
import { DefaultValue } from './default-value';
import { GenericArgument } from './generic-argument';
import { GenericMetadata } from './generic-metadata';
import { Metadata } from './metadata';
import { NamingConvention } from './naming-convention';
import { Nullable } from './nullable';
import { Optional } from './optional';
import { PropertyExtensionMetadata } from './property-extension-metadata';
import { PropertyExtensionMetadataCtor } from './property-extension-metadata-ctor';
import { PropertyExtensionOptions } from './property-extension-options';
import { PropertyName } from './property-name';
import { PropertyOptions } from './property-options';
import { PropertyState } from './property-state';
import { ResolvedPropertyState } from './property-states/resolved-property-state';
import { UnresolvedPropertyState } from './property-states/unresolved-property-state';
import { ReferenceHandler } from './reference-handler';
import { Serializer } from './serializer';
import { TypeArgument } from './type-argument';
import { TypeFn } from './type-fn';
import { TypeManager } from './type-manager';
import { TypeMetadata } from './type-metadata';
/**
* Main class used to describe a certain property.
*
* @type {PropertyMetadata<TDeclaringObject, TObject>}
*/
export declare class PropertyMetadata<TDeclaringObject, TObject> extends Metadata {
/**
* Type metadata to which property metadata belongs to.
*
* @type {TypeMetadata<TDeclaringObject>}
*/
readonly declaringTypeMetadata: TypeMetadata<TDeclaringObject>;
/**
* Property name as declared in type.
*
* @type {PropertyName}
*/
readonly propertyName: PropertyName;
/**
* Normalized property name used for sorting.
*
* @type {PropertyName}
*/
readonly normalizedPropertyName: PropertyName;
/**
* Property options.
*
* @type {PropertyOptions<TObject>}
*/
private readonly propertyOptions;
/**
* Type function defined using reflect metadata.
*
* @type {Optional<TypeFn<TObject>>}
*/
private readonly reflectTypeFn;
/**
* Current property state.
*
* @type {PropertyState<TDeclaringObject, TObject>}
*/
private currentPropertyState;
/**
* Constructor.
*
* @param {TypeManager} typeManager Type manager.
* @param {ReadonlyMap<Alias, TypeFn<any>>} typeFnMap Type function map for types with aliases.
* @param {TypeMetadata<TDeclaringObject>} declaringTypeMetadata Type metadata to which property metadata belongs to.
* @param {PropertyName} propertyName Property name.
* @param {PropertyOptions<TObject>} propertyOptions Property options.
*/
constructor(typeManager: TypeManager, typeFnMap: ReadonlyMap<Alias, TypeFn<any>>, declaringTypeMetadata: TypeMetadata<TDeclaringObject>, propertyName: PropertyName, propertyOptions: PropertyOptions<TObject>);
/**
* Gets property state.
*
* @returns {PropertyState<TDeclaringObject, TObject>} Property state.
*/
get propertyState(): PropertyState<TDeclaringObject, TObject>;
/**
* Gets alias.
*
* @returns {Optional<Alias>} Alias or undefined.
*/
get alias(): Optional<Alias>;
/**
* Gets custom value map.
*
* @returns {ReadonlyMap<CustomKey<any>, CustomValue>} Custom value map.
*/
get customValueMap(): ReadonlyMap<CustomKey<any>, CustomValue>;
/**
* Gets serialized null value.
*
* @returns {Nullable<any>} Resolved serialized null value or undefined.
*/
get serializedNullValue(): Nullable<any>;
/**
* Gets serialized default value.
*
* @returns {Optional<any>} Resolved serialized default value or undefined.
*/
get serializedDefaultValue(): Optional<any>;
/**
* Gets deserialized null value.
*
* @returns {Nullable<any>} Resolved deserialized null value or undefined.
*/
get deserializedNullValue(): Nullable<any>;
/**
* Gets deserialized default value.
*
* @returns {Optional<any>} Resolved deserialized default value or undefined.
*/
get deserializedDefaultValue(): Optional<any>;
/**
* Gets serialized property name.
*
* @returns {string} Serialized property name.
*/
get serializedPropertyName(): string;
/**
* Gets deserialized property name.
*
* @returns {string} Deserialized property name.
*/
get deserializedPropertyName(): string;
/**
* Gets deserializable value.
*
* @returns {boolean} Deserializable indicator.
*/
get deserializable(): boolean;
/**
* Gets generic arguments.
*
* @returns {ReadonlyArray<GenericArgument<any>>} Generic arguments.
*/
get genericArguments(): ReadonlyArray<GenericArgument<any>>;
/**
* Gets generic metadatas.
*
* @returns {ReadonlyArray<GenericMetadata<any>>} Generic metadatas.
*/
get genericMetadatas(): ReadonlyArray<GenericMetadata<any>>;
/**
* Gets naming convention.
*
* @returns {Optional<NamingConvention>} Naming convention or undefined.
*/
get namingConvention(): Optional<NamingConvention>;
/**
* Gets reference handler.
*
* @returns {ReferenceHandler} Reference handler.
*/
get referenceHandler(): ReferenceHandler;
/**
* Gets serializable value.
*
* @returns {boolean} Serializable indicator.
*/
get serializable(): boolean;
/**
* Gets serializer.
*
* @returns {Serializer<TObject>} Serializer.
*/
get serializer(): Serializer<TObject>;
/**
* Gets type argument.
*
* @returns {TypeArgument} Type argument.
*/
get typeArgument(): TypeArgument<TObject>;
/**
* Gets type metadata.
*
* @returns {TypeMetadata<TObject>} Type metadata.
*/
get typeMetadata(): TypeMetadata<TObject>;
/**
* Gets indicator if null value should be preserved.
*
* @returns {boolean} True when null value should be preserved. False otherwise.
*/
get preserveNull(): boolean;
/**
* Gets indicator if default value should be used.
*
* @returns {boolean} Use default value indicator.
*/
get useDefaultValue(): boolean;
/**
* Gets indicator if implicit conversion should be used.
*
* @returns {boolean} Use implicit conversion indicator.
*/
get useImplicitConversion(): boolean;
/**
* Constructs initial property options by extending passed options
* with default values if they are not overriden. All references are kept.
*
* @param {PropertyOptions<TObject>} propertyOptions Property options.
*
* @returns {PropertyOptions<TObject>} Constructed type options.
*/
private constructPropertyOptions;
/**
* Configures property extension metadata.
*
* @param {PropertyExtensionMetadataCtor<TPropertyExtensionMetadata, TPropertyExtensionOptions, TDeclaringObject, TObject>} propertyExtensionMetadataCtor Property extension metadata constructor.
* @param {TPropertyExtensionOptions} propertyExtensionOptions Property extension options.
*
* @returns {TPropertyExtensionMetadata} Property extension metadata
*/
configurePropertyExtensionMetadata<TPropertyExtensionMetadata extends PropertyExtensionMetadata<TDeclaringObject, TObject, TPropertyExtensionOptions>, TPropertyExtensionOptions extends PropertyExtensionOptions>(propertyExtensionMetadataCtor: PropertyExtensionMetadataCtor<TPropertyExtensionMetadata, TPropertyExtensionOptions, TDeclaringObject, TObject>, propertyExtensionOptions?: TPropertyExtensionOptions): TPropertyExtensionMetadata;
/**
* Extracts property extension metadata.
*
* @param {PropertyExtensionMetadataCtor<TPropertyExtensionMetadata, TPropertyExtensionOptions, TDeclaringObject, TObject>} propertyExtensionMetadataCtor Property extension metadata constructor.
*
* @returns {Optional<TPropertyExtensionMetadata>} Property extension metadata or undefined.
*/
extractPropertyExtensionMetadata<TPropertyExtensionMetadata extends PropertyExtensionMetadata<TDeclaringObject, TObject, TPropertyExtensionOptions>, TPropertyExtensionOptions extends PropertyExtensionOptions>(propertyExtensionMetadataCtor: PropertyExtensionMetadataCtor<TPropertyExtensionMetadata, TPropertyExtensionOptions, TDeclaringObject, TObject>): Optional<TPropertyExtensionMetadata>;
/**
* Extracts property extension metadata ctor set from custom value map.
*
* @returns {Set<PropertyExtensionMetadataCtor<any, any, any, any>>} Property extension metadata ctor set.
*/
private extractPropertyExtensionMetadataCtorSet;
/**
* Resolves property state.
*
* Calling this method has side effects by recomputing property state. If you need current
* type state then use provided getter for that.
*
* @returns {ResolvedPropertyState<TDeclaringObject, TObject>} Resolved property state.
*/
resolvePropertyState(): ResolvedPropertyState<TDeclaringObject, TObject>;
/**
* Unresolves property state.
*
* Calling this method has side effects by resetting property state.
*
* @returns {UnresolvedPropertyState<TDeclaringObject, TObject>} Unresolved property state.
*/
unresolvePropertyState(): UnresolvedPropertyState<TDeclaringObject, TObject>;
/**
* Resolves custom value map the same way as it is done for the main options.
*
* @returns {ReadonlyMap<CustomKey<any>, CustomValue>} Resolved custom value map.
*/
private resolveCustomValueMap;
/**
* Configures alias.
*
* @param {Optional<Alias>} alias Alias or undefined.
*
* @returns {this} Current instance of property metadata.
*/
hasAlias(alias: Optional<Alias>): this;
/**
* Configures custom value map.
*
* @param {Optional<Map<CustomKey<any>, CustomValue>>} customValueMap Custom value map or undefined.
*
* @returns {this} Current instance of property metadata.
*/
hasCustomValueMap(customValueMap: Optional<Map<CustomKey<any>, CustomValue>>): this;
/**
* Configures custom value.
*
* @param {CustomKey<TCustomValue>} customKey Custom key.
* @param {TCustomValue} customValue Custom value.
*
* @returns {this} Current instance of property metadata.
*/
hasCustomValue<TCustomValue>(customKey: CustomKey<TCustomValue>, customValue: TCustomValue): this;
/**
* Extracts value by custom key.
*
* @param {CustomKey<TCustomValue>} customKey Custom key.
*
* @returns {TCustomValue} Custom value.
*/
extractCustomValue<TCustomValue>(customKey: CustomKey<TCustomValue>): TCustomValue;
/**
* Configures custom options.
*
* @param {ReadonlyArray<CustomOption>} customOptions Custom options.
*
* @returns {this} Current instance of property metadata.
*/
hasCustomOptions(customOptions: ReadonlyArray<CustomOption>): this;
/**
* Configures default value.
*
* @param {DefaultValue} defaultValue Default value.
*
* @returns {this} Current instance of property metadata.
*/
hasDefaultValue(defaultValue: DefaultValue): this;
/**
* Configures serialized default value.
*
* @param {DefaultValue} serializedDefaultValue Serialized default value.
*
* @returns {this} Current instance of property metadata.
*/
hasSerializedDefaultValue(serializedDefaultValue: DefaultValue): this;
/**
* Configures deserialized default value.
*
* @param {DefaultValue} deserializedDefaultValue Deserialized default value.
*
* @returns {this} Current instance of property metadata.
*/
hasDeserializedDefaultValue(deserializedDefaultValue: DefaultValue): this;
/**
* Configures deserializable.
*
* @param {boolean} deserializable Deserializable.
*
* @returns {this} Current instance of property metadata.
*/
isDeserializable(deserializable?: boolean): this;
/**
* Configures serializable.
*
* @param {boolean} serializable Serializable.
*
* @returns {this} Current instance of property metadata.
*/
isSerializable(serializable?: boolean): this;
/**
* Configures generic arguments.
*
* @param {Optional<Array<GenericArgument<any>>>} genericArguments Generic arguments or undefined.
*
* @returns {this} Current instance of property metadata.
*/
hasGenericArguments(genericArguments: Optional<Array<GenericArgument<any>>>): this;
/**
* Configures naming convention.
*
* @param {Optional<NamingConvention>} namingConvention Naming convention or undefined.
*
* @returns {this} Current instance of property metadata.
*/
hasNamingConvention(namingConvention: Optional<NamingConvention>): this;
/**
* Configures reference handler.
*
* @param {Optional<ReferenceHandler>} referenceHandler Reference handler or undefined.
*
* @returns {this} Current instance of property metadata.
*/
hasReferenceHandler(referenceHandler: Optional<ReferenceHandler>): this;
/**
* Configures serializer.
*
* @param {Optional<Serializer<TObject>>} serializer Serializer or undefined.
*
* @returns {this} Current instance of property metadata.
*/
hasSerializer(serializer: Optional<Serializer<TObject>>): this;
/**
* Configures type argument.
*
* @param {Optional<TypeArgument<TObject>>} typeArgument Type argument or undefined.
*
* @returns {this} Current instance of property metadata.
*/
hasTypeArgument(typeArgument: Optional<TypeArgument<TObject>>): this;
/**
* Configures preserve null.
*
* @param {boolean} preserveNull Preserve null.
*
* @returns {this} Current instance of property metadata.
*/
shouldPreserveNull(preserveNull?: boolean): this;
/**
* Configures use default value.
*
* @param {boolean} useDefaultValue Use default value.
*
* @returns {this} Current instance of property metadata.
*/
shouldUseDefaultValue(useDefaultValue?: boolean): this;
/**
* Configures use implicit convertion.
*
* @param {boolean} useImplicitConversion Use implicit convertion.
*
* @returns {this} Current instance of property metadata.
*/
shouldUseImplicitConversion(useImplicitConversion?: boolean): this;
/**
* Configures property metadata based on provided options.
*
* @param {PropertyOptions<TObject>} propertyOptions Property options.
*
* @returns {this} Current instance of property metadata.
*/
configure(propertyOptions: PropertyOptions<TObject>): this;
}
//# sourceMappingURL=property-metadata.d.ts.map