1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- import { CLASSNAME_ATTRIBUTE } from "./Strings"
-
- export abstract class DeserializerFactory {
- static entityClasses = {}
-
- static from(object: any) {
- if(!object){
- return
- }
-
- if(typeof object !== 'object'){ //definitely not a class object
- return object
- }
-
- if(Array.isArray(object)){
- return object.map(DeserializerFactory.from)
- }
-
- const clazz = DeserializerFactory.entityClasses[object[CLASSNAME_ATTRIBUTE]]
- delete object[CLASSNAME_ATTRIBUTE]
-
- if(!clazz){ //anonymous object or class not registered as @Serializable
- Object.keys(object).forEach(key => {
- object[key] = DeserializerFactory.from(object[key])
- })
- return object
- }
-
- const obj = new clazz()
- Object.keys(object).forEach(key => {
- obj[key] = DeserializerFactory.from(object[key])
- })
- return obj
- }
-
-
-
- static makeDeserializable(object: any){
- if(!object)
- return
-
- if(typeof object !== 'object')
- return object
-
- if(object.constructor.name === 'Object'){
- Object.keys(object).forEach(key => {
- object[key] = DeserializerFactory.makeDeserializable(object[key])
- })
- return object
- }
-
- object[CLASSNAME_ATTRIBUTE] = object.constructor.name
- Object.keys(object).forEach(key => {
- object[key] = DeserializerFactory.makeDeserializable(object[key])
- })
-
- return object
- }
- }
-
- export function Serializable(attr?: any) {
- return function _Serializable<T extends { new(...args: any[]): {} }>(clazz: T) {
- DeserializerFactory.entityClasses[clazz.name] = clazz
-
- return clazz
- /*
- return class extends clazz{
- constructor(...args: any[]) {
- super(...args)
- }
- }
- */
- }
- }
|