jsoniq
Version:
JSONiq implementation for JavaScript
45 lines (43 loc) • 5.97 kB
JavaScript
;
/// <reference path="../../../typings/lodash/lodash.d.ts" />
var _ = require("lodash");
var jerr = require("../../errors");
var UpdatePrimitive_1 = require("./UpdatePrimitive");
class InsertIntoObject extends UpdatePrimitive_1.default {
constructor(target, ordPath, pairs) {
super(target, ordPath);
this.pairs = pairs;
}
merge(udp) {
var keys = Object.keys(this.pairs);
var newKeys = Object.keys(udp.pairs);
var intersection = _.intersection(keys, newKeys);
//An error jerr:JNUP0005 is raised if a collision occurs.
if (intersection.length > 0) {
throw new jerr.JNUP0005();
}
else {
_.merge(this.pairs, udp.pairs);
}
return this;
}
apply() {
var target = this.getTarget();
Object.keys(this.pairs).forEach((key) => {
//It is a dynamic error if upd:applyUpdates causes an object to contain two pairs with the same name.
if (target[key]) {
throw new jerr.JNUP0006(key);
}
else {
target[key] = this.pairs[key];
}
});
return this;
}
invert(item, pul) {
pul.deleteFromObject(this.id, this.ordPath, Object.keys(this.pairs));
return this;
}
}
exports.default = InsertIntoObject;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91cGRhdGVzL3ByaW1pdGl2ZXMvSW5zZXJ0SW50b09iamVjdC50cyJdLCJuYW1lcyI6WyJJbnNlcnRJbnRvT2JqZWN0IiwiSW5zZXJ0SW50b09iamVjdC5jb25zdHJ1Y3RvciIsIkluc2VydEludG9PYmplY3QubWVyZ2UiLCJJbnNlcnRJbnRvT2JqZWN0LmFwcGx5IiwiSW5zZXJ0SW50b09iamVjdC5pbnZlcnQiXSwibWFwcGluZ3MiOiI7QUFBQSw0REFBNEQ7QUFDNUQsSUFBWSxDQUFDLFdBQU0sUUFBUSxDQUFDLENBQUE7QUFDNUIsSUFBWSxJQUFJLFdBQU0sY0FBYyxDQUFDLENBQUE7QUFFckMsZ0NBQTRCLG1CQUFtQixDQUFDLENBQUE7QUFJaEQsK0JBQThDLHlCQUFlO0lBR3pEQSxZQUFZQSxNQUFjQSxFQUFFQSxPQUFpQkEsRUFBRUEsS0FBU0E7UUFDcERDLE1BQU1BLE1BQU1BLEVBQUVBLE9BQU9BLENBQUNBLENBQUNBO1FBQ3ZCQSxJQUFJQSxDQUFDQSxLQUFLQSxHQUFHQSxLQUFLQSxDQUFDQTtJQUN2QkEsQ0FBQ0E7SUFFREQsS0FBS0EsQ0FBQ0EsR0FBcUJBO1FBQ3ZCRSxJQUFJQSxJQUFJQSxHQUFHQSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxDQUFDQTtRQUNuQ0EsSUFBSUEsT0FBT0EsR0FBR0EsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsS0FBS0EsQ0FBQ0EsQ0FBQ0E7UUFDckNBLElBQUlBLFlBQVlBLEdBQUdBLENBQUNBLENBQUNBLFlBQVlBLENBQUNBLElBQUlBLEVBQUVBLE9BQU9BLENBQUNBLENBQUNBO1FBQ2pEQSx5REFBeURBO1FBQ3pEQSxFQUFFQSxDQUFBQSxDQUFDQSxZQUFZQSxDQUFDQSxNQUFNQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUN6QkEsTUFBTUEsSUFBSUEsSUFBSUEsQ0FBQ0EsUUFBUUEsRUFBRUEsQ0FBQ0E7UUFDOUJBLENBQUNBO1FBQUNBLElBQUlBLENBQUNBLENBQUNBO1lBQ0pBLENBQUNBLENBQUNBLEtBQUtBLENBQUNBLElBQUlBLENBQUNBLEtBQUtBLEVBQUVBLEdBQUdBLENBQUNBLEtBQUtBLENBQUNBLENBQUNBO1FBQ25DQSxDQUFDQTtRQUNEQSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQTtJQUNoQkEsQ0FBQ0E7SUFFREYsS0FBS0E7UUFDREcsSUFBSUEsTUFBTUEsR0FBR0EsSUFBSUEsQ0FBQ0EsU0FBU0EsRUFBRUEsQ0FBQ0E7UUFDOUJBLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLENBQUNBLE9BQU9BLENBQUNBLENBQUNBLEdBQUdBO1lBQ2hDQSxxR0FBcUdBO1lBQ3JHQSxFQUFFQSxDQUFBQSxDQUFDQSxNQUFNQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQTtnQkFDYkEsTUFBTUEsSUFBSUEsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7WUFDakNBLENBQUNBO1lBQUNBLElBQUlBLENBQUNBLENBQUNBO2dCQUNKQSxNQUFNQSxDQUFDQSxHQUFHQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQTtZQUNsQ0EsQ0FBQ0E7UUFDTEEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFDSEEsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0E7SUFDaEJBLENBQUNBO0lBRURILE1BQU1BLENBQUNBLElBQVNBLEVBQUVBLEdBQVNBO1FBQ3ZCSSxHQUFHQSxDQUFDQSxnQkFBZ0JBLENBQUNBLElBQUlBLENBQUNBLEVBQUVBLEVBQUVBLElBQUlBLENBQUNBLE9BQU9BLEVBQUVBLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLENBQUNBLENBQUNBO1FBQ3JFQSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQTtJQUNoQkEsQ0FBQ0E7QUFDTEosQ0FBQ0E7bUNBQUEiLCJmaWxlIjoibGliL3VwZGF0ZXMvcHJpbWl0aXZlcy9JbnNlcnRJbnRvT2JqZWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uLy4uL3R5cGluZ3MvbG9kYXNoL2xvZGFzaC5kLnRzXCIgLz5cbmltcG9ydCAqIGFzIF8gZnJvbSBcImxvZGFzaFwiO1xuaW1wb3J0ICogYXMgamVyciBmcm9tIFwiLi4vLi4vZXJyb3JzXCI7XG5cbmltcG9ydCBVcGRhdGVQcmltaXRpdmUgZnJvbSBcIi4vVXBkYXRlUHJpbWl0aXZlXCI7XG5cbmltcG9ydCB7IElQVUwgfSBmcm9tIFwiLi4vSVBVTFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnNlcnRJbnRvT2JqZWN0IGV4dGVuZHMgVXBkYXRlUHJpbWl0aXZlIHtcbiAgICBwYWlyczoge307XG5cbiAgICBjb25zdHJ1Y3Rvcih0YXJnZXQ6IHN0cmluZywgb3JkUGF0aDogc3RyaW5nW10sIHBhaXJzOiB7fSkge1xuICAgICAgICBzdXBlcih0YXJnZXQsIG9yZFBhdGgpO1xuICAgICAgICB0aGlzLnBhaXJzID0gcGFpcnM7XG4gICAgfVxuXG4gICAgbWVyZ2UodWRwOiBJbnNlcnRJbnRvT2JqZWN0KTogVXBkYXRlUHJpbWl0aXZlIHtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLnBhaXJzKTtcbiAgICAgICAgdmFyIG5ld0tleXMgPSBPYmplY3Qua2V5cyh1ZHAucGFpcnMpO1xuICAgICAgICB2YXIgaW50ZXJzZWN0aW9uID0gXy5pbnRlcnNlY3Rpb24oa2V5cywgbmV3S2V5cyk7XG4gICAgICAgIC8vQW4gZXJyb3IgamVycjpKTlVQMDAwNSBpcyByYWlzZWQgaWYgYSBjb2xsaXNpb24gb2NjdXJzLlxuICAgICAgICBpZihpbnRlcnNlY3Rpb24ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGplcnIuSk5VUDAwMDUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF8ubWVyZ2UodGhpcy5wYWlycywgdWRwLnBhaXJzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBhcHBseSgpOiBVcGRhdGVQcmltaXRpdmUge1xuICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpcy5nZXRUYXJnZXQoKTtcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5wYWlycykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAvL0l0IGlzIGEgZHluYW1pYyBlcnJvciBpZiB1cGQ6YXBwbHlVcGRhdGVzIGNhdXNlcyBhbiBvYmplY3QgdG8gY29udGFpbiB0d28gcGFpcnMgd2l0aCB0aGUgc2FtZSBuYW1lLlxuICAgICAgICAgICAgaWYodGFyZ2V0W2tleV0pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgamVyci5KTlVQMDAwNihrZXkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IHRoaXMucGFpcnNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGludmVydChpdGVtOiBhbnksIHB1bDogSVBVTCk6IFVwZGF0ZVByaW1pdGl2ZSB7XG4gICAgICAgIHB1bC5kZWxldGVGcm9tT2JqZWN0KHRoaXMuaWQsIHRoaXMub3JkUGF0aCwgT2JqZWN0LmtleXModGhpcy5wYWlycykpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0=