@uon/model
TypeScript icon, indicating that this package has built-in type declarations

1.0.13 • Public • Published

UON Model

A decorator-based schema/model library with json and binary (de)serialization.

Getting started

Install @uon/model using npm

    npm i @uon/model

Usage

Model definitions are expressed in the following way:

import { Model, Member, ArrayMember } from '@uon/model'

@Model()
export class MyModel {

    // Generic member supports String, Boolean, Number and Date types
    @Member() 
    myStringField: string;

    // For array members you need to specify the array element type
    // as a decorator argument due to TypeScript not emiting array element type
    @ArrayMember(String) 
    myArrayField: string[];

}

TypedNumber

In order to efficiently serialize to binary, number types have been added.

Generic members with type Number are treated as Float64.

@Model()
export class MyModel {

    // Supported number types are Int8, Int16, Int32, Uint8, Uint16, Uint32, Float32 and Float64, (no (U)Int64 yet)
    @NumberMember(Uint8) myByte: number;

    // You can also use a TypedNumber as array element type 
    @ArrayMember(Uint32) myNumberArray: number[];

}

Modelizing an external type

If you want the serializers to be able to support types that are not under your control, we provide a utility function to let you "modelize" it. Here is an example:

import { Modelize, NumberMember, Float32 } from '@uon/model';
import { Vec2 } from 'some-math-lib';

Modelize(Vec2, {
    x: NumberMember(Float32),
    y: NumberMember(Float32)
});

Serialization

To serialize a model instance you can either do it manually via the JsonSerializer interface or simply pass it to JSON.stringify().

let obj = new MyModel();
let serializer = new JsonSerializer(MyModel);
let serialized = serializer.serialize(obj);

Note that serializer.serialize does not return a string but rather a JSON object using only builtin types (String, Number, Boolean, Array, Object and Date).

To deserialize, we do the following:

let serializer = new JsonSerializer(MyModel);
let my_obj = serializer.deserialize(JSON.parse(my_json_str));

Limitations

  • Array members are limited to 1 dimension, n-dimensional arrays might be supported in the future.

TODO

  • Add serialization support for builtin typed arrays (Uint8Array, etc...)
  • Handle array element validation, also TypedNumbers range
  • Complete this README

Package Sidebar

Install

npm i @uon/model

Weekly Downloads

1

Version

1.0.13

License

MIT

Unpacked Size

121 kB

Total Files

78

Last publish

Collaborators

  • uon-io