jsoniq
Version:
JSONiq implementation for JavaScript
62 lines (60 loc) • 9.67 kB
JavaScript
;
/// <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 DeleteFromObjectComposition 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.deleteFromObject(u.id, u.ordPath, u.keys);
}
return this;
}
insertAggregation(ut, u) {
this.omit(this.find(ut.item, u.ordPath), u.keys);
}
insertIntoObjectAggregation(ut, u) {
this.omit(ut.pairs, u.keys);
}
replaceInObjectAggregation(ut, u) {
var i = this.isSubsetOrEqual(ut.ordPath, u.ordPath);
if (i > -2) {
this.omit(this.find(ut.item, u.ordPath.slice(i + 2)), u.keys);
}
else {
//Accumulation
this.d0.deleteFromObject(u.id, u.ordPath, u.keys);
}
}
renameInObjectAggregation(udp) {
_.filter(this.d0.udps.renameInObject, { id: udp.id }).forEach(ut => {
udp.keys.forEach((key, index) => {
var i = this.isSubsetOrEqual(ut.ordPath.concat(ut.newKey), udp.ordPath.concat(key));
if (i === index) {
udp.keys[index] = ut.key;
}
else if (i > -1) {
udp.ordPath[i] = ut.key;
}
});
});
}
}
exports.default = DeleteFromObjectComposition;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91cGRhdGVzL2NvbXBvc2l0aW9uL0RlbGV0ZUZyb21PYmplY3RDb21wb3NpdGlvbi50cyJdLCJuYW1lcyI6WyJEZWxldGVGcm9tT2JqZWN0Q29tcG9zaXRpb24iLCJEZWxldGVGcm9tT2JqZWN0Q29tcG9zaXRpb24uY29uc3RydWN0b3IiLCJEZWxldGVGcm9tT2JqZWN0Q29tcG9zaXRpb24uY29tcG9zZSIsIkRlbGV0ZUZyb21PYmplY3RDb21wb3NpdGlvbi5pbnNlcnRBZ2dyZWdhdGlvbiIsIkRlbGV0ZUZyb21PYmplY3RDb21wb3NpdGlvbi5pbnNlcnRJbnRvT2JqZWN0QWdncmVnYXRpb24iLCJEZWxldGVGcm9tT2JqZWN0Q29tcG9zaXRpb24ucmVwbGFjZUluT2JqZWN0QWdncmVnYXRpb24iLCJEZWxldGVGcm9tT2JqZWN0Q29tcG9zaXRpb24ucmVuYW1lSW5PYmplY3RBZ2dyZWdhdGlvbiJdLCJtYXBwaW5ncyI6IjtBQUFBLDREQUE0RDtBQUM1RCxJQUFZLENBQUMsV0FBTSxRQUFRLENBQUMsQ0FBQTtBQUU1Qix1QkFBbUIsc0JBQXNCLENBQUMsQ0FBQTtBQUMxQyxpQ0FBNkIsZ0NBQWdDLENBQUMsQ0FBQTtBQUM5RCxnQ0FBNEIsK0JBQStCLENBQUMsQ0FBQTtBQUc1RCw4QkFBMEIsaUJBQWlCLENBQUMsQ0FBQTtBQUU1QywwQ0FBeUQsdUJBQWE7SUFFbEVBLFlBQVlBLEVBQU9BO1FBQ2ZDLE1BQU1BLEVBQUVBLENBQUNBLENBQUNBO0lBQ2RBLENBQUNBO0lBRURELE9BQU9BLENBQUNBLENBQW1CQTtRQUN2QkUsSUFBSUEsTUFBTUEsR0FBR0EsSUFBSUEsQ0FBQ0EscUJBQXFCQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUMzQ0EsRUFBRUEsQ0FBQUEsQ0FBQ0EsTUFBTUEsWUFBWUEsZ0JBQU1BLENBQUNBLENBQUNBLENBQUNBO1lBQzFCQSxJQUFJQSxDQUFDQSxpQkFBaUJBLENBQVVBLE1BQU1BLEVBQUVBLENBQUNBLENBQUNBLENBQUNB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QSxNQUFNQSxDQUFDQSxFQUFFQSxDQUFDQSxNQUFNQSxDQUFDQSxFQUFFQSxHQUFHQSxDQUFDQSxPQUFPQSxDQUFDQSxNQUFNQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQTtnQkFDcEZBLEVBQUVBLENBQUFBLENBQUNBLENBQUNBLEtBQUtBLEtBQUtBLENBQUNBLENBQUNBLENBQUNBO29CQUNiQSxHQUFHQSxDQUFDQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxHQUFHQSxFQUFFQSxDQUFDQSxHQUFHQSxDQUFDQTtnQkFDN0JBLENBQUNBO2dCQUFDQSxJQUFJQSxDQUFDQSxFQUFFQSxDQUFBQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQTtvQkFDZkEsR0FBR0EsQ0FBQ0EsT0FBT0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsRUFBRUEsQ0FBQ0EsR0FBR0EsQ0FBQ0E7Z0JBQzVCQSxDQUFDQTtZQUNMQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUNQQSxDQUFDQSxDQUFDQSxDQUFDQTtJQUNQQSxDQUFDQTtBQUNMTixDQUFDQTs4Q0FBQSIsImZpbGUiOiJsaWIvdXBkYXRlcy9jb21wb3NpdGlvbi9EZWxldGVGcm9tT2JqZWN0Q29tcG9zaXRpb24uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vLi4vdHlwaW5ncy9sb2Rhc2gvbG9kYXNoLmQudHNcIiAvPlxuaW1wb3J0ICogYXMgXyBmcm9tIFwibG9kYXNoXCI7XG5cbmltcG9ydCBJbnNlcnQgZnJvbSBcIi4uL3ByaW1pdGl2ZXMvSW5zZXJ0XCI7XG5pbXBvcnQgSW5zZXJ0SW50b09iamVjdCBmcm9tIFwiLi4vcHJpbWl0aXZlcy9JbnNlcnRJbnRvT2JqZWN0XCI7XG5pbXBvcnQgUmVwbGFjZUluT2JqZWN0IGZyb20gXCIuLi9wcmltaXRpdmVzL1JlcGxhY2VJbk9iamVjdFwiO1xuaW1wb3J0IERlbGV0ZUZyb21PYmplY3QgZnJvbSBcIi4uL3ByaW1pdGl2ZXMvRGVsZXRlRnJvbU9iamVjdFwiO1xuaW1wb3J0IFBVTCBmcm9tIFwiLi4vUFVMXCI7XG5pbXBvcnQgVVBDb21wb3NpdGlvbiBmcm9tIFwiLi9VUENvbXBvc2l0aW9uXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlbGV0ZUZyb21PYmplY3RDb21wb3NpdGlvbiBleHRlbmRzIFVQQ29tcG9zaXRpb24ge1xuXG4gICAgY29uc3RydWN0b3IoZDA6IFBVTCkge1xuICAgICAgICBzdXBlcihkMCk7XG4gICAgfVxuXG4gICAgY29tcG9zZSh1OiBEZWxldGVGcm9tT2JqZWN0KTogRGVsZXRlRnJvbU9iamVjdENvbXBvc2l0aW9uIHtcbiAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMuZmluZEFnZ3JlZ2F0aW9uVGFyZ2V0KHUpO1xuICAgICAgICBpZih0YXJnZXQgaW5zdGFuY2VvZiBJbnNlcnQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0QWdncmVnYXRpb24oPEluc2VydD4gdGFyZ2V0LCB1KTtcbiAgICAgICAgfSBlbHNlIGlmKHRhcmdldCBpbnN0YW5jZW9mIEluc2VydEludG9PYmplY3QpIHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0SW50b09iamVjdEFnZ3JlZ2F0aW9uKDxJbnNlcnRJbnRvT2JqZWN0PiB0YXJnZXQsIHUpO1xuICAgICAgICB9IGVsc2UgaWYodGFyZ2V0IGluc3RhbmNlb2YgUmVwbGFjZUluT2JqZWN0KSB7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VJbk9iamVjdEFnZ3JlZ2F0aW9uKDxSZXBsYWNlSW5PYmplY3Q+IHRhcmdldCwgdSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbmFtZUluT2JqZWN0QWdncmVnYXRpb24odSk7XG4gICAgICAgICAgICB0aGlzLmQwLmRlbGV0ZUZyb21PYmplY3QodS5pZCwgdS5vcmRQYXRoLCB1LmtleXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGluc2VydEFnZ3JlZ2F0aW9uKHV0OiBJbnNlcnQsIHU6IERlbGV0ZUZyb21PYmplY3QpIHtcbiAgICAgICAgdGhpcy5vbWl0KHRoaXMuZmluZCh1dC5pdGVtLCB1Lm9yZFBhdGgpLCB1LmtleXMpO1xuICAgIH1cblxuICAgIGluc2VydEludG9PYmplY3RBZ2dyZWdhdGlvbih1dDogSW5zZXJ0SW50b09iamVjdCwgdTogRGVsZXRlRnJvbU9iamVjdCkge1xuICAgICAgICB0aGlzLm9taXQodXQucGFpcnMsIHUua2V5cyk7XG4gICAgfVxuXG4gICAgcmVwbGFjZUluT2JqZWN0QWdncmVnYXRpb24odXQ6IFJlcGxhY2VJbk9iamVjdCwgdTogRGVsZXRlRnJvbU9iamVjdCkge1xuICAgICAgICB2YXIgaSA9IHRoaXMuaXNTdWJzZXRPckVxdWFsKHV0Lm9yZFBhdGgsIHUub3JkUGF0aCk7XG4gICAgICAgIGlmKGkgPiAtMikge1xuICAgICAgICAgICAgdGhpcy5vbWl0KHRoaXMuZmluZCh1dC5pdGVtLCB1Lm9yZFBhdGguc2xpY2UoaSArIDIpKSwgdS5rZXlzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vQWNjdW11bGF0aW9uXG4gICAgICAgICAgICB0aGlzLmQwLmRlbGV0ZUZyb21PYmplY3QodS5pZCwgdS5vcmRQYXRoLCB1LmtleXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVuYW1lSW5PYmplY3RBZ2dyZWdhdGlvbih1ZHA6IERlbGV0ZUZyb21PYmplY3QpIHtcbiAgICAgICAgXy5maWx0ZXIodGhpcy5kMC51ZHBzLnJlbmFtZUluT2JqZWN0LCB7IGlkOiB1ZHAuaWQgfSkuZm9yRWFjaCh1dCA9PiB7XG4gICAgICAgICAgICB1ZHAua2V5cy5mb3JFYWNoKChrZXksIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIGkgPSB0aGlzLmlzU3Vic2V0T3JFcXVhbCh1dC5vcmRQYXRoLmNvbmNhdCh1dC5uZXdLZXkpLCB1ZHAub3JkUGF0aC5jb25jYXQoa2V5KSk7XG4gICAgICAgICAgICAgICAgaWYoaSA9PT0gaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgdWRwLmtleXNbaW5kZXhdID0gdXQua2V5O1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZihpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdWRwLm9yZFBhdGhbaV0gPSB1dC5rZXk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ==