w-orm-lowdb 1.0.35 → 1.0.36
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/dist/w-orm-lowdb.umd.js +2 -2
- package/dist/w-orm-lowdb.umd.js.map +1 -1
- package/docs/WOrmLowdb.html +12 -10
- package/docs/WOrmLowdb.mjs.html +64 -54
- package/docs/index.html +1 -1
- package/package.json +1 -1
- package/src/WOrmLowdb.mjs +63 -53
- package/test/unit-write-pre-error.test.mjs +443 -0
package/docs/WOrmLowdb.mjs.html
CHANGED
|
@@ -91,6 +91,8 @@ let kpGqueue = {}
|
|
|
91
91
|
* data為本次操作之輸入數據,無輸入數據者為null。
|
|
92
92
|
* err為錯誤訊息字串,內容與正規管道所送出者一致。
|
|
93
93
|
* 整批性錯誤於reject之前發出;逐筆失敗於該筆結果定案後發出,每筆一次。
|
|
94
|
+
* insert、insertBulk、save與del因輸入本身導致之失敗(如原型為null之Date使複製拋錯、存取器拋錯)亦屬整批性錯誤,同樣於reject之前恰發出一次、不發出change事件、資料庫不變;
|
|
95
|
+
* 拋錯於複製建立之前者,data為呼叫端傳入之原值,其後者為複製;err為拋出者之原訊息(呼叫端自行拋出之值或訊息原樣通過,無法轉為字串者以固定訊息unknown error取代),本套件不另行回顯數據內容。
|
|
94
96
|
* 註: 逐筆失敗時整批仍resolve,故收到本事件不表示該次呼叫失敗;正常結果(如查無數據、主鍵未命中、全數已存在)不發出本事件。
|
|
95
97
|
*
|
|
96
98
|
* 註: 本套件之主鍵欄位固定為id,尚未支援指定其他欄位為主鍵。
|
|
@@ -357,9 +359,17 @@ function WOrmLowdb(opt = {}) {
|
|
|
357
359
|
}
|
|
358
360
|
|
|
359
361
|
//emitError, 操作發生錯誤時發出, 錯誤訊息一律轉為字串
|
|
362
|
+
//拋出之值本身可能無法轉為字串(如呼叫端之存取器拋出null原型物件, 或其message存取器拋錯), 此時以固定訊息取代, 令error事件仍恰發出一次(帳本R-WRITE-ERR-01), reject之值不變
|
|
360
363
|
let emitError = (mode, data, err) => {
|
|
364
|
+
let msg = 'unknown error'
|
|
361
365
|
try {
|
|
362
|
-
|
|
366
|
+
msg = getErrMsg(err)
|
|
367
|
+
}
|
|
368
|
+
catch (errMsg) {
|
|
369
|
+
//無法轉為字串者沿用固定訊息
|
|
370
|
+
}
|
|
371
|
+
try {
|
|
372
|
+
ee.emit('error', mode, data, msg)
|
|
363
373
|
}
|
|
364
374
|
catch (errEmit) {
|
|
365
375
|
console.log(errEmit)
|
|
@@ -598,31 +608,31 @@ function WOrmLowdb(opt = {}) {
|
|
|
598
608
|
async function insertCore(data, option = {}) {
|
|
599
609
|
let isErr = false
|
|
600
610
|
|
|
601
|
-
//
|
|
602
|
-
let
|
|
603
|
-
|
|
604
|
-
returnList = false
|
|
605
|
-
}
|
|
611
|
+
//res
|
|
612
|
+
let res = null
|
|
613
|
+
try {
|
|
606
614
|
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
if (returnList) {
|
|
610
|
-
|
|
611
|
-
return []
|
|
615
|
+
//returnList, 讀取呼叫端傳入之option、判定data與cloneDeep皆可能因輸入而拋錯, 故一律置於try內(帳本R-WRITE-ERR-01)
|
|
616
|
+
let returnList = get(option, 'returnList')
|
|
617
|
+
if (!isbol(returnList)) {
|
|
618
|
+
returnList = false
|
|
612
619
|
}
|
|
613
|
-
return {
|
|
614
|
-
n: 0,
|
|
615
|
-
nInserted: 0,
|
|
616
|
-
ok: 1,
|
|
617
|
-
}
|
|
618
|
-
}
|
|
619
620
|
|
|
620
|
-
|
|
621
|
-
|
|
621
|
+
//check, 輸入無效者直接回傳, 不經catch之後之收尾且不發事件
|
|
622
|
+
if (!iseobj(data) && !isearr(data)) {
|
|
623
|
+
if (returnList) {
|
|
624
|
+
//輸入無效, 對齊save與del之空陣列規定
|
|
625
|
+
return []
|
|
626
|
+
}
|
|
627
|
+
return {
|
|
628
|
+
n: 0,
|
|
629
|
+
nInserted: 0,
|
|
630
|
+
ok: 1,
|
|
631
|
+
}
|
|
632
|
+
}
|
|
622
633
|
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
try {
|
|
634
|
+
//cloneDeep, 與外部數據脫勾, 其拋錯者(如原型為null之Date)亦走同一錯誤路徑(error事件恰一次後reject)
|
|
635
|
+
data = cloneDeep(data)
|
|
626
636
|
|
|
627
637
|
//check
|
|
628
638
|
if (!isarr(data)) {
|
|
@@ -736,22 +746,22 @@ function WOrmLowdb(opt = {}) {
|
|
|
736
746
|
async function insertBulkCore(data) {
|
|
737
747
|
let isErr = false
|
|
738
748
|
|
|
739
|
-
//check
|
|
740
|
-
if (!iseobj(data) && !isearr(data)) {
|
|
741
|
-
return {
|
|
742
|
-
n: 0,
|
|
743
|
-
nInserted: 0,
|
|
744
|
-
ok: 1,
|
|
745
|
-
}
|
|
746
|
-
}
|
|
747
|
-
|
|
748
|
-
//cloneDeep, 與外部數據脫勾
|
|
749
|
-
data = cloneDeep(data)
|
|
750
|
-
|
|
751
749
|
//res
|
|
752
750
|
let res = null
|
|
753
751
|
try {
|
|
754
752
|
|
|
753
|
+
//check, 判定data與cloneDeep皆可能因輸入而拋錯, 故一律置於try內(帳本R-WRITE-ERR-01); 輸入無效者直接回傳, 不經catch之後之收尾且不發事件
|
|
754
|
+
if (!iseobj(data) && !isearr(data)) {
|
|
755
|
+
return {
|
|
756
|
+
n: 0,
|
|
757
|
+
nInserted: 0,
|
|
758
|
+
ok: 1,
|
|
759
|
+
}
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
//cloneDeep, 與外部數據脫勾, 其拋錯者(如原型為null之Date)亦走同一錯誤路徑(error事件恰一次後reject)
|
|
763
|
+
data = cloneDeep(data)
|
|
764
|
+
|
|
755
765
|
//check
|
|
756
766
|
if (!isarr(data)) {
|
|
757
767
|
data = [data]
|
|
@@ -843,21 +853,21 @@ function WOrmLowdb(opt = {}) {
|
|
|
843
853
|
async function saveCore(data, option = {}) {
|
|
844
854
|
let isErr = false
|
|
845
855
|
|
|
846
|
-
//check
|
|
847
|
-
if (!iseobj(data) && !isearr(data)) {
|
|
848
|
-
return []
|
|
849
|
-
}
|
|
850
|
-
|
|
851
|
-
//cloneDeep, 與外部數據脫勾
|
|
852
|
-
data = cloneDeep(data)
|
|
853
|
-
|
|
854
|
-
//autoInsert
|
|
855
|
-
let autoInsert = get(option, 'autoInsert', true)
|
|
856
|
-
|
|
857
856
|
//res
|
|
858
857
|
let res = null
|
|
859
858
|
try {
|
|
860
859
|
|
|
860
|
+
//check, 判定data、cloneDeep與讀取呼叫端傳入之option皆可能因輸入而拋錯, 故一律置於try內(帳本R-WRITE-ERR-01); 輸入無效者直接回傳, 不經catch之後之收尾且不發事件
|
|
861
|
+
if (!iseobj(data) && !isearr(data)) {
|
|
862
|
+
return []
|
|
863
|
+
}
|
|
864
|
+
|
|
865
|
+
//cloneDeep, 與外部數據脫勾, 其拋錯者(如原型為null之Date)亦走同一錯誤路徑(error事件恰一次後reject)
|
|
866
|
+
data = cloneDeep(data)
|
|
867
|
+
|
|
868
|
+
//autoInsert
|
|
869
|
+
let autoInsert = get(option, 'autoInsert', true)
|
|
870
|
+
|
|
861
871
|
//check
|
|
862
872
|
if (!isarr(data)) {
|
|
863
873
|
data = [data]
|
|
@@ -1042,18 +1052,18 @@ function WOrmLowdb(opt = {}) {
|
|
|
1042
1052
|
async function delCore(data) {
|
|
1043
1053
|
let isErr = false
|
|
1044
1054
|
|
|
1045
|
-
//check
|
|
1046
|
-
if (!iseobj(data) && !isearr(data)) {
|
|
1047
|
-
return []
|
|
1048
|
-
}
|
|
1049
|
-
|
|
1050
|
-
//cloneDeep, 與外部數據脫勾
|
|
1051
|
-
data = cloneDeep(data)
|
|
1052
|
-
|
|
1053
1055
|
//res
|
|
1054
1056
|
let res = null
|
|
1055
1057
|
try {
|
|
1056
1058
|
|
|
1059
|
+
//check, 判定data與cloneDeep皆可能因輸入而拋錯, 故一律置於try內(帳本R-WRITE-ERR-01); 輸入無效者直接回傳, 不經catch之後之收尾且不發事件
|
|
1060
|
+
if (!iseobj(data) && !isearr(data)) {
|
|
1061
|
+
return []
|
|
1062
|
+
}
|
|
1063
|
+
|
|
1064
|
+
//cloneDeep, 與外部數據脫勾, 其拋錯者(如原型為null之Date)亦走同一錯誤路徑(error事件恰一次後reject)
|
|
1065
|
+
data = cloneDeep(data)
|
|
1066
|
+
|
|
1057
1067
|
//check
|
|
1058
1068
|
if (!isarr(data)) {
|
|
1059
1069
|
data = [data]
|
|
@@ -1340,7 +1350,7 @@ export default WOrmLowdb
|
|
|
1340
1350
|
<br class="clear">
|
|
1341
1351
|
|
|
1342
1352
|
<footer>
|
|
1343
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Tue Oct 20 2026
|
|
1353
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Tue Oct 20 2026 12:54:27 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
1344
1354
|
</footer>
|
|
1345
1355
|
|
|
1346
1356
|
<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.5</a> on Tue Oct 20 2026
|
|
74
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Tue Oct 20 2026 12:54:27 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
package/src/WOrmLowdb.mjs
CHANGED
|
@@ -44,6 +44,8 @@ let kpGqueue = {}
|
|
|
44
44
|
* data為本次操作之輸入數據,無輸入數據者為null。
|
|
45
45
|
* err為錯誤訊息字串,內容與正規管道所送出者一致。
|
|
46
46
|
* 整批性錯誤於reject之前發出;逐筆失敗於該筆結果定案後發出,每筆一次。
|
|
47
|
+
* insert、insertBulk、save與del因輸入本身導致之失敗(如原型為null之Date使複製拋錯、存取器拋錯)亦屬整批性錯誤,同樣於reject之前恰發出一次、不發出change事件、資料庫不變;
|
|
48
|
+
* 拋錯於複製建立之前者,data為呼叫端傳入之原值,其後者為複製;err為拋出者之原訊息(呼叫端自行拋出之值或訊息原樣通過,無法轉為字串者以固定訊息unknown error取代),本套件不另行回顯數據內容。
|
|
47
49
|
* 註: 逐筆失敗時整批仍resolve,故收到本事件不表示該次呼叫失敗;正常結果(如查無數據、主鍵未命中、全數已存在)不發出本事件。
|
|
48
50
|
*
|
|
49
51
|
* 註: 本套件之主鍵欄位固定為id,尚未支援指定其他欄位為主鍵。
|
|
@@ -310,9 +312,17 @@ function WOrmLowdb(opt = {}) {
|
|
|
310
312
|
}
|
|
311
313
|
|
|
312
314
|
//emitError, 操作發生錯誤時發出, 錯誤訊息一律轉為字串
|
|
315
|
+
//拋出之值本身可能無法轉為字串(如呼叫端之存取器拋出null原型物件, 或其message存取器拋錯), 此時以固定訊息取代, 令error事件仍恰發出一次(帳本R-WRITE-ERR-01), reject之值不變
|
|
313
316
|
let emitError = (mode, data, err) => {
|
|
317
|
+
let msg = 'unknown error'
|
|
314
318
|
try {
|
|
315
|
-
|
|
319
|
+
msg = getErrMsg(err)
|
|
320
|
+
}
|
|
321
|
+
catch (errMsg) {
|
|
322
|
+
//無法轉為字串者沿用固定訊息
|
|
323
|
+
}
|
|
324
|
+
try {
|
|
325
|
+
ee.emit('error', mode, data, msg)
|
|
316
326
|
}
|
|
317
327
|
catch (errEmit) {
|
|
318
328
|
console.log(errEmit)
|
|
@@ -551,31 +561,31 @@ function WOrmLowdb(opt = {}) {
|
|
|
551
561
|
async function insertCore(data, option = {}) {
|
|
552
562
|
let isErr = false
|
|
553
563
|
|
|
554
|
-
//
|
|
555
|
-
let
|
|
556
|
-
|
|
557
|
-
returnList = false
|
|
558
|
-
}
|
|
564
|
+
//res
|
|
565
|
+
let res = null
|
|
566
|
+
try {
|
|
559
567
|
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
if (returnList) {
|
|
563
|
-
|
|
564
|
-
return []
|
|
568
|
+
//returnList, 讀取呼叫端傳入之option、判定data與cloneDeep皆可能因輸入而拋錯, 故一律置於try內(帳本R-WRITE-ERR-01)
|
|
569
|
+
let returnList = get(option, 'returnList')
|
|
570
|
+
if (!isbol(returnList)) {
|
|
571
|
+
returnList = false
|
|
565
572
|
}
|
|
566
|
-
return {
|
|
567
|
-
n: 0,
|
|
568
|
-
nInserted: 0,
|
|
569
|
-
ok: 1,
|
|
570
|
-
}
|
|
571
|
-
}
|
|
572
573
|
|
|
573
|
-
|
|
574
|
-
|
|
574
|
+
//check, 輸入無效者直接回傳, 不經catch之後之收尾且不發事件
|
|
575
|
+
if (!iseobj(data) && !isearr(data)) {
|
|
576
|
+
if (returnList) {
|
|
577
|
+
//輸入無效, 對齊save與del之空陣列規定
|
|
578
|
+
return []
|
|
579
|
+
}
|
|
580
|
+
return {
|
|
581
|
+
n: 0,
|
|
582
|
+
nInserted: 0,
|
|
583
|
+
ok: 1,
|
|
584
|
+
}
|
|
585
|
+
}
|
|
575
586
|
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
try {
|
|
587
|
+
//cloneDeep, 與外部數據脫勾, 其拋錯者(如原型為null之Date)亦走同一錯誤路徑(error事件恰一次後reject)
|
|
588
|
+
data = cloneDeep(data)
|
|
579
589
|
|
|
580
590
|
//check
|
|
581
591
|
if (!isarr(data)) {
|
|
@@ -689,22 +699,22 @@ function WOrmLowdb(opt = {}) {
|
|
|
689
699
|
async function insertBulkCore(data) {
|
|
690
700
|
let isErr = false
|
|
691
701
|
|
|
692
|
-
//check
|
|
693
|
-
if (!iseobj(data) && !isearr(data)) {
|
|
694
|
-
return {
|
|
695
|
-
n: 0,
|
|
696
|
-
nInserted: 0,
|
|
697
|
-
ok: 1,
|
|
698
|
-
}
|
|
699
|
-
}
|
|
700
|
-
|
|
701
|
-
//cloneDeep, 與外部數據脫勾
|
|
702
|
-
data = cloneDeep(data)
|
|
703
|
-
|
|
704
702
|
//res
|
|
705
703
|
let res = null
|
|
706
704
|
try {
|
|
707
705
|
|
|
706
|
+
//check, 判定data與cloneDeep皆可能因輸入而拋錯, 故一律置於try內(帳本R-WRITE-ERR-01); 輸入無效者直接回傳, 不經catch之後之收尾且不發事件
|
|
707
|
+
if (!iseobj(data) && !isearr(data)) {
|
|
708
|
+
return {
|
|
709
|
+
n: 0,
|
|
710
|
+
nInserted: 0,
|
|
711
|
+
ok: 1,
|
|
712
|
+
}
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
//cloneDeep, 與外部數據脫勾, 其拋錯者(如原型為null之Date)亦走同一錯誤路徑(error事件恰一次後reject)
|
|
716
|
+
data = cloneDeep(data)
|
|
717
|
+
|
|
708
718
|
//check
|
|
709
719
|
if (!isarr(data)) {
|
|
710
720
|
data = [data]
|
|
@@ -796,21 +806,21 @@ function WOrmLowdb(opt = {}) {
|
|
|
796
806
|
async function saveCore(data, option = {}) {
|
|
797
807
|
let isErr = false
|
|
798
808
|
|
|
799
|
-
//check
|
|
800
|
-
if (!iseobj(data) && !isearr(data)) {
|
|
801
|
-
return []
|
|
802
|
-
}
|
|
803
|
-
|
|
804
|
-
//cloneDeep, 與外部數據脫勾
|
|
805
|
-
data = cloneDeep(data)
|
|
806
|
-
|
|
807
|
-
//autoInsert
|
|
808
|
-
let autoInsert = get(option, 'autoInsert', true)
|
|
809
|
-
|
|
810
809
|
//res
|
|
811
810
|
let res = null
|
|
812
811
|
try {
|
|
813
812
|
|
|
813
|
+
//check, 判定data、cloneDeep與讀取呼叫端傳入之option皆可能因輸入而拋錯, 故一律置於try內(帳本R-WRITE-ERR-01); 輸入無效者直接回傳, 不經catch之後之收尾且不發事件
|
|
814
|
+
if (!iseobj(data) && !isearr(data)) {
|
|
815
|
+
return []
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
//cloneDeep, 與外部數據脫勾, 其拋錯者(如原型為null之Date)亦走同一錯誤路徑(error事件恰一次後reject)
|
|
819
|
+
data = cloneDeep(data)
|
|
820
|
+
|
|
821
|
+
//autoInsert
|
|
822
|
+
let autoInsert = get(option, 'autoInsert', true)
|
|
823
|
+
|
|
814
824
|
//check
|
|
815
825
|
if (!isarr(data)) {
|
|
816
826
|
data = [data]
|
|
@@ -995,18 +1005,18 @@ function WOrmLowdb(opt = {}) {
|
|
|
995
1005
|
async function delCore(data) {
|
|
996
1006
|
let isErr = false
|
|
997
1007
|
|
|
998
|
-
//check
|
|
999
|
-
if (!iseobj(data) && !isearr(data)) {
|
|
1000
|
-
return []
|
|
1001
|
-
}
|
|
1002
|
-
|
|
1003
|
-
//cloneDeep, 與外部數據脫勾
|
|
1004
|
-
data = cloneDeep(data)
|
|
1005
|
-
|
|
1006
1008
|
//res
|
|
1007
1009
|
let res = null
|
|
1008
1010
|
try {
|
|
1009
1011
|
|
|
1012
|
+
//check, 判定data與cloneDeep皆可能因輸入而拋錯, 故一律置於try內(帳本R-WRITE-ERR-01); 輸入無效者直接回傳, 不經catch之後之收尾且不發事件
|
|
1013
|
+
if (!iseobj(data) && !isearr(data)) {
|
|
1014
|
+
return []
|
|
1015
|
+
}
|
|
1016
|
+
|
|
1017
|
+
//cloneDeep, 與外部數據脫勾, 其拋錯者(如原型為null之Date)亦走同一錯誤路徑(error事件恰一次後reject)
|
|
1018
|
+
data = cloneDeep(data)
|
|
1019
|
+
|
|
1010
1020
|
//check
|
|
1011
1021
|
if (!isarr(data)) {
|
|
1012
1022
|
data = [data]
|