w-orm-reladb 1.1.11 → 1.1.13
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 +61 -1
- package/dist/w-orm-reladb.umd.js +2 -2
- package/dist/w-orm-reladb.umd.js.map +1 -1
- package/docs/WOrmReladb.html +35 -19
- package/docs/WOrmReladb.mjs.html +177 -58
- package/docs/cvFind.mjs.html +76 -3
- package/docs/global.html +386 -10
- package/docs/importModels.mjs.html +2 -2
- package/docs/index.html +2 -2
- package/models/twf.js +20 -0
- package/models/twfk.js +20 -0
- package/package.json +3 -3
- package/src/WOrmReladb.mjs +175 -56
- package/src/cvFind.mjs +74 -1
- package/test/api-dist.test.mjs +28 -0
- package/test/api-mssql.test.mjs +41 -7
- package/test/api-sqlite.test.mjs +2 -0
- package/test/api-wellformed.mjs +645 -0
- package/test/unit-cvfind.test.mjs +12 -0
- package/test/unit-wellformed.test.mjs +322 -0
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#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>
|
|
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#chkPkWf">chkPkWf</a></li><li><a href="global.html#chkWf">chkWf</a></li><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
|
|
|
@@ -46,7 +46,10 @@
|
|
|
46
46
|
<section>
|
|
47
47
|
<article>
|
|
48
48
|
<pre class="prettyprint source linenums"><code>import Sequelize from 'sequelize'
|
|
49
|
+
import get from 'lodash-es/get.js'
|
|
49
50
|
import cvOrmFind from 'wsemi/src/cvOrmFind.mjs'
|
|
51
|
+
import chkOrmStr from 'wsemi/src/chkOrmStr.mjs'
|
|
52
|
+
import chkOrmData from 'wsemi/src/chkOrmData.mjs'
|
|
50
53
|
|
|
51
54
|
|
|
52
55
|
//查詢條件(find)之轉譯, 供select與delAll共用, 令同一find於兩函數由同一SQL謂詞決定命中
|
|
@@ -60,6 +63,7 @@ import cvOrmFind from 'wsemi/src/cvOrmFind.mjs'
|
|
|
60
63
|
//不得供破壞性之delAll使用, 1.1.7起改自寫白名單; 第33項批1起形狀層改由cvOrmFind單一擁有, 本模組刪除Symbol/Op全集、$not $nor $regex $options $exists、
|
|
61
64
|
//RegExp值、陣列值即$in、非物件視為{}等形狀層(破壞性變更見CLAUDE_rulebook.md與README)
|
|
62
65
|
//主鍵值之正規化(normPk)亦屬本模組, 供主鍵函數與主鍵欄條件共用, 規則見R8
|
|
66
|
+
//寫入側之字串良構檢核(chkPkWf、chkWf, 規則見R13)亦屬本模組: 字串之判定單一出處為wsemi之chkOrmStr、chkOrmData, 本模組只負責接線與訊息組裝
|
|
63
67
|
|
|
64
68
|
|
|
65
69
|
//Op
|
|
@@ -607,6 +611,8 @@ function unwrap(v) {
|
|
|
607
611
|
* DECIMAL主鍵欄之值小數位多於scale者寫入時會被四捨五入而改變鍵(mssql之DECIMAL(10,2)存1.254為1.25, insert回報已存在而selectByPk(1.254)回null), 視為型別不符
|
|
608
612
|
* 註: 其他型別之主鍵欄不檢型別, 收非空字串與有限數值
|
|
609
613
|
* 註: NaN、±Infinity、空字串、布林、物件、陣列、Date、BigInt、null、undefined為無效
|
|
614
|
+
* 註: 含孤立代理碼元或NUL之字串為無效(第66項, R13; 與條件側同標準): UTF-8存放之資料庫會把孤立代理碼元改寫為U+FFFD而使不同主鍵寫成同一鍵,
|
|
615
|
+
* 回傳形狀不變({kind:'invalid'}), 故沿用各呼叫端對無效主鍵之既有處置; 需區辨[未給]與[不合格字串]者(autoGenPk不得以自動產生之主鍵取代呼叫端所給之不合格字串)用chkPkWf
|
|
610
616
|
*
|
|
611
617
|
* @param {*} v 輸入主鍵值
|
|
612
618
|
* @param {String} kind 輸入主鍵欄之型別分類, 取自getColKind
|
|
@@ -623,6 +629,9 @@ function normPk(v, kind, scale = null) {
|
|
|
623
629
|
if (v === '') {
|
|
624
630
|
return { kind: 'invalid' }
|
|
625
631
|
}
|
|
632
|
+
if (chkOrmStr(v) !== null) {
|
|
633
|
+
return { kind: 'invalid' }
|
|
634
|
+
}
|
|
626
635
|
if (kind === 'int') {
|
|
627
636
|
if (!reIntStd.test(v)) {
|
|
628
637
|
return { kind: 'mismatch' }
|
|
@@ -662,6 +671,70 @@ function normPk(v, kind, scale = null) {
|
|
|
662
671
|
return { kind: 'invalid' }
|
|
663
672
|
}
|
|
664
673
|
|
|
674
|
+
|
|
675
|
+
/**
|
|
676
|
+
* 檢核主鍵值之字串良構: 字串(含new String之原始值)不得含孤立代理碼元或NUL(第66項, R13)
|
|
677
|
+
*
|
|
678
|
+
* 註: 判定單一出處為wsemi之chkOrmStr(預設連NUL一併檢查, 主鍵與條件側同標準); 非字串回傳null(其有效性由normPk判定)
|
|
679
|
+
* 註: 先依normPk同一規則拆包裝物件(new String), 令其與原始字串同處置
|
|
680
|
+
*
|
|
681
|
+
* @param {*} v 輸入主鍵值
|
|
682
|
+
* @returns {String|null} 回傳null(非字串或合格),或固定原因字串'string contains lone surrogate'、'string contains NUL'
|
|
683
|
+
*/
|
|
684
|
+
function chkPkWf(v) {
|
|
685
|
+
v = unwrap(v)
|
|
686
|
+
if (typeof v !== 'string') {
|
|
687
|
+
return null
|
|
688
|
+
}
|
|
689
|
+
return chkOrmStr(v)
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
|
|
693
|
+
/**
|
|
694
|
+
* 逐筆檢核寫入數據之字串良構(第66項, R13), 回傳與輸入等長之訊息陣列
|
|
695
|
+
*
|
|
696
|
+
* 註: 輸入須為呼叫端數據之cloneDeep複本(檢查之值即使用之值): 本函數對各筆先檢主鍵再(withData為true時)檢資料, 同筆內主鍵先於資料,
|
|
697
|
+
* 資料由wsemi之chkOrmData走訪(鍵名先於值, 含巢狀物件、陣列元素、Map/Set等實存內容; 不論欄位是否在model內, 檢核先於欄位過濾)
|
|
698
|
+
* 註: 訊息為固定詞彙且不回顯值: invalid id: <原因> at [data[<索引>].<主鍵欄>]、invalid data: <原因> at [<路徑>]; 合格者為null
|
|
699
|
+
* 註: 主鍵值為包裝物件(new String、new Number)且合格者, 將原始值(字串或數值)寫回複本, 令其後之正規化讀到的即本函數所檢查者(包裝物件之valueOf只求值一次)
|
|
700
|
+
* 註: 資料之NUL不檢查(值之NUL不拒, 僅主鍵拒NUL)
|
|
701
|
+
*
|
|
702
|
+
* @param {Array} data 輸入數據陣列(已cloneDeep)
|
|
703
|
+
* @param {String} pk 輸入主鍵欄位名
|
|
704
|
+
* @param {Boolean} withData 輸入是否一併檢核資料(false只檢主鍵, 供del)
|
|
705
|
+
* @returns {Array} 回傳訊息陣列,合格者為null
|
|
706
|
+
*/
|
|
707
|
+
function chkWf(data, pk, withData) {
|
|
708
|
+
let msgs = []
|
|
709
|
+
for (let k = 0; k < data.length; k++) {
|
|
710
|
+
let v = data[k]
|
|
711
|
+
let msg = null
|
|
712
|
+
|
|
713
|
+
//pk, 主鍵先於資料; 包裝物件之valueOf只讀取一次(u為原始值), 合格者寫回複本
|
|
714
|
+
let pv = get(v, pk)
|
|
715
|
+
let u = unwrap(pv)
|
|
716
|
+
let why = chkPkWf(u)
|
|
717
|
+
if (why !== null) {
|
|
718
|
+
msg = `invalid id: ${why} at [data[${k}].${pk}]`
|
|
719
|
+
}
|
|
720
|
+
else if (u !== pv && (typeof u === 'string' || typeof u === 'number') && v !== null && typeof v === 'object') {
|
|
721
|
+
v[pk] = u
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
//data
|
|
725
|
+
if (msg === null && withData) {
|
|
726
|
+
let r = chkOrmData(v, { root: `data[${k}]` })
|
|
727
|
+
if (r !== null) {
|
|
728
|
+
msg = `invalid data: ${r.reason} at [${r.path}]`
|
|
729
|
+
}
|
|
730
|
+
}
|
|
731
|
+
|
|
732
|
+
msgs.push(msg)
|
|
733
|
+
}
|
|
734
|
+
return msgs
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
|
|
665
738
|
/**
|
|
666
739
|
* 檢核純量值: 字串、有限數值、布林、有效Date, 以及null(是否允許null已由cvOrmFind依運算子判定); 並須符合欄位型別分類
|
|
667
740
|
* 註: 物件、陣列等不得交sequelize之型別stringify, 否則FLOAT成'NaN'、INTEGER成'[object Object]'、DATE成本地今日00:00而誤刪;
|
|
@@ -920,7 +993,7 @@ function cvFind(find, ctx) {
|
|
|
920
993
|
}
|
|
921
994
|
|
|
922
995
|
|
|
923
|
-
export { getColKind, getColScale, normPk, chkFindShape, inDateRange, genDateChecker }
|
|
996
|
+
export { getColKind, getColScale, normPk, chkPkWf, chkWf, chkFindShape, inDateRange, genDateChecker }
|
|
924
997
|
export default cvFind
|
|
925
998
|
</code></pre>
|
|
926
999
|
</article>
|
|
@@ -936,7 +1009,7 @@ export default cvFind
|
|
|
936
1009
|
<br class="clear">
|
|
937
1010
|
|
|
938
1011
|
<footer>
|
|
939
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on
|
|
1012
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Wed Oct 21 2026 00:55:02 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
940
1013
|
</footer>
|
|
941
1014
|
|
|
942
1015
|
<script>prettyPrint();</script>
|
package/docs/global.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#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>
|
|
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#chkPkWf">chkPkWf</a></li><li><a href="global.html#chkWf">chkWf</a></li><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
|
|
|
@@ -130,6 +130,380 @@
|
|
|
130
130
|
|
|
131
131
|
|
|
132
132
|
|
|
133
|
+
<h4 class="name" id="chkPkWf"><span class="type-signature"></span>chkPkWf<span class="signature">(v)</span><span class="type-signature"> → {String|null}</span></h4>
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
<dl class="details">
|
|
141
|
+
|
|
142
|
+
<dt class="tag-description">Description:</dt>
|
|
143
|
+
<dd class="tag-description"><ul class="dummy"><li><p>檢核主鍵值之字串良構: 字串(含new String之原始值)不得含孤立代理碼元或NUL(第66項, R13)</p>
|
|
144
|
+
<p>註: 判定單一出處為wsemi之chkOrmStr(預設連NUL一併檢查, 主鍵與條件側同標準); 非字串回傳null(其有效性由normPk判定)
|
|
145
|
+
註: 先依normPk同一規則拆包裝物件(new String), 令其與原始字串同處置</p></li></ul></dd>
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
<dt class="tag-source">Source:</dt>
|
|
150
|
+
<dd class="tag-source"><ul class="dummy"><li>
|
|
151
|
+
<a href="cvFind.mjs.html">cvFind.mjs</a>, <a href="cvFind.mjs.html#line637">line 637</a>
|
|
152
|
+
</li></ul></dd>
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
</dl>
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
<h5 class="h5-parameters">Parameters:</h5>
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
<table class="params">
|
|
202
|
+
<thead>
|
|
203
|
+
<tr>
|
|
204
|
+
|
|
205
|
+
<th>Name</th>
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
<th>Type</th>
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
<th class="last">Description</th>
|
|
215
|
+
</tr>
|
|
216
|
+
</thead>
|
|
217
|
+
|
|
218
|
+
<tbody>
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
<tr>
|
|
222
|
+
|
|
223
|
+
<td class="name"><code>v</code></td>
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
<td class="type">
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
<span class="param-type">*</span>
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
</td>
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
<td class="description last"><p>輸入主鍵值</p></td>
|
|
241
|
+
</tr>
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
</tbody>
|
|
245
|
+
</table>
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
<h5 class="h5-returns">Returns:</h5>
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
<div class="param-desc">
|
|
266
|
+
<p>回傳null(非字串或合格),或固定原因字串'string contains lone surrogate'、'string contains NUL'</p>
|
|
267
|
+
</div>
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
|
|
271
|
+
<dl class="param-type">
|
|
272
|
+
<dt>
|
|
273
|
+
Type
|
|
274
|
+
</dt>
|
|
275
|
+
<dd>
|
|
276
|
+
|
|
277
|
+
<span class="param-type">String</span>
|
|
278
|
+
|
|
|
279
|
+
|
|
280
|
+
<span class="param-type">null</span>
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
|
|
284
|
+
</dd>
|
|
285
|
+
</dl>
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
|
|
291
|
+
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
<h4 class="name" id="chkWf"><span class="type-signature"></span>chkWf<span class="signature">(data, pk, withData)</span><span class="type-signature"> → {Array}</span></h4>
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
|
|
303
|
+
<dl class="details">
|
|
304
|
+
|
|
305
|
+
<dt class="tag-description">Description:</dt>
|
|
306
|
+
<dd class="tag-description"><ul class="dummy"><li><p>逐筆檢核寫入數據之字串良構(第66項, R13), 回傳與輸入等長之訊息陣列</p>
|
|
307
|
+
<p>註: 輸入須為呼叫端數據之cloneDeep複本(檢查之值即使用之值): 本函數對各筆先檢主鍵再(withData為true時)檢資料, 同筆內主鍵先於資料,
|
|
308
|
+
資料由wsemi之chkOrmData走訪(鍵名先於值, 含巢狀物件、陣列元素、Map/Set等實存內容; 不論欄位是否在model內, 檢核先於欄位過濾)
|
|
309
|
+
註: 訊息為固定詞彙且不回顯值: invalid id: <原因> at [data[<索引>].<主鍵欄>]、invalid data: <原因> at [<路徑>]; 合格者為null
|
|
310
|
+
註: 主鍵值為包裝物件(new String、new Number)且合格者, 將原始值(字串或數值)寫回複本, 令其後之正規化讀到的即本函數所檢查者(包裝物件之valueOf只求值一次)
|
|
311
|
+
註: 資料之NUL不檢查(值之NUL不拒, 僅主鍵拒NUL)</p></li></ul></dd>
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
|
|
315
|
+
<dt class="tag-source">Source:</dt>
|
|
316
|
+
<dd class="tag-source"><ul class="dummy"><li>
|
|
317
|
+
<a href="cvFind.mjs.html">cvFind.mjs</a>, <a href="cvFind.mjs.html#line660">line 660</a>
|
|
318
|
+
</li></ul></dd>
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
|
|
326
|
+
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
|
|
339
|
+
|
|
340
|
+
|
|
341
|
+
|
|
342
|
+
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
|
|
349
|
+
|
|
350
|
+
</dl>
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
|
|
358
|
+
|
|
359
|
+
|
|
360
|
+
|
|
361
|
+
|
|
362
|
+
|
|
363
|
+
|
|
364
|
+
<h5 class="h5-parameters">Parameters:</h5>
|
|
365
|
+
|
|
366
|
+
|
|
367
|
+
<table class="params">
|
|
368
|
+
<thead>
|
|
369
|
+
<tr>
|
|
370
|
+
|
|
371
|
+
<th>Name</th>
|
|
372
|
+
|
|
373
|
+
|
|
374
|
+
<th>Type</th>
|
|
375
|
+
|
|
376
|
+
|
|
377
|
+
|
|
378
|
+
|
|
379
|
+
|
|
380
|
+
<th class="last">Description</th>
|
|
381
|
+
</tr>
|
|
382
|
+
</thead>
|
|
383
|
+
|
|
384
|
+
<tbody>
|
|
385
|
+
|
|
386
|
+
|
|
387
|
+
<tr>
|
|
388
|
+
|
|
389
|
+
<td class="name"><code>data</code></td>
|
|
390
|
+
|
|
391
|
+
|
|
392
|
+
<td class="type">
|
|
393
|
+
|
|
394
|
+
|
|
395
|
+
<span class="param-type">Array</span>
|
|
396
|
+
|
|
397
|
+
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
</td>
|
|
401
|
+
|
|
402
|
+
|
|
403
|
+
|
|
404
|
+
|
|
405
|
+
|
|
406
|
+
<td class="description last"><p>輸入數據陣列(已cloneDeep)</p></td>
|
|
407
|
+
</tr>
|
|
408
|
+
|
|
409
|
+
|
|
410
|
+
|
|
411
|
+
<tr>
|
|
412
|
+
|
|
413
|
+
<td class="name"><code>pk</code></td>
|
|
414
|
+
|
|
415
|
+
|
|
416
|
+
<td class="type">
|
|
417
|
+
|
|
418
|
+
|
|
419
|
+
<span class="param-type">String</span>
|
|
420
|
+
|
|
421
|
+
|
|
422
|
+
|
|
423
|
+
|
|
424
|
+
</td>
|
|
425
|
+
|
|
426
|
+
|
|
427
|
+
|
|
428
|
+
|
|
429
|
+
|
|
430
|
+
<td class="description last"><p>輸入主鍵欄位名</p></td>
|
|
431
|
+
</tr>
|
|
432
|
+
|
|
433
|
+
|
|
434
|
+
|
|
435
|
+
<tr>
|
|
436
|
+
|
|
437
|
+
<td class="name"><code>withData</code></td>
|
|
438
|
+
|
|
439
|
+
|
|
440
|
+
<td class="type">
|
|
441
|
+
|
|
442
|
+
|
|
443
|
+
<span class="param-type">Boolean</span>
|
|
444
|
+
|
|
445
|
+
|
|
446
|
+
|
|
447
|
+
|
|
448
|
+
</td>
|
|
449
|
+
|
|
450
|
+
|
|
451
|
+
|
|
452
|
+
|
|
453
|
+
|
|
454
|
+
<td class="description last"><p>輸入是否一併檢核資料(false只檢主鍵, 供del)</p></td>
|
|
455
|
+
</tr>
|
|
456
|
+
|
|
457
|
+
|
|
458
|
+
</tbody>
|
|
459
|
+
</table>
|
|
460
|
+
|
|
461
|
+
|
|
462
|
+
|
|
463
|
+
|
|
464
|
+
|
|
465
|
+
|
|
466
|
+
|
|
467
|
+
|
|
468
|
+
|
|
469
|
+
|
|
470
|
+
|
|
471
|
+
|
|
472
|
+
|
|
473
|
+
|
|
474
|
+
|
|
475
|
+
|
|
476
|
+
<h5 class="h5-returns">Returns:</h5>
|
|
477
|
+
|
|
478
|
+
|
|
479
|
+
<div class="param-desc">
|
|
480
|
+
<p>回傳訊息陣列,合格者為null</p>
|
|
481
|
+
</div>
|
|
482
|
+
|
|
483
|
+
|
|
484
|
+
|
|
485
|
+
<dl class="param-type">
|
|
486
|
+
<dt>
|
|
487
|
+
Type
|
|
488
|
+
</dt>
|
|
489
|
+
<dd>
|
|
490
|
+
|
|
491
|
+
<span class="param-type">Array</span>
|
|
492
|
+
|
|
493
|
+
|
|
494
|
+
|
|
495
|
+
</dd>
|
|
496
|
+
</dl>
|
|
497
|
+
|
|
498
|
+
|
|
499
|
+
|
|
500
|
+
|
|
501
|
+
|
|
502
|
+
|
|
503
|
+
|
|
504
|
+
|
|
505
|
+
|
|
506
|
+
|
|
133
507
|
<h4 class="name" id="cvFind"><span class="type-signature"></span>cvFind<span class="signature">(find, ctx)</span><span class="type-signature"> → {Object}</span></h4>
|
|
134
508
|
|
|
135
509
|
|
|
@@ -150,7 +524,7 @@ $eq $ne $gt $gte $lt $lte(純量)、$in $nin(純量陣列)、$and $or(條件物
|
|
|
150
524
|
|
|
151
525
|
<dt class="tag-source">Source:</dt>
|
|
152
526
|
<dd class="tag-source"><ul class="dummy"><li>
|
|
153
|
-
<a href="cvFind.mjs.html">cvFind.mjs</a>, <a href="cvFind.mjs.html#
|
|
527
|
+
<a href="cvFind.mjs.html">cvFind.mjs</a>, <a href="cvFind.mjs.html#line924">line 924</a>
|
|
154
528
|
</li></ul></dd>
|
|
155
529
|
|
|
156
530
|
|
|
@@ -535,7 +909,7 @@ $eq $ne $gt $gte $lt $lte(純量)、$in $nin(純量陣列)、$and $or(條件物
|
|
|
535
909
|
|
|
536
910
|
<dt class="tag-source">Source:</dt>
|
|
537
911
|
<dd class="tag-source"><ul class="dummy"><li>
|
|
538
|
-
<a href="cvFind.mjs.html">cvFind.mjs</a>, <a href="cvFind.mjs.html#
|
|
912
|
+
<a href="cvFind.mjs.html">cvFind.mjs</a>, <a href="cvFind.mjs.html#line419">line 419</a>
|
|
539
913
|
</li></ul></dd>
|
|
540
914
|
|
|
541
915
|
|
|
@@ -693,7 +1067,7 @@ $eq $ne $gt $gte $lt $lte(純量)、$in $nin(純量陣列)、$and $or(條件物
|
|
|
693
1067
|
|
|
694
1068
|
<dt class="tag-source">Source:</dt>
|
|
695
1069
|
<dd class="tag-source"><ul class="dummy"><li>
|
|
696
|
-
<a href="cvFind.mjs.html">cvFind.mjs</a>, <a href="cvFind.mjs.html#
|
|
1070
|
+
<a href="cvFind.mjs.html">cvFind.mjs</a>, <a href="cvFind.mjs.html#line163">line 163</a>
|
|
697
1071
|
</li></ul></dd>
|
|
698
1072
|
|
|
699
1073
|
|
|
@@ -875,7 +1249,7 @@ $eq $ne $gt $gte $lt $lte(純量)、$in $nin(純量陣列)、$and $or(條件物
|
|
|
875
1249
|
|
|
876
1250
|
<dt class="tag-source">Source:</dt>
|
|
877
1251
|
<dd class="tag-source"><ul class="dummy"><li>
|
|
878
|
-
<a href="cvFind.mjs.html">cvFind.mjs</a>, <a href="cvFind.mjs.html#
|
|
1252
|
+
<a href="cvFind.mjs.html">cvFind.mjs</a>, <a href="cvFind.mjs.html#line458">line 458</a>
|
|
879
1253
|
</li></ul></dd>
|
|
880
1254
|
|
|
881
1255
|
|
|
@@ -1457,7 +1831,7 @@ $eq $ne $gt $gte $lt $lte(純量)、$in $nin(純量陣列)、$and $or(條件物
|
|
|
1457
1831
|
|
|
1458
1832
|
<dt class="tag-source">Source:</dt>
|
|
1459
1833
|
<dd class="tag-source"><ul class="dummy"><li>
|
|
1460
|
-
<a href="cvFind.mjs.html">cvFind.mjs</a>, <a href="cvFind.mjs.html#
|
|
1834
|
+
<a href="cvFind.mjs.html">cvFind.mjs</a>, <a href="cvFind.mjs.html#line345">line 345</a>
|
|
1461
1835
|
</li></ul></dd>
|
|
1462
1836
|
|
|
1463
1837
|
|
|
@@ -1618,7 +1992,7 @@ $eq $ne $gt $gte $lt $lte(純量)、$in $nin(純量陣列)、$and $or(條件物
|
|
|
1618
1992
|
|
|
1619
1993
|
<dt class="tag-source">Source:</dt>
|
|
1620
1994
|
<dd class="tag-source"><ul class="dummy"><li>
|
|
1621
|
-
<a href="cvFind.mjs.html">cvFind.mjs</a>, <a href="cvFind.mjs.html#
|
|
1995
|
+
<a href="cvFind.mjs.html">cvFind.mjs</a>, <a href="cvFind.mjs.html#line480">line 480</a>
|
|
1622
1996
|
</li></ul></dd>
|
|
1623
1997
|
|
|
1624
1998
|
|
|
@@ -1803,13 +2177,15 @@ $eq $ne $gt $gte $lt $lte(純量)、$in $nin(純量陣列)、$and $or(條件物
|
|
|
1803
2177
|
註: 其他數值類主鍵欄收有限數值與標準數字字串(轉為數值), 其他字串視為型別不符;
|
|
1804
2178
|
DECIMAL主鍵欄之值小數位多於scale者寫入時會被四捨五入而改變鍵(mssql之DECIMAL(10,2)存1.254為1.25, insert回報已存在而selectByPk(1.254)回null), 視為型別不符
|
|
1805
2179
|
註: 其他型別之主鍵欄不檢型別, 收非空字串與有限數值
|
|
1806
|
-
註: NaN、±Infinity、空字串、布林、物件、陣列、Date、BigInt、null、undefined
|
|
2180
|
+
註: NaN、±Infinity、空字串、布林、物件、陣列、Date、BigInt、null、undefined為無效
|
|
2181
|
+
註: 含孤立代理碼元或NUL之字串為無效(第66項, R13; 與條件側同標準): UTF-8存放之資料庫會把孤立代理碼元改寫為U+FFFD而使不同主鍵寫成同一鍵,
|
|
2182
|
+
回傳形狀不變({kind:'invalid'}), 故沿用各呼叫端對無效主鍵之既有處置; 需區辨[未給]與[不合格字串]者(autoGenPk不得以自動產生之主鍵取代呼叫端所給之不合格字串)用chkPkWf</p></li></ul></dd>
|
|
1807
2183
|
|
|
1808
2184
|
|
|
1809
2185
|
|
|
1810
2186
|
<dt class="tag-source">Source:</dt>
|
|
1811
2187
|
<dd class="tag-source"><ul class="dummy"><li>
|
|
1812
|
-
<a href="cvFind.mjs.html">cvFind.mjs</a>, <a href="cvFind.mjs.html#
|
|
2188
|
+
<a href="cvFind.mjs.html">cvFind.mjs</a>, <a href="cvFind.mjs.html#line575">line 575</a>
|
|
1813
2189
|
</li></ul></dd>
|
|
1814
2190
|
|
|
1815
2191
|
|
|
@@ -2061,7 +2437,7 @@ DECIMAL主鍵欄之值小數位多於scale者寫入時會被四捨五入而改
|
|
|
2061
2437
|
<br class="clear">
|
|
2062
2438
|
|
|
2063
2439
|
<footer>
|
|
2064
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on
|
|
2440
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Wed Oct 21 2026 00:55:02 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
2065
2441
|
</footer>
|
|
2066
2442
|
|
|
2067
2443
|
<script>prettyPrint();</script>
|
|
@@ -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#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>
|
|
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#chkPkWf">chkPkWf</a></li><li><a href="global.html#chkWf">chkWf</a></li><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
|
|
|
@@ -242,7 +242,7 @@ export default importModels
|
|
|
242
242
|
<br class="clear">
|
|
243
243
|
|
|
244
244
|
<footer>
|
|
245
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on
|
|
245
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Wed Oct 21 2026 00:55:02 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
246
246
|
</footer>
|
|
247
247
|
|
|
248
248
|
<script>prettyPrint();</script>
|
package/docs/index.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#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>
|
|
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#chkPkWf">chkPkWf</a></li><li><a href="global.html#chkWf">chkWf</a></li><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
|
|
|
@@ -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
|
|
74
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Wed Oct 21 2026 00:55:02 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
75
75
|
</footer>
|
|
76
76
|
|
|
77
77
|
<script>prettyPrint();</script>
|