A serialization library that can handle functions, promises and symbols too.
In general arbitrary functions/promises/symbols can't be transferred between workers/processes/VMs, but this library enables you to do the next best thing: by having the two execution contexts communicate with each other you can write code as if functions/promises/symbols got actually transferred between them.
Check out siero-worker
for an opinionated way to spawn a worker that you can talk to via Siero.
- Symbols that are created independently in two realms, without
Symbol.for
, won't be equal to each other. - Symbol properties are only preserved if attached to plain objects.
- Arbitrary custom properties are also only preserved if attached to plain objects.
- Prevent-extension/sealed/frozen flags are also only preserved for plain objects.
- Custom configurable/enumerable/writable flags for properties are not preserved at all.
- Getter/setter properties are not preserved as functions, they will instead be resolved.
- For error objects only the
name
,message
,stack
,cause
anderrors
properties are preserved. - The specific type of function constructor (regular, arrow, async etc.) is not preserved.
- Deserialized functions will always return a Promise, even if the original function didn't.
- Generators and async generators are not currently serializable.
npm install --save siero
Primitives | Boxed Primitives | Errors | Typed Arrays | Others |
---|---|---|---|---|
BigInt |
BigInt |
Error |
BigInt64Array |
Array |
Boolean |
Boolean |
EvalError |
BigUint64Array |
ArrayBuffer |
Null |
Number |
RangeError |
Float32Array |
DataView |
Number |
String |
ReferenceError |
Float64Array |
Date |
String |
Symbol |
SyntaxError |
Int8Array |
Function |
Symbol |
TypeError |
Int16Array |
Promise |
|
Undefined |
URIError |
Int32Array |
RegExp |
|
AggregateError |
Uint8Array |
Map |
||
Uint16Array |
Set |
|||
Uint32Array |
PlainObject |
|||
Uint8ClampedArray |
import {serialize, deserialize} from 'siero';
// Let's serialize a supported value
const value = { whatever: 123 }; // Any supported value
const serialized = serialize ( value );
// Let's deserialize it
const deserialized = deserialize ( serialized );
MIT © Fabio Spampinato