@picgo/store 1.0.3 → 2.0.2

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'>50/50</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'>25/25</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'>50/50</span>
48
+ <span class='fraction'>72/72</span>
49
49
  </div>
50
50
 
51
51
 
@@ -160,37 +160,87 @@
160
160
  <a name='L102'></a><a href='#L102'>102</a>
161
161
  <a name='L103'></a><a href='#L103'>103</a>
162
162
  <a name='L104'></a><a href='#L104'>104</a>
163
- <a name='L105'></a><a href='#L105'>105</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
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>
164
205
  <span class="cline-any cline-yes">1x</span>
165
206
  <span class="cline-any cline-yes">1x</span>
166
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>
167
210
  <span class="cline-any cline-neutral">&nbsp;</span>
168
211
  <span class="cline-any cline-neutral">&nbsp;</span>
169
212
  <span class="cline-any cline-neutral">&nbsp;</span>
170
213
  <span class="cline-any cline-neutral">&nbsp;</span>
171
- <span class="cline-any cline-yes">14x</span>
214
+ <span class="cline-any cline-yes">18x</span>
215
+ <span class="cline-any cline-yes">18x</span>
172
216
  <span class="cline-any cline-neutral">&nbsp;</span>
173
217
  <span class="cline-any cline-neutral">&nbsp;</span>
174
- <span class="cline-any cline-yes">14x</span>
218
+ <span class="cline-any cline-neutral">&nbsp;</span>
219
+ <span class="cline-any cline-yes">18x</span>
175
220
  <span class="cline-any cline-yes">2x</span>
176
221
  <span class="cline-any cline-neutral">&nbsp;</span>
177
- <span class="cline-any cline-yes">12x</span>
178
- <span class="cline-any cline-yes">12x</span>
179
- <span class="cline-any cline-yes">12x</span>
180
- <span class="cline-any cline-yes">12x</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>
181
226
  <span class="cline-any cline-neutral">&nbsp;</span>
182
227
  <span class="cline-any cline-neutral">&nbsp;</span>
183
228
  <span class="cline-any cline-neutral">&nbsp;</span>
184
- <span class="cline-any cline-yes">40x</span>
185
- <span class="cline-any cline-yes">12x</span>
229
+ <span class="cline-any cline-yes">1x</span>
186
230
  <span class="cline-any cline-neutral">&nbsp;</span>
187
- <span class="cline-any cline-yes">40x</span>
188
231
  <span class="cline-any cline-neutral">&nbsp;</span>
189
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>
190
236
  <span class="cline-any cline-neutral">&nbsp;</span>
191
- <span class="cline-any cline-yes">12x</span>
192
- <span class="cline-any cline-yes">12x</span>
193
- <span class="cline-any cline-yes">12x</span>
237
+ <span class="cline-any cline-yes">56x</span>
238
+ <span class="cline-any cline-neutral">&nbsp;</span>
239
+ <span class="cline-any cline-neutral">&nbsp;</span>
240
+ <span class="cline-any cline-neutral">&nbsp;</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>
194
244
  <span class="cline-any cline-yes">6x</span>
195
245
  <span class="cline-any cline-yes">1x</span>
196
246
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -201,35 +251,55 @@
201
251
  <span class="cline-any cline-yes">1x</span>
202
252
  <span class="cline-any cline-neutral">&nbsp;</span>
203
253
  <span class="cline-any cline-neutral">&nbsp;</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>
204
265
  <span class="cline-any cline-yes">12x</span>
205
266
  <span class="cline-any cline-neutral">&nbsp;</span>
206
267
  <span class="cline-any cline-neutral">&nbsp;</span>
207
268
  <span class="cline-any cline-neutral">&nbsp;</span>
269
+ <span class="cline-any cline-yes">13x</span>
208
270
  <span class="cline-any cline-neutral">&nbsp;</span>
209
271
  <span class="cline-any cline-neutral">&nbsp;</span>
210
272
  <span class="cline-any cline-neutral">&nbsp;</span>
211
- <span class="cline-any cline-yes">1x</span>
212
- <span class="cline-any cline-yes">6x</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>
277
+ <span class="cline-any cline-neutral">&nbsp;</span>
213
278
  <span class="cline-any cline-neutral">&nbsp;</span>
214
- <span class="cline-any cline-yes">6x</span>
215
279
  <span class="cline-any cline-neutral">&nbsp;</span>
216
- <span class="cline-any cline-yes">6x</span>
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>
217
285
  <span class="cline-any cline-yes">1x</span>
218
286
  <span class="cline-any cline-yes">1x</span>
219
287
  <span class="cline-any cline-neutral">&nbsp;</span>
220
- <span class="cline-any cline-yes">5x</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>
221
292
  <span class="cline-any cline-neutral">&nbsp;</span>
222
- <span class="cline-any cline-yes">5x</span>
223
- <span class="cline-any cline-yes">5x</span>
224
- <span class="cline-any cline-yes">5x</span>
293
+ <span class="cline-any cline-yes">8x</span>
225
294
  <span class="cline-any cline-neutral">&nbsp;</span>
226
295
  <span class="cline-any cline-neutral">&nbsp;</span>
227
296
  <span class="cline-any cline-neutral">&nbsp;</span>
228
297
  <span class="cline-any cline-yes">1x</span>
229
- <span class="cline-any cline-yes">1x</span>
230
298
  <span class="cline-any cline-yes">2x</span>
299
+ <span class="cline-any cline-yes">5x</span>
231
300
  <span class="cline-any cline-neutral">&nbsp;</span>
232
- <span class="cline-any cline-yes">1x</span>
301
+ <span class="cline-any cline-yes">2x</span>
302
+ <span class="cline-any cline-yes">2x</span>
233
303
  <span class="cline-any cline-neutral">&nbsp;</span>
234
304
  <span class="cline-any cline-neutral">&nbsp;</span>
235
305
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -237,7 +307,8 @@
237
307
  <span class="cline-any cline-yes">3x</span>
238
308
  <span class="cline-any cline-yes">3x</span>
239
309
  <span class="cline-any cline-yes">3x</span>
240
- <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>
241
312
  <span class="cline-any cline-yes">2x</span>
242
313
  <span class="cline-any cline-yes">2x</span>
243
314
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -246,16 +317,23 @@
246
317
  <span class="cline-any cline-neutral">&nbsp;</span>
247
318
  <span class="cline-any cline-neutral">&nbsp;</span>
248
319
  <span class="cline-any cline-neutral">&nbsp;</span>
249
- <span class="cline-any cline-yes">3x</span>
320
+ <span class="cline-any cline-yes">4x</span>
250
321
  <span class="cline-any cline-neutral">&nbsp;</span>
251
322
  <span class="cline-any cline-neutral">&nbsp;</span>
252
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>
253
331
  <span class="cline-any cline-neutral">&nbsp;</span>
254
332
  <span class="cline-any cline-neutral">&nbsp;</span>
255
333
  <span class="cline-any cline-neutral">&nbsp;</span>
256
334
  <span class="cline-any cline-neutral">&nbsp;</span>
257
335
  <span class="cline-any cline-yes">1x</span>
258
- <span class="cline-any cline-neutral">&nbsp;</span>
336
+ <span class="cline-any cline-yes">1x</span>
259
337
  <span class="cline-any cline-yes">1x</span>
260
338
  <span class="cline-any cline-yes">1x</span>
261
339
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -264,15 +342,21 @@
264
342
  <span class="cline-any cline-neutral">&nbsp;</span>
265
343
  <span class="cline-any cline-yes">1x</span>
266
344
  <span class="cline-any cline-neutral">&nbsp;</span>
267
- <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'
268
349
  import { ZlibAdapter } from './adapters/ZlibAdapter'
269
350
  import { metaInfoHelper } from './utils/metaInfoHelper'
270
- import { IMetaInfoMode, IObject, IResult, IGetResult, IFilter } from './types'
351
+ import { IMetaInfoMode, IObject, IResult, IGetResult, IFilter, ILowData, ILowDataKeyMap } from './types'
352
+ &nbsp;
271
353
  class DBStore {
272
- private readonly db: Promise&lt;Lowdb.LowdbAsync&lt;any&gt;&gt;
354
+ private readonly db: Low&lt;ILowData&gt;
273
355
  private readonly collectionName: string
274
356
  private readonly collectionKey: string
275
- 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
276
360
  constructor (dbPath: string, collectionName: string) {
277
361
  // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
278
362
  if (!dbPath || !collectionName) {
@@ -280,19 +364,24 @@ class DBStore {
280
364
  }
281
365
  this.collectionName = collectionName
282
366
  this.collectionKey = `__${collectionName}_KEY__`
283
- const adapter = new ZlibAdapter(dbPath, collectionName)
284
- 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)
285
369
  }
286
370
  &nbsp;
287
- async read (flush = false): Promise&lt;Lowdb.LowdbAsync&lt;any&gt;&gt; {
288
- if (flush || !this.reading) {
289
- this.reading = (await this.db).read()
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()
290
379
  }
291
- return this.reading
380
+ return this.db.data
292
381
  }
293
382
  &nbsp;
294
383
  async get (filter?: IFilter): Promise&lt;IGetResult&lt;IObject&gt;&gt; {
295
- let data: Array&lt;IResult&lt;IObject&gt;&gt; = (await this.read()).get(this.collectionName).value().slice()
384
+ let data: Array&lt;IResult&lt;IObject&gt;&gt; = (await this.getCollection()).slice()
296
385
  const total = data.length
297
386
  if (filter !== undefined) {
298
387
  if (filter.orderBy === 'desc') {
@@ -310,58 +399,86 @@ class DBStore {
310
399
  data
311
400
  }
312
401
  }
402
+ &nbsp;
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
420
+ }
313
421
  &nbsp;
314
422
  @metaInfoHelper(IMetaInfoMode.create)
315
- 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; {
316
424
  const id = (value as IResult&lt;T&gt;).id
317
- // @ts-ignore
318
- const result = (await this.read()).get(`${this.collectionKey}.${id}`).value()
425
+ const result = await this.getCollectionKey(id)
319
426
  // @ts-ignore
320
427
  if (result) {
321
428
  await this.updateById(id, value)
322
429
  return (value as IResult&lt;T&gt;)
323
430
  }
324
- const collection = (await this.read()).get(this.collectionName)
325
- // @ts-ignore
326
- await collection.push(value).write()
327
- 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
+ }
328
436
  return (value as IResult&lt;T&gt;)
329
437
  }
330
438
  &nbsp;
331
- @metaInfoHelper(IMetaInfoMode.create)
439
+ @metaInfoHelper(IMetaInfoMode.createMany)
332
440
  async insertMany&lt;T&gt; (value: T[]): Promise&lt;Array&lt;IResult&lt;T&gt;&gt;&gt; {
333
441
  for (const item of value) {
334
- await this.insert(item)
442
+ await this.insert(item, false)
335
443
  }
444
+ await this.db.write()
336
445
  return (value as Array&lt;IResult&lt;T&gt;&gt;)
337
446
  }
338
447
  &nbsp;
339
448
  @metaInfoHelper(IMetaInfoMode.update)
340
449
  async updateById (id: string, value: IObject): Promise&lt;boolean&gt; {
341
- const collection = (await this.read()).get(this.collectionName)
342
- const result = (await this.read()).get(`${this.collectionKey}.${id}`).value()
450
+ const collection = await this.getCollection()
451
+ const result = await this.getCollectionKey(id)
343
452
  if (result) {
344
- // @ts-ignore
345
- 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()
346
456
  return true
347
457
  } else {
348
458
  return false
349
459
  }
350
460
  }
351
461
  &nbsp;
352
- async getById&lt;T&gt; (id: string): Promise&lt;T | undefined&gt; {
353
- return (await this.read())
354
- .get(this.collectionName)
355
- // @ts-ignore
356
- .find({ id })
357
- .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;
358
464
  }
359
465
  &nbsp;
360
466
  async removeById (id: string): Promise&lt;void&gt; {
361
- const collection = (await this.read()).get(this.collectionName)
362
- // @ts-ignore
363
- await collection.remove({ id }).write()
364
- 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)
365
482
  }
366
483
  }
367
484
  &nbsp;
@@ -375,7 +492,7 @@ export {
375
492
  <div class='footer quiet pad2 space-top1 center small'>
376
493
  Code coverage generated by
377
494
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
378
- at Sun Aug 01 2021 04:05:17 GMT+0000 (Coordinated Universal Time)
495
+ at Sun Jul 31 2022 08:03:19 GMT+0000 (Coordinated Universal Time)
379
496
  </div>
380
497
  </div>
381
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
- <span class="cline-any cline-yes">5x</span>
108
- <span class="cline-any cline-yes">1x</span>
117
+ <span class="cline-any cline-yes">6x</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">7x</span>
114
122
  <span class="cline-any cline-neutral">&nbsp;</span>
123
+ <span class="cline-any cline-yes">7x</span>
124
+ <span class="cline-any cline-yes">1x</span>
115
125
  <span class="cline-any cline-neutral">&nbsp;</span>
116
- <span class="cline-any cline-yes">4x</span>
126
+ <span class="cline-any cline-yes">6x</span>
127
+ <span class="cline-any cline-yes">6x</span>
128
+ <span class="cline-any cline-yes">6x</span>
117
129
  <span class="cline-any cline-neutral">&nbsp;</span>
118
130
  <span class="cline-any cline-neutral">&nbsp;</span>
119
131
  <span class="cline-any cline-neutral">&nbsp;</span>
120
- <span class="cline-any cline-yes">6x</span>
121
132
  <span class="cline-any cline-neutral">&nbsp;</span>
133
+ <span class="cline-any cline-yes">8x</span>
134
+ <span class="cline-any cline-yes">8x</span>
135
+ <span class="cline-any cline-yes">8x</span>
122
136
  <span class="cline-any cline-neutral">&nbsp;</span>
137
+ <span class="cline-any cline-yes">8x</span>
123
138
  <span class="cline-any cline-neutral">&nbsp;</span>
124
- <span class="cline-any cline-yes">3x</span>
125
139
  <span class="cline-any cline-neutral">&nbsp;</span>
126
140
  <span class="cline-any cline-neutral">&nbsp;</span>
141
+ <span class="cline-any cline-yes">4x</span>
142
+ <span class="cline-any cline-neutral">&nbsp;</span>
127
143
  <span class="cline-any cline-neutral">&nbsp;</span>
128
- <span class="cline-any cline-yes">1x</span>
144
+ <span class="cline-any cline-neutral">&nbsp;</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 Sun Aug 01 2021 04:05:17 GMT+0000 (Coordinated Universal Time)
222
+ at Sun Jul 31 2022 08:03:19 GMT+0000 (Coordinated Universal Time)
193
223
  </div>
194
224
  </div>
195
225
  <script src="../prettify.js"></script>