@fireproof/core 0.0.6 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/coverage/blockstore.js.html +254 -242
- package/coverage/clock.js.html +203 -266
- package/coverage/db-index.js.html +426 -213
- package/coverage/fireproof.js.html +424 -238
- package/coverage/index.html +69 -84
- package/coverage/listener.js.html +13 -25
- package/coverage/prolly.js.html +267 -219
- package/coverage/tmp/coverage-28490-1680373005621-0.json +1 -0
- package/coverage/tmp/coverage-28494-1680373004502-0.json +1 -0
- package/coverage/tmp/coverage-28500-1680373005593-0.json +1 -0
- package/coverage/tmp/coverage-28504-1680373005559-0.json +1 -0
- package/coverage/valet.js.html +96 -246
- package/hooks/use-fireproof.ts +9 -8
- package/package.json +5 -5
- package/src/blockstore.js +16 -14
- package/src/clock.js +27 -5
- package/src/db-index.js +139 -96
- package/src/fireproof.js +48 -16
- package/src/hydrator.js +10 -0
- package/src/listener.js +0 -6
- package/src/prolly.js +43 -32
- package/src/valet.js +6 -62
- package/{src → test}/block.js +6 -6
- package/test/clock.test.js +0 -5
- package/test/db-index.test.js +11 -10
- package/test/fireproof.test.js +74 -19
- package/test/helpers.js +1 -1
- package/test/hydrator.test.js +75 -0
- package/test/prolly.test.js +2 -2
- package/test/proofs.test.js +5 -5
- package/test/reproduce-fixture-bug.test.js +2 -2
- package/coverage/tmp/coverage-42191-1678146904346-0.json +0 -1
- package/coverage/tmp/coverage-42193-1678146903521-0.json +0 -1
- package/coverage/tmp/coverage-42196-1678146904322-0.json +0 -1
- package/coverage/tmp/coverage-42197-1678146904292-0.json +0 -1
- package/scripts/propernames/gen.sh +0 -3
- package/scripts/randomcid.js +0 -12
- package/scripts/words/gen.js +0 -55
package/coverage/valet.js.html
CHANGED
@@ -23,16 +23,16 @@
|
|
23
23
|
<div class='clearfix'>
|
24
24
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
26
|
-
<span class="strong">
|
26
|
+
<span class="strong">94.91% </span>
|
27
27
|
<span class="quiet">Statements</span>
|
28
|
-
<span class='fraction'>
|
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">
|
33
|
+
<span class="strong">86.36% </span>
|
34
34
|
<span class="quiet">Branches</span>
|
35
|
-
<span class='fraction'>
|
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">
|
47
|
+
<span class="strong">94.91% </span>
|
48
48
|
<span class="quiet">Lines</span>
|
49
|
-
<span class='fraction'>
|
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-
|
272
|
-
<span class="cline-any cline-yes">
|
273
|
-
<span class="cline-any cline-yes">
|
274
|
-
<span class="cline-any cline-yes">
|
275
|
-
<span class="cline-any cline-yes">
|
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">
|
279
|
-
<span class="cline-any cline-yes">
|
280
|
-
<span class="cline-any cline-yes">
|
281
|
-
<span class="cline-any cline-yes">
|
282
|
-
<span class="cline-any cline-yes">
|
283
|
-
<span class="cline-any cline-yes">
|
284
|
-
<span class="cline-any cline-yes">
|
285
|
-
<span class="cline-any cline-yes">
|
286
|
-
<span class="cline-any cline-yes">
|
287
|
-
<span class="cline-any cline-yes">
|
288
|
-
<span class="cline-any cline-yes">
|
289
|
-
<span class="cline-any cline-yes">
|
290
|
-
<span class="cline-any cline-yes">
|
291
|
-
<span class="cline-any cline-yes">
|
292
|
-
<span class="cline-any cline-yes">
|
293
|
-
<span class="cline-any cline-yes">
|
294
|
-
<span class="cline-any cline-yes">
|
295
|
-
<span class="cline-any cline-yes">
|
296
|
-
<span class="cline-any cline-yes">
|
297
|
-
<span class="cline-any cline-yes">
|
298
|
-
<span class="cline-any cline-yes">
|
299
|
-
<span class="cline-any cline-yes">
|
300
|
-
<span class="cline-any cline-yes">
|
301
|
-
<span class="cline-any cline-yes">
|
302
|
-
<span class="cline-any cline-yes">
|
303
|
-
<span class="cline-any cline-yes">
|
304
|
-
<span class="cline-any cline-yes">
|
305
|
-
<span class="cline-any cline-yes">
|
306
|
-
<span class="cline-any cline-yes">
|
307
|
-
<span class="cline-any cline-yes">
|
308
|
-
<span class="cline-any cline-yes">
|
309
|
-
<span class="cline-any cline-yes">
|
310
|
-
<span class="cline-any cline-yes">
|
311
|
-
<span class="cline-any cline-yes">
|
312
|
-
<span class="cline-any cline-yes">
|
313
|
-
<span class="cline-any cline-yes">
|
314
|
-
<span class="cline-any cline-yes">
|
315
|
-
<span class="cline-any cline-yes">
|
316
|
-
<span class="cline-any cline-yes">
|
317
|
-
<span class="cline-any cline-yes">
|
318
|
-
<span class="cline-any cline-yes">
|
319
|
-
<span class="cline-any cline-yes">
|
320
|
-
<span class="cline-any cline-yes">
|
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"> </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"> </span>
|
330
272
|
<span class="cline-any cline-no"> </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">
|
337
|
-
<span class="cline-any cline-yes">
|
338
|
-
<span class="cline-any cline-yes">
|
339
|
-
<span class="cline-any cline-yes">
|
340
|
-
<span class="cline-any cline-yes">
|
341
|
-
<span class="cline-any cline-yes">
|
342
|
-
<span class="cline-any cline-yes">
|
343
|
-
<span class="cline-any cline-yes">
|
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">
|
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"> </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
|
|
407
|
-
// const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms))
|
408
|
-
// let storageSupported = false
|
409
|
-
// try {
|
410
|
-
// storageSupported = window.localStorage && true
|
411
|
-
// } catch (e) {}
|
412
|
-
// const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms))
|
413
|
-
|
414
307
|
export default class Valet {
|
415
|
-
|
416
|
-
#cidToCar = new Map() // cid to car
|
417
|
-
#db = null
|
308
|
+
idb = null
|
418
309
|
#uploadQueue = null
|
419
310
|
#alreadyEnqueued = new Set()
|
420
311
|
|
@@ -424,7 +315,8 @@ export default class Valet {
|
|
424
315
|
*/
|
425
316
|
uploadFunction = null
|
426
317
|
|
427
|
-
constructor () {
|
318
|
+
constructor (name = 'default') {
|
319
|
+
this.name = name
|
428
320
|
this.#uploadQueue = cargoQueue(async (tasks, callback) => {
|
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
|
-
|
437
|
-
|
438
|
-
|
328
|
+
return await this.withDB(async (db) => {
|
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
|
|
443
341
|
this.#uploadQueue.drain(async () => {
|
@@ -454,9 +352,8 @@ export default class Valet {
|
|
454
352
|
}
|
455
353
|
|
456
354
|
withDB = async (dbWorkFun) => {
|
457
|
-
|
458
|
-
|
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 < 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
|
370
|
+
return await dbWorkFun(this.idb)
|
474
371
|
}
|
475
372
|
|
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
|
-
|
487
379
|
await this.withDB(async (db) => {
|
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
|
-
|
529
|
-
// export class MemoryValet {
|
530
|
-
// #cars = new Map() // cars by cid
|
531
|
-
// #cidToCar = new Map() // cid to car
|
532
|
-
|
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
|
-
|
545
|
-
// async getBlock (dataCID) {
|
546
|
-
// return await this.#valetGet(dataCID)
|
547
|
-
// }
|
548
|
-
|
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<Uint8Array|undefined>}
|
557
|
-
// */
|
558
|
-
// #valetGet = async (cid) => {
|
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
|
</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-
|
427
|
+
at 2023-04-01T18:16:45.716Z
|
578
428
|
</div>
|
579
429
|
<script src="prettify.js"></script>
|
580
430
|
<script>
|
package/hooks/use-fireproof.ts
CHANGED
@@ -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(
|
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
|
-
|
86
|
-
|
87
|
-
|
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.
|
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": "
|
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/
|
65
|
+
"url": "git+https://github.com/fireproof-storage/fireproof.git"
|
66
66
|
},
|
67
67
|
"bugs": {
|
68
|
-
"url": "https://github.com/
|
68
|
+
"url": "https://github.com/fireproof-storage/fireproof/issues"
|
69
69
|
},
|
70
|
-
"homepage": "https://github.com/
|
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 =
|
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
|
-
|
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
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
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.
|