// Data set grouped and sorted "A" : [ { "id": "A", "seq": 0, "ver": 0, "prev": null}, { "id": "A", "seq": 0, "ver": 1, "prev": "A0.0"}, { "id": "A", "seq": 0, "ver": 2, "prev": "A0.1"}, { "id": "A", "seq": 0, "ver": 3, "prev": "A0.2"}, { "id": "A", "seq": 0, "ver": 4, "prev": "A0.3"}, { "id": "A", "seq": 2, "ver": 0, "prev": ["A0.4", "B1.1"]} ], "B" : [ { "id": "B", "seq": 1, "ver": 0, "prev": ["A0.4", "C0.2"]}, { "id": "B", "seq": 1, "ver": 1, "prev": "B1.0"} ], "C" : [ { "id": "C", "seq": 0, "ver": 0, "prev": null}, { "id": "C", "seq": 0, "ver": 1, "prev": "C0.0"}, { "id": "C", "seq": 0, "ver": 2, "prev": "C0.1"}, { "id": "C", "seq": 3, "ver": 0, "prev": ["C0.2", "A2.0]"]} ] A B C | 0.0 | 0.1 | 0.2 0.0 | | 0.3 0.1 | | 0.4 0.2 | \ / | | 1.0 | | | | | 1.1 | | / | 2.0 | \ | \ | \ | 3.0 // expected order A { "id": "A", "seq": 0, "ver": 0, "prev": null}, { "id": "A", "seq": 0, "ver": 1, "prev": "A0.0"}, { "id": "A", "seq": 0, "ver": 2, "prev": "A0.1"}, { "id": "A", "seq": 0, "ver": 3, "prev": "A0.2"}, { "id": "A", "seq": 0, "ver": 4, "prev": "A0.3"}, { "id": "C", "seq": 0, "ver": 0, "prev": null}, { "id": "C", "seq": 0, "ver": 1, "prev": "C0.0"}, { "id": "C", "seq": 0, "ver": 2, "prev": "C0.1"}, { "id": "B", "seq": 1, "ver": 0, "prev": ["A0.4", "C0.2"]}, { "id": "B", "seq": 1, "ver": 1, "prev": "B1.0"} { "id": "A", "seq": 2, "ver": 0, "prev": ["A0.4", "B1.1"]} { "id": "C", "seq": 3, "ver": 0, "prev": ["C0.2", "A2.0]"]} "VersionClock": { "seq": 0, "ver": 0 } "Item": { "id": "", "VersionClock": "", "prev": [] } "List": { "items": [""] } A B C 0.0 | 0.0 0.1 | | 0.1 0.2 \ / | 1.0 | | | 1.1 | / | 2.0 | \ | \ | \ | 3.0 // Sequence, --> syncs to listA.add("mango") // { "id": "A", "seq": 0, "ver": 0, "prev": null} listA.add("banana") // { "id": "A", "seq": 0, "ver": 1, "prev": "A.0.0"} --> B // A // { "id": "A", "seq": 0, "ver": 0, "prev": null} // { "id": "A", "seq": 0, "ver": 1, "prev": "A.0.0"} listC.add("apple") // { "id": "C", "seq": 0, "ver": 0, "prev": null} listC.add("strawberry") // { "id": "C", "seq": 0, "ver": 1, "prev": "C.0.0"} listC.add("orange") // { "id": "C", "seq": 0, "ver": 2, "prev": "C.0.1"} --> A,B // A // { "id": "A", "seq": 0, "ver": 0, "prev": null} // { "id": "A", "seq": 0, "ver": 1, "prev": "A.0.0"} // { "id": "C", "seq": 0, "ver": 0, "prev": null} // { "id": "C", "seq": 0, "ver": 1, "prev": "C.0.0"} // { "id": "C", "seq": 0, "ver": 2, "prev": "C.0.1"} listB.add("pineapple") // { "id": "B", "seq": 1, "ver": 0, "prev": ["A.0.1", "C.0.2"]} listB.add("papaya") // { "id": "B", "seq": 1, "ver": 1, "prev": "B.1.0"} --> A // A // { "id": "A", "seq": 0, "ver": 0, "prev": null} // { "id": "A", "seq": 0, "ver": 1, "prev": "A.0.0"} // { "id": "C", "seq": 0, "ver": 0, "prev": null} // { "id": "C", "seq": 0, "ver": 1, "prev": "C.0.0"} // { "id": "C", "seq": 0, "ver": 2, "prev": "C.0.1"} // { "id": "B", "seq": 1, "ver": 0, "prev": ["A.0.1", "C.0.2"]} // { "id": "B", "seq": 1, "ver": 1, "prev": "B.1.0"} listA.add("kiwi") // { "id": "A", "seq": 2, "ver": 0, "prev": ["A.0.1", "B1.1", "C0.2"]} --> C // A // { "id": "A", "seq": 0, "ver": 0, "prev": null} // { "id": "A", "seq": 0, "ver": 1, "prev": "A.0.0"} // { "id": "C", "seq": 0, "ver": 0, "prev": null} // { "id": "C", "seq": 0, "ver": 1, "prev": "C.0.0"} // { "id": "C", "seq": 0, "ver": 2, "prev": "C.0.1"} // { "id": "B", "seq": 1, "ver": 0, "prev": ["A.0.0", "C.0.2"]} // { "id": "B", "seq": 1, "ver": 1, "prev": "B.1.0"} // { "id": "A", "seq": 2, "ver": 0, "prev": ["A.0.1", "B1.1", "C0.2"]} listC.add("blueberry") // { "id": "C", "seq": 3, "ver": 0, "prev": ["A.2.0", "C.0.2"]} --> A,B // A // { "id": "A", "seq": 0, "ver": 0, "prev": null} // { "id": "A", "seq": 0, "ver": 1, "prev": "A.0.0"} // { "id": "C", "seq": 0, "ver": 0, "prev": null} // { "id": "C", "seq": 0, "ver": 1, "prev": "C.0.0"} // { "id": "C", "seq": 0, "ver": 2, "prev": "C.0.1"} // { "id": "B", "seq": 1, "ver": 0, "prev": ["A.0.0", "C.0.2"]} // { "id": "B", "seq": 1, "ver": 1, "prev": "B.1.0"} // { "id": "A", "seq": 2, "ver": 0, "prev": ["A.0.1", "B1.1", "C0.2"]} // { "id": "C", "seq": 3, "ver": 0, "prev": ["A.2.0", "C.0.2"]}