@emanimation/js-serial-js
v1.1.0
Published
Safely serialize JavaScript expressions to/from a string. This includes Dates, BigInts, Functions, Maps, Sets, circular objs and more.
Downloads
39
Maintainers
Readme
@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.