mirror of
https://github.com/orbitdb/orbitdb.git
synced 2025-10-07 22:57:07 +00:00
199 lines
5.4 KiB
JSON
199 lines
5.4 KiB
JSON
// 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": "<VersionClock>",
|
|
"prev": []
|
|
}
|
|
|
|
"List": {
|
|
"items": ["<Item>"]
|
|
}
|
|
|
|
/*
|
|
list.add(data) {
|
|
this.ver ++;
|
|
const heads = _findHeads();
|
|
const i = new Item(id, this.seq, this.ver, heads)
|
|
outgoing.push(data)
|
|
}
|
|
*/
|
|
|
|
/*
|
|
list.join(other) {
|
|
// increase seq on join, reset version
|
|
if(other.first.seq >= this.seq)
|
|
this.seq = other.first.seq + 1
|
|
this.ver = 0
|
|
|
|
items = items.concat(outgoing.concat(other))
|
|
items = items.sortBy("seq", "id", "ver")
|
|
outgoing = []
|
|
}
|
|
*/
|
|
|
|
/*
|
|
nextHeads() {
|
|
referenced = []
|
|
heads = all.groupBy("id").map((items) => items[items.length - 1])
|
|
cleaned = heads.reverse().filter((e) => !isReferencedInChain(referenced, e))
|
|
return cleaned;
|
|
}
|
|
*/
|
|
|
|
/*
|
|
isReferencedInChain(list, other) {
|
|
const res = other.map((o) => {
|
|
const ref = list.map((e) => !(e.id == o.id && e.seq == o.seq && e.ver == o.ver))
|
|
if(!ref)
|
|
list.push(ref)
|
|
//return false
|
|
|
|
//list.concat(list.filter((e) => !(e.id == o.id && e.seq == o.seq && e.ver == o.ver)))
|
|
if(o.prev)
|
|
ref = isReferencedInChain(list, o.prev)
|
|
|
|
return ref
|
|
})
|
|
return res.anyEqual(true)
|
|
}
|
|
*/
|
|
|
|
|
|
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"]}
|