@picgo/store 1.0.1 → 2.0.0

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.
@@ -24,28 +24,28 @@
24
24
  <div class='fl pad1y space-right2'>
25
25
  <span class="strong">100% </span>
26
26
  <span class="quiet">Statements</span>
27
- <span class='fraction'>41/41</span>
27
+ <span class='fraction'>75/75</span>
28
28
  </div>
29
29
 
30
30
 
31
31
  <div class='fl pad1y space-right2'>
32
- <span class="strong">100% </span>
32
+ <span class="strong">92.11% </span>
33
33
  <span class="quiet">Branches</span>
34
- <span class='fraction'>13/13</span>
34
+ <span class='fraction'>35/38</span>
35
35
  </div>
36
36
 
37
37
 
38
38
  <div class='fl pad1y space-right2'>
39
39
  <span class="strong">100% </span>
40
40
  <span class="quiet">Functions</span>
41
- <span class='fraction'>8/8</span>
41
+ <span class='fraction'>17/17</span>
42
42
  </div>
43
43
 
44
44
 
45
45
  <div class='fl pad1y space-right2'>
46
46
  <span class="strong">100% </span>
47
47
  <span class="quiet">Lines</span>
48
- <span class='fraction'>41/41</span>
48
+ <span class='fraction'>72/72</span>
49
49
  </div>
50
50
 
51
51
 
@@ -144,60 +144,162 @@
144
144
  <a name='L86'></a><a href='#L86'>86</a>
145
145
  <a name='L87'></a><a href='#L87'>87</a>
146
146
  <a name='L88'></a><a href='#L88'>88</a>
147
- <a name='L89'></a><a href='#L89'>89</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
147
+ <a name='L89'></a><a href='#L89'>89</a>
148
+ <a name='L90'></a><a href='#L90'>90</a>
149
+ <a name='L91'></a><a href='#L91'>91</a>
150
+ <a name='L92'></a><a href='#L92'>92</a>
151
+ <a name='L93'></a><a href='#L93'>93</a>
152
+ <a name='L94'></a><a href='#L94'>94</a>
153
+ <a name='L95'></a><a href='#L95'>95</a>
154
+ <a name='L96'></a><a href='#L96'>96</a>
155
+ <a name='L97'></a><a href='#L97'>97</a>
156
+ <a name='L98'></a><a href='#L98'>98</a>
157
+ <a name='L99'></a><a href='#L99'>99</a>
158
+ <a name='L100'></a><a href='#L100'>100</a>
159
+ <a name='L101'></a><a href='#L101'>101</a>
160
+ <a name='L102'></a><a href='#L102'>102</a>
161
+ <a name='L103'></a><a href='#L103'>103</a>
162
+ <a name='L104'></a><a href='#L104'>104</a>
163
+ <a name='L105'></a><a href='#L105'>105</a>
164
+ <a name='L106'></a><a href='#L106'>106</a>
165
+ <a name='L107'></a><a href='#L107'>107</a>
166
+ <a name='L108'></a><a href='#L108'>108</a>
167
+ <a name='L109'></a><a href='#L109'>109</a>
168
+ <a name='L110'></a><a href='#L110'>110</a>
169
+ <a name='L111'></a><a href='#L111'>111</a>
170
+ <a name='L112'></a><a href='#L112'>112</a>
171
+ <a name='L113'></a><a href='#L113'>113</a>
172
+ <a name='L114'></a><a href='#L114'>114</a>
173
+ <a name='L115'></a><a href='#L115'>115</a>
174
+ <a name='L116'></a><a href='#L116'>116</a>
175
+ <a name='L117'></a><a href='#L117'>117</a>
176
+ <a name='L118'></a><a href='#L118'>118</a>
177
+ <a name='L119'></a><a href='#L119'>119</a>
178
+ <a name='L120'></a><a href='#L120'>120</a>
179
+ <a name='L121'></a><a href='#L121'>121</a>
180
+ <a name='L122'></a><a href='#L122'>122</a>
181
+ <a name='L123'></a><a href='#L123'>123</a>
182
+ <a name='L124'></a><a href='#L124'>124</a>
183
+ <a name='L125'></a><a href='#L125'>125</a>
184
+ <a name='L126'></a><a href='#L126'>126</a>
185
+ <a name='L127'></a><a href='#L127'>127</a>
186
+ <a name='L128'></a><a href='#L128'>128</a>
187
+ <a name='L129'></a><a href='#L129'>129</a>
188
+ <a name='L130'></a><a href='#L130'>130</a>
189
+ <a name='L131'></a><a href='#L131'>131</a>
190
+ <a name='L132'></a><a href='#L132'>132</a>
191
+ <a name='L133'></a><a href='#L133'>133</a>
192
+ <a name='L134'></a><a href='#L134'>134</a>
193
+ <a name='L135'></a><a href='#L135'>135</a>
194
+ <a name='L136'></a><a href='#L136'>136</a>
195
+ <a name='L137'></a><a href='#L137'>137</a>
196
+ <a name='L138'></a><a href='#L138'>138</a>
197
+ <a name='L139'></a><a href='#L139'>139</a>
198
+ <a name='L140'></a><a href='#L140'>140</a>
199
+ <a name='L141'></a><a href='#L141'>141</a>
200
+ <a name='L142'></a><a href='#L142'>142</a>
201
+ <a name='L143'></a><a href='#L143'>143</a>
202
+ <a name='L144'></a><a href='#L144'>144</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
203
+ <span class="cline-any cline-neutral">&nbsp;</span>
204
+ <span class="cline-any cline-neutral">&nbsp;</span>
148
205
  <span class="cline-any cline-yes">1x</span>
149
206
  <span class="cline-any cline-yes">1x</span>
150
207
  <span class="cline-any cline-yes">1x</span>
208
+ <span class="cline-any cline-yes">1x</span>
209
+ <span class="cline-any cline-neutral">&nbsp;</span>
210
+ <span class="cline-any cline-neutral">&nbsp;</span>
151
211
  <span class="cline-any cline-neutral">&nbsp;</span>
152
212
  <span class="cline-any cline-neutral">&nbsp;</span>
153
213
  <span class="cline-any cline-neutral">&nbsp;</span>
214
+ <span class="cline-any cline-yes">18x</span>
215
+ <span class="cline-any cline-yes">18x</span>
154
216
  <span class="cline-any cline-neutral">&nbsp;</span>
155
- <span class="cline-any cline-yes">10x</span>
156
217
  <span class="cline-any cline-neutral">&nbsp;</span>
157
218
  <span class="cline-any cline-neutral">&nbsp;</span>
158
- <span class="cline-any cline-yes">10x</span>
219
+ <span class="cline-any cline-yes">18x</span>
159
220
  <span class="cline-any cline-yes">2x</span>
160
221
  <span class="cline-any cline-neutral">&nbsp;</span>
161
- <span class="cline-any cline-yes">8x</span>
162
- <span class="cline-any cline-yes">8x</span>
163
- <span class="cline-any cline-yes">8x</span>
164
- <span class="cline-any cline-yes">8x</span>
222
+ <span class="cline-any cline-yes">16x</span>
223
+ <span class="cline-any cline-yes">16x</span>
224
+ <span class="cline-any cline-yes">16x</span>
225
+ <span class="cline-any cline-yes">16x</span>
165
226
  <span class="cline-any cline-neutral">&nbsp;</span>
166
227
  <span class="cline-any cline-neutral">&nbsp;</span>
167
228
  <span class="cline-any cline-neutral">&nbsp;</span>
168
- <span class="cline-any cline-yes">30x</span>
169
- <span class="cline-any cline-yes">8x</span>
229
+ <span class="cline-any cline-yes">1x</span>
170
230
  <span class="cline-any cline-neutral">&nbsp;</span>
171
- <span class="cline-any cline-yes">30x</span>
172
231
  <span class="cline-any cline-neutral">&nbsp;</span>
173
232
  <span class="cline-any cline-neutral">&nbsp;</span>
233
+ <span class="cline-any cline-yes">56x</span>
234
+ <span class="cline-any cline-yes">16x</span>
235
+ <span class="cline-any cline-yes">16x</span>
174
236
  <span class="cline-any cline-neutral">&nbsp;</span>
175
- <span class="cline-any cline-yes">3x</span>
237
+ <span class="cline-any cline-yes">56x</span>
176
238
  <span class="cline-any cline-neutral">&nbsp;</span>
177
239
  <span class="cline-any cline-neutral">&nbsp;</span>
178
240
  <span class="cline-any cline-neutral">&nbsp;</span>
179
- <span class="cline-any cline-yes">1x</span>
241
+ <span class="cline-any cline-yes">18x</span>
242
+ <span class="cline-any cline-yes">18x</span>
243
+ <span class="cline-any cline-yes">18x</span>
180
244
  <span class="cline-any cline-yes">6x</span>
245
+ <span class="cline-any cline-yes">1x</span>
181
246
  <span class="cline-any cline-neutral">&nbsp;</span>
182
247
  <span class="cline-any cline-yes">6x</span>
248
+ <span class="cline-any cline-yes">1x</span>
183
249
  <span class="cline-any cline-neutral">&nbsp;</span>
184
250
  <span class="cline-any cline-yes">6x</span>
185
251
  <span class="cline-any cline-yes">1x</span>
186
- <span class="cline-any cline-yes">1x</span>
187
252
  <span class="cline-any cline-neutral">&nbsp;</span>
188
- <span class="cline-any cline-yes">5x</span>
189
253
  <span class="cline-any cline-neutral">&nbsp;</span>
190
- <span class="cline-any cline-yes">5x</span>
191
- <span class="cline-any cline-yes">5x</span>
192
- <span class="cline-any cline-yes">5x</span>
254
+ <span class="cline-any cline-yes">18x</span>
255
+ <span class="cline-any cline-neutral">&nbsp;</span>
256
+ <span class="cline-any cline-neutral">&nbsp;</span>
257
+ <span class="cline-any cline-neutral">&nbsp;</span>
258
+ <span class="cline-any cline-neutral">&nbsp;</span>
259
+ <span class="cline-any cline-neutral">&nbsp;</span>
260
+ <span class="cline-any cline-neutral">&nbsp;</span>
261
+ <span class="cline-any cline-yes">33x</span>
262
+ <span class="cline-any cline-neutral">&nbsp;</span>
263
+ <span class="cline-any cline-neutral">&nbsp;</span>
264
+ <span class="cline-any cline-neutral">&nbsp;</span>
265
+ <span class="cline-any cline-yes">12x</span>
266
+ <span class="cline-any cline-neutral">&nbsp;</span>
267
+ <span class="cline-any cline-neutral">&nbsp;</span>
268
+ <span class="cline-any cline-neutral">&nbsp;</span>
269
+ <span class="cline-any cline-yes">13x</span>
270
+ <span class="cline-any cline-neutral">&nbsp;</span>
271
+ <span class="cline-any cline-neutral">&nbsp;</span>
272
+ <span class="cline-any cline-neutral">&nbsp;</span>
273
+ <span class="cline-any cline-yes">8x</span>
274
+ <span class="cline-any cline-yes">8x</span>
275
+ <span class="cline-any cline-yes">8x</span>
276
+ <span class="cline-any cline-yes">8x</span>
193
277
  <span class="cline-any cline-neutral">&nbsp;</span>
194
278
  <span class="cline-any cline-neutral">&nbsp;</span>
195
279
  <span class="cline-any cline-neutral">&nbsp;</span>
196
280
  <span class="cline-any cline-yes">1x</span>
281
+ <span class="cline-any cline-yes">9x</span>
282
+ <span class="cline-any cline-yes">9x</span>
283
+ <span class="cline-any cline-neutral">&nbsp;</span>
284
+ <span class="cline-any cline-yes">9x</span>
197
285
  <span class="cline-any cline-yes">1x</span>
198
- <span class="cline-any cline-yes">2x</span>
286
+ <span class="cline-any cline-yes">1x</span>
287
+ <span class="cline-any cline-neutral">&nbsp;</span>
288
+ <span class="cline-any cline-yes">8x</span>
289
+ <span class="cline-any cline-yes">8x</span>
290
+ <span class="cline-any cline-yes">8x</span>
291
+ <span class="cline-any cline-yes">3x</span>
292
+ <span class="cline-any cline-neutral">&nbsp;</span>
293
+ <span class="cline-any cline-yes">8x</span>
294
+ <span class="cline-any cline-neutral">&nbsp;</span>
295
+ <span class="cline-any cline-neutral">&nbsp;</span>
199
296
  <span class="cline-any cline-neutral">&nbsp;</span>
200
297
  <span class="cline-any cline-yes">1x</span>
298
+ <span class="cline-any cline-yes">2x</span>
299
+ <span class="cline-any cline-yes">5x</span>
300
+ <span class="cline-any cline-neutral">&nbsp;</span>
301
+ <span class="cline-any cline-yes">2x</span>
302
+ <span class="cline-any cline-yes">2x</span>
201
303
  <span class="cline-any cline-neutral">&nbsp;</span>
202
304
  <span class="cline-any cline-neutral">&nbsp;</span>
203
305
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -205,7 +307,8 @@
205
307
  <span class="cline-any cline-yes">3x</span>
206
308
  <span class="cline-any cline-yes">3x</span>
207
309
  <span class="cline-any cline-yes">3x</span>
208
- <span class="cline-any cline-neutral">&nbsp;</span>
310
+ <span class="cline-any cline-yes">5x</span>
311
+ <span class="cline-any cline-yes">2x</span>
209
312
  <span class="cline-any cline-yes">2x</span>
210
313
  <span class="cline-any cline-yes">2x</span>
211
314
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -214,16 +317,23 @@
214
317
  <span class="cline-any cline-neutral">&nbsp;</span>
215
318
  <span class="cline-any cline-neutral">&nbsp;</span>
216
319
  <span class="cline-any cline-neutral">&nbsp;</span>
217
- <span class="cline-any cline-yes">3x</span>
320
+ <span class="cline-any cline-yes">4x</span>
218
321
  <span class="cline-any cline-neutral">&nbsp;</span>
219
322
  <span class="cline-any cline-neutral">&nbsp;</span>
220
323
  <span class="cline-any cline-neutral">&nbsp;</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>
221
331
  <span class="cline-any cline-neutral">&nbsp;</span>
222
332
  <span class="cline-any cline-neutral">&nbsp;</span>
223
333
  <span class="cline-any cline-neutral">&nbsp;</span>
224
334
  <span class="cline-any cline-neutral">&nbsp;</span>
225
335
  <span class="cline-any cline-yes">1x</span>
226
- <span class="cline-any cline-neutral">&nbsp;</span>
336
+ <span class="cline-any cline-yes">1x</span>
227
337
  <span class="cline-any cline-yes">1x</span>
228
338
  <span class="cline-any cline-yes">1x</span>
229
339
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -232,15 +342,21 @@
232
342
  <span class="cline-any cline-neutral">&nbsp;</span>
233
343
  <span class="cline-any cline-yes">1x</span>
234
344
  <span class="cline-any cline-neutral">&nbsp;</span>
235
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Lowdb from 'lowdb'
345
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/* eslint-disable @typescript-eslint/no-floating-promises */
346
+ /* eslint-disable no-unused-expressions */
347
+ /* eslint-disable @typescript-eslint/no-non-null-assertion */
348
+ import { Low } from '@commonify/lowdb'
236
349
  import { ZlibAdapter } from './adapters/ZlibAdapter'
237
350
  import { metaInfoHelper } from './utils/metaInfoHelper'
238
- import { IMetaInfoMode, IObject, IResult } from './types'
351
+ import { IMetaInfoMode, IObject, IResult, IGetResult, IFilter, ILowData, ILowDataKeyMap } from './types'
352
+ &nbsp;
239
353
  class DBStore {
240
- private readonly db: Promise&lt;Lowdb.LowdbAsync&lt;any&gt;&gt;
354
+ private readonly db: Low&lt;ILowData&gt;
241
355
  private readonly collectionName: string
242
356
  private readonly collectionKey: string
243
- private reading: Promise&lt;Lowdb.LowdbAsync&lt;any&gt;&gt; | null = null
357
+ private hasRead = false
358
+ public errorList: Array&lt;Error | string&gt; = []
359
+ private readonly adapter: ZlibAdapter
244
360
  constructor (dbPath: string, collectionName: string) {
245
361
  // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
246
362
  if (!dbPath || !collectionName) {
@@ -248,72 +364,121 @@ class DBStore {
248
364
  }
249
365
  this.collectionName = collectionName
250
366
  this.collectionKey = `__${collectionName}_KEY__`
251
- const adapter = new ZlibAdapter(dbPath, collectionName)
252
- this.db = Lowdb&lt;any&gt;(adapter)
367
+ this.adapter = new ZlibAdapter(dbPath, collectionName, this.errorList)
368
+ this.db = new Low&lt;ILowData&gt;(this.adapter)
369
+ }
370
+ &nbsp;
371
+ getAdapter (): ZlibAdapter {
372
+ return this.adapter
373
+ }
374
+ &nbsp;
375
+ async read (flush = false): Promise&lt;ILowData | null&gt; {
376
+ if (flush || !this.hasRead) {
377
+ this.hasRead = true
378
+ await this.db.read()
379
+ }
380
+ return this.db.data
253
381
  }
254
382
  &nbsp;
255
- async read (flush = false): Promise&lt;Lowdb.LowdbAsync&lt;any&gt;&gt; {
256
- if (flush || !this.reading) {
257
- this.reading = (await this.db).read()
383
+ async get (filter?: IFilter): Promise&lt;IGetResult&lt;IObject&gt;&gt; {
384
+ let data: Array&lt;IResult&lt;IObject&gt;&gt; = (await this.getCollection()).slice()
385
+ const total = data.length
386
+ if (filter !== undefined) {
387
+ if (filter.orderBy === 'desc') {
388
+ data = data.reverse()
389
+ }
390
+ if (typeof filter.offset === 'number' &amp;&amp; filter.offset &gt;= 0) {
391
+ data = data.slice(filter.offset)
392
+ }
393
+ if (typeof filter.limit === 'number' &amp;&amp; filter.limit &gt; 0) {
394
+ data = data.slice(0, filter.limit)
395
+ }
396
+ }
397
+ return {
398
+ total,
399
+ data
258
400
  }
259
- return this.reading
260
401
  }
261
402
  &nbsp;
262
- async get (): Promise&lt;IObject[]&gt; {
263
- return (await this.read()).get(this.collectionName).value()
403
+ private async getCollection (): Promise&lt;Array&lt;IResult&lt;IObject&gt;&gt;&gt; {
404
+ return ((await this.read())<span class="branch-0 cbranch-no" title="branch not covered" >?.[t</span>his.collectionName]) as Array&lt;IResult&lt;IObject&gt;&gt;
405
+ }
406
+ &nbsp;
407
+ private async getCollectionKey (id: string): Promise&lt;1 | null&gt; {
408
+ return (await this.getCollectionKeyMap())[id]
409
+ }
410
+ &nbsp;
411
+ private async getCollectionKeyMap (): Promise&lt;ILowDataKeyMap&gt; {
412
+ return (((await this.read())<span class="branch-0 cbranch-no" title="branch not covered" >?.[t</span>his.collectionKey]) as ILowDataKeyMap)
413
+ }
414
+ &nbsp;
415
+ private async setCollectionKey (id: string): Promise&lt;void&gt; {
416
+ await this.read()
417
+ const data = this.db.data!
418
+ const collectionKeyMap = data[this.collectionKey] as ILowDataKeyMap
419
+ collectionKeyMap[id] = 1
264
420
  }
265
421
  &nbsp;
266
422
  @metaInfoHelper(IMetaInfoMode.create)
267
- async insert&lt;T&gt; (value: T): Promise&lt;IResult&lt;T&gt;&gt; {
423
+ async insert&lt;T&gt; (value: T, writable = true): Promise&lt;IResult&lt;T&gt;&gt; {
268
424
  const id = (value as IResult&lt;T&gt;).id
269
- // @ts-ignore
270
- const result = (await this.read()).get(`${this.collectionKey}.${id}`).value()
425
+ const result = await this.getCollectionKey(id)
271
426
  // @ts-ignore
272
427
  if (result) {
273
428
  await this.updateById(id, value)
274
429
  return (value as IResult&lt;T&gt;)
275
430
  }
276
- const collection = (await this.read()).get(this.collectionName)
277
- // @ts-ignore
278
- await collection.push(value).write()
279
- await (await this.read()).set(`${this.collectionKey}.${id}`, 1).write()
431
+ (await this.getCollection()).push(value as IResult&lt;T&gt;)
432
+ await this.setCollectionKey(id)
433
+ if (writable) {
434
+ await this.db.write()
435
+ }
280
436
  return (value as IResult&lt;T&gt;)
281
437
  }
282
438
  &nbsp;
283
- @metaInfoHelper(IMetaInfoMode.create)
439
+ @metaInfoHelper(IMetaInfoMode.createMany)
284
440
  async insertMany&lt;T&gt; (value: T[]): Promise&lt;Array&lt;IResult&lt;T&gt;&gt;&gt; {
285
441
  for (const item of value) {
286
- await this.insert(item)
442
+ await this.insert(item, false)
287
443
  }
444
+ await this.db.write()
288
445
  return (value as Array&lt;IResult&lt;T&gt;&gt;)
289
446
  }
290
447
  &nbsp;
291
448
  @metaInfoHelper(IMetaInfoMode.update)
292
449
  async updateById (id: string, value: IObject): Promise&lt;boolean&gt; {
293
- const collection = (await this.read()).get(this.collectionName)
294
- const result = (await this.read()).get(`${this.collectionKey}.${id}`).value()
450
+ const collection = await this.getCollection()
451
+ const result = await this.getCollectionKey(id)
295
452
  if (result) {
296
- // @ts-ignore
297
- await collection.find({ id }).assign(value).write()
453
+ const item = collection.find(item =&gt; item.id === id)
454
+ Object.assign(item, value)
455
+ await this.db.write()
298
456
  return true
299
457
  } else {
300
458
  return false
301
459
  }
302
460
  }
303
461
  &nbsp;
304
- async getById&lt;T&gt; (id: string): Promise&lt;T | undefined&gt; {
305
- return (await this.read())
306
- .get(this.collectionName)
307
- // @ts-ignore
308
- .find({ id })
309
- .value()
462
+ async getById&lt;T&gt; (id: string): Promise&lt;IResult&lt;T&gt; | undefined&gt; {
463
+ return (await this.getCollection()).find(item =&gt; item.id === id) as IResult&lt;T&gt;
310
464
  }
311
465
  &nbsp;
312
466
  async removeById (id: string): Promise&lt;void&gt; {
313
- const collection = (await this.read()).get(this.collectionName)
314
- // @ts-ignore
315
- await collection.remove({ id }).write()
316
- await (await this.read()).get(this.collectionKey).unset(id).write()
467
+ const collection = await this.getCollection()
468
+ const collectionKeyMap = await this.getCollectionKeyMap()
469
+ const index = collection.findIndex(item =&gt; item.id === id)
470
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (index !== -1) {
471
+ collection.splice(index, 1)
472
+ delete collectionKeyMap[id]
473
+ await this.db.write()
474
+ }
475
+ }
476
+ &nbsp;
477
+ async overwrite&lt;T&gt; (value: T[]): Promise&lt;Array&lt;IResult&lt;T&gt;&gt;&gt; {
478
+ await this.read();
479
+ (this.db.data as ILowData)[this.collectionName] = [];
480
+ (this.db.data as ILowData)[this.collectionKey] = {}
481
+ return await this.insertMany&lt;T&gt;(value)
317
482
  }
318
483
  }
319
484
  &nbsp;
@@ -327,7 +492,7 @@ export {
327
492
  <div class='footer quiet pad2 space-top1 center small'>
328
493
  Code coverage generated by
329
494
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
330
- at Sat Jul 31 2021 12:54:36 GMT+0000 (Coordinated Universal Time)
495
+ at Sun Jun 12 2022 02:11:39 GMT+0000 (Coordinated Universal Time)
331
496
  </div>
332
497
  </div>
333
498
  <script src="../prettify.js"></script>
@@ -24,14 +24,14 @@
24
24
  <div class='fl pad1y space-right2'>
25
25
  <span class="strong">100% </span>
26
26
  <span class="quiet">Statements</span>
27
- <span class='fraction'>14/14</span>
27
+ <span class='fraction'>22/22</span>
28
28
  </div>
29
29
 
30
30
 
31
31
  <div class='fl pad1y space-right2'>
32
32
  <span class="strong">100% </span>
33
33
  <span class="quiet">Branches</span>
34
- <span class='fraction'>3/3</span>
34
+ <span class='fraction'>7/7</span>
35
35
  </div>
36
36
 
37
37
 
@@ -45,7 +45,7 @@
45
45
  <div class='fl pad1y space-right2'>
46
46
  <span class="strong">100% </span>
47
47
  <span class="quiet">Lines</span>
48
- <span class='fraction'>14/14</span>
48
+ <span class='fraction'>22/22</span>
49
49
  </div>
50
50
 
51
51
 
@@ -98,34 +98,52 @@
98
98
  <a name='L40'></a><a href='#L40'>40</a>
99
99
  <a name='L41'></a><a href='#L41'>41</a>
100
100
  <a name='L42'></a><a href='#L42'>42</a>
101
- <a name='L43'></a><a href='#L43'>43</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
101
+ <a name='L43'></a><a href='#L43'>43</a>
102
+ <a name='L44'></a><a href='#L44'>44</a>
103
+ <a name='L45'></a><a href='#L45'>45</a>
104
+ <a name='L46'></a><a href='#L46'>46</a>
105
+ <a name='L47'></a><a href='#L47'>47</a>
106
+ <a name='L48'></a><a href='#L48'>48</a>
107
+ <a name='L49'></a><a href='#L49'>49</a>
108
+ <a name='L50'></a><a href='#L50'>50</a>
109
+ <a name='L51'></a><a href='#L51'>51</a>
110
+ <a name='L52'></a><a href='#L52'>52</a>
111
+ <a name='L53'></a><a href='#L53'>53</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
102
112
  <span class="cline-any cline-yes">1x</span>
103
113
  <span class="cline-any cline-yes">1x</span>
104
114
  <span class="cline-any cline-neutral">&nbsp;</span>
105
115
  <span class="cline-any cline-neutral">&nbsp;</span>
106
116
  <span class="cline-any cline-neutral">&nbsp;</span>
107
117
  <span class="cline-any cline-yes">5x</span>
108
- <span class="cline-any cline-yes">1x</span>
109
118
  <span class="cline-any cline-neutral">&nbsp;</span>
110
- <span class="cline-any cline-yes">4x</span>
111
119
  <span class="cline-any cline-neutral">&nbsp;</span>
112
- <span class="cline-any cline-yes">3x</span>
113
120
  <span class="cline-any cline-neutral">&nbsp;</span>
121
+ <span class="cline-any cline-yes">6x</span>
114
122
  <span class="cline-any cline-neutral">&nbsp;</span>
123
+ <span class="cline-any cline-yes">6x</span>
124
+ <span class="cline-any cline-yes">1x</span>
125
+ <span class="cline-any cline-neutral">&nbsp;</span>
126
+ <span class="cline-any cline-yes">5x</span>
127
+ <span class="cline-any cline-yes">5x</span>
128
+ <span class="cline-any cline-yes">5x</span>
115
129
  <span class="cline-any cline-neutral">&nbsp;</span>
116
- <span class="cline-any cline-yes">4x</span>
117
130
  <span class="cline-any cline-neutral">&nbsp;</span>
118
131
  <span class="cline-any cline-neutral">&nbsp;</span>
119
132
  <span class="cline-any cline-neutral">&nbsp;</span>
120
133
  <span class="cline-any cline-yes">6x</span>
134
+ <span class="cline-any cline-yes">6x</span>
135
+ <span class="cline-any cline-yes">6x</span>
136
+ <span class="cline-any cline-neutral">&nbsp;</span>
137
+ <span class="cline-any cline-yes">6x</span>
121
138
  <span class="cline-any cline-neutral">&nbsp;</span>
122
139
  <span class="cline-any cline-neutral">&nbsp;</span>
123
140
  <span class="cline-any cline-neutral">&nbsp;</span>
124
- <span class="cline-any cline-yes">3x</span>
141
+ <span class="cline-any cline-yes">4x</span>
125
142
  <span class="cline-any cline-neutral">&nbsp;</span>
126
143
  <span class="cline-any cline-neutral">&nbsp;</span>
127
144
  <span class="cline-any cline-neutral">&nbsp;</span>
128
- <span class="cline-any cline-yes">1x</span>
145
+ <span class="cline-any cline-yes">2x</span>
146
+ <span class="cline-any cline-yes">2x</span>
129
147
  <span class="cline-any cline-neutral">&nbsp;</span>
130
148
  <span class="cline-any cline-neutral">&nbsp;</span>
131
149
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -134,48 +152,60 @@
134
152
  <span class="cline-any cline-neutral">&nbsp;</span>
135
153
  <span class="cline-any cline-neutral">&nbsp;</span>
136
154
  <span class="cline-any cline-yes">1x</span>
155
+ <span class="cline-any cline-yes">1x</span>
156
+ <span class="cline-any cline-yes">1x</span>
137
157
  <span class="cline-any cline-neutral">&nbsp;</span>
138
158
  <span class="cline-any cline-neutral">&nbsp;</span>
139
159
  <span class="cline-any cline-neutral">&nbsp;</span>
140
160
  <span class="cline-any cline-neutral">&nbsp;</span>
141
161
  <span class="cline-any cline-yes">1x</span>
142
162
  <span class="cline-any cline-neutral">&nbsp;</span>
143
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Lowdb from 'lowdb'
144
- import FileSync from 'lowdb/adapters/FileSync'
145
- import json from 'comment-json'
163
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { LowSync } from '@commonify/lowdb'
164
+ import { JSONAdapter } from './adapters/JSONAdapter'
165
+ import lodash from 'lodash'
166
+ import { IJSON } from './types'
167
+ &nbsp;
168
+ class LowWithLodash&lt;T&gt; extends LowSync&lt;T&gt; {
169
+ chain: lodash.ExpChain&lt;this['data']&gt; = lodash.chain(this).get('data')
170
+ }
146
171
  class JSONStore {
147
- private readonly db: Lowdb.LowdbSync&lt;Lowdb.AdapterSync&gt;
172
+ private readonly db: LowWithLodash&lt;IJSON&gt;
173
+ private hasRead: boolean = false
148
174
  constructor (dbPath: string) {
149
175
  if (!dbPath) {
150
176
  throw Error('Please provide valid dbPath')
151
177
  }
152
- const adapter = new FileSync(dbPath, {
153
- serialize (obj: any): string {
154
- return json.stringify(obj, null, 2)
155
- },
156
- deserialize: json.parse
157
- })
158
- this.db = Lowdb(adapter)
178
+ const adapter = new JSONAdapter(dbPath)
179
+ this.db = new LowWithLodash(adapter)
180
+ this.read()
159
181
  }
160
182
  &nbsp;
161
- read (): Lowdb.LowdbSync&lt;Lowdb.AdapterSync&lt;any&gt;&gt; {
162
- return this.db.read()
183
+ read (flush = false): IJSON {
184
+ /* istanbul ignore else */
185
+ if (flush || !this.hasRead) {
186
+ this.hasRead = true
187
+ this.db.read()
188
+ }
189
+ return this.db.data as IJSON
163
190
  }
164
191
  &nbsp;
165
192
  get (key = ''): any {
166
- return this.read().get(key).value()
193
+ return this.db.chain.get(key).value()
167
194
  }
168
195
  &nbsp;
169
196
  set (key: string, value: any): void {
170
- return this.read().set(key, value).write()
197
+ this.db.chain.set(key, value).value()
198
+ this.db.write()
171
199
  }
172
200
  &nbsp;
173
201
  has (key: string): boolean {
174
- return this.read().has(key).value()
202
+ return this.db.chain.has(key).value()
175
203
  }
176
204
  &nbsp;
177
205
  unset (key: string, value: any): boolean {
178
- return this.read().get(key).unset(value).write()
206
+ const res = this.db.chain.get(key).unset(value).value()
207
+ this.db.write()
208
+ return res
179
209
  }
180
210
  }
181
211
  &nbsp;
@@ -189,7 +219,7 @@ export {
189
219
  <div class='footer quiet pad2 space-top1 center small'>
190
220
  Code coverage generated by
191
221
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
192
- at Sat Jul 31 2021 12:54:36 GMT+0000 (Coordinated Universal Time)
222
+ at Sun Jun 12 2022 02:11:39 GMT+0000 (Coordinated Universal Time)
193
223
  </div>
194
224
  </div>
195
225
  <script src="../prettify.js"></script>