@fireproof/core 0.0.6 → 0.0.8
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/coverage/blockstore.js.html +254 -242
- package/coverage/clock.js.html +203 -266
- package/coverage/db-index.js.html +426 -213
- package/coverage/fireproof.js.html +424 -238
- package/coverage/index.html +69 -84
- package/coverage/listener.js.html +13 -25
- package/coverage/prolly.js.html +267 -219
- package/coverage/tmp/coverage-28490-1680373005621-0.json +1 -0
- package/coverage/tmp/coverage-28494-1680373004502-0.json +1 -0
- package/coverage/tmp/coverage-28500-1680373005593-0.json +1 -0
- package/coverage/tmp/coverage-28504-1680373005559-0.json +1 -0
- package/coverage/valet.js.html +96 -246
- package/hooks/use-fireproof.ts +9 -8
- package/package.json +5 -5
- package/src/blockstore.js +16 -14
- package/src/clock.js +27 -5
- package/src/db-index.js +139 -96
- package/src/fireproof.js +48 -16
- package/src/hydrator.js +10 -0
- package/src/listener.js +0 -6
- package/src/prolly.js +43 -32
- package/src/valet.js +6 -62
- package/{src → test}/block.js +6 -6
- package/test/clock.test.js +0 -5
- package/test/db-index.test.js +11 -10
- package/test/fireproof.test.js +74 -19
- package/test/helpers.js +1 -1
- package/test/hydrator.test.js +75 -0
- package/test/prolly.test.js +2 -2
- package/test/proofs.test.js +5 -5
- package/test/reproduce-fixture-bug.test.js +2 -2
- package/coverage/tmp/coverage-42191-1678146904346-0.json +0 -1
- package/coverage/tmp/coverage-42193-1678146903521-0.json +0 -1
- package/coverage/tmp/coverage-42196-1678146904322-0.json +0 -1
- package/coverage/tmp/coverage-42197-1678146904292-0.json +0 -1
- package/scripts/propernames/gen.sh +0 -3
- package/scripts/randomcid.js +0 -12
- package/scripts/words/gen.js +0 -55
@@ -23,30 +23,30 @@
|
|
23
23
|
<div class='clearfix'>
|
24
24
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
26
|
-
<span class="strong">
|
26
|
+
<span class="strong">87.22% </span>
|
27
27
|
<span class="quiet">Statements</span>
|
28
|
-
<span class='fraction'>
|
28
|
+
<span class='fraction'>239/274</span>
|
29
29
|
</div>
|
30
30
|
|
31
31
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
33
33
|
<span class="strong">86.66% </span>
|
34
34
|
<span class="quiet">Branches</span>
|
35
|
-
<span class='fraction'>
|
35
|
+
<span class='fraction'>39/45</span>
|
36
36
|
</div>
|
37
37
|
|
38
38
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
40
|
-
<span class="strong">
|
40
|
+
<span class="strong">90.9% </span>
|
41
41
|
<span class="quiet">Functions</span>
|
42
|
-
<span class='fraction'>
|
42
|
+
<span class='fraction'>10/11</span>
|
43
43
|
</div>
|
44
44
|
|
45
45
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
47
|
-
<span class="strong">
|
47
|
+
<span class="strong">87.22% </span>
|
48
48
|
<span class="quiet">Lines</span>
|
49
|
-
<span class='fraction'>
|
49
|
+
<span class='fraction'>239/274</span>
|
50
50
|
</div>
|
51
51
|
|
52
52
|
|
@@ -266,7 +266,78 @@
|
|
266
266
|
<a name='L201'></a><a href='#L201'>201</a>
|
267
267
|
<a name='L202'></a><a href='#L202'>202</a>
|
268
268
|
<a name='L203'></a><a href='#L203'>203</a>
|
269
|
-
<a name='L204'></a><a href='#L204'>204</a
|
269
|
+
<a name='L204'></a><a href='#L204'>204</a>
|
270
|
+
<a name='L205'></a><a href='#L205'>205</a>
|
271
|
+
<a name='L206'></a><a href='#L206'>206</a>
|
272
|
+
<a name='L207'></a><a href='#L207'>207</a>
|
273
|
+
<a name='L208'></a><a href='#L208'>208</a>
|
274
|
+
<a name='L209'></a><a href='#L209'>209</a>
|
275
|
+
<a name='L210'></a><a href='#L210'>210</a>
|
276
|
+
<a name='L211'></a><a href='#L211'>211</a>
|
277
|
+
<a name='L212'></a><a href='#L212'>212</a>
|
278
|
+
<a name='L213'></a><a href='#L213'>213</a>
|
279
|
+
<a name='L214'></a><a href='#L214'>214</a>
|
280
|
+
<a name='L215'></a><a href='#L215'>215</a>
|
281
|
+
<a name='L216'></a><a href='#L216'>216</a>
|
282
|
+
<a name='L217'></a><a href='#L217'>217</a>
|
283
|
+
<a name='L218'></a><a href='#L218'>218</a>
|
284
|
+
<a name='L219'></a><a href='#L219'>219</a>
|
285
|
+
<a name='L220'></a><a href='#L220'>220</a>
|
286
|
+
<a name='L221'></a><a href='#L221'>221</a>
|
287
|
+
<a name='L222'></a><a href='#L222'>222</a>
|
288
|
+
<a name='L223'></a><a href='#L223'>223</a>
|
289
|
+
<a name='L224'></a><a href='#L224'>224</a>
|
290
|
+
<a name='L225'></a><a href='#L225'>225</a>
|
291
|
+
<a name='L226'></a><a href='#L226'>226</a>
|
292
|
+
<a name='L227'></a><a href='#L227'>227</a>
|
293
|
+
<a name='L228'></a><a href='#L228'>228</a>
|
294
|
+
<a name='L229'></a><a href='#L229'>229</a>
|
295
|
+
<a name='L230'></a><a href='#L230'>230</a>
|
296
|
+
<a name='L231'></a><a href='#L231'>231</a>
|
297
|
+
<a name='L232'></a><a href='#L232'>232</a>
|
298
|
+
<a name='L233'></a><a href='#L233'>233</a>
|
299
|
+
<a name='L234'></a><a href='#L234'>234</a>
|
300
|
+
<a name='L235'></a><a href='#L235'>235</a>
|
301
|
+
<a name='L236'></a><a href='#L236'>236</a>
|
302
|
+
<a name='L237'></a><a href='#L237'>237</a>
|
303
|
+
<a name='L238'></a><a href='#L238'>238</a>
|
304
|
+
<a name='L239'></a><a href='#L239'>239</a>
|
305
|
+
<a name='L240'></a><a href='#L240'>240</a>
|
306
|
+
<a name='L241'></a><a href='#L241'>241</a>
|
307
|
+
<a name='L242'></a><a href='#L242'>242</a>
|
308
|
+
<a name='L243'></a><a href='#L243'>243</a>
|
309
|
+
<a name='L244'></a><a href='#L244'>244</a>
|
310
|
+
<a name='L245'></a><a href='#L245'>245</a>
|
311
|
+
<a name='L246'></a><a href='#L246'>246</a>
|
312
|
+
<a name='L247'></a><a href='#L247'>247</a>
|
313
|
+
<a name='L248'></a><a href='#L248'>248</a>
|
314
|
+
<a name='L249'></a><a href='#L249'>249</a>
|
315
|
+
<a name='L250'></a><a href='#L250'>250</a>
|
316
|
+
<a name='L251'></a><a href='#L251'>251</a>
|
317
|
+
<a name='L252'></a><a href='#L252'>252</a>
|
318
|
+
<a name='L253'></a><a href='#L253'>253</a>
|
319
|
+
<a name='L254'></a><a href='#L254'>254</a>
|
320
|
+
<a name='L255'></a><a href='#L255'>255</a>
|
321
|
+
<a name='L256'></a><a href='#L256'>256</a>
|
322
|
+
<a name='L257'></a><a href='#L257'>257</a>
|
323
|
+
<a name='L258'></a><a href='#L258'>258</a>
|
324
|
+
<a name='L259'></a><a href='#L259'>259</a>
|
325
|
+
<a name='L260'></a><a href='#L260'>260</a>
|
326
|
+
<a name='L261'></a><a href='#L261'>261</a>
|
327
|
+
<a name='L262'></a><a href='#L262'>262</a>
|
328
|
+
<a name='L263'></a><a href='#L263'>263</a>
|
329
|
+
<a name='L264'></a><a href='#L264'>264</a>
|
330
|
+
<a name='L265'></a><a href='#L265'>265</a>
|
331
|
+
<a name='L266'></a><a href='#L266'>266</a>
|
332
|
+
<a name='L267'></a><a href='#L267'>267</a>
|
333
|
+
<a name='L268'></a><a href='#L268'>268</a>
|
334
|
+
<a name='L269'></a><a href='#L269'>269</a>
|
335
|
+
<a name='L270'></a><a href='#L270'>270</a>
|
336
|
+
<a name='L271'></a><a href='#L271'>271</a>
|
337
|
+
<a name='L272'></a><a href='#L272'>272</a>
|
338
|
+
<a name='L273'></a><a href='#L273'>273</a>
|
339
|
+
<a name='L274'></a><a href='#L274'>274</a>
|
340
|
+
<a name='L275'></a><a href='#L275'>275</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
270
341
|
<span class="cline-any cline-yes">1x</span>
|
271
342
|
<span class="cline-any cline-yes">1x</span>
|
272
343
|
<span class="cline-any cline-yes">1x</span>
|
@@ -279,9 +350,6 @@
|
|
279
350
|
<span class="cline-any cline-yes">1x</span>
|
280
351
|
<span class="cline-any cline-yes">1x</span>
|
281
352
|
<span class="cline-any cline-yes">1x</span>
|
282
|
-
<span class="cline-any cline-yes">74x</span>
|
283
|
-
<span class="cline-any cline-yes">74x</span>
|
284
|
-
<span class="cline-any cline-yes">74x</span>
|
285
353
|
<span class="cline-any cline-yes">1x</span>
|
286
354
|
<span class="cline-any cline-yes">1x</span>
|
287
355
|
<span class="cline-any cline-yes">1x</span>
|
@@ -293,26 +361,25 @@
|
|
293
361
|
<span class="cline-any cline-yes">1x</span>
|
294
362
|
<span class="cline-any cline-yes">1x</span>
|
295
363
|
<span class="cline-any cline-yes">1x</span>
|
296
|
-
<span class="cline-any cline-yes">18x</span>
|
297
|
-
<span class="cline-any cline-yes">18x</span>
|
298
|
-
<span class="cline-any cline-yes">112x</span>
|
299
|
-
<span class="cline-any cline-yes">110x</span>
|
300
|
-
<span class="cline-any cline-yes">109x</span>
|
301
|
-
<span class="cline-any cline-yes">109x</span>
|
302
|
-
<span class="cline-any cline-yes">109x</span>
|
303
|
-
<span class="cline-any cline-yes">109x</span>
|
304
|
-
<span class="cline-any cline-yes">110x</span>
|
305
|
-
<span class="cline-any cline-yes">18x</span>
|
306
|
-
<span class="cline-any cline-yes">18x</span>
|
307
|
-
<span class="cline-any cline-yes">18x</span>
|
308
364
|
<span class="cline-any cline-yes">1x</span>
|
309
365
|
<span class="cline-any cline-yes">1x</span>
|
366
|
+
<span class="cline-any cline-yes">1x</span>
|
367
|
+
<span class="cline-any cline-yes">1x</span>
|
368
|
+
<span class="cline-any cline-yes">1x</span>
|
369
|
+
<span class="cline-any cline-yes">1175x</span>
|
370
|
+
<span class="cline-any cline-yes">1175x</span>
|
371
|
+
<span class="cline-any cline-yes">1175x</span>
|
372
|
+
<span class="cline-any cline-yes">1175x</span>
|
373
|
+
<span class="cline-any cline-yes">289x</span>
|
374
|
+
<span class="cline-any cline-yes">1175x</span>
|
375
|
+
<span class="cline-any cline-yes">1x</span>
|
376
|
+
<span class="cline-any cline-yes">1x</span>
|
377
|
+
<span class="cline-any cline-yes">289x</span>
|
378
|
+
<span class="cline-any cline-yes">289x</span>
|
379
|
+
<span class="cline-any cline-yes">283x</span>
|
310
380
|
<span class="cline-any cline-no"> </span>
|
311
381
|
<span class="cline-any cline-no"> </span>
|
312
|
-
<span class="cline-any cline-
|
313
|
-
<span class="cline-any cline-no"> </span>
|
314
|
-
<span class="cline-any cline-no"> </span>
|
315
|
-
<span class="cline-any cline-no"> </span>
|
382
|
+
<span class="cline-any cline-yes">289x</span>
|
316
383
|
<span class="cline-any cline-yes">1x</span>
|
317
384
|
<span class="cline-any cline-yes">1x</span>
|
318
385
|
<span class="cline-any cline-yes">1x</span>
|
@@ -326,20 +393,6 @@
|
|
326
393
|
<span class="cline-any cline-yes">1x</span>
|
327
394
|
<span class="cline-any cline-yes">1x</span>
|
328
395
|
<span class="cline-any cline-yes">1x</span>
|
329
|
-
<span class="cline-any cline-yes">8x</span>
|
330
|
-
<span class="cline-any cline-yes">8x</span>
|
331
|
-
<span class="cline-any cline-yes">8x</span>
|
332
|
-
<span class="cline-any cline-yes">8x</span>
|
333
|
-
<span class="cline-any cline-yes">8x</span>
|
334
|
-
<span class="cline-any cline-yes">8x</span>
|
335
|
-
<span class="cline-any cline-yes">8x</span>
|
336
|
-
<span class="cline-any cline-yes">8x</span>
|
337
|
-
<span class="cline-any cline-yes">8x</span>
|
338
|
-
<span class="cline-any cline-yes">8x</span>
|
339
|
-
<span class="cline-any cline-yes">8x</span>
|
340
|
-
<span class="cline-any cline-yes">8x</span>
|
341
|
-
<span class="cline-any cline-yes">8x</span>
|
342
|
-
<span class="cline-any cline-yes">8x</span>
|
343
396
|
<span class="cline-any cline-yes">1x</span>
|
344
397
|
<span class="cline-any cline-yes">1x</span>
|
345
398
|
<span class="cline-any cline-yes">1x</span>
|
@@ -350,19 +403,6 @@
|
|
350
403
|
<span class="cline-any cline-yes">1x</span>
|
351
404
|
<span class="cline-any cline-yes">1x</span>
|
352
405
|
<span class="cline-any cline-yes">1x</span>
|
353
|
-
<span class="cline-any cline-yes">18x</span>
|
354
|
-
<span class="cline-any cline-yes">18x</span>
|
355
|
-
<span class="cline-any cline-yes">18x</span>
|
356
|
-
<span class="cline-any cline-yes">18x</span>
|
357
|
-
<span class="cline-any cline-yes">18x</span>
|
358
|
-
<span class="cline-any cline-yes">17x</span>
|
359
|
-
<span class="cline-any cline-yes">18x</span>
|
360
|
-
<span class="cline-any cline-yes">17x</span>
|
361
|
-
<span class="cline-any cline-yes">17x</span>
|
362
|
-
<span class="cline-any cline-yes">17x</span>
|
363
|
-
<span class="cline-any cline-yes">17x</span>
|
364
|
-
<span class="cline-any cline-yes">17x</span>
|
365
|
-
<span class="cline-any cline-yes">18x</span>
|
366
406
|
<span class="cline-any cline-yes">1x</span>
|
367
407
|
<span class="cline-any cline-yes">1x</span>
|
368
408
|
<span class="cline-any cline-yes">1x</span>
|
@@ -370,42 +410,29 @@
|
|
370
410
|
<span class="cline-any cline-yes">1x</span>
|
371
411
|
<span class="cline-any cline-yes">1x</span>
|
372
412
|
<span class="cline-any cline-yes">1x</span>
|
373
|
-
<span class="cline-any cline-yes">
|
374
|
-
<span class="cline-any cline-yes">
|
375
|
-
<span class="cline-any cline-yes">
|
376
|
-
<span class="cline-any cline-yes">
|
377
|
-
<span class="cline-any cline-yes">
|
378
|
-
<span class="cline-any cline-yes">
|
379
|
-
<span class="cline-any cline-yes">
|
380
|
-
<span class="cline-any cline-
|
381
|
-
<span class="cline-any cline-
|
382
|
-
<span class="cline-any cline-
|
383
|
-
<span class="cline-any cline-
|
384
|
-
<span class="cline-any cline-
|
385
|
-
<span class="cline-any cline-
|
386
|
-
<span class="cline-any cline-
|
387
|
-
<span class="cline-any cline-
|
388
|
-
<span class="cline-any cline-
|
389
|
-
<span class="cline-any cline-
|
390
|
-
<span class="cline-any cline-no"> </span>
|
391
|
-
<span class="cline-any cline-no"> </span>
|
392
|
-
<span class="cline-any cline-no"> </span>
|
393
|
-
<span class="cline-any cline-no"> </span>
|
413
|
+
<span class="cline-any cline-yes">1x</span>
|
414
|
+
<span class="cline-any cline-yes">1x</span>
|
415
|
+
<span class="cline-any cline-yes">1x</span>
|
416
|
+
<span class="cline-any cline-yes">21x</span>
|
417
|
+
<span class="cline-any cline-yes">21x</span>
|
418
|
+
<span class="cline-any cline-yes">126x</span>
|
419
|
+
<span class="cline-any cline-yes">124x</span>
|
420
|
+
<span class="cline-any cline-yes">122x</span>
|
421
|
+
<span class="cline-any cline-yes">122x</span>
|
422
|
+
<span class="cline-any cline-yes">122x</span>
|
423
|
+
<span class="cline-any cline-yes">122x</span>
|
424
|
+
<span class="cline-any cline-yes">124x</span>
|
425
|
+
<span class="cline-any cline-yes">21x</span>
|
426
|
+
<span class="cline-any cline-yes">21x</span>
|
427
|
+
<span class="cline-any cline-yes">21x</span>
|
428
|
+
<span class="cline-any cline-yes">1x</span>
|
429
|
+
<span class="cline-any cline-yes">1x</span>
|
394
430
|
<span class="cline-any cline-no"> </span>
|
395
431
|
<span class="cline-any cline-no"> </span>
|
396
432
|
<span class="cline-any cline-no"> </span>
|
397
433
|
<span class="cline-any cline-no"> </span>
|
398
434
|
<span class="cline-any cline-no"> </span>
|
399
435
|
<span class="cline-any cline-no"> </span>
|
400
|
-
<span class="cline-any cline-yes">18x</span>
|
401
|
-
<span class="cline-any cline-yes">18x</span>
|
402
|
-
<span class="cline-any cline-yes">18x</span>
|
403
|
-
<span class="cline-any cline-yes">18x</span>
|
404
|
-
<span class="cline-any cline-yes">17x</span>
|
405
|
-
<span class="cline-any cline-yes">17x</span>
|
406
|
-
<span class="cline-any cline-yes">17x</span>
|
407
|
-
<span class="cline-any cline-yes">17x</span>
|
408
|
-
<span class="cline-any cline-yes">18x</span>
|
409
436
|
<span class="cline-any cline-yes">1x</span>
|
410
437
|
<span class="cline-any cline-yes">1x</span>
|
411
438
|
<span class="cline-any cline-yes">1x</span>
|
@@ -419,34 +446,29 @@
|
|
419
446
|
<span class="cline-any cline-yes">1x</span>
|
420
447
|
<span class="cline-any cline-yes">1x</span>
|
421
448
|
<span class="cline-any cline-yes">1x</span>
|
449
|
+
<span class="cline-any cline-yes">11x</span>
|
450
|
+
<span class="cline-any cline-yes">11x</span>
|
451
|
+
<span class="cline-any cline-yes">11x</span>
|
452
|
+
<span class="cline-any cline-yes">11x</span>
|
453
|
+
<span class="cline-any cline-yes">11x</span>
|
454
|
+
<span class="cline-any cline-yes">11x</span>
|
455
|
+
<span class="cline-any cline-yes">11x</span>
|
456
|
+
<span class="cline-any cline-yes">11x</span>
|
457
|
+
<span class="cline-any cline-yes">11x</span>
|
458
|
+
<span class="cline-any cline-yes">11x</span>
|
459
|
+
<span class="cline-any cline-yes">11x</span>
|
460
|
+
<span class="cline-any cline-yes">11x</span>
|
461
|
+
<span class="cline-any cline-yes">11x</span>
|
462
|
+
<span class="cline-any cline-yes">11x</span>
|
463
|
+
<span class="cline-any cline-yes">11x</span>
|
464
|
+
<span class="cline-any cline-yes">11x</span>
|
465
|
+
<span class="cline-any cline-yes">11x</span>
|
466
|
+
<span class="cline-any cline-yes">11x</span>
|
467
|
+
<span class="cline-any cline-yes">11x</span>
|
468
|
+
<span class="cline-any cline-yes">11x</span>
|
469
|
+
<span class="cline-any cline-yes">11x</span>
|
470
|
+
<span class="cline-any cline-yes">1x</span>
|
422
471
|
<span class="cline-any cline-yes">1x</span>
|
423
|
-
<span class="cline-any cline-yes">34x</span>
|
424
|
-
<span class="cline-any cline-yes">34x</span>
|
425
|
-
<span class="cline-any cline-yes">34x</span>
|
426
|
-
<span class="cline-any cline-yes">34x</span>
|
427
|
-
<span class="cline-any cline-yes">34x</span>
|
428
|
-
<span class="cline-any cline-yes">24x</span>
|
429
|
-
<span class="cline-any cline-yes">24x</span>
|
430
|
-
<span class="cline-any cline-yes">24x</span>
|
431
|
-
<span class="cline-any cline-yes">89x</span>
|
432
|
-
<span class="cline-any cline-yes">89x</span>
|
433
|
-
<span class="cline-any cline-yes">89x</span>
|
434
|
-
<span class="cline-any cline-yes">89x</span>
|
435
|
-
<span class="cline-any cline-yes">24x</span>
|
436
|
-
<span class="cline-any cline-yes">24x</span>
|
437
|
-
<span class="cline-any cline-yes">34x</span>
|
438
|
-
<span class="cline-any cline-yes">10x</span>
|
439
|
-
<span class="cline-any cline-yes">10x</span>
|
440
|
-
<span class="cline-any cline-yes">10x</span>
|
441
|
-
<span class="cline-any cline-yes">10x</span>
|
442
|
-
<span class="cline-any cline-yes">10x</span>
|
443
|
-
<span class="cline-any cline-yes">10x</span>
|
444
|
-
<span class="cline-any cline-yes">30x</span>
|
445
|
-
<span class="cline-any cline-yes">30x</span>
|
446
|
-
<span class="cline-any cline-yes">10x</span>
|
447
|
-
<span class="cline-any cline-yes">10x</span>
|
448
|
-
<span class="cline-any cline-yes">10x</span>
|
449
|
-
<span class="cline-any cline-yes">34x</span>
|
450
472
|
<span class="cline-any cline-yes">1x</span>
|
451
473
|
<span class="cline-any cline-yes">1x</span>
|
452
474
|
<span class="cline-any cline-yes">1x</span>
|
@@ -456,44 +478,213 @@
|
|
456
478
|
<span class="cline-any cline-yes">1x</span>
|
457
479
|
<span class="cline-any cline-yes">1x</span>
|
458
480
|
<span class="cline-any cline-yes">1x</span>
|
459
|
-
<span class="cline-any cline-yes">
|
460
|
-
<span class="cline-any cline-yes">
|
461
|
-
<span class="cline-any cline-yes">
|
462
|
-
<span class="cline-any cline-yes">
|
463
|
-
<span class="cline-any cline-yes">
|
464
|
-
<span class="cline-any cline-yes">
|
465
|
-
<span class="cline-any cline-yes">
|
466
|
-
<span class="cline-any cline-yes">
|
467
|
-
<span class="cline-any cline-yes">
|
481
|
+
<span class="cline-any cline-yes">1x</span>
|
482
|
+
<span class="cline-any cline-yes">1x</span>
|
483
|
+
<span class="cline-any cline-yes">1x</span>
|
484
|
+
<span class="cline-any cline-yes">1x</span>
|
485
|
+
<span class="cline-any cline-yes">1x</span>
|
486
|
+
<span class="cline-any cline-yes">21x</span>
|
487
|
+
<span class="cline-any cline-yes">21x</span>
|
488
|
+
<span class="cline-any cline-yes">21x</span>
|
489
|
+
<span class="cline-any cline-yes">21x</span>
|
490
|
+
<span class="cline-any cline-yes">21x</span>
|
491
|
+
<span class="cline-any cline-yes">20x</span>
|
492
|
+
<span class="cline-any cline-yes">20x</span>
|
493
|
+
<span class="cline-any cline-yes">20x</span>
|
494
|
+
<span class="cline-any cline-yes">20x</span>
|
495
|
+
<span class="cline-any cline-yes">20x</span>
|
496
|
+
<span class="cline-any cline-yes">20x</span>
|
497
|
+
<span class="cline-any cline-yes">39x</span>
|
498
|
+
<span class="cline-any cline-yes">39x</span>
|
499
|
+
<span class="cline-any cline-yes">20x</span>
|
500
|
+
<span class="cline-any cline-yes">20x</span>
|
501
|
+
<span class="cline-any cline-yes">21x</span>
|
502
|
+
<span class="cline-any cline-yes">1x</span>
|
503
|
+
<span class="cline-any cline-yes">1x</span>
|
504
|
+
<span class="cline-any cline-yes">1x</span>
|
505
|
+
<span class="cline-any cline-yes">1x</span>
|
506
|
+
<span class="cline-any cline-yes">1x</span>
|
507
|
+
<span class="cline-any cline-yes">1x</span>
|
508
|
+
<span class="cline-any cline-yes">1x</span>
|
509
|
+
<span class="cline-any cline-yes">1x</span>
|
510
|
+
<span class="cline-any cline-yes">21x</span>
|
511
|
+
<span class="cline-any cline-yes">21x</span>
|
512
|
+
<span class="cline-any cline-yes">21x</span>
|
513
|
+
<span class="cline-any cline-yes">21x</span>
|
514
|
+
<span class="cline-any cline-yes">21x</span>
|
515
|
+
<span class="cline-any cline-yes">1x</span>
|
516
|
+
<span class="cline-any cline-yes">1x</span>
|
517
|
+
<span class="cline-any cline-yes">21x</span>
|
518
|
+
<span class="cline-any cline-yes">21x</span>
|
519
|
+
<span class="cline-any cline-yes">21x</span>
|
520
|
+
<span class="cline-any cline-yes">21x</span>
|
521
|
+
<span class="cline-any cline-yes">21x</span>
|
522
|
+
<span class="cline-any cline-yes">21x</span>
|
523
|
+
<span class="cline-any cline-yes">21x</span>
|
524
|
+
<span class="cline-any cline-yes">21x</span>
|
525
|
+
<span class="cline-any cline-yes">21x</span>
|
526
|
+
<span class="cline-any cline-yes">21x</span>
|
527
|
+
<span class="cline-any cline-no"> </span>
|
528
|
+
<span class="cline-any cline-no"> </span>
|
529
|
+
<span class="cline-any cline-no"> </span>
|
530
|
+
<span class="cline-any cline-no"> </span>
|
531
|
+
<span class="cline-any cline-no"> </span>
|
532
|
+
<span class="cline-any cline-no"> </span>
|
533
|
+
<span class="cline-any cline-no"> </span>
|
534
|
+
<span class="cline-any cline-no"> </span>
|
535
|
+
<span class="cline-any cline-no"> </span>
|
536
|
+
<span class="cline-any cline-no"> </span>
|
537
|
+
<span class="cline-any cline-no"> </span>
|
538
|
+
<span class="cline-any cline-no"> </span>
|
539
|
+
<span class="cline-any cline-no"> </span>
|
468
540
|
<span class="cline-any cline-no"> </span>
|
469
541
|
<span class="cline-any cline-no"> </span>
|
470
542
|
<span class="cline-any cline-no"> </span>
|
471
|
-
<span class="cline-any cline-
|
543
|
+
<span class="cline-any cline-no"> </span>
|
544
|
+
<span class="cline-any cline-no"> </span>
|
545
|
+
<span class="cline-any cline-no"> </span>
|
546
|
+
<span class="cline-any cline-no"> </span>
|
547
|
+
<span class="cline-any cline-no"> </span>
|
548
|
+
<span class="cline-any cline-no"> </span>
|
549
|
+
<span class="cline-any cline-yes">21x</span>
|
550
|
+
<span class="cline-any cline-yes">21x</span>
|
551
|
+
<span class="cline-any cline-yes">21x</span>
|
552
|
+
<span class="cline-any cline-yes">21x</span>
|
553
|
+
<span class="cline-any cline-yes">21x</span>
|
554
|
+
<span class="cline-any cline-yes">20x</span>
|
555
|
+
<span class="cline-any cline-yes">20x</span>
|
556
|
+
<span class="cline-any cline-yes">20x</span>
|
557
|
+
<span class="cline-any cline-yes">20x</span>
|
558
|
+
<span class="cline-any cline-yes">20x</span>
|
559
|
+
<span class="cline-any cline-yes">20x</span>
|
560
|
+
<span class="cline-any cline-yes">20x</span>
|
561
|
+
<span class="cline-any cline-yes">21x</span>
|
562
|
+
<span class="cline-any cline-yes">21x</span>
|
563
|
+
<span class="cline-any cline-yes">1x</span>
|
564
|
+
<span class="cline-any cline-yes">1x</span>
|
565
|
+
<span class="cline-any cline-yes">1x</span>
|
566
|
+
<span class="cline-any cline-yes">1x</span>
|
567
|
+
<span class="cline-any cline-yes">1x</span>
|
568
|
+
<span class="cline-any cline-yes">1x</span>
|
569
|
+
<span class="cline-any cline-yes">1x</span>
|
570
|
+
<span class="cline-any cline-yes">1x</span>
|
571
|
+
<span class="cline-any cline-yes">1x</span>
|
572
|
+
<span class="cline-any cline-yes">40x</span>
|
573
|
+
<span class="cline-any cline-yes">40x</span>
|
574
|
+
<span class="cline-any cline-yes">40x</span>
|
575
|
+
<span class="cline-any cline-yes">40x</span>
|
576
|
+
<span class="cline-any cline-yes">40x</span>
|
577
|
+
<span class="cline-any cline-yes">40x</span>
|
578
|
+
<span class="cline-any cline-yes">40x</span>
|
579
|
+
<span class="cline-any cline-yes">29x</span>
|
580
|
+
<span class="cline-any cline-yes">102x</span>
|
581
|
+
<span class="cline-any cline-yes">102x</span>
|
582
|
+
<span class="cline-any cline-yes">102x</span>
|
583
|
+
<span class="cline-any cline-yes">102x</span>
|
584
|
+
<span class="cline-any cline-yes">102x</span>
|
585
|
+
<span class="cline-any cline-yes">40x</span>
|
586
|
+
<span class="cline-any cline-yes">11x</span>
|
587
|
+
<span class="cline-any cline-yes">11x</span>
|
588
|
+
<span class="cline-any cline-yes">11x</span>
|
589
|
+
<span class="cline-any cline-yes">11x</span>
|
590
|
+
<span class="cline-any cline-yes">11x</span>
|
591
|
+
<span class="cline-any cline-yes">82x</span>
|
592
|
+
<span class="cline-any cline-yes">82x</span>
|
593
|
+
<span class="cline-any cline-yes">11x</span>
|
594
|
+
<span class="cline-any cline-yes">11x</span>
|
595
|
+
<span class="cline-any cline-yes">40x</span>
|
596
|
+
<span class="cline-any cline-yes">40x</span>
|
597
|
+
<span class="cline-any cline-yes">1x</span>
|
598
|
+
<span class="cline-any cline-yes">20x</span>
|
599
|
+
<span class="cline-any cline-yes">20x</span>
|
600
|
+
<span class="cline-any cline-no"> </span>
|
601
|
+
<span class="cline-any cline-no"> </span>
|
602
|
+
<span class="cline-any cline-no"> </span>
|
603
|
+
<span class="cline-any cline-no"> </span>
|
604
|
+
<span class="cline-any cline-no"> </span>
|
605
|
+
<span class="cline-any cline-yes">20x</span>
|
606
|
+
<span class="cline-any cline-yes">19x</span>
|
607
|
+
<span class="cline-any cline-yes">19x</span>
|
608
|
+
<span class="cline-any cline-yes">20x</span>
|
609
|
+
<span class="cline-any cline-yes">1x</span>
|
610
|
+
<span class="cline-any cline-yes">1x</span>
|
611
|
+
<span class="cline-any cline-yes">1x</span>
|
612
|
+
<span class="cline-any cline-yes">1x</span>
|
613
|
+
<span class="cline-any cline-yes">20x</span>
|
472
614
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { create, load } from 'prolly-trees/db-index'
|
473
615
|
import { sha256 as hasher } from 'multiformats/hashes/sha2'
|
474
616
|
import { nocache as cache } from 'prolly-trees/cache'
|
475
|
-
import { bf, simpleCompare
|
617
|
+
import { bf, simpleCompare } from 'prolly-trees/utils'
|
618
|
+
import { makeGetBlock } from './prolly.js'
|
619
|
+
import { cidsToProof } from './fireproof.js'
|
476
620
|
import * as codec from '@ipld/dag-cbor'
|
477
|
-
import { create as createBlock } from 'multiformats/block'
|
621
|
+
// import { create as createBlock } from 'multiformats/block'
|
478
622
|
import { doTransaction } from './blockstore.js'
|
479
623
|
import charwise from 'charwise'
|
480
|
-
const opts = { cache, chunker: bf(3), codec, hasher, compare }
|
481
624
|
|
482
625
|
const ALWAYS_REBUILD = true // todo: remove this
|
483
626
|
|
484
|
-
const
|
485
|
-
|
486
|
-
|
627
|
+
// const arrayCompare = (a, b) => {
|
628
|
+
// if (Array.isArray(a) && Array.isArray(b)) {
|
629
|
+
// const len = Math.min(a.length, b.length)
|
630
|
+
// for (let i = 0; i < len; i++) {
|
631
|
+
// const comp = simpleCompare(a[i], b[i])
|
632
|
+
// if (comp !== 0) {
|
633
|
+
// return comp
|
634
|
+
// }
|
635
|
+
// }
|
636
|
+
// return simpleCompare(a.length, b.length)
|
637
|
+
// } else {
|
638
|
+
// return simpleCompare(a, b)
|
639
|
+
// }
|
640
|
+
// }
|
641
|
+
|
642
|
+
const compare = (a, b) => {
|
643
|
+
const [aKey, aRef] = a
|
644
|
+
const [bKey, bRef] = b
|
645
|
+
const comp = simpleCompare(aKey, bKey)
|
646
|
+
if (comp !== 0) return comp
|
647
|
+
return refCompare(aRef, bRef)
|
648
|
+
}
|
649
|
+
|
650
|
+
const refCompare = (aRef, bRef) => {
|
651
|
+
if (Number.isNaN(aRef)) return -1
|
652
|
+
if (Number.isNaN(bRef)) <span class="branch-0 cbranch-no" title="branch not covered" >throw new Error('ref may not be Infinity or NaN')</span>
|
653
|
+
if (!Number.isFinite(aRef)) return 1
|
654
|
+
<span class="cstat-no" title="statement not covered" ><span class="branch-0 cbranch-no" title="branch not covered" > // if (!Number.isFinite(bRef)) throw new Error('ref may not be Infinity or NaN')</span></span>
|
655
|
+
<span class="cstat-no" title="statement not covered" > return simpleCompare(aRef, bRef)</span>
|
487
656
|
}
|
657
|
+
|
658
|
+
const opts = { cache, chunker: bf(3), codec, hasher, compare }
|
659
|
+
|
488
660
|
const makeDoc = ({ key, value }) => ({ _id: key, ...value })
|
489
661
|
|
662
|
+
/**
|
663
|
+
* JDoc for the result row type.
|
664
|
+
* @typedef {Object} ChangeEvent
|
665
|
+
* @property {string} key - The key of the document.
|
666
|
+
* @property {Object} value - The new value of the document.
|
667
|
+
* @property {boolean} [del] - Is the row deleted?
|
668
|
+
* @memberof DbIndex
|
669
|
+
*/
|
670
|
+
|
671
|
+
/**
|
672
|
+
* JDoc for the result row type.
|
673
|
+
* @typedef {Object} DbIndexEntry
|
674
|
+
* @property {string[]} key - The key for the DbIndex entry.
|
675
|
+
* @property {Object} value - The value of the document.
|
676
|
+
* @property {boolean} [del] - Is the row deleted?
|
677
|
+
* @memberof DbIndex
|
678
|
+
*/
|
679
|
+
|
490
680
|
/**
|
491
681
|
* Transforms a set of changes to DbIndex entries using a map function.
|
492
682
|
*
|
493
|
-
* @param {
|
683
|
+
* @param {ChangeEvent[]} changes
|
494
684
|
* @param {Function} mapFun
|
495
|
-
* @returns {
|
685
|
+
* @returns {DbIndexEntry[]} The DbIndex entries generated by the map function.
|
496
686
|
* @private
|
687
|
+
* @memberof DbIndex
|
497
688
|
*/
|
498
689
|
const indexEntriesForChanges = (changes, mapFun) => {
|
499
690
|
const indexEntries = []
|
@@ -510,11 +701,11 @@ const indexEntriesForChanges = (changes, mapFun) => {
|
|
510
701
|
}
|
511
702
|
|
512
703
|
const indexEntriesForOldChanges = <span class="fstat-no" title="function not covered" >async (blocks, byIDindexRoot, ids, mapFun) => {</span>
|
513
|
-
<span class="cstat-no" title="statement not covered" > const getBlock = makeGetBlock(blocks)</span>
|
704
|
+
<span class="cstat-no" title="statement not covered" > const { getBlock } = makeGetBlock(blocks)</span>
|
514
705
|
<span class="cstat-no" title="statement not covered" > const byIDindex = await load({ cid: byIDindexRoot.cid, get: getBlock, ...opts })</span>
|
515
|
-
<span class="cstat-no" title="statement not covered"
|
706
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
516
707
|
<span class="cstat-no" title="statement not covered" > const result = await byIDindex.getMany(ids)</span>
|
517
|
-
<span class="cstat-no" title="statement not covered" > return result
|
708
|
+
<span class="cstat-no" title="statement not covered" > return result</span>
|
518
709
|
<span class="cstat-no" title="statement not covered" >}</span>
|
519
710
|
|
520
711
|
/**
|
@@ -523,7 +714,7 @@ const indexEntriesForOldChanges = <span class="fstat-no" title="function not cov
|
|
523
714
|
* @class DbIndex
|
524
715
|
* @classdesc An DbIndex can be used to order and filter the documents in a Fireproof database.
|
525
716
|
*
|
526
|
-
* @param {
|
717
|
+
* @param {Fireproof} database - The Fireproof database instance to DbIndex.
|
527
718
|
* @param {Function} mapFun - The map function to apply to each entry in the database.
|
528
719
|
*
|
529
720
|
*/
|
@@ -531,7 +722,7 @@ export default class DbIndex {
|
|
531
722
|
constructor (database, mapFun) {
|
532
723
|
/**
|
533
724
|
* The database instance to DbIndex.
|
534
|
-
* @type {
|
725
|
+
* @type {Fireproof}
|
535
726
|
*/
|
536
727
|
this.database = database
|
537
728
|
/**
|
@@ -539,31 +730,47 @@ export default class DbIndex {
|
|
539
730
|
* @type {Function}
|
540
731
|
*/
|
541
732
|
this.mapFun = mapFun
|
542
|
-
|
733
|
+
|
734
|
+
this.dbIndexRoot = null
|
735
|
+
this.dbIndex = null
|
736
|
+
|
543
737
|
this.byIDindexRoot = null
|
544
738
|
this.dbHead = null
|
739
|
+
|
740
|
+
this.instanceId = this.database.instanceId + `.DbIndex.${Math.random().toString(36).substring(2, 7)}`
|
741
|
+
|
742
|
+
this.updateIndexPromise = null
|
545
743
|
}
|
744
|
+
|
745
|
+
/**
|
746
|
+
* JSDoc for Query type.
|
747
|
+
* @typedef {Object} DbQuery
|
748
|
+
* @property {string[]} [range] - The range to query.
|
749
|
+
* @memberof DbIndex
|
750
|
+
*/
|
546
751
|
|
547
752
|
/**
|
548
753
|
* Query object can have {range}
|
549
|
-
* @param {
|
550
|
-
* @param {CID} [root] - an optional root to query a snapshot
|
754
|
+
* @param {DbQuery} query - the query range to use
|
551
755
|
* @returns {Promise<{rows: Array<{id: string, key: string, value: any}>}>}
|
552
756
|
* @memberof DbIndex
|
553
757
|
* @instance
|
554
758
|
*/
|
555
|
-
async query (query
|
556
|
-
if (!root) {
|
557
|
-
|
558
|
-
|
559
|
-
|
560
|
-
|
561
|
-
}
|
562
|
-
const response = await doIndexQuery(this.database.blocks,
|
759
|
+
async query (query) {
|
760
|
+
// if (!root) {
|
761
|
+
// pass a root to query a snapshot
|
762
|
+
await doTransaction('#updateIndex', this.database.blocks, async (blocks) => {
|
763
|
+
await this.#updateIndex(blocks)
|
764
|
+
})
|
765
|
+
// }
|
766
|
+
const response = await doIndexQuery(this.database.blocks, this.dbIndexRoot, this.dbIndex, query)
|
563
767
|
return {
|
564
|
-
|
565
|
-
//
|
566
|
-
rows: response.result.map(({ id, key, row }) =>
|
768
|
+
proof: { index: await cidsToProof(response.cids) },
|
769
|
+
// TODO fix this naming upstream in prolly/db-DbIndex?
|
770
|
+
rows: response.result.map(({ id, key, row }) => {
|
771
|
+
// console.log('query', id, key, row)
|
772
|
+
return ({ id, key: charwise.decode(key), value: row })
|
773
|
+
})
|
567
774
|
}
|
568
775
|
}
|
569
776
|
|
@@ -572,105 +779,111 @@ export default class DbIndex {
|
|
572
779
|
* @private
|
573
780
|
* @returns {Promise<void>}
|
574
781
|
*/
|
782
|
+
|
575
783
|
async #updateIndex (blocks) {
|
784
|
+
if (this.updateIndexPromise) <span class="branch-0 cbranch-no" title="branch not covered" >return this.updateIndexPromise</span>
|
785
|
+
this.updateIndexPromise = this.#innerUpdateIndex(blocks)
|
786
|
+
this.updateIndexPromise.finally(() => { this.updateIndexPromise = null })
|
787
|
+
return this.updateIndexPromise
|
788
|
+
}
|
789
|
+
|
790
|
+
async #innerUpdateIndex (blocks) {
|
791
|
+
const callTag = Math.random().toString(36).substring(4)
|
792
|
+
console.log(`#updateIndex ${callTag} >`, this.instanceId, this.dbHead?.toString(), this.dbIndexRoot?.cid.toString(), this.byIDindexRoot?.cid.toString())
|
576
793
|
// todo remove this hack
|
577
794
|
if (ALWAYS_REBUILD) {
|
578
795
|
this.dbHead = null // hack
|
579
|
-
this.
|
796
|
+
this.dbIndex = null // hack
|
797
|
+
this.dbIndexRoot = null
|
580
798
|
}
|
581
799
|
const result = await this.database.changesSince(this.dbHead) // {key, value, del}
|
582
800
|
if (this.dbHead) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
583
|
-
<span class="cstat-no" title="statement not covered" > const
|
584
|
-
<span class="cstat-no" title="statement not covered" >
|
585
|
-
<span class="cstat-no" title="statement not covered" >
|
586
|
-
<span class="cstat-no" title="statement not covered" >
|
587
|
-
<span class="cstat-no" title="statement not covered" >
|
588
|
-
<span class="cstat-no" title="statement not covered" > this.mapFun</span>
|
589
|
-
<span class="cstat-no" title="statement not covered" > )</span>
|
801
|
+
<span class="cstat-no" title="statement not covered" > const oldChangeEntries = await indexEntriesForOldChanges(</span>
|
802
|
+
<span class="cstat-no" title="statement not covered" > blocks,</span>
|
803
|
+
<span class="cstat-no" title="statement not covered" > this.byIDindexRoot,</span>
|
804
|
+
<span class="cstat-no" title="statement not covered" > result.rows.map(({ key }) => key),</span>
|
805
|
+
<span class="cstat-no" title="statement not covered" > this.mapFun</span>
|
590
806
|
<span class="cstat-no" title="statement not covered" > )</span>
|
591
|
-
<span class="cstat-no" title="statement not covered" >
|
592
|
-
<span class="cstat-no" title="statement not covered" >
|
593
|
-
<span class="cstat-no" title="statement not covered" >
|
807
|
+
<span class="cstat-no" title="statement not covered" > const oldIndexEntries = oldChangeEntries.result.map((key) => ({ key, del: true }))</span>
|
808
|
+
<span class="cstat-no" title="statement not covered" > const removalResult = await bulkIndex(blocks, this.dbIndexRoot, this.dbIndex, oldIndexEntries, opts)</span>
|
809
|
+
<span class="cstat-no" title="statement not covered" > this.dbIndexRoot = removalResult.root</span>
|
810
|
+
<span class="cstat-no" title="statement not covered" > this.dbIndex = removalResult.dbIndex</span>
|
594
811
|
<span class="cstat-no" title="statement not covered" ></span>
|
595
|
-
<span class="cstat-no" title="statement not covered" >
|
596
|
-
<span class="cstat-no" title="statement not covered" >
|
597
|
-
<span class="cstat-no" title="statement not covered" >
|
598
|
-
<span class="cstat-no" title="statement not covered" >
|
599
|
-
<span class="cstat-no" title="statement not covered" >
|
600
|
-
<span class="cstat-no" title="statement not covered" >
|
601
|
-
<span class="cstat-no" title="statement not covered" >
|
812
|
+
<span class="cstat-no" title="statement not covered" > const removeByIdIndexEntries = oldIndexEntries.map(({ key }) => ({ key: key[1], del: true }))</span>
|
813
|
+
<span class="cstat-no" title="statement not covered" > const purgedRemovalResults = await bulkIndex(</span>
|
814
|
+
<span class="cstat-no" title="statement not covered" > blocks,</span>
|
815
|
+
<span class="cstat-no" title="statement not covered" > this.byIDindexRoot,</span>
|
816
|
+
<span class="cstat-no" title="statement not covered" > this.byIDIndex,</span>
|
817
|
+
<span class="cstat-no" title="statement not covered" > removeByIdIndexEntries,</span>
|
818
|
+
<span class="cstat-no" title="statement not covered" > opts</span>
|
819
|
+
<span class="cstat-no" title="statement not covered" > )</span>
|
820
|
+
<span class="cstat-no" title="statement not covered" > this.byIDindexRoot = purgedRemovalResults.root</span>
|
821
|
+
<span class="cstat-no" title="statement not covered" > this.byIDIndex = purgedRemovalResults.dbIndex</span>
|
602
822
|
<span class="cstat-no" title="statement not covered" > }</span>
|
603
823
|
const indexEntries = indexEntriesForChanges(result.rows, this.mapFun)
|
604
|
-
const byIdIndexEntries = indexEntries.map(({ key }) => ({ key: key[1], value: key }))
|
605
|
-
// [{key: 'xxxx-3c3a-4b5e-9c1c-8c5c0c5c0c5c', value : [ 53, 'xxxx-3c3a-4b5e-9c1c-8c5c0c5c0c5c' ]}]
|
606
|
-
this.byIDindexRoot = await bulkIndex(blocks, this.byIDindexRoot, byIdIndexEntries, opts)
|
607
824
|
// console.log('indexEntries', indexEntries)
|
608
|
-
|
609
|
-
|
825
|
+
|
826
|
+
const byIdIndexEntries = indexEntries.map(({ key }) => ({ key: key[1], value: key }))
|
827
|
+
const addFutureRemovalsResult = await bulkIndex(blocks, this.byIDindexRoot, this.byIDIndex, byIdIndexEntries, opts)
|
828
|
+
this.byIDindexRoot = addFutureRemovalsResult.root
|
829
|
+
this.byIDIndex = addFutureRemovalsResult.dbIndex
|
830
|
+
|
831
|
+
const updateIndexResult = await bulkIndex(blocks, this.dbIndexRoot, this.dbIndex, indexEntries, opts)
|
832
|
+
this.dbIndexRoot = updateIndexResult.root
|
833
|
+
this.dbIndex = updateIndexResult.dbIndex
|
610
834
|
this.dbHead = result.clock
|
835
|
+
console.log(`#updateIndex ${callTag} <`, this.instanceId, callTag, this.dbHead?.toString(), this.dbIndexRoot?.cid.toString(), this.byIDindexRoot?.cid.toString())
|
611
836
|
}
|
612
|
-
|
613
|
-
// todo use the DbIndex from other peers?
|
614
|
-
// we might need to add CRDT logic to it for that
|
615
|
-
// it would only be a performance improvement, but might add a lot of complexity
|
616
|
-
// advanceIndex ()) {}
|
617
837
|
}
|
618
838
|
|
619
839
|
/**
|
620
840
|
* Update the DbIndex with the given entries
|
621
841
|
* @param {Blockstore} blocks
|
622
|
-
* @param {
|
623
|
-
* @param {
|
842
|
+
* @param {Block} inRoot
|
843
|
+
* @param {DbIndexEntry[]} indexEntries
|
624
844
|
* @private
|
625
845
|
*/
|
626
|
-
async function bulkIndex (blocks, inRoot, indexEntries) {
|
627
|
-
if (!indexEntries.length) <span class="branch-0 cbranch-no" title="branch not covered" >return inRoot</span>
|
846
|
+
async function bulkIndex (blocks, inRoot, inDBindex, indexEntries) {
|
847
|
+
if (!indexEntries.length) <span class="branch-0 cbranch-no" title="branch not covered" >return { dbIndex: inDBindex, root: inRoot }</span>
|
628
848
|
const putBlock = blocks.put.bind(blocks)
|
629
|
-
const getBlock = makeGetBlock(blocks)
|
630
|
-
|
631
|
-
|
632
|
-
|
849
|
+
const { getBlock } = makeGetBlock(blocks)
|
850
|
+
let returnRootBlock
|
851
|
+
let returnNode
|
852
|
+
if (!inDBindex) {
|
633
853
|
for await (const node of await create({ get: getBlock, list: indexEntries, ...opts })) {
|
634
854
|
const block = await node.block
|
635
855
|
await putBlock(block.cid, block.bytes)
|
636
|
-
|
856
|
+
returnRootBlock = block
|
857
|
+
returnNode = node
|
637
858
|
}
|
638
|
-
// console.x('created DbIndex', inRoot.cid)
|
639
|
-
return inRoot
|
640
859
|
} else {
|
641
|
-
// load
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
const { root, blocks } = await DbIndex.bulk(indexEntries)
|
860
|
+
// const dbIndex = await load({ cid: inRoot.cid, get: getBlock, ...opts }) // todo load from root on refresh
|
861
|
+
const { root, blocks } = await inDBindex.bulk(indexEntries)
|
862
|
+
returnRootBlock = await root.block
|
863
|
+
returnNode = root
|
646
864
|
for await (const block of blocks) {
|
647
865
|
await putBlock(block.cid, block.bytes)
|
648
866
|
}
|
649
|
-
|
650
|
-
return await root.block // if we hold the root we won't have to load every time
|
867
|
+
await putBlock(returnRootBlock.cid, returnRootBlock.bytes)
|
651
868
|
}
|
869
|
+
return { dbIndex: returnNode, root: returnRootBlock }
|
652
870
|
}
|
653
871
|
|
654
|
-
|
655
|
-
|
656
|
-
|
657
|
-
|
658
|
-
|
659
|
-
|
660
|
-
|
661
|
-
**/
|
662
|
-
async function doIndexQuery (blocks, root, query) {
|
663
|
-
const cid = root && root.cid
|
664
|
-
if (!cid) <span class="branch-0 cbranch-no" title="branch not covered" >return { result: [] }</span>
|
665
|
-
const getBlock = makeGetBlock(blocks)
|
666
|
-
const DbIndex = await load({ cid, get: getBlock, ...opts })
|
872
|
+
async function doIndexQuery (blocks, dbIndexRoot, dbIndex, query) {
|
873
|
+
if (!dbIndex) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
874
|
+
<span class="cstat-no" title="statement not covered" > const cid = dbIndexRoot && dbIndexRoot.cid</span>
|
875
|
+
<span class="cstat-no" title="statement not covered" > if (!cid) return { result: [] }</span>
|
876
|
+
<span class="cstat-no" title="statement not covered" > const { getBlock } = makeGetBlock(blocks)</span>
|
877
|
+
<span class="cstat-no" title="statement not covered" > dbIndex = await load({ cid, get: getBlock, ...opts })</span>
|
878
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
667
879
|
if (query.range) {
|
668
880
|
const encodedRange = query.range.map((key) => charwise.encode(key))
|
669
|
-
return
|
670
|
-
}
|
671
|
-
|
672
|
-
|
673
|
-
|
881
|
+
return dbIndex.range(...encodedRange)
|
882
|
+
} else if (query.key) {
|
883
|
+
const encodedKey = charwise.encode(query.key)
|
884
|
+
console.log('getting key', encodedKey)
|
885
|
+
return dbIndex.get(encodedKey)
|
886
|
+
}
|
674
887
|
}
|
675
888
|
</pre></td></tr></table></pre>
|
676
889
|
|
@@ -679,7 +892,7 @@ async function doIndexQuery (blocks, root, query) {
|
|
679
892
|
<div class='footer quiet pad2 space-top1 center small'>
|
680
893
|
Code coverage generated by
|
681
894
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
682
|
-
at 2023-
|
895
|
+
at 2023-04-01T18:16:45.716Z
|
683
896
|
</div>
|
684
897
|
<script src="prettify.js"></script>
|
685
898
|
<script>
|