ng-ptplibraries
Version:
108 lines (107 loc) • 10.4 kB
JavaScript
/**
* @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