Files
orbitdb/WIP/MOCK.json
2016-02-22 12:09:22 +02:00

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"]}