Skip to content

coconut-xr/xserialization

Repository files navigation

@coconut-xr/xserialization

Version License Twitter Discord

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

Acknowledgement

xserialization builds on the structure and idea of msgpack but focuses solely on js data.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published