import * as Enums from "./enums"; export interface IValidationEvent { source?: SerializableObject; phase: Enums.ValidationPhase; event: Enums.ValidationEvent; message: string; } export declare class Version { private _versionString; private _major; private _minor; private _isValid; private _label?; constructor(major?: number, minor?: number, label?: string); static parse(versionString: string, context: BaseSerializationContext): Version | undefined; toString(): string; toJSON(): any; compareTo(otherVersion: Version): number; get label(): string; get major(): number; get minor(): number; get isValid(): boolean; } export type TargetVersion = Version | "*"; export declare class Versions { static readonly v1_0: Version; static readonly v1_1: Version; static readonly v1_2: Version; static readonly v1_3: Version; static readonly v1_4: Version; static readonly v1_5: Version; static readonly v1_6: Version; static readonly latest: Version; static getAllDeclaredVersions(): Version[]; } export declare function isVersionLessOrEqual(version: TargetVersion, targetVersion: TargetVersion): boolean; export declare abstract class BaseSerializationContext { private _validationEvents; toJSONOriginalParam: any; targetVersion: Version; constructor(targetVersion?: Version); private isTemplateString; private tryDeleteValue; private tryDeleteDefaultValue; serializeValue(target: { [key: string]: any; }, propertyName: string, propertyValue: any, defaultValue?: any, forceDeleteIfNullOrDefault?: boolean): void; serializeString(target: { [key: string]: any; }, propertyName: string, propertyValue?: string, defaultValue?: string): void; serializeBool(target: { [key: string]: any; }, propertyName: string, propertyValue?: boolean, defaultValue?: boolean): void; serializeNumber(target: { [key: string]: any; }, propertyName: string, propertyValue?: number, defaultValue?: number): void; serializeEnum(enumType: { [s: number]: string; }, target: { [key: string]: any; }, propertyName: string, propertyValue: number | undefined, defaultValue?: number | undefined): void; serializeArray(target: { [key: string]: any; }, propertyName: string, propertyValue: any[] | undefined): void; clearEvents(): void; logEvent(source: SerializableObject | undefined, phase: Enums.ValidationPhase, event: Enums.ValidationEvent, message: string): void; logParseEvent(source: SerializableObject | undefined, event: Enums.ValidationEvent, message: string): void; getEventAt(index: number): IValidationEvent; get eventCount(): number; } export declare class PropertyDefinition { readonly targetVersion: Version; readonly name: string; readonly defaultValue?: any; readonly onGetInitialValue?: ((sender: SerializableObject) => any) | undefined; private static _sequentialNumber; getInternalName(): string; parse(sender: SerializableObject, source: PropertyBag, context: BaseSerializationContext): any; toJSON(sender: SerializableObject, target: PropertyBag, value: any, context: BaseSerializationContext): void; readonly sequentialNumber: number; isSerializationEnabled: boolean; constructor(targetVersion: Version, name: string, defaultValue?: any, onGetInitialValue?: ((sender: SerializableObject) => any) | undefined); } export declare class StringProperty extends PropertyDefinition { readonly targetVersion: Version; readonly name: string; readonly treatEmptyAsUndefined: boolean; readonly regEx?: RegExp | undefined; readonly defaultValue?: string | undefined; readonly onGetInitialValue?: ((sender: SerializableObject) => string) | undefined; parse(sender: SerializableObject, source: PropertyBag, context: BaseSerializationContext): string | undefined; toJSON(sender: SerializableObject, target: PropertyBag, value: string | undefined, context: BaseSerializationContext): void; constructor(targetVersion: Version, name: string, treatEmptyAsUndefined?: boolean, regEx?: RegExp | undefined, defaultValue?: string | undefined, onGetInitialValue?: ((sender: SerializableObject) => string) | undefined); } export declare class BoolProperty extends PropertyDefinition { readonly targetVersion: Version; readonly name: string; readonly defaultValue?: boolean | undefined; readonly onGetInitialValue?: ((sender: SerializableObject) => any) | undefined; parse(sender: SerializableObject, source: PropertyBag, context: BaseSerializationContext): boolean | undefined; toJSON(sender: SerializableObject, target: object, value: boolean | undefined, context: BaseSerializationContext): void; constructor(targetVersion: Version, name: string, defaultValue?: boolean | undefined, onGetInitialValue?: ((sender: SerializableObject) => any) | undefined); } export declare class NumProperty extends PropertyDefinition { readonly targetVersion: Version; readonly name: string; readonly defaultValue?: number | undefined; readonly onGetInitialValue?: ((sender: SerializableObject) => any) | undefined; parse(sender: SerializableObject, source: PropertyBag, context: BaseSerializationContext): number | undefined; toJSON(sender: SerializableObject, target: PropertyBag, value: number | undefined, context: BaseSerializationContext): void; constructor(targetVersion: Version, name: string, defaultValue?: number | undefined, onGetInitialValue?: ((sender: SerializableObject) => any) | undefined); } export declare class PixelSizeProperty extends PropertyDefinition { parse(sender: SerializableObject, source: PropertyBag, context: BaseSerializationContext): number | undefined; toJSON(sender: SerializableObject, target: PropertyBag, value: number | undefined, context: BaseSerializationContext): void; } export interface IVersionedValue { value: TValue; targetVersion?: Version; } export declare class StringArrayProperty extends PropertyDefinition { readonly targetVersion: Version; readonly name: string; readonly defaultValue?: string[] | undefined; readonly onGetInitialValue?: ((sender: SerializableObject) => string[] | undefined) | undefined; parse(sender: SerializableObject, source: PropertyBag, context: BaseSerializationContext): string[] | undefined; toJSON(sender: SerializableObject, target: PropertyBag, value: string[] | undefined, context: BaseSerializationContext): void; constructor(targetVersion: Version, name: string, defaultValue?: string[] | undefined, onGetInitialValue?: ((sender: SerializableObject) => string[] | undefined) | undefined); } export declare class ValueSetProperty extends PropertyDefinition { readonly targetVersion: Version; readonly name: string; readonly values: IVersionedValue[]; readonly defaultValue?: string | undefined; readonly onGetInitialValue?: ((sender: SerializableObject) => string) | undefined; isValidValue(value: string, context: BaseSerializationContext): boolean; parse(sender: SerializableObject, source: PropertyBag, context: BaseSerializationContext): string | undefined; toJSON(sender: SerializableObject, target: PropertyBag, value: string | undefined, context: BaseSerializationContext): void; constructor(targetVersion: Version, name: string, values: IVersionedValue[], defaultValue?: string | undefined, onGetInitialValue?: ((sender: SerializableObject) => string) | undefined); } export declare class EnumProperty extends PropertyDefinition { readonly targetVersion: Version; readonly name: string; readonly enumType: TEnum; readonly defaultValue?: number | undefined; readonly onGetInitialValue?: ((sender: SerializableObject) => number) | undefined; private _values; parse(sender: SerializableObject, source: PropertyBag, context: BaseSerializationContext): number | undefined; toJSON(sender: SerializableObject, target: PropertyBag, value: number | undefined, context: BaseSerializationContext): void; constructor(targetVersion: Version, name: string, enumType: TEnum, defaultValue?: number | undefined, values?: IVersionedValue[], onGetInitialValue?: ((sender: SerializableObject) => number) | undefined); get values(): IVersionedValue[]; } export type SerializableObjectType = { new (): SerializableObject; }; export declare class SerializableObjectProperty extends PropertyDefinition { readonly targetVersion: Version; readonly name: string; readonly objectType: SerializableObjectType; readonly nullable: boolean; parse(sender: SerializableObject, source: PropertyBag, context: BaseSerializationContext): SerializableObject | undefined; toJSON(sender: SerializableObject, target: PropertyBag, value: SerializableObject | undefined, context: BaseSerializationContext): void; constructor(targetVersion: Version, name: string, objectType: SerializableObjectType, nullable?: boolean, defaultValue?: SerializableObject); } export declare class SerializableObjectCollectionProperty extends PropertyDefinition { readonly targetVersion: Version; readonly name: string; readonly objectType: SerializableObjectType; readonly onItemAdded?: ((sender: SerializableObject, item: SerializableObject) => void) | undefined; parse(sender: SerializableObject, source: PropertyBag, context: BaseSerializationContext): SerializableObject[] | undefined; toJSON(sender: SerializableObject, target: PropertyBag, value: SerializableObject[] | undefined, context: BaseSerializationContext): void; constructor(targetVersion: Version, name: string, objectType: SerializableObjectType, onItemAdded?: ((sender: SerializableObject, item: SerializableObject) => void) | undefined); } export declare class CustomProperty extends PropertyDefinition { readonly targetVersion: Version; readonly name: string; readonly onParse: (sender: SerializableObject, property: PropertyDefinition, source: PropertyBag, context: BaseSerializationContext) => T; readonly onToJSON: (sender: SerializableObject, property: PropertyDefinition, target: PropertyBag, value: T, context: BaseSerializationContext) => void; readonly defaultValue?: T | undefined; readonly onGetInitialValue?: ((sender: SerializableObject) => T) | undefined; parse(sender: SerializableObject, source: PropertyBag, context: BaseSerializationContext): T; toJSON(sender: SerializableObject, target: PropertyBag, value: T, context: BaseSerializationContext): void; constructor(targetVersion: Version, name: string, onParse: (sender: SerializableObject, property: PropertyDefinition, source: PropertyBag, context: BaseSerializationContext) => T, onToJSON: (sender: SerializableObject, property: PropertyDefinition, target: PropertyBag, value: T, context: BaseSerializationContext) => void, defaultValue?: T | undefined, onGetInitialValue?: ((sender: SerializableObject) => T) | undefined); } export declare class SerializableObjectSchema { private _properties; indexOf(prop: PropertyDefinition): number; add(...properties: PropertyDefinition[]): void; remove(...properties: PropertyDefinition[]): void; getItemAt(index: number): PropertyDefinition; getCount(): number; } export declare function property(prop: PropertyDefinition): (target: any, propertyKey: string) => void; export type PropertyBag = { [propertyName: string]: any; }; export declare abstract class SerializableObject { static onRegisterCustomProperties?: (sender: SerializableObject, schema: SerializableObjectSchema) => void; static defaultMaxVersion: Version; private static readonly _schemaCache; private _propertyBag; private _rawProperties; protected abstract getSchemaKey(): string; protected getDefaultSerializationContext(): BaseSerializationContext; protected populateSchema(schema: SerializableObjectSchema): void; protected getValue(prop: PropertyDefinition): any; protected setValue(prop: PropertyDefinition, value: any): void; protected internalParse(source: PropertyBag, context: BaseSerializationContext): void; protected internalToJSON(target: PropertyBag, context: BaseSerializationContext): void; protected shouldSerialize(_context: BaseSerializationContext): boolean; maxVersion: Version; constructor(); parse(source: PropertyBag, context?: BaseSerializationContext): void; toJSON(context?: BaseSerializationContext): PropertyBag | undefined; hasDefaultValue(prop: PropertyDefinition): boolean; hasAllDefaultValues(): boolean; resetDefaultValues(): void; setCustomProperty(name: string, value: any): void; getCustomProperty(name: string): any; getSchema(): SerializableObjectSchema; }