UNPKG

airship-server

Version:

Airship is a framework for Node.JS & TypeScript that helps you to write big, scalable and maintainable API servers.

75 lines 3.28 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const BaseSerializer_1 = require("./BaseSerializer"); class JSONSerializer extends BaseSerializer_1.BaseSerializer { static deserialize(serializableType, raw, valuePath = []) { const serializableConstructor = serializableType.prototype; const propsNames = serializableConstructor[BaseSerializer_1.SerializableKeys] || []; const types = serializableConstructor[BaseSerializer_1.SerializableTypes]; const arrayTypes = serializableConstructor[BaseSerializer_1.SerializableArrayTypes]; const props = propsNames.map((prop, index) => { let type = types[index]; let arrayType = arrayTypes[index]; let isSerializable = super.isSerializableObject(type) == true; valuePath.push(prop); this.checkType(valuePath.join('.'), raw[prop], type, isSerializable); if (arrayType && super.isSerializableObject(arrayType) == true) { let val = raw[prop].map((v, i) => { valuePath.push(`{${i}}`); let deserialized = JSONSerializer.deserialize(arrayType, v, valuePath); valuePath.pop(); return deserialized; }); valuePath.pop(); return val; } else if (arrayType) { let val = raw[prop].map((v, i) => { valuePath.push(`{${i}}`); super.checkType(valuePath.join('.'), v, arrayType, false); valuePath.pop(); return v; }); valuePath.pop(); return val; } else if (isSerializable) { let val = JSONSerializer.deserialize(type, raw[prop], valuePath); valuePath.pop(); return val; } else { valuePath.pop(); return raw[prop]; } }); return new serializableConstructor.constructor(...props); } static serialize(entity) { let result = {}; let arrayTypes = entity[BaseSerializer_1.SerializableArrayTypes]; let i = 0; for (let prop in entity) { if (prop == BaseSerializer_1.SerializableKeys || prop == BaseSerializer_1.SerializableTypes || prop == BaseSerializer_1.SerializableArrayTypes) continue; let keyName = Reflect.getMetadata(BaseSerializer_1.SerializableKey, entity, prop) || prop; let type = Reflect.getMetadata('design:type', entity, prop); let arrayType = arrayTypes[i]; if (arrayType && super.isSerializableObject(arrayType) == true) { result[keyName] = entity[prop].map(JSONSerializer.serialize); } else if (super.isSerializableObject(type) == true) { result[keyName] = JSONSerializer.serialize(entity[prop]); } else result[keyName] = entity[prop]; i++; } return result; } } exports.default = JSONSerializer; //# sourceMappingURL=JSONSerializator.js.map