jsoniq
Version:
JSONiq implementation for JavaScript
83 lines (77 loc) • 3.65 kB
text/typescript
import UpdatePrimitive from "./primitives/UpdatePrimitive";
import InsertIntoObject from "./primitives/InsertIntoObject";
import InsertIntoArray from "./primitives/InsertIntoArray";
import DeleteFromObject from "./primitives/DeleteFromObject";
import DeleteFromArray from "./primitives/DeleteFromArray";
import ReplaceInObject from "./primitives/ReplaceInObject";
import ReplaceInArray from "./primitives/ReplaceInArray";
import RenameInObject from "./primitives/RenameInObject";
import Insert from "./primitives/Insert";
import Remove from "./primitives/Remove";
export default class UpdatePrimitives {
insertIntoObject : InsertIntoObject[] = [];
insertIntoArray : InsertIntoArray[] = [];
deleteFromObject : DeleteFromObject[] = [];
deleteFromArray : DeleteFromArray[] = [];
replaceInObject : ReplaceInObject[] = [];
replaceInArray : ReplaceInArray[] = [];
renameInObject : RenameInObject[] = [];
insert : Insert[] = [];
remove : Remove[] = [];
getAll(): UpdatePrimitive[] {
var primitives = [];
primitives = this.insertIntoArray;
primitives = primitives.concat(this.insertIntoObject);
primitives = primitives.concat(this.insertIntoObject);
primitives = primitives.concat(this.deleteFromObject);
primitives = primitives.concat(this.deleteFromArray);
primitives = primitives.concat(this.replaceInObject);
primitives = primitives.concat(this.replaceInArray);
primitives = primitives.concat(this.renameInObject);
primitives = primitives.concat(this.insert);
primitives = primitives.concat(this.remove);
return primitives;
}
parse(udps: UpdatePrimitives): UpdatePrimitives {
udps.insertIntoObject.forEach((udp) => {
this.insertIntoObject.push(new InsertIntoObject(udp.id, udp.ordPath, udp.pairs));
});
udps.insertIntoArray.forEach((udp) => {
this.insertIntoArray.push(new InsertIntoArray(udp.id, udp.ordPath, udp.position, udp.items));
});
udps.deleteFromObject.forEach((udp) => {
this.deleteFromObject.push(new DeleteFromObject(udp.id, udp.ordPath, udp.keys));
});
udps.replaceInObject.forEach((udp) => {
this.replaceInObject.push(new ReplaceInObject(udp.id, udp.ordPath, udp.key, udp.item));
});
udps.deleteFromArray.forEach((udp) => {
this.deleteFromArray.push(new DeleteFromArray(udp.id, udp.ordPath, udp.position));
});
udps.replaceInArray.forEach((udp) => {
this.replaceInArray.push(new ReplaceInArray(udp.id, udp.ordPath, udp.position, udp.item));
});
udps.renameInObject.forEach((udp) => {
this.renameInObject.push(new RenameInObject(udp.id, udp.ordPath, udp.key, udp.newKey));
});
udps.insert.forEach((udp) => {
this.insert.push(new Insert(udp.id, udp.item));
});
udps.remove.forEach((udp) => {
this.remove.push(new Remove(udp.id));
});
return this;
}
forEach(fn: (udp: UpdatePrimitive, udps: UpdatePrimitive[], index: number) => void): UpdatePrimitives {
var containers = [
this.insertIntoObject, this.insertIntoArray, this.deleteFromObject, this.renameInObject,
this.deleteFromArray, this.replaceInArray, this.insert, this.remove
];
containers.forEach(udps => {
udps.forEach((udp, index) => {
fn(udp, udps, index);
});
});
return this;
}
}