Nurturing Pluto's Martians

    @wessberg/marshaller
    TypeScript icon, indicating that this package has built-in type declarations

    3.0.11 • Public • Published
    Logo

    A lightweight way to serialize and deserialize complex data types non-destructively

    Downloads per month NPM version Dependencies Contributors code style: prettier License: MIT Support on Patreon

    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

    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
    Frederik Wessberg
    @FredWessberg
    Lead Developer

    Backers

    Patreon

    Become a backer and get your name, avatar, and Twitter handle listed here.

    Backers on Patreon

    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)

    Install

    npm i @wessberg/marshaller

    DownloadsWeekly Downloads

    2

    Version

    3.0.11

    License

    MIT

    Unpacked Size

    108 kB

    Total Files

    10

    Last publish

    Collaborators

    • wessberg