0.0.6 • Published 8 months ago
@coconut-xr/xserialization v0.0.6
@coconut-xr/xserialization
fast and efficient js data serialization
Features
- preserves referential integrity
- can serialize recursive data structures
- 0 dependencies
- true to js (supports null, undefined, NaN, ...)
- custom data types
API
type SerializationOptions = {
custom?: {
isCustom(data: any): boolean;
/**
* custom serilization function
* @param serialize allows to serialize any value inside the custom serialization function
* @returns the data type of the serialized value
*/
serialize(writer: Writer, data: any, serialize: (data: any) => void): number;
/**
* custom deserialization function
*/
deserialize(reader: Reader, dataType: number, deserialize: () => any): any;
};
};
function serializeInto(writer: Writer, data: any, options: SerializationOptions = {}): void;
function deserializeFrom(reader: Reader, options: SerializationOptions = {}): any;
Usage
const value = "test";
const writer = new Writer();
serializeInto(writer, value);
const buffer = writer.finishReference();
const reader = new Reader();
reader.start(buffer);
const result = deserializeInto(reader);
reader.finish();
console.log(result);
Why so complex, you might ask?
Using this design reader and writer can be reused and serializeInto can be called multiple times to write into the same buffer.
Data Types
Name | range |
---|---|
Custom data type | 0 - 31 |
FixUint (values 0 to 31) | 32-63 |
FixNUint (values -1 to -32) | 64-95 |
FixStr (string length 0 to 31) | 96-127 |
FixPtr (pointer 0 to 31) | 128-159 |
FixArr (array length 0 to 31) | 160-191 |
FixObj8 (object length 0 to 31 with a key length of 0 to 256) | 192-223 |
NaN | 224 |
PosInf | 225 |
NegInf | 226 |
Null | 227 |
Undefined | 228 |
False | 229 |
True | 230 |
Float64 | 231 |
Uint8 | 232 |
Uint16 | 233 |
Uint32 | 234 |
NUint8 | 235 |
NUint16 | 236 |
NUint32 | 237 |
Str8 | 238 |
Str16 | 239 |
Str32 | 240 |
Pointer8 | 241 |
Pointer16 | 242 |
Pointer32 | 243 |
Arr8 | 244 |
Arr16 | 245 |
Arr32 | 246 |
Obj8 | 247 |
Obj16 | 248 |
Obj32 | 249 |
Reserved for future use | 250-255 |
Achknowledgement
xserialization builds on the structure and idea of msgpack but focusses solely on js data.