@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,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>
@@ -53,9 +53,13 @@ export function useFireproof(defineDatabaseFn: Function, setupDatabaseFn: Functi
53
53
  console.log("Loading previous database clock. (localStorage.removeItem('fireproof') to reset)")
54
54
  await database.setClock(clock)
55
55
  try {
56
- 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
+ }
57
61
  } catch (e) {
58
- console.error('Error loading previous database clock.', e)
62
+ console.error(`Error loading previous database clock. ${fp} Resetting.`, e)
59
63
  await database.setClock([])
60
64
  await setupDatabaseFn(database)
61
65
  localSet('fireproof', JSON.stringify(database))
@@ -80,10 +84,9 @@ export function useFireproof(defineDatabaseFn: Function, setupDatabaseFn: Functi
80
84
  const husherMap = new Map()
81
85
  const husher = (id: string, workFn: { (): Promise<any> }, ms: number) => {
82
86
  if (!husherMap.has(id)) {
83
- husherMap.set(
84
- id,
85
- workFn().finally(() => setTimeout(() => husherMap.delete(id), ms))
86
- )
87
+ const start: number = Date.now()
88
+ husherMap.set(id, workFn().finally(() =>
89
+ setTimeout(() => husherMap.delete(id), ms - (Date.now() - start))))
87
90
  }
88
91
  return husherMap.get(id)
89
92
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fireproof/core",
3
- "version": "0.0.7",
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": "1.0.2",
40
+ "prolly-trees": "1.0.3",
41
41
  "sade": "^1.8.1"
42
42
  },
43
43
  "devDependencies": {
package/src/blockstore.js CHANGED
@@ -55,7 +55,7 @@ export default class TransactionBlockstore {
55
55
  const key = cid.toString()
56
56
  // it is safe to read from the in-flight transactions becauase they are immutable
57
57
  const bytes = await Promise.any([this.#transactionsGet(key), this.commitedGet(key)]).catch((e) => {
58
- console.log('networkGet', cid.toString(), e)
58
+ // console.log('networkGet', cid.toString(), e)
59
59
  return this.networkGet(key)
60
60
  })
61
61
  if (!bytes) throw new Error('Missing block: ' + key)
@@ -83,15 +83,13 @@ export default class TransactionBlockstore {
83
83
  const value = await husher(key, async () => await this.valet.remoteBlockFunction(key))
84
84
  if (value) {
85
85
  // console.log('networkGot: ' + key, value.length)
86
- // dont turn this on until the Nan thing is fixed
87
- // it keep the network blocks in indexedb but lets get the basics solid first
88
86
  doTransaction('networkGot: ' + key, this, async (innerBlockstore) => {
89
87
  await innerBlockstore.put(CID.parse(key), value)
90
88
  })
91
89
  return value
92
90
  }
93
91
  } else {
94
- throw new Error('No remoteBlockFunction')
92
+ return false
95
93
  }
96
94
  }
97
95
 
package/src/clock.js CHANGED
@@ -94,6 +94,7 @@ export class EventFetcher {
94
94
  /** @private */
95
95
  this._blocks = blocks
96
96
  this._cids = new CIDCounter()
97
+ this._cache = new Map()
97
98
  }
98
99
 
99
100
  /**
@@ -101,10 +102,15 @@ export class EventFetcher {
101
102
  * @returns {Promise<EventBlockView<T>>}
102
103
  */
103
104
  async get (link) {
105
+ const slink = link.toString()
106
+ // console.log('get', link.toString())
107
+ if (this._cache.has(slink)) return this._cache.get(slink)
104
108
  const block = await this._blocks.get(link)
105
109
  this._cids.add({ address: link })
106
110
  if (!block) throw new Error(`missing block: ${link}`)
107
- return decodeEventBlock(block.bytes)
111
+ const got = decodeEventBlock(block.bytes)
112
+ this._cache.set(slink, got)
113
+ return got
108
114
  }
109
115
 
110
116
  async all () {
@@ -200,22 +206,34 @@ export async function * vis (blocks, head, options = {}) {
200
206
  }
201
207
 
202
208
  export async function findEventsToSync (blocks, head) {
209
+ // const callTag = Math.random().toString(36).substring(7)
203
210
  const events = new EventFetcher(blocks)
211
+ // console.time(callTag + '.findCommonAncestorWithSortedEvents')
204
212
  const { ancestor, sorted } = await findCommonAncestorWithSortedEvents(events, head)
213
+ // console.timeEnd(callTag + '.findCommonAncestorWithSortedEvents')
214
+ // console.log('sorted', sorted.length)
215
+ // console.time(callTag + '.contains')
205
216
  const toSync = await asyncFilter(sorted, async (uks) => !(await contains(events, ancestor, uks.cid)))
217
+ // console.timeEnd(callTag + '.contains')
218
+
206
219
  return { cids: events.cids, events: toSync }
207
220
  }
208
221
 
209
222
  const asyncFilter = async (arr, predicate) =>
223
+
210
224
  Promise.all(arr.map(predicate)).then((results) => arr.filter((_v, index) => results[index]))
211
225
 
212
226
  export async function findCommonAncestorWithSortedEvents (events, children) {
227
+ // const callTag = Math.random().toString(36).substring(7)
228
+ // console.time(callTag + '.findCommonAncestor')
213
229
  const ancestor = await findCommonAncestor(events, children)
230
+ // console.timeEnd(callTag + '.findCommonAncestor')
214
231
  if (!ancestor) {
215
232
  throw new Error('failed to find common ancestor event')
216
233
  }
217
- // Sort the events by their sequence number
234
+ // console.time(callTag + '.findSortedEvents')
218
235
  const sorted = await findSortedEvents(events, children, ancestor)
236
+ // console.timeEnd(callTag + '.findSortedEvents')
219
237
  return { ancestor, sorted }
220
238
  }
221
239
 
@@ -279,6 +297,7 @@ function findCommonString (arrays) {
279
297
  * @param {import('./clock').EventLink<EventData>} tail
280
298
  */
281
299
  async function findSortedEvents (events, head, tail) {
300
+ // const callTag = Math.random().toString(36).substring(7)
282
301
  // get weighted events - heavier events happened first
283
302
  /** @type {Map<string, { event: import('./clock').EventBlockView<EventData>, weight: number }>} */
284
303
  const weights = new Map()
@@ -312,6 +331,7 @@ async function findSortedEvents (events, head, tail) {
312
331
  .sort((a, b) => b[0] - a[0])
313
332
  .flatMap(([, es]) => es.sort((a, b) => (String(a.cid) < String(b.cid) ? -1 : 1)))
314
333
  // console.log('sorted', sorted.map(s => s.value.data.value))
334
+
315
335
  return sorted
316
336
  }
317
337
 
@@ -322,6 +342,7 @@ async function findSortedEvents (events, head, tail) {
322
342
  * @returns {Promise<Array<{ event: import('./clock').EventBlockView<EventData>, depth: number }>>}
323
343
  */
324
344
  async function findEvents (events, start, end, depth = 0) {
345
+ // console.log('findEvents', start)
325
346
  const event = await events.get(start)
326
347
  const acc = [{ event, depth }]
327
348
  const { parents } = event.value