cerializr
Version:
(de)serialization made easy with ES7/Typescript annotations (decorators)
1 lines • 3.89 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0});const tslib_1=require("tslib"),interfaces_1=require("./interfaces"),util_1=require("./util"),meta_data_1=require("./meta_data"),my_lodash_1=tslib_1.__importDefault(require("./my-lodash"));function DeserializeMap(e,a,i,t){if(my_lodash_1.default.isUndefined(t)&&(t=meta_data_1.MetaData.deserializeInstantationMethod),"object"!=typeof e)throw new Error("Expected input to be of type `object` but received: "+typeof e);if(my_lodash_1.default.isNil(i)&&(i={}),my_lodash_1.default.isNil(e))return null;const r=Object.keys(e);for(const s of r){const r=e[s];my_lodash_1.default.isUndefined(r)||(i[meta_data_1.MetaData.deserializeKeyTransform(s)]=_Deserialize(e[s],a,i[s],t))}return i}function DeserializeArray(e,a,i,t){if(my_lodash_1.default.isUndefined(t)&&(t=meta_data_1.MetaData.deserializeInstantationMethod),!Array.isArray(e))throw new Error("Expected input to be an array but received: "+typeof e);return Array.isArray(i)||(i=new Array),i=e.map((e,r)=>_Deserialize(e,a,i[r],t))}function DeserializePrimitive(e,a,i){if(a!==Date){if(a===RegExp){const a=e.match(/\/(.*?)\/([gimy])?$/);return new RegExp(a[1],a[2]||"")}return null===e?null:a(e)}{const a=new Date(e);if(!(i instanceof Date))return a;i.setTime(a.getTime())}}function DeserializeJSON(e,a=!0,i){if(Array.isArray(e))return Array.isArray(i)||(i=new Array(e.length)),i=e.map((e,t)=>DeserializeJSON(e,a,i[t]));if(my_lodash_1.default.isObject(e)){const t=my_lodash_1.default.isObject(i)?i:{},r=Object.keys(e);for(const i of r){const r=e[i];if(!my_lodash_1.default.isUndefined(r)){t[a?meta_data_1.MetaData.deserializeKeyTransform(i):i]=DeserializeJSON(e[i],a)}}return t}if(my_lodash_1.default.isFunction(e))throw new Error("Cannot deserialize a function, input is not a valid json object");return e}function _Deserialize(e,a,i,t){if(null===e)return null;const r=meta_data_1.MetaData.getMetaDataForType(a);if(null===r){if("function"==typeof a){if(util_1.isPrimitiveType(a))return DeserializePrimitive(e,a,i);switch(t){case interfaces_1.InstantiationMethod.New:return new a;case interfaces_1.InstantiationMethod.ObjectCreate:return Object.create(a.prototype);default:return{}}}return null}i=util_1.getTarget(a,i,t);for(let a=0;a<r.length;a++){const s=r[a];if(null===s.deserializedKey)continue;const n=e[s.transformKey?s.getDeserializedKey():s.deserializedKey];if(my_lodash_1.default.isUndefined(n))continue;let l=s.keyName;const o=s.flags;i&&(0!=(o&meta_data_1.MetaDataFlag.DeserializeMap)?i[l]=DeserializeMap(n,s.deserializedType,i[l],t):0!=(o&meta_data_1.MetaDataFlag.DeserializeArray)?i[l]=DeserializeArray(n,s.deserializedType,i[l],t):0!=(o&meta_data_1.MetaDataFlag.DeserializePrimitive)?i[l]=DeserializePrimitive(n,s.deserializedType,i[l]):0!=(o&meta_data_1.MetaDataFlag.DeserializeObject)?i[l]=_Deserialize(n,s.deserializedType,i[l],t):0!=(o&meta_data_1.MetaDataFlag.DeserializeJSON)?i[l]=DeserializeJSON(n,s.transformKey,t):0!=(o&meta_data_1.MetaDataFlag.DeserializeUsing)&&(i[l]=s.deserializedType(n,i[l],t)))}if(my_lodash_1.default.isFunction(a.onDeserialized)){const r=a.onDeserialized(e,i,t);if(void 0!==r)return r}return i}function Deserialize(e,a,i,t){return my_lodash_1.default.isUndefined(t)&&(t=meta_data_1.MetaData.deserializeInstantationMethod),_Deserialize(e,a,i,t)}function DeserializeRaw(e,a,i){return _Deserialize(e,a,i,interfaces_1.InstantiationMethod.None)}function DeserializeArrayRaw(e,a,i){return DeserializeArray(e,a,i,interfaces_1.InstantiationMethod.None)}function DeserializeMapRaw(e,a,i){return DeserializeMap(e,a,i,interfaces_1.InstantiationMethod.None)}exports.DeserializeMap=DeserializeMap,exports.DeserializeArray=DeserializeArray,exports.DeserializeJSON=DeserializeJSON,exports.Deserialize=Deserialize,exports.DeserializeRaw=DeserializeRaw,exports.DeserializeArrayRaw=DeserializeArrayRaw,exports.DeserializeMapRaw=DeserializeMapRaw;