w-web-api 1.0.0

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.
Files changed (78) hide show
  1. package/.editorconfig +9 -0
  2. package/.eslintignore +3 -0
  3. package/.eslintrc.js +54 -0
  4. package/.jsdoc +25 -0
  5. package/LICENSE +21 -0
  6. package/README.md +62 -0
  7. package/SECURITY.md +5 -0
  8. package/babel.config.js +14 -0
  9. package/dist/w-web-api.umd.js +7 -0
  10. package/dist/w-web-api.umd.js.map +1 -0
  11. package/docs/WWebApi.html +551 -0
  12. package/docs/WWebApi.mjs.html +335 -0
  13. package/docs/fonts/Montserrat/Montserrat-Bold.eot +0 -0
  14. package/docs/fonts/Montserrat/Montserrat-Bold.ttf +0 -0
  15. package/docs/fonts/Montserrat/Montserrat-Bold.woff +0 -0
  16. package/docs/fonts/Montserrat/Montserrat-Bold.woff2 +0 -0
  17. package/docs/fonts/Montserrat/Montserrat-Regular.eot +0 -0
  18. package/docs/fonts/Montserrat/Montserrat-Regular.ttf +0 -0
  19. package/docs/fonts/Montserrat/Montserrat-Regular.woff +0 -0
  20. package/docs/fonts/Montserrat/Montserrat-Regular.woff2 +0 -0
  21. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.eot +0 -0
  22. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +978 -0
  23. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.ttf +0 -0
  24. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff +0 -0
  25. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff2 +0 -0
  26. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.eot +0 -0
  27. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +1049 -0
  28. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.ttf +0 -0
  29. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff +0 -0
  30. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff2 +0 -0
  31. package/docs/index.html +81 -0
  32. package/docs/scripts/collapse.js +20 -0
  33. package/docs/scripts/linenumber.js +25 -0
  34. package/docs/scripts/nav.js +12 -0
  35. package/docs/scripts/polyfill.js +4 -0
  36. package/docs/scripts/prettify/Apache-License-2.0.txt +202 -0
  37. package/docs/scripts/prettify/lang-css.js +2 -0
  38. package/docs/scripts/prettify/prettify.js +28 -0
  39. package/docs/scripts/search.js +83 -0
  40. package/docs/styles/jsdoc.css +765 -0
  41. package/docs/styles/prettify.css +79 -0
  42. package/package.json +81 -0
  43. package/public/connecting.svg +10 -0
  44. package/public/deny.png +0 -0
  45. package/public/disconnect.png +0 -0
  46. package/public/index.html +23 -0
  47. package/public/logout.png +0 -0
  48. package/server/WWebApi.mjs +283 -0
  49. package/server/getSettings.mjs +17 -0
  50. package/server/mDb.mjs +76 -0
  51. package/server/mInitialTestData.mjs +40 -0
  52. package/server/mOrm.mjs +22 -0
  53. package/src/App.vue +91 -0
  54. package/src/components/Layout.vue +131 -0
  55. package/src/components/LayoutContent.vue +67 -0
  56. package/src/components/LayoutContentList.vue +573 -0
  57. package/src/components/MdPanel.vue +152 -0
  58. package/src/main.js +98 -0
  59. package/src/plugins/mDataSelectorSchema.mjs +30 -0
  60. package/src/plugins/mDataSupport.mjs +78 -0
  61. package/src/plugins/mShare.mjs +235 -0
  62. package/src/plugins/mUI.mjs +141 -0
  63. package/src/plugins/mVuetify.mjs +12 -0
  64. package/src/schema/gi.mjs +8 -0
  65. package/src/schema/index.mjs +16 -0
  66. package/src/schema/tables/apis.mjs +918 -0
  67. package/src/store/actions.mjs +1 -0
  68. package/src/store/getters.mjs +1 -0
  69. package/src/store/index.mjs +25 -0
  70. package/src/store/mutations.mjs +185 -0
  71. package/src/store/types.mjs +14 -0
  72. package/srv.mjs +33 -0
  73. package/tableTags.json +1 -0
  74. package/toolg/addVersion.mjs +4 -0
  75. package/toolg/cleanFolder.mjs +4 -0
  76. package/toolg/gDistRollup.mjs +34 -0
  77. package/toolg/modifyReadme.mjs +4 -0
  78. package/vue.config.js +15 -0
@@ -0,0 +1,335 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+
5
+ <meta charset="utf-8">
6
+ <title>WWebApi.mjs - Documentation</title>
7
+
8
+
9
+ <script src="scripts/prettify/prettify.js"></script>
10
+ <script src="scripts/prettify/lang-css.js"></script>
11
+ <!--[if lt IE 9]>
12
+ <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
13
+ <![endif]-->
14
+ <link type="text/css" rel="stylesheet" href="styles/prettify.css">
15
+ <link type="text/css" rel="stylesheet" href="styles/jsdoc.css">
16
+ <script src="scripts/nav.js" defer></script>
17
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
18
+ </head>
19
+ <body>
20
+
21
+ <input type="checkbox" id="nav-trigger" class="nav-trigger" />
22
+ <label for="nav-trigger" class="navicon-button x">
23
+ <div class="navicon"></div>
24
+ </label>
25
+
26
+ <label for="nav-trigger" class="overlay"></label>
27
+
28
+ <nav >
29
+
30
+ <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="WWebApi.html">WWebApi</a></li></ul>
31
+ </nav>
32
+
33
+ <div id="main">
34
+
35
+ <h1 class="page-title">WWebApi.mjs</h1>
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+ <section>
44
+ <article>
45
+ <pre class="prettyprint source linenums"><code>import get from 'lodash/get'
46
+ import map from 'lodash/map'
47
+ import keys from 'lodash/keys'
48
+ import cloneDeep from 'lodash/cloneDeep'
49
+ import j2o from 'wsemi/src/j2o.mjs'
50
+ import iseobj from 'wsemi/src/iseobj'
51
+ import isestr from 'wsemi/src/isestr'
52
+ import ispint from 'wsemi/src/ispint'
53
+ import fsIsFolder from 'wsemi/src/fsIsFolder'
54
+ import cint from 'wsemi/src/cint'
55
+ import WServHapiServer from 'w-serv-hapi/src/WServHapiServer.mjs'
56
+ import WOrm from 'w-orm-mongodb/src/WOrmMongodb.mjs'
57
+ import ds from '../src/schema/index.mjs'
58
+ import WServOrm from 'w-serv-orm/src/WServOrm.mjs'
59
+
60
+
61
+ /**
62
+ * 基於hapi之API伺服器
63
+ *
64
+ * @class
65
+ * @param {Object} [opt={}] 輸入設定物件,預設{}
66
+ * @param {String} [opt.url=''] 輸入資料庫連線字串,例如'mongodb://sername:password@$127.0.0.1:27017'
67
+ * @param {String} [opt.db=''] 輸入資料庫名稱字串,預設''
68
+ * @param {Integer} [opt.serverPort=8080] 輸入伺服器通訊port,預設8080
69
+ * @param {Function} [opt.getUserById=null] 輸入當bCheckUser=true時依照使用者ID取得使用者資訊物件函數,預設null
70
+ * @param {Boolean} [opt.bCheckUser=true] 輸入是否檢查使用者資訊布林值,預設true
71
+ * @param {Boolean} [opt.bExcludeWhenNotAdmin=true] 輸入使用ORM的select方法時是否自動刪除數據內isActive欄位之布林值,預設true
72
+ * @returns {Object} 回傳物件,其內server為hapi伺服器實體,wsrv為w-converhp的伺服器事件物件,wsds為w-serv-webdata的伺服器事件物件,可監聽error事件
73
+ * @example
74
+ *
75
+
76
+ *
77
+ */
78
+ async function WWebApi(st = {}) {
79
+
80
+
81
+ //url
82
+ let url = get(st, 'url')
83
+ if (!isestr(url)) {
84
+ console.log('invalid url', url)
85
+ throw new Error('invalid url')
86
+ }
87
+
88
+
89
+ //db
90
+ let db = get(st, 'db')
91
+ if (!isestr(db)) {
92
+ console.log('invalid db', db)
93
+ throw new Error('invalid db')
94
+ }
95
+
96
+
97
+ //serverPort
98
+ let serverPort = get(st, 'serverPort')
99
+ if (!ispint(serverPort)) {
100
+ console.log('invalid serverPort', serverPort)
101
+ throw new Error('invalid serverPort')
102
+ }
103
+ serverPort = cint(serverPort)
104
+
105
+
106
+ //WServOrm
107
+ let opt = {
108
+ // url: `mongodb://${st.dbUsername}:${st.dbPassword}@${st.dbIP}:${st.dbPort}`,
109
+ // db: st.dbName,
110
+ // getUserById: null,
111
+ // bCheckUser: false,
112
+ // bExcludeWhenNotAdmin: false,
113
+ url,
114
+ db,
115
+ getUserById: get(st, 'getUserById', null),
116
+ bCheckUser: get(st, 'bCheckUser', false),
117
+ bExcludeWhenNotAdmin: get(st, 'bExcludeWhenNotAdmin', false),
118
+ }
119
+ let wp = {}
120
+ try {
121
+ wp = WServOrm(ds, WOrm, opt)
122
+ }
123
+ catch (err) {
124
+ console.log(err)
125
+ }
126
+ let { woItems, procOrm } = wp
127
+
128
+
129
+ //getWebInfor
130
+ let getWebInfor = (userId) => {
131
+ return {
132
+ webName: get(st, 'webName', {})
133
+ }
134
+ }
135
+
136
+
137
+ //getAPIsList
138
+ let getAPIsList = async (userId, token) => {
139
+ let rs = await woItems.apis.select()
140
+ return rs
141
+ }
142
+
143
+
144
+ //parsePayload
145
+ let parsePayload = (req) => {
146
+ let inp = get(req, 'payload')
147
+ if (isestr(inp)) {
148
+ inp = j2o(inp)
149
+ }
150
+ if (!iseobj(inp)) {
151
+ inp = null
152
+ }
153
+ return inp
154
+ }
155
+
156
+
157
+ //updateAPIs
158
+ let updateAPIs = async (userId, params = {}) => {
159
+
160
+ //spread params
161
+ let { apis: rsApis } = params
162
+ // console.log('levels', levels)
163
+ // console.log('rsApis', rsApis)
164
+
165
+ //save
166
+ let r = await woItems.apis.save(rsApis)
167
+
168
+ return r
169
+ }
170
+
171
+
172
+ //replaceAPIsByLevels
173
+ let replaceAPIsByLevels = async (userId, params = {}) => {
174
+
175
+ //spread params
176
+ let { levels, apis: rsApis } = params
177
+ // console.log('levels', levels)
178
+ // console.log('rsApis', rsApis)
179
+
180
+ //delAll levels
181
+ await woItems.apis.delAll({ levels })
182
+
183
+ //rsApisTemp
184
+ let rsApisTemp = cloneDeep(rsApis)
185
+ rsApisTemp = map(rsApisTemp, (v) => {
186
+ v.levels = levels
187
+ return v
188
+ })
189
+
190
+ //insert
191
+ let r = await woItems.apis.insert(rsApisTemp)
192
+
193
+ return r
194
+ }
195
+
196
+
197
+ //pathStaticFiles
198
+ let pathStaticFiles = 'dist'
199
+ let npmPathStaticFiles = './node_modules/w-web-api/dist'
200
+ if (fsIsFolder(npmPathStaticFiles)) {
201
+ pathStaticFiles = npmPathStaticFiles
202
+ }
203
+
204
+
205
+ //apis
206
+ let apis = [
207
+ // {
208
+ // method: 'GET',
209
+ // path: '/api/someAPI',
210
+ // handler: async function (req, res) {
211
+
212
+ // // //token
213
+ // // let token = get(req, 'query.token', '')
214
+
215
+ // return 'someAPI'
216
+ // },
217
+ // },
218
+ {
219
+ method: 'GET',
220
+ path: '/getWebInfor',
221
+ handler: async function (req, res) {
222
+ return getWebInfor()
223
+ },
224
+ },
225
+ {
226
+ method: 'GET',
227
+ path: '/getAPIsList',
228
+ handler: async function (req, res) {
229
+
230
+ //token
231
+ let token = get(req, 'query.token', '')
232
+
233
+ //getAPIsList
234
+ let r = await getAPIsList('', token)
235
+
236
+ return r
237
+ },
238
+ },
239
+ {
240
+ method: 'POST',
241
+ path: '/updateAPIs',
242
+ handler: async function (req, res) {
243
+ // console.log(req, res)
244
+ // console.log('payload', req.payload)
245
+
246
+ //parsePayload
247
+ let inp = parsePayload(req)
248
+
249
+ //updateAPIs
250
+ let r = await updateAPIs('', inp)
251
+
252
+ return r
253
+ },
254
+ },
255
+ {
256
+ method: 'POST',
257
+ path: '/replaceAPIsByLevels',
258
+ handler: async function (req, res) {
259
+ // console.log(req, res)
260
+ // console.log('payload', req.payload)
261
+
262
+ //parsePayload
263
+ let inp = parsePayload(req)
264
+
265
+ //replaceAPIsByLevels
266
+ let r = await replaceAPIsByLevels('', inp)
267
+
268
+ return r
269
+ },
270
+ },
271
+ ]
272
+
273
+
274
+ //tableNamesExec, tableNamesSync
275
+ let tableNamesExec = keys(ds)
276
+ // let tableNamesSync = filter(tableNamesExec, (v) => {
277
+ // return strright(v, 5) !== 'Items'//不同步數據
278
+ // })
279
+ let tableNamesSync = tableNamesExec
280
+
281
+
282
+ //WServHapiServer
283
+ let wshs = WServHapiServer({
284
+ port: st.serverPort,
285
+ pathStaticFiles,
286
+ apis,
287
+ getUserIDFromToken: async (token) => { //可使用async或sync函數
288
+ return 'id-for-admin'
289
+ },
290
+ useDbORM: true,
291
+ dbORMs: woItems,
292
+ operORM: procOrm, //procOrm的輸入為: userId, tableName, methodName, input
293
+ tableNamesExec,
294
+ methodsExec: ['select', 'insert', 'save', 'del'], //mix需於procOrm內註冊以提供
295
+ tableNamesSync,
296
+ extFuncs: { //接收參數第1個為userId, 之後才是前端給予參數
297
+ getWebInfor,
298
+ getAPIsList,
299
+ //...
300
+ },
301
+ hookBefores: null,
302
+ hookAfters: null,
303
+ })
304
+
305
+
306
+ return wshs
307
+ }
308
+
309
+
310
+ export default WWebApi
311
+ </code></pre>
312
+ </article>
313
+ </section>
314
+
315
+
316
+
317
+
318
+
319
+
320
+ </div>
321
+
322
+ <br class="clear">
323
+
324
+ <footer>
325
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.6.10</a> on Thu Apr 14 2022 12:34:37 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
326
+ </footer>
327
+
328
+ <script>prettyPrint();</script>
329
+ <script src="scripts/polyfill.js"></script>
330
+ <script src="scripts/linenumber.js"></script>
331
+
332
+
333
+
334
+ </body>
335
+ </html>