UNPKG

@synerty/vortexjs

Version:

Custom observable data serialisation and routing based on Angular 2+

74 lines 8.27 kB
var Tuple_1; import { __decorate } from "tslib"; import deepEqual from "deep-equal"; import { dictKeysFromObject } from "./UtilMisc"; import { addJsonableType, Jsonable, SerialiseUtil } from "./exports"; /** Tuples implementation details. * * We're not going to have fully fledged tuples in the browser. As far as the * browser is concerned, it will recieve tuples which will have all the fields * and then it will create tuples to send back, populating the fields it needs. * * There should be some checks when it gets back to the server to ensure the * populated fields exist in the tuples when it deserialises it. * */ export let Tuple = Tuple_1 = class Tuple extends Jsonable { // Change Tracking Enabled - Shortened for memory conservation _ct = false; // Change Tracking Reference State - Shortened for memory conservation _ctrs = null; constructor(tupleType = null) { super(); let self = this; self.__rst = SerialiseUtil.T_RAPUI_TUPLE; self._tupleType = tupleType; } static create(tupleType) { if (TUPLE_TYPES[tupleType] == null) { return new Tuple_1(tupleType); } else { // Tuples set their own types, don't pass anything to the constructor return new TUPLE_TYPES[tupleType](); } } _tupleName() { return this._tupleType; } // --------------- // Start change detection code _setChangeTracking(on = true) { this._ctrs = new Tuple_1(); this._ctrs.fromJsonDict(this.toJsonDict()); this._ct = on; } _detectedChanges(reset = true) { let changes = []; for (let key of dictKeysFromObject(this)) { let old_ = this._ctrs[key]; let new_ = this[key]; if (deepEqual(old_, new_)) { continue; } changes.push({ fieldName: key, oldValue: old_, newValue: new_, }); } if (reset) { this._setChangeTracking(true); } return changes; } }; Tuple = Tuple_1 = __decorate([ addJsonableType(SerialiseUtil.T_RAPUI_TUPLE) ], Tuple); export let TUPLE_TYPES = {}; export function addTupleType(_Class) { let inst = new _Class(); TUPLE_TYPES[inst._tupleType] = _Class; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHVwbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdm9ydGV4L1R1cGxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxTQUFTLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoRCxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFRckU7Ozs7Ozs7OztHQVNHO0FBRUksV0FBTSxLQUFLLGFBQVgsTUFBTSxLQUFNLFNBQVEsUUFBUTtJQUMvQiw4REFBOEQ7SUFDdEQsR0FBRyxHQUFZLEtBQUssQ0FBQztJQUU3QixzRUFBc0U7SUFDOUQsS0FBSyxHQUFpQixJQUFJLENBQUM7SUFFbkMsWUFBWSxZQUEyQixJQUFJO1FBQ3ZDLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDLGFBQWEsQ0FBQztRQUN6QyxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFpQjtRQUMzQixJQUFJLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLEVBQUU7WUFDaEMsT0FBTyxJQUFJLE9BQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUMvQjthQUFNO1lBQ0gscUVBQXFFO1lBQ3JFLE9BQU8sSUFBSSxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztTQUN2QztJQUNMLENBQUM7SUFFRCxVQUFVO1FBQ04sT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzNCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsOEJBQThCO0lBRTlCLGtCQUFrQixDQUFDLEtBQWMsSUFBSTtRQUNqQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksT0FBSyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELGdCQUFnQixDQUFDLFFBQWlCLElBQUk7UUFDbEMsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLEtBQUssSUFBSSxHQUFHLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckIsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUN2QixTQUFTO2FBQ1o7WUFFRCxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUNULFNBQVMsRUFBRSxHQUFHO2dCQUNkLFFBQVEsRUFBRSxJQUFJO2dCQUNkLFFBQVEsRUFBRSxJQUFJO2FBQ2pCLENBQUMsQ0FBQztTQUNOO1FBRUQsSUFBSSxLQUFLLEVBQUU7WUFDUCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDakM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0NBQ0osQ0FBQTtBQTFEWSxLQUFLO0lBRGpCLGVBQWUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDO0dBQ2hDLEtBQUssQ0EwRGpCO0FBTUQsTUFBTSxDQUFDLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUU1QixNQUFNLFVBQVUsWUFBWSxDQUFDLE1BQWdCO0lBQ3pDLElBQUksSUFBSSxHQUFHLElBQVUsTUFBTyxFQUFFLENBQUM7SUFDL0IsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkZWVwRXF1YWwgZnJvbSBcImRlZXAtZXF1YWxcIjtcbmltcG9ydCB7IGRpY3RLZXlzRnJvbU9iamVjdCB9IGZyb20gXCIuL1V0aWxNaXNjXCI7XG5pbXBvcnQgeyBhZGRKc29uYWJsZVR5cGUsIEpzb25hYmxlLCBTZXJpYWxpc2VVdGlsIH0gZnJvbSBcIi4vZXhwb3J0c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFR1cGxlQ2hhbmdlSSB7XG4gICAgZmllbGROYW1lOiBzdHJpbmc7XG4gICAgb2xkVmFsdWU6IGFueTtcbiAgICBuZXdWYWx1ZTogYW55O1xufVxuXG4vKiogVHVwbGVzIGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG4gKlxuICogV2UncmUgbm90IGdvaW5nIHRvIGhhdmUgZnVsbHkgZmxlZGdlZCB0dXBsZXMgaW4gdGhlIGJyb3dzZXIuIEFzIGZhciBhcyB0aGVcbiAqIGJyb3dzZXIgaXMgY29uY2VybmVkLCBpdCB3aWxsIHJlY2lldmUgdHVwbGVzIHdoaWNoIHdpbGwgaGF2ZSBhbGwgdGhlIGZpZWxkc1xuICogYW5kIHRoZW4gaXQgd2lsbCBjcmVhdGUgdHVwbGVzIHRvIHNlbmQgYmFjaywgcG9wdWxhdGluZyB0aGUgZmllbGRzIGl0IG5lZWRzLlxuICpcbiAqIFRoZXJlIHNob3VsZCBiZSBzb21lIGNoZWNrcyB3aGVuIGl0IGdldHMgYmFjayB0byB0aGUgc2VydmVyIHRvIGVuc3VyZSB0aGVcbiAqIHBvcHVsYXRlZCBmaWVsZHMgZXhpc3QgaW4gdGhlIHR1cGxlcyB3aGVuIGl0IGRlc2VyaWFsaXNlcyBpdC5cbiAqXG4gKi9cbkBhZGRKc29uYWJsZVR5cGUoU2VyaWFsaXNlVXRpbC5UX1JBUFVJX1RVUExFKVxuZXhwb3J0IGNsYXNzIFR1cGxlIGV4dGVuZHMgSnNvbmFibGUge1xuICAgIC8vIENoYW5nZSBUcmFja2luZyBFbmFibGVkIC0gU2hvcnRlbmVkIGZvciBtZW1vcnkgY29uc2VydmF0aW9uXG4gICAgcHJpdmF0ZSBfY3Q6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8vIENoYW5nZSBUcmFja2luZyBSZWZlcmVuY2UgU3RhdGUgLSBTaG9ydGVuZWQgZm9yIG1lbW9yeSBjb25zZXJ2YXRpb25cbiAgICBwcml2YXRlIF9jdHJzOiBUdXBsZSB8IG51bGwgPSBudWxsO1xuXG4gICAgY29uc3RydWN0b3IodHVwbGVUeXBlOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgICAgIHNlbGYuX19yc3QgPSBTZXJpYWxpc2VVdGlsLlRfUkFQVUlfVFVQTEU7XG4gICAgICAgIHNlbGYuX3R1cGxlVHlwZSA9IHR1cGxlVHlwZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY3JlYXRlKHR1cGxlVHlwZTogc3RyaW5nKSB7XG4gICAgICAgIGlmIChUVVBMRV9UWVBFU1t0dXBsZVR5cGVdID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVHVwbGUodHVwbGVUeXBlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFR1cGxlcyBzZXQgdGhlaXIgb3duIHR5cGVzLCBkb24ndCBwYXNzIGFueXRoaW5nIHRvIHRoZSBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBUVVBMRV9UWVBFU1t0dXBsZVR5cGVdKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfdHVwbGVOYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl90dXBsZVR5cGU7XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gU3RhcnQgY2hhbmdlIGRldGVjdGlvbiBjb2RlXG5cbiAgICBfc2V0Q2hhbmdlVHJhY2tpbmcob246IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgICAgIHRoaXMuX2N0cnMgPSBuZXcgVHVwbGUoKTtcbiAgICAgICAgdGhpcy5fY3Rycy5mcm9tSnNvbkRpY3QodGhpcy50b0pzb25EaWN0KCkpO1xuICAgICAgICB0aGlzLl9jdCA9IG9uO1xuICAgIH1cblxuICAgIF9kZXRlY3RlZENoYW5nZXMocmVzZXQ6IGJvb2xlYW4gPSB0cnVlKTogVHVwbGVDaGFuZ2VJW10ge1xuICAgICAgICBsZXQgY2hhbmdlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBrZXkgb2YgZGljdEtleXNGcm9tT2JqZWN0KHRoaXMpKSB7XG4gICAgICAgICAgICBsZXQgb2xkXyA9IHRoaXMuX2N0cnNba2V5XTtcbiAgICAgICAgICAgIGxldCBuZXdfID0gdGhpc1trZXldO1xuICAgICAgICAgICAgaWYgKGRlZXBFcXVhbChvbGRfLCBuZXdfKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGFuZ2VzLnB1c2goe1xuICAgICAgICAgICAgICAgIGZpZWxkTmFtZToga2V5LFxuICAgICAgICAgICAgICAgIG9sZFZhbHVlOiBvbGRfLFxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlOiBuZXdfLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzZXQpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldENoYW5nZVRyYWNraW5nKHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNoYW5nZXM7XG4gICAgfVxufVxuXG5pbnRlcmZhY2UgSVR1cGxlIHtcbiAgICBuZXcgKG5hbWU6IHN0cmluZyB8IG51bGwpOiBUdXBsZTtcbn1cblxuZXhwb3J0IGxldCBUVVBMRV9UWVBFUyA9IHt9O1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkVHVwbGVUeXBlKF9DbGFzczogRnVuY3Rpb24pIHtcbiAgICBsZXQgaW5zdCA9IG5ldyAoPGFueT5fQ2xhc3MpKCk7XG4gICAgVFVQTEVfVFlQRVNbaW5zdC5fdHVwbGVUeXBlXSA9IF9DbGFzcztcbn1cbiJdfQ==