@emanimation/js-serial-js
TypeScript icon, indicating that this package has built-in type declarations

1.1.0 • Public • Published

@emanimation/js-serial-js

Safely serialize JavaScript expressions to a superset of JSON, which includes Dates, BigInts, Functions, Maps, Sets, circular objs and more. It produces a string that can be stored or transferred anywhere like normal JSON, but doesn't lose most of its properties. This string can also be parsed back by the provided parser.

Install

pnpm add @emanimation/js-serial-js

Use

    import { stringify, parse, cloneDeep } from 'js-serial-js';
    
    const original = {
        str  : 'string',
        num  : 0,
        obj  : {foo: 'foo'},
        arr  : [1, 2, 3],
        bool : true,
        nil  : null,
        undef: undefined,
        inf  : Infinity,
        date : new Date('Thu, 28 Apr 2016 22:02:17 GMT'),
        map  : new Map([['hello', 'world']]),
        set  : new Set([123, 456]),
        fn   : function (bar) {
                console.log('woo! a is '+this.str);
                console.log('and bar is '+bar);
            },
        re   : /([^\s]+)/g,
        big  : BigInt(10),
    };

    const serialized = stringify(original);
    console.log('serialized: ', serialized);
    /*
      // produces the following string:
        
        '{"json":{"str":"string","num":0,"obj":{"foo":"foo"},"arr":[1,2,3],"bool":true,
        "nil":null,"undef":null,"inf":"Infinity","date":"2016-04-28T22:02:17.000Z",
        "map":[["hello","world"]],"set":[123,456],"fn":function fn(bar) {
                    console.log("woo! a is " + this.str);
                    console.log("and bar is " + bar);
                  },"re":"\u002F([^\\s]+)\u002Fg","big":"10"},"meta":{"values":{"undef":
                  ["undefined"],"inf":["number"],"date":["Date"],"map":["map"],"set":
                  ["set"],"re":["regexp"],"big":["bigint"]}}}'
                  
      // notice the meta object, that tries to keep the object intact
    */
    
    console.log('typeof serialized: ', typeof serialized); // => string
    
    // to get things back as they were before
    let parsed =  parse(jm);
    console.log(parsed); // => object similar to original obj
    // the function still works as expected
    parsed.fn('huga'); // => "woo! a is string" "and bar is huga"

    /** quickly clone an object by serializing it and deserializing it as another obj. The object may not be represented completely since this can't handle some unknown objects */
    cloneDeep(original); // => deep clone of original javascript

Author

Emmanuel Mahuni

Acknowledgments

This library combines https://github.com/blitz-js/superjson and https://github.com/yahoo/serialize-javascript to produce a string that can be stored or transferred anywhere like normal JSON, but doesn't loose most of its properties. superjson generates the original object's data and metadata, and serialize-javascript stringifies both into a string that can be used anywhere.

Package Sidebar

Install

npm i @emanimation/js-serial-js

Weekly Downloads

13

Version

1.1.0

License

ISC

Unpacked Size

106 kB

Total Files

22

Last publish

Collaborators

  • emahuni