@synerty/vortexjs
Version:
Custom observable data serialisation and routing based on Angular 2+
74 lines • 8.27 kB
JavaScript
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==