lotus / inc /jsonRecovery.ts
k-l-lambda's picture
commit lotus dist.
d605f27
raw
history blame
647 Bytes
const recoverJSON = (json: string | object, classDict) => {
if (typeof json === "object")
json = JSON.stringify(json);
return JSON.parse(json, (_, value) => {
if (value && (typeof value === "object") && value.__prototype) {
const Class = classDict[value.__prototype];
if (Class) {
const {__prototype, ...fields} = value;
return new Class(fields);
}
}
return value;
});
};
class SimpleClass {
constructor (data?: object) {
if (data)
Object.assign(this, data);
}
toJSON () {
return {
__prototype: (this.constructor as any).className,
...this,
};
}
};
export {
recoverJSON,
SimpleClass,
};