@mu-ts/serialization
TypeScript icon, indicating that this package has built-in type declarations

1.2.0 • Public • Published

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.

Readme

Keywords

Package Sidebar

Install

npm i @mu-ts/serialization

Weekly Downloads

15

Version

1.2.0

License

ISC

Unpacked Size

46.2 kB

Total Files

62

Last publish

Collaborators

  • matt-filion
  • strandedmusician
  • jeff-authvia