@fireproof/core 0.0.7 → 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.
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">85.71% </span>
26
+ <span class="strong">87.22% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>174/203</span>
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'>26/30</span>
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">88.88% </span>
40
+ <span class="strong">90.9% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>8/9</span>
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">85.71% </span>
47
+ <span class="strong">87.22% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>174/203</span>
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></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
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">&nbsp;</span>
311
381
  <span class="cline-any cline-no">&nbsp;</span>
312
- <span class="cline-any cline-no">&nbsp;</span>
313
- <span class="cline-any cline-no">&nbsp;</span>
314
- <span class="cline-any cline-no">&nbsp;</span>
315
- <span class="cline-any cline-no">&nbsp;</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">18x</span>
374
- <span class="cline-any cline-yes">18x</span>
375
- <span class="cline-any cline-yes">18x</span>
376
- <span class="cline-any cline-yes">18x</span>
377
- <span class="cline-any cline-yes">18x</span>
378
- <span class="cline-any cline-yes">18x</span>
379
- <span class="cline-any cline-yes">18x</span>
380
- <span class="cline-any cline-no">&nbsp;</span>
381
- <span class="cline-any cline-no">&nbsp;</span>
382
- <span class="cline-any cline-no">&nbsp;</span>
383
- <span class="cline-any cline-no">&nbsp;</span>
384
- <span class="cline-any cline-no">&nbsp;</span>
385
- <span class="cline-any cline-no">&nbsp;</span>
386
- <span class="cline-any cline-no">&nbsp;</span>
387
- <span class="cline-any cline-no">&nbsp;</span>
388
- <span class="cline-any cline-no">&nbsp;</span>
389
- <span class="cline-any cline-no">&nbsp;</span>
390
- <span class="cline-any cline-no">&nbsp;</span>
391
- <span class="cline-any cline-no">&nbsp;</span>
392
- <span class="cline-any cline-no">&nbsp;</span>
393
- <span class="cline-any cline-no">&nbsp;</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">&nbsp;</span>
395
431
  <span class="cline-any cline-no">&nbsp;</span>
396
432
  <span class="cline-any cline-no">&nbsp;</span>
397
433
  <span class="cline-any cline-no">&nbsp;</span>
398
434
  <span class="cline-any cline-no">&nbsp;</span>
399
435
  <span class="cline-any cline-no">&nbsp;</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">17x</span>
460
- <span class="cline-any cline-yes">17x</span>
461
- <span class="cline-any cline-yes">17x</span>
462
- <span class="cline-any cline-yes">17x</span>
463
- <span class="cline-any cline-yes">17x</span>
464
- <span class="cline-any cline-yes">17x</span>
465
- <span class="cline-any cline-yes">17x</span>
466
- <span class="cline-any cline-yes">17x</span>
467
- <span class="cline-any cline-yes">17x</span>
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">&nbsp;</span>
528
+ <span class="cline-any cline-no">&nbsp;</span>
529
+ <span class="cline-any cline-no">&nbsp;</span>
530
+ <span class="cline-any cline-no">&nbsp;</span>
531
+ <span class="cline-any cline-no">&nbsp;</span>
532
+ <span class="cline-any cline-no">&nbsp;</span>
533
+ <span class="cline-any cline-no">&nbsp;</span>
534
+ <span class="cline-any cline-no">&nbsp;</span>
535
+ <span class="cline-any cline-no">&nbsp;</span>
536
+ <span class="cline-any cline-no">&nbsp;</span>
537
+ <span class="cline-any cline-no">&nbsp;</span>
538
+ <span class="cline-any cline-no">&nbsp;</span>
539
+ <span class="cline-any cline-no">&nbsp;</span>
468
540
  <span class="cline-any cline-no">&nbsp;</span>
469
541
  <span class="cline-any cline-no">&nbsp;</span>
470
542
  <span class="cline-any cline-no">&nbsp;</span>
471
- <span class="cline-any cline-yes">17x</span>
543
+ <span class="cline-any cline-no">&nbsp;</span>
544
+ <span class="cline-any cline-no">&nbsp;</span>
545
+ <span class="cline-any cline-no">&nbsp;</span>
546
+ <span class="cline-any cline-no">&nbsp;</span>
547
+ <span class="cline-any cline-no">&nbsp;</span>
548
+ <span class="cline-any cline-no">&nbsp;</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">&nbsp;</span>
601
+ <span class="cline-any cline-no">&nbsp;</span>
602
+ <span class="cline-any cline-no">&nbsp;</span>
603
+ <span class="cline-any cline-no">&nbsp;</span>
604
+ <span class="cline-any cline-no">&nbsp;</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">&nbsp;</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 as compare } from 'prolly-trees/utils'
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
  &nbsp;
482
625
  const ALWAYS_REBUILD = true // todo: remove this
483
626
  &nbsp;
484
- const makeGetBlock = (blocks) =&gt; async (address) =&gt; {
485
- const { cid, bytes } = await blocks.get(address)
486
- return createBlock({ cid, bytes, hasher, codec })
627
+ // const arrayCompare = (a, b) =&gt; {
628
+ // if (Array.isArray(a) &amp;&amp; Array.isArray(b)) {
629
+ // const len = Math.min(a.length, b.length)
630
+ // for (let i = 0; i &lt; 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
+ &nbsp;
642
+ const compare = (a, b) =&gt; {
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
+ &nbsp;
650
+ const refCompare = (aRef, bRef) =&gt; {
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
+ &nbsp;
658
+ const opts = { cache, chunker: bf(3), codec, hasher, compare }
659
+ &nbsp;
488
660
  const makeDoc = ({ key, value }) =&gt; ({ _id: key, ...value })
489
661
  &nbsp;
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
+ &nbsp;
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
+ &nbsp;
490
680
  /**
491
681
  * Transforms a set of changes to DbIndex entries using a map function.
492
682
  *
493
- * @param {Array&lt;{ key: string, value: import('./link').AnyLink, del?: boolean }&gt;} changes
683
+ * @param {ChangeEvent[]} changes
494
684
  * @param {Function} mapFun
495
- * @returns {Array&lt;{ key: [string, string], value: any }&gt;} The DbIndex entries generated by the map function.
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) =&gt; {
499
690
  const indexEntries = []
@@ -510,11 +701,11 @@ const indexEntriesForChanges = (changes, mapFun) =&gt; {
510
701
  }
511
702
  &nbsp;
512
703
  const indexEntriesForOldChanges = <span class="fstat-no" title="function not covered" >async (blocks, byIDindexRoot, ids, mapFun) =&gt; {</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" > // console.trace('ids', ids)</span>
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.result</span>
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
  &nbsp;
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 {import('./fireproof').Fireproof} database - The Fireproof database instance to DbIndex.
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 {import('./fireproof').Fireproof}
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
- this.indexRoot = null
733
+ &nbsp;
734
+ this.dbIndexRoot = null
735
+ this.dbIndex = null
736
+ &nbsp;
543
737
  this.byIDindexRoot = null
544
738
  this.dbHead = null
739
+ &nbsp;
740
+ this.instanceId = this.database.instanceId + `.DbIndex.${Math.random().toString(36).substring(2, 7)}`
741
+ &nbsp;
742
+ this.updateIndexPromise = null
545
743
  }
744
+ &nbsp;
745
+ /**
746
+ * JSDoc for Query type.
747
+ * @typedef {Object} DbQuery
748
+ * @property {string[]} [range] - The range to query.
749
+ * @memberof DbIndex
750
+ */
546
751
  &nbsp;
547
752
  /**
548
753
  * Query object can have {range}
549
- * @param {Object&lt;{range:[startKey, endKey]}&gt;} query - the query range to use
550
- * @param {CID} [root] - an optional root to query a snapshot
754
+ * @param {DbQuery} query - the query range to use
551
755
  * @returns {Promise&lt;{rows: Array&lt;{id: string, key: string, value: any}&gt;}&gt;}
552
756
  * @memberof DbIndex
553
757
  * @instance
554
758
  */
555
- async query (query, root = null) {
556
- if (!root) {
557
- // pass a root to query a snapshot
558
- await doTransaction('#updateIndex', this.database.blocks, async (blocks) =&gt; {
559
- await this.#updateIndex(blocks)
560
- })
561
- }
562
- const response = await doIndexQuery(this.database.blocks, root || this.indexRoot, query)
759
+ async query (query) {
760
+ // if (!root) {
761
+ // pass a root to query a snapshot
762
+ await doTransaction('#updateIndex', this.database.blocks, async (blocks) =&gt; {
763
+ await this.#updateIndex(blocks)
764
+ })
765
+ // }
766
+ const response = await doIndexQuery(this.database.blocks, this.dbIndexRoot, this.dbIndex, query)
563
767
  return {
564
- // TODO fix this naming upstream in prolly/db-DbIndex
565
- // todo maybe this is a hint about why deletes arent working?
566
- rows: response.result.map(({ id, key, row }) =&gt; ({ id: key, key: charwise.decode(id), value: 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 }) =&gt; {
771
+ // console.log('query', id, key, row)
772
+ return ({ id, key: charwise.decode(key), value: row })
773
+ })
567
774
  }
568
775
  }
569
776
  &nbsp;
@@ -572,105 +779,111 @@ export default class DbIndex {
572
779
  * @private
573
780
  * @returns {Promise&lt;void&gt;}
574
781
  */
782
+ &nbsp;
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(() =&gt; { this.updateIndexPromise = null })
787
+ return this.updateIndexPromise
788
+ }
789
+ &nbsp;
790
+ async #innerUpdateIndex (blocks) {
791
+ const callTag = Math.random().toString(36).substring(4)
792
+ console.log(`#updateIndex ${callTag} &gt;`, 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.indexRoot = null // hack
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 oldIndexEntries = (</span>
584
- <span class="cstat-no" title="statement not covered" > await indexEntriesForOldChanges(</span>
585
- <span class="cstat-no" title="statement not covered" > blocks,</span>
586
- <span class="cstat-no" title="statement not covered" > this.byIDindexRoot,</span>
587
- <span class="cstat-no" title="statement not covered" > result.rows.map(({ key }) =&gt; key),</span>
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 }) =&gt; 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" > // .map((key) =&gt; ({ key, value: null })) // tombstone just adds more rows...</span>
592
- <span class="cstat-no" title="statement not covered" > .map((key) =&gt; ({ key, del: true })) // should be this</span>
593
- <span class="cstat-no" title="statement not covered" > // .map((key) =&gt; ({ key: undefined, del: true })) // todo why does this work?</span>
807
+ <span class="cstat-no" title="statement not covered" > const oldIndexEntries = oldChangeEntries.result.map((key) =&gt; ({ 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" > this.indexRoot = await bulkIndex(blocks, this.indexRoot, oldIndexEntries, opts)</span>
596
- <span class="cstat-no" title="statement not covered" > // console.x('oldIndexEntries', oldIndexEntries)</span>
597
- <span class="cstat-no" title="statement not covered" > // [ { key: ['b', 1], del: true } ]</span>
598
- <span class="cstat-no" title="statement not covered" > // [ { key: [ 5, 'x' ], del: true } ]</span>
599
- <span class="cstat-no" title="statement not covered" > // for now we just let the by id DbIndex grow and then don't use the results...</span>
600
- <span class="cstat-no" title="statement not covered" > // const removeByIdIndexEntries = oldIndexEntries.map(({ key }) =&gt; ({ key: key[1], del: true }))</span>
601
- <span class="cstat-no" title="statement not covered" > // this.byIDindexRoot = await bulkIndex(blocks, this.byIDindexRoot, removeByIdIndexEntries, opts)</span>
812
+ <span class="cstat-no" title="statement not covered" > const removeByIdIndexEntries = oldIndexEntries.map(({ key }) =&gt; ({ 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 }) =&gt; ({ 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
- this.indexRoot = await bulkIndex(blocks, this.indexRoot, indexEntries, opts)
609
- // console.log('did DbIndex', this.indexRoot)
825
+ &nbsp;
826
+ const byIdIndexEntries = indexEntries.map(({ key }) =&gt; ({ 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
+ &nbsp;
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} &lt;`, this.instanceId, callTag, this.dbHead?.toString(), this.dbIndexRoot?.cid.toString(), this.byIDindexRoot?.cid.toString())
611
836
  }
612
- &nbsp;
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
  &nbsp;
619
839
  /**
620
840
  * Update the DbIndex with the given entries
621
841
  * @param {Blockstore} blocks
622
- * @param {import('multiformats/block').Block} inRoot
623
- * @param {import('prolly-trees/db-DbIndex').IndexEntry[]} indexEntries
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
- if (!inRoot) {
631
- // make a new DbIndex
632
- &nbsp;
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
- inRoot = block
856
+ returnRootBlock = block
857
+ returnNode = node
637
858
  }
638
- // console.x('created DbIndex', inRoot.cid)
639
- return inRoot
640
859
  } else {
641
- // load existing DbIndex
642
- // console.x('loading DbIndex', inRoot.cid)
643
- const DbIndex = await load({ cid: inRoot.cid, get: getBlock, ...opts })
644
- // console.log('new indexEntries', indexEntries)
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
- // console.x('updated DbIndex', root.block.cid)
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
  &nbsp;
654
- /**
655
- * Query the DbIndex for the given range
656
- * @param {Blockstore} blocks
657
- * @param {import('multiformats/block').Block} inRoot
658
- * @param {import('prolly-trees/db-DbIndex').Query} query
659
- * @returns {Promise&lt;import('prolly-trees/db-DbIndex').QueryResult&gt;}
660
- * @private
661
- **/
662
- async function doIndexQuery (blocks, root, query) {
663
- const cid = root &amp;&amp; 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 &amp;&amp; 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) =&gt; charwise.encode(key))
669
- return DbIndex.range(...encodedRange)
670
- }<span class="branch-0 cbranch-no" title="branch not covered" > else if (query.key) {</span>
671
- <span class="cstat-no" title="statement not covered" > const encodedKey = charwise.encode(query.key)</span>
672
- <span class="cstat-no" title="statement not covered" > return DbIndex.get(encodedKey)</span>
673
- <span class="cstat-no" title="statement not covered" > }</span>
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
  &nbsp;</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-03-06T23:55:04.435Z
895
+ at 2023-04-01T18:16:45.716Z
683
896
  </div>
684
897
  <script src="prettify.js"></script>
685
898
  <script>