w-data-collector 1.0.1
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/.editorconfig +9 -0
- package/.eslintignore +3 -0
- package/.eslintrc.js +54 -0
- package/.jsdoc +25 -0
- package/LICENSE +21 -0
- package/README.md +43 -0
- package/SECURITY.md +5 -0
- package/babel.config.js +14 -0
- package/dist/w-data-collector.umd.js +7 -0
- package/dist/w-data-collector.umd.js.map +1 -0
- package/docs/fonts/Montserrat/Montserrat-Bold.eot +0 -0
- package/docs/fonts/Montserrat/Montserrat-Bold.ttf +0 -0
- package/docs/fonts/Montserrat/Montserrat-Bold.woff +0 -0
- package/docs/fonts/Montserrat/Montserrat-Bold.woff2 +0 -0
- package/docs/fonts/Montserrat/Montserrat-Regular.eot +0 -0
- package/docs/fonts/Montserrat/Montserrat-Regular.ttf +0 -0
- package/docs/fonts/Montserrat/Montserrat-Regular.woff +0 -0
- package/docs/fonts/Montserrat/Montserrat-Regular.woff2 +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.eot +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +978 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.ttf +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff2 +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.eot +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +1049 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.ttf +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff2 +0 -0
- package/docs/genIndex.mjs.html +189 -0
- package/docs/genTestdata.mjs.html +162 -0
- package/docs/global.html +891 -0
- package/docs/index.html +81 -0
- package/docs/scripts/collapse.js +20 -0
- package/docs/scripts/linenumber.js +25 -0
- package/docs/scripts/nav.js +12 -0
- package/docs/scripts/polyfill.js +4 -0
- package/docs/scripts/prettify/Apache-License-2.0.txt +202 -0
- package/docs/scripts/prettify/lang-css.js +2 -0
- package/docs/scripts/prettify/prettify.js +28 -0
- package/docs/scripts/search.js +83 -0
- package/docs/styles/jsdoc.css +765 -0
- package/docs/styles/prettify.css +79 -0
- package/gi.mjs +13 -0
- package/gt.mjs +11 -0
- package/package.json +32 -0
- package/src/WDataCollector.mjs +13 -0
- package/src/build.mjs +127 -0
- package/src/genIndex.mjs +120 -0
- package/src/genTestdata.mjs +93 -0
- package/test/genIndex.test.mjs +17 -0
- package/test/schema/index.mjs +20 -0
- package/test/schema/index.mjs.txt +20 -0
- package/test/schema/tables/holeLabTabs.mjs +130 -0
- package/test/schema/tables/holeLabTabsItems.mjs +318 -0
- package/test/schema/tables/users.mjs +102 -0
- package/toolg/addVersion.mjs +4 -0
- package/toolg/cleanFolder.mjs +4 -0
- package/toolg/gDistRollup.mjs +35 -0
- package/toolg/gDocsExams.mjs +51 -0
- package/toolg/modifyReadme.mjs +4 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
.pln {
|
|
2
|
+
color: #ddd;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
/* string content */
|
|
6
|
+
.str {
|
|
7
|
+
color: #61ce3c;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/* a keyword */
|
|
11
|
+
.kwd {
|
|
12
|
+
color: #fbde2d;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/* a comment */
|
|
16
|
+
.com {
|
|
17
|
+
color: #aeaeae;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/* a type name */
|
|
21
|
+
.typ {
|
|
22
|
+
color: #8da6ce;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/* a literal value */
|
|
26
|
+
.lit {
|
|
27
|
+
color: #fbde2d;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/* punctuation */
|
|
31
|
+
.pun {
|
|
32
|
+
color: #ddd;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/* lisp open bracket */
|
|
36
|
+
.opn {
|
|
37
|
+
color: #000000;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/* lisp close bracket */
|
|
41
|
+
.clo {
|
|
42
|
+
color: #000000;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/* a markup tag name */
|
|
46
|
+
.tag {
|
|
47
|
+
color: #8da6ce;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/* a markup attribute name */
|
|
51
|
+
.atn {
|
|
52
|
+
color: #fbde2d;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/* a markup attribute value */
|
|
56
|
+
.atv {
|
|
57
|
+
color: #ddd;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/* a declaration */
|
|
61
|
+
.dec {
|
|
62
|
+
color: #EF5050;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/* a variable name */
|
|
66
|
+
.var {
|
|
67
|
+
color: #c82829;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/* a function name */
|
|
71
|
+
.fun {
|
|
72
|
+
color: #4271ae;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/* Specify class=linenums on a pre to get line numbering */
|
|
76
|
+
ol.linenums {
|
|
77
|
+
margin-top: 0;
|
|
78
|
+
margin-bottom: 0;
|
|
79
|
+
}
|
package/gi.mjs
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// import genIndex from 'w-data-collector/src/genIndex.mjs'
|
|
2
|
+
import genIndex from './src/genIndex.mjs'
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
// genIndex('./src/schema/tables', './src/schema')
|
|
6
|
+
genIndex('./test/schema/tables', './test/schema', { fpBuild: './src/build.mjs' })
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
//將gi.mjs放置於./src/schema/gi.mjs時使用指令:
|
|
10
|
+
//node --experimental-modules --es-module-specifier-resolution=node ./src/schema/gi.mjs
|
|
11
|
+
|
|
12
|
+
//node --experimental-modules --es-module-specifier-resolution=node gi.mjs
|
|
13
|
+
|
package/gt.mjs
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import genTestdata from 'w-data-collector/src/genTestdata.mjs'
|
|
2
|
+
import ds from './index.mjs'
|
|
3
|
+
import { woItems } from '../../server/mOrm.mjs'
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
genTestdata(ds, woItems)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
//將gt.mjs放置於./src/schema/gt.mjs時使用指令:
|
|
10
|
+
//node --experimental-modules --es-module-specifier-resolution=node ./src/schema/gt.mjs
|
|
11
|
+
|
package/package.json
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "w-data-collector",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"description": "A data of collector.",
|
|
5
|
+
"main": "dist/w-data-collector.umd.js",
|
|
6
|
+
"dependencies": {
|
|
7
|
+
"lodash": "^4.17.21",
|
|
8
|
+
"wsemi": "^1.6.19"
|
|
9
|
+
},
|
|
10
|
+
"devDependencies": {
|
|
11
|
+
"w-package-tools": "^1.0.59"
|
|
12
|
+
},
|
|
13
|
+
"scripts": {
|
|
14
|
+
"test": "mocha --parallel --timeout 60000 --experimental-modules --es-module-specifier-resolution=node",
|
|
15
|
+
"deploy": "gh-pages -d docs"
|
|
16
|
+
},
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": "git+https://github.com/yuda-lyu/w-data-collector.git"
|
|
20
|
+
},
|
|
21
|
+
"keywords": [
|
|
22
|
+
"package",
|
|
23
|
+
"tool",
|
|
24
|
+
"collector"
|
|
25
|
+
],
|
|
26
|
+
"author": "yuda-lyu(semisphere)",
|
|
27
|
+
"license": "MIT",
|
|
28
|
+
"bugs": {
|
|
29
|
+
"url": "https://github.com/yuda-lyu/w-data-collector/issues"
|
|
30
|
+
},
|
|
31
|
+
"homepage": "https://github.com/yuda-lyu/w-data-collector#readme"
|
|
32
|
+
}
|
package/src/build.mjs
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import each from 'lodash/each'
|
|
2
|
+
import keys from 'lodash/keys'
|
|
3
|
+
import get from 'lodash/get'
|
|
4
|
+
import size from 'lodash/size'
|
|
5
|
+
import haskey from 'wsemi/src/haskey.mjs'
|
|
6
|
+
import isestr from 'wsemi/src/isestr.mjs'
|
|
7
|
+
import iseobj from 'wsemi/src/iseobj.mjs'
|
|
8
|
+
import isfun from 'wsemi/src/isfun.mjs'
|
|
9
|
+
import isbol from 'wsemi/src/isbol.mjs'
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
function build(params, opt = {}) {
|
|
13
|
+
|
|
14
|
+
//useCreateStorage
|
|
15
|
+
let useCreateStorage = get(opt, 'useCreateStorage')
|
|
16
|
+
if (!isbol(useCreateStorage)) {
|
|
17
|
+
useCreateStorage = false
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
//params
|
|
21
|
+
let { keyTable, tableNameCht, tableNameEng, settings, parser, fnew, ftest } = params
|
|
22
|
+
|
|
23
|
+
//check keyTable
|
|
24
|
+
if (!isestr(keyTable)) {
|
|
25
|
+
throw new Error(`invalid keyTable[${keyTable}]`)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
//check tableNameCht
|
|
29
|
+
if (!isestr(tableNameCht)) {
|
|
30
|
+
tableNameCht = keyTable
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
//check tableNameEng
|
|
34
|
+
if (!isestr(tableNameEng)) {
|
|
35
|
+
tableNameEng = keyTable
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
//check settings
|
|
39
|
+
if (!iseobj(settings)) {
|
|
40
|
+
throw new Error('invalid settings')
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
//check parser
|
|
44
|
+
if (!isfun(parser)) {
|
|
45
|
+
parser = null
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
//check fnew
|
|
49
|
+
if (!isfun(fnew)) {
|
|
50
|
+
fnew = null
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
//check ftest
|
|
54
|
+
let _ftest = null
|
|
55
|
+
if (isfun(ftest)) {
|
|
56
|
+
_ftest = async(wo) => {
|
|
57
|
+
|
|
58
|
+
//check
|
|
59
|
+
if (!iseobj(wo)) {
|
|
60
|
+
throw new Error('invalid wo')
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
//check
|
|
64
|
+
if (!haskey(wo, keyTable)) {
|
|
65
|
+
console.log(wo)
|
|
66
|
+
throw new Error(`keyTable[${keyTable}] is not in wo`)
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
//r
|
|
70
|
+
let r = []
|
|
71
|
+
try {
|
|
72
|
+
r = ftest()
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
console.log(`keyTable[${keyTable}] ftest catch`, err)
|
|
76
|
+
throw new Error(err)
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
//check
|
|
80
|
+
if (size(r) === 0) {
|
|
81
|
+
return
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
//createStorage
|
|
85
|
+
if (useCreateStorage) {
|
|
86
|
+
await wo[keyTable].createStorage()
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
//save
|
|
90
|
+
await wo[keyTable].save(r)
|
|
91
|
+
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
//kpHead, kpType
|
|
96
|
+
let kpHead = {}
|
|
97
|
+
let kpType = {}
|
|
98
|
+
each(keys(settings), (v) => {
|
|
99
|
+
let name = get(settings, `${v}.name`, '')
|
|
100
|
+
if (isestr(name)) {
|
|
101
|
+
kpHead[v] = name
|
|
102
|
+
}
|
|
103
|
+
let type = get(settings, `${v}.type`, '')
|
|
104
|
+
if (isestr(type)) {
|
|
105
|
+
kpType[v] = type
|
|
106
|
+
}
|
|
107
|
+
})
|
|
108
|
+
|
|
109
|
+
//r
|
|
110
|
+
let r = {
|
|
111
|
+
keyTable,
|
|
112
|
+
tableNameCht,
|
|
113
|
+
tableNameEng,
|
|
114
|
+
settings,
|
|
115
|
+
keys: keys(settings),
|
|
116
|
+
kpType,
|
|
117
|
+
kpHead,
|
|
118
|
+
parser,
|
|
119
|
+
fnew,
|
|
120
|
+
ftest: _ftest,
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
return r
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
export default build
|
package/src/genIndex.mjs
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import path from 'path'
|
|
2
|
+
import fs from 'fs'
|
|
3
|
+
import get from 'lodash/get'
|
|
4
|
+
import map from 'lodash/map'
|
|
5
|
+
import join from 'lodash/join'
|
|
6
|
+
import isestr from 'wsemi/src/isestr.mjs'
|
|
7
|
+
import fsTreeFolder from 'wsemi/src/fsTreeFolder.mjs'
|
|
8
|
+
import replace from 'wsemi/src/replace.mjs'
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
function genImports(ms) {
|
|
12
|
+
let rs = map(ms, (v) => {
|
|
13
|
+
let t = `import {name} from '{src}'`
|
|
14
|
+
t = replace(t, '{name}', v.name)
|
|
15
|
+
t = replace(t, '{src}', v.src)
|
|
16
|
+
return t
|
|
17
|
+
})
|
|
18
|
+
return join(rs, '\n')
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
function genNames(ms) {
|
|
23
|
+
let rs = map(ms, (v) => {
|
|
24
|
+
let t = ` {name},`
|
|
25
|
+
t = replace(t, '{name}', v.name)
|
|
26
|
+
return t
|
|
27
|
+
})
|
|
28
|
+
return join(rs, '\n')
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* 由各資料表定義*.mjs檔產生資料表收集物件ds
|
|
34
|
+
*
|
|
35
|
+
* @param {String} fdSrc 輸入各資料表定義*.mjs檔案所在資料夾
|
|
36
|
+
* @param {String} fdIndex 輸入產生index.mjs檔案需儲存至的資料夾,主要是跟各資料表定義*.mjs檔計算相對路徑供程式碼import用
|
|
37
|
+
* @param {Object} [opt={}] 輸入設定物件,預設{}
|
|
38
|
+
* @param {String} [opt.fpBuild='w-data-collector/src/build.mjs'] 輸入程式碼所需import之再處理資料表定義*.mjs檔的build函數,預設為'w-data-collector/src/build.mjs'
|
|
39
|
+
* @param {String} [opt.fnIndex='index.mjs'] 輸入產生ds所需程式碼index.mjs檔案的名稱,預設為'index.mjs',實際檔案儲存位置為fdIndex下fnIndex
|
|
40
|
+
* @example
|
|
41
|
+
*
|
|
42
|
+
* import genIndex from 'w-data-collector/src/genIndex.mjs'
|
|
43
|
+
*
|
|
44
|
+
* genIndex('./src/schema/tables', './src/schema', {})
|
|
45
|
+
* // => genIndex done
|
|
46
|
+
*
|
|
47
|
+
*/
|
|
48
|
+
function genIndex(fdSrc, fdIndex, opt = {}) {
|
|
49
|
+
|
|
50
|
+
//fpBuild
|
|
51
|
+
let fpBuild = get(opt, 'fpBuild')
|
|
52
|
+
if (!isestr(fpBuild)) {
|
|
53
|
+
fpBuild = 'w-data-collector/src/build.mjs'
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
//fnIndex
|
|
57
|
+
let fnIndex = get(opt, 'fnIndex')
|
|
58
|
+
if (!isestr(fnIndex)) {
|
|
59
|
+
fnIndex = 'index.mjs'
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
//fsTreeFolder
|
|
63
|
+
let fps = fsTreeFolder(fdSrc)
|
|
64
|
+
// console.log('fps', fps)
|
|
65
|
+
|
|
66
|
+
//ms
|
|
67
|
+
let ms = map(fps, (v) => {
|
|
68
|
+
let name = v.name
|
|
69
|
+
name = replace(name, '.mjs', '')
|
|
70
|
+
name = replace(name, '.js', '')
|
|
71
|
+
let src = path.relative(fdIndex, v.path)
|
|
72
|
+
src = src.replace(/\\/g, '/')
|
|
73
|
+
src = `./${src}`
|
|
74
|
+
return {
|
|
75
|
+
name,
|
|
76
|
+
src,
|
|
77
|
+
}
|
|
78
|
+
})
|
|
79
|
+
// console.log('ms', ms)
|
|
80
|
+
|
|
81
|
+
let t = `{cimps}
|
|
82
|
+
import build from '{fpBuild}'
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
let cs = {
|
|
86
|
+
{cnms}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
//ds
|
|
90
|
+
let ds = {}
|
|
91
|
+
for (let k in cs) {
|
|
92
|
+
ds[k] = build(cs[k])
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
export default ds
|
|
97
|
+
`
|
|
98
|
+
|
|
99
|
+
//genImports
|
|
100
|
+
let cimps = genImports(ms)
|
|
101
|
+
|
|
102
|
+
//genNames
|
|
103
|
+
let cnms = genNames(ms)
|
|
104
|
+
|
|
105
|
+
//replace
|
|
106
|
+
t = replace(t, '{cimps}', cimps)
|
|
107
|
+
t = replace(t, '{cnms}', cnms)
|
|
108
|
+
t = replace(t, '{fpBuild}', fpBuild)
|
|
109
|
+
|
|
110
|
+
//fpIndex
|
|
111
|
+
let fpIndex = path.resolve(fdIndex, fnIndex)
|
|
112
|
+
|
|
113
|
+
//writeFileSync
|
|
114
|
+
fs.writeFileSync(fpIndex, t, 'utf8')
|
|
115
|
+
|
|
116
|
+
console.log('genIndex done')
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
export default genIndex
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import path from 'path'
|
|
2
|
+
import keys from 'lodash/keys'
|
|
3
|
+
import each from 'lodash/each'
|
|
4
|
+
import get from 'lodash/get'
|
|
5
|
+
import isestr from 'wsemi/src/isestr.mjs'
|
|
6
|
+
import isfun from 'wsemi/src/isfun.mjs'
|
|
7
|
+
import isbol from 'wsemi/src/isbol.mjs'
|
|
8
|
+
import pmSeries from 'wsemi/src/pmSeries.mjs'
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
function genModels(ds, opt = {}) {
|
|
12
|
+
|
|
13
|
+
//fdModels
|
|
14
|
+
let fdModels = get(opt, 'fdModels')
|
|
15
|
+
if (!isestr(fdModels)) {
|
|
16
|
+
let fdSrv = path.resolve()
|
|
17
|
+
fdModels = `${fdSrv}/models`
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
//genModelsByTabs
|
|
21
|
+
let genModelsByTabs = get(opt, 'genModelsByTabs')
|
|
22
|
+
if (!isfun(genModelsByTabs)) {
|
|
23
|
+
throw new Error(`opt.genModelsByTabs is not a function, it needs to import from 'w-orm-reladb/src/genModelsByTabs.mjs'`)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
//tabs
|
|
27
|
+
let tabs = {}
|
|
28
|
+
each(ds, (v, k) => {
|
|
29
|
+
tabs[k] = v.settings
|
|
30
|
+
})
|
|
31
|
+
// console.log('tabs', tabs)
|
|
32
|
+
|
|
33
|
+
//genModelsByTabs
|
|
34
|
+
genModelsByTabs(fdModels, tabs)
|
|
35
|
+
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* 由資料表收集物件ds與資料表控制物件wo產生測試資料,並儲存至資料庫
|
|
41
|
+
*
|
|
42
|
+
* @param {Object} ds 輸入資料表收集物件,ds也就是import由genIndex產生的index.mjs,其內各key代表各資料表,值代表各資料表設定與操作函數例如settings、fnew或ftest等
|
|
43
|
+
* @param {Object} wo 輸入資料表控制物件,各key代表各資料表,值代表各資料表操作函數例如insert、save、del等
|
|
44
|
+
* @param {Object} [opt={}] 輸入設定物件,預設{}
|
|
45
|
+
* @param {Boolean} [opt.useGenModels=false] 輸入是否呼叫genModels,若資料庫與ORM為關聯資料庫時需設定為true,同時還需給予opt.genModelsByTabs。預設為false
|
|
46
|
+
* @param {Function} [opt.genModelsByTabs=null] 輸入可由ds與wo產生models的函數,若資料庫與ORM為關聯資料庫時則需給予,可由程式碼import genModelsByTabs from 'w-orm-reladb/src/genModelsByTabs.mjs'取得genModelsByTabs,並再設定給opt.genModelsByTabs
|
|
47
|
+
* @param {String} [opt.fdModels='./models'] 輸入產生models放置的資料夾位置,預設為工作路徑下的models
|
|
48
|
+
* @return {Promise} 回傳Promise,resolve代表產生成功,reject代表產生失敗
|
|
49
|
+
* @example
|
|
50
|
+
*
|
|
51
|
+
* import genTestdata from 'w-data-collector/src/genTestdata.mjs'
|
|
52
|
+
* import ds from './index.mjs'
|
|
53
|
+
* import { woItems } from '../../server/mOrm.mjs'
|
|
54
|
+
*
|
|
55
|
+
* genTestdata(ds, woItems, {})
|
|
56
|
+
* // => genTestdata done
|
|
57
|
+
*
|
|
58
|
+
*/
|
|
59
|
+
async function genTestdata(ds, wo, opt = {}) {
|
|
60
|
+
|
|
61
|
+
//useGenModels
|
|
62
|
+
let useGenModels = get(opt, 'useGenModels')
|
|
63
|
+
if (!isbol(useGenModels)) {
|
|
64
|
+
useGenModels = false
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
//genModels
|
|
68
|
+
if (useGenModels) {
|
|
69
|
+
genModels(ds, opt)
|
|
70
|
+
console.log('genModels done')
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
//ks
|
|
74
|
+
let ks = keys(ds)
|
|
75
|
+
|
|
76
|
+
//ftest
|
|
77
|
+
await pmSeries(ks, async (k) => {
|
|
78
|
+
|
|
79
|
+
//ftest
|
|
80
|
+
let ftest = get(ds, `${k}.ftest`)
|
|
81
|
+
|
|
82
|
+
//check
|
|
83
|
+
if (isfun(ftest)) {
|
|
84
|
+
await ds[k].ftest(wo)
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
})
|
|
88
|
+
|
|
89
|
+
console.log('genTestdata done', ks)
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
export default genTestdata
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import fs from 'fs'
|
|
2
|
+
import _ from 'lodash'
|
|
3
|
+
import assert from 'assert'
|
|
4
|
+
import genIndex from '../src/genIndex.mjs'
|
|
5
|
+
|
|
6
|
+
describe(`genIndex`, function() {
|
|
7
|
+
|
|
8
|
+
it(`should be equal to index.mjs.txt when input './test/schema/tables', './test/schema', { fpBuild: './src/build.mjs' }`, function() {
|
|
9
|
+
genIndex('./test/schema/tables', './test/schema', { fpBuild: './src/build.mjs' })
|
|
10
|
+
let r = fs.readFileSync('./test/schema/index.mjs', 'utf8')
|
|
11
|
+
r = _.trim(r)
|
|
12
|
+
let rr = fs.readFileSync('./test/schema/index.mjs.txt', 'utf8')
|
|
13
|
+
rr = _.trim(rr)
|
|
14
|
+
assert.strict.deepStrictEqual(r, rr)
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
})
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import holeLabTabs from './tables/holeLabTabs.mjs'
|
|
2
|
+
import holeLabTabsItems from './tables/holeLabTabsItems.mjs'
|
|
3
|
+
import users from './tables/users.mjs'
|
|
4
|
+
import build from './src/build.mjs'
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
let cs = {
|
|
8
|
+
holeLabTabs,
|
|
9
|
+
holeLabTabsItems,
|
|
10
|
+
users,
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
//ds
|
|
14
|
+
let ds = {}
|
|
15
|
+
for (let k in cs) {
|
|
16
|
+
ds[k] = build(cs[k])
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
export default ds
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import holeLabTabs from './tables/holeLabTabs.mjs'
|
|
2
|
+
import holeLabTabsItems from './tables/holeLabTabsItems.mjs'
|
|
3
|
+
import users from './tables/users.mjs'
|
|
4
|
+
import build from './src/build.mjs'
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
let cs = {
|
|
8
|
+
holeLabTabs,
|
|
9
|
+
holeLabTabsItems,
|
|
10
|
+
users,
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
//ds
|
|
14
|
+
let ds = {}
|
|
15
|
+
for (let k in cs) {
|
|
16
|
+
ds[k] = build(cs[k])
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
export default ds
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import map from 'lodash/map'
|
|
2
|
+
import keys from 'lodash/keys'
|
|
3
|
+
import get from 'lodash/get'
|
|
4
|
+
import genID from 'wsemi/src/genID.mjs'
|
|
5
|
+
import dtmapping from 'wsemi/src/dtmapping.mjs'
|
|
6
|
+
import now2str from 'wsemi/src/now2str.mjs'
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
let keyTable = 'holeLabTabs'
|
|
10
|
+
let tableNameCht = '鑽孔室內試驗表資料'
|
|
11
|
+
let tableNameEng = 'Lab table'
|
|
12
|
+
|
|
13
|
+
let settings = {
|
|
14
|
+
'id': {
|
|
15
|
+
pk: true,
|
|
16
|
+
name: '主鍵',
|
|
17
|
+
type: 'STRING',
|
|
18
|
+
},
|
|
19
|
+
'name': {
|
|
20
|
+
name: '名稱',
|
|
21
|
+
type: 'STRING',
|
|
22
|
+
},
|
|
23
|
+
'description': {
|
|
24
|
+
name: '說明',
|
|
25
|
+
type: 'TEXT',
|
|
26
|
+
},
|
|
27
|
+
|
|
28
|
+
'proj_no': {
|
|
29
|
+
name: '計畫編號',
|
|
30
|
+
type: 'STRING',
|
|
31
|
+
dig: null
|
|
32
|
+
},
|
|
33
|
+
'proj_name': {
|
|
34
|
+
name: '計畫名稱',
|
|
35
|
+
type: 'STRING',
|
|
36
|
+
dig: null
|
|
37
|
+
},
|
|
38
|
+
'hole_no': {
|
|
39
|
+
name: '孔號',
|
|
40
|
+
type: 'STRING',
|
|
41
|
+
dig: null
|
|
42
|
+
},
|
|
43
|
+
'hole_depth': {
|
|
44
|
+
name: '孔深(m)',
|
|
45
|
+
type: 'STRING',
|
|
46
|
+
dig: null
|
|
47
|
+
},
|
|
48
|
+
'regular': { //值: mdb, public
|
|
49
|
+
name: '佈告類型',
|
|
50
|
+
type: 'STRING',
|
|
51
|
+
dig: null
|
|
52
|
+
},
|
|
53
|
+
'longitude': {
|
|
54
|
+
name: '經度',
|
|
55
|
+
type: 'STRING',
|
|
56
|
+
dig: null
|
|
57
|
+
},
|
|
58
|
+
'latitude': {
|
|
59
|
+
name: '緯度',
|
|
60
|
+
type: 'STRING',
|
|
61
|
+
dig: null
|
|
62
|
+
},
|
|
63
|
+
'elevation': {
|
|
64
|
+
name: '孔位高程(m)',
|
|
65
|
+
type: 'STRING',
|
|
66
|
+
dig: null
|
|
67
|
+
},
|
|
68
|
+
'wt_depth': {
|
|
69
|
+
name: '地下水位(m)',
|
|
70
|
+
type: 'STRING',
|
|
71
|
+
dig: null
|
|
72
|
+
},
|
|
73
|
+
|
|
74
|
+
'userId': {
|
|
75
|
+
name: '創建使用者主鍵',
|
|
76
|
+
type: 'STRING',
|
|
77
|
+
},
|
|
78
|
+
'timeCreate': {
|
|
79
|
+
name: '創建時間',
|
|
80
|
+
type: 'STRING',
|
|
81
|
+
},
|
|
82
|
+
'userIdUpdate': {
|
|
83
|
+
name: '最新變更使用者主鍵',
|
|
84
|
+
type: 'STRING',
|
|
85
|
+
},
|
|
86
|
+
'timeUpdate': {
|
|
87
|
+
name: '更新時間',
|
|
88
|
+
type: 'STRING',
|
|
89
|
+
},
|
|
90
|
+
'isActive': {
|
|
91
|
+
name: '是否有效',
|
|
92
|
+
type: 'STRING',
|
|
93
|
+
},
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
let fnew = (ndata = {}) => {
|
|
97
|
+
let o = dtmapping(ndata, keys(settings))
|
|
98
|
+
o.id = genID()
|
|
99
|
+
o.userIdUpdate = get(o, 'userId', '')
|
|
100
|
+
o.timeCreate = now2str()
|
|
101
|
+
o.timeUpdate = o.timeCreate
|
|
102
|
+
o.isActive = 'y'
|
|
103
|
+
return o
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
let ftest = () => {
|
|
107
|
+
let r = map([
|
|
108
|
+
['BH-1'],
|
|
109
|
+
['BH-2'],
|
|
110
|
+
], ([name]) => {
|
|
111
|
+
let o = fnew({ userId: 'id-for-admin' }, settings)
|
|
112
|
+
o.id = `id-for-${name}`
|
|
113
|
+
o.description = `${name} 描述`
|
|
114
|
+
return o
|
|
115
|
+
})
|
|
116
|
+
console.log(`${holeLabTabs.keyTable} data`, r)
|
|
117
|
+
return r
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
let holeLabTabs = {
|
|
121
|
+
keyTable,
|
|
122
|
+
tableNameCht,
|
|
123
|
+
tableNameEng,
|
|
124
|
+
settings,
|
|
125
|
+
fnew,
|
|
126
|
+
ftest,
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
export default holeLabTabs
|