siero
v0.3.2
Published
A serialization library that can handle functions, promises and symbols too.
Downloads
5
Maintainers
Readme
Siero
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.
Limitations
- 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.
Install
npm install --save siero
Supported Types
| 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
| |
Usage
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 );
License
MIT © Fabio Spampinato