Package Exports
- seroval
Readme
seroval
Stringify JS values
Install
npm install --save serovalyarn add serovalpnpm add serovalUsage
import seroval from 'seroval';
const object = {
number: [Math.random(), -0, NaN, Infinity, -Infinity],
string: ['hello world', '<script>Hello World</script>'],
boolean: [true, false],
null: null,
undefined: undefined,
bigint: 9007199254740991n,
array: [,,,], // holes
regexp: /[a-z0-9]+/i,
date: new Date(),
map: new Map([['hello', 'world']]),
set: new Set(['hello', 'world']),
};
// self cyclic references
// recursive objects
object.self = object;
// recursive arrays
object.array.push(object.array);
// recursive maps
object.map.set('self', object.map);
// recursive sets
object.set.add(object.set);
// mutual cyclic references
object.array.push(object.map);
object.map.set('mutual', object.set);
object.set.add(object.array);
const result = seroval(object);Output (as a string):
((h,j,k,m)=>(h={number:[0.5906513825027921,-0,NaN,Infinity,-Infinity],string:["hello world","\x3Cscript>Hello World\x3C/script>"],boolean:[!0,!1],null:null,undefined:void 0,bigint:BigInt("9007199254740991"),array:j=[,,,,k=new Map([["hello","world"],["mutual",m=new Set(["hello","world"])]])],regexp:/[a-z0-9]+/i,date:new Date("2023-02-06T06:16:00.384Z"),map:k,set:m},j[3]=j,h.self=h,k.set("self",k),m.add(m).add(j),h))()
// Formatted for readability
((h, j, k, m) => (h = {
number: [0.5906513825027921, -0, NaN, Infinity, -Infinity],
string: ["hello world", "\x3Cscript>Hello World\x3C/script>"],
boolean: [!0, !1],
null: null,
undefined: void 0,
bigint: BigInt("9007199254740991"),
array: j = [, , , , k = new Map([
["hello", "world"],
["mutual", m = new Set(["hello", "world"])]
])],
regexp: /[a-z0-9]+/i,
date: new Date("2023-02-06T06:16:00.384Z"),
map: k,
set: m
}, j[3] = j, h.self = h, k.set("self", k), m.add(m).add(j), h))()Mutual cyclic example
import seroval from 'seroval';
const a = new Map([['name', 'a']]);
const b = new Map([['name', 'b']]);
const c = new Map([['name', 'c']]);
const d = new Map([['name', 'd']]);
c.set('left', a);
d.set('left', a);
c.set('right', b);
d.set('right', b);
a.set('children', [c, d]);
b.set('children', [c, d]);
const result = seroval({ a, b, c, d });Output (as a string):
((h,j,k,m,o,q)=>(q={a:h=new Map([["name","a"],["children",[j=new Map([["name","c"],["right",k=new Map([["name","b"],["children",o=[,m=new Map([["name","d"]])]]])]]),m]]]),b:k,c:j,d:m},o[0]=j,j.set("left",h),m.set("left",h).set("right",k),q))()
// Formatted
((h, j, k, m, o, q) => (q = {
a: h = new Map([
["name", "a"],
["children", [j = new Map([
["name", "c"],
["right", k = new Map([
["name", "b"],
["children", o = [, m = new Map([
["name", "d"]
])]]
])]
]), m]]
]),
b: k,
c: j,
d: m
}, o[0] = j, j.set("left", h), m.set("left", h).set("right", k), q))()Supports
The following values are the only values accepted by seroval:
- Exact values
NaNInfinity-Infinity-0
- Primitives
numberstringbooleannullundefinedbigint
Array+ holesObjectRegExpDateMapSet
- Cyclic references (both self and mutual)
License
MIT © lxsmnsyc