@fireproof/core 0.0.5 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -2
- package/src/clock.js +25 -47
- package/src/db-index.js +75 -50
- package/src/fireproof.js +29 -18
- package/src/prolly.js +32 -26
- package/test/clock.test.js +91 -165
- package/test/db-index.test.js +1 -0
- package/test/fireproof.test.js +11 -0
- package/test/fulltext.test.js +66 -0
- package/test/prolly.test.js +14 -27
- package/test/proofs.test.js +53 -0
- package/test/reproduce-fixture-bug.test.js +65 -0
- package/hooks/use-fireproof.md +0 -149
package/test/clock.test.js
CHANGED
@@ -1,19 +1,18 @@
|
|
1
1
|
/* global describe, it */
|
2
2
|
// import { describe, it } from 'mocha'
|
3
3
|
import assert from 'node:assert'
|
4
|
-
import {
|
5
|
-
advance,
|
6
|
-
EventBlock,
|
7
|
-
findCommonAncestorWithSortedEvents,
|
8
|
-
findUnknownSortedEvents,
|
9
|
-
decodeEventBlock,
|
10
|
-
findEventsToSync
|
11
|
-
} from '../src/clock.js'
|
4
|
+
import { advance, EventBlock, decodeEventBlock, findEventsToSync as findEventsWithProofToSync } from '../src/clock.js'
|
12
5
|
// import { vis } from '../src/clock.js'
|
13
6
|
import { Blockstore, seqEventData, setSeq } from './helpers.js'
|
14
7
|
|
8
|
+
const testAdvance = async (blocks, oldHead, event) => {
|
9
|
+
const { head } = await advance(blocks, oldHead, event)
|
10
|
+
return head
|
11
|
+
}
|
12
|
+
|
13
|
+
const testFindEventsToSync = async (blocks, head) => (await findEventsWithProofToSync(blocks, head)).events
|
14
|
+
|
15
15
|
async function visHead (blocks, head) {
|
16
|
-
// const values =
|
17
16
|
head.map(async (cid) => {
|
18
17
|
const block = await blocks.get(cid)
|
19
18
|
return (await decodeEventBlock(block.bytes)).value?.data?.value
|
@@ -24,7 +23,7 @@ async function visHead (blocks, head) {
|
|
24
23
|
async function makeNext (blocks, parent, eventData) {
|
25
24
|
const event = await EventBlock.create(eventData, parent)
|
26
25
|
await blocks.put(event.cid, event.bytes)
|
27
|
-
const head = await
|
26
|
+
const head = await testAdvance(blocks, parent, event.cid)
|
28
27
|
return { event, head }
|
29
28
|
}
|
30
29
|
|
@@ -35,18 +34,14 @@ describe('Clock', () => {
|
|
35
34
|
const event = await EventBlock.create({})
|
36
35
|
|
37
36
|
await blocks.put(event.cid, event.bytes)
|
38
|
-
const head = await
|
37
|
+
const head = await testAdvance(blocks, [], event.cid)
|
39
38
|
|
40
39
|
// for await (const line of vis(blocks, head)) console.log(line)
|
41
40
|
assert.equal(head.length, 1)
|
42
41
|
assert.equal(head[0].toString(), event.cid.toString())
|
43
42
|
|
44
43
|
const sinceHead = head
|
45
|
-
const toSync = await
|
46
|
-
blocks,
|
47
|
-
sinceHead,
|
48
|
-
await findCommonAncestorWithSortedEvents(blocks, sinceHead)
|
49
|
-
)
|
44
|
+
const toSync = await testFindEventsToSync(blocks, sinceHead)
|
50
45
|
assert.equal(toSync.length, 0)
|
51
46
|
})
|
52
47
|
|
@@ -70,7 +65,7 @@ describe('Clock', () => {
|
|
70
65
|
assert.equal(head1.length, 1)
|
71
66
|
assert.equal(head1[0].toString(), event1.cid.toString())
|
72
67
|
|
73
|
-
const toSync1 = await
|
68
|
+
const toSync1 = await testFindEventsToSync(blocks, head1)
|
74
69
|
|
75
70
|
assert.equal(toSync1.length, 0)
|
76
71
|
|
@@ -82,10 +77,10 @@ describe('Clock', () => {
|
|
82
77
|
assert.equal(head2.length, 1)
|
83
78
|
assert.equal(head2[0].toString(), event2.cid.toString())
|
84
79
|
|
85
|
-
const toSync2 = await
|
80
|
+
const toSync2 = await testFindEventsToSync(blocks, head2)
|
86
81
|
assert.equal(toSync2.length, 0)
|
87
82
|
|
88
|
-
const toSync1b = await
|
83
|
+
const toSync1b = await testFindEventsToSync(blocks, [...head2, ...head0])
|
89
84
|
|
90
85
|
assert.equal(toSync1b.length, 2)
|
91
86
|
assert.equal(toSync1b[0].value.data.value, 'event1bob')
|
@@ -100,13 +95,13 @@ describe('Clock', () => {
|
|
100
95
|
assert.equal(head3.length, 1)
|
101
96
|
assert.equal(head3[0].toString(), event3.cid.toString())
|
102
97
|
|
103
|
-
const toSync3 = await
|
98
|
+
const toSync3 = await testFindEventsToSync(blocks, [...head3, ...head0])
|
104
99
|
assert.equal(toSync3.length, 3)
|
105
100
|
assert.equal(toSync3[0].value.data.value, 'event1bob')
|
106
101
|
assert.equal(toSync3[1].value.data.value, 'event2carol')
|
107
102
|
assert.equal(toSync3[2].value.data.value, 'event3dave')
|
108
103
|
|
109
|
-
const toSync3B = await
|
104
|
+
const toSync3B = await testFindEventsToSync(blocks, [...head3, ...head1])
|
110
105
|
assert.equal(toSync3B.length, 2)
|
111
106
|
assert.equal(toSync3B[0].value.data.value, 'event2carol')
|
112
107
|
assert.equal(toSync3B[1].value.data.value, 'event3dave')
|
@@ -119,28 +114,28 @@ describe('Clock', () => {
|
|
119
114
|
assert.equal(head4.length, 1)
|
120
115
|
assert.equal(head4[0].toString(), event4.cid.toString())
|
121
116
|
|
122
|
-
const toSync4 = await
|
117
|
+
const toSync4 = await testFindEventsToSync(blocks, [...head4, ...head0])
|
123
118
|
assert.equal(toSync4.length, 4)
|
124
119
|
assert.equal(toSync4[0].value.data.value, 'event1bob')
|
125
120
|
assert.equal(toSync4[1].value.data.value, 'event2carol')
|
126
121
|
assert.equal(toSync4[2].value.data.value, 'event3dave')
|
127
122
|
assert.equal(toSync4[3].value.data.value, 'event4eve')
|
128
123
|
|
129
|
-
const toSync4B = await
|
124
|
+
const toSync4B = await testFindEventsToSync(blocks, [...head4, ...head1])
|
130
125
|
|
131
126
|
assert.equal(toSync4B.length, 3)
|
132
127
|
assert.equal(toSync4B[0].value.data.value, 'event2carol')
|
133
128
|
assert.equal(toSync4B[1].value.data.value, 'event3dave')
|
134
129
|
assert.equal(toSync4B[2].value.data.value, 'event4eve')
|
135
130
|
|
136
|
-
const toSync4C = await
|
131
|
+
const toSync4C = await testFindEventsToSync(blocks, [...head4, ...head2])
|
137
132
|
|
138
133
|
assert.equal(toSync4C.length, 2)
|
139
134
|
assert.equal(toSync4C[0].value.data.value, 'event3dave')
|
140
135
|
assert.equal(toSync4C[1].value.data.value, 'event4eve')
|
141
136
|
|
142
137
|
// don't ask if you already know
|
143
|
-
// const toSync4D = await
|
138
|
+
// const toSync4D = await testFindEventsToSync(blocks, [...head4, ...head3])
|
144
139
|
// assert.equal(toSync4D.length, 0)
|
145
140
|
|
146
141
|
/*
|
@@ -150,7 +145,7 @@ describe('Clock', () => {
|
|
150
145
|
|
151
146
|
assert.equal(head5.length, 1)
|
152
147
|
assert.equal(head5[0].toString(), event5.cid.toString())
|
153
|
-
const toSync5 = await
|
148
|
+
const toSync5 = await testFindEventsToSync(blocks, [...head5, ...head0])
|
154
149
|
assert.equal(toSync5.length, 5)
|
155
150
|
assert.equal(toSync5[0].value.data.value, 'event1bob')
|
156
151
|
assert.equal(toSync5[1].value.data.value, 'event2carol')
|
@@ -158,7 +153,7 @@ describe('Clock', () => {
|
|
158
153
|
assert.equal(toSync5[3].value.data.value, 'event4eve')
|
159
154
|
assert.equal(toSync5[4].value.data.value, 'event5frank')
|
160
155
|
|
161
|
-
const toSync5B = await
|
156
|
+
const toSync5B = await testFindEventsToSync(blocks, [...head5, ...head1])
|
162
157
|
|
163
158
|
assert.equal(toSync5B.length, 4)
|
164
159
|
assert.equal(toSync5B[0].value.data.value, 'event2carol')
|
@@ -166,18 +161,18 @@ describe('Clock', () => {
|
|
166
161
|
assert.equal(toSync5B[2].value.data.value, 'event4eve')
|
167
162
|
assert.equal(toSync5B[3].value.data.value, 'event5frank')
|
168
163
|
|
169
|
-
const toSync5C = await
|
164
|
+
const toSync5C = await testFindEventsToSync(blocks, [...head5, ...head2])
|
170
165
|
assert(toSync5C.length > 0, 'should have 3 events, has ' + toSync5C.length)
|
171
166
|
assert.equal(toSync5C[0].value.data.value, 'event3dave')
|
172
167
|
assert.equal(toSync5C[1].value.data.value, 'event4eve')
|
173
168
|
assert.equal(toSync5C[2].value.data.value, 'event5frank')
|
174
169
|
|
175
|
-
const toSync5D = await
|
170
|
+
const toSync5D = await testFindEventsToSync(blocks, [...head5, ...head3])
|
176
171
|
assert.equal(toSync5D.length, 2) // 4
|
177
172
|
assert.equal(toSync5D[0].value.data.value, 'event4eve')
|
178
173
|
assert.equal(toSync5D[1].value.data.value, 'event5frank')
|
179
174
|
|
180
|
-
const toSync5E = await
|
175
|
+
const toSync5E = await testFindEventsToSync(blocks, [...head5, ...head4])
|
181
176
|
assert.equal(toSync5E.length, 1) // 5
|
182
177
|
assert.equal(toSync5E[0].value.data.value, 'event5frank')
|
183
178
|
|
@@ -189,7 +184,7 @@ describe('Clock', () => {
|
|
189
184
|
assert.equal(head6.length, 1)
|
190
185
|
assert.equal(head6[0].toString(), event6.cid.toString())
|
191
186
|
|
192
|
-
const toSync6 = await
|
187
|
+
const toSync6 = await testFindEventsToSync(blocks, [...head6, ...head0])
|
193
188
|
assert.equal(toSync6.length, 6) // 1
|
194
189
|
assert.equal(toSync6[0].value.data.value, 'event1bob')
|
195
190
|
assert.equal(toSync6[1].value.data.value, 'event2carol')
|
@@ -198,7 +193,7 @@ describe('Clock', () => {
|
|
198
193
|
assert.equal(toSync6[4].value.data.value, 'event5frank')
|
199
194
|
assert.equal(toSync6[5].value.data.value, 'event6grace')
|
200
195
|
|
201
|
-
const toSync6B = await
|
196
|
+
const toSync6B = await testFindEventsToSync(blocks, [...head6, ...head1])
|
202
197
|
assert.equal(toSync6B.length, 5) // 2
|
203
198
|
assert.equal(toSync6B[0].value.data.value, 'event2carol')
|
204
199
|
assert.equal(toSync6B[1].value.data.value, 'event3dave')
|
@@ -206,25 +201,25 @@ describe('Clock', () => {
|
|
206
201
|
assert.equal(toSync6B[3].value.data.value, 'event5frank')
|
207
202
|
assert.equal(toSync6B[4].value.data.value, 'event6grace')
|
208
203
|
|
209
|
-
const toSync6C = await
|
204
|
+
const toSync6C = await testFindEventsToSync(blocks, [...head6, ...head2])
|
210
205
|
assert.equal(toSync6C.length, 4) // 3
|
211
206
|
assert.equal(toSync6C[0].value.data.value, 'event3dave')
|
212
207
|
assert.equal(toSync6C[1].value.data.value, 'event4eve')
|
213
208
|
assert.equal(toSync6C[2].value.data.value, 'event5frank')
|
214
209
|
assert.equal(toSync6C[3].value.data.value, 'event6grace')
|
215
210
|
|
216
|
-
const toSync6D = await
|
211
|
+
const toSync6D = await testFindEventsToSync(blocks, [...head6, ...head3])
|
217
212
|
assert.equal(toSync6D.length, 3) // 4
|
218
213
|
assert.equal(toSync6D[0].value.data.value, 'event4eve')
|
219
214
|
assert.equal(toSync6D[1].value.data.value, 'event5frank')
|
220
215
|
assert.equal(toSync6D[2].value.data.value, 'event6grace')
|
221
216
|
|
222
|
-
const toSync6E = await
|
217
|
+
const toSync6E = await testFindEventsToSync(blocks, [...head6, ...head4])
|
223
218
|
assert.equal(toSync6E.length, 2) // 5
|
224
219
|
assert.equal(toSync6E[0].value.data.value, 'event5frank')
|
225
220
|
assert.equal(toSync6E[1].value.data.value, 'event6grace')
|
226
221
|
|
227
|
-
const toSync6F = await
|
222
|
+
const toSync6F = await testFindEventsToSync(blocks, [...head6, ...head5])
|
228
223
|
assert.equal(toSync6F.length, 1)
|
229
224
|
assert.equal(toSync6F[0].value.data.value, 'event6grace')
|
230
225
|
|
@@ -236,7 +231,7 @@ describe('Clock', () => {
|
|
236
231
|
assert.equal(head7.length, 1)
|
237
232
|
assert.equal(head7[0].toString(), event7.cid.toString())
|
238
233
|
|
239
|
-
const toSync7 = await
|
234
|
+
const toSync7 = await testFindEventsToSync(blocks, [...head7, ...head0])
|
240
235
|
assert.equal(toSync7.length, 7)
|
241
236
|
assert.equal(toSync7[0].value.data.value, 'event1bob')
|
242
237
|
assert.equal(toSync7[1].value.data.value, 'event2carol')
|
@@ -246,7 +241,7 @@ describe('Clock', () => {
|
|
246
241
|
assert.equal(toSync7[5].value.data.value, 'event6grace')
|
247
242
|
assert.equal(toSync7[6].value.data.value, 'event7holly')
|
248
243
|
|
249
|
-
const toSync7B = await
|
244
|
+
const toSync7B = await testFindEventsToSync(blocks, [...head7, ...head1])
|
250
245
|
assert.equal(toSync7B.length, 6)
|
251
246
|
assert.equal(toSync7B[0].value.data.value, 'event2carol')
|
252
247
|
assert.equal(toSync7B[1].value.data.value, 'event3dave')
|
@@ -254,7 +249,7 @@ describe('Clock', () => {
|
|
254
249
|
assert.equal(toSync7B[3].value.data.value, 'event5frank')
|
255
250
|
assert.equal(toSync7B[4].value.data.value, 'event6grace')
|
256
251
|
|
257
|
-
const toSync7C = await
|
252
|
+
const toSync7C = await testFindEventsToSync(blocks, [...head7, ...head2])
|
258
253
|
assert.equal(toSync7C.length, 5)
|
259
254
|
assert.equal(toSync7C[0].value.data.value, 'event3dave')
|
260
255
|
assert.equal(toSync7C[1].value.data.value, 'event4eve')
|
@@ -262,20 +257,20 @@ describe('Clock', () => {
|
|
262
257
|
assert.equal(toSync7C[3].value.data.value, 'event6grace')
|
263
258
|
assert.equal(toSync7C[4].value.data.value, 'event7holly')
|
264
259
|
|
265
|
-
const toSync7D = await
|
260
|
+
const toSync7D = await testFindEventsToSync(blocks, [...head7, ...head3])
|
266
261
|
assert.equal(toSync7D.length, 4)
|
267
262
|
assert.equal(toSync7D[0].value.data.value, 'event4eve')
|
268
263
|
assert.equal(toSync7D[1].value.data.value, 'event5frank')
|
269
264
|
assert.equal(toSync7D[2].value.data.value, 'event6grace')
|
270
265
|
assert.equal(toSync7D[3].value.data.value, 'event7holly')
|
271
266
|
|
272
|
-
const toSync7E = await
|
267
|
+
const toSync7E = await testFindEventsToSync(blocks, [...head7, ...head4])
|
273
268
|
assert.equal(toSync7E.length, 3)
|
274
269
|
assert.equal(toSync7E[0].value.data.value, 'event5frank')
|
275
270
|
assert.equal(toSync7E[1].value.data.value, 'event6grace')
|
276
271
|
assert.equal(toSync7E[2].value.data.value, 'event7holly')
|
277
272
|
|
278
|
-
const toSync7F = await
|
273
|
+
const toSync7F = await testFindEventsToSync(blocks, [...head7, ...head5])
|
279
274
|
assert.equal(toSync7F.length, 2)
|
280
275
|
assert.equal(toSync7F[0].value.data.value, 'event6grace')
|
281
276
|
assert.equal(toSync7F[1].value.data.value, 'event7holly')
|
@@ -288,7 +283,7 @@ describe('Clock', () => {
|
|
288
283
|
assert.equal(head8.length, 1)
|
289
284
|
assert.equal(head8[0].toString(), event8.cid.toString())
|
290
285
|
|
291
|
-
const toSync8 = await
|
286
|
+
const toSync8 = await testFindEventsToSync(blocks, [...head8, ...head0])
|
292
287
|
assert.equal(toSync8.length, 8)
|
293
288
|
assert.equal(toSync8[0].value.data.value, 'event1bob')
|
294
289
|
assert.equal(toSync8[1].value.data.value, 'event2carol')
|
@@ -299,7 +294,7 @@ describe('Clock', () => {
|
|
299
294
|
assert.equal(toSync8[6].value.data.value, 'event7holly')
|
300
295
|
assert.equal(toSync8[7].value.data.value, 'event8isaac')
|
301
296
|
|
302
|
-
const toSync8B = await
|
297
|
+
const toSync8B = await testFindEventsToSync(blocks, [...head8, ...head1])
|
303
298
|
assert.equal(toSync8B.length, 7)
|
304
299
|
assert.equal(toSync8B[0].value.data.value, 'event2carol')
|
305
300
|
assert.equal(toSync8B[1].value.data.value, 'event3dave')
|
@@ -309,7 +304,7 @@ describe('Clock', () => {
|
|
309
304
|
assert.equal(toSync8B[5].value.data.value, 'event7holly')
|
310
305
|
assert.equal(toSync8B[6].value.data.value, 'event8isaac')
|
311
306
|
|
312
|
-
const toSync8C = await
|
307
|
+
const toSync8C = await testFindEventsToSync(blocks, [...head8, ...head2])
|
313
308
|
assert.equal(toSync8C.length, 6) // 3
|
314
309
|
assert.equal(toSync8C[0].value.data.value, 'event3dave')
|
315
310
|
assert.equal(toSync8C[1].value.data.value, 'event4eve')
|
@@ -318,7 +313,7 @@ describe('Clock', () => {
|
|
318
313
|
assert.equal(toSync8C[4].value.data.value, 'event7holly')
|
319
314
|
assert.equal(toSync8C[5].value.data.value, 'event8isaac')
|
320
315
|
|
321
|
-
const toSync8D = await
|
316
|
+
const toSync8D = await testFindEventsToSync(blocks, [...head8, ...head3])
|
322
317
|
assert.equal(toSync8D.length, 5) // 4
|
323
318
|
assert.equal(toSync8D[0].value.data.value, 'event4eve')
|
324
319
|
assert.equal(toSync8D[1].value.data.value, 'event5frank')
|
@@ -326,14 +321,14 @@ describe('Clock', () => {
|
|
326
321
|
assert.equal(toSync8D[3].value.data.value, 'event7holly')
|
327
322
|
assert.equal(toSync8D[4].value.data.value, 'event8isaac')
|
328
323
|
|
329
|
-
const toSync8E = await
|
324
|
+
const toSync8E = await testFindEventsToSync(blocks, [...head8, ...head4])
|
330
325
|
assert.equal(toSync8E.length, 4) // 5
|
331
326
|
assert.equal(toSync8E[0].value.data.value, 'event5frank')
|
332
327
|
assert.equal(toSync8E[1].value.data.value, 'event6grace')
|
333
328
|
assert.equal(toSync8E[2].value.data.value, 'event7holly')
|
334
329
|
assert.equal(toSync8E[3].value.data.value, 'event8isaac')
|
335
330
|
|
336
|
-
const toSync8F = await
|
331
|
+
const toSync8F = await testFindEventsToSync(blocks, [...head8, ...head5])
|
337
332
|
assert.equal(toSync8F.length, 3) // 6
|
338
333
|
assert.equal(toSync8F[0].value.data.value, 'event6grace')
|
339
334
|
assert.equal(toSync8F[1].value.data.value, 'event7holly')
|
@@ -347,7 +342,7 @@ describe('Clock', () => {
|
|
347
342
|
assert.equal(head9.length, 1)
|
348
343
|
assert.equal(head9[0].toString(), event9.cid.toString())
|
349
344
|
|
350
|
-
const toSync9 = await
|
345
|
+
const toSync9 = await testFindEventsToSync(blocks, [...head9, ...head0])
|
351
346
|
assert.equal(toSync9.length, 9)
|
352
347
|
assert.equal(toSync9[0].value.data.value, 'event1bob')
|
353
348
|
assert.equal(toSync9[1].value.data.value, 'event2carol')
|
@@ -359,7 +354,7 @@ describe('Clock', () => {
|
|
359
354
|
assert.equal(toSync9[7].value.data.value, 'event8isaac')
|
360
355
|
assert.equal(toSync9[8].value.data.value, 'event9jen')
|
361
356
|
|
362
|
-
const toSync9B = await
|
357
|
+
const toSync9B = await testFindEventsToSync(blocks, [...head9, ...head1])
|
363
358
|
assert.equal(toSync9B.length, 8)
|
364
359
|
assert.equal(toSync9B[0].value.data.value, 'event2carol')
|
365
360
|
assert.equal(toSync9B[1].value.data.value, 'event3dave')
|
@@ -370,7 +365,7 @@ describe('Clock', () => {
|
|
370
365
|
assert.equal(toSync9B[6].value.data.value, 'event8isaac')
|
371
366
|
assert.equal(toSync9B[7].value.data.value, 'event9jen')
|
372
367
|
|
373
|
-
const toSync9C = await
|
368
|
+
const toSync9C = await testFindEventsToSync(blocks, [...head9, ...head2])
|
374
369
|
assert.equal(toSync9C.length, 7)
|
375
370
|
assert.equal(toSync9C[0].value.data.value, 'event3dave')
|
376
371
|
assert.equal(toSync9C[1].value.data.value, 'event4eve')
|
@@ -380,7 +375,7 @@ describe('Clock', () => {
|
|
380
375
|
assert.equal(toSync9C[5].value.data.value, 'event8isaac')
|
381
376
|
assert.equal(toSync9C[6].value.data.value, 'event9jen')
|
382
377
|
|
383
|
-
const toSync9D = await
|
378
|
+
const toSync9D = await testFindEventsToSync(blocks, [...head9, ...head3])
|
384
379
|
assert.equal(toSync9D.length, 6)
|
385
380
|
assert.equal(toSync9D[0].value.data.value, 'event4eve')
|
386
381
|
assert.equal(toSync9D[1].value.data.value, 'event5frank')
|
@@ -389,7 +384,7 @@ describe('Clock', () => {
|
|
389
384
|
assert.equal(toSync9D[4].value.data.value, 'event8isaac')
|
390
385
|
assert.equal(toSync9D[5].value.data.value, 'event9jen')
|
391
386
|
|
392
|
-
const toSync9E = await
|
387
|
+
const toSync9E = await testFindEventsToSync(blocks, [...head9, ...head4])
|
393
388
|
assert.equal(toSync9E.length, 5)
|
394
389
|
assert.equal(toSync9E[0].value.data.value, 'event5frank')
|
395
390
|
assert.equal(toSync9E[1].value.data.value, 'event6grace')
|
@@ -407,7 +402,7 @@ describe('Clock', () => {
|
|
407
402
|
await blocks.put(root.cid, root.bytes)
|
408
403
|
|
409
404
|
/** @type {import('../src/clock').EventLink<any>[]} */
|
410
|
-
let head = await
|
405
|
+
let head = await testAdvance(blocks, [], root.cid)
|
411
406
|
assert.equal(head.length, 1)
|
412
407
|
assert.equal(head[0], root.cid)
|
413
408
|
|
@@ -416,12 +411,12 @@ describe('Clock', () => {
|
|
416
411
|
const event0 = await EventBlock.create(seqEventData(), parents)
|
417
412
|
await blocks.put(event0.cid, event0.bytes)
|
418
413
|
|
419
|
-
head = await
|
414
|
+
head = await testAdvance(blocks, parents, event0.cid)
|
420
415
|
const head0 = head
|
421
416
|
|
422
417
|
const event1 = await EventBlock.create(seqEventData(), parents)
|
423
418
|
await blocks.put(event1.cid, event1.bytes)
|
424
|
-
head = await
|
419
|
+
head = await testAdvance(blocks, head, event1.cid)
|
425
420
|
const head1 = head
|
426
421
|
|
427
422
|
// for await (const line of vis(blocks, head)) console.log(line)
|
@@ -430,36 +425,24 @@ describe('Clock', () => {
|
|
430
425
|
assert.equal(head[1].toString(), event1.cid.toString())
|
431
426
|
|
432
427
|
let sinceHead = head1
|
433
|
-
let toSync = await
|
434
|
-
blocks,
|
435
|
-
sinceHead,
|
436
|
-
await findCommonAncestorWithSortedEvents(blocks, sinceHead)
|
437
|
-
)
|
428
|
+
let toSync = await testFindEventsToSync(blocks, sinceHead)
|
438
429
|
// assert.equal(toSync.length, 1) // 0
|
439
430
|
// assert.equal(toSync[0].cid.toString(), event0.cid.toString())
|
440
431
|
|
441
432
|
const event2 = await EventBlock.create(seqEventData(), head1)
|
442
433
|
await blocks.put(event2.cid, event2.bytes)
|
443
|
-
head = await
|
434
|
+
head = await testAdvance(blocks, head, event2.cid)
|
444
435
|
const head2 = head
|
445
436
|
|
446
437
|
assert.equal(head.length, 1)
|
447
438
|
|
448
439
|
sinceHead = head2
|
449
|
-
toSync = await
|
450
|
-
blocks,
|
451
|
-
sinceHead,
|
452
|
-
await findCommonAncestorWithSortedEvents(blocks, sinceHead)
|
453
|
-
)
|
440
|
+
toSync = await testFindEventsToSync(blocks, sinceHead)
|
454
441
|
assert.equal(toSync.length, 0)
|
455
442
|
|
456
443
|
// todo do these since heads make sense?
|
457
444
|
sinceHead = [...head0, ...head2]
|
458
|
-
toSync = await
|
459
|
-
blocks,
|
460
|
-
sinceHead,
|
461
|
-
await findCommonAncestorWithSortedEvents(blocks, sinceHead)
|
462
|
-
)
|
445
|
+
toSync = await testFindEventsToSync(blocks, sinceHead)
|
463
446
|
// console.log('need', toSync.map(b => b.value.data))
|
464
447
|
// assert.equal(toSync.length, 2) // 0
|
465
448
|
// assert.equal(toSync[0].cid.toString(), event1.cid.toString())
|
@@ -477,36 +460,30 @@ describe('Clock', () => {
|
|
477
460
|
|
478
461
|
const event0 = await EventBlock.create(seqEventData(), parents0)
|
479
462
|
await blocks.put(event0.cid, event0.bytes)
|
480
|
-
head = await
|
463
|
+
head = await testAdvance(blocks, head, event0.cid)
|
481
464
|
|
482
465
|
const event1 = await EventBlock.create(seqEventData(), parents0)
|
483
466
|
await blocks.put(event1.cid, event1.bytes)
|
484
|
-
head = await
|
467
|
+
head = await testAdvance(blocks, head, event1.cid)
|
485
468
|
|
486
469
|
const event2 = await EventBlock.create(seqEventData(), parents0)
|
487
470
|
await blocks.put(event2.cid, event2.bytes)
|
488
|
-
head = await
|
471
|
+
head = await testAdvance(blocks, head, event2.cid)
|
489
472
|
|
490
473
|
const event3 = await EventBlock.create(seqEventData(), [event0.cid, event1.cid])
|
491
474
|
await blocks.put(event3.cid, event3.bytes)
|
492
|
-
head = await
|
475
|
+
head = await testAdvance(blocks, head, event3.cid)
|
493
476
|
// const parentz = head
|
494
477
|
|
495
478
|
const event4 = await EventBlock.create(seqEventData(), [event2.cid])
|
496
479
|
await blocks.put(event4.cid, event4.bytes)
|
497
|
-
head = await
|
480
|
+
head = await testAdvance(blocks, head, event4.cid)
|
498
481
|
|
499
482
|
// console.log('add two events with some shared parents')
|
500
483
|
// for await (const line of vis(blocks, head)) console.log(line)
|
501
484
|
assert.equal(head.length, 2)
|
502
485
|
assert.equal(head[0].toString(), event3.cid.toString())
|
503
486
|
assert.equal(head[1].toString(), event4.cid.toString())
|
504
|
-
// console.log('since', parentz)
|
505
|
-
// for await (const block of since(blocks, parentz)) {
|
506
|
-
// if (block?.value) console.log(block.value.data)
|
507
|
-
// }
|
508
|
-
// const { ancestor, sorted } = await findCommonAncestorWithSortedEvents(blocks, parentz)
|
509
|
-
// console.log('findCommonAncestorWithSortedEvents', ancestor, sorted.map(b => b.value.data))
|
510
487
|
})
|
511
488
|
|
512
489
|
it('converge when multi-root', async () => {
|
@@ -521,63 +498,63 @@ describe('Clock', () => {
|
|
521
498
|
|
522
499
|
const event0 = await EventBlock.create(seqEventData(), parents0)
|
523
500
|
await blocks.put(event0.cid, event0.bytes)
|
524
|
-
head = await
|
501
|
+
head = await testAdvance(blocks, head, event0.cid)
|
525
502
|
|
526
503
|
const event1 = await EventBlock.create(seqEventData(), parents0)
|
527
504
|
await blocks.put(event1.cid, event1.bytes)
|
528
|
-
head = await
|
505
|
+
head = await testAdvance(blocks, head, event1.cid)
|
529
506
|
|
530
507
|
const event1head = head
|
531
508
|
|
532
509
|
const event2 = await EventBlock.create(seqEventData(), event1head)
|
533
510
|
await blocks.put(event2.cid, event2.bytes)
|
534
|
-
head = await
|
511
|
+
head = await testAdvance(blocks, head, event2.cid)
|
535
512
|
|
536
513
|
const event3 = await EventBlock.create(seqEventData(), event1head)
|
537
514
|
await blocks.put(event3.cid, event3.bytes)
|
538
|
-
head = await
|
515
|
+
head = await testAdvance(blocks, head, event3.cid)
|
539
516
|
|
540
517
|
const event3head = head
|
541
518
|
|
542
519
|
const event4 = await EventBlock.create(seqEventData(), event1head)
|
543
520
|
await blocks.put(event4.cid, event4.bytes)
|
544
|
-
head = await
|
521
|
+
head = await testAdvance(blocks, head, event4.cid)
|
545
522
|
const event4head = head
|
546
523
|
await visHead(blocks, event4head)
|
547
524
|
|
548
525
|
const event5 = await EventBlock.create(seqEventData(), event3head)
|
549
526
|
await blocks.put(event5.cid, event5.bytes)
|
550
|
-
head = await
|
527
|
+
head = await testAdvance(blocks, head, event5.cid)
|
551
528
|
const event5head = head
|
552
529
|
await visHead(blocks, event5head)
|
553
530
|
|
554
531
|
const event6 = await EventBlock.create(seqEventData(), event5head)
|
555
532
|
await blocks.put(event6.cid, event6.bytes)
|
556
|
-
head = await
|
533
|
+
head = await testAdvance(blocks, head, event6.cid)
|
557
534
|
const event6head = head
|
558
535
|
await visHead(blocks, event6head)
|
559
536
|
|
560
537
|
const event7 = await EventBlock.create(seqEventData(), event6head)
|
561
538
|
await blocks.put(event7.cid, event7.bytes)
|
562
|
-
head = await
|
539
|
+
head = await testAdvance(blocks, head, event7.cid)
|
563
540
|
const event7head = head
|
564
541
|
await visHead(blocks, event7head)
|
565
542
|
|
566
543
|
const event8 = await EventBlock.create(seqEventData(), event7head)
|
567
544
|
await blocks.put(event8.cid, event8.bytes)
|
568
|
-
head = await
|
545
|
+
head = await testAdvance(blocks, head, event8.cid)
|
569
546
|
const event8head = head
|
570
547
|
await visHead(blocks, event8head)
|
571
548
|
|
572
549
|
const event9 = await EventBlock.create(seqEventData(), event7head)
|
573
550
|
await blocks.put(event9.cid, event9.bytes)
|
574
|
-
head = await
|
551
|
+
head = await testAdvance(blocks, head, event9.cid)
|
575
552
|
const event9head = head
|
576
553
|
await visHead(blocks, event9head)
|
577
554
|
|
578
555
|
const event10 = await EventBlock.create(seqEventData(), event9head)
|
579
556
|
await blocks.put(event10.cid, event10.bytes)
|
580
|
-
head = await
|
557
|
+
head = await testAdvance(blocks, head, event10.cid)
|
581
558
|
const event10head = head
|
582
559
|
await visHead(blocks, event10head)
|
583
560
|
|
@@ -587,26 +564,7 @@ describe('Clock', () => {
|
|
587
564
|
assert.equal(event10head.length, 1)
|
588
565
|
assert.equal(event10head[0].toString(), event10.cid.toString())
|
589
566
|
|
590
|
-
|
591
|
-
// const { ancestor, sorted } = await findCommonAncestorWithSortedEvents(blocks, [event5.cid, event2.cid])
|
592
|
-
// const toSync = await findUnknownSortedEvents(blocks, [event5.cid, event2.cid], { ancestor, sorted })
|
593
|
-
// assert.equal(toSync.length, 0)
|
594
|
-
// assert.equal(toSync[0].value.data.value, 'event3')
|
595
|
-
// assert.equal(toSync[1].value.data.value, 'event5')
|
596
|
-
|
597
|
-
// todo do these roots make sense?
|
598
|
-
// const ancestorWithSorted = await findCommonAncestorWithSortedEvents(blocks, [event6.cid, event2.cid])
|
599
|
-
// const toSync2 = await findUnknownSortedEvents(blocks, [event6.cid, event2.cid], ancestorWithSorted)
|
600
|
-
// assert.equal(toSync2.length, 0)
|
601
|
-
|
602
|
-
// assert.equal(toSync2[0].value.data.value, 'event3')
|
603
|
-
// assert.equal(toSync2[1].value.data.value, 'event5')
|
604
|
-
// assert.equal(toSync2[2].value.data.value, 'event4')
|
605
|
-
// assert.equal(toSync2[3].value.data.value, 'event6')
|
606
|
-
// const ancestorBlock = await blocks.get(ancestor)
|
607
|
-
// const ancestorDecoded = await decodeEventBlock(ancestorBlock.bytes)
|
608
|
-
const ancestorWithSorted2 = await findCommonAncestorWithSortedEvents(blocks, [event7.cid, event10.cid])
|
609
|
-
const toSync3 = await findUnknownSortedEvents(blocks, [event7.cid, event10.cid], ancestorWithSorted2)
|
567
|
+
const toSync3 = await testFindEventsToSync(blocks, [event7.cid, event10.cid])
|
610
568
|
assert.equal(toSync3[0].value.data.value, 'event9')
|
611
569
|
assert.equal(toSync3[1].value.data.value, 'event8')
|
612
570
|
assert.equal(toSync3[2].value.data.value, 'event10')
|
@@ -623,36 +581,36 @@ describe('Clock', () => {
|
|
623
581
|
|
624
582
|
const event0 = await EventBlock.create(seqEventData(), parents0)
|
625
583
|
await blocks.put(event0.cid, event0.bytes)
|
626
|
-
head = await
|
584
|
+
head = await testAdvance(blocks, head, event0.cid)
|
627
585
|
|
628
586
|
const event1 = await EventBlock.create(seqEventData(), parents0)
|
629
587
|
await blocks.put(event1.cid, event1.bytes)
|
630
|
-
head = await
|
588
|
+
head = await testAdvance(blocks, head, event1.cid)
|
631
589
|
|
632
590
|
const event1head = head
|
633
591
|
|
634
592
|
const event2 = await EventBlock.create(seqEventData(), event1head)
|
635
593
|
await blocks.put(event2.cid, event2.bytes)
|
636
|
-
head = await
|
594
|
+
head = await testAdvance(blocks, head, event2.cid)
|
637
595
|
|
638
596
|
const event3 = await EventBlock.create(seqEventData(), event1head)
|
639
597
|
await blocks.put(event3.cid, event3.bytes)
|
640
|
-
head = await
|
598
|
+
head = await testAdvance(blocks, head, event3.cid)
|
641
599
|
|
642
600
|
const event4 = await EventBlock.create(seqEventData(), event1head)
|
643
601
|
await blocks.put(event4.cid, event4.bytes)
|
644
|
-
head = await
|
602
|
+
head = await testAdvance(blocks, head, event4.cid)
|
645
603
|
|
646
604
|
const parents2 = head
|
647
605
|
|
648
606
|
const event5 = await EventBlock.create(seqEventData(), parents2)
|
649
607
|
await blocks.put(event5.cid, event5.bytes)
|
650
|
-
head = await
|
608
|
+
head = await testAdvance(blocks, head, event5.cid)
|
651
609
|
|
652
610
|
// now very old one
|
653
611
|
const event6 = await EventBlock.create(seqEventData(), parents0)
|
654
612
|
await blocks.put(event6.cid, event6.bytes)
|
655
|
-
head = await
|
613
|
+
head = await testAdvance(blocks, head, event6.cid)
|
656
614
|
|
657
615
|
// for await (const line of vis(blocks, head)) console.log(line)
|
658
616
|
assert.equal(head.length, 2)
|
@@ -675,7 +633,7 @@ describe('Clock', () => {
|
|
675
633
|
const event1 = await EventBlock.create(seqEventData(), [event0.cid])
|
676
634
|
await blocks.put(event1.cid, event1.bytes)
|
677
635
|
|
678
|
-
head = await
|
636
|
+
head = await testAdvance(blocks, head, event1.cid)
|
679
637
|
|
680
638
|
// for await (const line of vis(blocks, head)) console.log(line)
|
681
639
|
assert.equal(head.length, 1)
|
@@ -688,15 +646,11 @@ describe('Clock', () => {
|
|
688
646
|
// alice
|
689
647
|
const root = await EventBlock.create(seqEventData('alice'))
|
690
648
|
await blocks.put(root.cid, root.bytes)
|
691
|
-
let head = await
|
649
|
+
let head = await testAdvance(blocks, [], root.cid)
|
692
650
|
const roothead = head
|
693
651
|
// db root
|
694
652
|
let sinceHead = [...roothead]
|
695
|
-
let toSync = await
|
696
|
-
blocks,
|
697
|
-
sinceHead,
|
698
|
-
await findCommonAncestorWithSortedEvents(blocks, sinceHead)
|
699
|
-
)
|
653
|
+
let toSync = await testFindEventsToSync(blocks, sinceHead)
|
700
654
|
assert.equal(toSync.length, 0) // we use all docs for first query in Fireproof
|
701
655
|
|
702
656
|
// create bob
|
@@ -704,70 +658,42 @@ describe('Clock', () => {
|
|
704
658
|
await blocks.put(event0.cid, event0.bytes)
|
705
659
|
// console.log('new event0', event0.cid)
|
706
660
|
|
707
|
-
head = await
|
661
|
+
head = await testAdvance(blocks, head, event0.cid)
|
708
662
|
|
709
663
|
const event0head = head
|
710
664
|
sinceHead = event0head
|
711
|
-
toSync = await
|
712
|
-
blocks,
|
713
|
-
sinceHead,
|
714
|
-
await findCommonAncestorWithSortedEvents(blocks, sinceHead)
|
715
|
-
)
|
665
|
+
toSync = await testFindEventsToSync(blocks, sinceHead)
|
716
666
|
assert.equal(toSync.length, 0)
|
717
667
|
|
718
668
|
sinceHead = [...roothead, ...event0head]
|
719
|
-
toSync = await
|
720
|
-
blocks,
|
721
|
-
sinceHead,
|
722
|
-
await findCommonAncestorWithSortedEvents(blocks, sinceHead)
|
723
|
-
)
|
669
|
+
toSync = await testFindEventsToSync(blocks, sinceHead)
|
724
670
|
assert.equal(toSync.length, 1)
|
725
671
|
|
726
672
|
// create carol
|
727
673
|
const event1 = await EventBlock.create(seqEventData('carol'), head)
|
728
674
|
await blocks.put(event1.cid, event1.bytes)
|
729
|
-
head = await
|
675
|
+
head = await testAdvance(blocks, head, event1.cid)
|
730
676
|
const event1head = head
|
731
677
|
|
732
678
|
sinceHead = [...event0head, ...event1head]
|
733
|
-
|
734
|
-
const sigil = await findCommonAncestorWithSortedEvents(blocks, sinceHead)
|
735
|
-
// console.log('ancestor', (await decodeEventBlock((await blocks.get(sigil.ancestor)).bytes)).value)
|
736
|
-
|
737
|
-
toSync = await findUnknownSortedEvents(blocks, sinceHead, sigil)
|
738
|
-
|
679
|
+
toSync = await testFindEventsToSync(blocks, sinceHead)
|
739
680
|
assert.equal(toSync.length, 1)
|
740
|
-
|
741
|
-
// for await (const line of vis(blocks, head)) console.log(line)
|
742
|
-
|
743
681
|
sinceHead = [...event1head, ...roothead]
|
744
|
-
toSync = await
|
745
|
-
blocks,
|
746
|
-
sinceHead,
|
747
|
-
await findCommonAncestorWithSortedEvents(blocks, sinceHead)
|
748
|
-
)
|
682
|
+
toSync = await testFindEventsToSync(blocks, sinceHead)
|
749
683
|
|
750
684
|
assert.equal(toSync.length, 2)
|
751
685
|
|
752
686
|
const event2 = await EventBlock.create(seqEventData('xxx'), head)
|
753
687
|
await blocks.put(event2.cid, event2.bytes)
|
754
|
-
head = await
|
688
|
+
head = await testAdvance(blocks, head, event2.cid)
|
755
689
|
const event2head = head
|
756
690
|
|
757
691
|
sinceHead = [...event2head, ...event0head]
|
758
|
-
toSync = await
|
759
|
-
blocks,
|
760
|
-
sinceHead,
|
761
|
-
await findCommonAncestorWithSortedEvents(blocks, sinceHead)
|
762
|
-
)
|
692
|
+
toSync = await testFindEventsToSync(blocks, sinceHead)
|
763
693
|
assert.equal(toSync.length, 2)
|
764
694
|
|
765
695
|
sinceHead = [...event2head, ...event1head]
|
766
|
-
toSync = await
|
767
|
-
blocks,
|
768
|
-
sinceHead,
|
769
|
-
await findCommonAncestorWithSortedEvents(blocks, sinceHead)
|
770
|
-
)
|
696
|
+
toSync = await testFindEventsToSync(blocks, sinceHead)
|
771
697
|
assert.equal(toSync.length, 1)
|
772
698
|
})
|
773
699
|
})
|