UNPKG

ng-ptplibraries

Version:

108 lines (107 loc) 10.4 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { merge, forEach, find } from 'lodash'; export class ServiceBaseModel { /** * Returns an object that removes dynamic properties that does not belong to the derived model. * @param {?} instance The `JSON` or `OBJECT` with values that will be assigned to the derived model. * @return {?} */ static CreateSerialized(instance) { return this.Create(instance).Deserialize(); } /** * @param {?} instance * @param {?} cls * @return {?} */ static CreateSerializedFromClass(instance, cls) { return ServiceBaseModel.CreateFromClass(instance, cls).Deserialize(); } /** * Returns a `BaseModel` class that is serialized. * @param {?} instance The `JSON` with values that will be assigned to the derived model. * @return {?} */ static Create(instance) { /** @type {?} */ let Model = new this(); Model.Serialize(); merge(Model, instance); return Model; } /** * @param {?} instance * @param {?} cls * @return {?} */ static CreateFromClass(instance, cls) { /** @type {?} */ let Model = new cls(); Model.Serialize(); merge(Model, instance); return Model; } /** * @param {?} param * @return {?} */ SetArrays(param) { this._arrays = param; } /** * Serializes the derived class. * Freezes base properties from derived models. * Stores them in a key storage. * Removes dynamically added properties when Deserialize is used. * @return {?} */ Serialize() { this._keys = Object.keys(this).filter(key => { if (key === 'Serialize' || key === 'Deserialize' || key === 'Create' || key === '_keys' || key === '_arrays') { return; } if (this[key] instanceof ServiceBaseModel) { (/** @type {?} */ (this[key])).Serialize(); } return key; }); } /** * Gets the values of all the serialized properties. * Neglects dynamically added properties. * @return {?} */ Deserialize() { /** @type {?} */ let deserialized = {}; this._keys.forEach(key => { if (this[key] instanceof Array) { /** @type {?} */ const TYPE = find(this._arrays, data => data.property === key).class; forEach(this[key], (data, index) => { /** @type {?} */ let patched = new TYPE(data); if (patched instanceof ServiceBaseModel) { data = ServiceBaseModel.CreateFromClass(data, TYPE).Deserialize(); this[key][index] = data; } }); } if (this[key] instanceof ServiceBaseModel) { this[key] = (/** @type {?} */ (this[key])).Deserialize(); } deserialized[key] = this[key]; }); return deserialized; } } if (false) { /** @type {?} */ ServiceBaseModel.prototype._keys; /** @type {?} */ ServiceBaseModel.prototype._arrays; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuYmFzZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXB0cGxpYnJhcmllcy8iLCJzb3VyY2VzIjpbImxpYi9iYXNlL21vZGVsLmJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUc5QyxNQUFNLE9BQU8sZ0JBQWdCOzs7Ozs7SUFZekIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQVE7UUFDNUIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0tBQzlDOzs7Ozs7SUFFRCxNQUFNLENBQUMseUJBQXlCLENBQUMsUUFBUSxFQUFFLEdBQUc7UUFDMUMsT0FBTyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0tBQ3hFOzs7Ozs7SUFNRCxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVE7O1FBQ2xCLElBQUksS0FBSyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2xCLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdkIsT0FBTyxLQUFLLENBQUM7S0FDaEI7Ozs7OztJQUVELE1BQU0sQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLEdBQUc7O1FBQ2hDLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdEIsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2xCLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdkIsT0FBTyxLQUFLLENBQUM7S0FDaEI7Ozs7O0lBRUQsU0FBUyxDQUFDLEtBQXlDO1FBQy9DLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0tBQ3hCOzs7Ozs7OztJQVFELFNBQVM7UUFDTCxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3hDLElBQUksR0FBRyxLQUFLLFdBQVcsSUFBSSxHQUFHLEtBQUssYUFBYSxJQUFJLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxLQUFLLE9BQU8sSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFO2dCQUMxRyxPQUFPO2FBQ1Y7WUFFRCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxnQkFBZ0IsRUFBRTtnQkFDdkMsbUJBQW9CLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO2FBQzlDO1lBRUQsT0FBTyxHQUFHLENBQUM7U0FDZCxDQUFDLENBQUM7S0FDTjs7Ozs7O0lBTUQsV0FBVzs7UUFDUCxJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDckIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksS0FBSyxFQUFFOztnQkFDNUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFFckUsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTs7b0JBQy9CLElBQUksT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUU3QixJQUFJLE9BQU8sWUFBWSxnQkFBZ0IsRUFBRTt3QkFDckMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7d0JBQ2xFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7cUJBQzNCO2lCQUNKLENBQUMsQ0FBQzthQUNOO1lBRUQsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksZ0JBQWdCLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxtQkFBb0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDNUQ7WUFFRCxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2pDLENBQUMsQ0FBQztRQUVILE9BQU8sWUFBWSxDQUFDO0tBQ3ZCO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtZXJnZSwgZm9yRWFjaCwgZmluZCB9IGZyb20gJ2xvZGFzaCc7XHJcblxyXG4vLyBAZHluYW1pY1xyXG5leHBvcnQgY2xhc3MgU2VydmljZUJhc2VNb2RlbCB7XHJcblxyXG4gICAgcHJpdmF0ZSBfa2V5cz86IHN0cmluZ1tdO1xyXG4gICAgcHJpdmF0ZSBfYXJyYXlzPzoge1xyXG4gICAgICAgIHByb3BlcnR5OiBzdHJpbmcsXHJcbiAgICAgICAgY2xhc3M6IGFueVxyXG4gICAgfVtdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCByZW1vdmVzIGR5bmFtaWMgcHJvcGVydGllcyB0aGF0IGRvZXMgbm90IGJlbG9uZyB0byB0aGUgZGVyaXZlZCBtb2RlbC5cclxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBUaGUgYEpTT05gIG9yIGBPQkpFQ1RgIHdpdGggdmFsdWVzIHRoYXQgd2lsbCBiZSBhc3NpZ25lZCB0byB0aGUgZGVyaXZlZCBtb2RlbC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIENyZWF0ZVNlcmlhbGl6ZWQoaW5zdGFuY2UpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkNyZWF0ZShpbnN0YW5jZSkuRGVzZXJpYWxpemUoKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgQ3JlYXRlU2VyaWFsaXplZEZyb21DbGFzcyhpbnN0YW5jZSwgY2xzKTogYW55IHtcclxuICAgICAgICByZXR1cm4gU2VydmljZUJhc2VNb2RlbC5DcmVhdGVGcm9tQ2xhc3MoaW5zdGFuY2UsIGNscykuRGVzZXJpYWxpemUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSBgQmFzZU1vZGVsYCBjbGFzcyB0aGF0IGlzIHNlcmlhbGl6ZWQuXHJcbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgVGhlIGBKU09OYCB3aXRoIHZhbHVlcyB0aGF0IHdpbGwgYmUgYXNzaWduZWQgdG8gdGhlIGRlcml2ZWQgbW9kZWwuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBDcmVhdGUoaW5zdGFuY2UpIHtcclxuICAgICAgICBsZXQgTW9kZWwgPSBuZXcgdGhpcygpO1xyXG4gICAgICAgIE1vZGVsLlNlcmlhbGl6ZSgpO1xyXG4gICAgICAgIG1lcmdlKE1vZGVsLCBpbnN0YW5jZSk7XHJcbiAgICAgICAgcmV0dXJuIE1vZGVsO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBDcmVhdGVGcm9tQ2xhc3MoaW5zdGFuY2UsIGNscykge1xyXG4gICAgICAgIGxldCBNb2RlbCA9IG5ldyBjbHMoKTtcclxuICAgICAgICBNb2RlbC5TZXJpYWxpemUoKTtcclxuICAgICAgICBtZXJnZShNb2RlbCwgaW5zdGFuY2UpO1xyXG4gICAgICAgIHJldHVybiBNb2RlbDtcclxuICAgIH1cclxuXHJcbiAgICBTZXRBcnJheXMocGFyYW06IHsgcHJvcGVydHk6IHN0cmluZywgY2xhc3M6IGFueSB9W10pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9hcnJheXMgPSBwYXJhbTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlcmlhbGl6ZXMgdGhlIGRlcml2ZWQgY2xhc3MuXHJcbiAgICAgKiBGcmVlemVzIGJhc2UgcHJvcGVydGllcyBmcm9tIGRlcml2ZWQgbW9kZWxzLlxyXG4gICAgICogU3RvcmVzIHRoZW0gaW4gYSBrZXkgc3RvcmFnZS5cclxuICAgICAqIFJlbW92ZXMgZHluYW1pY2FsbHkgYWRkZWQgcHJvcGVydGllcyB3aGVuIERlc2VyaWFsaXplIGlzIHVzZWQuXHJcbiAgICAgKi9cclxuICAgIFNlcmlhbGl6ZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9rZXlzID0gT2JqZWN0LmtleXModGhpcykuZmlsdGVyKGtleSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdTZXJpYWxpemUnIHx8IGtleSA9PT0gJ0Rlc2VyaWFsaXplJyB8fCBrZXkgPT09ICdDcmVhdGUnIHx8IGtleSA9PT0gJ19rZXlzJyB8fCBrZXkgPT09ICdfYXJyYXlzJykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpc1trZXldIGluc3RhbmNlb2YgU2VydmljZUJhc2VNb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgKDxTZXJ2aWNlQmFzZU1vZGVsPiB0aGlzW2tleV0pLlNlcmlhbGl6ZSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4ga2V5O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgdmFsdWVzIG9mIGFsbCB0aGUgc2VyaWFsaXplZCBwcm9wZXJ0aWVzLlxyXG4gICAgICogTmVnbGVjdHMgZHluYW1pY2FsbHkgYWRkZWQgcHJvcGVydGllcy5cclxuICAgICAqL1xyXG4gICAgRGVzZXJpYWxpemUoKTogYW55IHtcclxuICAgICAgICBsZXQgZGVzZXJpYWxpemVkID0ge307XHJcbiAgICAgICAgdGhpcy5fa2V5cy5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzW2tleV0gaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgVFlQRSA9IGZpbmQodGhpcy5fYXJyYXlzLCBkYXRhID0+IGRhdGEucHJvcGVydHkgPT09IGtleSkuY2xhc3M7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yRWFjaCh0aGlzW2tleV0sIChkYXRhLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXRjaGVkID0gbmV3IFRZUEUoZGF0YSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXRjaGVkIGluc3RhbmNlb2YgU2VydmljZUJhc2VNb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gU2VydmljZUJhc2VNb2RlbC5DcmVhdGVGcm9tQ2xhc3MoZGF0YSwgVFlQRSkuRGVzZXJpYWxpemUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXldW2luZGV4XSA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzW2tleV0gaW5zdGFuY2VvZiBTZXJ2aWNlQmFzZU1vZGVsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzW2tleV0gPSAoPFNlcnZpY2VCYXNlTW9kZWw+IHRoaXNba2V5XSkuRGVzZXJpYWxpemUoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZGVzZXJpYWxpemVkW2tleV0gPSB0aGlzW2tleV07XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBkZXNlcmlhbGl6ZWQ7XHJcbiAgICB9XHJcbn1cclxuIl19