1.2.0 • Published 7 months ago

@mu-ts/serialization v1.2.0

Weekly downloads
-
License
ISC
Repository
github
Last release
7 months ago

Objective

A common library to use across @mu-ts projects for serializing to and from aws services.

Class Decoration

Start with the @serializable marker decorator, so that the other decorators have something to attach their metadata to.

@serializable
class User {
  @uuid
  public id: string;

  @encoded('base64')
  public name: string;
  
  @encrypted('my-secret')
  public address: string;

  @metadata()
  public group: string;

  @ignore()
  public hashId: string;
}

Sugar

If using this library stand alone, you can use the toString, fromString, toMetadata and fromMetadata functions direclty with a decorated class. It is safe to pass a non decorated class as it will just pass through or return empty objects as appropriate.

toString(instance: object)

If the instance is decorated, it will be picked up and used when serializing to a string.

This order indicates the order of the actual logic. The value is passed from one step to the next.

@ignore removes the value, converts to undefined. @uuid() sets the value to a v4 or v5 uuid as directed. @generate() executes the provided function to generate a vlaue. @encrypt() Encryptrs the value. @encode() Encodes the value, happens after encryption.

@metadata Has no impact on toString

fromString(body: string, clazz: any)

If clazz is not provided (or is a string, or has no decoration), then JSON.parse is used directly without any special handling.

Otherwise. This order indicates the order of the actual logic. The value is passed from one step to the next.

@encode() decodes the value. @decrypt() decrypts the value. date handling if the value matches the JSON date format exactly, it is converted to a JavaScript Date object.

toMetadata(instance: object)

For each field that is decorated with @metadata, and its corresponding value is a string, a Record<string, string> object is populated and returned.

fromMetadata(metadata: object, clazz: any)

If clazz is not provided (or is a string, or has no decoration), then JSON.parse is used directly without any special handling.

Each value from the provided metadata object is pulled out and put into a resulting object.

toObject(instance: object)

If the instance is decorated, it will be picked up and used when serializing to a string.

This order indicates the order of the actual logic. The value is passed from one step to the next.

@ignore removes the value, converts to undefined. @uuid() sets the value to a v4 or v5 uuid as directed. @generate() executes the provided function to generate a vlaue. @encrypt() Encryptrs the value. @encode() Encodes the value, happens after encryption.

@metadata Has no impact on toString

fromObject(instance: object, clazz: any)

If clazz is not provided then the instance is returned with no mutation.

Otherwise. This order indicates the order of the actual logic. The value is passed from one step to the next.

@encode() decodes the value. @decrypt() decrypts the value.

Notes

  • If you want to store data as metadata only, you would need to combine a field with @ignore and @metadata.
1.2.0

7 months ago

1.1.1

7 months ago

1.1.0

7 months ago

1.0.2

7 months ago

1.0.1

7 months ago

1.0.0

7 months ago