miolo 2.0.0-beta.1 → 2.0.0-beta.2

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 (115) hide show
  1. package/dist/cli/miolo.cli.umd.js +1 -1
  2. package/dist/cli-react/miolo.cli-react.umd.js +1 -1
  3. package/dist/server/miolo.server.node.mjs +1 -1
  4. package/package.json +18 -16
  5. package/src/cli/catcher/index.mjs +75 -0
  6. package/src/cli/fetcher/fetcher.mjs +214 -0
  7. package/src/cli/fetcher/index.mjs +7 -0
  8. package/src/cli/fetcher/utils.mjs +51 -0
  9. package/src/cli/fetcher/v1.tar.gz +0 -0
  10. package/src/cli/index.mjs +30 -0
  11. package/src/cli/socket/index.mjs +6 -0
  12. package/src/cli-react/AppBrowser.jsx +14 -0
  13. package/src/cli-react/AppBrowser.mjs +14 -0
  14. package/src/cli-react/AppServer.jsx +17 -0
  15. package/src/cli-react/AppServer.mjs +16 -0
  16. package/src/cli-react/_jsx.tar.gz +0 -0
  17. package/src/cli-react/context/MioloContext.mjs +5 -0
  18. package/src/cli-react/context/MioloContextProvider.jsx +87 -0
  19. package/src/cli-react/context/MioloContextProvider.mjs +80 -0
  20. package/src/cli-react/context/useMioloContext.jsx +6 -0
  21. package/src/cli-react/context/useMioloContext.mjs +6 -0
  22. package/src/cli-react/context/withMioloContext.jsx +15 -0
  23. package/src/cli-react/context/withMioloContext.mjs +17 -0
  24. package/src/cli-react/index.mjs +7 -0
  25. package/src/cli-react/ssr/getSsrDataFromContext.mjs +33 -0
  26. package/src/cli-react/ssr/hooks.tar.gz +0 -0
  27. package/src/cli-react/ssr/useSsrDataOrReload.mjs +43 -0
  28. package/src/server/config/defaults.mjs +418 -0
  29. package/src/server/config/index.mjs +32 -0
  30. package/src/server/engines/cron/emails.mjs +10 -0
  31. package/src/server/engines/cron/index.mjs +153 -0
  32. package/src/server/engines/cron/init.mjs +53 -0
  33. package/src/server/engines/cron/ipsum.mjs +151 -0
  34. package/src/server/engines/cron/syscheck.mjs +56 -0
  35. package/src/server/engines/emailer/index.mjs +2 -0
  36. package/src/server/engines/emailer/queue.mjs +54 -0
  37. package/src/server/engines/emailer/transporter.mjs +149 -0
  38. package/src/server/engines/geoip/index.mjs +66 -0
  39. package/src/server/engines/http/index.mjs +79 -0
  40. package/src/server/engines/logger/index.mjs +313 -0
  41. package/src/server/engines/logger/logger_mail.mjs +89 -0
  42. package/src/server/engines/logger/reopenTransportOnHupSignal.mjs +57 -0
  43. package/src/server/engines/logger/verify.mjs +22 -0
  44. package/src/server/engines/parser/Parser.mjs +126 -0
  45. package/src/server/engines/parser/index.mjs +6 -0
  46. package/src/server/engines/socket/index.mjs +67 -0
  47. package/src/server/index.mjs +16 -0
  48. package/src/server/middleware/auth/basic.mjs +90 -0
  49. package/src/server/middleware/auth/credentials/index.mjs +151 -0
  50. package/src/server/middleware/auth/credentials/session/index.mjs +24 -0
  51. package/src/server/middleware/auth/credentials/session/store.mjs +59 -0
  52. package/src/server/middleware/auth/credentials/session/store_koa_redis.mjs +3 -0
  53. package/src/server/middleware/auth/custom.mjs +29 -0
  54. package/src/server/middleware/auth/guest.mjs +75 -0
  55. package/src/server/middleware/context/cache/index.mjs +61 -0
  56. package/src/server/middleware/context/cache/options.mjs +66 -0
  57. package/src/server/middleware/context/db.mjs +58 -0
  58. package/src/server/middleware/context/index.mjs +35 -0
  59. package/src/server/middleware/extra.mjs +12 -0
  60. package/src/server/middleware/http/body.mjs +31 -0
  61. package/src/server/middleware/http/catcher.mjs +81 -0
  62. package/src/server/middleware/http/custom_blacklist.mjs +16 -0
  63. package/src/server/middleware/http/headers.mjs +73 -0
  64. package/src/server/middleware/http/ratelimit.mjs +66 -0
  65. package/src/server/middleware/http/request.mjs +146 -0
  66. package/src/server/middleware/routes/catch_js_error.mjs +41 -0
  67. package/src/server/middleware/routes/robots.mjs +21 -0
  68. package/src/server/middleware/routes/router/crud/attachCrudRoutes.mjs +214 -0
  69. package/src/server/middleware/routes/router/crud/getCrudConfig.mjs +129 -0
  70. package/src/server/middleware/routes/router/defaults.mjs +29 -0
  71. package/src/server/middleware/routes/router/index.mjs +49 -0
  72. package/src/server/middleware/routes/router/queries/attachQueriesRoutes.mjs +102 -0
  73. package/src/server/middleware/routes/router/queries/getQueriesConfig.mjs +113 -0
  74. package/src/server/middleware/routes/router/utils.mjs +38 -0
  75. package/src/server/middleware/ssr/_old.tar.gz +0 -0
  76. package/src/server/middleware/ssr/context.mjs +21 -0
  77. package/src/server/middleware/ssr/fallbackIndex.mjs +29 -0
  78. package/src/server/middleware/ssr/html.mjs +64 -0
  79. package/src/server/middleware/ssr/loader.mjs +24 -0
  80. package/src/server/middleware/ssr/ssr_render.mjs +49 -0
  81. package/src/server/middleware/static/afialapis.ico +0 -0
  82. package/src/server/middleware/static/index.mjs +27 -0
  83. package/src/server/middleware/static/miolo.ico +0 -0
  84. package/src/server/middleware/vite/devserver.mjs +34 -0
  85. package/src/server/server-dev.mjs +41 -0
  86. package/src/server/server.mjs +135 -0
  87. package/src/server/static/img/afialapis.ico +0 -0
  88. package/src/server/static/img/miolo.ico +0 -0
  89. package/src/server/static/robots.txt +2 -0
  90. package/dist/cli/miolo.cli.iife.bundle.js +0 -968
  91. package/dist/cli/miolo.cli.iife.bundle.js.map +0 -1
  92. package/dist/cli/miolo.cli.iife.bundle.min.js +0 -13
  93. package/dist/cli/miolo.cli.iife.js +0 -968
  94. package/dist/cli/miolo.cli.iife.js.map +0 -1
  95. package/dist/cli/miolo.cli.iife.min.js +0 -13
  96. package/dist/cli/miolo.cli.min.mjs +0 -13
  97. package/dist/cli/miolo.cli.mjs +0 -485
  98. package/dist/cli/miolo.cli.mjs.map +0 -1
  99. package/dist/cli/miolo.cli.umd.bundle.js +0 -969
  100. package/dist/cli/miolo.cli.umd.bundle.js.map +0 -1
  101. package/dist/cli/miolo.cli.umd.bundle.min.js +0 -13
  102. package/dist/cli/miolo.cli.umd.min.js +0 -13
  103. package/dist/cli-react/miolo.cli-react.iife.bundle.js +0 -1232
  104. package/dist/cli-react/miolo.cli-react.iife.bundle.js.map +0 -1
  105. package/dist/cli-react/miolo.cli-react.iife.bundle.min.js +0 -13
  106. package/dist/cli-react/miolo.cli-react.iife.js +0 -1174
  107. package/dist/cli-react/miolo.cli-react.iife.js.map +0 -1
  108. package/dist/cli-react/miolo.cli-react.iife.min.js +0 -13
  109. package/dist/cli-react/miolo.cli-react.min.mjs +0 -13
  110. package/dist/cli-react/miolo.cli-react.mjs +0 -655
  111. package/dist/cli-react/miolo.cli-react.mjs.map +0 -1
  112. package/dist/cli-react/miolo.cli-react.umd.bundle.js +0 -1233
  113. package/dist/cli-react/miolo.cli-react.umd.bundle.js.map +0 -1
  114. package/dist/cli-react/miolo.cli-react.umd.bundle.min.js +0 -13
  115. package/dist/cli-react/miolo.cli-react.umd.min.js +0 -13
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v2.0.0-beta.1
2
+ * miolo v2.0.0-beta.2
3
3
  *
4
4
  * https://www.afialapis.com/os/miolo
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v2.0.0-beta.1
2
+ * miolo v2.0.0-beta.2
3
3
  *
4
4
  * https://www.afialapis.com/os/miolo
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v2.0.0-beta.1
2
+ * miolo v2.0.0-beta.2
3
3
  *
4
4
  * https://www.afialapis.com/os/miolo
5
5
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "miolo",
3
- "version": "2.0.0-beta.1",
3
+ "version": "2.0.0-beta.2",
4
4
  "description": "all-in-one koa-based server",
5
5
  "author": "Donato Lorenzo <donato@afialapis.com>",
6
6
  "contributors": [
@@ -15,15 +15,9 @@
15
15
  },
16
16
  "homepage": "https://www.afialapis.com/os/miolo",
17
17
  "license": "MIT",
18
- "XX_exports": {
19
- "./server": {
20
- "import": "./dist/server/miolo.server.node.mjs",
21
- "default": "./dist/server/miolo.server.cjs"
22
- }
23
- },
24
18
  "exports": {
25
19
  "./server": {
26
- "default": "./src/server/index.mjs"
20
+ "default": "./dist/server/miolo.server.node.mjs"
27
21
  },
28
22
  "./server-dev": {
29
23
  "default": "./src/server/server-dev.mjs"
@@ -38,31 +32,39 @@
38
32
  }
39
33
  },
40
34
  "files": [
35
+ "src",
41
36
  "logo",
42
37
  "dist"
43
38
  ],
44
39
  "scripts": {
45
- "main:purge": "rm -fr node_modules package-lock.json npm-lock.yaml",
40
+ "reset": "rm -fr node_modules package-lock.json npm-lock.yaml && npm i",
46
41
  "cli-clean": "rm -fr ./dist/cli/* ",
47
- "cli-bundle": "npx xeira bundle --target=browser --source_index=./src/cli/index.mjs --bundle_folder=./dist/cli --bundle_name=miolo.cli --bundle_node_polyfill=true",
42
+ "cli-bundle": "npx xeira bundle --target=browser --source_index=./src/cli/index.mjs --bundle_folder=./dist/cli --bundle_name=miolo.cli --bundle_node_polyfill=true --bundle_extension=umd",
48
43
  "cli-dist": "npm run cli-clean && npm run cli-bundle",
49
44
  "cli-react-clean": "rm -fr ./dist/cli-react/*",
50
- "cli-react-bundle": "npx xeira bundle --target=browser --source_index=./src/cli-react/index.mjs --bundle_folder=./dist/cli-react --bundle_name=miolo.cli-react --bundle_node_polyfill=true",
45
+ "cli-react-bundle": "npx xeira bundle --target=browser --source_index=./src/cli-react/index.mjs --bundle_folder=./dist/cli-react --bundle_name=miolo.cli-react --bundle_node_polyfill=true --bundle_extension=umd",
51
46
  "cli-react-dist": "npm run cli-react-clean && npm run cli-react-bundle",
52
47
  "server-clean": "rm -fr ./dist/server/*",
53
48
  "server-bundle": "npx xeira bundle --target=node --source_index=./src/server/index.mjs --bundle_folder=./dist/server --bundle_name=miolo.server --bundle_extension=node.mjs",
54
49
  "server-dist": "npm run server-clean && npm run server-bundle",
50
+
51
+ "YY-server-dev-clean": "rm -fr ./dist/server-dev/*",
52
+ "YY-server-dev-bundle": "npx xeira bundle --target=node --source_index=./src/server/server-dev.mjs --bundle_folder=./dist/server-dev --bundle_name=miolo.server.dev --bundle_extension=node.mjs",
53
+ "YY-server-dev-dist": "npm run server-dev-clean && npm run server-dev-bundle",
54
+
55
55
  "dist": "npm run cli-dist && npm run cli-react-dist && npm run server-dist",
56
+ "site": "npx xeira site",
57
+ "test": "npx xeira test --files=./test/index.mjs",
58
+
59
+ "X_pre-publish": "npm run test && npm run dist && npm run site",
60
+ "pre-publish": "npm run dist && npm run site",
61
+
62
+
56
63
  "xxx_demo-guest": "rm -fr ./demo/build/miolo-demo-guest* && node demo/run.cjs --guest",
57
64
  "xxx_demo-basic": "rm -fr ./demo/build/miolo-demo-basic* && node demo/run.cjs --basic",
58
65
  "xxx_demo-credentials": "rm -fr ./demo/build/miolo-demo-credentials* && node demo/run.cjs --credentials",
59
66
  "xxx_demo-credentials-debug": "rm -fr ./demo/build/miolo-demo-credentials* && DEBUG=winston* node demo/run.cjs --credentials",
60
67
  "xxx_demo": "npm run demo-credentials",
61
- "site": "npx xeira site",
62
- "test": "npx xeira test --files=./test/index.mjs",
63
- "reset": "npm run main:purge && npm i",
64
- "X_prepare": "npm run test && npm run dist && npm run site",
65
- "prepare": "npm run dist && npm run site",
66
68
 
67
69
  "xxx_server-dist-esbuild": "npx esbuild ./src/server/index.mjs --bundle --platform=node --outfile=dist/server/server.mjs --format=esm --external:@babel/preset-typescript --external:lightningcss --external:tty",
68
70
 
@@ -0,0 +1,75 @@
1
+ function init_catcher (catcher_url, fetcher) {
2
+ if (typeof window == "undefined") {
3
+ return
4
+ }
5
+
6
+ if (window.miolo_listeners===true) {
7
+ return
8
+ }
9
+
10
+ // window.onerror = function(msg, file, line, col, error) {
11
+ // try {
12
+ // const params= {
13
+ // 'error': {
14
+ // msg, file, line, col, error
15
+ // },
16
+ // 'path' : window.location.pathname,
17
+ // 'agent': 'UserAgent' + navigator.userAgent
18
+ // }
19
+ //
20
+ // fetcher.post(catcher_url, params)
21
+ // } catch(e) {
22
+ // console.error(e)
23
+ // }
24
+ // }
25
+
26
+
27
+ window.addEventListener("error", (event) => {
28
+ // https://developer.mozilla.org/en-US/docs/Web/API/ErrorEvent
29
+
30
+ try {
31
+ const params= {
32
+ 'error': {
33
+ msg: event?.message || 'Client error',
34
+ file: event?.filename,
35
+ line: event?.lineno,
36
+ col: event?.colno,
37
+ error: event?.error
38
+ },
39
+ 'path' : window.location.pathname,
40
+ 'agent': 'UserAgent' + navigator.userAgent
41
+ }
42
+
43
+ fetcher.post(catcher_url, params)
44
+ } catch(e) {
45
+ console.error(e)
46
+ }
47
+ })
48
+
49
+ window.addEventListener("unhandledrejection", (event) => {
50
+ // https://developer.mozilla.org/en-US/docs/Web/API/PromiseRejectionEvent
51
+
52
+ try {
53
+ const params= {
54
+ 'warning': {
55
+ msg: event?.reason || 'Client Unhandled rejection',
56
+ file: undefined,
57
+ line: undefined,
58
+ col: undefined,
59
+ error: event?.reason
60
+ },
61
+ 'path' : window.location.pathname,
62
+ 'agent': 'UserAgent' + navigator.userAgent
63
+ }
64
+
65
+ fetcher.post(catcher_url, params)
66
+ } catch(e) {
67
+ console.error(e)
68
+ }
69
+ })
70
+
71
+ window.miolo_listeners = true
72
+
73
+ }
74
+
75
+ export {init_catcher}
@@ -0,0 +1,214 @@
1
+ import {omit_nil, trim_left, json_to_query_string, parse_login_cookie} from './utils.mjs'
2
+
3
+ class Fetcher {
4
+ /**
5
+ * @param {*} config {hostname, port, force_hostname, silent_fail: false}
6
+ */
7
+ constructor(config) {
8
+ this.config= config
9
+ this.auth = undefined
10
+ this.cookie = undefined
11
+ }
12
+
13
+ set_auth(auth) {
14
+ if (auth) {
15
+ const {username, password}= auth
16
+ this.auth= {username, password}
17
+ }
18
+ }
19
+
20
+ get_headers() {
21
+ let headers = {}
22
+
23
+ if (this.auth) {
24
+ let {username, password}= this.auth
25
+ username= username || ''
26
+ password= password || ''
27
+
28
+ let sauth
29
+ try {
30
+ sauth= 'Basic ' + Buffer.from(username + ":" + password).toString('base64')
31
+ } catch(_) {
32
+ sauth= 'Basic ' + btoa(username + ":" + password)
33
+ }
34
+
35
+ headers['Authorization']= sauth
36
+ }
37
+
38
+ if (this.cookie) {
39
+ headers['Cookie']= this.cookie
40
+ }
41
+
42
+ return headers
43
+ }
44
+
45
+ _prepare_url (url) {
46
+ const endpoint = '/' + trim_left(url, '/')
47
+
48
+ const {hostname, port, force_hostname} = this.config || {}
49
+ if (hostname && force_hostname) {
50
+ return `http://${hostname}:${port}${endpoint}`
51
+ }
52
+
53
+ return endpoint
54
+ }
55
+
56
+ async _fetch (method, url, params, auth= undefined) {
57
+ this.set_auth(auth)
58
+
59
+ let request = {
60
+ method,
61
+ mode: 'cors',
62
+ credentials: 'include',
63
+ headers: {
64
+ 'content-type': 'application/json',
65
+ ...this.get_headers() || {}
66
+ }
67
+ }
68
+
69
+ let wurl = this._prepare_url(url)
70
+
71
+ if (method === 'POST') {
72
+ request.body = JSON.stringify(params || {}, (k, v) => v === undefined ? null : v)
73
+ } else if (method === 'GET') {
74
+ if (params) {
75
+ wurl+= json_to_query_string(params)
76
+ }
77
+ }
78
+
79
+ const response = await fetch(wurl, request)
80
+
81
+ if (response.redirected) {
82
+ const isBrowser = typeof window == 'object'
83
+ if (isBrowser) {
84
+ // JSDOM does not support navigation, so lets skip it for tests
85
+ const isTest = typeof navigator !== "undefined" &&
86
+ navigator.userAgent.includes("Node.js");
87
+ if (!isTest) {
88
+ window.location.replace(response.url)
89
+ return Promise.resolve(response)
90
+ } else {
91
+ console.error(`Response for ${wurl} is a redirect to ${response.url}. But you are in a test environment, where redirects cannot be done. Unexpected results are coming...`)
92
+ }
93
+ }
94
+ }
95
+
96
+ if (response.headers.get('content-type').indexOf('json') >= 0) {
97
+ const data= await response.json()
98
+
99
+ return {
100
+ data,
101
+ status: response.status,
102
+ response
103
+ }
104
+ }
105
+
106
+ const data= await response.text()
107
+ return {
108
+ data,
109
+ status: response.status,
110
+ response
111
+ }
112
+
113
+ }
114
+
115
+ async get(url, params, auth= undefined) {
116
+ /* eslint no-unused-vars:0 */
117
+ try {
118
+ const resp = await this._fetch('GET', url, omit_nil(params), auth)
119
+ return resp
120
+ } catch(e) {
121
+ if (this.config?.silent_fail !== true) {
122
+ console.error(`Error on GET ${url}`)
123
+ console.error(e)
124
+ }
125
+
126
+ return {
127
+ data: e,
128
+ status: -1,
129
+ }
130
+ }
131
+ }
132
+
133
+ async post(url, data, auth= undefined) {
134
+ try {
135
+ const resp = await this._fetch('POST', url, data, auth)
136
+ return resp
137
+ } catch(e) {
138
+ if (this.config?.silent_fail !== true) {
139
+ console.error(`Error on POST ${url}`)
140
+ console.error(e)
141
+ }
142
+
143
+ return {
144
+ data: e,
145
+ status: -1
146
+ }
147
+ }
148
+ }
149
+
150
+ async login(url, {username, password}) {
151
+ const res= await this._fetch('POST', url || '/login', {username, password})
152
+ this.cookie= parse_login_cookie(res.response)
153
+ return res
154
+ }
155
+
156
+ async logout(url) {
157
+ this.cookie= undefined
158
+ const res= await this._fetch('POST', url || '/logout', {})
159
+ return res
160
+ }
161
+
162
+ async read(url, params, auth= undefined) {
163
+ const result = await this.get(`${url}/read`, params, auth)
164
+ return result.data
165
+ }
166
+
167
+ async key_list(url, params, auth= undefined) {
168
+ const result = await this.get(`${url}/key_list`, params, auth)
169
+ return result.data
170
+ }
171
+
172
+ async name_list(url, params, auth= undefined) {
173
+ const result = await this.key_list(url, params, auth)
174
+ return Object.values(result)
175
+ }
176
+
177
+ async find(url, id, auth= undefined) {
178
+ const result = await this.get(`${url}/find`, { id: id }, auth)
179
+ return result.data
180
+ }
181
+
182
+ async distinct(url, field, params, auth= undefined) {
183
+ const nparams= {
184
+ ...params,
185
+ distinct_field: field
186
+ }
187
+ const result = await this.get(`${url}/distinct`, nparams, auth)
188
+ return result.data
189
+ }
190
+
191
+ async upsave(url, data, auth= undefined) {
192
+ let result
193
+ if (data.id == undefined) {
194
+ delete data.id
195
+ result= await this.post(`${url}/save`, data, auth)
196
+ } else {
197
+ result= await this.post(`${url}/update`, data, auth)
198
+ }
199
+
200
+ return result.data
201
+ }
202
+
203
+ async remove(url, id, auth= undefined) {
204
+ const data = { id: id }
205
+ const result = await this.post(`${url}/delete`, data, auth)
206
+ return result.data
207
+ }
208
+ }
209
+
210
+ Fetcher.keyList= Fetcher.key_list
211
+ Fetcher.nameList= Fetcher.name_list
212
+
213
+ export { Fetcher }
214
+
@@ -0,0 +1,7 @@
1
+ import {Fetcher} from './fetcher.mjs'
2
+
3
+
4
+ export function init_fetcher(config) {
5
+ const fetcher= new Fetcher(config)
6
+ return fetcher
7
+ }
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Transform an JSON object to a query string
3
+ */
4
+ export function json_to_query_string(obj) {
5
+ if (obj && (Object.keys(obj).length>0)) {
6
+ const uparams = new URLSearchParams()
7
+ for (const key in obj) {
8
+ if (Object.hasOwn(obj, key)) {
9
+ const value = obj[key];
10
+ if (Array.isArray(value)) {
11
+ value.forEach(item => uparams.append(key, item))
12
+ } else if (value !== undefined && value !== null) {
13
+ uparams.append(key, value)
14
+ }
15
+ }
16
+ }
17
+ return uparams.toString()
18
+ }
19
+ return ''
20
+ }
21
+
22
+ export function trim_left(str, what) {
23
+ return str.replace(new RegExp(`^${what || '\\s'}+`), '')
24
+ }
25
+
26
+
27
+ export function omit_nil(obj) {
28
+ if (typeof obj !== 'object') return obj
29
+ return Object.keys(obj).reduce((acc, v) => {
30
+ if (obj[v] !== undefined) acc[v] = obj[v]
31
+ return acc
32
+ }, {})
33
+ }
34
+
35
+
36
+ export function parse_login_cookie(response) {
37
+ if (typeof window !== 'object') {
38
+ return undefined
39
+ }
40
+ try {
41
+ const raw = response.headers.raw()['set-cookie'];
42
+ return raw.map((entry) => {
43
+ const parts = entry.split(';');
44
+ const cookiePart = parts[0];
45
+ return cookiePart;
46
+ }).join(';');
47
+ } catch(e) {
48
+ console.log('[miolo-cli] Could not get the set-cookie after login')
49
+ return undefined
50
+ }
51
+ }
Binary file
@@ -0,0 +1,30 @@
1
+ import {init_catcher} from './catcher/index.mjs'
2
+ import {init_fetcher} from './fetcher/index.mjs'
3
+ // import {init_socket} from './socket/index.mjs'
4
+
5
+ function miolo_client(context) {
6
+
7
+ const {config} = context
8
+
9
+ const fetcher = init_fetcher(config)
10
+
11
+ if (config?.catcher_url) {
12
+ init_catcher(config?.catcher_url, fetcher)
13
+ }
14
+
15
+ // let socket
16
+ // if (config?.socket?.enabled===true) {
17
+ // const domain = config?.socket?.domain
18
+ // const options = config?.socket?.options
19
+ // socket = init_socket(domain, options)
20
+ // }
21
+
22
+ const miolo_obj= {
23
+ fetcher,
24
+ //socket
25
+ }
26
+
27
+ return miolo_obj
28
+ }
29
+
30
+ export {miolo_client}
@@ -0,0 +1,6 @@
1
+ import { io } from "socket.io-client";
2
+
3
+ export function init_socket(domain, options) {
4
+ const socket = io(domain, options)
5
+ return socket
6
+ }
@@ -0,0 +1,14 @@
1
+ import React from 'react'
2
+ import MioloContextProvider from './context/MioloContextProvider.jsx'
3
+
4
+ const AppBrowser = ({ children }) => {
5
+ const context = typeof window !== 'undefined' && window.__CONTEXT ? window.__CONTEXT : {};
6
+
7
+ return (
8
+ <MioloContextProvider context={context}>
9
+ {children}
10
+ </MioloContextProvider>
11
+ )
12
+ }
13
+
14
+ export default AppBrowser
@@ -0,0 +1,14 @@
1
+ import React from 'react'
2
+ import MioloContextProvider from './context/MioloContextProvider.mjs'
3
+
4
+ const AppBrowser = ({ children }) => {
5
+ const context = typeof window !== 'undefined' && window.__CONTEXT ? window.__CONTEXT : {};
6
+
7
+ return React.createElement(
8
+ MioloContextProvider,
9
+ { context },
10
+ children
11
+ )
12
+ }
13
+
14
+ export default AppBrowser
@@ -0,0 +1,17 @@
1
+
2
+ import React from 'react'
3
+ import MioloContextProvider from './context/MioloContextProvider.jsx'
4
+
5
+
6
+ const AppServer = ({context, children}) => {
7
+
8
+ return (
9
+ <MioloContextProvider
10
+ context= {context || {}}>
11
+ {children}
12
+ </MioloContextProvider>
13
+ )
14
+ }
15
+
16
+ export default AppServer
17
+
@@ -0,0 +1,16 @@
1
+ import React from 'react'
2
+ import MioloContextProvider from './context/MioloContextProvider.mjs'
3
+
4
+ const AppServer = ({ context, children }) => {
5
+
6
+ console.log('AppServerAppServerAppServerAppServerAppServerAppServer')
7
+ console.log(context)
8
+
9
+ return React.createElement(
10
+ MioloContextProvider,
11
+ { context: context || {} },
12
+ children
13
+ )
14
+ }
15
+
16
+ export default AppServer
Binary file
@@ -0,0 +1,5 @@
1
+ import React from 'react'
2
+
3
+ const MioloContext = React.createContext()
4
+
5
+ export default MioloContext
@@ -0,0 +1,87 @@
1
+ import React , {useState, useEffect, useCallback} from 'react'
2
+ import Context from './MioloContext.mjs'
3
+ import { miolo_client } from '../../cli/index.mjs'
4
+ import { useSsrDataOrReload } from '../ssr/useSsrDataOrReload.mjs'
5
+
6
+
7
+ const MioloContextProvider = ({context, children}) => {
8
+ const [innerContext, setInnerContext]= useState(context)
9
+ const [mioloObj, setMioloObj]= useState(miolo_client(context))
10
+
11
+ useEffect(() => {
12
+ setInnerContext(context)
13
+ setMioloObj(miolo_client(context))
14
+ }, [context])
15
+
16
+ const login = useCallback(async (credentials) => {
17
+ const {fetcher} = mioloObj
18
+ const {config} = innerContext
19
+
20
+ const url = config.login_url || '/login'
21
+ const resp = await fetcher.login(url, credentials)
22
+
23
+ if (resp?.data) {
24
+ const nContext = {
25
+ ...innerContext,
26
+ ...resp?.data
27
+ }
28
+
29
+ if (resp?.data?.authenticated) {
30
+ setInnerContext(nContext)
31
+ }
32
+
33
+ return resp?.data
34
+ }
35
+
36
+ return {}
37
+ }, [innerContext, mioloObj])
38
+
39
+
40
+ const logout = useCallback(async () => {
41
+ const {fetcher} = mioloObj
42
+ const {config} = innerContext
43
+
44
+ const url = config.logout_url || '/logout'
45
+ const _resp = await fetcher.logout(url)
46
+ // resp.redirected= true
47
+
48
+ const nContext = {
49
+ ...innerContext,
50
+ user: undefined,
51
+ authenticated: false
52
+ }
53
+
54
+ setInnerContext(nContext)
55
+
56
+ return {
57
+ user: undefined,
58
+ authenticated: false
59
+ }
60
+ }, [innerContext, mioloObj])
61
+
62
+
63
+ const useSsrData = (name, defval, loader, modifier) => {
64
+ return useSsrDataOrReload(innerContext, mioloObj, name, defval, loader, modifier)
65
+ }
66
+
67
+ return (
68
+ <Context.Provider
69
+ value={{
70
+ //context: innerContext,
71
+ //setContext: setInnerContext,
72
+ //miolo: mioloObj,
73
+ user: innerContext.user,
74
+ authenticated: innerContext.authenticated,
75
+ fetcher: mioloObj.fetcher,
76
+ //socket: mioloObj.socket,
77
+ login,
78
+ logout,
79
+ useSsrData
80
+ }}>
81
+ {children}
82
+ </Context.Provider>
83
+ )
84
+ }
85
+
86
+
87
+ export default MioloContextProvider