2020-05-13 10:36:23 +00:00
|
|
|
# typescript/serializer
|
|
|
|
|
|
|
|
[![Build Status](https://thunderk.visualstudio.com/typescript/_apis/build/status/serializer?branchName=master)](https://dev.azure.com/thunderk/typescript/_build?pipelineNameFilter=serializer)
|
2021-07-18 21:12:32 +00:00
|
|
|
|
|
|
|
## About
|
|
|
|
|
|
|
|
This library offers a generic serialization system for Javascript.
|
|
|
|
|
|
|
|
Deep objects state may be serialized to a string, and reconstructed back.
|
|
|
|
|
|
|
|
Supported data types include:
|
|
|
|
|
|
|
|
- Primitive types (number, bool, string...)
|
|
|
|
- Set and Map standard objects
|
|
|
|
- Class instances, as long as the class list is exhaustively provided to the
|
|
|
|
serializer
|
|
|
|
|
|
|
|
Be warned that the resulting serialized value may be quite large and
|
|
|
|
uncompressed.
|
|
|
|
|
|
|
|
## Import
|
|
|
|
|
|
|
|
In deno:
|
|
|
|
|
|
|
|
```typescript
|
|
|
|
import { Serializer } from "https://code.thunderk.net/typescript/serializer/raw/branch/master/mod.ts";
|
|
|
|
```
|
|
|
|
|
|
|
|
## Use
|
|
|
|
|
|
|
|
Suppose you have 2 classes Class1 and Class2, whose instances you want to
|
|
|
|
serialize:
|
|
|
|
|
|
|
|
```typescript
|
|
|
|
Class1 { /* [...] */ }
|
|
|
|
Class2 { /* [...] */ }
|
|
|
|
|
|
|
|
// Here is the example object we want to serialize to a string
|
|
|
|
const obj = {
|
|
|
|
a: [1, "a", new Class1()],
|
|
|
|
b: new Class2("x"),
|
|
|
|
c: new Class3(),
|
|
|
|
};
|
|
|
|
|
|
|
|
// We prepare the serializer, providing the class namespace
|
|
|
|
const namespace = {
|
|
|
|
Class1,
|
|
|
|
Class2,
|
|
|
|
};
|
|
|
|
const serializer = new Serializer(namespace);
|
|
|
|
|
|
|
|
// Optionally, some class instances may be ignored (they will be replaced by *undefined*)
|
|
|
|
serializer.addIgnoredClass(Class3);
|
|
|
|
|
|
|
|
// Serialize the object to a string
|
|
|
|
const state = serializer.serialize(obj);
|
|
|
|
|
|
|
|
// Reconstruct the object back
|
|
|
|
const nobj = serializer.unserialize(state);
|
|
|
|
|
|
|
|
console.log(nobj.a[0]);
|
|
|
|
// output: 1
|
|
|
|
|
|
|
|
console.log(nobj.b instance of Class2);
|
|
|
|
// output: true
|
|
|
|
|
|
|
|
console.log(nobj.c);
|
|
|
|
// output: undefined
|
|
|
|
```
|