@mu-ts/serialization
v1.2.0
Published
Serialization for objects used within mu-ts.
Downloads
166
Readme
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.