@fireproof/core 0.0.5 → 0.0.7
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/hooks/use-fireproof.ts +0 -2
- package/package.json +6 -5
- package/src/blockstore.js +14 -10
- package/src/clock.js +29 -50
- package/src/db-index.js +109 -69
- package/src/fireproof.js +64 -27
- package/src/listener.js +0 -6
- package/src/prolly.js +68 -52
- package/src/valet.js +6 -62
- package/{src → test}/block.js +6 -6
- package/test/clock.test.js +91 -170
- package/test/db-index.test.js +10 -8
- package/test/fireproof.test.js +84 -16
- package/test/fulltext.test.js +66 -0
- package/test/helpers.js +1 -1
- package/test/prolly.test.js +15 -28
- package/test/proofs.test.js +53 -0
- package/test/reproduce-fixture-bug.test.js +65 -0
- package/hooks/use-fireproof.md +0 -149
- package/scripts/propernames/gen.sh +0 -3
- package/scripts/randomcid.js +0 -12
- package/scripts/words/gen.js +0 -55
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,40 +425,23 @@ 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
|
-
// todo do these since heads make sense?
|
457
443
|
sinceHead = [...head0, ...head2]
|
458
|
-
toSync = await
|
459
|
-
blocks,
|
460
|
-
sinceHead,
|
461
|
-
await findCommonAncestorWithSortedEvents(blocks, sinceHead)
|
462
|
-
)
|
463
|
-
// console.log('need', toSync.map(b => b.value.data))
|
464
|
-
// assert.equal(toSync.length, 2) // 0
|
465
|
-
// assert.equal(toSync[0].cid.toString(), event1.cid.toString())
|
466
|
-
// assert.equal(toSync[1].cid.toString(), event2.cid.toString())
|
444
|
+
toSync = await testFindEventsToSync(blocks, sinceHead)
|
467
445
|
})
|
468
446
|
|
469
447
|
it('add two events with some shared parents', async () => {
|
@@ -477,36 +455,30 @@ describe('Clock', () => {
|
|
477
455
|
|
478
456
|
const event0 = await EventBlock.create(seqEventData(), parents0)
|
479
457
|
await blocks.put(event0.cid, event0.bytes)
|
480
|
-
head = await
|
458
|
+
head = await testAdvance(blocks, head, event0.cid)
|
481
459
|
|
482
460
|
const event1 = await EventBlock.create(seqEventData(), parents0)
|
483
461
|
await blocks.put(event1.cid, event1.bytes)
|
484
|
-
head = await
|
462
|
+
head = await testAdvance(blocks, head, event1.cid)
|
485
463
|
|
486
464
|
const event2 = await EventBlock.create(seqEventData(), parents0)
|
487
465
|
await blocks.put(event2.cid, event2.bytes)
|
488
|
-
head = await
|
466
|
+
head = await testAdvance(blocks, head, event2.cid)
|
489
467
|
|
490
468
|
const event3 = await EventBlock.create(seqEventData(), [event0.cid, event1.cid])
|
491
469
|
await blocks.put(event3.cid, event3.bytes)
|
492
|
-
head = await
|
470
|
+
head = await testAdvance(blocks, head, event3.cid)
|
493
471
|
// const parentz = head
|
494
472
|
|
495
473
|
const event4 = await EventBlock.create(seqEventData(), [event2.cid])
|
496
474
|
await blocks.put(event4.cid, event4.bytes)
|
497
|
-
head = await
|
475
|
+
head = await testAdvance(blocks, head, event4.cid)
|
498
476
|
|
499
477
|
// console.log('add two events with some shared parents')
|
500
478
|
// for await (const line of vis(blocks, head)) console.log(line)
|
501
479
|
assert.equal(head.length, 2)
|
502
480
|
assert.equal(head[0].toString(), event3.cid.toString())
|
503
481
|
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
482
|
})
|
511
483
|
|
512
484
|
it('converge when multi-root', async () => {
|
@@ -521,63 +493,63 @@ describe('Clock', () => {
|
|
521
493
|
|
522
494
|
const event0 = await EventBlock.create(seqEventData(), parents0)
|
523
495
|
await blocks.put(event0.cid, event0.bytes)
|
524
|
-
head = await
|
496
|
+
head = await testAdvance(blocks, head, event0.cid)
|
525
497
|
|
526
498
|
const event1 = await EventBlock.create(seqEventData(), parents0)
|
527
499
|
await blocks.put(event1.cid, event1.bytes)
|
528
|
-
head = await
|
500
|
+
head = await testAdvance(blocks, head, event1.cid)
|
529
501
|
|
530
502
|
const event1head = head
|
531
503
|
|
532
504
|
const event2 = await EventBlock.create(seqEventData(), event1head)
|
533
505
|
await blocks.put(event2.cid, event2.bytes)
|
534
|
-
head = await
|
506
|
+
head = await testAdvance(blocks, head, event2.cid)
|
535
507
|
|
536
508
|
const event3 = await EventBlock.create(seqEventData(), event1head)
|
537
509
|
await blocks.put(event3.cid, event3.bytes)
|
538
|
-
head = await
|
510
|
+
head = await testAdvance(blocks, head, event3.cid)
|
539
511
|
|
540
512
|
const event3head = head
|
541
513
|
|
542
514
|
const event4 = await EventBlock.create(seqEventData(), event1head)
|
543
515
|
await blocks.put(event4.cid, event4.bytes)
|
544
|
-
head = await
|
516
|
+
head = await testAdvance(blocks, head, event4.cid)
|
545
517
|
const event4head = head
|
546
518
|
await visHead(blocks, event4head)
|
547
519
|
|
548
520
|
const event5 = await EventBlock.create(seqEventData(), event3head)
|
549
521
|
await blocks.put(event5.cid, event5.bytes)
|
550
|
-
head = await
|
522
|
+
head = await testAdvance(blocks, head, event5.cid)
|
551
523
|
const event5head = head
|
552
524
|
await visHead(blocks, event5head)
|
553
525
|
|
554
526
|
const event6 = await EventBlock.create(seqEventData(), event5head)
|
555
527
|
await blocks.put(event6.cid, event6.bytes)
|
556
|
-
head = await
|
528
|
+
head = await testAdvance(blocks, head, event6.cid)
|
557
529
|
const event6head = head
|
558
530
|
await visHead(blocks, event6head)
|
559
531
|
|
560
532
|
const event7 = await EventBlock.create(seqEventData(), event6head)
|
561
533
|
await blocks.put(event7.cid, event7.bytes)
|
562
|
-
head = await
|
534
|
+
head = await testAdvance(blocks, head, event7.cid)
|
563
535
|
const event7head = head
|
564
536
|
await visHead(blocks, event7head)
|
565
537
|
|
566
538
|
const event8 = await EventBlock.create(seqEventData(), event7head)
|
567
539
|
await blocks.put(event8.cid, event8.bytes)
|
568
|
-
head = await
|
540
|
+
head = await testAdvance(blocks, head, event8.cid)
|
569
541
|
const event8head = head
|
570
542
|
await visHead(blocks, event8head)
|
571
543
|
|
572
544
|
const event9 = await EventBlock.create(seqEventData(), event7head)
|
573
545
|
await blocks.put(event9.cid, event9.bytes)
|
574
|
-
head = await
|
546
|
+
head = await testAdvance(blocks, head, event9.cid)
|
575
547
|
const event9head = head
|
576
548
|
await visHead(blocks, event9head)
|
577
549
|
|
578
550
|
const event10 = await EventBlock.create(seqEventData(), event9head)
|
579
551
|
await blocks.put(event10.cid, event10.bytes)
|
580
|
-
head = await
|
552
|
+
head = await testAdvance(blocks, head, event10.cid)
|
581
553
|
const event10head = head
|
582
554
|
await visHead(blocks, event10head)
|
583
555
|
|
@@ -587,26 +559,7 @@ describe('Clock', () => {
|
|
587
559
|
assert.equal(event10head.length, 1)
|
588
560
|
assert.equal(event10head[0].toString(), event10.cid.toString())
|
589
561
|
|
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)
|
562
|
+
const toSync3 = await testFindEventsToSync(blocks, [event7.cid, event10.cid])
|
610
563
|
assert.equal(toSync3[0].value.data.value, 'event9')
|
611
564
|
assert.equal(toSync3[1].value.data.value, 'event8')
|
612
565
|
assert.equal(toSync3[2].value.data.value, 'event10')
|
@@ -623,36 +576,36 @@ describe('Clock', () => {
|
|
623
576
|
|
624
577
|
const event0 = await EventBlock.create(seqEventData(), parents0)
|
625
578
|
await blocks.put(event0.cid, event0.bytes)
|
626
|
-
head = await
|
579
|
+
head = await testAdvance(blocks, head, event0.cid)
|
627
580
|
|
628
581
|
const event1 = await EventBlock.create(seqEventData(), parents0)
|
629
582
|
await blocks.put(event1.cid, event1.bytes)
|
630
|
-
head = await
|
583
|
+
head = await testAdvance(blocks, head, event1.cid)
|
631
584
|
|
632
585
|
const event1head = head
|
633
586
|
|
634
587
|
const event2 = await EventBlock.create(seqEventData(), event1head)
|
635
588
|
await blocks.put(event2.cid, event2.bytes)
|
636
|
-
head = await
|
589
|
+
head = await testAdvance(blocks, head, event2.cid)
|
637
590
|
|
638
591
|
const event3 = await EventBlock.create(seqEventData(), event1head)
|
639
592
|
await blocks.put(event3.cid, event3.bytes)
|
640
|
-
head = await
|
593
|
+
head = await testAdvance(blocks, head, event3.cid)
|
641
594
|
|
642
595
|
const event4 = await EventBlock.create(seqEventData(), event1head)
|
643
596
|
await blocks.put(event4.cid, event4.bytes)
|
644
|
-
head = await
|
597
|
+
head = await testAdvance(blocks, head, event4.cid)
|
645
598
|
|
646
599
|
const parents2 = head
|
647
600
|
|
648
601
|
const event5 = await EventBlock.create(seqEventData(), parents2)
|
649
602
|
await blocks.put(event5.cid, event5.bytes)
|
650
|
-
head = await
|
603
|
+
head = await testAdvance(blocks, head, event5.cid)
|
651
604
|
|
652
605
|
// now very old one
|
653
606
|
const event6 = await EventBlock.create(seqEventData(), parents0)
|
654
607
|
await blocks.put(event6.cid, event6.bytes)
|
655
|
-
head = await
|
608
|
+
head = await testAdvance(blocks, head, event6.cid)
|
656
609
|
|
657
610
|
// for await (const line of vis(blocks, head)) console.log(line)
|
658
611
|
assert.equal(head.length, 2)
|
@@ -675,7 +628,7 @@ describe('Clock', () => {
|
|
675
628
|
const event1 = await EventBlock.create(seqEventData(), [event0.cid])
|
676
629
|
await blocks.put(event1.cid, event1.bytes)
|
677
630
|
|
678
|
-
head = await
|
631
|
+
head = await testAdvance(blocks, head, event1.cid)
|
679
632
|
|
680
633
|
// for await (const line of vis(blocks, head)) console.log(line)
|
681
634
|
assert.equal(head.length, 1)
|
@@ -688,15 +641,11 @@ describe('Clock', () => {
|
|
688
641
|
// alice
|
689
642
|
const root = await EventBlock.create(seqEventData('alice'))
|
690
643
|
await blocks.put(root.cid, root.bytes)
|
691
|
-
let head = await
|
644
|
+
let head = await testAdvance(blocks, [], root.cid)
|
692
645
|
const roothead = head
|
693
646
|
// db root
|
694
647
|
let sinceHead = [...roothead]
|
695
|
-
let toSync = await
|
696
|
-
blocks,
|
697
|
-
sinceHead,
|
698
|
-
await findCommonAncestorWithSortedEvents(blocks, sinceHead)
|
699
|
-
)
|
648
|
+
let toSync = await testFindEventsToSync(blocks, sinceHead)
|
700
649
|
assert.equal(toSync.length, 0) // we use all docs for first query in Fireproof
|
701
650
|
|
702
651
|
// create bob
|
@@ -704,70 +653,42 @@ describe('Clock', () => {
|
|
704
653
|
await blocks.put(event0.cid, event0.bytes)
|
705
654
|
// console.log('new event0', event0.cid)
|
706
655
|
|
707
|
-
head = await
|
656
|
+
head = await testAdvance(blocks, head, event0.cid)
|
708
657
|
|
709
658
|
const event0head = head
|
710
659
|
sinceHead = event0head
|
711
|
-
toSync = await
|
712
|
-
blocks,
|
713
|
-
sinceHead,
|
714
|
-
await findCommonAncestorWithSortedEvents(blocks, sinceHead)
|
715
|
-
)
|
660
|
+
toSync = await testFindEventsToSync(blocks, sinceHead)
|
716
661
|
assert.equal(toSync.length, 0)
|
717
662
|
|
718
663
|
sinceHead = [...roothead, ...event0head]
|
719
|
-
toSync = await
|
720
|
-
blocks,
|
721
|
-
sinceHead,
|
722
|
-
await findCommonAncestorWithSortedEvents(blocks, sinceHead)
|
723
|
-
)
|
664
|
+
toSync = await testFindEventsToSync(blocks, sinceHead)
|
724
665
|
assert.equal(toSync.length, 1)
|
725
666
|
|
726
667
|
// create carol
|
727
668
|
const event1 = await EventBlock.create(seqEventData('carol'), head)
|
728
669
|
await blocks.put(event1.cid, event1.bytes)
|
729
|
-
head = await
|
670
|
+
head = await testAdvance(blocks, head, event1.cid)
|
730
671
|
const event1head = head
|
731
672
|
|
732
673
|
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
|
-
|
674
|
+
toSync = await testFindEventsToSync(blocks, sinceHead)
|
739
675
|
assert.equal(toSync.length, 1)
|
740
|
-
|
741
|
-
// for await (const line of vis(blocks, head)) console.log(line)
|
742
|
-
|
743
676
|
sinceHead = [...event1head, ...roothead]
|
744
|
-
toSync = await
|
745
|
-
blocks,
|
746
|
-
sinceHead,
|
747
|
-
await findCommonAncestorWithSortedEvents(blocks, sinceHead)
|
748
|
-
)
|
677
|
+
toSync = await testFindEventsToSync(blocks, sinceHead)
|
749
678
|
|
750
679
|
assert.equal(toSync.length, 2)
|
751
680
|
|
752
681
|
const event2 = await EventBlock.create(seqEventData('xxx'), head)
|
753
682
|
await blocks.put(event2.cid, event2.bytes)
|
754
|
-
head = await
|
683
|
+
head = await testAdvance(blocks, head, event2.cid)
|
755
684
|
const event2head = head
|
756
685
|
|
757
686
|
sinceHead = [...event2head, ...event0head]
|
758
|
-
toSync = await
|
759
|
-
blocks,
|
760
|
-
sinceHead,
|
761
|
-
await findCommonAncestorWithSortedEvents(blocks, sinceHead)
|
762
|
-
)
|
687
|
+
toSync = await testFindEventsToSync(blocks, sinceHead)
|
763
688
|
assert.equal(toSync.length, 2)
|
764
689
|
|
765
690
|
sinceHead = [...event2head, ...event1head]
|
766
|
-
toSync = await
|
767
|
-
blocks,
|
768
|
-
sinceHead,
|
769
|
-
await findCommonAncestorWithSortedEvents(blocks, sinceHead)
|
770
|
-
)
|
691
|
+
toSync = await testFindEventsToSync(blocks, sinceHead)
|
771
692
|
assert.equal(toSync.length, 1)
|
772
693
|
})
|
773
694
|
})
|