cerializr
Version:
(de)serialization made easy with ES7/Typescript annotations (decorators)
1 lines • 2.56 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0});const tslib_1=require("tslib"),util_1=require("./util"),meta_data_1=require("./meta_data"),my_lodash_1=tslib_1.__importDefault(require("./my-lodash")),isObjectLike_1=tslib_1.__importDefault(require("lodash/isObjectLike"));function SerializeMap(e,a){const i={};return Object.keys(e).forEach(r=>{const t=e[r];my_lodash_1.default.isUndefined(t)||(i[meta_data_1.MetaData.serializeKeyTransform(r)]=Serialize(t,a))}),i}function SerializeArray(e,a){return e.map(e=>Serialize(e,a))}function SerializePrimitive(e,a){if(my_lodash_1.default.isNil(e))return null;switch(a){case Boolean:return Boolean(e);case Number:const a=Number(e);return isNaN(a)?null:a;case String:case Date:case RegExp:default:return e.toString()}}function SerializeJSON(e,a=!0){if(my_lodash_1.default.isNil(e))return null;if(Array.isArray(e))return e.map(e=>SerializeJSON(e,a));if(isObjectLike_1.default(e)){if(my_lodash_1.default.isDate(e)||my_lodash_1.default.isRegExp(e))return e.toString();{const i={};return Object.keys(e).forEach(r=>{const t=e[r];if(!my_lodash_1.default.isUndefined(t)){const e=a?meta_data_1.MetaData.serializeKeyTransform(r):r;i[e]=SerializeJSON(t,a)}}),i}}return my_lodash_1.default.isFunction(e)?null:e}function Serialize(e,a){if(my_lodash_1.default.isNil(e))return null;const i=meta_data_1.MetaData.getMetaDataForType(a);if(null===i)return util_1.isPrimitiveType(a)?SerializePrimitive(e,a):{};const r={};if(i.forEach(a=>{if(null===a.serializedKey)return;const i=e[a.keyName];if(my_lodash_1.default.isUndefined(i))return;const t=a.getSerializedKey();r[t]=serializeByFlag(i,a)}),my_lodash_1.default.isFunction(a.onSerialized)){const i=a.onSerialized(r,e);if(!my_lodash_1.default.isUndefined(i))return i}return r}function serializeByFlag(e,a){const i=a.flags;switch(!0){case!!(i&meta_data_1.MetaDataFlag.SerializeMap):return SerializeMap(e,a.serializedType);case!!(i&meta_data_1.MetaDataFlag.SerializeArray):return SerializeArray(e,a.serializedType);case!!(i&meta_data_1.MetaDataFlag.SerializePrimitive):return SerializePrimitive(e,a.serializedType);case!!(i&meta_data_1.MetaDataFlag.SerializeObject):return Serialize(e,a.serializedType);case!!(i&meta_data_1.MetaDataFlag.SerializeJSON):return SerializeJSON(e,a.transformKey);case!!(i&meta_data_1.MetaDataFlag.SerializeUsing):return a.serializedType(e);default:return null}}exports.SerializeMap=SerializeMap,exports.SerializeArray=SerializeArray,exports.SerializePrimitive=SerializePrimitive,exports.SerializeJSON=SerializeJSON,exports.Serialize=Serialize;