@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,16 +23,16 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">97.02% </span>
26
+ <span class="strong">94.91% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>163/168</span>
28
+ <span class='fraction'>112/118</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">90% </span>
33
+ <span class="strong">86.36% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>18/20</span>
35
+ <span class='fraction'>19/22</span>
36
36
  </div>
37
37
 
38
38
 
@@ -44,9 +44,9 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">97.02% </span>
47
+ <span class="strong">94.91% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>163/168</span>
49
+ <span class='fraction'>112/118</span>
50
50
  </div>
51
51
 
52
52
 
@@ -181,62 +181,25 @@
181
181
  <a name='L116'></a><a href='#L116'>116</a>
182
182
  <a name='L117'></a><a href='#L117'>117</a>
183
183
  <a name='L118'></a><a href='#L118'>118</a>
184
- <a name='L119'></a><a href='#L119'>119</a>
185
- <a name='L120'></a><a href='#L120'>120</a>
186
- <a name='L121'></a><a href='#L121'>121</a>
187
- <a name='L122'></a><a href='#L122'>122</a>
188
- <a name='L123'></a><a href='#L123'>123</a>
189
- <a name='L124'></a><a href='#L124'>124</a>
190
- <a name='L125'></a><a href='#L125'>125</a>
191
- <a name='L126'></a><a href='#L126'>126</a>
192
- <a name='L127'></a><a href='#L127'>127</a>
193
- <a name='L128'></a><a href='#L128'>128</a>
194
- <a name='L129'></a><a href='#L129'>129</a>
195
- <a name='L130'></a><a href='#L130'>130</a>
196
- <a name='L131'></a><a href='#L131'>131</a>
197
- <a name='L132'></a><a href='#L132'>132</a>
198
- <a name='L133'></a><a href='#L133'>133</a>
199
- <a name='L134'></a><a href='#L134'>134</a>
200
- <a name='L135'></a><a href='#L135'>135</a>
201
- <a name='L136'></a><a href='#L136'>136</a>
202
- <a name='L137'></a><a href='#L137'>137</a>
203
- <a name='L138'></a><a href='#L138'>138</a>
204
- <a name='L139'></a><a href='#L139'>139</a>
205
- <a name='L140'></a><a href='#L140'>140</a>
206
- <a name='L141'></a><a href='#L141'>141</a>
207
- <a name='L142'></a><a href='#L142'>142</a>
208
- <a name='L143'></a><a href='#L143'>143</a>
209
- <a name='L144'></a><a href='#L144'>144</a>
210
- <a name='L145'></a><a href='#L145'>145</a>
211
- <a name='L146'></a><a href='#L146'>146</a>
212
- <a name='L147'></a><a href='#L147'>147</a>
213
- <a name='L148'></a><a href='#L148'>148</a>
214
- <a name='L149'></a><a href='#L149'>149</a>
215
- <a name='L150'></a><a href='#L150'>150</a>
216
- <a name='L151'></a><a href='#L151'>151</a>
217
- <a name='L152'></a><a href='#L152'>152</a>
218
- <a name='L153'></a><a href='#L153'>153</a>
219
- <a name='L154'></a><a href='#L154'>154</a>
220
- <a name='L155'></a><a href='#L155'>155</a>
221
- <a name='L156'></a><a href='#L156'>156</a>
222
- <a name='L157'></a><a href='#L157'>157</a>
223
- <a name='L158'></a><a href='#L158'>158</a>
224
- <a name='L159'></a><a href='#L159'>159</a>
225
- <a name='L160'></a><a href='#L160'>160</a>
226
- <a name='L161'></a><a href='#L161'>161</a>
227
- <a name='L162'></a><a href='#L162'>162</a>
228
- <a name='L163'></a><a href='#L163'>163</a>
229
- <a name='L164'></a><a href='#L164'>164</a>
230
- <a name='L165'></a><a href='#L165'>165</a>
231
- <a name='L166'></a><a href='#L166'>166</a>
232
- <a name='L167'></a><a href='#L167'>167</a>
233
- <a name='L168'></a><a href='#L168'>168</a>
234
- <a name='L169'></a><a href='#L169'>169</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
184
+ <a name='L119'></a><a href='#L119'>119</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
235
185
  <span class="cline-any cline-yes">1x</span>
236
186
  <span class="cline-any cline-yes">1x</span>
237
187
  <span class="cline-any cline-yes">1x</span>
238
188
  <span class="cline-any cline-yes">1x</span>
239
189
  <span class="cline-any cline-yes">1x</span>
190
+ <span class="cline-any cline-yes">43x</span>
191
+ <span class="cline-any cline-yes">43x</span>
192
+ <span class="cline-any cline-yes">43x</span>
193
+ <span class="cline-any cline-yes">43x</span>
194
+ <span class="cline-any cline-yes">43x</span>
195
+ <span class="cline-any cline-yes">43x</span>
196
+ <span class="cline-any cline-yes">43x</span>
197
+ <span class="cline-any cline-yes">43x</span>
198
+ <span class="cline-any cline-yes">43x</span>
199
+ <span class="cline-any cline-yes">43x</span>
200
+ <span class="cline-any cline-yes">43x</span>
201
+ <span class="cline-any cline-yes">43x</span>
202
+ <span class="cline-any cline-yes">43x</span>
240
203
  <span class="cline-any cline-yes">1x</span>
241
204
  <span class="cline-any cline-yes">1x</span>
242
205
  <span class="cline-any cline-yes">1x</span>
@@ -244,20 +207,6 @@
244
207
  <span class="cline-any cline-yes">1x</span>
245
208
  <span class="cline-any cline-yes">1x</span>
246
209
  <span class="cline-any cline-yes">1x</span>
247
- <span class="cline-any cline-yes">28x</span>
248
- <span class="cline-any cline-yes">28x</span>
249
- <span class="cline-any cline-yes">28x</span>
250
- <span class="cline-any cline-yes">28x</span>
251
- <span class="cline-any cline-yes">28x</span>
252
- <span class="cline-any cline-yes">28x</span>
253
- <span class="cline-any cline-yes">28x</span>
254
- <span class="cline-any cline-yes">28x</span>
255
- <span class="cline-any cline-yes">28x</span>
256
- <span class="cline-any cline-yes">28x</span>
257
- <span class="cline-any cline-yes">28x</span>
258
- <span class="cline-any cline-yes">28x</span>
259
- <span class="cline-any cline-yes">28x</span>
260
- <span class="cline-any cline-yes">28x</span>
261
210
  <span class="cline-any cline-yes">1x</span>
262
211
  <span class="cline-any cline-yes">1x</span>
263
212
  <span class="cline-any cline-yes">1x</span>
@@ -268,63 +217,56 @@
268
217
  <span class="cline-any cline-yes">1x</span>
269
218
  <span class="cline-any cline-yes">1x</span>
270
219
  <span class="cline-any cline-yes">1x</span>
271
- <span class="cline-any cline-yes">1x</span>
272
- <span class="cline-any cline-yes">1x</span>
273
- <span class="cline-any cline-yes">28x</span>
274
- <span class="cline-any cline-yes">28x</span>
275
- <span class="cline-any cline-yes">28x</span>
276
- <span class="cline-any cline-yes">1x</span>
277
- <span class="cline-any cline-yes">1x</span>
278
- <span class="cline-any cline-yes">1x</span>
279
- <span class="cline-any cline-yes">54x</span>
280
- <span class="cline-any cline-yes">54x</span>
281
- <span class="cline-any cline-yes">54x</span>
282
- <span class="cline-any cline-yes">54x</span>
283
- <span class="cline-any cline-yes">54x</span>
284
- <span class="cline-any cline-yes">1x</span>
285
- <span class="cline-any cline-yes">28x</span>
286
- <span class="cline-any cline-yes">28x</span>
287
- <span class="cline-any cline-yes">28x</span>
288
- <span class="cline-any cline-yes">28x</span>
289
- <span class="cline-any cline-yes">136x</span>
290
- <span class="cline-any cline-yes">136x</span>
291
- <span class="cline-any cline-yes">26x</span>
292
- <span class="cline-any cline-yes">26x</span>
293
- <span class="cline-any cline-yes">1x</span>
294
- <span class="cline-any cline-yes">1x</span>
295
- <span class="cline-any cline-yes">1x</span>
296
- <span class="cline-any cline-yes">1x</span>
297
- <span class="cline-any cline-yes">1x</span>
298
- <span class="cline-any cline-yes">1x</span>
299
- <span class="cline-any cline-yes">1x</span>
300
- <span class="cline-any cline-yes">1x</span>
301
- <span class="cline-any cline-yes">1x</span>
302
- <span class="cline-any cline-yes">1x</span>
303
- <span class="cline-any cline-yes">26x</span>
304
- <span class="cline-any cline-yes">26x</span>
305
- <span class="cline-any cline-yes">136x</span>
306
- <span class="cline-any cline-yes">136x</span>
307
- <span class="cline-any cline-yes">28x</span>
308
- <span class="cline-any cline-yes">28x</span>
309
- <span class="cline-any cline-yes">28x</span>
310
- <span class="cline-any cline-yes">28x</span>
311
- <span class="cline-any cline-yes">28x</span>
312
- <span class="cline-any cline-yes">28x</span>
313
- <span class="cline-any cline-yes">28x</span>
314
- <span class="cline-any cline-yes">134x</span>
315
- <span class="cline-any cline-yes">134x</span>
316
- <span class="cline-any cline-yes">134x</span>
317
- <span class="cline-any cline-yes">134x</span>
318
- <span class="cline-any cline-yes">134x</span>
319
- <span class="cline-any cline-yes">134x</span>
320
- <span class="cline-any cline-yes">134x</span>
321
- <span class="cline-any cline-yes">134x</span>
322
- <span class="cline-any cline-yes">134x</span>
323
- <span class="cline-any cline-yes">134x</span>
324
- <span class="cline-any cline-yes">134x</span>
325
- <span class="cline-any cline-yes">134x</span>
326
- <span class="cline-any cline-yes">134x</span>
327
- <span class="cline-any cline-yes">134x</span>
220
+ <span class="cline-any cline-no">&nbsp;</span>
221
+ <span class="cline-any cline-yes">43x</span>
222
+ <span class="cline-any cline-yes">43x</span>
223
+ <span class="cline-any cline-yes">43x</span>
224
+ <span class="cline-any cline-yes">1x</span>
225
+ <span class="cline-any cline-yes">1x</span>
226
+ <span class="cline-any cline-yes">1x</span>
227
+ <span class="cline-any cline-yes">51x</span>
228
+ <span class="cline-any cline-yes">51x</span>
229
+ <span class="cline-any cline-yes">51x</span>
230
+ <span class="cline-any cline-yes">51x</span>
231
+ <span class="cline-any cline-yes">51x</span>
232
+ <span class="cline-any cline-yes">1x</span>
233
+ <span class="cline-any cline-yes">43x</span>
234
+ <span class="cline-any cline-yes">43x</span>
235
+ <span class="cline-any cline-yes">43x</span>
236
+ <span class="cline-any cline-yes">43x</span>
237
+ <span class="cline-any cline-yes">190x</span>
238
+ <span class="cline-any cline-yes">41x</span>
239
+ <span class="cline-any cline-yes">41x</span>
240
+ <span class="cline-any cline-yes">2x</span>
241
+ <span class="cline-any cline-yes">2x</span>
242
+ <span class="cline-any cline-yes">2x</span>
243
+ <span class="cline-any cline-yes">2x</span>
244
+ <span class="cline-any cline-yes">2x</span>
245
+ <span class="cline-any cline-yes">2x</span>
246
+ <span class="cline-any cline-yes">2x</span>
247
+ <span class="cline-any cline-yes">2x</span>
248
+ <span class="cline-any cline-yes">2x</span>
249
+ <span class="cline-any cline-yes">2x</span>
250
+ <span class="cline-any cline-yes">41x</span>
251
+ <span class="cline-any cline-yes">41x</span>
252
+ <span class="cline-any cline-yes">190x</span>
253
+ <span class="cline-any cline-yes">190x</span>
254
+ <span class="cline-any cline-yes">43x</span>
255
+ <span class="cline-any cline-yes">43x</span>
256
+ <span class="cline-any cline-yes">43x</span>
257
+ <span class="cline-any cline-yes">43x</span>
258
+ <span class="cline-any cline-yes">43x</span>
259
+ <span class="cline-any cline-yes">43x</span>
260
+ <span class="cline-any cline-yes">43x</span>
261
+ <span class="cline-any cline-yes">187x</span>
262
+ <span class="cline-any cline-yes">187x</span>
263
+ <span class="cline-any cline-yes">187x</span>
264
+ <span class="cline-any cline-yes">187x</span>
265
+ <span class="cline-any cline-yes">187x</span>
266
+ <span class="cline-any cline-yes">187x</span>
267
+ <span class="cline-any cline-yes">187x</span>
268
+ <span class="cline-any cline-yes">187x</span>
269
+ <span class="cline-any cline-yes">187x</span>
328
270
  <span class="cline-any cline-yes">1x</span>
329
271
  <span class="cline-any cline-no">&nbsp;</span>
330
272
  <span class="cline-any cline-no">&nbsp;</span>
@@ -333,14 +275,14 @@
333
275
  <span class="cline-any cline-yes">1x</span>
334
276
  <span class="cline-any cline-yes">1x</span>
335
277
  <span class="cline-any cline-yes">1x</span>
336
- <span class="cline-any cline-yes">134x</span>
337
- <span class="cline-any cline-yes">133x</span>
338
- <span class="cline-any cline-yes">133x</span>
339
- <span class="cline-any cline-yes">134x</span>
340
- <span class="cline-any cline-yes">28x</span>
341
- <span class="cline-any cline-yes">28x</span>
342
- <span class="cline-any cline-yes">28x</span>
343
- <span class="cline-any cline-yes">28x</span>
278
+ <span class="cline-any cline-yes">187x</span>
279
+ <span class="cline-any cline-yes">186x</span>
280
+ <span class="cline-any cline-yes">186x</span>
281
+ <span class="cline-any cline-yes">187x</span>
282
+ <span class="cline-any cline-yes">43x</span>
283
+ <span class="cline-any cline-yes">43x</span>
284
+ <span class="cline-any cline-yes">43x</span>
285
+ <span class="cline-any cline-yes">43x</span>
344
286
  <span class="cline-any cline-yes">1x</span>
345
287
  <span class="cline-any cline-yes">1x</span>
346
288
  <span class="cline-any cline-yes">1x</span>
@@ -356,65 +298,14 @@
356
298
  <span class="cline-any cline-yes">1x</span>
357
299
  <span class="cline-any cline-yes">1x</span>
358
300
  <span class="cline-any cline-yes">1x</span>
359
- <span class="cline-any cline-yes">28x</span>
360
- <span class="cline-any cline-yes">1x</span>
361
- <span class="cline-any cline-yes">1x</span>
362
- <span class="cline-any cline-yes">1x</span>
363
- <span class="cline-any cline-yes">1x</span>
364
- <span class="cline-any cline-yes">1x</span>
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">1x</span>
370
- <span class="cline-any cline-yes">1x</span>
371
- <span class="cline-any cline-yes">1x</span>
372
- <span class="cline-any cline-yes">1x</span>
373
- <span class="cline-any cline-yes">1x</span>
374
- <span class="cline-any cline-yes">1x</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">1x</span>
378
- <span class="cline-any cline-yes">1x</span>
379
- <span class="cline-any cline-yes">1x</span>
380
- <span class="cline-any cline-yes">1x</span>
381
- <span class="cline-any cline-yes">1x</span>
382
- <span class="cline-any cline-yes">1x</span>
383
- <span class="cline-any cline-yes">1x</span>
384
- <span class="cline-any cline-yes">1x</span>
385
- <span class="cline-any cline-yes">1x</span>
386
- <span class="cline-any cline-yes">1x</span>
387
- <span class="cline-any cline-yes">1x</span>
388
- <span class="cline-any cline-yes">1x</span>
389
- <span class="cline-any cline-yes">1x</span>
390
- <span class="cline-any cline-yes">1x</span>
391
- <span class="cline-any cline-yes">1x</span>
392
- <span class="cline-any cline-yes">1x</span>
393
- <span class="cline-any cline-yes">1x</span>
394
- <span class="cline-any cline-yes">1x</span>
395
- <span class="cline-any cline-yes">1x</span>
396
- <span class="cline-any cline-yes">1x</span>
397
- <span class="cline-any cline-yes">1x</span>
398
- <span class="cline-any cline-yes">1x</span>
399
- <span class="cline-any cline-yes">1x</span>
400
- <span class="cline-any cline-yes">1x</span>
401
- <span class="cline-any cline-yes">1x</span>
301
+ <span class="cline-any cline-yes">43x</span>
402
302
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { CarReader } from '@ipld/car'
403
303
  import { CID } from 'multiformats/cid'
404
304
  import { openDB } from 'idb'
405
305
  import cargoQueue from 'async/cargoQueue.js'
406
306
  &nbsp;
407
- // const sleep = (ms) =&gt; new Promise((resolve) =&gt; setTimeout(resolve, ms))
408
- // let storageSupported = false
409
- // try {
410
- // storageSupported = window.localStorage &amp;&amp; true
411
- // } catch (e) {}
412
- // const sleep = (ms) =&gt; new Promise((resolve) =&gt; setTimeout(resolve, ms))
413
- &nbsp;
414
307
  export default class Valet {
415
- #cars = new Map() // cars by cid
416
- #cidToCar = new Map() // cid to car
417
- #db = null
308
+ idb = null
418
309
  #uploadQueue = null
419
310
  #alreadyEnqueued = new Set()
420
311
  &nbsp;
@@ -424,7 +315,8 @@ export default class Valet {
424
315
  */
425
316
  uploadFunction = null
426
317
  &nbsp;
427
- constructor () {
318
+ constructor (name = 'default') {
319
+ this.name = name
428
320
  this.#uploadQueue = cargoQueue(async (tasks, callback) =&gt; {
429
321
  console.log(
430
322
  'queue worker',
@@ -433,11 +325,17 @@ export default class Valet {
433
325
  )
434
326
  if (this.uploadFunction) {
435
327
  // todo we can coalesce these into a single car file
436
- for (const task of tasks) {
437
- await this.uploadFunction(task.carCid, task.value)
438
- }
328
+ return await this.withDB(async (db) =&gt; {
329
+ for (const task of tasks) {
330
+ await this.uploadFunction(task.carCid, task.value)
331
+ // update the indexedb to mark this car as no longer pending
332
+ const carMeta = await db.get('cidToCar', task.carCid)
333
+ delete carMeta.pending
334
+ await db.put('cidToCar', carMeta)
335
+ }
336
+ })
439
337
  }
440
- callback()
338
+ <span class="cstat-no" title="statement not covered" ><span class="branch-0 cbranch-no" title="branch not covered" > callback()</span></span>
441
339
  })
442
340
  &nbsp;
443
341
  this.#uploadQueue.drain(async () =&gt; {
@@ -454,9 +352,8 @@ export default class Valet {
454
352
  }
455
353
  &nbsp;
456
354
  withDB = async (dbWorkFun) =&gt; {
457
- // if (!storageSupported) return
458
- if (!this.#db) {
459
- this.#db = await openDB('valet', 2, {
355
+ if (!this.idb) {
356
+ this.idb = await openDB(`fp.${this.name}.valet`, 2, {
460
357
  upgrade (db, oldVersion, newVersion, transaction) {
461
358
  if (oldVersion &lt; 1) {
462
359
  db.createObjectStore('cars') // todo use database name
@@ -470,7 +367,7 @@ export default class Valet {
470
367
  }
471
368
  })
472
369
  }
473
- return await dbWorkFun(this.#db)
370
+ return await dbWorkFun(this.idb)
474
371
  }
475
372
  &nbsp;
476
373
  /**
@@ -479,11 +376,6 @@ export default class Valet {
479
376
  * @param {*} value
480
377
  */
481
378
  async parkCar (carCid, value, cids) {
482
- // this.#cars.set(carCid, value)
483
- // for (const cid of cids) {
484
- // this.#cidToCar.set(cid, carCid)
485
- // }
486
- &nbsp;
487
379
  await this.withDB(async (db) =&gt; {
488
380
  const tx = db.transaction(['cars', 'cidToCar'], 'readwrite')
489
381
  await tx.objectStore('cars').put(value, carCid)
@@ -525,48 +417,6 @@ export default class Valet {
525
417
  })
526
418
  }
527
419
  }
528
- &nbsp;
529
- // export class MemoryValet {
530
- // #cars = new Map() // cars by cid
531
- // #cidToCar = new Map() // cid to car
532
- &nbsp;
533
- // /**
534
- // *
535
- // * @param {string} carCid
536
- // * @param {*} value
537
- // */
538
- // async parkCar (carCid, value, cids) {
539
- // this.#cars.set(carCid, value)
540
- // for (const cid of cids) {
541
- // this.#cidToCar.set(cid, carCid)
542
- // }
543
- // }
544
- &nbsp;
545
- // async getBlock (dataCID) {
546
- // return await this.#valetGet(dataCID)
547
- // }
548
- &nbsp;
549
- // /**
550
- // * Internal function to load blocks from persistent storage.
551
- // * Currently it just searches all the cars for the block, but in the future
552
- // * we need to index the block CIDs to the cars, and reference that to find the block.
553
- // * This index will also allow us to use accelerator links for the gateway when needed.
554
- // * It can itself be a prolly tree...
555
- // * @param {string} cid
556
- // * @returns {Promise&lt;Uint8Array|undefined&gt;}
557
- // */
558
- // #valetGet = async (cid) =&gt; {
559
- // const carCid = this.#cidToCar.get(cid)
560
- // if (carCid) {
561
- // const carBytes = this.#cars.get(carCid)
562
- // const reader = await CarReader.fromBytes(carBytes)
563
- // const gotBlock = await reader.get(CID.parse(cid))
564
- // if (gotBlock) {
565
- // return gotBlock.bytes
566
- // }
567
- // }
568
- // }
569
- // }
570
420
  &nbsp;</pre></td></tr></table></pre>
571
421
 
572
422
  <div class='push'></div><!-- for sticky footer -->
@@ -574,7 +424,7 @@ export default class Valet {
574
424
  <div class='footer quiet pad2 space-top1 center small'>
575
425
  Code coverage generated by
576
426
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
577
- at 2023-03-06T23:55:04.435Z
427
+ at 2023-04-01T18:16:45.716Z
578
428
  </div>
579
429
  <script src="prettify.js"></script>
580
430
  <script>
@@ -15,8 +15,6 @@ export const FireproofCtx = createContext<FireproofCtxValue>({
15
15
  ready: false,
16
16
  })
17
17
 
18
-
19
-
20
18
  const inboundSubscriberQueue = new Map()
21
19
  const database = Fireproof.storage()
22
20
  const listener = new Listener(database)
@@ -55,9 +53,13 @@ export function useFireproof(defineDatabaseFn: Function, setupDatabaseFn: Functi
55
53
  console.log("Loading previous database clock. (localStorage.removeItem('fireproof') to reset)")
56
54
  await database.setClock(clock)
57
55
  try {
58
- await database.changesSince()
56
+ const changes = await database.changesSince()
57
+ if (changes.rows.length < 2) {
58
+ console.log('Resetting database')
59
+ throw new Error('Resetting database')
60
+ }
59
61
  } catch (e) {
60
- console.error('Error loading previous database clock.', e)
62
+ console.error(`Error loading previous database clock. ${fp} Resetting.`, e)
61
63
  await database.setClock([])
62
64
  await setupDatabaseFn(database)
63
65
  localSet('fireproof', JSON.stringify(database))
@@ -82,10 +84,9 @@ export function useFireproof(defineDatabaseFn: Function, setupDatabaseFn: Functi
82
84
  const husherMap = new Map()
83
85
  const husher = (id: string, workFn: { (): Promise<any> }, ms: number) => {
84
86
  if (!husherMap.has(id)) {
85
- husherMap.set(
86
- id,
87
- workFn().finally(() => setTimeout(() => husherMap.delete(id), ms))
88
- )
87
+ const start: number = Date.now()
88
+ husherMap.set(id, workFn().finally(() =>
89
+ setTimeout(() => husherMap.delete(id), ms - (Date.now() - start))))
89
90
  }
90
91
  return husherMap.get(id)
91
92
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fireproof/core",
3
- "version": "0.0.6",
3
+ "version": "0.0.8",
4
4
  "description": "Realtime database for IPFS",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -37,7 +37,7 @@
37
37
  "cli-color": "^2.0.3",
38
38
  "idb": "^7.1.1",
39
39
  "multiformats": "^11.0.1",
40
- "prolly-trees": "^0.2.5",
40
+ "prolly-trees": "1.0.3",
41
41
  "sade": "^1.8.1"
42
42
  },
43
43
  "devDependencies": {
@@ -62,12 +62,12 @@
62
62
  },
63
63
  "repository": {
64
64
  "type": "git",
65
- "url": "git+https://github.com/jchris/fireproof.git"
65
+ "url": "git+https://github.com/fireproof-storage/fireproof.git"
66
66
  },
67
67
  "bugs": {
68
- "url": "https://github.com/jchris/fireproof/issues"
68
+ "url": "https://github.com/fireproof-storage/fireproof/issues"
69
69
  },
70
- "homepage": "https://github.com/jchris/fireproof#readme",
70
+ "homepage": "https://github.com/fireproof-storage/fireproof#readme",
71
71
  "workspaces": [
72
72
  "examples/todomvc"
73
73
  ]
package/src/blockstore.js CHANGED
@@ -36,11 +36,15 @@ export default class TransactionBlockstore {
36
36
  /** @type {Map<string, Uint8Array>} */
37
37
  #oldBlocks = new Map()
38
38
 
39
- valet = new Valet() // cars by cid
39
+ valet = null
40
40
 
41
41
  #instanceId = 'blkz.' + Math.random().toString(36).substring(2, 4)
42
42
  #inflightTransactions = new Set()
43
43
 
44
+ constructor (name) {
45
+ this.valet = new Valet(name)
46
+ }
47
+
44
48
  /**
45
49
  * Get a block from the store.
46
50
  *
@@ -51,7 +55,7 @@ export default class TransactionBlockstore {
51
55
  const key = cid.toString()
52
56
  // it is safe to read from the in-flight transactions becauase they are immutable
53
57
  const bytes = await Promise.any([this.#transactionsGet(key), this.commitedGet(key)]).catch((e) => {
54
- console.log('networkGet', cid.toString(), e)
58
+ // console.log('networkGet', cid.toString(), e)
55
59
  return this.networkGet(key)
56
60
  })
57
61
  if (!bytes) throw new Error('Missing block: ' + key)
@@ -79,15 +83,13 @@ export default class TransactionBlockstore {
79
83
  const value = await husher(key, async () => await this.valet.remoteBlockFunction(key))
80
84
  if (value) {
81
85
  // console.log('networkGot: ' + key, value.length)
82
- // dont turn this on until the Nan thing is fixed
83
- // it keep the network blocks in indexedb but lets get the basics solid first
84
86
  doTransaction('networkGot: ' + key, this, async (innerBlockstore) => {
85
87
  await innerBlockstore.put(CID.parse(key), value)
86
88
  })
87
89
  return value
88
90
  }
89
91
  } else {
90
- throw new Error('No remoteBlockFunction')
92
+ return false
91
93
  }
92
94
  }
93
95
 
@@ -111,15 +113,15 @@ export default class TransactionBlockstore {
111
113
  * @yields {AnyBlock}
112
114
  * @returns {AsyncGenerator<AnyBlock>}
113
115
  */
114
- * entries () {
115
- // todo needs transaction blocks?
116
- // for (const [str, bytes] of this.#blocks) {
117
- // yield { cid: parse(str), bytes }
118
- // }
119
- for (const [str, bytes] of this.#oldBlocks) {
120
- yield { cid: parse(str), bytes }
121
- }
122
- }
116
+ // * entries () {
117
+ // // needs transaction blocks?
118
+ // // for (const [str, bytes] of this.#blocks) {
119
+ // // yield { cid: parse(str), bytes }
120
+ // // }
121
+ // for (const [str, bytes] of this.#oldBlocks) {
122
+ // yield { cid: parse(str), bytes }
123
+ // }
124
+ // }
123
125
 
124
126
  /**
125
127
  * Begin a transaction. Ensures the uncommited blocks are empty at the begining.