@fireproof/core 0.0.2 → 0.0.4
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/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/block.js.html +280 -0
- package/coverage/blockstore.js.html +916 -0
- package/coverage/clock.js.html +1141 -0
- package/coverage/db-index.js.html +694 -0
- package/coverage/favicon.png +0 -0
- package/coverage/fireproof.js.html +856 -0
- package/coverage/index.html +221 -0
- package/coverage/listener.js.html +421 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/prolly.js.html +883 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +196 -0
- package/coverage/tmp/coverage-42191-1678146904346-0.json +1 -0
- package/coverage/tmp/coverage-42193-1678146903521-0.json +1 -0
- package/coverage/tmp/coverage-42196-1678146904322-0.json +1 -0
- package/coverage/tmp/coverage-42197-1678146904292-0.json +1 -0
- package/coverage/valet.js.html +589 -0
- package/hooks/use-fireproof.md +149 -0
- package/hooks/use-fireproof.ts +112 -0
- package/package.json +7 -4
- package/src/block.js +0 -10
- package/src/blockstore.js +53 -22
- package/src/db-index.js +71 -46
- package/src/fireproof.js +90 -44
- package/src/listener.js +23 -20
- package/src/prolly.js +53 -22
- package/src/valet.js +119 -93
- package/test/clock.test.js +60 -12
- package/test/db-index.test.js +3 -0
- package/test/listener.test.js +2 -3
- package/test/valet.test.js +59 -0
@@ -0,0 +1,856 @@
|
|
1
|
+
|
2
|
+
<!doctype html>
|
3
|
+
<html lang="en">
|
4
|
+
|
5
|
+
<head>
|
6
|
+
<title>Code coverage report for fireproof.js</title>
|
7
|
+
<meta charset="utf-8" />
|
8
|
+
<link rel="stylesheet" href="prettify.css" />
|
9
|
+
<link rel="stylesheet" href="base.css" />
|
10
|
+
<link rel="shortcut icon" type="image/x-icon" href="favicon.png" />
|
11
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
12
|
+
<style type='text/css'>
|
13
|
+
.coverage-summary .sorter {
|
14
|
+
background-image: url(sort-arrow-sprite.png);
|
15
|
+
}
|
16
|
+
</style>
|
17
|
+
</head>
|
18
|
+
|
19
|
+
<body>
|
20
|
+
<div class='wrapper'>
|
21
|
+
<div class='pad1'>
|
22
|
+
<h1><a href="index.html">All files</a> fireproof.js</h1>
|
23
|
+
<div class='clearfix'>
|
24
|
+
|
25
|
+
<div class='fl pad1y space-right2'>
|
26
|
+
<span class="strong">93.77% </span>
|
27
|
+
<span class="quiet">Statements</span>
|
28
|
+
<span class='fraction'>241/257</span>
|
29
|
+
</div>
|
30
|
+
|
31
|
+
|
32
|
+
<div class='fl pad1y space-right2'>
|
33
|
+
<span class="strong">85.71% </span>
|
34
|
+
<span class="quiet">Branches</span>
|
35
|
+
<span class='fraction'>30/35</span>
|
36
|
+
</div>
|
37
|
+
|
38
|
+
|
39
|
+
<div class='fl pad1y space-right2'>
|
40
|
+
<span class="strong">82.35% </span>
|
41
|
+
<span class="quiet">Functions</span>
|
42
|
+
<span class='fraction'>14/17</span>
|
43
|
+
</div>
|
44
|
+
|
45
|
+
|
46
|
+
<div class='fl pad1y space-right2'>
|
47
|
+
<span class="strong">93.77% </span>
|
48
|
+
<span class="quiet">Lines</span>
|
49
|
+
<span class='fraction'>241/257</span>
|
50
|
+
</div>
|
51
|
+
|
52
|
+
|
53
|
+
</div>
|
54
|
+
<p class="quiet">
|
55
|
+
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
56
|
+
</p>
|
57
|
+
<template id="filterTemplate">
|
58
|
+
<div class="quiet">
|
59
|
+
Filter:
|
60
|
+
<input oninput="onInput()" type="search" id="fileSearch">
|
61
|
+
</div>
|
62
|
+
</template>
|
63
|
+
</div>
|
64
|
+
<div class='status-line high'></div>
|
65
|
+
<pre><table class="coverage">
|
66
|
+
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
67
|
+
<a name='L2'></a><a href='#L2'>2</a>
|
68
|
+
<a name='L3'></a><a href='#L3'>3</a>
|
69
|
+
<a name='L4'></a><a href='#L4'>4</a>
|
70
|
+
<a name='L5'></a><a href='#L5'>5</a>
|
71
|
+
<a name='L6'></a><a href='#L6'>6</a>
|
72
|
+
<a name='L7'></a><a href='#L7'>7</a>
|
73
|
+
<a name='L8'></a><a href='#L8'>8</a>
|
74
|
+
<a name='L9'></a><a href='#L9'>9</a>
|
75
|
+
<a name='L10'></a><a href='#L10'>10</a>
|
76
|
+
<a name='L11'></a><a href='#L11'>11</a>
|
77
|
+
<a name='L12'></a><a href='#L12'>12</a>
|
78
|
+
<a name='L13'></a><a href='#L13'>13</a>
|
79
|
+
<a name='L14'></a><a href='#L14'>14</a>
|
80
|
+
<a name='L15'></a><a href='#L15'>15</a>
|
81
|
+
<a name='L16'></a><a href='#L16'>16</a>
|
82
|
+
<a name='L17'></a><a href='#L17'>17</a>
|
83
|
+
<a name='L18'></a><a href='#L18'>18</a>
|
84
|
+
<a name='L19'></a><a href='#L19'>19</a>
|
85
|
+
<a name='L20'></a><a href='#L20'>20</a>
|
86
|
+
<a name='L21'></a><a href='#L21'>21</a>
|
87
|
+
<a name='L22'></a><a href='#L22'>22</a>
|
88
|
+
<a name='L23'></a><a href='#L23'>23</a>
|
89
|
+
<a name='L24'></a><a href='#L24'>24</a>
|
90
|
+
<a name='L25'></a><a href='#L25'>25</a>
|
91
|
+
<a name='L26'></a><a href='#L26'>26</a>
|
92
|
+
<a name='L27'></a><a href='#L27'>27</a>
|
93
|
+
<a name='L28'></a><a href='#L28'>28</a>
|
94
|
+
<a name='L29'></a><a href='#L29'>29</a>
|
95
|
+
<a name='L30'></a><a href='#L30'>30</a>
|
96
|
+
<a name='L31'></a><a href='#L31'>31</a>
|
97
|
+
<a name='L32'></a><a href='#L32'>32</a>
|
98
|
+
<a name='L33'></a><a href='#L33'>33</a>
|
99
|
+
<a name='L34'></a><a href='#L34'>34</a>
|
100
|
+
<a name='L35'></a><a href='#L35'>35</a>
|
101
|
+
<a name='L36'></a><a href='#L36'>36</a>
|
102
|
+
<a name='L37'></a><a href='#L37'>37</a>
|
103
|
+
<a name='L38'></a><a href='#L38'>38</a>
|
104
|
+
<a name='L39'></a><a href='#L39'>39</a>
|
105
|
+
<a name='L40'></a><a href='#L40'>40</a>
|
106
|
+
<a name='L41'></a><a href='#L41'>41</a>
|
107
|
+
<a name='L42'></a><a href='#L42'>42</a>
|
108
|
+
<a name='L43'></a><a href='#L43'>43</a>
|
109
|
+
<a name='L44'></a><a href='#L44'>44</a>
|
110
|
+
<a name='L45'></a><a href='#L45'>45</a>
|
111
|
+
<a name='L46'></a><a href='#L46'>46</a>
|
112
|
+
<a name='L47'></a><a href='#L47'>47</a>
|
113
|
+
<a name='L48'></a><a href='#L48'>48</a>
|
114
|
+
<a name='L49'></a><a href='#L49'>49</a>
|
115
|
+
<a name='L50'></a><a href='#L50'>50</a>
|
116
|
+
<a name='L51'></a><a href='#L51'>51</a>
|
117
|
+
<a name='L52'></a><a href='#L52'>52</a>
|
118
|
+
<a name='L53'></a><a href='#L53'>53</a>
|
119
|
+
<a name='L54'></a><a href='#L54'>54</a>
|
120
|
+
<a name='L55'></a><a href='#L55'>55</a>
|
121
|
+
<a name='L56'></a><a href='#L56'>56</a>
|
122
|
+
<a name='L57'></a><a href='#L57'>57</a>
|
123
|
+
<a name='L58'></a><a href='#L58'>58</a>
|
124
|
+
<a name='L59'></a><a href='#L59'>59</a>
|
125
|
+
<a name='L60'></a><a href='#L60'>60</a>
|
126
|
+
<a name='L61'></a><a href='#L61'>61</a>
|
127
|
+
<a name='L62'></a><a href='#L62'>62</a>
|
128
|
+
<a name='L63'></a><a href='#L63'>63</a>
|
129
|
+
<a name='L64'></a><a href='#L64'>64</a>
|
130
|
+
<a name='L65'></a><a href='#L65'>65</a>
|
131
|
+
<a name='L66'></a><a href='#L66'>66</a>
|
132
|
+
<a name='L67'></a><a href='#L67'>67</a>
|
133
|
+
<a name='L68'></a><a href='#L68'>68</a>
|
134
|
+
<a name='L69'></a><a href='#L69'>69</a>
|
135
|
+
<a name='L70'></a><a href='#L70'>70</a>
|
136
|
+
<a name='L71'></a><a href='#L71'>71</a>
|
137
|
+
<a name='L72'></a><a href='#L72'>72</a>
|
138
|
+
<a name='L73'></a><a href='#L73'>73</a>
|
139
|
+
<a name='L74'></a><a href='#L74'>74</a>
|
140
|
+
<a name='L75'></a><a href='#L75'>75</a>
|
141
|
+
<a name='L76'></a><a href='#L76'>76</a>
|
142
|
+
<a name='L77'></a><a href='#L77'>77</a>
|
143
|
+
<a name='L78'></a><a href='#L78'>78</a>
|
144
|
+
<a name='L79'></a><a href='#L79'>79</a>
|
145
|
+
<a name='L80'></a><a href='#L80'>80</a>
|
146
|
+
<a name='L81'></a><a href='#L81'>81</a>
|
147
|
+
<a name='L82'></a><a href='#L82'>82</a>
|
148
|
+
<a name='L83'></a><a href='#L83'>83</a>
|
149
|
+
<a name='L84'></a><a href='#L84'>84</a>
|
150
|
+
<a name='L85'></a><a href='#L85'>85</a>
|
151
|
+
<a name='L86'></a><a href='#L86'>86</a>
|
152
|
+
<a name='L87'></a><a href='#L87'>87</a>
|
153
|
+
<a name='L88'></a><a href='#L88'>88</a>
|
154
|
+
<a name='L89'></a><a href='#L89'>89</a>
|
155
|
+
<a name='L90'></a><a href='#L90'>90</a>
|
156
|
+
<a name='L91'></a><a href='#L91'>91</a>
|
157
|
+
<a name='L92'></a><a href='#L92'>92</a>
|
158
|
+
<a name='L93'></a><a href='#L93'>93</a>
|
159
|
+
<a name='L94'></a><a href='#L94'>94</a>
|
160
|
+
<a name='L95'></a><a href='#L95'>95</a>
|
161
|
+
<a name='L96'></a><a href='#L96'>96</a>
|
162
|
+
<a name='L97'></a><a href='#L97'>97</a>
|
163
|
+
<a name='L98'></a><a href='#L98'>98</a>
|
164
|
+
<a name='L99'></a><a href='#L99'>99</a>
|
165
|
+
<a name='L100'></a><a href='#L100'>100</a>
|
166
|
+
<a name='L101'></a><a href='#L101'>101</a>
|
167
|
+
<a name='L102'></a><a href='#L102'>102</a>
|
168
|
+
<a name='L103'></a><a href='#L103'>103</a>
|
169
|
+
<a name='L104'></a><a href='#L104'>104</a>
|
170
|
+
<a name='L105'></a><a href='#L105'>105</a>
|
171
|
+
<a name='L106'></a><a href='#L106'>106</a>
|
172
|
+
<a name='L107'></a><a href='#L107'>107</a>
|
173
|
+
<a name='L108'></a><a href='#L108'>108</a>
|
174
|
+
<a name='L109'></a><a href='#L109'>109</a>
|
175
|
+
<a name='L110'></a><a href='#L110'>110</a>
|
176
|
+
<a name='L111'></a><a href='#L111'>111</a>
|
177
|
+
<a name='L112'></a><a href='#L112'>112</a>
|
178
|
+
<a name='L113'></a><a href='#L113'>113</a>
|
179
|
+
<a name='L114'></a><a href='#L114'>114</a>
|
180
|
+
<a name='L115'></a><a href='#L115'>115</a>
|
181
|
+
<a name='L116'></a><a href='#L116'>116</a>
|
182
|
+
<a name='L117'></a><a href='#L117'>117</a>
|
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>
|
235
|
+
<a name='L170'></a><a href='#L170'>170</a>
|
236
|
+
<a name='L171'></a><a href='#L171'>171</a>
|
237
|
+
<a name='L172'></a><a href='#L172'>172</a>
|
238
|
+
<a name='L173'></a><a href='#L173'>173</a>
|
239
|
+
<a name='L174'></a><a href='#L174'>174</a>
|
240
|
+
<a name='L175'></a><a href='#L175'>175</a>
|
241
|
+
<a name='L176'></a><a href='#L176'>176</a>
|
242
|
+
<a name='L177'></a><a href='#L177'>177</a>
|
243
|
+
<a name='L178'></a><a href='#L178'>178</a>
|
244
|
+
<a name='L179'></a><a href='#L179'>179</a>
|
245
|
+
<a name='L180'></a><a href='#L180'>180</a>
|
246
|
+
<a name='L181'></a><a href='#L181'>181</a>
|
247
|
+
<a name='L182'></a><a href='#L182'>182</a>
|
248
|
+
<a name='L183'></a><a href='#L183'>183</a>
|
249
|
+
<a name='L184'></a><a href='#L184'>184</a>
|
250
|
+
<a name='L185'></a><a href='#L185'>185</a>
|
251
|
+
<a name='L186'></a><a href='#L186'>186</a>
|
252
|
+
<a name='L187'></a><a href='#L187'>187</a>
|
253
|
+
<a name='L188'></a><a href='#L188'>188</a>
|
254
|
+
<a name='L189'></a><a href='#L189'>189</a>
|
255
|
+
<a name='L190'></a><a href='#L190'>190</a>
|
256
|
+
<a name='L191'></a><a href='#L191'>191</a>
|
257
|
+
<a name='L192'></a><a href='#L192'>192</a>
|
258
|
+
<a name='L193'></a><a href='#L193'>193</a>
|
259
|
+
<a name='L194'></a><a href='#L194'>194</a>
|
260
|
+
<a name='L195'></a><a href='#L195'>195</a>
|
261
|
+
<a name='L196'></a><a href='#L196'>196</a>
|
262
|
+
<a name='L197'></a><a href='#L197'>197</a>
|
263
|
+
<a name='L198'></a><a href='#L198'>198</a>
|
264
|
+
<a name='L199'></a><a href='#L199'>199</a>
|
265
|
+
<a name='L200'></a><a href='#L200'>200</a>
|
266
|
+
<a name='L201'></a><a href='#L201'>201</a>
|
267
|
+
<a name='L202'></a><a href='#L202'>202</a>
|
268
|
+
<a name='L203'></a><a href='#L203'>203</a>
|
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></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
324
|
+
<span class="cline-any cline-yes">1x</span>
|
325
|
+
<span class="cline-any cline-yes">1x</span>
|
326
|
+
<span class="cline-any cline-yes">1x</span>
|
327
|
+
<span class="cline-any cline-yes">1x</span>
|
328
|
+
<span class="cline-any cline-yes">1x</span>
|
329
|
+
<span class="cline-any cline-yes">1x</span>
|
330
|
+
<span class="cline-any cline-yes">1x</span>
|
331
|
+
<span class="cline-any cline-yes">1x</span>
|
332
|
+
<span class="cline-any cline-yes">1x</span>
|
333
|
+
<span class="cline-any cline-yes">1x</span>
|
334
|
+
<span class="cline-any cline-yes">1x</span>
|
335
|
+
<span class="cline-any cline-yes">1x</span>
|
336
|
+
<span class="cline-any cline-yes">1x</span>
|
337
|
+
<span class="cline-any cline-yes">1x</span>
|
338
|
+
<span class="cline-any cline-yes">1x</span>
|
339
|
+
<span class="cline-any cline-yes">1x</span>
|
340
|
+
<span class="cline-any cline-yes">1x</span>
|
341
|
+
<span class="cline-any cline-yes">31x</span>
|
342
|
+
<span class="cline-any cline-yes">31x</span>
|
343
|
+
<span class="cline-any cline-yes">31x</span>
|
344
|
+
<span class="cline-any cline-yes">31x</span>
|
345
|
+
<span class="cline-any cline-yes">31x</span>
|
346
|
+
<span class="cline-any cline-yes">31x</span>
|
347
|
+
<span class="cline-any cline-yes">31x</span>
|
348
|
+
<span class="cline-any cline-yes">31x</span>
|
349
|
+
<span class="cline-any cline-yes">31x</span>
|
350
|
+
<span class="cline-any cline-yes">31x</span>
|
351
|
+
<span class="cline-any cline-yes">31x</span>
|
352
|
+
<span class="cline-any cline-yes">2x</span>
|
353
|
+
<span class="cline-any cline-yes">2x</span>
|
354
|
+
<span class="cline-any cline-yes">31x</span>
|
355
|
+
<span class="cline-any cline-yes">31x</span>
|
356
|
+
<span class="cline-any cline-yes">31x</span>
|
357
|
+
<span class="cline-any cline-yes">31x</span>
|
358
|
+
<span class="cline-any cline-yes">31x</span>
|
359
|
+
<span class="cline-any cline-yes">31x</span>
|
360
|
+
<span class="cline-any cline-yes">31x</span>
|
361
|
+
<span class="cline-any cline-yes">31x</span>
|
362
|
+
<span class="cline-any cline-yes">31x</span>
|
363
|
+
<span class="cline-any cline-yes">31x</span>
|
364
|
+
<span class="cline-any cline-yes">31x</span>
|
365
|
+
<span class="cline-any cline-yes">31x</span>
|
366
|
+
<span class="cline-any cline-yes">31x</span>
|
367
|
+
<span class="cline-any cline-yes">31x</span>
|
368
|
+
<span class="cline-any cline-yes">31x</span>
|
369
|
+
<span class="cline-any cline-yes">31x</span>
|
370
|
+
<span class="cline-any cline-yes">31x</span>
|
371
|
+
<span class="cline-any cline-yes">31x</span>
|
372
|
+
<span class="cline-any cline-yes">31x</span>
|
373
|
+
<span class="cline-any cline-yes">4x</span>
|
374
|
+
<span class="cline-any cline-yes">4x</span>
|
375
|
+
<span class="cline-any cline-yes">4x</span>
|
376
|
+
<span class="cline-any cline-yes">4x</span>
|
377
|
+
<span class="cline-any cline-yes">31x</span>
|
378
|
+
<span class="cline-any cline-yes">31x</span>
|
379
|
+
<span class="cline-any cline-yes">31x</span>
|
380
|
+
<span class="cline-any cline-yes">31x</span>
|
381
|
+
<span class="cline-any cline-yes">31x</span>
|
382
|
+
<span class="cline-any cline-yes">31x</span>
|
383
|
+
<span class="cline-any cline-yes">31x</span>
|
384
|
+
<span class="cline-any cline-yes">31x</span>
|
385
|
+
<span class="cline-any cline-yes">31x</span>
|
386
|
+
<span class="cline-any cline-yes">31x</span>
|
387
|
+
<span class="cline-any cline-yes">31x</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">31x</span>
|
393
|
+
<span class="cline-any cline-yes">31x</span>
|
394
|
+
<span class="cline-any cline-yes">31x</span>
|
395
|
+
<span class="cline-any cline-yes">31x</span>
|
396
|
+
<span class="cline-any cline-yes">31x</span>
|
397
|
+
<span class="cline-any cline-yes">31x</span>
|
398
|
+
<span class="cline-any cline-yes">31x</span>
|
399
|
+
<span class="cline-any cline-yes">31x</span>
|
400
|
+
<span class="cline-any cline-no"> </span>
|
401
|
+
<span class="cline-any cline-no"> </span>
|
402
|
+
<span class="cline-any cline-no"> </span>
|
403
|
+
<span class="cline-any cline-yes">31x</span>
|
404
|
+
<span class="cline-any cline-yes">31x</span>
|
405
|
+
<span class="cline-any cline-yes">31x</span>
|
406
|
+
<span class="cline-any cline-yes">31x</span>
|
407
|
+
<span class="cline-any cline-yes">31x</span>
|
408
|
+
<span class="cline-any cline-yes">31x</span>
|
409
|
+
<span class="cline-any cline-yes">31x</span>
|
410
|
+
<span class="cline-any cline-yes">31x</span>
|
411
|
+
<span class="cline-any cline-yes">31x</span>
|
412
|
+
<span class="cline-any cline-yes">31x</span>
|
413
|
+
<span class="cline-any cline-yes">53x</span>
|
414
|
+
<span class="cline-any cline-yes">53x</span>
|
415
|
+
<span class="cline-any cline-yes">53x</span>
|
416
|
+
<span class="cline-any cline-yes">9x</span>
|
417
|
+
<span class="cline-any cline-yes">9x</span>
|
418
|
+
<span class="cline-any cline-yes">9x</span>
|
419
|
+
<span class="cline-any cline-yes">6x</span>
|
420
|
+
<span class="cline-any cline-no"> </span>
|
421
|
+
<span class="cline-any cline-yes">6x</span>
|
422
|
+
<span class="cline-any cline-yes">6x</span>
|
423
|
+
<span class="cline-any cline-yes">6x</span>
|
424
|
+
<span class="cline-any cline-yes">6x</span>
|
425
|
+
<span class="cline-any cline-yes">9x</span>
|
426
|
+
<span class="cline-any cline-yes">9x</span>
|
427
|
+
<span class="cline-any cline-yes">53x</span>
|
428
|
+
<span class="cline-any cline-yes">44x</span>
|
429
|
+
<span class="cline-any cline-yes">44x</span>
|
430
|
+
<span class="cline-any cline-yes">44x</span>
|
431
|
+
<span class="cline-any cline-yes">53x</span>
|
432
|
+
<span class="cline-any cline-yes">53x</span>
|
433
|
+
<span class="cline-any cline-yes">31x</span>
|
434
|
+
<span class="cline-any cline-yes">31x</span>
|
435
|
+
<span class="cline-any cline-yes">31x</span>
|
436
|
+
<span class="cline-any cline-yes">31x</span>
|
437
|
+
<span class="cline-any cline-yes">31x</span>
|
438
|
+
<span class="cline-any cline-yes">31x</span>
|
439
|
+
<span class="cline-any cline-yes">31x</span>
|
440
|
+
<span class="cline-any cline-yes">31x</span>
|
441
|
+
<span class="cline-any cline-yes">31x</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-no"> </span>
|
445
|
+
<span class="cline-any cline-no"> </span>
|
446
|
+
<span class="cline-any cline-yes">10x</span>
|
447
|
+
<span class="cline-any cline-yes">31x</span>
|
448
|
+
<span class="cline-any cline-yes">31x</span>
|
449
|
+
<span class="cline-any cline-yes">123x</span>
|
450
|
+
<span class="cline-any cline-yes">123x</span>
|
451
|
+
<span class="cline-any cline-yes">14x</span>
|
452
|
+
<span class="cline-any cline-yes">14x</span>
|
453
|
+
<span class="cline-any cline-yes">123x</span>
|
454
|
+
<span class="cline-any cline-yes">31x</span>
|
455
|
+
<span class="cline-any cline-yes">31x</span>
|
456
|
+
<span class="cline-any cline-yes">31x</span>
|
457
|
+
<span class="cline-any cline-yes">31x</span>
|
458
|
+
<span class="cline-any cline-yes">31x</span>
|
459
|
+
<span class="cline-any cline-yes">31x</span>
|
460
|
+
<span class="cline-any cline-yes">31x</span>
|
461
|
+
<span class="cline-any cline-yes">31x</span>
|
462
|
+
<span class="cline-any cline-yes">31x</span>
|
463
|
+
<span class="cline-any cline-yes">31x</span>
|
464
|
+
<span class="cline-any cline-yes">31x</span>
|
465
|
+
<span class="cline-any cline-yes">125x</span>
|
466
|
+
<span class="cline-any cline-yes">5x</span>
|
467
|
+
<span class="cline-any cline-yes">5x</span>
|
468
|
+
<span class="cline-any cline-yes">5x</span>
|
469
|
+
<span class="cline-any cline-yes">5x</span>
|
470
|
+
<span class="cline-any cline-yes">5x</span>
|
471
|
+
<span class="cline-any cline-yes">125x</span>
|
472
|
+
<span class="cline-any cline-yes">31x</span>
|
473
|
+
<span class="cline-any cline-yes">31x</span>
|
474
|
+
<span class="cline-any cline-yes">31x</span>
|
475
|
+
<span class="cline-any cline-yes">31x</span>
|
476
|
+
<span class="cline-any cline-yes">31x</span>
|
477
|
+
<span class="cline-any cline-yes">31x</span>
|
478
|
+
<span class="cline-any cline-yes">31x</span>
|
479
|
+
<span class="cline-any cline-yes">31x</span>
|
480
|
+
<span class="cline-any cline-yes">31x</span>
|
481
|
+
<span class="cline-any cline-yes">31x</span>
|
482
|
+
<span class="cline-any cline-yes">31x</span>
|
483
|
+
<span class="cline-any cline-yes">31x</span>
|
484
|
+
<span class="cline-any cline-yes">122x</span>
|
485
|
+
<span class="cline-any cline-yes">122x</span>
|
486
|
+
<span class="cline-any cline-yes">120x</span>
|
487
|
+
<span class="cline-any cline-yes">122x</span>
|
488
|
+
<span class="cline-any cline-yes">31x</span>
|
489
|
+
<span class="cline-any cline-yes">31x</span>
|
490
|
+
<span class="cline-any cline-yes">31x</span>
|
491
|
+
<span class="cline-any cline-yes">31x</span>
|
492
|
+
<span class="cline-any cline-yes">31x</span>
|
493
|
+
<span class="cline-any cline-yes">31x</span>
|
494
|
+
<span class="cline-any cline-yes">31x</span>
|
495
|
+
<span class="cline-any cline-yes">31x</span>
|
496
|
+
<span class="cline-any cline-yes">31x</span>
|
497
|
+
<span class="cline-any cline-yes">3x</span>
|
498
|
+
<span class="cline-any cline-yes">2x</span>
|
499
|
+
<span class="cline-any cline-yes">2x</span>
|
500
|
+
<span class="cline-any cline-yes">2x</span>
|
501
|
+
<span class="cline-any cline-yes">3x</span>
|
502
|
+
<span class="cline-any cline-yes">31x</span>
|
503
|
+
<span class="cline-any cline-yes">31x</span>
|
504
|
+
<span class="cline-any cline-yes">31x</span>
|
505
|
+
<span class="cline-any cline-yes">31x</span>
|
506
|
+
<span class="cline-any cline-yes">31x</span>
|
507
|
+
<span class="cline-any cline-yes">31x</span>
|
508
|
+
<span class="cline-any cline-yes">31x</span>
|
509
|
+
<span class="cline-any cline-yes">31x</span>
|
510
|
+
<span class="cline-any cline-yes">122x</span>
|
511
|
+
<span class="cline-any cline-yes">122x</span>
|
512
|
+
<span class="cline-any cline-yes">122x</span>
|
513
|
+
<span class="cline-any cline-yes">122x</span>
|
514
|
+
<span class="cline-any cline-yes">122x</span>
|
515
|
+
<span class="cline-any cline-yes">122x</span>
|
516
|
+
<span class="cline-any cline-no"> </span>
|
517
|
+
<span class="cline-any cline-no"> </span>
|
518
|
+
<span class="cline-any cline-no"> </span>
|
519
|
+
<span class="cline-any cline-yes">122x</span>
|
520
|
+
<span class="cline-any cline-yes">122x</span>
|
521
|
+
<span class="cline-any cline-yes">122x</span>
|
522
|
+
<span class="cline-any cline-yes">122x</span>
|
523
|
+
<span class="cline-any cline-yes">122x</span>
|
524
|
+
<span class="cline-any cline-yes">31x</span>
|
525
|
+
<span class="cline-any cline-yes">31x</span>
|
526
|
+
<span class="cline-any cline-yes">31x</span>
|
527
|
+
<span class="cline-any cline-yes">31x</span>
|
528
|
+
<span class="cline-any cline-yes">31x</span>
|
529
|
+
<span class="cline-any cline-yes">31x</span>
|
530
|
+
<span class="cline-any cline-yes">31x</span>
|
531
|
+
<span class="cline-any cline-yes">31x</span>
|
532
|
+
<span class="cline-any cline-yes">31x</span>
|
533
|
+
<span class="cline-any cline-yes">31x</span>
|
534
|
+
<span class="cline-any cline-yes">31x</span>
|
535
|
+
<span class="cline-any cline-yes">31x</span>
|
536
|
+
<span class="cline-any cline-yes">31x</span>
|
537
|
+
<span class="cline-any cline-yes">31x</span>
|
538
|
+
<span class="cline-any cline-yes">31x</span>
|
539
|
+
<span class="cline-any cline-yes">31x</span>
|
540
|
+
<span class="cline-any cline-yes">31x</span>
|
541
|
+
<span class="cline-any cline-yes">31x</span>
|
542
|
+
<span class="cline-any cline-yes">31x</span>
|
543
|
+
<span class="cline-any cline-yes">31x</span>
|
544
|
+
<span class="cline-any cline-yes">31x</span>
|
545
|
+
<span class="cline-any cline-yes">31x</span>
|
546
|
+
<span class="cline-any cline-yes">31x</span>
|
547
|
+
<span class="cline-any cline-yes">31x</span>
|
548
|
+
<span class="cline-any cline-yes">31x</span>
|
549
|
+
<span class="cline-any cline-yes">31x</span>
|
550
|
+
<span class="cline-any cline-yes">31x</span>
|
551
|
+
<span class="cline-any cline-yes">31x</span>
|
552
|
+
<span class="cline-any cline-yes">31x</span>
|
553
|
+
<span class="cline-any cline-yes">31x</span>
|
554
|
+
<span class="cline-any cline-yes">31x</span>
|
555
|
+
<span class="cline-any cline-yes">31x</span>
|
556
|
+
<span class="cline-any cline-yes">31x</span>
|
557
|
+
<span class="cline-any cline-yes">31x</span>
|
558
|
+
<span class="cline-any cline-yes">31x</span>
|
559
|
+
<span class="cline-any cline-yes">31x</span>
|
560
|
+
<span class="cline-any cline-yes">46x</span>
|
561
|
+
<span class="cline-any cline-yes">41x</span>
|
562
|
+
<span class="cline-any cline-yes">46x</span>
|
563
|
+
<span class="cline-any cline-yes">5x</span>
|
564
|
+
<span class="cline-any cline-yes">5x</span>
|
565
|
+
<span class="cline-any cline-yes">36x</span>
|
566
|
+
<span class="cline-any cline-yes">36x</span>
|
567
|
+
<span class="cline-any cline-yes">46x</span>
|
568
|
+
<span class="cline-any cline-yes">31x</span>
|
569
|
+
<span class="cline-any cline-yes">31x</span>
|
570
|
+
<span class="cline-any cline-no"> </span>
|
571
|
+
<span class="cline-any cline-no"> </span>
|
572
|
+
<span class="cline-any cline-no"> </span>
|
573
|
+
<span class="cline-any cline-no"> </span>
|
574
|
+
<span class="cline-any cline-yes">31x</span>
|
575
|
+
<span class="cline-any cline-yes">31x</span>
|
576
|
+
<span class="cline-any cline-no"> </span>
|
577
|
+
<span class="cline-any cline-no"> </span>
|
578
|
+
<span class="cline-any cline-no"> </span>
|
579
|
+
<span class="cline-any cline-yes">31x</span>
|
580
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { put, get, getAll, eventsSince } from './prolly.js'
|
581
|
+
import Blockstore, { doTransaction } from './blockstore.js'
|
582
|
+
|
583
|
+
// const sleep = ms => new Promise(resolve => setTimeout(resolve, ms))
|
584
|
+
|
585
|
+
/**
|
586
|
+
* @class Fireproof
|
587
|
+
* @classdesc Fireproof stores data in IndexedDB and provides a Merkle clock.
|
588
|
+
* This is the main class for saving and loading JSON and other documents with the database. You can find additional examples and
|
589
|
+
* usage guides in the repository README.
|
590
|
+
*
|
591
|
+
* @param {Blockstore} blocks - The block storage instance to use documents and indexes
|
592
|
+
* @param {CID[]} clock - The Merkle clock head to use for the Fireproof instance.
|
593
|
+
* @param {object} [config] - Optional configuration options for the Fireproof instance.
|
594
|
+
* @param {object} [authCtx] - Optional authorization context object to use for any authentication checks.
|
595
|
+
*
|
596
|
+
*/
|
597
|
+
export default class Fireproof {
|
598
|
+
#listeners = new Set()
|
599
|
+
|
600
|
+
/**
|
601
|
+
* @function storage
|
602
|
+
* @memberof Fireproof
|
603
|
+
* Creates a new Fireproof instance with default storage settings
|
604
|
+
* Most apps should use this and not worry about the details.
|
605
|
+
* @static
|
606
|
+
* @returns {Fireproof} - a new Fireproof instance
|
607
|
+
*/
|
608
|
+
static storage = () => {
|
609
|
+
return new Fireproof(new Blockstore(), [])
|
610
|
+
}
|
611
|
+
|
612
|
+
constructor (blocks, clock, config = {}, authCtx = {}) {
|
613
|
+
this.blocks = blocks
|
614
|
+
this.clock = clock
|
615
|
+
this.config = config
|
616
|
+
this.authCtx = authCtx
|
617
|
+
this.instanceId = 'db.' + Math.random().toString(36).substring(2, 7)
|
618
|
+
}
|
619
|
+
|
620
|
+
/**
|
621
|
+
* Returns a snapshot of the current Fireproof instance as a new instance.
|
622
|
+
* @function snapshot
|
623
|
+
* @param {CID[]} clock - The Merkle clock head to use for the snapshot.
|
624
|
+
* @returns {Fireproof}
|
625
|
+
* A new Fireproof instance representing the snapshot.
|
626
|
+
* @memberof Fireproof
|
627
|
+
* @instance
|
628
|
+
*/
|
629
|
+
snapshot (clock) {
|
630
|
+
// how to handle listeners, views, and config?
|
631
|
+
// todo needs a test for that
|
632
|
+
return new Fireproof(this.blocks, clock <span class="branch-0 cbranch-no" title="branch not covered" >|| this.clock)</span>
|
633
|
+
}
|
634
|
+
|
635
|
+
/**
|
636
|
+
* Move the current instance to a new point in time. This triggers a notification to all listeners
|
637
|
+
* of the Fireproof instance so they can repaint UI, etc.
|
638
|
+
* @param {CID[] } clock
|
639
|
+
* Clock to use for the snapshot.
|
640
|
+
* @returns {Promise<void>}
|
641
|
+
* @memberof Fireproof
|
642
|
+
* @instance
|
643
|
+
*/
|
644
|
+
async setClock (clock) {
|
645
|
+
// console.log('setClock', this.instanceId, clock)
|
646
|
+
this.clock = clock.map((item) => (item['/'] ? item['/'] <span class="branch-0 cbranch-no" title="branch not covered" >: item)</span>)
|
647
|
+
await this.#notifyListeners({ reset: true, clock })
|
648
|
+
}
|
649
|
+
|
650
|
+
/**
|
651
|
+
* Renders the Fireproof instance as a JSON object.
|
652
|
+
* @returns {Object} - The JSON representation of the Fireproof instance. Includes clock heads for the database and its indexes.
|
653
|
+
* @memberof Fireproof
|
654
|
+
* @instance
|
655
|
+
*/
|
656
|
+
<span class="fstat-no" title="function not covered" > toJSON () {</span>
|
657
|
+
<span class="cstat-no" title="statement not covered" > // todo this also needs to return the index roots...</span>
|
658
|
+
<span class="cstat-no" title="statement not covered" > return { clock: this.clock }</span>
|
659
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
660
|
+
|
661
|
+
/**
|
662
|
+
* Returns the changes made to the Fireproof instance since the specified event.
|
663
|
+
* @function changesSince
|
664
|
+
* @param {CID[]} [event] - The clock head to retrieve changes since. If null or undefined, retrieves all changes.
|
665
|
+
* @returns {Object<{rows : Object[], clock: CID[]}>} An object containing the rows and the head of the instance's clock.
|
666
|
+
* @memberof Fireproof
|
667
|
+
* @instance
|
668
|
+
*/
|
669
|
+
async changesSince (event) {
|
670
|
+
// console.log('changesSince', this.instanceId, event, this.clock)
|
671
|
+
let rows
|
672
|
+
if (event) {
|
673
|
+
const resp = await eventsSince(this.blocks, this.clock, event)
|
674
|
+
const docsMap = new Map()
|
675
|
+
for (const { key, type, value } of resp) {
|
676
|
+
if (type === 'del') <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
677
|
+
<span class="cstat-no" title="statement not covered" > docsMap.set(key, { key, del: true })</span>
|
678
|
+
} else {
|
679
|
+
docsMap.set(key, { key, value })
|
680
|
+
}
|
681
|
+
}
|
682
|
+
rows = Array.from(docsMap.values())
|
683
|
+
// console.log('change rows', this.instanceId, rows)
|
684
|
+
} else {
|
685
|
+
rows = (await getAll(this.blocks, this.clock)).map(({ key, value }) => ({ key, value }))
|
686
|
+
// console.log('dbdoc rows', this.instanceId, rows)
|
687
|
+
}
|
688
|
+
return { rows, clock: this.clock }
|
689
|
+
}
|
690
|
+
|
691
|
+
/**
|
692
|
+
* Registers a Listener to be called when the Fireproof instance's clock is updated.
|
693
|
+
* Recieves live changes from the database after they are committed.
|
694
|
+
* @param {Function} listener - The listener to be called when the clock is updated.
|
695
|
+
* @returns {Function} - A function that can be called to unregister the listener.
|
696
|
+
* @memberof Fireproof
|
697
|
+
*/
|
698
|
+
registerListener (listener) {
|
699
|
+
this.#listeners.add(listener)
|
700
|
+
return () => {
|
701
|
+
<span class="cstat-no" title="statement not covered" > this.#listeners.delete(listener)</span>
|
702
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
703
|
+
}
|
704
|
+
|
705
|
+
async #notifyListeners (changes) {
|
706
|
+
// await sleep(0)
|
707
|
+
for (const listener of this.#listeners) {
|
708
|
+
await listener(changes)
|
709
|
+
}
|
710
|
+
}
|
711
|
+
|
712
|
+
/**
|
713
|
+
* Runs validation on the specified document using the Fireproof instance's configuration. Throws an error if the document is invalid.
|
714
|
+
*
|
715
|
+
* @param {Object} doc - The document to validate.
|
716
|
+
* @returns {Promise<void>}
|
717
|
+
* @throws {Error} - Throws an error if the document is invalid.
|
718
|
+
* @memberof Fireproof
|
719
|
+
* @instance
|
720
|
+
*/
|
721
|
+
async #runValidation (doc) {
|
722
|
+
if (this.config && this.config.validateChange) {
|
723
|
+
const oldDoc = await this.get(doc._id)
|
724
|
+
.then((doc) => doc)
|
725
|
+
.catch(() => ({}))
|
726
|
+
this.config.validateChange(doc, oldDoc, this.authCtx)
|
727
|
+
}
|
728
|
+
}
|
729
|
+
|
730
|
+
/**
|
731
|
+
* Adds a new document to the database, or updates an existing document. Returns the ID of the document and the new clock head.
|
732
|
+
*
|
733
|
+
* @param {Object} doc - the document to be added
|
734
|
+
* @param {string} doc._id - the document ID. If not provided, a random ID will be generated.
|
735
|
+
* @param {Object} doc.* - the document data to be added
|
736
|
+
* @returns {Object<{ id: string, clock: CID[] }>} - The result of adding the document to the database
|
737
|
+
* @memberof Fireproof
|
738
|
+
* @instance
|
739
|
+
*/
|
740
|
+
async put ({ _id, ...doc }) {
|
741
|
+
const id = _id <span class="branch-0 cbranch-no" title="branch not covered" >|| 'f' + Math.random().toString(36).slice(2)</span>
|
742
|
+
await this.#runValidation({ _id: id, ...doc })
|
743
|
+
return await this.#putToProllyTree({ key: id, value: doc })
|
744
|
+
}
|
745
|
+
|
746
|
+
/**
|
747
|
+
* Deletes a document from the database
|
748
|
+
* @param {string} id - the document ID
|
749
|
+
* @returns {Object<{ id: string, clock: CID[] }>} - The result of deleting the document from the database
|
750
|
+
* @memberof Fireproof
|
751
|
+
* @instance
|
752
|
+
*/
|
753
|
+
async del (id) {
|
754
|
+
await this.#runValidation({ _id: id, _deleted: true })
|
755
|
+
// return await this.#putToProllyTree({ key: id, del: true }) // not working at prolly tree layer?
|
756
|
+
// this tombstone is temporary until we can get the prolly tree to delete
|
757
|
+
return await this.#putToProllyTree({ key: id, value: null })
|
758
|
+
}
|
759
|
+
|
760
|
+
/**
|
761
|
+
* Updates the underlying storage with the specified event.
|
762
|
+
* @private
|
763
|
+
* @param {import('../clock').EventLink<import('../crdt').EventData>} event - the event to add
|
764
|
+
* @returns {Object<{ id: string, clock: import('../clock').EventLink<import('../crdt').EventData }>} - The result of adding the event to storage
|
765
|
+
*/
|
766
|
+
async #putToProllyTree (event) {
|
767
|
+
const result = await doTransaction(
|
768
|
+
'#putToProllyTree',
|
769
|
+
this.blocks,
|
770
|
+
async (blocks) => await put(blocks, this.clock, event)
|
771
|
+
)
|
772
|
+
if (!result) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
773
|
+
<span class="cstat-no" title="statement not covered" > console.error('failed', event)</span>
|
774
|
+
<span class="cstat-no" title="statement not covered" > throw new Error('failed to put at storage layer')</span>
|
775
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
776
|
+
this.clock = result.head // do we want to do this as a finally block
|
777
|
+
result.id = event.key
|
778
|
+
await this.#notifyListeners([event])
|
779
|
+
return { id: result.id, clock: this.clock }
|
780
|
+
}
|
781
|
+
|
782
|
+
// /**
|
783
|
+
// * Advances the clock to the specified event and updates the root CID
|
784
|
+
// * Will be used by replication
|
785
|
+
// * @param {import('../clock').EventLink<import('../crdt').EventData>} event - the event to advance to
|
786
|
+
// * @returns {import('../clock').EventLink<import('../crdt').EventData>[]} - the new clock after advancing
|
787
|
+
// */
|
788
|
+
// async advance (event) {
|
789
|
+
// this.clock = await advance(this.blocks, this.clock, event)
|
790
|
+
// this.rootCid = await root(this.blocks, this.clock)
|
791
|
+
// return this.clock
|
792
|
+
// }
|
793
|
+
|
794
|
+
/**
|
795
|
+
* Displays a visualization of the current clock in the console
|
796
|
+
*/
|
797
|
+
// async visClock () {
|
798
|
+
// const shortLink = (l) => `${String(l).slice(0, 4)}..${String(l).slice(-4)}`
|
799
|
+
// const renderNodeLabel = (event) => {
|
800
|
+
// return event.value.data.type === 'put'
|
801
|
+
// ? `${shortLink(event.cid)}\\nput(${shortLink(event.value.data.key)},
|
802
|
+
// {${Object.values(event.value.data.value)}})`
|
803
|
+
// : `${shortLink(event.cid)}\\ndel(${event.value.data.key})`
|
804
|
+
// }
|
805
|
+
// for await (const line of vis(this.blocks, this.clock, { renderNodeLabel })) console.log(line)
|
806
|
+
// }
|
807
|
+
|
808
|
+
/**
|
809
|
+
* Retrieves the document with the specified ID from the database
|
810
|
+
*
|
811
|
+
* @param {string} key - the ID of the document to retrieve
|
812
|
+
* @returns {Object<{_id: string, ...doc: Object}>} - the document with the specified ID
|
813
|
+
* @memberof Fireproof
|
814
|
+
* @instance
|
815
|
+
*/
|
816
|
+
async get (key) {
|
817
|
+
const got = await get(this.blocks, this.clock, key)
|
818
|
+
// this tombstone is temporary until we can get the prolly tree to delete
|
819
|
+
if (got === null) {
|
820
|
+
throw new Error('Not found')
|
821
|
+
}
|
822
|
+
got._id = key
|
823
|
+
return got
|
824
|
+
}
|
825
|
+
|
826
|
+
<span class="fstat-no" title="function not covered" > setCarUploader (carUploaderFn) {</span>
|
827
|
+
<span class="cstat-no" title="statement not covered" > console.log('registering car uploader')</span>
|
828
|
+
<span class="cstat-no" title="statement not covered" > // https://en.wikipedia.org/wiki/Law_of_Demeter - this is a violation of the law of demeter</span>
|
829
|
+
<span class="cstat-no" title="statement not covered" > this.blocks.valet.uploadFunction = carUploaderFn</span>
|
830
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
831
|
+
|
832
|
+
<span class="fstat-no" title="function not covered" > setRemoteBlockReader (remoteBlockReaderFn) {</span>
|
833
|
+
<span class="cstat-no" title="statement not covered" > // console.log('registering remote block reader')</span>
|
834
|
+
<span class="cstat-no" title="statement not covered" > this.blocks.valet.remoteBlockFunction = remoteBlockReaderFn</span>
|
835
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
836
|
+
}
|
837
|
+
</pre></td></tr></table></pre>
|
838
|
+
|
839
|
+
<div class='push'></div><!-- for sticky footer -->
|
840
|
+
</div><!-- /wrapper -->
|
841
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
842
|
+
Code coverage generated by
|
843
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
844
|
+
at 2023-03-06T23:55:04.435Z
|
845
|
+
</div>
|
846
|
+
<script src="prettify.js"></script>
|
847
|
+
<script>
|
848
|
+
window.onload = function () {
|
849
|
+
prettyPrint();
|
850
|
+
};
|
851
|
+
</script>
|
852
|
+
<script src="sorter.js"></script>
|
853
|
+
<script src="block-navigation.js"></script>
|
854
|
+
</body>
|
855
|
+
</html>
|
856
|
+
|