@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.
Files changed (38) hide show
  1. package/coverage/blockstore.js.html +254 -242
  2. package/coverage/clock.js.html +203 -266
  3. package/coverage/db-index.js.html +426 -213
  4. package/coverage/fireproof.js.html +424 -238
  5. package/coverage/index.html +69 -84
  6. package/coverage/listener.js.html +13 -25
  7. package/coverage/prolly.js.html +267 -219
  8. package/coverage/tmp/coverage-28490-1680373005621-0.json +1 -0
  9. package/coverage/tmp/coverage-28494-1680373004502-0.json +1 -0
  10. package/coverage/tmp/coverage-28500-1680373005593-0.json +1 -0
  11. package/coverage/tmp/coverage-28504-1680373005559-0.json +1 -0
  12. package/coverage/valet.js.html +96 -246
  13. package/hooks/use-fireproof.ts +9 -8
  14. package/package.json +5 -5
  15. package/src/blockstore.js +16 -14
  16. package/src/clock.js +27 -5
  17. package/src/db-index.js +139 -96
  18. package/src/fireproof.js +48 -16
  19. package/src/hydrator.js +10 -0
  20. package/src/listener.js +0 -6
  21. package/src/prolly.js +43 -32
  22. package/src/valet.js +6 -62
  23. package/{src → test}/block.js +6 -6
  24. package/test/clock.test.js +0 -5
  25. package/test/db-index.test.js +11 -10
  26. package/test/fireproof.test.js +74 -19
  27. package/test/helpers.js +1 -1
  28. package/test/hydrator.test.js +75 -0
  29. package/test/prolly.test.js +2 -2
  30. package/test/proofs.test.js +5 -5
  31. package/test/reproduce-fixture-bug.test.js +2 -2
  32. package/coverage/tmp/coverage-42191-1678146904346-0.json +0 -1
  33. package/coverage/tmp/coverage-42193-1678146903521-0.json +0 -1
  34. package/coverage/tmp/coverage-42196-1678146904322-0.json +0 -1
  35. package/coverage/tmp/coverage-42197-1678146904292-0.json +0 -1
  36. package/scripts/propernames/gen.sh +0 -3
  37. package/scripts/randomcid.js +0 -12
  38. 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">89.48% </span>
26
+ <span class="strong">87.91% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>315/352</span>
28
+ <span class='fraction'>291/331</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">90.47% </span>
33
+ <span class="strong">90.12% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>76/84</span>
35
+ <span class='fraction'>73/81</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">88.88% </span>
40
+ <span class="strong">83.33% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>16/18</span>
42
+ <span class='fraction'>15/18</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">89.48% </span>
47
+ <span class="strong">87.91% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>315/352</span>
49
+ <span class='fraction'>291/331</span>
50
50
  </div>
51
51
 
52
52
 
@@ -394,28 +394,7 @@
394
394
  <a name='L329'></a><a href='#L329'>329</a>
395
395
  <a name='L330'></a><a href='#L330'>330</a>
396
396
  <a name='L331'></a><a href='#L331'>331</a>
397
- <a name='L332'></a><a href='#L332'>332</a>
398
- <a name='L333'></a><a href='#L333'>333</a>
399
- <a name='L334'></a><a href='#L334'>334</a>
400
- <a name='L335'></a><a href='#L335'>335</a>
401
- <a name='L336'></a><a href='#L336'>336</a>
402
- <a name='L337'></a><a href='#L337'>337</a>
403
- <a name='L338'></a><a href='#L338'>338</a>
404
- <a name='L339'></a><a href='#L339'>339</a>
405
- <a name='L340'></a><a href='#L340'>340</a>
406
- <a name='L341'></a><a href='#L341'>341</a>
407
- <a name='L342'></a><a href='#L342'>342</a>
408
- <a name='L343'></a><a href='#L343'>343</a>
409
- <a name='L344'></a><a href='#L344'>344</a>
410
- <a name='L345'></a><a href='#L345'>345</a>
411
- <a name='L346'></a><a href='#L346'>346</a>
412
- <a name='L347'></a><a href='#L347'>347</a>
413
- <a name='L348'></a><a href='#L348'>348</a>
414
- <a name='L349'></a><a href='#L349'>349</a>
415
- <a name='L350'></a><a href='#L350'>350</a>
416
- <a name='L351'></a><a href='#L351'>351</a>
417
- <a name='L352'></a><a href='#L352'>352</a>
418
- <a name='L353'></a><a href='#L353'>353</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
397
+ <a name='L332'></a><a href='#L332'>332</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
419
398
  <span class="cline-any cline-yes">1x</span>
420
399
  <span class="cline-any cline-yes">1x</span>
421
400
  <span class="cline-any cline-yes">1x</span>
@@ -444,38 +423,39 @@
444
423
  <span class="cline-any cline-yes">1x</span>
445
424
  <span class="cline-any cline-yes">1x</span>
446
425
  <span class="cline-any cline-yes">1x</span>
447
- <span class="cline-any cline-yes">178x</span>
448
- <span class="cline-any cline-yes">178x</span>
449
- <span class="cline-any cline-yes">178x</span>
450
- <span class="cline-any cline-yes">178x</span>
451
- <span class="cline-any cline-yes">178x</span>
452
- <span class="cline-any cline-yes">178x</span>
453
- <span class="cline-any cline-yes">178x</span>
454
- <span class="cline-any cline-yes">178x</span>
455
- <span class="cline-any cline-yes">178x</span>
456
- <span class="cline-any cline-yes">178x</span>
457
- <span class="cline-any cline-yes">163x</span>
458
- <span class="cline-any cline-yes">143x</span>
459
- <span class="cline-any cline-yes">143x</span>
460
- <span class="cline-any cline-yes">143x</span>
461
- <span class="cline-any cline-yes">143x</span>
462
- <span class="cline-any cline-yes">163x</span>
463
- <span class="cline-any cline-yes">178x</span>
464
- <span class="cline-any cline-yes">178x</span>
465
- <span class="cline-any cline-yes">178x</span>
466
- <span class="cline-any cline-yes">132x</span>
467
- <span class="cline-any cline-yes">132x</span>
468
- <span class="cline-any cline-yes">46x</span>
469
- <span class="cline-any cline-yes">46x</span>
470
- <span class="cline-any cline-yes">178x</span>
426
+ <span class="cline-any cline-yes">1x</span>
427
+ <span class="cline-any cline-yes">221x</span>
428
+ <span class="cline-any cline-yes">221x</span>
429
+ <span class="cline-any cline-yes">221x</span>
430
+ <span class="cline-any cline-yes">221x</span>
431
+ <span class="cline-any cline-yes">221x</span>
432
+ <span class="cline-any cline-yes">221x</span>
433
+ <span class="cline-any cline-yes">221x</span>
434
+ <span class="cline-any cline-yes">221x</span>
435
+ <span class="cline-any cline-yes">221x</span>
436
+ <span class="cline-any cline-yes">221x</span>
437
+ <span class="cline-any cline-yes">191x</span>
438
+ <span class="cline-any cline-yes">171x</span>
439
+ <span class="cline-any cline-yes">171x</span>
440
+ <span class="cline-any cline-yes">171x</span>
441
+ <span class="cline-any cline-yes">171x</span>
442
+ <span class="cline-any cline-yes">191x</span>
443
+ <span class="cline-any cline-yes">221x</span>
444
+ <span class="cline-any cline-yes">221x</span>
445
+ <span class="cline-any cline-yes">221x</span>
446
+ <span class="cline-any cline-yes">160x</span>
447
+ <span class="cline-any cline-yes">160x</span>
448
+ <span class="cline-any cline-yes">61x</span>
449
+ <span class="cline-any cline-yes">61x</span>
450
+ <span class="cline-any cline-yes">221x</span>
471
451
  <span class="cline-any cline-yes">16x</span>
472
452
  <span class="cline-any cline-no">&nbsp;</span>
473
453
  <span class="cline-any cline-no">&nbsp;</span>
474
454
  <span class="cline-any cline-yes">16x</span>
475
- <span class="cline-any cline-yes">46x</span>
476
- <span class="cline-any cline-yes">46x</span>
477
- <span class="cline-any cline-yes">46x</span>
478
- <span class="cline-any cline-yes">178x</span>
455
+ <span class="cline-any cline-yes">61x</span>
456
+ <span class="cline-any cline-yes">61x</span>
457
+ <span class="cline-any cline-yes">61x</span>
458
+ <span class="cline-any cline-yes">221x</span>
479
459
  <span class="cline-any cline-yes">1x</span>
480
460
  <span class="cline-any cline-yes">1x</span>
481
461
  <span class="cline-any cline-yes">1x</span>
@@ -499,27 +479,34 @@
499
479
  <span class="cline-any cline-yes">1x</span>
500
480
  <span class="cline-any cline-yes">1x</span>
501
481
  <span class="cline-any cline-yes">1x</span>
502
- <span class="cline-any cline-yes">179x</span>
503
- <span class="cline-any cline-yes">179x</span>
482
+ <span class="cline-any cline-yes">222x</span>
483
+ <span class="cline-any cline-yes">222x</span>
484
+ <span class="cline-any cline-yes">1x</span>
485
+ <span class="cline-any cline-yes">1x</span>
504
486
  <span class="cline-any cline-yes">1x</span>
505
487
  <span class="cline-any cline-yes">1x</span>
506
488
  <span class="cline-any cline-yes">1x</span>
507
489
  <span class="cline-any cline-yes">1x</span>
490
+ <span class="cline-any cline-yes">532x</span>
491
+ <span class="cline-any cline-yes">532x</span>
492
+ <span class="cline-any cline-yes">532x</span>
493
+ <span class="cline-any cline-yes">532x</span>
508
494
  <span class="cline-any cline-yes">1x</span>
509
495
  <span class="cline-any cline-yes">1x</span>
510
- <span class="cline-any cline-yes">688x</span>
511
- <span class="cline-any cline-yes">688x</span>
512
- <span class="cline-any cline-yes">688x</span>
513
496
  <span class="cline-any cline-yes">1x</span>
514
497
  <span class="cline-any cline-yes">1x</span>
515
498
  <span class="cline-any cline-yes">1x</span>
516
499
  <span class="cline-any cline-yes">1x</span>
500
+ <span class="cline-any cline-yes">3405x</span>
501
+ <span class="cline-any cline-yes">3405x</span>
502
+ <span class="cline-any cline-yes">3405x</span>
503
+ <span class="cline-any cline-yes">3405x</span>
504
+ <span class="cline-any cline-yes">3405x</span>
517
505
  <span class="cline-any cline-yes">1x</span>
518
506
  <span class="cline-any cline-yes">1x</span>
519
- <span class="cline-any cline-yes">3814x</span>
520
- <span class="cline-any cline-yes">3814x</span>
521
- <span class="cline-any cline-yes">3814x</span>
522
- <span class="cline-any cline-yes">3814x</span>
507
+ <span class="cline-any cline-no">&nbsp;</span>
508
+ <span class="cline-any cline-no">&nbsp;</span>
509
+ <span class="cline-any cline-no">&nbsp;</span>
523
510
  <span class="cline-any cline-yes">1x</span>
524
511
  <span class="cline-any cline-yes">1x</span>
525
512
  <span class="cline-any cline-yes">1x</span>
@@ -528,11 +515,11 @@
528
515
  <span class="cline-any cline-yes">1x</span>
529
516
  <span class="cline-any cline-yes">1x</span>
530
517
  <span class="cline-any cline-yes">1x</span>
531
- <span class="cline-any cline-yes">179x</span>
532
- <span class="cline-any cline-yes">179x</span>
533
- <span class="cline-any cline-yes">179x</span>
534
- <span class="cline-any cline-yes">179x</span>
535
- <span class="cline-any cline-yes">179x</span>
518
+ <span class="cline-any cline-yes">222x</span>
519
+ <span class="cline-any cline-yes">222x</span>
520
+ <span class="cline-any cline-yes">222x</span>
521
+ <span class="cline-any cline-yes">222x</span>
522
+ <span class="cline-any cline-yes">222x</span>
536
523
  <span class="cline-any cline-yes">1x</span>
537
524
  <span class="cline-any cline-yes">1x</span>
538
525
  <span class="cline-any cline-yes">1x</span>
@@ -540,10 +527,10 @@
540
527
  <span class="cline-any cline-yes">1x</span>
541
528
  <span class="cline-any cline-yes">1x</span>
542
529
  <span class="cline-any cline-yes">1x</span>
543
- <span class="cline-any cline-yes">3825x</span>
544
- <span class="cline-any cline-yes">3825x</span>
545
- <span class="cline-any cline-yes">3825x</span>
546
- <span class="cline-any cline-yes">3825x</span>
530
+ <span class="cline-any cline-yes">3416x</span>
531
+ <span class="cline-any cline-yes">3416x</span>
532
+ <span class="cline-any cline-yes">3416x</span>
533
+ <span class="cline-any cline-yes">3416x</span>
547
534
  <span class="cline-any cline-yes">1x</span>
548
535
  <span class="cline-any cline-yes">1x</span>
549
536
  <span class="cline-any cline-yes">1x</span>
@@ -552,22 +539,22 @@
552
539
  <span class="cline-any cline-yes">1x</span>
553
540
  <span class="cline-any cline-yes">1x</span>
554
541
  <span class="cline-any cline-yes">1x</span>
555
- <span class="cline-any cline-yes">506x</span>
556
- <span class="cline-any cline-yes">506x</span>
557
- <span class="cline-any cline-yes">450x</span>
558
- <span class="cline-any cline-yes">450x</span>
559
- <span class="cline-any cline-yes">506x</span>
560
- <span class="cline-any cline-yes">763x</span>
561
- <span class="cline-any cline-yes">763x</span>
562
- <span class="cline-any cline-yes">763x</span>
542
+ <span class="cline-any cline-yes">544x</span>
543
+ <span class="cline-any cline-yes">544x</span>
544
+ <span class="cline-any cline-yes">483x</span>
545
+ <span class="cline-any cline-yes">483x</span>
546
+ <span class="cline-any cline-yes">544x</span>
547
+ <span class="cline-any cline-yes">791x</span>
548
+ <span class="cline-any cline-yes">791x</span>
549
+ <span class="cline-any cline-yes">791x</span>
563
550
  <span class="cline-any cline-yes">518x</span>
564
551
  <span class="cline-any cline-yes">518x</span>
565
- <span class="cline-any cline-yes">763x</span>
552
+ <span class="cline-any cline-yes">791x</span>
566
553
  <span class="cline-any cline-yes">460x</span>
567
554
  <span class="cline-any cline-yes">460x</span>
568
555
  <span class="cline-any cline-yes">460x</span>
569
- <span class="cline-any cline-yes">205x</span>
570
- <span class="cline-any cline-yes">506x</span>
556
+ <span class="cline-any cline-yes">210x</span>
557
+ <span class="cline-any cline-yes">544x</span>
571
558
  <span class="cline-any cline-yes">1x</span>
572
559
  <span class="cline-any cline-yes">1x</span>
573
560
  <span class="cline-any cline-yes">1x</span>
@@ -609,48 +596,24 @@
609
596
  <span class="cline-any cline-no">&nbsp;</span>
610
597
  <span class="cline-any cline-yes">1x</span>
611
598
  <span class="cline-any cline-yes">1x</span>
612
- <span class="cline-any cline-yes">36x</span>
613
- <span class="cline-any cline-yes">36x</span>
614
- <span class="cline-any cline-yes">36x</span>
615
- <span class="cline-any cline-yes">1x</span>
616
- <span class="cline-any cline-yes">1x</span>
617
- <span class="cline-any cline-yes">58x</span>
618
- <span class="cline-any cline-yes">58x</span>
619
- <span class="cline-any cline-yes">58x</span>
620
- <span class="cline-any cline-yes">58x</span>
621
- <span class="cline-any cline-yes">58x</span>
622
- <span class="cline-any cline-yes">58x</span>
623
- <span class="cline-any cline-yes">58x</span>
624
- <span class="cline-any cline-yes">58x</span>
625
- <span class="cline-any cline-yes">58x</span>
626
- <span class="cline-any cline-yes">58x</span>
627
- <span class="cline-any cline-yes">58x</span>
628
- <span class="cline-any cline-yes">327x</span>
629
- <span class="cline-any cline-yes">327x</span>
630
- <span class="cline-any cline-yes">327x</span>
631
- <span class="cline-any cline-yes">327x</span>
632
- <span class="cline-any cline-yes">169x</span>
633
- <span class="cline-any cline-yes">58x</span>
634
- <span class="cline-any cline-yes">58x</span>
635
- <span class="cline-any cline-yes">58x</span>
636
- <span class="cline-any cline-yes">58x</span>
637
- <span class="cline-any cline-yes">1x</span>
638
- <span class="cline-any cline-yes">1x</span>
639
- <span class="cline-any cline-yes">58x</span>
640
- <span class="cline-any cline-yes">1x</span>
641
- <span class="cline-any cline-yes">1x</span>
642
- <span class="cline-any cline-yes">255x</span>
643
- <span class="cline-any cline-yes">255x</span>
644
- <span class="cline-any cline-yes">255x</span>
645
- <span class="cline-any cline-yes">255x</span>
599
+ <span class="cline-any cline-yes">63x</span>
600
+ <span class="cline-any cline-yes">63x</span>
601
+ <span class="cline-any cline-yes">63x</span>
602
+ <span class="cline-any cline-yes">63x</span>
603
+ <span class="cline-any cline-yes">63x</span>
604
+ <span class="cline-any cline-yes">1x</span>
605
+ <span class="cline-any cline-yes">1x</span>
606
+ <span class="cline-any cline-yes">63x</span>
607
+ <span class="cline-any cline-yes">1x</span>
608
+ <span class="cline-any cline-yes">1x</span>
609
+ <span class="cline-any cline-yes">311x</span>
610
+ <span class="cline-any cline-yes">311x</span>
646
611
  <span class="cline-any cline-no">&nbsp;</span>
647
612
  <span class="cline-any cline-no">&nbsp;</span>
648
- <span class="cline-any cline-yes">255x</span>
649
- <span class="cline-any cline-yes">255x</span>
650
- <span class="cline-any cline-yes">255x</span>
651
- <span class="cline-any cline-yes">255x</span>
652
- <span class="cline-any cline-yes">255x</span>
653
- <span class="cline-any cline-yes">255x</span>
613
+ <span class="cline-any cline-yes">311x</span>
614
+ <span class="cline-any cline-yes">311x</span>
615
+ <span class="cline-any cline-yes">311x</span>
616
+ <span class="cline-any cline-yes">311x</span>
654
617
  <span class="cline-any cline-yes">1x</span>
655
618
  <span class="cline-any cline-yes">1x</span>
656
619
  <span class="cline-any cline-yes">1x</span>
@@ -659,53 +622,51 @@
659
622
  <span class="cline-any cline-yes">1x</span>
660
623
  <span class="cline-any cline-yes">1x</span>
661
624
  <span class="cline-any cline-yes">1x</span>
662
- <span class="cline-any cline-yes">261x</span>
663
- <span class="cline-any cline-yes">261x</span>
664
- <span class="cline-any cline-yes">261x</span>
665
- <span class="cline-any cline-yes">261x</span>
666
- <span class="cline-any cline-yes">383x</span>
667
- <span class="cline-any cline-yes">383x</span>
668
- <span class="cline-any cline-yes">525x</span>
669
- <span class="cline-any cline-yes">525x</span>
670
- <span class="cline-any cline-yes">525x</span>
671
- <span class="cline-any cline-yes">525x</span>
672
- <span class="cline-any cline-yes">525x</span>
673
- <span class="cline-any cline-yes">525x</span>
674
- <span class="cline-any cline-yes">525x</span>
675
- <span class="cline-any cline-yes">383x</span>
676
- <span class="cline-any cline-yes">383x</span>
677
- <span class="cline-any cline-yes">261x</span>
625
+ <span class="cline-any cline-yes">317x</span>
626
+ <span class="cline-any cline-yes">317x</span>
627
+ <span class="cline-any cline-yes">317x</span>
628
+ <span class="cline-any cline-yes">317x</span>
629
+ <span class="cline-any cline-yes">439x</span>
630
+ <span class="cline-any cline-yes">439x</span>
631
+ <span class="cline-any cline-yes">586x</span>
632
+ <span class="cline-any cline-yes">586x</span>
633
+ <span class="cline-any cline-yes">586x</span>
634
+ <span class="cline-any cline-yes">586x</span>
635
+ <span class="cline-any cline-yes">586x</span>
636
+ <span class="cline-any cline-yes">586x</span>
637
+ <span class="cline-any cline-yes">586x</span>
638
+ <span class="cline-any cline-yes">439x</span>
639
+ <span class="cline-any cline-yes">439x</span>
640
+ <span class="cline-any cline-yes">317x</span>
678
641
  <span class="cline-any cline-yes">1x</span>
679
642
  <span class="cline-any cline-yes">1x</span>
680
643
  <span class="cline-any cline-yes">1x</span>
681
644
  <span class="cline-any cline-yes">1x</span>
682
645
  <span class="cline-any cline-yes">1x</span>
683
- <span class="cline-any cline-yes">525x</span>
684
- <span class="cline-any cline-yes">525x</span>
685
- <span class="cline-any cline-yes">525x</span>
686
- <span class="cline-any cline-yes">367x</span>
687
- <span class="cline-any cline-yes">525x</span>
688
- <span class="cline-any cline-yes">525x</span>
689
- <span class="cline-any cline-yes">525x</span>
646
+ <span class="cline-any cline-yes">586x</span>
647
+ <span class="cline-any cline-yes">586x</span>
648
+ <span class="cline-any cline-yes">586x</span>
649
+ <span class="cline-any cline-yes">586x</span>
650
+ <span class="cline-any cline-yes">586x</span>
690
651
  <span class="cline-any cline-yes">1x</span>
691
652
  <span class="cline-any cline-yes">1x</span>
692
653
  <span class="cline-any cline-yes">1x</span>
693
654
  <span class="cline-any cline-yes">1x</span>
694
655
  <span class="cline-any cline-yes">1x</span>
695
- <span class="cline-any cline-yes">525x</span>
696
- <span class="cline-any cline-yes">525x</span>
697
- <span class="cline-any cline-yes">525x</span>
698
- <span class="cline-any cline-yes">789x</span>
699
- <span class="cline-any cline-yes">2176x</span>
700
- <span class="cline-any cline-yes">2176x</span>
701
- <span class="cline-any cline-yes">3349x</span>
702
- <span class="cline-any cline-yes">1977x</span>
703
- <span class="cline-any cline-yes">3349x</span>
704
- <span class="cline-any cline-yes">3349x</span>
705
- <span class="cline-any cline-yes">2176x</span>
706
- <span class="cline-any cline-yes">2176x</span>
707
- <span class="cline-any cline-yes">528x</span>
708
- <span class="cline-any cline-yes">525x</span>
656
+ <span class="cline-any cline-yes">586x</span>
657
+ <span class="cline-any cline-yes">586x</span>
658
+ <span class="cline-any cline-yes">586x</span>
659
+ <span class="cline-any cline-yes">855x</span>
660
+ <span class="cline-any cline-yes">2247x</span>
661
+ <span class="cline-any cline-yes">2247x</span>
662
+ <span class="cline-any cline-yes">3435x</span>
663
+ <span class="cline-any cline-yes">1997x</span>
664
+ <span class="cline-any cline-yes">3435x</span>
665
+ <span class="cline-any cline-yes">3435x</span>
666
+ <span class="cline-any cline-yes">2247x</span>
667
+ <span class="cline-any cline-yes">2247x</span>
668
+ <span class="cline-any cline-yes">538x</span>
669
+ <span class="cline-any cline-yes">586x</span>
709
670
  <span class="cline-any cline-yes">1x</span>
710
671
  <span class="cline-any cline-yes">1x</span>
711
672
  <span class="cline-any cline-yes">1x</span>
@@ -713,63 +674,61 @@
713
674
  <span class="cline-any cline-yes">1x</span>
714
675
  <span class="cline-any cline-yes">1x</span>
715
676
  <span class="cline-any cline-yes">1x</span>
716
- <span class="cline-any cline-yes">255x</span>
717
- <span class="cline-any cline-yes">255x</span>
718
- <span class="cline-any cline-yes">255x</span>
719
- <span class="cline-any cline-yes">255x</span>
720
- <span class="cline-any cline-yes">255x</span>
721
- <span class="cline-any cline-yes">255x</span>
722
677
  <span class="cline-any cline-yes">311x</span>
723
- <span class="cline-any cline-yes">931x</span>
724
- <span class="cline-any cline-yes">931x</span>
678
+ <span class="cline-any cline-yes">311x</span>
679
+ <span class="cline-any cline-yes">311x</span>
680
+ <span class="cline-any cline-yes">311x</span>
681
+ <span class="cline-any cline-yes">311x</span>
682
+ <span class="cline-any cline-yes">311x</span>
683
+ <span class="cline-any cline-yes">372x</span>
684
+ <span class="cline-any cline-yes">1145x</span>
685
+ <span class="cline-any cline-yes">1145x</span>
686
+ <span class="cline-any cline-yes">1145x</span>
725
687
  <span class="cline-any cline-yes">24x</span>
726
- <span class="cline-any cline-yes">931x</span>
727
- <span class="cline-any cline-yes">907x</span>
728
- <span class="cline-any cline-yes">907x</span>
729
- <span class="cline-any cline-yes">931x</span>
688
+ <span class="cline-any cline-yes">1145x</span>
689
+ <span class="cline-any cline-yes">1121x</span>
690
+ <span class="cline-any cline-yes">1121x</span>
691
+ <span class="cline-any cline-yes">1145x</span>
692
+ <span class="cline-any cline-yes">372x</span>
693
+ <span class="cline-any cline-yes">311x</span>
694
+ <span class="cline-any cline-yes">311x</span>
695
+ <span class="cline-any cline-yes">311x</span>
730
696
  <span class="cline-any cline-yes">311x</span>
731
- <span class="cline-any cline-yes">255x</span>
732
- <span class="cline-any cline-yes">255x</span>
733
- <span class="cline-any cline-yes">255x</span>
734
- <span class="cline-any cline-yes">255x</span>
735
- <span class="cline-any cline-yes">255x</span>
736
- <span class="cline-any cline-yes">907x</span>
737
- <span class="cline-any cline-yes">907x</span>
738
- <span class="cline-any cline-yes">105x</span>
739
- <span class="cline-any cline-yes">907x</span>
740
- <span class="cline-any cline-yes">802x</span>
741
- <span class="cline-any cline-yes">802x</span>
742
- <span class="cline-any cline-yes">907x</span>
743
- <span class="cline-any cline-yes">255x</span>
744
- <span class="cline-any cline-yes">255x</span>
745
- <span class="cline-any cline-yes">255x</span>
746
- <span class="cline-any cline-yes">255x</span>
747
- <span class="cline-any cline-yes">255x</span>
748
- <span class="cline-any cline-yes">802x</span>
749
- <span class="cline-any cline-yes">255x</span>
750
- <span class="cline-any cline-yes">255x</span>
751
- <span class="cline-any cline-yes">255x</span>
752
- <span class="cline-any cline-yes">255x</span>
753
- <span class="cline-any cline-yes">1x</span>
754
- <span class="cline-any cline-yes">1x</span>
755
- <span class="cline-any cline-yes">1x</span>
756
- <span class="cline-any cline-yes">1x</span>
757
- <span class="cline-any cline-yes">1x</span>
758
- <span class="cline-any cline-yes">1x</span>
759
- <span class="cline-any cline-yes">1x</span>
760
- <span class="cline-any cline-yes">931x</span>
761
- <span class="cline-any cline-yes">931x</span>
762
- <span class="cline-any cline-yes">931x</span>
763
- <span class="cline-any cline-yes">931x</span>
764
- <span class="cline-any cline-yes">931x</span>
765
- <span class="cline-any cline-yes">871x</span>
766
- <span class="cline-any cline-yes">871x</span>
767
- <span class="cline-any cline-yes">871x</span>
768
- <span class="cline-any cline-yes">871x</span>
769
- <span class="cline-any cline-yes">931x</span>
697
+ <span class="cline-any cline-yes">311x</span>
698
+ <span class="cline-any cline-yes">1121x</span>
699
+ <span class="cline-any cline-yes">1121x</span>
700
+ <span class="cline-any cline-yes">110x</span>
701
+ <span class="cline-any cline-yes">1121x</span>
702
+ <span class="cline-any cline-yes">1011x</span>
703
+ <span class="cline-any cline-yes">1011x</span>
704
+ <span class="cline-any cline-yes">1121x</span>
705
+ <span class="cline-any cline-yes">311x</span>
706
+ <span class="cline-any cline-yes">311x</span>
707
+ <span class="cline-any cline-yes">311x</span>
708
+ <span class="cline-any cline-yes">311x</span>
709
+ <span class="cline-any cline-yes">311x</span>
710
+ <span class="cline-any cline-yes">311x</span>
711
+ <span class="cline-any cline-yes">311x</span>
712
+ <span class="cline-any cline-yes">311x</span>
713
+ <span class="cline-any cline-yes">1x</span>
714
+ <span class="cline-any cline-yes">1x</span>
715
+ <span class="cline-any cline-yes">1x</span>
716
+ <span class="cline-any cline-yes">1x</span>
717
+ <span class="cline-any cline-yes">1x</span>
718
+ <span class="cline-any cline-yes">1x</span>
719
+ <span class="cline-any cline-yes">1x</span>
720
+ <span class="cline-any cline-yes">1145x</span>
721
+ <span class="cline-any cline-yes">1145x</span>
722
+ <span class="cline-any cline-yes">1145x</span>
723
+ <span class="cline-any cline-yes">1145x</span>
724
+ <span class="cline-any cline-yes">1145x</span>
725
+ <span class="cline-any cline-yes">1080x</span>
726
+ <span class="cline-any cline-yes">1080x</span>
727
+ <span class="cline-any cline-yes">1145x</span>
770
728
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { Block, encode, decode } from 'multiformats/block'
771
729
  import { sha256 } from 'multiformats/hashes/sha2'
772
730
  import * as cbor from '@ipld/dag-cbor'
731
+ import { CIDCounter } from 'prolly-trees/utils'
773
732
  &nbsp;
774
733
  /**
775
734
  * @template T
@@ -790,7 +749,7 @@ import * as cbor from '@ipld/dag-cbor'
790
749
  * Advance the clock by adding an event.
791
750
  *
792
751
  * @template T
793
- * @param {import('./block').BlockFetcher} blocks Block storage.
752
+ * @param {import('../test/block').BlockFetcher} blocks Block storage.
794
753
  * @param {EventLink&lt;T&gt;[]} head The head of the clock.
795
754
  * @param {EventLink&lt;T&gt;} event The event to add.
796
755
  * @returns {Promise&lt;EventLink&lt;T&gt;[]&gt;} The new head of the clock.
@@ -798,10 +757,10 @@ import * as cbor from '@ipld/dag-cbor'
798
757
  export async function advance (blocks, head, event) {
799
758
  /** @type {EventFetcher&lt;T&gt;} */
800
759
  const events = new EventFetcher(blocks)
801
- const headmap = new Map(head.map(cid =&gt; [cid.toString(), cid]))
760
+ const headmap = new Map(head.map((cid) =&gt; [cid.toString(), cid]))
802
761
  &nbsp;
803
762
  // Check if the headmap already includes the event, return head if it does
804
- if (headmap.has(event.toString())) <span class="branch-0 cbranch-no" title="branch not covered" >return head</span>
763
+ if (headmap.has(event.toString())) <span class="branch-0 cbranch-no" title="branch not covered" >return { head, cids: events.cids }</span>
805
764
  &nbsp;
806
765
  // Does event contain the clock?
807
766
  let changed = false
@@ -815,18 +774,18 @@ export async function advance (blocks, head, event) {
815
774
  &nbsp;
816
775
  // If the headmap has been changed, return the new headmap values
817
776
  if (changed) {
818
- return [...headmap.values()]
777
+ return { head: [...headmap.values()], cids: events.cids }
819
778
  }
820
779
  &nbsp;
821
780
  // Does clock contain the event?
822
781
  for (const p of head) {
823
782
  if (await contains(events, p, event)) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
824
- <span class="cstat-no" title="statement not covered" > return head</span>
783
+ <span class="cstat-no" title="statement not covered" > return { head, cids: events.cids }</span>
825
784
  <span class="cstat-no" title="statement not covered" > }</span>
826
785
  }
827
786
  &nbsp;
828
787
  // Return the head concatenated with the new event if it passes both checks
829
- return head.concat(event)
788
+ return { head: head.concat(event), cids: events.cids }
830
789
  }
831
790
  &nbsp;
832
791
  /**
@@ -857,10 +816,11 @@ export class EventBlock extends Block {
857
816
  &nbsp;
858
817
  /** @template T */
859
818
  export class EventFetcher {
860
- /** @param {import('./block').BlockFetcher} blocks */
819
+ /** @param {import('../test/block').BlockFetcher} blocks */
861
820
  constructor (blocks) {
862
821
  /** @private */
863
822
  this._blocks = blocks
823
+ this._cids = new CIDCounter()
864
824
  }
865
825
  &nbsp;
866
826
  /**
@@ -869,9 +829,15 @@ export class EventFetcher {
869
829
  */
870
830
  async get (link) {
871
831
  const block = await this._blocks.get(link)
832
+ this._cids.add({ address: link })
872
833
  if (!block) <span class="branch-0 cbranch-no" title="branch not covered" >throw new Error(`missing block: ${link}`)</span>
873
834
  return decodeEventBlock(block.bytes)
874
835
  }
836
+ &nbsp;
837
+ <span class="fstat-no" title="function not covered" > async all () {</span>
838
+ <span class="cstat-no" title="statement not covered" > await Promise.all([...this._cids])</span>
839
+ <span class="cstat-no" title="statement not covered" > return this._cids</span>
840
+ <span class="cstat-no" title="statement not covered" > }</span>
875
841
  }
876
842
  &nbsp;
877
843
  /**
@@ -914,7 +880,7 @@ async function contains (events, a, b) {
914
880
  if (link.toString() === b.toString()) return true
915
881
  // if any of b's parents are this link, then b cannot exist in any of the
916
882
  // tree below, since that would create a cycle.
917
- if (bevent.parents.some(p =&gt; link.toString() === p.toString())) continue
883
+ if (bevent.parents.some((p) =&gt; link.toString() === p.toString())) continue
918
884
  const { value: event } = await events.get(link)
919
885
  links.push(...event.parents)
920
886
  }
@@ -923,17 +889,17 @@ async function contains (events, a, b) {
923
889
  &nbsp;
924
890
  /**
925
891
  * @template T
926
- * @param {import('./block').BlockFetcher} blocks Block storage.
892
+ * @param {import('../test/block').BlockFetcher} blocks Block storage.
927
893
  * @param {EventLink&lt;T&gt;[]} head
928
894
  * @param {object} [options]
929
895
  * @param {(b: EventBlockView&lt;T&gt;) =&gt; string} [options.renderNodeLabel]
930
896
  */
931
897
  export <span class="fstat-no" title="function not covered" >async function * vis (blocks, head, options = {}) {</span>
932
- <span class="cstat-no" title="statement not covered" > const renderNodeLabel = options.renderNodeLabel ?? (b =&gt; (b.value.data.value))</span>
898
+ <span class="cstat-no" title="statement not covered" > const renderNodeLabel = options.renderNodeLabel ?? ((b) =&gt; b.value.data.value)</span>
933
899
  <span class="cstat-no" title="statement not covered" > const events = new EventFetcher(blocks)</span>
934
900
  <span class="cstat-no" title="statement not covered" > yield 'digraph clock {'</span>
935
901
  <span class="cstat-no" title="statement not covered" > yield ' node [shape=point fontname="Courier"]; head;'</span>
936
- <span class="cstat-no" title="statement not covered" > const hevents = await Promise.all(head.map(link =&gt; events.get(link)))</span>
902
+ <span class="cstat-no" title="statement not covered" > const hevents = await Promise.all(head.map((link) =&gt; events.get(link)))</span>
937
903
  <span class="cstat-no" title="statement not covered" > const links = []</span>
938
904
  <span class="cstat-no" title="statement not covered" > const nodes = new Set()</span>
939
905
  <span class="cstat-no" title="statement not covered" > for (const e of hevents) {</span>
@@ -961,46 +927,22 @@ export <span class="fstat-no" title="function not covered" >async function * vis
961
927
  <span class="cstat-no" title="statement not covered" >}</span>
962
928
  &nbsp;
963
929
  export async function findEventsToSync (blocks, head) {
964
- const toSync = await findUnknownSortedEvents(blocks, head, await findCommonAncestorWithSortedEvents(blocks, head))
965
- return toSync
966
- }
967
- &nbsp;
968
- export async function findUnknownSortedEvents (blocks, children, { ancestor, sorted }) {
969
930
  const events = new EventFetcher(blocks)
970
- // const childrenCids = children.map(c =&gt; c.toString())
971
- // const lowerEvent = sorted.find(({ cid }) =&gt; childrenCids.includes(cid.toString()))
972
- // const knownAncestor = await findCommonAncestor(events, [lowerEvent.cid]) // should this be [lowerEvent.cid] ?
973
- // const knownAncestor = await findCommonAncestor(events, [...children]) // should this be [lowerEvent.cid] ?
974
- // console.x('already knownAncestor', knownAncestor.toString() === ancestor.toString(),
975
- // (await (await decodeEventBlock((await blocks.get(knownAncestor)).bytes)).value.data?.value), knownAncestor
976
- // )
977
- &nbsp;
978
- const matchHead = [ancestor]
979
- const unknownSorted = await asyncFilter(sorted, async (uks) =&gt; {
980
- for (const ev of matchHead) {
981
- const isIn = await contains(events, ev, uks.cid)
982
- if (isIn) return false
983
- }
984
- return true
985
- })
986
- // console.x('unknownSorted contains', unknownSorted.length, sorted.length)
987
- return unknownSorted
931
+ const { ancestor, sorted } = await findCommonAncestorWithSortedEvents(events, head)
932
+ const toSync = await asyncFilter(sorted, async (uks) =&gt; !(await contains(events, ancestor, uks.cid)))
933
+ return { cids: events.cids, events: toSync }
988
934
  }
989
935
  &nbsp;
990
- const asyncFilter = async (arr, predicate) =&gt; Promise.all(arr.map(predicate))
991
- .then((results) =&gt; arr.filter((_v, index) =&gt; results[index]))
992
- &nbsp;
993
- export async function findCommonAncestorWithSortedEvents (blocks, children) {
994
- const events = new EventFetcher(blocks)
936
+ const asyncFilter = async (arr, predicate) =&gt;
937
+ Promise.all(arr.map(predicate)).then((results) =&gt; arr.filter((_v, index) =&gt; results[index]))
995
938
  &nbsp;
939
+ export async function findCommonAncestorWithSortedEvents (events, children) {
996
940
  const ancestor = await findCommonAncestor(events, children)
997
941
  if (!ancestor) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
998
942
  <span class="cstat-no" title="statement not covered" > throw new Error('failed to find common ancestor event')</span>
999
943
  <span class="cstat-no" title="statement not covered" > }</span>
1000
944
  // Sort the events by their sequence number
1001
945
  const sorted = await findSortedEvents(events, children, ancestor)
1002
- // console.x('ancstor', ancestor, (await decodeEventBlock((await blocks.get(ancestor)).bytes)).value.data?.value)
1003
- // sorted.forEach(({ cid, value }) =&gt; console.x('xsorted', cid, value.data.value))
1004
946
  return { ancestor, sorted }
1005
947
  }
1006
948
  &nbsp;
@@ -1035,9 +977,7 @@ async function findCommonAncestor (events, children) {
1035
977
  async function findAncestorCandidate (events, root) {
1036
978
  const { value: event } = await events.get(root)
1037
979
  if (!event.parents.length) return root
1038
- return event.parents.length === 1
1039
- ? event.parents[0]
1040
- : findCommonAncestor(events, event.parents)
980
+ return event.parents.length === 1 ? event.parents[0] : findCommonAncestor(events, event.parents)
1041
981
  }
1042
982
  &nbsp;
1043
983
  /**
@@ -1072,6 +1012,7 @@ async function findSortedEvents (events, head, tail) {
1072
1012
  const all = await Promise.all(head.map((h) =&gt; findEvents(events, h, tail)))
1073
1013
  for (const arr of all) {
1074
1014
  for (const { event, depth } of arr) {
1015
+ // console.log('event value', event.value.data.value)
1075
1016
  const info = weights.get(event.cid.toString())
1076
1017
  if (info) {
1077
1018
  info.weight += depth
@@ -1096,9 +1037,7 @@ async function findSortedEvents (events, head, tail) {
1096
1037
  // sort by weight, and by CID within weight
1097
1038
  const sorted = Array.from(buckets)
1098
1039
  .sort((a, b) =&gt; b[0] - a[0])
1099
- .flatMap(([, es]) =&gt;
1100
- es.sort((a, b) =&gt; (String(a.cid) &lt; String(b.cid) ? -1 : 1))
1101
- )
1040
+ .flatMap(([, es]) =&gt; es.sort((a, b) =&gt; (String(a.cid) &lt; String(b.cid) ? -1 : 1)))
1102
1041
  // console.log('sorted', sorted.map(s =&gt; s.value.data.value))
1103
1042
  return sorted
1104
1043
  }
@@ -1114,9 +1053,7 @@ async function findEvents (events, start, end, depth = 0) {
1114
1053
  const acc = [{ event, depth }]
1115
1054
  const { parents } = event.value
1116
1055
  if (parents.length === 1 &amp;&amp; String(parents[0]) === String(end)) return acc
1117
- const rest = await Promise.all(
1118
- parents.map((p) =&gt; findEvents(events, p, end, depth + 1))
1119
- )
1056
+ const rest = await Promise.all(parents.map((p) =&gt; findEvents(events, p, end, depth + 1)))
1120
1057
  return acc.concat(...rest)
1121
1058
  }
1122
1059
  &nbsp;</pre></td></tr></table></pre>
@@ -1126,7 +1063,7 @@ async function findEvents (events, start, end, depth = 0) {
1126
1063
  <div class='footer quiet pad2 space-top1 center small'>
1127
1064
  Code coverage generated by
1128
1065
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1129
- at 2023-03-06T23:55:04.435Z
1066
+ at 2023-04-01T18:16:45.716Z
1130
1067
  </div>
1131
1068
  <script src="prettify.js"></script>
1132
1069
  <script>