@astronautlabs/amf
Version:
Action Message Format (AMF0/3)
302 lines (301 loc) • 10.4 kB
TypeScript
/// <reference types="node" />
import { BitstreamElement, BitstreamReader, BitstreamWriter, FieldDefinition, Serializer } from "@astronautlabs/bitstream";
export declare enum TypeMarker {
Undefined = 0,
Null = 1,
False = 2,
True = 3,
Integer = 4,
Double = 5,
String = 6,
XmlDocument = 7,
Date = 8,
Array = 9,
Object = 10,
Xml = 11,
ByteArray = 12,
VectorInt = 13,
VectorUint = 14,
VectorDouble = 15,
VectorObject = 16,
Dictionary = 17
}
export declare const REFERENCE_TYPES: TypeMarker[];
export declare function Type(type: Function): PropertyDecorator;
export declare function amfTypeForProperty(object: any, propertyKey: string): Constructor<Value>;
export declare function amfValueForProperty(object: any, propertyKey: string): Value;
export declare type Constructor<T> = {
new (): T;
};
export declare function amfTypeForValue(value: any): Constructor<Value>;
export declare class References {
strings: StringValue[];
traits: Traits[];
values: Value[];
}
/**
* Represents an AMF3 "Value" in the binary protocol
*/
export declare class Value<T = any> extends BitstreamElement {
get references(): References;
marker: TypeMarker;
get value(): T;
set value(value: T);
static get undefined(): UndefinedValue;
static get null(): NullValue;
static boolean(value: boolean): TrueValue | FalseValue;
static int(value: number): IntegerValue;
static double(value: number): DoubleValue;
static string(value: string): StringValue;
static xmlDocument(value: string): XmlDocumentValue;
static xml(value: string): XmlValue;
static date(value: Date): DateValue;
static any(value: any): Value;
static array(array: any[]): ArrayValue;
static object(value: object): ObjectValueWithLiteralTraits;
static byteArray(buffer: Uint8Array | Buffer): ByteArray;
static vector(value: Int32Array | Uint32Array | number[], isFixed?: boolean): UIntVectorValue | IntVectorValue | DoubleVectorValue;
static objectVector(values: any[], isFixed?: boolean): ObjectVectorValue;
static dictionary<K, V>(map: Map<K, V>): DictionaryValue<K, V>;
}
export declare class UndefinedValue extends Value<undefined> {
marker: TypeMarker;
get value(): any;
}
export declare class NullValue extends Value<null> {
marker: TypeMarker;
get value(): any;
}
export declare class FalseValue extends Value<false> {
marker: TypeMarker;
get value(): false;
}
export declare class TrueValue extends Value<true> {
marker: TypeMarker;
get value(): true;
}
export declare class IntegerValue extends Value<number> {
marker: TypeMarker;
$value: number;
get value(): number;
set value(value: number);
}
export declare class DoubleValue extends Value<number> {
marker: TypeMarker;
$value: number;
get value(): number;
set value(value: number);
}
export declare class StringOrReference extends BitstreamElement {
private $lengthOrReference;
get isReference(): boolean;
get isLiteral(): boolean;
private $value;
get id(): number;
set id(value: number);
get value(): string;
set value(value: string);
}
export declare class ReferenceValue<T> extends Value<T> {
}
/**
* Represents the "String" type of "Value" in Adobe's ActionScript Message Format (AMF) version 3.
* - U29Serializer: Encodes/decodes values in AMF3's custom variable-length integer format
* - Low bit of 0 or 1 on the "length" field determines if the value is a reference to a String Table entry
* or is an inline string literal
* - Thus IDs and lengths are limited to 2^28 since variable length strs are max 29 bits
*
* From the user's perspective, just set either `id` or `value`. When reading use `isReference()` to determine
* whether this string is a reference to the string table or literal and `id` or `value` respectively. `id` and
* `value` return `undefined` when they are not relevant for this object.
*/
export declare class StringValue extends ReferenceValue<string> {
marker: TypeMarker;
stringOrReference: StringOrReference;
get isLiteral(): boolean;
get isReference(): boolean;
get id(): number;
set id(id: number);
get value(): string;
set value(value: string);
}
export declare class XmlDocumentValue extends StringValue {
marker: TypeMarker;
}
export declare class XmlValue extends StringValue {
marker: TypeMarker;
}
export declare class DateValue extends ReferenceValue<Date> {
marker: TypeMarker;
$indicator: number;
get isLiteral(): boolean;
get isReference(): boolean;
private $value;
private $date;
get value(): Date;
set value(value: Date);
}
export declare class AssociativeValueSerializer implements Serializer {
read(reader: BitstreamReader, type: any, parent: BitstreamElement, field: FieldDefinition): Generator<{
remaining: number;
contextHint: () => string;
}, AssociativeValue[], unknown>;
write(writer: BitstreamWriter, type: any, parent: BitstreamElement, field: FieldDefinition, value: AssociativeValue[]): void;
}
export declare class AssociativeValue extends BitstreamElement {
private $key;
get key(): string;
set key(value: string);
value: Value;
}
export declare class ArrayValue<T = any> extends ReferenceValue<T[]> {
marker: TypeMarker;
private $denseLengthOrReference;
get isReference(): boolean;
get isLiteral(): boolean;
get id(): number;
set id(value: number);
get denseLength(): number;
associativeValues: AssociativeValue[];
private $values;
get values(): Value<any>[];
set values(value: Value<any>[]);
}
export declare class ClassRegistry {
private _map;
register(klass: Function, name?: string): void;
get(name: string): Function;
}
export declare class ObjectValue extends ReferenceValue<object> {
get registry(): ClassRegistry;
marker: TypeMarker;
$objectTypeIndicator: number;
get isReference(): boolean;
get isLiteral(): boolean;
get isTraitLiteral(): boolean;
get isTraitReference(): boolean;
get isExternalizable(): boolean;
get id(): number;
set id(value: number);
static reference(id: number): ObjectValue;
$variantMarker: any;
private _dynamicMembers;
get dynamicMembers(): AssociativeValue[];
set dynamicMembers(value: AssociativeValue[]);
private _values;
get values(): Value<any>[];
set values(value: Value<any>[]);
}
export declare class Traits extends BitstreamElement {
className: StringOrReference;
sealedMemberNames: StringOrReference[];
get isDynamic(): boolean;
}
export declare class ObjectValueWithInternalTraits extends ObjectValue {
$objectTypeIndicator: number;
get traits(): Traits;
private _value;
get value(): object;
set value(value: object);
get values(): Value<any>[];
set values(value: Value<any>[]);
set dynamicMembers(value: AssociativeValue[]);
protected buildValue(): void;
onParseFinished(): void;
}
export declare class ObjectValueWithLiteralTraits extends ObjectValueWithInternalTraits {
$objectTypeIndicator: number;
get isDynamic(): boolean;
set isDynamic(value: boolean);
get sealedMemberNameCount(): number;
set sealedMemberNameCount(value: number);
private $traits;
get traits(): Traits;
set traits(value: Traits);
get value(): object;
set value(value: object);
}
export declare class ObjectValueWithReferencedTraits extends ObjectValueWithInternalTraits {
$objectTypeIndicator: number;
get traitsId(): number;
set traitsId(id: number);
get traits(): Traits;
set traits(value: Traits);
}
export declare class ObjectValueWithExternalizableTraits extends ObjectValue {
$objectTypeIndicator: number;
className: StringOrReference;
}
export declare class ObjectValueWithUnknownExternalizableTraits extends ObjectValueWithExternalizableTraits {
constructor();
}
export declare class ByteArray extends ReferenceValue<Buffer> {
marker: TypeMarker;
private $lengthOrReference;
get isReference(): boolean;
get isLiteral(): boolean;
get id(): number;
set id(value: number);
$value: Buffer;
get value(): Buffer;
set value(value: Buffer);
}
export declare class VectorValue<T = any> extends ReferenceValue<T> {
protected $lengthOrReference: number;
get isReference(): boolean;
get isLiteral(): boolean;
get id(): number;
set id(value: number);
get length(): number;
isFixed: boolean;
}
export declare class ObjectVectorValue extends VectorValue<object> {
marker: TypeMarker;
values: Value[];
get value(): Value<any>[];
set value(value: Value<any>[]);
objectTypeName: StringOrReference;
}
export declare class DoubleVectorValue extends VectorValue<number[]> {
marker: TypeMarker;
values: number[];
get value(): number[];
set value(value: number[]);
}
export declare class IntVectorValue extends VectorValue<Int32Array> {
marker: TypeMarker;
private _bytes;
private _elements;
get bytes(): Uint8Array;
set bytes(value: Uint8Array);
get value(): Int32Array;
set value(value: Int32Array);
}
export declare class UIntVectorValue extends VectorValue<Uint32Array> {
marker: TypeMarker;
private _bytes;
private _elements;
get bytes(): Uint8Array;
set bytes(value: Uint8Array);
get value(): Uint32Array;
set value(value: Uint32Array);
}
export declare class DictionaryEntry extends BitstreamElement {
key: Value;
value: Value;
}
export declare class DictionaryValue<K = any, V = any> extends ReferenceValue<Map<K, V>> {
marker: TypeMarker;
private $lengthOrReference;
get isReference(): boolean;
get isLiteral(): boolean;
get id(): number;
set id(value: number);
get length(): number;
hasWeakKeys: boolean;
get value(): Map<K, V>;
set value(value: Map<K, V>);
private $entries;
get entries(): DictionaryEntry[];
set entries(value: DictionaryEntry[]);
}