UNPKG

jsoniq

Version:

JSONiq implementation for JavaScript

62 lines (60 loc) 9.71 kB
"use strict"; /// <reference path="../../../typings/lodash/lodash.d.ts" /> var _ = require("lodash"); var Insert_1 = require("../primitives/Insert"); var InsertIntoObject_1 = require("../primitives/InsertIntoObject"); var ReplaceInObject_1 = require("../primitives/ReplaceInObject"); var UPComposition_1 = require("./UPComposition"); class ReplaceInObjectComposition extends UPComposition_1.default { constructor(d0) { super(d0); } compose(u) { var target = this.findAggregationTarget(u); if (target instanceof Insert_1.default) { this.insertAggregation(target, u); } else if (target instanceof InsertIntoObject_1.default) { this.insertIntoObjectAggregation(target, u); } else if (target instanceof ReplaceInObject_1.default) { this.replaceInObjectAggregation(target, u); } else { this.renameInObjectAggregation(u); this.d0.replaceInObject(u.id, u.ordPath, u.key, u.item); } return this; } insertAggregation(ut, u) { var item = this.find(ut.item, u.ordPath); item[u.key] = u.item; } insertIntoObjectAggregation(ut, u) { ut.pairs[u.key] = u.item; } replaceInObjectAggregation(ut, u) { var i = this.isSubsetOrEqual(ut.ordPath.concat(ut.key), u.ordPath); if (i > -2) { var item = this.find(ut.item, u.ordPath.concat(u.key).slice(i + 2)); item[u.key] = u.item; } else { //Accumulation this.d0.replaceInObject(u.id, u.ordPath, u.key, u.item); } } renameInObjectAggregation(u) { _.filter(this.d0.udps.renameInObject, { id: u.id }).forEach(ut => { var i = this.isSubsetOrEqual(ut.ordPath.concat(ut.newKey), u.ordPath.concat(u.key)); if (i === u.ordPath.length) { u.key = ut.key; } else if (i > -1) { u.ordPath[i] = ut.key; } }); } } exports.default = ReplaceInObjectComposition; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91cGRhdGVzL2NvbXBvc2l0aW9uL1JlcGxhY2VJbk9iamVjdENvbXBvc2l0aW9uLnRzIl0sIm5hbWVzIjpbIlJlcGxhY2VJbk9iamVjdENvbXBvc2l0aW9uIiwiUmVwbGFjZUluT2JqZWN0Q29tcG9zaXRpb24uY29uc3RydWN0b3IiLCJSZXBsYWNlSW5PYmplY3RDb21wb3NpdGlvbi5jb21wb3NlIiwiUmVwbGFjZUluT2JqZWN0Q29tcG9zaXRpb24uaW5zZXJ0QWdncmVnYXRpb24iLCJSZXBsYWNlSW5PYmplY3RDb21wb3NpdGlvbi5pbnNlcnRJbnRvT2JqZWN0QWdncmVnYXRpb24iLCJSZXBsYWNlSW5PYmplY3RDb21wb3NpdGlvbi5yZXBsYWNlSW5PYmplY3RBZ2dyZWdhdGlvbiIsIlJlcGxhY2VJbk9iamVjdENvbXBvc2l0aW9uLnJlbmFtZUluT2JqZWN0QWdncmVnYXRpb24iXSwibWFwcGluZ3MiOiI7QUFBQSw0REFBNEQ7QUFDNUQsSUFBWSxDQUFDLFdBQU0sUUFBUSxDQUFDLENBQUE7QUFFNUIsdUJBQW1CLHNCQUFzQixDQUFDLENBQUE7QUFDMUMsaUNBQTZCLGdDQUFnQyxDQUFDLENBQUE7QUFDOUQsZ0NBQTRCLCtCQUErQixDQUFDLENBQUE7QUFFNUQsOEJBQTBCLGlCQUFpQixDQUFDLENBQUE7QUFFNUMseUNBQXdELHVCQUFhO0lBRWpFQSxZQUFZQSxFQUFPQTtRQUNmQyxNQUFNQSxFQUFFQSxDQUFDQSxDQUFDQTtJQUNkQSxDQUFDQTtJQUVERCxPQUFPQSxDQUFDQSxDQUFrQkE7UUFDdEJFLElBQUlBLE1BQU1BLEdBQUdBLElBQUlBLENBQUNBLHFCQUFxQkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFDM0NBLEVBQUVBLENBQUFBLENBQUNBLE1BQU1BLFlBQVlBLGdCQUFNQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUMxQkEsSUFBSUEsQ0FBQ0EsaUJBQWlCQSxDQUFVQSxNQUFNQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUMvQ0Es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LENBQUNBLENBQUNBLEVBQUVBLEVBQUVBLENBQUNBLENBQUNBLE9BQU9BLENBQUNBLEVBQUVBO1lBQzFEQSxJQUFJQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxlQUFlQSxDQUFDQSxFQUFFQSxDQUFDQSxPQUFPQSxDQUFDQSxNQUFNQSxDQUFDQSxFQUFFQSxDQUFDQSxNQUFNQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxPQUFPQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUNwRkEsRUFBRUEsQ0FBQUEsQ0FBQ0EsQ0FBQ0EsS0FBS0EsQ0FBQ0EsQ0FBQ0EsT0FBT0EsQ0FBQ0EsTUFBTUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7Z0JBQ3hCQSxDQUFDQSxDQUFDQSxHQUFHQSxHQUFHQSxFQUFFQSxDQUFDQSxHQUFHQSxDQUFDQTtZQUNuQkEsQ0FBQ0E7WUFBQ0EsSUFBSUEsQ0FBQ0EsRUFBRUEsQ0FBQUEsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7Z0JBQ2ZBLENBQUNBLENBQUNBLE9BQU9BLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLEVBQUVBLENBQUNBLEdBQUdBLENBQUNBO1lBQzFCQSxDQUFDQTtRQUNMQSxDQUFDQSxDQUFDQSxDQUFDQTtJQUNQQSxDQUFDQTtBQUNMTixDQUFDQTs2Q0FBQSIsImZpbGUiOiJsaWIvdXBkYXRlcy9jb21wb3NpdGlvbi9SZXBsYWNlSW5PYmplY3RDb21wb3NpdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi8uLi90eXBpbmdzL2xvZGFzaC9sb2Rhc2guZC50c1wiIC8+XG5pbXBvcnQgKiBhcyBfIGZyb20gXCJsb2Rhc2hcIjtcblxuaW1wb3J0IEluc2VydCBmcm9tIFwiLi4vcHJpbWl0aXZlcy9JbnNlcnRcIjtcbmltcG9ydCBJbnNlcnRJbnRvT2JqZWN0IGZyb20gXCIuLi9wcmltaXRpdmVzL0luc2VydEludG9PYmplY3RcIjtcbmltcG9ydCBSZXBsYWNlSW5PYmplY3QgZnJvbSBcIi4uL3ByaW1pdGl2ZXMvUmVwbGFjZUluT2JqZWN0XCI7XG5pbXBvcnQgUFVMIGZyb20gXCIuLi9QVUxcIjtcbmltcG9ydCBVUENvbXBvc2l0aW9uIGZyb20gXCIuL1VQQ29tcG9zaXRpb25cIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVwbGFjZUluT2JqZWN0Q29tcG9zaXRpb24gZXh0ZW5kcyBVUENvbXBvc2l0aW9uIHtcblxuICAgIGNvbnN0cnVjdG9yKGQwOiBQVUwpIHtcbiAgICAgICAgc3VwZXIoZDApO1xuICAgIH1cblxuICAgIGNvbXBvc2UodTogUmVwbGFjZUluT2JqZWN0KTogUmVwbGFjZUluT2JqZWN0Q29tcG9zaXRpb24ge1xuICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpcy5maW5kQWdncmVnYXRpb25UYXJnZXQodSk7XG4gICAgICAgIGlmKHRhcmdldCBpbnN0YW5jZW9mIEluc2VydCkge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRBZ2dyZWdhdGlvbig8SW5zZXJ0PiB0YXJnZXQsIHUpO1xuICAgICAgICB9IGVsc2UgaWYodGFyZ2V0IGluc3RhbmNlb2YgSW5zZXJ0SW50b09iamVjdCkge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRJbnRvT2JqZWN0QWdncmVnYXRpb24oPEluc2VydEludG9PYmplY3Q+IHRhcmdldCwgdSk7XG4gICAgICAgIH0gZWxzZSBpZih0YXJnZXQgaW5zdGFuY2VvZiBSZXBsYWNlSW5PYmplY3QpIHtcbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUluT2JqZWN0QWdncmVnYXRpb24oPFJlcGxhY2VJbk9iamVjdD4gdGFyZ2V0LCB1KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVuYW1lSW5PYmplY3RBZ2dyZWdhdGlvbih1KTtcbiAgICAgICAgICAgIHRoaXMuZDAucmVwbGFjZUluT2JqZWN0KHUuaWQsIHUub3JkUGF0aCwgdS5rZXksIHUuaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaW5zZXJ0QWdncmVnYXRpb24odXQ6IEluc2VydCwgdTogUmVwbGFjZUluT2JqZWN0KSB7XG4gICAgICAgIHZhciBpdGVtID0gdGhpcy5maW5kKHV0Lml0ZW0sIHUub3JkUGF0aCk7XG4gICAgICAgIGl0ZW1bdS5rZXldID0gdS5pdGVtO1xuICAgIH1cblxuICAgIGluc2VydEludG9PYmplY3RBZ2dyZWdhdGlvbih1dDogSW5zZXJ0SW50b09iamVjdCwgdTogUmVwbGFjZUluT2JqZWN0KSB7XG4gICAgICAgIHV0LnBhaXJzW3Uua2V5XSA9IHUuaXRlbTtcbiAgICB9XG5cbiAgICByZXBsYWNlSW5PYmplY3RBZ2dyZWdhdGlvbih1dDogUmVwbGFjZUluT2JqZWN0LCB1OiBSZXBsYWNlSW5PYmplY3QpIHtcbiAgICAgICAgdmFyIGkgPSB0aGlzLmlzU3Vic2V0T3JFcXVhbCh1dC5vcmRQYXRoLmNvbmNhdCh1dC5rZXkpLCB1Lm9yZFBhdGgpO1xuICAgICAgICBpZihpID4gLTIpIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcy5maW5kKHV0Lml0ZW0sIHUub3JkUGF0aC5jb25jYXQodS5rZXkpLnNsaWNlKGkgKyAyKSk7XG4gICAgICAgICAgICBpdGVtW3Uua2V5XSA9IHUuaXRlbTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vQWNjdW11bGF0aW9uXG4gICAgICAgICAgICB0aGlzLmQwLnJlcGxhY2VJbk9iamVjdCh1LmlkLCB1Lm9yZFBhdGgsIHUua2V5LCB1Lml0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVuYW1lSW5PYmplY3RBZ2dyZWdhdGlvbih1OiBSZXBsYWNlSW5PYmplY3QpIHtcbiAgICAgICAgXy5maWx0ZXIodGhpcy5kMC51ZHBzLnJlbmFtZUluT2JqZWN0LCB7IGlkOiB1LmlkIH0pLmZvckVhY2godXQgPT4ge1xuICAgICAgICAgICAgdmFyIGkgPSB0aGlzLmlzU3Vic2V0T3JFcXVhbCh1dC5vcmRQYXRoLmNvbmNhdCh1dC5uZXdLZXkpLCB1Lm9yZFBhdGguY29uY2F0KHUua2V5KSk7XG4gICAgICAgICAgICBpZihpID09PSB1Lm9yZFBhdGgubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdS5rZXkgPSB1dC5rZXk7XG4gICAgICAgICAgICB9IGVsc2UgaWYoaSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgdS5vcmRQYXRoW2ldID0gdXQua2V5O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0=