packaging-tape
v1.0.0
Published
Helper for (de)serialization
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: ACustomTypeoder an array ofCustomType. Defaults to[].useDefaultTypes: Boolean. If set totruethe core typesDate,Error,MapandSetwill 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) => packedwithunpackedbeing the instance to be packed andpackedto for the representation. Make surepackeduses only core types likestring,number,boolean,array,object. Defaults to:cls.pack()and if not available(x) => ({...x}).unpack: A method for unpackingcls:(packed) => unpackedwithunpackedbeing the instance to be packed andpackedto 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).
