packaging-tape
v1.0.0
Published
Helper for (de)serialization
Downloads
5
Readme
📦 Packaging Tape
This module tries to help you with packaging JavaScript objects into JSON representation without losing the class an object may be bound to.
Example
import {jsonSerializer} from 'packaging-tape';
class User {
constructor(name) {
this.name = name;
}
sayHi () {
console.log(`Hi ${this.name}!`)
}
}
const myJSON = jsonSerializer({
customTypes: [User]
});
const user = new User('alice');
const coreSerializer = JSON.parse(JSON.stringify(user));
console.log(coreSerializer); // Outputs: { name: 'alice' }
coreSerializer.sayHi(); // Throws: Uncaught TypeError: coreSerializer.sayHi is not a function
const packagingTapeSerializer = myJSON.parse(myJSON.stringify(user));
console.log(packagingTapeSerializer); // Outputs: User { name: 'alice' }
packagingTapeSerializer.sayHi(); // Outputs: Hi alice!
API
The API should be a drop-in replacement of the core implementation JSON.stringify()
/ JSON.parse()
.
import {jsonSerializer} from 'packaging-tape';
const {parse, stringify} = jsonSerializer(opts);
opts
is an Object with the following keys:
customTypes
: ACustomType
oder an array ofCustomType
. Defaults to[]
.useDefaultTypes
: Boolean. If set totrue
the core typesDate
,Error
,Map
andSet
will be serialized. Defaults totrue
.indent
: String ornull
. Controls indentation forstringify()
. Defaults tonull
, i.e. no indentation.
CustomType
is a Class (which will be used as cls
as described down below) or an Object with the following keys:
cls
: The Class to be serialized.name
: A string. Name for the internal representation. Defaults tocls.name
.pack
: A method for packingcls
:(unpacked) => packed
withunpacked
being the instance to be packed andpacked
to for the representation. Make surepacked
uses only core types likestring
,number
,boolean
,array
,object
. Defaults to:cls.pack()
and if not available(x) => ({...x})
.unpack
: A method for unpackingcls
:(packed) => unpacked
withunpacked
being the instance to be packed andpacked
to for the representation. Make sureunpack(pack(myInstance))
yields the same info amyInstance
. Defaults tocls.unpack()
and if not available(x) => Object.assign(new c.cls(), x)
.