@wessberg/marshaller
v3.0.11
Published
A lightweight way to serialize and deserialize complex data types non-destructively
Downloads
261
Maintainers
Readme
A lightweight way to serialize and deserialize complex data types non-destructively
Description
Marshaller provides a lightweight way to serialize and deserialize complex data types non-destructively.
Essentially, it is JSON.parse()
and JSON.stringify
with support for far more data types, circular references, and with the guarantee that
whatever is serialized can be deserialized into the exact same representation without losing any information.
You can consider this to be direct replacements for the JSON.[stringify|parse]
methods, provided through marshall
for serialization and demarshall
for deserialization.
Features
- "
JSON.parse
/JSON.stringify
on steroids" - Non-destructive serialization/deserialization of data
- Supports Circular references
- A wide variety of supported data types - from simple things as strings to complex things such as Maps, Sets and Typed Arrays
Table of Contents
- Description
- Table of Contents
- Install
- Supported data types and features
- Usage
- Contributing
- Maintainers
- Backers
- FAQ
- License
Install
NPM
$ npm install @wessberg/marshaller
Yarn
$ yarn add @wessberg/marshaller
Supported data types and features
- Anything that is JSON serializable today:
number
,boolean
,string
,array
,object literal
- References, including circular references
RegExp
Date
Map
Set
Symbol
BigInt
undefined
null
Int8Array
Int16Array
Int32Array
UInt8Array
UInt8ClampedArray
UInt16Array
UInt32Array
Float32Array
Float64Array
String
Number
Boolean
Usage
import {marshall, demarshall} from "@wessberg/marshaller";
// Marshall some complex data that wouldn't normally be JSON serializable
const marshallResult = marshall({
a: new Set([1, 2, /foo/, {a: new Date(), b: new Float32Array([1, 2, 3])}])
});
// Demarshall it to get a structurally identical representation back of the data
const demarshallResult = demarshall(marshallResult);
Contributing
Do you want to contribute? Awesome! Please follow these recommendations.
Maintainers
| | | --------------------------------------------------------------------------------------------------------------------------------- | | Frederik Wessberg@FredWessbergLead Developer |
Backers
Patreon
Become a backer and get your name, avatar, and Twitter handle listed here.
FAQ
Why are functions not supported
First, there are security considerations. But more importantly, functions can reference identifiers that lives in a lexical environment that is declared outside of the local scope of that function. Marshalling this data would require passing in a sandboxed environment which breaks the promise of the library - simple replacement for JSON, with non-destructive serialization/deserialization.
License
MIT © Frederik Wessberg (@FredWessberg) (Website)