0.0.6 • Published 2 years 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.