w-orm-reladb 1.1.10 → 1.1.12
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/README.md +41 -0
- package/dist/w-orm-reladb.umd.js +2 -2
- package/dist/w-orm-reladb.umd.js.map +1 -1
- package/docs/WOrmReladb.html +24 -16
- package/docs/WOrmReladb.mjs.html +44 -3
- package/docs/cvFind.mjs.html +128 -7
- package/docs/global.html +328 -7
- package/docs/importModels.mjs.html +2 -2
- package/docs/index.html +2 -2
- package/models/tdate.js +38 -0
- package/models/tdatei.js +20 -0
- package/package.json +4 -4
- package/src/WOrmReladb.mjs +42 -1
- package/src/cvFind.mjs +126 -5
- package/test/api-date-write.mjs +467 -0
- package/test/api-mssql.test.mjs +2 -0
- package/test/api-sqlite.test.mjs +2 -0
- package/test/tools/withTz.mjs +43 -0
- package/test/unit-date-write.test.mjs +457 -0
package/docs/WOrmReladb.html
CHANGED
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
<nav >
|
|
30
30
|
|
|
31
31
|
|
|
32
|
-
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="WOrmReladb.html">WOrmReladb</a><ul class='methods'><li data-type='method'><a href="WOrmReladb.html#.closeSequelize">closeSequelize</a></li><li data-type='method'><a href="WOrmReladb.html#.createStorage">createStorage</a></li><li data-type='method'><a href="WOrmReladb.html#.del">del</a></li><li data-type='method'><a href="WOrmReladb.html#.delAll">delAll</a></li><li data-type='method'><a href="WOrmReladb.html#.genModelsByDB">genModelsByDB</a></li><li data-type='method'><a href="WOrmReladb.html#.genModelsByTabs">genModelsByTabs</a></li><li data-type='method'><a href="WOrmReladb.html#.genTransaction">genTransaction</a></li><li data-type='method'><a href="WOrmReladb.html#.initSequelize">initSequelize</a></li><li data-type='method'><a href="WOrmReladb.html#.insert">insert</a></li><li data-type='method'><a href="WOrmReladb.html#.insertBulk">insertBulk</a></li><li data-type='method'><a href="WOrmReladb.html#.save">save</a></li><li data-type='method'><a href="WOrmReladb.html#.select">select</a></li><li data-type='method'><a href="WOrmReladb.html#.selectByPk">selectByPk</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#cvFind">cvFind</a></li><li><a href="global.html#getColKind">getColKind</a></li><li><a href="global.html#getColScale">getColScale</a></li><li><a href="global.html#importModels">importModels</a></li><li><a href="global.html#isKindOk">isKindOk</a></li><li><a href="global.html#normPk">normPk</a></li></ul>
|
|
32
|
+
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="WOrmReladb.html">WOrmReladb</a><ul class='methods'><li data-type='method'><a href="WOrmReladb.html#.closeSequelize">closeSequelize</a></li><li data-type='method'><a href="WOrmReladb.html#.createStorage">createStorage</a></li><li data-type='method'><a href="WOrmReladb.html#.del">del</a></li><li data-type='method'><a href="WOrmReladb.html#.delAll">delAll</a></li><li data-type='method'><a href="WOrmReladb.html#.genModelsByDB">genModelsByDB</a></li><li data-type='method'><a href="WOrmReladb.html#.genModelsByTabs">genModelsByTabs</a></li><li data-type='method'><a href="WOrmReladb.html#.genTransaction">genTransaction</a></li><li data-type='method'><a href="WOrmReladb.html#.initSequelize">initSequelize</a></li><li data-type='method'><a href="WOrmReladb.html#.insert">insert</a></li><li data-type='method'><a href="WOrmReladb.html#.insertBulk">insertBulk</a></li><li data-type='method'><a href="WOrmReladb.html#.save">save</a></li><li data-type='method'><a href="WOrmReladb.html#.select">select</a></li><li data-type='method'><a href="WOrmReladb.html#.selectByPk">selectByPk</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#cvFind">cvFind</a></li><li><a href="global.html#genDateChecker">genDateChecker</a></li><li><a href="global.html#getColKind">getColKind</a></li><li><a href="global.html#getColScale">getColScale</a></li><li><a href="global.html#importModels">importModels</a></li><li><a href="global.html#inDateRange">inDateRange</a></li><li><a href="global.html#isKindOk">isKindOk</a></li><li><a href="global.html#normPk">normPk</a></li></ul>
|
|
33
33
|
|
|
34
34
|
</nav>
|
|
35
35
|
|
|
@@ -750,7 +750,7 @@
|
|
|
750
750
|
|
|
751
751
|
<dt class="tag-source">Source:</dt>
|
|
752
752
|
<dd class="tag-source"><ul class="dummy"><li>
|
|
753
|
-
<a href="WOrmReladb.mjs.html">WOrmReladb.mjs</a>, <a href="WOrmReladb.mjs.html#
|
|
753
|
+
<a href="WOrmReladb.mjs.html">WOrmReladb.mjs</a>, <a href="WOrmReladb.mjs.html#line546">line 546</a>
|
|
754
754
|
</li></ul></dd>
|
|
755
755
|
|
|
756
756
|
|
|
@@ -858,7 +858,7 @@
|
|
|
858
858
|
|
|
859
859
|
<dt class="tag-source">Source:</dt>
|
|
860
860
|
<dd class="tag-source"><ul class="dummy"><li>
|
|
861
|
-
<a href="WOrmReladb.mjs.html">WOrmReladb.mjs</a>, <a href="WOrmReladb.mjs.html#
|
|
861
|
+
<a href="WOrmReladb.mjs.html">WOrmReladb.mjs</a>, <a href="WOrmReladb.mjs.html#line1788">line 1788</a>
|
|
862
862
|
</li></ul></dd>
|
|
863
863
|
|
|
864
864
|
|
|
@@ -972,7 +972,7 @@
|
|
|
972
972
|
|
|
973
973
|
<dt class="tag-source">Source:</dt>
|
|
974
974
|
<dd class="tag-source"><ul class="dummy"><li>
|
|
975
|
-
<a href="WOrmReladb.mjs.html">WOrmReladb.mjs</a>, <a href="WOrmReladb.mjs.html#
|
|
975
|
+
<a href="WOrmReladb.mjs.html">WOrmReladb.mjs</a>, <a href="WOrmReladb.mjs.html#line1481">line 1481</a>
|
|
976
976
|
</li></ul></dd>
|
|
977
977
|
|
|
978
978
|
|
|
@@ -1318,7 +1318,7 @@ sequelize之Op Symbol、RegExp值、陣列值(請改用$in)、欄位層$and/$or
|
|
|
1318
1318
|
|
|
1319
1319
|
<dt class="tag-source">Source:</dt>
|
|
1320
1320
|
<dd class="tag-source"><ul class="dummy"><li>
|
|
1321
|
-
<a href="WOrmReladb.mjs.html">WOrmReladb.mjs</a>, <a href="WOrmReladb.mjs.html#
|
|
1321
|
+
<a href="WOrmReladb.mjs.html">WOrmReladb.mjs</a>, <a href="WOrmReladb.mjs.html#line1683">line 1683</a>
|
|
1322
1322
|
</li></ul></dd>
|
|
1323
1323
|
|
|
1324
1324
|
|
|
@@ -1648,7 +1648,7 @@ sequelize之Op Symbol、RegExp值、陣列值(請改用$in)、欄位層$and/$or
|
|
|
1648
1648
|
|
|
1649
1649
|
<dt class="tag-source">Source:</dt>
|
|
1650
1650
|
<dd class="tag-source"><ul class="dummy"><li>
|
|
1651
|
-
<a href="WOrmReladb.mjs.html">WOrmReladb.mjs</a>, <a href="WOrmReladb.mjs.html#
|
|
1651
|
+
<a href="WOrmReladb.mjs.html">WOrmReladb.mjs</a>, <a href="WOrmReladb.mjs.html#line1830">line 1830</a>
|
|
1652
1652
|
</li></ul></dd>
|
|
1653
1653
|
|
|
1654
1654
|
|
|
@@ -2176,7 +2176,7 @@ sequelize之Op Symbol、RegExp值、陣列值(請改用$in)、欄位層$and/$or
|
|
|
2176
2176
|
|
|
2177
2177
|
<dt class="tag-source">Source:</dt>
|
|
2178
2178
|
<dd class="tag-source"><ul class="dummy"><li>
|
|
2179
|
-
<a href="WOrmReladb.mjs.html">WOrmReladb.mjs</a>, <a href="WOrmReladb.mjs.html#
|
|
2179
|
+
<a href="WOrmReladb.mjs.html">WOrmReladb.mjs</a>, <a href="WOrmReladb.mjs.html#line1878">line 1878</a>
|
|
2180
2180
|
</li></ul></dd>
|
|
2181
2181
|
|
|
2182
2182
|
|
|
@@ -2481,7 +2481,7 @@ sequelize之Op Symbol、RegExp值、陣列值(請改用$in)、欄位層$and/$or
|
|
|
2481
2481
|
|
|
2482
2482
|
<dt class="tag-source">Source:</dt>
|
|
2483
2483
|
<dd class="tag-source"><ul class="dummy"><li>
|
|
2484
|
-
<a href="WOrmReladb.mjs.html">WOrmReladb.mjs</a>, <a href="WOrmReladb.mjs.html#
|
|
2484
|
+
<a href="WOrmReladb.mjs.html">WOrmReladb.mjs</a>, <a href="WOrmReladb.mjs.html#line562">line 562</a>
|
|
2485
2485
|
</li></ul></dd>
|
|
2486
2486
|
|
|
2487
2487
|
|
|
@@ -2589,7 +2589,7 @@ sequelize之Op Symbol、RegExp值、陣列值(請改用$in)、欄位層$and/$or
|
|
|
2589
2589
|
|
|
2590
2590
|
<dt class="tag-source">Source:</dt>
|
|
2591
2591
|
<dd class="tag-source"><ul class="dummy"><li>
|
|
2592
|
-
<a href="WOrmReladb.mjs.html">WOrmReladb.mjs</a>, <a href="WOrmReladb.mjs.html#
|
|
2592
|
+
<a href="WOrmReladb.mjs.html">WOrmReladb.mjs</a>, <a href="WOrmReladb.mjs.html#line479">line 479</a>
|
|
2593
2593
|
</li></ul></dd>
|
|
2594
2594
|
|
|
2595
2595
|
|
|
@@ -2767,6 +2767,10 @@ sequelize之Op Symbol、RegExp值、陣列值(請改用$in)、欄位層$and/$or
|
|
|
2767
2767
|
註: 同批含重複主鍵時僅首筆計入nInserted,其餘視為已存在
|
|
2768
2768
|
註: opt.autoGenPk為true(預設)時未帶有效主鍵者自動產生,為false時未帶有效主鍵即reject且同批皆不寫入
|
|
2769
2769
|
註: 主鍵值依主鍵欄型別正規化後寫入(字串類主鍵欄之123存為'123');型別不符(整數類主鍵欄給'012'等)即reject且同批皆不寫入,不以自動產生之主鍵取代
|
|
2770
|
+
註: DATE、DATEONLY欄之值(Date、epoch數值、日期字串)換算後年份須在1–9999(DATE依UTC,DATEONLY依存入之日期文字),範圍外者(如new Date(8.64e15)、'+010000-01-01T00:00:00Z')即reject且同批皆不寫入,
|
|
2771
|
+
錯誤訊息為invalid data: date is not a valid time in years 1-9999 at [data[索引].欄名],不回顯值;sqlite以文字存日期,範圍外年份之文字與時間序不一致,會使以日期為條件之delAll刪錯列,
|
|
2772
|
+
故兩方言一律於送出前拒收;無效時間(Invalid Date、NaN、無法解析之字串、空字串等,sqlite會存為字典序大於任何年份之文字Invalid date,mssql則由資料庫報錯)亦一併reject;
|
|
2773
|
+
庫內既有之範圍外日期不遷移,須自行清理或改寫(見README)
|
|
2770
2774
|
註: option.returnList開啟時改回與輸入等長且保序之逐筆結果陣列[{n,nInserted,ok}],
|
|
2771
2775
|
聚合計數只答得出[有幾筆是新的]而答不出[是哪幾筆],而後者正是去重之產出物;
|
|
2772
2776
|
逐筆元素之n與ok恆為1,資訊由nInserted承載,不變式為
|
|
@@ -2776,7 +2780,7 @@ sequelize之Op Symbol、RegExp值、陣列值(請改用$in)、欄位層$and/$or
|
|
|
2776
2780
|
|
|
2777
2781
|
<dt class="tag-source">Source:</dt>
|
|
2778
2782
|
<dd class="tag-source"><ul class="dummy"><li>
|
|
2779
|
-
<a href="WOrmReladb.mjs.html">WOrmReladb.mjs</a>, <a href="WOrmReladb.mjs.html#
|
|
2783
|
+
<a href="WOrmReladb.mjs.html">WOrmReladb.mjs</a>, <a href="WOrmReladb.mjs.html#line843">line 843</a>
|
|
2780
2784
|
</li></ul></dd>
|
|
2781
2785
|
|
|
2782
2786
|
|
|
@@ -3146,6 +3150,8 @@ sequelize之Op Symbol、RegExp值、陣列值(請改用$in)、欄位層$and/$or
|
|
|
3146
3150
|
註: 不提供逐筆結果,故不出現ok為0與err;需要逐筆處置者改用insert
|
|
3147
3151
|
註: opt.autoGenPk為true(預設)時未帶有效主鍵者自動產生,為false時未帶有效主鍵即reject且同批皆不寫入
|
|
3148
3152
|
註: 主鍵值依主鍵欄型別正規化後寫入(字串類主鍵欄之123存為'123');型別不符(整數類主鍵欄給'012'等)即reject且同批皆不寫入
|
|
3153
|
+
註: DATE、DATEONLY欄之值換算後年份須在1–9999,範圍外或無效者(如new Date(8.64e15)、new Date(NaN))即reject且同批皆不寫入,訊息為invalid data: date is not a valid time in years 1-9999 at [data[索引].欄名],
|
|
3154
|
+
不回顯值,兩方言一致於送出前拒收,規則同insert
|
|
3149
3155
|
註: [全有全無]為獨立於T7之額外要求——T7僅保證每筆之[檢查主鍵不存在]與[寫入]為原子,不保證整批。
|
|
3150
3156
|
mssql因綁定參數數量上限會由驅動層自動拆為多語句送出,實測1000筆之批次於末筆撞主鍵時已有946筆落盤,
|
|
3151
3157
|
故一律以交易包覆並於失敗時回滾;呼叫端已給transaction時改以巢狀交易(SAVEPOINT)包覆,
|
|
@@ -3155,7 +3161,7 @@ mssql因綁定參數數量上限會由驅動層自動拆為多語句送出,實
|
|
|
3155
3161
|
|
|
3156
3162
|
<dt class="tag-source">Source:</dt>
|
|
3157
3163
|
<dd class="tag-source"><ul class="dummy"><li>
|
|
3158
|
-
<a href="WOrmReladb.mjs.html">WOrmReladb.mjs</a>, <a href="WOrmReladb.mjs.html#
|
|
3164
|
+
<a href="WOrmReladb.mjs.html">WOrmReladb.mjs</a>, <a href="WOrmReladb.mjs.html#line1024">line 1024</a>
|
|
3159
3165
|
</li></ul></dd>
|
|
3160
3166
|
|
|
3161
3167
|
|
|
@@ -3483,13 +3489,15 @@ mssql因綁定參數數量上限會由驅動層自動拆為多語句送出,實
|
|
|
3483
3489
|
故只給部份欄位且該些欄位值皆與現值相同時,合併結果等於現值,nModified為0
|
|
3484
3490
|
註: 本筆失敗不中斷整批,該筆以ok為0並附err回報
|
|
3485
3491
|
註: opt.autoGenPk為true(預設)時未帶有效主鍵者自動產生,為false時未帶有效主鍵即reject且同批皆不寫入
|
|
3486
|
-
註: 主鍵值依主鍵欄型別正規化(字串類主鍵欄之123即'123');型別不符(整數類主鍵欄給'012'等)屬呼叫端未履行契約,整批reject
|
|
3492
|
+
註: 主鍵值依主鍵欄型別正規化(字串類主鍵欄之123即'123');型別不符(整數類主鍵欄給'012'等)屬呼叫端未履行契約,整批reject且同批皆不寫入
|
|
3493
|
+
註: DATE、DATEONLY欄之值換算後年份須在1–9999,範圍外或無效者(如new Date(8.64e15)、new Date(NaN))屬呼叫端未履行契約,整批reject且同批皆不寫入(含autoInsert為false而不會寫入者;不降為該筆ok為0),
|
|
3494
|
+
訊息為invalid data: date is not a valid time in years 1-9999 at [data[索引].欄名],不回顯值,兩方言一致於送出前拒收,規則同insert</p></li></ul></dd>
|
|
3487
3495
|
|
|
3488
3496
|
|
|
3489
3497
|
|
|
3490
3498
|
<dt class="tag-source">Source:</dt>
|
|
3491
3499
|
<dd class="tag-source"><ul class="dummy"><li>
|
|
3492
|
-
<a href="WOrmReladb.mjs.html">WOrmReladb.mjs</a>, <a href="WOrmReladb.mjs.html#
|
|
3500
|
+
<a href="WOrmReladb.mjs.html">WOrmReladb.mjs</a>, <a href="WOrmReladb.mjs.html#line1362">line 1362</a>
|
|
3493
3501
|
</li></ul></dd>
|
|
3494
3502
|
|
|
3495
3503
|
|
|
@@ -3873,7 +3881,7 @@ sequelize之Op Symbol、RegExp值、陣列值(請改用$in)、欄位層$and/$or
|
|
|
3873
3881
|
|
|
3874
3882
|
<dt class="tag-source">Source:</dt>
|
|
3875
3883
|
<dd class="tag-source"><ul class="dummy"><li>
|
|
3876
|
-
<a href="WOrmReladb.mjs.html">WOrmReladb.mjs</a>, <a href="WOrmReladb.mjs.html#
|
|
3884
|
+
<a href="WOrmReladb.mjs.html">WOrmReladb.mjs</a>, <a href="WOrmReladb.mjs.html#line604">line 604</a>
|
|
3877
3885
|
</li></ul></dd>
|
|
3878
3886
|
|
|
3879
3887
|
|
|
@@ -4206,7 +4214,7 @@ sequelize之Op Symbol、RegExp值、陣列值(請改用$in)、欄位層$and/$or
|
|
|
4206
4214
|
|
|
4207
4215
|
<dt class="tag-source">Source:</dt>
|
|
4208
4216
|
<dd class="tag-source"><ul class="dummy"><li>
|
|
4209
|
-
<a href="WOrmReladb.mjs.html">WOrmReladb.mjs</a>, <a href="WOrmReladb.mjs.html#
|
|
4217
|
+
<a href="WOrmReladb.mjs.html">WOrmReladb.mjs</a>, <a href="WOrmReladb.mjs.html#line709">line 709</a>
|
|
4210
4218
|
</li></ul></dd>
|
|
4211
4219
|
|
|
4212
4220
|
|
|
@@ -4532,7 +4540,7 @@ sequelize之Op Symbol、RegExp值、陣列值(請改用$in)、欄位層$and/$or
|
|
|
4532
4540
|
<br class="clear">
|
|
4533
4541
|
|
|
4534
4542
|
<footer>
|
|
4535
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on
|
|
4543
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Tue Oct 20 2026 04:13:54 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
4536
4544
|
</footer>
|
|
4537
4545
|
|
|
4538
4546
|
<script>prettyPrint();</script>
|
package/docs/WOrmReladb.mjs.html
CHANGED
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
<nav >
|
|
30
30
|
|
|
31
31
|
|
|
32
|
-
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="WOrmReladb.html">WOrmReladb</a><ul class='methods'><li data-type='method'><a href="WOrmReladb.html#.closeSequelize">closeSequelize</a></li><li data-type='method'><a href="WOrmReladb.html#.createStorage">createStorage</a></li><li data-type='method'><a href="WOrmReladb.html#.del">del</a></li><li data-type='method'><a href="WOrmReladb.html#.delAll">delAll</a></li><li data-type='method'><a href="WOrmReladb.html#.genModelsByDB">genModelsByDB</a></li><li data-type='method'><a href="WOrmReladb.html#.genModelsByTabs">genModelsByTabs</a></li><li data-type='method'><a href="WOrmReladb.html#.genTransaction">genTransaction</a></li><li data-type='method'><a href="WOrmReladb.html#.initSequelize">initSequelize</a></li><li data-type='method'><a href="WOrmReladb.html#.insert">insert</a></li><li data-type='method'><a href="WOrmReladb.html#.insertBulk">insertBulk</a></li><li data-type='method'><a href="WOrmReladb.html#.save">save</a></li><li data-type='method'><a href="WOrmReladb.html#.select">select</a></li><li data-type='method'><a href="WOrmReladb.html#.selectByPk">selectByPk</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#cvFind">cvFind</a></li><li><a href="global.html#getColKind">getColKind</a></li><li><a href="global.html#getColScale">getColScale</a></li><li><a href="global.html#importModels">importModels</a></li><li><a href="global.html#isKindOk">isKindOk</a></li><li><a href="global.html#normPk">normPk</a></li></ul>
|
|
32
|
+
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="WOrmReladb.html">WOrmReladb</a><ul class='methods'><li data-type='method'><a href="WOrmReladb.html#.closeSequelize">closeSequelize</a></li><li data-type='method'><a href="WOrmReladb.html#.createStorage">createStorage</a></li><li data-type='method'><a href="WOrmReladb.html#.del">del</a></li><li data-type='method'><a href="WOrmReladb.html#.delAll">delAll</a></li><li data-type='method'><a href="WOrmReladb.html#.genModelsByDB">genModelsByDB</a></li><li data-type='method'><a href="WOrmReladb.html#.genModelsByTabs">genModelsByTabs</a></li><li data-type='method'><a href="WOrmReladb.html#.genTransaction">genTransaction</a></li><li data-type='method'><a href="WOrmReladb.html#.initSequelize">initSequelize</a></li><li data-type='method'><a href="WOrmReladb.html#.insert">insert</a></li><li data-type='method'><a href="WOrmReladb.html#.insertBulk">insertBulk</a></li><li data-type='method'><a href="WOrmReladb.html#.save">save</a></li><li data-type='method'><a href="WOrmReladb.html#.select">select</a></li><li data-type='method'><a href="WOrmReladb.html#.selectByPk">selectByPk</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#cvFind">cvFind</a></li><li><a href="global.html#genDateChecker">genDateChecker</a></li><li><a href="global.html#getColKind">getColKind</a></li><li><a href="global.html#getColScale">getColScale</a></li><li><a href="global.html#importModels">importModels</a></li><li><a href="global.html#inDateRange">inDateRange</a></li><li><a href="global.html#isKindOk">isKindOk</a></li><li><a href="global.html#normPk">normPk</a></li></ul>
|
|
33
33
|
|
|
34
34
|
</nav>
|
|
35
35
|
|
|
@@ -72,7 +72,7 @@ import pmQueue from 'wsemi/src/pmQueue.mjs'
|
|
|
72
72
|
import WAutoSequelize from 'w-auto-sequelize/src/WAutoSequelize.mjs'
|
|
73
73
|
import importModels from './importModels.mjs'
|
|
74
74
|
import _genModelsByTabs from './genModelsByTabs.mjs'
|
|
75
|
-
import cvFind, { getColKind, getColScale, normPk, chkFindShape } from './cvFind.mjs'
|
|
75
|
+
import cvFind, { getColKind, getColScale, normPk, chkFindShape, genDateChecker } from './cvFind.mjs'
|
|
76
76
|
|
|
77
77
|
|
|
78
78
|
//放置於全域宣告, 若使用useStable=true才可於當創建多實例時仍能全域控管
|
|
@@ -429,6 +429,30 @@ function WOrmReladb(opt = {}) {
|
|
|
429
429
|
}
|
|
430
430
|
|
|
431
431
|
|
|
432
|
+
/**
|
|
433
|
+
* 檢核各筆數據之DATE、DATEONLY欄值是否為年份在1–9999之有效時間(見cvFind.mjs之genDateChecker與inDateRange), 範圍外或無效者整批拋出
|
|
434
|
+
* 註: 通過檢核之物件值(Date及其子類別、包裝物件、陣列等)由檢核函數就地換成已檢核之標準值(Date或YYYY-MM-DD文字),令檢查之值即使用之值;操作對象為cloneDeep後之複本,呼叫端數據不變
|
|
435
|
+
* 註: 須於normPks之後、任何寫入之前對全部筆數一次完成, 令拋錯時同批之有效筆數亦不會被寫入, 資料庫不變; 與條件側共用同一範圍判定
|
|
436
|
+
* 註: 訊息只含筆數索引與欄名, 不回顯值; 同筆多欄範圍外者回報model屬性定義順序之第一個, 多筆範圍外者回報索引最小者
|
|
437
|
+
* 註: sqlite以文字存DATE, 範圍外年份之文字與時間序不一致(哨兵new Date(8.64e15)存為275760-09-13…, 被$lt某日期誤中而遭delAll刪除), 故寫入時即拒收;
|
|
438
|
+
* mssql之datetimeoffset、date範圍亦為0001–9999, 本函數於送出前即拒, 不依賴資料庫報錯, 兩方言行為一致
|
|
439
|
+
*
|
|
440
|
+
* @ignore
|
|
441
|
+
* @param {Object} md 輸入資料表model物件
|
|
442
|
+
* @param {Array} data 輸入已補齊並正規化主鍵之數據陣列
|
|
443
|
+
* @returns {undefined} 無回傳值
|
|
444
|
+
*/
|
|
445
|
+
function chkDates(md, data) {
|
|
446
|
+
let chk = genDateChecker(get(md, 'rawAttributes', {}))
|
|
447
|
+
data.forEach((v, k) => {
|
|
448
|
+
let col = chk(v)
|
|
449
|
+
if (col !== null) {
|
|
450
|
+
throw new Error(`invalid data: date is not a valid time in years 1-9999 at [data[${k}].${col}]`)
|
|
451
|
+
}
|
|
452
|
+
})
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
|
|
432
456
|
/**
|
|
433
457
|
* 依model之主鍵欄型別正規化主鍵值
|
|
434
458
|
* 註: 規則見cvFind.mjs之normPk(與w-orm-mdb同一規則), 用於selectByPk、del、save、insert與insertBulk,
|
|
@@ -846,6 +870,10 @@ function WOrmReladb(opt = {}) {
|
|
|
846
870
|
* 註: 同批含重複主鍵時僅首筆計入nInserted,其餘視為已存在
|
|
847
871
|
* 註: opt.autoGenPk為true(預設)時未帶有效主鍵者自動產生,為false時未帶有效主鍵即reject且同批皆不寫入
|
|
848
872
|
* 註: 主鍵值依主鍵欄型別正規化後寫入(字串類主鍵欄之123存為'123');型別不符(整數類主鍵欄給'012'等)即reject且同批皆不寫入,不以自動產生之主鍵取代
|
|
873
|
+
* 註: DATE、DATEONLY欄之值(Date、epoch數值、日期字串)換算後年份須在1–9999(DATE依UTC,DATEONLY依存入之日期文字),範圍外者(如new Date(8.64e15)、'+010000-01-01T00:00:00Z')即reject且同批皆不寫入,
|
|
874
|
+
* 錯誤訊息為invalid data: date is not a valid time in years 1-9999 at [data[索引].欄名],不回顯值;sqlite以文字存日期,範圍外年份之文字與時間序不一致,會使以日期為條件之delAll刪錯列,
|
|
875
|
+
* 故兩方言一律於送出前拒收;無效時間(Invalid Date、NaN、無法解析之字串、空字串等,sqlite會存為字典序大於任何年份之文字Invalid date,mssql則由資料庫報錯)亦一併reject;
|
|
876
|
+
* 庫內既有之範圍外日期不遷移,須自行清理或改寫(見README)
|
|
849
877
|
* 註: option.returnList開啟時改回與輸入等長且保序之逐筆結果陣列[{n,nInserted,ok}],
|
|
850
878
|
* 聚合計數只答得出[有幾筆是新的]而答不出[是哪幾筆],而後者正是去重之產出物;
|
|
851
879
|
* 逐筆元素之n與ok恆為1,資訊由nInserted承載,不變式為
|
|
@@ -930,6 +958,9 @@ function WOrmReladb(opt = {}) {
|
|
|
930
958
|
//normPks, 主鍵值依主鍵欄型別正規化後寫回, 型別不符者整批reject且不寫入任何一筆, 令insert對既有數據之認定與selectByPk一致
|
|
931
959
|
normPks(md, data)
|
|
932
960
|
|
|
961
|
+
//chkDates, DATE、DATEONLY欄之值須為年份在1–9999之有效時間, 範圍外或無效者整批reject且不寫入任何一筆(與條件側共用範圍判定, 見R12)
|
|
962
|
+
chkDates(md, data)
|
|
963
|
+
|
|
933
964
|
//nAll, n之基準為輸入筆數
|
|
934
965
|
let nAll = size(data)
|
|
935
966
|
|
|
@@ -1023,6 +1054,8 @@ function WOrmReladb(opt = {}) {
|
|
|
1023
1054
|
* 註: 不提供逐筆結果,故不出現ok為0與err;需要逐筆處置者改用insert
|
|
1024
1055
|
* 註: opt.autoGenPk為true(預設)時未帶有效主鍵者自動產生,為false時未帶有效主鍵即reject且同批皆不寫入
|
|
1025
1056
|
* 註: 主鍵值依主鍵欄型別正規化後寫入(字串類主鍵欄之123存為'123');型別不符(整數類主鍵欄給'012'等)即reject且同批皆不寫入
|
|
1057
|
+
* 註: DATE、DATEONLY欄之值換算後年份須在1–9999,範圍外或無效者(如new Date(8.64e15)、new Date(NaN))即reject且同批皆不寫入,訊息為invalid data: date is not a valid time in years 1-9999 at [data[索引].欄名],
|
|
1058
|
+
* 不回顯值,兩方言一致於送出前拒收,規則同insert
|
|
1026
1059
|
* 註: [全有全無]為獨立於T7之額外要求——T7僅保證每筆之[檢查主鍵不存在]與[寫入]為原子,不保證整批。
|
|
1027
1060
|
* mssql因綁定參數數量上限會由驅動層自動拆為多語句送出,實測1000筆之批次於末筆撞主鍵時已有946筆落盤,
|
|
1028
1061
|
* 故一律以交易包覆並於失敗時回滾;呼叫端已給transaction時改以巢狀交易(SAVEPOINT)包覆,
|
|
@@ -1100,6 +1133,9 @@ function WOrmReladb(opt = {}) {
|
|
|
1100
1133
|
//normPks, 主鍵值依主鍵欄型別正規化後寫回, 型別不符者整批reject且不寫入任何一筆
|
|
1101
1134
|
normPks(md, data)
|
|
1102
1135
|
|
|
1136
|
+
//chkDates, DATE、DATEONLY欄之值須為年份在1–9999之有效時間, 範圍外或無效者整批reject且不寫入任何一筆(與條件側共用範圍判定, 見R12)
|
|
1137
|
+
chkDates(md, data)
|
|
1138
|
+
|
|
1103
1139
|
//nAll, n之基準為輸入筆數
|
|
1104
1140
|
let nAll = size(data)
|
|
1105
1141
|
|
|
@@ -1359,6 +1395,8 @@ function WOrmReladb(opt = {}) {
|
|
|
1359
1395
|
* 註: 本筆失敗不中斷整批,該筆以ok為0並附err回報
|
|
1360
1396
|
* 註: opt.autoGenPk為true(預設)時未帶有效主鍵者自動產生,為false時未帶有效主鍵即reject且同批皆不寫入
|
|
1361
1397
|
* 註: 主鍵值依主鍵欄型別正規化(字串類主鍵欄之123即'123');型別不符(整數類主鍵欄給'012'等)屬呼叫端未履行契約,整批reject且同批皆不寫入
|
|
1398
|
+
* 註: DATE、DATEONLY欄之值換算後年份須在1–9999,範圍外或無效者(如new Date(8.64e15)、new Date(NaN))屬呼叫端未履行契約,整批reject且同批皆不寫入(含autoInsert為false而不會寫入者;不降為該筆ok為0),
|
|
1399
|
+
* 訊息為invalid data: date is not a valid time in years 1-9999 at [data[索引].欄名],不回顯值,兩方言一致於送出前拒收,規則同insert
|
|
1362
1400
|
*
|
|
1363
1401
|
* @memberOf WOrmReladb
|
|
1364
1402
|
* @param {Object|Array} data 輸入數據物件或陣列
|
|
@@ -1432,6 +1470,9 @@ function WOrmReladb(opt = {}) {
|
|
|
1432
1470
|
//normPks, 主鍵值依主鍵欄型別正規化後寫回, 型別不符者整批reject且不寫入任何一筆
|
|
1433
1471
|
normPks(md, data)
|
|
1434
1472
|
|
|
1473
|
+
//chkDates, DATE、DATEONLY欄之值須為年份在1–9999之有效時間, 範圍外或無效者整批reject且不寫入任何一筆(含autoInsert為false而不會寫入者; 與條件側共用範圍判定, 見R12)
|
|
1474
|
+
chkDates(md, data)
|
|
1475
|
+
|
|
1435
1476
|
//ks, model之欄位名, 供合併後比對時濾除非欄位之鍵
|
|
1436
1477
|
let ks = keys(get(md, 'rawAttributes', {}))
|
|
1437
1478
|
|
|
@@ -1951,7 +1992,7 @@ export default WOrmReladb
|
|
|
1951
1992
|
<br class="clear">
|
|
1952
1993
|
|
|
1953
1994
|
<footer>
|
|
1954
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on
|
|
1995
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Tue Oct 20 2026 04:13:54 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
1955
1996
|
</footer>
|
|
1956
1997
|
|
|
1957
1998
|
<script>prettyPrint();</script>
|
package/docs/cvFind.mjs.html
CHANGED
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
<nav >
|
|
30
30
|
|
|
31
31
|
|
|
32
|
-
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="WOrmReladb.html">WOrmReladb</a><ul class='methods'><li data-type='method'><a href="WOrmReladb.html#.closeSequelize">closeSequelize</a></li><li data-type='method'><a href="WOrmReladb.html#.createStorage">createStorage</a></li><li data-type='method'><a href="WOrmReladb.html#.del">del</a></li><li data-type='method'><a href="WOrmReladb.html#.delAll">delAll</a></li><li data-type='method'><a href="WOrmReladb.html#.genModelsByDB">genModelsByDB</a></li><li data-type='method'><a href="WOrmReladb.html#.genModelsByTabs">genModelsByTabs</a></li><li data-type='method'><a href="WOrmReladb.html#.genTransaction">genTransaction</a></li><li data-type='method'><a href="WOrmReladb.html#.initSequelize">initSequelize</a></li><li data-type='method'><a href="WOrmReladb.html#.insert">insert</a></li><li data-type='method'><a href="WOrmReladb.html#.insertBulk">insertBulk</a></li><li data-type='method'><a href="WOrmReladb.html#.save">save</a></li><li data-type='method'><a href="WOrmReladb.html#.select">select</a></li><li data-type='method'><a href="WOrmReladb.html#.selectByPk">selectByPk</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#cvFind">cvFind</a></li><li><a href="global.html#getColKind">getColKind</a></li><li><a href="global.html#getColScale">getColScale</a></li><li><a href="global.html#importModels">importModels</a></li><li><a href="global.html#isKindOk">isKindOk</a></li><li><a href="global.html#normPk">normPk</a></li></ul>
|
|
32
|
+
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="WOrmReladb.html">WOrmReladb</a><ul class='methods'><li data-type='method'><a href="WOrmReladb.html#.closeSequelize">closeSequelize</a></li><li data-type='method'><a href="WOrmReladb.html#.createStorage">createStorage</a></li><li data-type='method'><a href="WOrmReladb.html#.del">del</a></li><li data-type='method'><a href="WOrmReladb.html#.delAll">delAll</a></li><li data-type='method'><a href="WOrmReladb.html#.genModelsByDB">genModelsByDB</a></li><li data-type='method'><a href="WOrmReladb.html#.genModelsByTabs">genModelsByTabs</a></li><li data-type='method'><a href="WOrmReladb.html#.genTransaction">genTransaction</a></li><li data-type='method'><a href="WOrmReladb.html#.initSequelize">initSequelize</a></li><li data-type='method'><a href="WOrmReladb.html#.insert">insert</a></li><li data-type='method'><a href="WOrmReladb.html#.insertBulk">insertBulk</a></li><li data-type='method'><a href="WOrmReladb.html#.save">save</a></li><li data-type='method'><a href="WOrmReladb.html#.select">select</a></li><li data-type='method'><a href="WOrmReladb.html#.selectByPk">selectByPk</a></li></ul></li></ul><h3>Global</h3><ul><li><a href="global.html#cvFind">cvFind</a></li><li><a href="global.html#genDateChecker">genDateChecker</a></li><li><a href="global.html#getColKind">getColKind</a></li><li><a href="global.html#getColScale">getColScale</a></li><li><a href="global.html#importModels">importModels</a></li><li><a href="global.html#inDateRange">inDateRange</a></li><li><a href="global.html#isKindOk">isKindOk</a></li><li><a href="global.html#normPk">normPk</a></li></ul>
|
|
33
33
|
|
|
34
34
|
</nav>
|
|
35
35
|
|
|
@@ -66,6 +66,10 @@ import cvOrmFind from 'wsemi/src/cvOrmFind.mjs'
|
|
|
66
66
|
let Op = Sequelize.Op
|
|
67
67
|
|
|
68
68
|
|
|
69
|
+
//SQL運算式(Sequelize.fn、literal、col等)之基底類別, 寫入DATE欄之值為此類者由呼叫端明示, 不檢(R12)
|
|
70
|
+
let SM = Sequelize.Utils.SequelizeMethod
|
|
71
|
+
|
|
72
|
+
|
|
69
73
|
//形狀檢核之上限(傳給cvOrmFind): $and/$or長度999——SQLite平鋪$or/$and恰1000項即Expression tree is too large(DB錯誤), 本套件使用SQLite故下調(預設1000);
|
|
70
74
|
//其餘上限用預設: 邏輯巢狀深度32、$in/$nin長度10000、節點總數100000、欄名128
|
|
71
75
|
let optShape = { maxList: 999 }
|
|
@@ -358,15 +362,132 @@ function resolveAttr(attrs, idx, field, path) {
|
|
|
358
362
|
}
|
|
359
363
|
|
|
360
364
|
|
|
365
|
+
//DATE可接受之年份範圍, 條件側(isKindOk、parseNoTzLocal)與寫入側(genDateChecker)共用之唯一定義(R4、R12)
|
|
366
|
+
let yearMin = 1
|
|
367
|
+
let yearMax = 9999
|
|
368
|
+
|
|
369
|
+
|
|
361
370
|
/**
|
|
362
|
-
*
|
|
363
|
-
* 註: sequelize以YYYY格式化DATE, 年10000起為5位數, sqlite
|
|
371
|
+
* 判定年份是否在1–9999
|
|
372
|
+
* 註: sequelize以YYYY格式化DATE, 年10000起為5位數、年0與負年份亦非4位數, sqlite以文字比較致時間序與字典序不一致(哨兵8.64e15被$lt某日期誤中、$gt漏中);
|
|
373
|
+
* mssql之datetimeoffset與date範圍亦為0001–9999
|
|
364
374
|
*
|
|
365
375
|
* @ignore
|
|
366
376
|
*/
|
|
377
|
+
function inYearRange(y) {
|
|
378
|
+
return y >= yearMin && y <= yearMax
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
|
|
382
|
+
/**
|
|
383
|
+
* 判定時間(毫秒)換算UTC後年份是否在1–9999, 供條件側與寫入側共用(R4、R12); 無效時間(NaN、超出Date範圍)為false
|
|
384
|
+
*
|
|
385
|
+
* @param {Number} ms 輸入時間毫秒數
|
|
386
|
+
* @returns {Boolean} 回傳是否在範圍內
|
|
387
|
+
*/
|
|
367
388
|
function inDateRange(ms) {
|
|
368
|
-
|
|
369
|
-
|
|
389
|
+
return inYearRange(new Date(ms).getUTCFullYear())
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
|
|
393
|
+
/**
|
|
394
|
+
* 取DATEONLY欄把值轉為實際存入之YYYY-MM-DD文字之函數(sequelize之DATEONLY._sanitize)
|
|
395
|
+
* 註: 真正之rawAttributes其type為型別實例; 手造attrs可能給型別建構子(如Sequelize.DATEONLY)或只有key之物件, 此時用sequelize內建DATEONLY之_sanitize(兩者同一函數);
|
|
396
|
+
* 取不到(sequelize版本漂移)時於換算時拋錯, 由chkWriteDate視為無效而拒收(fail-closed, 版本漂移另有單元測試之guard案)
|
|
397
|
+
*
|
|
398
|
+
* @ignore
|
|
399
|
+
*/
|
|
400
|
+
function getDateOnlySanitizer(type) {
|
|
401
|
+
let t = type && typeof type._sanitize === 'function' ? type : DT.DATEONLY.prototype
|
|
402
|
+
return (v) => t._sanitize(v, {})
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
|
|
406
|
+
/**
|
|
407
|
+
* 檢核寫入DATE/DATEONLY欄之單一值(R12), 回傳{ok, v}: ok為是否為「年份在1–9999之有效時間」, v為建議寫回之標準值(undefined表示維持原值)
|
|
408
|
+
* 註: date——以sequelize之DATE._sanitize同一轉換取得時間(Date原樣, 其餘truthy值new Date(值)), 以inDateRange判定UTC年份;
|
|
409
|
+
* falsy值sequelize不轉換, 僅0(epoch 0)有效, 其餘('', false, NaN)會被存為文字Invalid date而拒收
|
|
410
|
+
* 註: dateonly——sequelize以moment(值)依主機本地時間格式化為YYYY-MM-DD文字存入, 以該型別之_sanitize所得之文字(= 實際存入者)判定:
|
|
411
|
+
* 須為4位數年且在1–9999(範圍外年份之文字形狀為5位以上、帶負號或年0000, 如new Date(8.64e15)得275760-09-13、new Date(-8.64e15)得-271821-04-20), Invalid date文字亦拒收
|
|
412
|
+
* 註: 無效時間(Invalid Date、NaN、無法解析之字串、超出Date範圍之數值、BigInt與Symbol…)一律拒收: sqlite存為文字Invalid date, 其字典序大於任何年份而使$gt命中、delAll誤刪,
|
|
413
|
+
* mssql則由資料庫報錯, 兩方言不一致(外審Argon F5; 與條件側無效Date一律reject同)
|
|
414
|
+
* 註: 檢查之值即使用之值——物件值(Date及其子類別、包裝物件、陣列、含自訂valueOf/toString者)可被sequelize再度求值而得不同結果, 故回傳已檢核之標準值(Date或YYYY-MM-DD文字)供呼叫端換上;
|
|
415
|
+
* 原始值(字串、數值)不可變, 不換
|
|
416
|
+
* 註: Sequelize.fn、literal、col等SQL運算式(SequelizeMethod)由呼叫端明示, sequelize不轉換, 不檢
|
|
417
|
+
*
|
|
418
|
+
* @ignore
|
|
419
|
+
*/
|
|
420
|
+
function chkWriteDate(v, kind, sanitize) {
|
|
421
|
+
if (v instanceof SM) {
|
|
422
|
+
return { ok: true, v: undefined }
|
|
423
|
+
}
|
|
424
|
+
if (!v) {
|
|
425
|
+
return { ok: v === 0, v: undefined }
|
|
426
|
+
}
|
|
427
|
+
if (typeof v === 'bigint' || typeof v === 'symbol') {
|
|
428
|
+
return { ok: false, v: undefined } //BigInt與Symbol不是時間(new Date(1n)拋錯, moment(1n)卻視為年2001), 一律拒收
|
|
429
|
+
}
|
|
430
|
+
try {
|
|
431
|
+
if (kind === 'date') {
|
|
432
|
+
let ms = (v instanceof Date ? v : new Date(v)).getTime()
|
|
433
|
+
if (!inDateRange(ms)) {
|
|
434
|
+
return { ok: false, v: undefined }
|
|
435
|
+
}
|
|
436
|
+
return { ok: true, v: typeof v === 'object' ? new Date(ms) : undefined }
|
|
437
|
+
}
|
|
438
|
+
let s = sanitize(v)
|
|
439
|
+
let m = typeof s === 'string' ? s.match(reDateOnly) : null
|
|
440
|
+
if (m === null || !inYearRange(Number(m[1]))) {
|
|
441
|
+
return { ok: false, v: undefined }
|
|
442
|
+
}
|
|
443
|
+
return { ok: true, v: typeof v === 'object' ? s : undefined }
|
|
444
|
+
}
|
|
445
|
+
catch (err) {
|
|
446
|
+
return { ok: false, v: undefined } //換算時拋錯(Symbol、BigInt、無原型物件等)亦非有效時間
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
|
|
451
|
+
/**
|
|
452
|
+
* 產生寫入數據之DATE/DATEONLY欄範圍檢核函數(R12): 回傳之函數對單筆數據(物件)檢核各DATE、DATEONLY屬性之值,
|
|
453
|
+
* 回傳第一個無效或範圍外(年份不在1–9999)之屬性名(依model屬性定義順序), 皆合法回傳null
|
|
454
|
+
* 註: 與條件側共用inDateRange; 只檢核model中型別為DATE(date)與DATEONLY(dateonly)之屬性, 值為null或undefined者不檢;
|
|
455
|
+
* 非物件之記錄回傳null(由呼叫端前段檢核負責)
|
|
456
|
+
* 註: 通過檢核之物件值(Date及其子類別、包裝物件、陣列等)就地換成已檢核之標準值(Date或YYYY-MM-DD文字), 令檢查之值即使用之值(見chkWriteDate);
|
|
457
|
+
* 僅換記錄自有屬性, 原型鏈上之屬性只讀不換(create與bulkCreate不讀原型鏈屬性, update會讀, 故原型鏈上具狀態之getter不在保證範圍)
|
|
458
|
+
*
|
|
459
|
+
* @param {Object} attrs 輸入model之rawAttributes, 非物件時回傳恆為null之檢核函數
|
|
460
|
+
* @returns {Function} 回傳檢核函數(rec)=>屬性名字串或null
|
|
461
|
+
*/
|
|
462
|
+
function genDateChecker(attrs) {
|
|
463
|
+
let cols = []
|
|
464
|
+
if (attrs !== null && typeof attrs === 'object') {
|
|
465
|
+
for (let k of Object.keys(attrs)) {
|
|
466
|
+
let kind = getColKind(attrs, k)
|
|
467
|
+
if (kind === 'date' || kind === 'dateonly') {
|
|
468
|
+
cols.push({ k, kind, san: kind === 'dateonly' ? getDateOnlySanitizer(attrs[k].type) : null })
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
return (rec) => {
|
|
473
|
+
if (rec === null || typeof rec !== 'object') {
|
|
474
|
+
return null
|
|
475
|
+
}
|
|
476
|
+
for (let c of cols) {
|
|
477
|
+
let v = rec[c.k]
|
|
478
|
+
if (v === null || v === undefined) {
|
|
479
|
+
continue
|
|
480
|
+
}
|
|
481
|
+
let r = chkWriteDate(v, c.kind, c.san)
|
|
482
|
+
if (!r.ok) {
|
|
483
|
+
return c.k
|
|
484
|
+
}
|
|
485
|
+
if (r.v !== undefined && Object.prototype.hasOwnProperty.call(rec, c.k)) {
|
|
486
|
+
rec[c.k] = r.v
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
return null
|
|
490
|
+
}
|
|
370
491
|
}
|
|
371
492
|
|
|
372
493
|
|
|
@@ -799,7 +920,7 @@ function cvFind(find, ctx) {
|
|
|
799
920
|
}
|
|
800
921
|
|
|
801
922
|
|
|
802
|
-
export { getColKind, getColScale, normPk, chkFindShape }
|
|
923
|
+
export { getColKind, getColScale, normPk, chkFindShape, inDateRange, genDateChecker }
|
|
803
924
|
export default cvFind
|
|
804
925
|
</code></pre>
|
|
805
926
|
</article>
|
|
@@ -815,7 +936,7 @@ export default cvFind
|
|
|
815
936
|
<br class="clear">
|
|
816
937
|
|
|
817
938
|
<footer>
|
|
818
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on
|
|
939
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Tue Oct 20 2026 04:13:54 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
819
940
|
</footer>
|
|
820
941
|
|
|
821
942
|
<script>prettyPrint();</script>
|