w-orm-lowdb 1.0.5 → 1.0.7

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.
@@ -429,7 +429,7 @@
429
429
 
430
430
  <dt class="tag-source">Source:</dt>
431
431
  <dd class="tag-source"><ul class="dummy"><li>
432
- <a href="WOrmLowdb.mjs.html">WOrmLowdb.mjs</a>, <a href="WOrmLowdb.mjs.html#line540">line 540</a>
432
+ <a href="WOrmLowdb.mjs.html">WOrmLowdb.mjs</a>, <a href="WOrmLowdb.mjs.html#line623">line 623</a>
433
433
  </li></ul></dd>
434
434
 
435
435
 
@@ -607,7 +607,7 @@
607
607
 
608
608
  <dt class="tag-source">Source:</dt>
609
609
  <dd class="tag-source"><ul class="dummy"><li>
610
- <a href="WOrmLowdb.mjs.html">WOrmLowdb.mjs</a>, <a href="WOrmLowdb.mjs.html#line400">line 400</a>
610
+ <a href="WOrmLowdb.mjs.html">WOrmLowdb.mjs</a>, <a href="WOrmLowdb.mjs.html#line470">line 470</a>
611
611
  </li></ul></dd>
612
612
 
613
613
 
@@ -768,7 +768,7 @@
768
768
 
769
769
  <dt class="tag-source">Source:</dt>
770
770
  <dd class="tag-source"><ul class="dummy"><li>
771
- <a href="WOrmLowdb.mjs.html">WOrmLowdb.mjs</a>, <a href="WOrmLowdb.mjs.html#line153">line 153</a>
771
+ <a href="WOrmLowdb.mjs.html">WOrmLowdb.mjs</a>, <a href="WOrmLowdb.mjs.html#line173">line 173</a>
772
772
  </li></ul></dd>
773
773
 
774
774
 
@@ -929,7 +929,7 @@
929
929
 
930
930
  <dt class="tag-source">Source:</dt>
931
931
  <dd class="tag-source"><ul class="dummy"><li>
932
- <a href="WOrmLowdb.mjs.html">WOrmLowdb.mjs</a>, <a href="WOrmLowdb.mjs.html#line265">line 265</a>
932
+ <a href="WOrmLowdb.mjs.html">WOrmLowdb.mjs</a>, <a href="WOrmLowdb.mjs.html#line302">line 302</a>
933
933
  </li></ul></dd>
934
934
 
935
935
 
@@ -1216,7 +1216,7 @@
1216
1216
 
1217
1217
  <dt class="tag-source">Source:</dt>
1218
1218
  <dd class="tag-source"><ul class="dummy"><li>
1219
- <a href="WOrmLowdb.mjs.html">WOrmLowdb.mjs</a>, <a href="WOrmLowdb.mjs.html#line91">line 91</a>
1219
+ <a href="WOrmLowdb.mjs.html">WOrmLowdb.mjs</a>, <a href="WOrmLowdb.mjs.html#line116">line 116</a>
1220
1220
  </li></ul></dd>
1221
1221
 
1222
1222
 
@@ -1393,7 +1393,7 @@
1393
1393
  <br class="clear">
1394
1394
 
1395
1395
  <footer>
1396
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.4</a> on Fri May 09 2025 12:55:52 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
1396
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Thu May 14 2026 18:57:20 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
1397
1397
  </footer>
1398
1398
 
1399
1399
  <script>prettyPrint();</script>
@@ -49,7 +49,7 @@
49
49
  import events from 'events'
50
50
  import { Low } from 'lowdb'
51
51
  import { JSONFile } from 'lowdb/node'
52
- import { Query } from 'mingo' //須指定安裝6.5.6, 若6.6.0無法匯入Query
52
+ import { Query } from 'mingo'
53
53
  import get from 'lodash-es/get.js'
54
54
  import each from 'lodash-es/each.js'
55
55
  import map from 'lodash-es/map.js'
@@ -84,6 +84,9 @@ let kpGlock = {}
84
84
  */
85
85
  function WOrmLowdb(opt = {}) {
86
86
 
87
+ //_cache
88
+ let _cache = null
89
+
87
90
  //url
88
91
  let url = get(opt, 'url')
89
92
  if (!isestr(url)) {
@@ -128,6 +131,28 @@ function WOrmLowdb(opt = {}) {
128
131
  kpGlock[gkey] = false
129
132
  }
130
133
 
134
+ //getData
135
+ let getData = async() => {
136
+
137
+ //check
138
+ if (isarr(_cache)) {
139
+ return cloneDeep(_cache) //與外部使用數據脫勾
140
+ }
141
+
142
+ //read
143
+ await lowdb.read()
144
+
145
+ //default, 使用lowdb.read()初始化後須馬上檢測, 若無key則須先創建空陣列
146
+ if (!haskey(lowdb.data, key)) {
147
+ lowdb.data[key] = []
148
+ }
149
+
150
+ //update
151
+ _cache = lowdb.data[key]
152
+
153
+ return cloneDeep(_cache) //與外部使用數據脫勾
154
+ }
155
+
131
156
  /**
132
157
  * 查詢數據
133
158
  *
@@ -142,13 +167,8 @@ function WOrmLowdb(opt = {}) {
142
167
  let res = null
143
168
  try {
144
169
 
145
- //read
146
- await lowdb.read()
147
-
148
- //default, 使用lowdb.read()初始化後須馬上檢測, 若無key則須先創建空陣列
149
- if (!haskey(lowdb.data, key)) {
150
- lowdb.data[key] = []
151
- }
170
+ //ltdt
171
+ let ltdt = await getData()
152
172
 
153
173
  //filter
154
174
  if (iseobj(find)) {
@@ -158,12 +178,12 @@ function WOrmLowdb(opt = {}) {
158
178
  // console.log('q', q)
159
179
 
160
180
  //find
161
- res = q.find(lowdb.data[key]).all()
181
+ res = q.find(ltdt).all()
162
182
  // console.log('res', res)
163
183
 
164
184
  }
165
185
  else {
166
- res = lowdb.data[key]
186
+ res = ltdt
167
187
  }
168
188
 
169
189
  }
@@ -202,7 +222,11 @@ function WOrmLowdb(opt = {}) {
202
222
 
203
223
  //check
204
224
  if (!iseobj(data) &amp;&amp; !isearr(data)) {
205
- return Promise.reject(`data is not an effective object or array`)
225
+ return {
226
+ n: 0,
227
+ nInserted: 0,
228
+ ok: 1,
229
+ }
206
230
  }
207
231
 
208
232
  //cloneDeep, 與外部數據脫勾
@@ -273,15 +297,28 @@ function WOrmLowdb(opt = {}) {
273
297
  ok: 1,
274
298
  }
275
299
 
276
- //emit
277
- ee.emit('change', 'insert', data, res)
278
-
279
300
  }
280
301
  catch (err) {
281
302
  isErr = true
282
303
  res = err
283
304
  }
284
305
 
306
+ //update, 不能保證插入多少, 一律重設快取
307
+ _cache = null
308
+
309
+ //emit, 於change可能須使用select, 故須放在重設快取之後
310
+ if (!isErr) {
311
+ try {
312
+
313
+ //emit
314
+ ee.emit('change', 'insert', data, res)
315
+
316
+ }
317
+ catch (err) {
318
+ console.log(err)
319
+ }
320
+ }
321
+
285
322
  if (isErr) {
286
323
  return Promise.reject(res)
287
324
  }
@@ -314,7 +351,7 @@ function WOrmLowdb(opt = {}) {
314
351
 
315
352
  //check
316
353
  if (!iseobj(data) &amp;&amp; !isearr(data)) {
317
- return Promise.reject(`data is not an effective object or array`)
354
+ return []
318
355
  }
319
356
 
320
357
  //cloneDeep, 與外部數據脫勾
@@ -397,28 +434,61 @@ function WOrmLowdb(opt = {}) {
397
434
  }
398
435
  }
399
436
 
400
- //autoInsert
401
- if (autoInsert &amp;&amp; rest.n === 0) {
402
- rest = await insertCore(v)
403
- }
404
-
405
- return rest
406
- })
437
+ //autoInsert
438
+ if (autoInsert &amp;&amp; rest.n === 0) {
439
+ if (!haskey(kp, v.id)) {
440
+ let k = size(lowdb.data[key])
441
+ lowdb.data[key].push(v)
442
+ kp[v.id] = {
443
+ k,
444
+ v: lowdb.data[key][k],
445
+ }
446
+ b = true
447
+ rest = {
448
+ n: 1,
449
+ nInserted: 1,
450
+ ok: 1,
451
+ }
452
+ }
453
+ else {
454
+ rest = {
455
+ n: 1,
456
+ nInserted: 0,
457
+ ok: 1,
458
+ }
459
+ }
460
+ }
461
+
462
+ return rest
463
+ })
407
464
 
408
465
  //write
409
466
  if (b) {
410
467
  await lowdb.write()
411
468
  }
412
469
 
413
- //emit
414
- ee.emit('change', 'save', data, res)
415
-
416
470
  }
417
471
  catch (err) {
418
472
  isErr = true
419
473
  res = err
420
474
  }
421
475
 
476
+ //update, 不能保證變更多少, 一律重設快取
477
+ _cache = null
478
+
479
+ //emit, 於change可能須使用select, 故須放在重設快取之後
480
+ if (!isErr) {
481
+ try {
482
+
483
+ //emit
484
+ ee.emit('change', 'save', data, res)
485
+
486
+ }
487
+ catch (err) {
488
+ console.log(err)
489
+ }
490
+ }
491
+
422
492
  if (isErr) {
423
493
  return Promise.reject(res)
424
494
  }
@@ -449,7 +519,7 @@ function WOrmLowdb(opt = {}) {
449
519
 
450
520
  //check
451
521
  if (!iseobj(data) &amp;&amp; !isearr(data)) {
452
- return Promise.reject(`data is not an effective object or array`)
522
+ return []
453
523
  }
454
524
 
455
525
  //cloneDeep, 與外部數據脫勾
@@ -550,15 +620,28 @@ function WOrmLowdb(opt = {}) {
550
620
  await lowdb.write()
551
621
  }
552
622
 
553
- //emit
554
- ee.emit('change', 'del', data, res)
555
-
556
623
  }
557
624
  catch (err) {
558
625
  isErr = true
559
626
  res = err
560
627
  }
561
628
 
629
+ //update, 不能保證刪除多少, 一律重設快取
630
+ _cache = null
631
+
632
+ //emit, 於change可能須使用select, 故須放在重設快取之後
633
+ if (!isErr) {
634
+ try {
635
+
636
+ //emit
637
+ ee.emit('change', 'del', data, res)
638
+
639
+ }
640
+ catch (err) {
641
+ console.log(err)
642
+ }
643
+ }
644
+
562
645
  if (isErr) {
563
646
  return Promise.reject(res)
564
647
  }
@@ -675,15 +758,28 @@ function WOrmLowdb(opt = {}) {
675
758
  ok: 1,
676
759
  }
677
760
 
678
- //emit
679
- ee.emit('change', 'delAll', null, res)
680
-
681
761
  }
682
762
  catch (err) {
683
763
  isErr = true
684
764
  res = err
685
765
  }
686
766
 
767
+ //update, 不能保證刪除多少, 一律重設快取
768
+ _cache = null
769
+
770
+ //emit, 於change可能須使用select, 故須放在重設快取之後
771
+ if (!isErr) {
772
+ try {
773
+
774
+ //emit
775
+ ee.emit('change', 'delAll', null, res)
776
+
777
+ }
778
+ catch (err) {
779
+ console.log(err)
780
+ }
781
+ }
782
+
687
783
  if (isErr) {
688
784
  return Promise.reject(res)
689
785
  }
@@ -728,7 +824,7 @@ export default WOrmLowdb
728
824
  <br class="clear">
729
825
 
730
826
  <footer>
731
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.4</a> on Fri May 09 2025 12:55:52 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
827
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Thu May 14 2026 18:57:20 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
732
828
  </footer>
733
829
 
734
830
  <script>prettyPrint();</script>
package/docs/index.html CHANGED
@@ -71,7 +71,7 @@
71
71
  <br class="clear">
72
72
 
73
73
  <footer>
74
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.4</a> on Fri May 09 2025 12:55:52 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
74
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Thu May 14 2026 18:57:20 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
75
75
  </footer>
76
76
 
77
77
  <script>prettyPrint();</script>
package/package.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "w-orm-lowdb",
3
- "version": "1.0.5",
3
+ "version": "1.0.7",
4
4
  "main": "dist/w-orm-lowdb.umd.js",
5
5
  "dependencies": {
6
- "lodash-es": "^4.17.21",
6
+ "lodash-es": "^4.18.1",
7
7
  "lowdb": "^7.0.1",
8
- "mingo": "^6.6.1",
9
- "wsemi": "^1.7.90"
8
+ "mingo": "^7.2.1",
9
+ "wsemi": "^1.8.52"
10
10
  },
11
11
  "devDependencies": {
12
- "w-package-tools": "^1.0.90"
12
+ "w-package-tools": "^1.1.5"
13
13
  },
14
14
  "scripts": {
15
15
  "test": "mocha --parallel --timeout 60000",
package/script.txt CHANGED
@@ -15,4 +15,3 @@ npm run deploy
15
15
  #npm test
16
16
 
17
17
  #npm publish
18
-
package/src/WOrmLowdb.mjs CHANGED
@@ -2,7 +2,7 @@ import path from 'path'
2
2
  import events from 'events'
3
3
  import { Low } from 'lowdb'
4
4
  import { JSONFile } from 'lowdb/node'
5
- import { Query } from 'mingo' //須指定安裝6.5.6, 若6.6.0無法匯入Query
5
+ import { Query } from 'mingo'
6
6
  import get from 'lodash-es/get.js'
7
7
  import each from 'lodash-es/each.js'
8
8
  import map from 'lodash-es/map.js'
@@ -37,6 +37,9 @@ let kpGlock = {}
37
37
  */
38
38
  function WOrmLowdb(opt = {}) {
39
39
 
40
+ //_cache
41
+ let _cache = null
42
+
40
43
  //url
41
44
  let url = get(opt, 'url')
42
45
  if (!isestr(url)) {
@@ -81,6 +84,28 @@ function WOrmLowdb(opt = {}) {
81
84
  kpGlock[gkey] = false
82
85
  }
83
86
 
87
+ //getData
88
+ let getData = async() => {
89
+
90
+ //check
91
+ if (isarr(_cache)) {
92
+ return cloneDeep(_cache) //與外部使用數據脫勾
93
+ }
94
+
95
+ //read
96
+ await lowdb.read()
97
+
98
+ //default, 使用lowdb.read()初始化後須馬上檢測, 若無key則須先創建空陣列
99
+ if (!haskey(lowdb.data, key)) {
100
+ lowdb.data[key] = []
101
+ }
102
+
103
+ //update
104
+ _cache = lowdb.data[key]
105
+
106
+ return cloneDeep(_cache) //與外部使用數據脫勾
107
+ }
108
+
84
109
  /**
85
110
  * 查詢數據
86
111
  *
@@ -95,13 +120,8 @@ function WOrmLowdb(opt = {}) {
95
120
  let res = null
96
121
  try {
97
122
 
98
- //read
99
- await lowdb.read()
100
-
101
- //default, 使用lowdb.read()初始化後須馬上檢測, 若無key則須先創建空陣列
102
- if (!haskey(lowdb.data, key)) {
103
- lowdb.data[key] = []
104
- }
123
+ //ltdt
124
+ let ltdt = await getData()
105
125
 
106
126
  //filter
107
127
  if (iseobj(find)) {
@@ -111,12 +131,12 @@ function WOrmLowdb(opt = {}) {
111
131
  // console.log('q', q)
112
132
 
113
133
  //find
114
- res = q.find(lowdb.data[key]).all()
134
+ res = q.find(ltdt).all()
115
135
  // console.log('res', res)
116
136
 
117
137
  }
118
138
  else {
119
- res = lowdb.data[key]
139
+ res = ltdt
120
140
  }
121
141
 
122
142
  }
@@ -155,7 +175,11 @@ function WOrmLowdb(opt = {}) {
155
175
 
156
176
  //check
157
177
  if (!iseobj(data) && !isearr(data)) {
158
- return Promise.reject(`data is not an effective object or array`)
178
+ return {
179
+ n: 0,
180
+ nInserted: 0,
181
+ ok: 1,
182
+ }
159
183
  }
160
184
 
161
185
  //cloneDeep, 與外部數據脫勾
@@ -226,15 +250,28 @@ function WOrmLowdb(opt = {}) {
226
250
  ok: 1,
227
251
  }
228
252
 
229
- //emit
230
- ee.emit('change', 'insert', data, res)
231
-
232
253
  }
233
254
  catch (err) {
234
255
  isErr = true
235
256
  res = err
236
257
  }
237
258
 
259
+ //update, 不能保證插入多少, 一律重設快取
260
+ _cache = null
261
+
262
+ //emit, 於change可能須使用select, 故須放在重設快取之後
263
+ if (!isErr) {
264
+ try {
265
+
266
+ //emit
267
+ ee.emit('change', 'insert', data, res)
268
+
269
+ }
270
+ catch (err) {
271
+ console.log(err)
272
+ }
273
+ }
274
+
238
275
  if (isErr) {
239
276
  return Promise.reject(res)
240
277
  }
@@ -267,7 +304,7 @@ function WOrmLowdb(opt = {}) {
267
304
 
268
305
  //check
269
306
  if (!iseobj(data) && !isearr(data)) {
270
- return Promise.reject(`data is not an effective object or array`)
307
+ return []
271
308
  }
272
309
 
273
310
  //cloneDeep, 與外部數據脫勾
@@ -350,28 +387,61 @@ function WOrmLowdb(opt = {}) {
350
387
  }
351
388
  }
352
389
 
353
- //autoInsert
354
- if (autoInsert && rest.n === 0) {
355
- rest = await insertCore(v)
356
- }
357
-
358
- return rest
359
- })
390
+ //autoInsert
391
+ if (autoInsert && rest.n === 0) {
392
+ if (!haskey(kp, v.id)) {
393
+ let k = size(lowdb.data[key])
394
+ lowdb.data[key].push(v)
395
+ kp[v.id] = {
396
+ k,
397
+ v: lowdb.data[key][k],
398
+ }
399
+ b = true
400
+ rest = {
401
+ n: 1,
402
+ nInserted: 1,
403
+ ok: 1,
404
+ }
405
+ }
406
+ else {
407
+ rest = {
408
+ n: 1,
409
+ nInserted: 0,
410
+ ok: 1,
411
+ }
412
+ }
413
+ }
414
+
415
+ return rest
416
+ })
360
417
 
361
418
  //write
362
419
  if (b) {
363
420
  await lowdb.write()
364
421
  }
365
422
 
366
- //emit
367
- ee.emit('change', 'save', data, res)
368
-
369
423
  }
370
424
  catch (err) {
371
425
  isErr = true
372
426
  res = err
373
427
  }
374
428
 
429
+ //update, 不能保證變更多少, 一律重設快取
430
+ _cache = null
431
+
432
+ //emit, 於change可能須使用select, 故須放在重設快取之後
433
+ if (!isErr) {
434
+ try {
435
+
436
+ //emit
437
+ ee.emit('change', 'save', data, res)
438
+
439
+ }
440
+ catch (err) {
441
+ console.log(err)
442
+ }
443
+ }
444
+
375
445
  if (isErr) {
376
446
  return Promise.reject(res)
377
447
  }
@@ -402,7 +472,7 @@ function WOrmLowdb(opt = {}) {
402
472
 
403
473
  //check
404
474
  if (!iseobj(data) && !isearr(data)) {
405
- return Promise.reject(`data is not an effective object or array`)
475
+ return []
406
476
  }
407
477
 
408
478
  //cloneDeep, 與外部數據脫勾
@@ -503,15 +573,28 @@ function WOrmLowdb(opt = {}) {
503
573
  await lowdb.write()
504
574
  }
505
575
 
506
- //emit
507
- ee.emit('change', 'del', data, res)
508
-
509
576
  }
510
577
  catch (err) {
511
578
  isErr = true
512
579
  res = err
513
580
  }
514
581
 
582
+ //update, 不能保證刪除多少, 一律重設快取
583
+ _cache = null
584
+
585
+ //emit, 於change可能須使用select, 故須放在重設快取之後
586
+ if (!isErr) {
587
+ try {
588
+
589
+ //emit
590
+ ee.emit('change', 'del', data, res)
591
+
592
+ }
593
+ catch (err) {
594
+ console.log(err)
595
+ }
596
+ }
597
+
515
598
  if (isErr) {
516
599
  return Promise.reject(res)
517
600
  }
@@ -628,15 +711,28 @@ function WOrmLowdb(opt = {}) {
628
711
  ok: 1,
629
712
  }
630
713
 
631
- //emit
632
- ee.emit('change', 'delAll', null, res)
633
-
634
714
  }
635
715
  catch (err) {
636
716
  isErr = true
637
717
  res = err
638
718
  }
639
719
 
720
+ //update, 不能保證刪除多少, 一律重設快取
721
+ _cache = null
722
+
723
+ //emit, 於change可能須使用select, 故須放在重設快取之後
724
+ if (!isErr) {
725
+ try {
726
+
727
+ //emit
728
+ ee.emit('change', 'delAll', null, res)
729
+
730
+ }
731
+ catch (err) {
732
+ console.log(err)
733
+ }
734
+ }
735
+
640
736
  if (isErr) {
641
737
  return Promise.reject(res)
642
738
  }