import { BitstreamElement, Serializer, BitstreamReader, BitstreamWriter, FieldDefinition, SerializeOptions, IncompleteReadResult } from "@astronautlabs/bitstream";
import * as AMF3 from './amf3';
export declare enum TypeMarker {
    Number = 0,
    Boolean = 1,
    String = 2,
    Object = 3,
    MovieClip = 4,
    Null = 5,
    Undefined = 6,
    Reference = 7,
    EcmaArray = 8,
    ObjectEnd = 9,
    StrictArray = 10,
    Date = 11,
    LongString = 12,
    Unsupported = 13,
    RecordSet = 14,
    XmlDocument = 15,
    TypedObject = 16,
    AvmPlus = 17
}
export declare class Value<T = any> extends BitstreamElement {
    private _referenceTable;
    get referenceTable(): ComplexValue<any>[];
    marker: TypeMarker;
    get value(): T;
    set value(value: T);
    static get undefined(): UndefinedValue;
    static get true(): BooleanValue;
    static get false(): BooleanValue;
    static boolean(value: boolean): BooleanValue;
    static number(value: number): NumberValue;
    static string(value: string): LongStringValue | StringValue;
    static xmlDocument(value: string): XmlDocumentValue;
    static object(value: object, className?: string): ObjectValue;
    static get null(): NullValue;
    static date(value: Date): DateValue;
    static array(value: any[]): StrictArrayValue<any>;
    static associativeArray(value: Map<string, any> | Record<string, any>): EcmaArrayValue<any>;
    static any(value: any): Value<any>;
    static avmPlus(value: any): AvmPlusValue;
    static amf3(value: any): AvmPlusValue;
}
export declare class ObjectProperty extends BitstreamElement {
    keyLength: number;
    private _key;
    get key(): string;
    set key(value: string);
    value: Value;
}
export declare class ObjectPropertyArraySerializer implements Serializer {
    read(reader: BitstreamReader, type: any, parent: BitstreamElement, field: FieldDefinition): Generator<IncompleteReadResult, any>;
    write(writer: BitstreamWriter, type: any, parent: BitstreamElement, field: FieldDefinition, value: ObjectProperty[]): void;
}
export declare class NumberValue extends Value {
    marker: TypeMarker;
    private $value;
    get value(): number;
    set value(value: number);
}
export declare class BooleanValue extends Value {
    marker: TypeMarker;
    private $value;
    get value(): boolean;
    set value(value: boolean);
}
export declare class StringValue extends Value {
    marker: TypeMarker;
    length: number;
    private $value;
    get value(): string;
    set value(value: string);
}
export declare class ComplexValue<T = any> extends Value<T> {
    write(bitstream: BitstreamWriter, options?: SerializeOptions): void;
    onSerializeFinished(): void;
    onParseFinished(): void;
}
export declare class ObjectValue extends ComplexValue {
    marker: TypeMarker;
    private _properties;
    $objectVariantMarker: any;
    get properties(): ObjectProperty[];
    set properties(value: ObjectProperty[]);
    private buildValue;
    private _value;
    get value(): any;
    set value(value: any);
}
export declare class TypedObjectValue extends ObjectValue {
    marker: TypeMarker;
    private _className;
    classNameLength: number;
    get className(): string;
    set className(value: string);
}
export declare class NullValue extends Value<null> {
    marker: TypeMarker;
}
export declare class UndefinedValue extends Value<undefined> {
    marker: TypeMarker;
}
export declare class ReferenceValue extends Value {
    marker: TypeMarker;
    index: number;
    get reference(): ComplexValue<any>;
    get value(): any;
}
export declare class EcmaArrayValue<V = any> extends ComplexValue<Map<string, V>> {
    marker: TypeMarker;
    private _count;
    private _properties;
    private get properties();
    private endKey;
    private endMarker;
    private set properties(value);
    private _value;
    get value(): Map<string, V>;
    set value(value: Map<string, V>);
}
export declare class ObjectEndValue extends Value {
    marker: TypeMarker;
}
export declare class StrictArrayValue<T = any> extends ComplexValue<T[]> {
    marker: TypeMarker;
    private _value;
    private _values;
    count: number;
    private get values();
    private set values(value);
    get value(): T[];
    static elementValues(value: StrictArrayValue): Value<any>[];
    set value(value: T[]);
}
export declare class DateValue extends Value<Date> {
    marker: TypeMarker;
    private _value;
    private get $value();
    private set $value(value);
    private timeZone;
    get value(): Date;
    set value(value: Date);
}
export declare class LongStringValue extends Value {
    marker: TypeMarker;
    private _length;
    private $value;
    get value(): string;
    set value(value: string);
}
export declare class UnsupportedValue extends Value {
    marker: TypeMarker;
}
export declare class RecordSetValue extends Value {
    marker: TypeMarker;
}
export declare class MovieClipValue extends Value {
    marker: TypeMarker;
}
export declare class XmlDocumentValue extends Value {
    marker: TypeMarker;
    private _length;
    private $value;
    get value(): string;
    set value(value: string);
}
export declare class AvmPlusValue extends Value {
    marker: TypeMarker;
    private $value;
    get value(): any;
    set value(value: any);
    static unwrap(v: AvmPlusValue): AMF3.Value<any>;
}
