miolo 2.1.0-beta.1 → 3.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.
- package/bin/.env +107 -0
- package/bin/build-client.mjs +12 -11
- package/bin/build-server.mjs +7 -17
- package/bin/dev.mjs +10 -7
- package/bin/dev_start.mjs +11 -0
- package/bin/env.mjs +39 -0
- package/bin/index.mjs +21 -15
- package/bin/prod_start.mjs +9 -0
- package/bin/restart.mjs +0 -2
- package/bin/start.mjs +2 -12
- package/bin/stop.mjs +1 -4
- package/bin/util.mjs +11 -11
- package/package.json +16 -39
- package/src/{server/config → config}/defaults.mjs +107 -69
- package/src/{server/middleware → middleware}/ssr/html.mjs +20 -3
- package/src/{server/middleware → middleware}/ssr/ssr_render.mjs +2 -2
- package/src/{server/middleware → middleware}/vite/devserver.mjs +6 -6
- package/src/{server/server-cron.mjs → server-cron.mjs} +0 -2
- package/src/{server/server-dev.mjs → server-dev.mjs} +2 -2
- package/src/{server/server.mjs → server.mjs} +1 -3
- package/README.md +0 -69
- package/dist/cli/miolo.cli.mjs +0 -492
- package/dist/cli/miolo.cli.mjs.map +0 -1
- package/dist/cli/miolo.cli.umd.js +0 -749
- package/dist/cli/miolo.cli.umd.js.map +0 -1
- package/dist/cli-react/miolo.cli-react.mjs +0 -672
- package/dist/cli-react/miolo.cli-react.mjs.map +0 -1
- package/dist/cli-react/miolo.cli-react.umd.js +0 -959
- package/dist/cli-react/miolo.cli-react.umd.js.map +0 -1
- package/dist/server/miolo.server.node.mjs +0 -8050
- package/logo/favicon/miolo.ico +0 -0
- package/logo/favicon/miolo.png +0 -0
- package/logo/favicon/miolo_apple.png +0 -0
- package/logo/miolo-logo-name_200.png +0 -0
- package/logo/miolo_logo.png +0 -0
- package/logo/miolo_name.png +0 -0
- package/logo/miolo_sm.png +0 -0
- package/src/cli/catcher/index.mjs +0 -75
- package/src/cli/fetcher/fetcher.mjs +0 -214
- package/src/cli/fetcher/index.mjs +0 -7
- package/src/cli/fetcher/utils.mjs +0 -59
- package/src/cli/index.mjs +0 -30
- package/src/cli/socket/index.mjs +0 -6
- package/src/cli-react/AppBrowser.jsx +0 -14
- package/src/cli-react/AppServer.jsx +0 -17
- package/src/cli-react/context/MioloContext.mjs +0 -5
- package/src/cli-react/context/MioloContextProvider.jsx +0 -95
- package/src/cli-react/context/useMioloContext.jsx +0 -6
- package/src/cli-react/context/withMioloContext.jsx +0 -15
- package/src/cli-react/index.mjs +0 -7
- package/src/cli-react/ssr/getSsrDataFromContext.mjs +0 -33
- package/src/cli-react/ssr/useSsrDataOrReload.mjs +0 -43
- package/src/server/static/img/afialapis.ico +0 -0
- package/src/server/static/img/miolo.ico +0 -0
- package/src/server/static/robots.txt +0 -2
- /package/src/{server/config → config}/index.mjs +0 -0
- /package/src/{server/engines → engines}/cron/emails.mjs +0 -0
- /package/src/{server/engines → engines}/cron/index.mjs +0 -0
- /package/src/{server/engines → engines}/cron/init.mjs +0 -0
- /package/src/{server/engines → engines}/cron/ipsum.mjs +0 -0
- /package/src/{server/engines → engines}/cron/syscheck.mjs +0 -0
- /package/src/{server/engines → engines}/emailer/index.mjs +0 -0
- /package/src/{server/engines → engines}/emailer/queue.mjs +0 -0
- /package/src/{server/engines → engines}/emailer/transporter.mjs +0 -0
- /package/src/{server/engines → engines}/geoip/index.mjs +0 -0
- /package/src/{server/engines → engines}/http/index.mjs +0 -0
- /package/src/{server/engines → engines}/logger/index.mjs +0 -0
- /package/src/{server/engines → engines}/logger/logger_mail.mjs +0 -0
- /package/src/{server/engines → engines}/logger/reopenTransportOnHupSignal.mjs +0 -0
- /package/src/{server/engines → engines}/logger/verify.mjs +0 -0
- /package/src/{server/engines → engines}/parser/Parser.mjs +0 -0
- /package/src/{server/engines → engines}/parser/index.mjs +0 -0
- /package/src/{server/engines → engines}/socket/index.mjs +0 -0
- /package/src/{server/index.mjs → index.mjs} +0 -0
- /package/src/{server/middleware → middleware}/auth/basic.mjs +0 -0
- /package/src/{server/middleware → middleware}/auth/credentials/index.mjs +0 -0
- /package/src/{server/middleware → middleware}/auth/credentials/session/index.mjs +0 -0
- /package/src/{server/middleware → middleware}/auth/credentials/session/store.mjs +0 -0
- /package/src/{server/middleware → middleware}/auth/credentials/session/store_koa_redis.mjs +0 -0
- /package/src/{server/middleware → middleware}/auth/custom.mjs +0 -0
- /package/src/{server/middleware → middleware}/auth/guest.mjs +0 -0
- /package/src/{server/middleware → middleware}/context/cache/index.mjs +0 -0
- /package/src/{server/middleware → middleware}/context/cache/options.mjs +0 -0
- /package/src/{server/middleware → middleware}/context/db.mjs +0 -0
- /package/src/{server/middleware → middleware}/context/index.mjs +0 -0
- /package/src/{server/middleware → middleware}/extra.mjs +0 -0
- /package/src/{server/middleware → middleware}/http/body.mjs +0 -0
- /package/src/{server/middleware → middleware}/http/catcher.mjs +0 -0
- /package/src/{server/middleware → middleware}/http/custom_blacklist.mjs +0 -0
- /package/src/{server/middleware → middleware}/http/headers.mjs +0 -0
- /package/src/{server/middleware → middleware}/http/ratelimit.mjs +0 -0
- /package/src/{server/middleware → middleware}/http/request.mjs +0 -0
- /package/src/{server/middleware → middleware}/routes/catch_js_error.mjs +0 -0
- /package/src/{server/middleware → middleware}/routes/robots.mjs +0 -0
- /package/src/{server/middleware → middleware}/routes/router/crud/attachCrudRoutes.mjs +0 -0
- /package/src/{server/middleware → middleware}/routes/router/crud/getCrudConfig.mjs +0 -0
- /package/src/{server/middleware → middleware}/routes/router/defaults.mjs +0 -0
- /package/src/{server/middleware → middleware}/routes/router/index.mjs +0 -0
- /package/src/{server/middleware → middleware}/routes/router/queries/attachQueriesRoutes.mjs +0 -0
- /package/src/{server/middleware → middleware}/routes/router/queries/getQueriesConfig.mjs +0 -0
- /package/src/{server/middleware → middleware}/routes/router/utils.mjs +0 -0
- /package/src/{server/middleware → middleware}/ssr/context.mjs +0 -0
- /package/src/{server/middleware → middleware}/ssr/fallbackIndex.mjs +0 -0
- /package/src/{server/middleware → middleware}/ssr/loader.mjs +0 -0
- /package/{dist/static/img → src/middleware/static}/afialapis.ico +0 -0
- /package/src/{server/middleware → middleware}/static/index.mjs +0 -0
- /package/{dist/static/img → src/middleware/static}/miolo.ico +0 -0
- /package/src/{server/middleware → middleware}/vite/watcher.mjs +0 -0
- /package/src/{server/middleware/static → static/img}/afialapis.ico +0 -0
- /package/src/{server/middleware/static → static/img}/miolo.ico +0 -0
- /package/{dist → src}/static/robots.txt +0 -0
package/bin/.env
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
#
|
|
2
|
+
# General
|
|
3
|
+
#
|
|
4
|
+
MIOLO_NAME=miolo
|
|
5
|
+
MIOLO_CONFIG=./src/server/config.mjs
|
|
6
|
+
|
|
7
|
+
#
|
|
8
|
+
# HTTP
|
|
9
|
+
#
|
|
10
|
+
MIOLO_PORT=8001
|
|
11
|
+
MIOLO_HOSTNAME=localhost
|
|
12
|
+
|
|
13
|
+
MIOLO_HTTP_CORS=simple # true | false | simple. For {options}, use JS
|
|
14
|
+
MIOLO_HTTP_PROXY=true # true | false. For {options}, use JS
|
|
15
|
+
|
|
16
|
+
MIOLO_RATELIMIT_MAX=1000
|
|
17
|
+
MIOLO_RATELIMIT_DURATION=60 * 1000
|
|
18
|
+
#MIOLO_RATELIMIT_WHITELIST_IPS=
|
|
19
|
+
#MIOLO_RATELIMIT_BLACKLIST_IPS=
|
|
20
|
+
MIOLO_REQUEST_LAZY=1 # seconds to consider lazy a request
|
|
21
|
+
MIOLO_REQUEST_SLOW=2 # seconds to consider slow a request
|
|
22
|
+
|
|
23
|
+
MIOLO_GEOIP_ENABLED=false
|
|
24
|
+
MIOLO_GEOIP_DB=/var/lib/GeoIP/GeoLite2-City.mmdb
|
|
25
|
+
MIOLO_GEOIP_LOCAL_IPS=127.0.0.1
|
|
26
|
+
|
|
27
|
+
#
|
|
28
|
+
# Session
|
|
29
|
+
#
|
|
30
|
+
MIOLO_SESSION_SALT=11111111-2222-3333-4444-555555555555
|
|
31
|
+
MIOLO_SESSION_SECRET=secret
|
|
32
|
+
MIOLO_SESSION_MAX_AGE=864000000
|
|
33
|
+
MIOLO_SESSION_SECURE=true
|
|
34
|
+
|
|
35
|
+
#
|
|
36
|
+
# Database
|
|
37
|
+
#
|
|
38
|
+
MIOLO_DB_DIALECT=postgres
|
|
39
|
+
MIOLO_DB_HOST=localhost
|
|
40
|
+
MIOLO_DB_PORT=5432
|
|
41
|
+
MIOLO_DB_DATABASE=my_database
|
|
42
|
+
MIOLO_DB_USER=my_user
|
|
43
|
+
MIOLO_DB_PASSWORD=my_password
|
|
44
|
+
MIOLO_DB_POOL_MAX=5 # Maximum number of connection in pool
|
|
45
|
+
MIOLO_DB_POOL_MIN=0 # Minimum number of connection in pool
|
|
46
|
+
# The maximum time, in milliseconds, that a connection can be idle before being released.
|
|
47
|
+
# Use with combination of evict for proper working,
|
|
48
|
+
# for more details read https://github.com/coopernurse/node-pool/issues/178#issuecomment-327110870,
|
|
49
|
+
MIOLO_DB_POOL_IDLE_TIMEOUT_MS=10000
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
#
|
|
53
|
+
# Logging
|
|
54
|
+
#
|
|
55
|
+
MIOLO_LOG_LEVEL=verbose
|
|
56
|
+
|
|
57
|
+
MIOLO_LOG_CONSOLE_ENABLED=true
|
|
58
|
+
#MIOLO_LOG_CONSOLE_LEVEL=verbose
|
|
59
|
+
|
|
60
|
+
MIOLO_LOG_FILE_ENABLED=true
|
|
61
|
+
#MIOLO_LOG_FILE_LEVEL=verbose
|
|
62
|
+
|
|
63
|
+
MIOLO_LOG_FILE_PATH=/var/log/afialapis/%MIOLO%.log
|
|
64
|
+
MIOLO_LOG_MAIL_ENABLED=false
|
|
65
|
+
#MIOLO_LOG_MAIL_LEVEL=warn
|
|
66
|
+
MIOLO_LOG_MAIL_FROM=noreply@mail.com
|
|
67
|
+
MIOLO_LOG_MAIL_TO=noreply@mail.com
|
|
68
|
+
|
|
69
|
+
#
|
|
70
|
+
# Mailer
|
|
71
|
+
#
|
|
72
|
+
MIOLO_MAILER_SILENT=true
|
|
73
|
+
MIOLO_MAILER_HOST=mail.com
|
|
74
|
+
MIOLO_MAILER_PORT=25
|
|
75
|
+
MIOLO_MAILER_FROM=noreply@mail.com
|
|
76
|
+
MIOLO_MAILER_TO=noreply@mail.com
|
|
77
|
+
|
|
78
|
+
MIOLO_MAILER_AUTH_METHOD=PLAIN # PLAIN / LOGIN
|
|
79
|
+
# If LOGIN, you need to specify:
|
|
80
|
+
MIOLO_MAILER_SMTP_USER=noreply@mail.com
|
|
81
|
+
MIOLO_MAILER_SMTP_PASS=****
|
|
82
|
+
|
|
83
|
+
#
|
|
84
|
+
# Cache
|
|
85
|
+
#
|
|
86
|
+
MIOLO_CACHE_VERSION=1
|
|
87
|
+
MIOLO_CACHE_CALUSTRA_VERSION=1
|
|
88
|
+
MIOLO_CACHE_CALUSTRA_TTL=86400000
|
|
89
|
+
MIOLO_CACHE_SESSION_VERSION=1
|
|
90
|
+
MIOLO_CACHE_SESSION_TTL=864000000
|
|
91
|
+
|
|
92
|
+
#
|
|
93
|
+
# Others
|
|
94
|
+
#
|
|
95
|
+
MIOLO_DOTENVX_DEBUG=false
|
|
96
|
+
|
|
97
|
+
#
|
|
98
|
+
# Build
|
|
99
|
+
#
|
|
100
|
+
MIOLO_BUILD_HTML_FILE=./src/cli/index.html
|
|
101
|
+
MIOLO_BUILD_CLIENT_ENTRY=./src/cli/entry-cli.jsx
|
|
102
|
+
MIOLO_BUILD_CLIENT_DEST=./dist/cli
|
|
103
|
+
MIOLO_BUILD_SERVER_SSR_ENTRY=./src/server/ssr/entry-server.jsx
|
|
104
|
+
MIOLO_BUILD_SERVER_DEST=./dist/server
|
|
105
|
+
MIOLO_BUNDLE_SUFFIX=iife.bundle.min
|
|
106
|
+
MIOLO_DEV_WATCH_ENABLED=true
|
|
107
|
+
MIOLO_DEV_WATCH_DIRS=./src/server
|
package/bin/build-client.mjs
CHANGED
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
|
|
2
2
|
import {xeiraBundle} from 'xeira'
|
|
3
|
-
import { cleanFolder, copyFileSync,
|
|
3
|
+
import { cleanFolder, copyFileSync, isFileExistingSync } from './util.mjs'
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const BUNDLE_SUFFIX = 'iife.bundle.min'
|
|
8
|
-
|
|
9
|
-
function _addCssLinkToHead(htmlString) {
|
|
10
|
-
const linkTag = ` <link href="/dist/cli/${getAppName()}.${BUNDLE_SUFFIX}.css" rel="stylesheet" media="all">`
|
|
5
|
+
function _addCssLinkToHead(appName, htmlString, dest) {
|
|
6
|
+
const linkTag = ` <link href="${dest}/${appName}.${process.env.MIOLO_BUNDLE_SUFFIX}.css" rel="stylesheet" media="all">`
|
|
11
7
|
|
|
12
8
|
// Expresión regular para encontrar la etiqueta </head> de cierre.
|
|
13
9
|
// Usamos un grupo de captura para mantener el contenido antes de </head>.
|
|
@@ -17,11 +13,13 @@ function _addCssLinkToHead(htmlString) {
|
|
|
17
13
|
const match = htmlString.match(headCloseTagRegex);
|
|
18
14
|
|
|
19
15
|
if (match) {
|
|
16
|
+
console.log(`[${appName}][prod] adding css link ${linkTag} to <head>`)
|
|
17
|
+
|
|
20
18
|
// Si se encuentra </head>, inserta la etiqueta <link> justo antes de ella.
|
|
21
19
|
return htmlString.replace(headCloseTagRegex, `${linkTag}\n$&`);
|
|
22
20
|
} else {
|
|
23
21
|
// Si no se encuentra </head>, devuelve el HTML original sin modificar.
|
|
24
|
-
console.warn(`[
|
|
22
|
+
console.warn(`[${appName}][prod] No se encontró la etiqueta <head> en el HTML proporcionado.`);
|
|
25
23
|
return htmlString;
|
|
26
24
|
}
|
|
27
25
|
}
|
|
@@ -37,17 +35,20 @@ export default async function(appName, entry, htmlFile, dest) {
|
|
|
37
35
|
target: 'browser',
|
|
38
36
|
bundle_folder: dest,
|
|
39
37
|
bundle_name: appName,
|
|
40
|
-
bundle_extension:
|
|
38
|
+
bundle_extension: process.env.MIOLO_BUNDLE_SUFFIX,
|
|
41
39
|
bundler: 'rollup',
|
|
42
40
|
bundle_node_polyfill: true
|
|
43
41
|
})
|
|
44
42
|
|
|
45
|
-
const destCssFile = `${dest}/${appName}.${
|
|
43
|
+
const destCssFile = `${dest}/${appName}.${process.env.MIOLO_BUNDLE_SUFFIX}.css`
|
|
46
44
|
const destCssFileExists = isFileExistingSync(destCssFile)
|
|
47
45
|
|
|
46
|
+
console.log(`[${appName}][prod] destCssFile ${destCssFile} exists?: ${destCssFileExists}`)
|
|
47
|
+
|
|
48
|
+
console.log(`[${appName}][prod] Copying HTML file ${htmlFile} to ${dest}/index.html`)
|
|
48
49
|
copyFileSync(htmlFile, `${dest}/index.html`, (content) => {
|
|
49
50
|
if (destCssFileExists) {
|
|
50
|
-
content = _addCssLinkToHead(content)
|
|
51
|
+
content = _addCssLinkToHead(appName, content, dest)
|
|
51
52
|
}
|
|
52
53
|
return content
|
|
53
54
|
})
|
package/bin/build-server.mjs
CHANGED
|
@@ -5,7 +5,7 @@ import { build } from 'vite'
|
|
|
5
5
|
import {xeiraBundle} from 'xeira'
|
|
6
6
|
import { cleanFolder } from './util.mjs'
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
|
|
9
9
|
|
|
10
10
|
export async function _fixProdBuild(appName, filePath) {
|
|
11
11
|
try {
|
|
@@ -21,7 +21,7 @@ export async function _fixProdBuild(appName, filePath) {
|
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
export default async function(appName, ssrEntry, ssrDest,
|
|
24
|
+
export default async function(appName, ssrEntry, ssrDest, dest) {
|
|
25
25
|
cleanFolder(dest)
|
|
26
26
|
|
|
27
27
|
console.log(`[${appName}][prod] Building first the SSR entry ${ssrEntry}`)
|
|
@@ -29,29 +29,19 @@ export default async function(appName, ssrEntry, ssrDest, entry, dest) {
|
|
|
29
29
|
build: {
|
|
30
30
|
outDir: path.resolve(process.cwd(), ssrDest),
|
|
31
31
|
ssr: path.resolve(process.cwd(), ssrEntry),
|
|
32
|
-
rollupOptions: {
|
|
33
|
-
/*
|
|
34
|
-
external: ['react', 'react-dom'],
|
|
35
|
-
output: {
|
|
36
|
-
globals: {
|
|
37
|
-
react: 'React',
|
|
38
|
-
'react-dom': 'ReactDOM'
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
*/
|
|
42
|
-
|
|
43
|
-
},
|
|
32
|
+
rollupOptions: {},
|
|
44
33
|
},
|
|
45
34
|
// server ssr's entry must bundle externals
|
|
46
35
|
ssr: {
|
|
47
36
|
noExternal: true
|
|
48
37
|
}
|
|
49
38
|
})
|
|
50
|
-
|
|
51
|
-
|
|
39
|
+
|
|
40
|
+
|
|
52
41
|
const serverExt = 'node.bundle.mjs'
|
|
53
42
|
await xeiraBundle({
|
|
54
|
-
source_index:
|
|
43
|
+
//source_index: 'node_modules/miolo/packages/miolo/bin/prod_start.mjs',
|
|
44
|
+
source_index: '../miolo/bin/prod_start.mjs',
|
|
55
45
|
target: 'node',
|
|
56
46
|
bundle_folder: dest,
|
|
57
47
|
bundle_name: appName,
|
package/bin/dev.mjs
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
|
|
1
2
|
import path from 'node:path'
|
|
3
|
+
import { fileURLToPath } from 'node:url'
|
|
2
4
|
import { fork } from 'node:child_process'
|
|
3
5
|
|
|
4
|
-
|
|
6
|
+
const __filename = fileURLToPath(import.meta.url)
|
|
7
|
+
const __dirname = path.dirname(__filename)
|
|
5
8
|
|
|
6
9
|
let serverProcess = null
|
|
7
10
|
// let retryCount = 0
|
|
@@ -16,8 +19,8 @@ function _isProcessRunning(pid) {
|
|
|
16
19
|
}
|
|
17
20
|
}
|
|
18
21
|
|
|
19
|
-
async function startDevServerProcess({ appName
|
|
20
|
-
const serverPath = path.join(
|
|
22
|
+
async function startDevServerProcess({ appName }) {
|
|
23
|
+
const serverPath = path.join(__dirname, './dev_start.mjs')
|
|
21
24
|
serverProcess = fork(serverPath)
|
|
22
25
|
|
|
23
26
|
console.log(`[${appName}][dev] Server process started with pid ${serverProcess.pid} from ${process.pid}`)
|
|
@@ -56,13 +59,13 @@ async function startDevServerProcess({ appName, entry }) {
|
|
|
56
59
|
}, 2000)
|
|
57
60
|
}
|
|
58
61
|
|
|
59
|
-
startDevServerProcess({ appName
|
|
62
|
+
startDevServerProcess({ appName }) // Inicia un nuevo proceso
|
|
60
63
|
}
|
|
61
64
|
})
|
|
62
65
|
}
|
|
63
66
|
|
|
64
67
|
|
|
65
|
-
export default async function(appName
|
|
66
|
-
console.log(`[${appName}][dev] Running DEV server
|
|
67
|
-
await startDevServerProcess({ appName
|
|
68
|
+
export default async function(appName) {
|
|
69
|
+
console.log(`[${appName}][dev] Running DEV server`)
|
|
70
|
+
await startDevServerProcess({ appName })
|
|
68
71
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import path from 'node:path'
|
|
2
|
+
import {miolo_dev} from '../src/server-dev.mjs'
|
|
3
|
+
|
|
4
|
+
async function _miolo_dev_start_server() {
|
|
5
|
+
const config = await import(path.join(process.cwd(), process.env.MIOLO_CONFIG))
|
|
6
|
+
const app = await miolo_dev(config.default)
|
|
7
|
+
await app.start()
|
|
8
|
+
return app
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
_miolo_dev_start_server()
|
package/bin/env.mjs
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { config } from '@dotenvx/dotenvx'
|
|
2
|
+
import path from 'path'
|
|
3
|
+
import { fileURLToPath } from 'url'
|
|
4
|
+
import fs from 'fs'
|
|
5
|
+
|
|
6
|
+
function _find_closest_package_json(dir) {
|
|
7
|
+
if (fs.existsSync(path.join(dir, 'package.json'))) {
|
|
8
|
+
return dir
|
|
9
|
+
}
|
|
10
|
+
const parentDir = path.dirname(dir)
|
|
11
|
+
if (parentDir === dir) {
|
|
12
|
+
return null
|
|
13
|
+
}
|
|
14
|
+
return _find_closest_package_json(parentDir)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
function _get_miolo_config_path() {
|
|
19
|
+
const __filename = fileURLToPath(import.meta.url)
|
|
20
|
+
const __dirname = path.dirname(__filename)
|
|
21
|
+
|
|
22
|
+
return path.join(__dirname, '.env')
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
export function init_env_config() {
|
|
27
|
+
|
|
28
|
+
const debug = process.env.DOTENVX_DEBUG === 'true'
|
|
29
|
+
|
|
30
|
+
// miolo defaults
|
|
31
|
+
const libEnvPath = _get_miolo_config_path()
|
|
32
|
+
config({ path: libEnvPath, debug })
|
|
33
|
+
|
|
34
|
+
// proyect config
|
|
35
|
+
const proyEnvPath = _find_closest_package_json(process.cwd())
|
|
36
|
+
if (proyEnvPath) {
|
|
37
|
+
config({ path: path.join(proyEnvPath, '.env'), override: true, debug })
|
|
38
|
+
}
|
|
39
|
+
}
|
package/bin/index.mjs
CHANGED
|
@@ -1,59 +1,65 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import yargs from 'yargs-parser'
|
|
3
|
-
import {
|
|
3
|
+
import { init_env_config } from './env.mjs'
|
|
4
4
|
|
|
5
5
|
async function main() {
|
|
6
6
|
const args = yargs(process.argv.slice(2))
|
|
7
7
|
const command = args._[0]
|
|
8
8
|
|
|
9
9
|
try {
|
|
10
|
-
|
|
10
|
+
init_env_config()
|
|
11
|
+
const appName = process.env.MIOLO_NAME
|
|
11
12
|
const serverName = args['server-name'] || 'miolo_server'
|
|
12
13
|
|
|
13
14
|
switch (command) {
|
|
14
15
|
case 'dev':
|
|
16
|
+
process.env.NODE_ENV = 'development'
|
|
15
17
|
const devHandler = (await import ('./dev.mjs')).default
|
|
16
|
-
|
|
17
|
-
await devHandler(appName, /*entry*/ devEntry)
|
|
18
|
+
await devHandler(appName)
|
|
18
19
|
break
|
|
19
20
|
|
|
20
21
|
case 'build-client':
|
|
22
|
+
process.env.NODE_ENV = 'production'
|
|
21
23
|
const buildClientHandler = (await import ('./build-client.mjs')).default
|
|
22
|
-
const clientEntry = args.entry ||
|
|
23
|
-
const htmlFile = args['html-file'] ||
|
|
24
|
-
const clientDest = args.dest ||
|
|
24
|
+
const clientEntry = args.entry || process.env.MIOLO_BUILD_CLIENT_ENTRY
|
|
25
|
+
const htmlFile = args['html-file'] || process.env.MIOLO_BUILD_HTML_FILE
|
|
26
|
+
const clientDest = args.dest || process.env.MIOLO_BUILD_CLIENT_DEST
|
|
25
27
|
await buildClientHandler(appName, /*entry*/ clientEntry, htmlFile, /*dest*/ clientDest)
|
|
26
28
|
break
|
|
27
29
|
|
|
28
30
|
case 'build-server':
|
|
31
|
+
process.env.NODE_ENV = 'production'
|
|
29
32
|
const buildServerHandler = (await import ('./build-server.mjs')).default
|
|
30
|
-
const ssrEntry = args['ssr-entry'] ||
|
|
31
|
-
const ssrDest = args['ssr-dest'] ||
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
await buildServerHandler(appName, ssrEntry, ssrDest, /*entry*/ serverEntry, /*dest*/ serverDest)
|
|
33
|
+
const ssrEntry = args['ssr-entry'] || process.env.MIOLO_BUILD_SERVER_SSR_ENTRY
|
|
34
|
+
const ssrDest = args['ssr-dest'] || process.env.MIOLO_BUILD_SERVER_DEST
|
|
35
|
+
const serverDest = args.dest || process.env.MIOLO_BUILD_SERVER_DEST
|
|
36
|
+
await buildServerHandler(appName, ssrEntry, ssrDest, /*dest*/ serverDest)
|
|
35
37
|
break
|
|
36
38
|
|
|
37
39
|
case 'start':
|
|
40
|
+
process.env.NODE_ENV = 'production'
|
|
38
41
|
const startHandler = (await import ('./start.mjs')).default
|
|
39
|
-
const startDest = args.dest ||
|
|
42
|
+
const startDest = args.dest || process.env.MIOLO_BUILD_SERVER_DEST
|
|
40
43
|
await startHandler(appName, /*dest*/ startDest, serverName)
|
|
41
44
|
break
|
|
42
45
|
|
|
43
46
|
case 'stop':
|
|
47
|
+
process.env.NODE_ENV = 'production'
|
|
44
48
|
const stopHandler = (await import ('./stop.mjs')).default
|
|
45
49
|
await stopHandler(appName)
|
|
46
50
|
break
|
|
47
51
|
|
|
48
52
|
case 'restart':
|
|
53
|
+
process.env.NODE_ENV = 'production'
|
|
49
54
|
const restartHandler = (await import ('./restart.mjs')).default
|
|
50
|
-
const restartDest = args.dest ||
|
|
55
|
+
const restartDest = args.dest || process.env.MIOLO_BUILD_SERVER_DEST
|
|
51
56
|
await restartHandler({appName, /*dest*/ restartDest, serverName})
|
|
52
57
|
break
|
|
53
58
|
|
|
54
59
|
case 'create-bin':
|
|
60
|
+
process.env.NODE_ENV = 'production'
|
|
55
61
|
const createHandler = (await import ('./create-bin.mjs')).default
|
|
56
|
-
const createDest = args.dest ||
|
|
62
|
+
const createDest = args.dest || process.env.MIOLO_BUILD_SERVER_DEST
|
|
57
63
|
await createHandler(appName, /*dest*/ createDest, serverName)
|
|
58
64
|
break
|
|
59
65
|
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import path from 'node:path'
|
|
2
|
+
import {miolo} from '../src/server.mjs'
|
|
3
|
+
|
|
4
|
+
export default async function _miolo_prod_start_server() {
|
|
5
|
+
const config = await import(path.join(process.cwd(), process.env.MIOLO_CONFIG))
|
|
6
|
+
const app = await miolo(config.default)
|
|
7
|
+
await app.start()
|
|
8
|
+
return app
|
|
9
|
+
}
|
package/bin/restart.mjs
CHANGED
package/bin/start.mjs
CHANGED
|
@@ -1,25 +1,15 @@
|
|
|
1
1
|
import path from 'node:path'
|
|
2
2
|
import { pidFileCreate } from "./util.mjs"
|
|
3
3
|
|
|
4
|
-
process.env.NODE_ENV = 'production'
|
|
5
|
-
|
|
6
4
|
export default async function(appName, dest, serverName) {
|
|
7
|
-
// if (! fs.existsSync(CLI_DEST_MAIN)) {
|
|
8
|
-
// console.error(`[${appName}][prod][start] Cannot start server (prod): CLI bundle does not exist ${CLI_DEST_MAIN}`)
|
|
9
|
-
// return
|
|
10
|
-
// }
|
|
11
|
-
// if (! fs.existsSync(SRV_DEST_MAIN)) {
|
|
12
|
-
// console.error(`[${appName}][prod][start] Cannot start server (prod): SERVER bundle does not exist ${SRV_DEST_MAIN}`)
|
|
13
|
-
// return
|
|
14
|
-
// }
|
|
15
|
-
|
|
16
5
|
console.log(`[${appName}][prod][start] Starting server...`)
|
|
17
6
|
|
|
18
7
|
const serverExt = 'node.bundle.mjs'
|
|
19
8
|
const destFile = path.join(process.cwd(), `${dest}/${appName}.${serverExt}`)
|
|
20
9
|
|
|
21
10
|
const srv_module = await import(destFile)
|
|
22
|
-
const server = srv_module[serverName]
|
|
11
|
+
//const server = srv_module[serverName]
|
|
12
|
+
const server = srv_module.default
|
|
23
13
|
|
|
24
14
|
const pid = pidFileCreate(appName)
|
|
25
15
|
console.log(`[${appName}][prod][start] Starting server. PID is ${pid}...`)
|
package/bin/stop.mjs
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { pidFileRead } from "./util.mjs"
|
|
2
2
|
|
|
3
|
-
process.env.NODE_ENV = 'production'
|
|
4
|
-
|
|
5
3
|
export default async function(appName) {
|
|
6
4
|
console.log(`[${appName}][prod][stop] Stopping server...`)
|
|
7
5
|
|
|
@@ -17,6 +15,5 @@ export default async function(appName) {
|
|
|
17
15
|
console.error(_)
|
|
18
16
|
|
|
19
17
|
return 0
|
|
20
|
-
}
|
|
21
|
-
|
|
18
|
+
}
|
|
22
19
|
}
|
package/bin/util.mjs
CHANGED
|
@@ -2,17 +2,17 @@ import {readdirSync, rmSync, writeFileSync, readFileSync} from 'node:fs'
|
|
|
2
2
|
import path from 'node:path'
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
export function getAppName() {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
5
|
+
// export function getAppName() {
|
|
6
|
+
// try {
|
|
7
|
+
// const packageJsonPath = path.join(process.cwd(), 'package.json')
|
|
8
|
+
// const content = readFileSync(packageJsonPath, 'utf8')
|
|
9
|
+
// const packageData = JSON.parse(content)
|
|
10
|
+
// return packageData.name
|
|
11
|
+
// } catch (error) {
|
|
12
|
+
// console.error('[miolo] Error reading package.json:', error)
|
|
13
|
+
// return 'miolo'
|
|
14
|
+
// }
|
|
15
|
+
// }
|
|
16
16
|
|
|
17
17
|
export function cleanFolder(folder) {
|
|
18
18
|
readdirSync(folder).forEach(file => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "miolo",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0-beta.2",
|
|
4
4
|
"description": "all-in-one koa-based server",
|
|
5
5
|
"author": "Donato Lorenzo <donato@afialapis.com>",
|
|
6
6
|
"contributors": [
|
|
@@ -21,49 +21,29 @@
|
|
|
21
21
|
"type": "module",
|
|
22
22
|
"exports": {
|
|
23
23
|
"./server": {
|
|
24
|
-
"node": "./src/
|
|
25
|
-
"import": "./src/
|
|
26
|
-
"default": "./dist/
|
|
24
|
+
"node": "./src/index.mjs",
|
|
25
|
+
"import": "./src/index.mjs",
|
|
26
|
+
"default": "./dist/miolo.node.mjs"
|
|
27
27
|
},
|
|
28
28
|
"./server-dev": {
|
|
29
|
-
"default": "./src/server
|
|
30
|
-
},
|
|
31
|
-
"./cli": {
|
|
32
|
-
"node": "./src/cli/index.mjs",
|
|
33
|
-
"import": "./dist/cli/miolo.cli.mjs",
|
|
34
|
-
"default": "./dist/cli/miolo.cli.umd.js"
|
|
35
|
-
},
|
|
36
|
-
"./cli-react": {
|
|
37
|
-
"node": "./src/cli-react/index.mjs",
|
|
38
|
-
"import": "./dist/cli-react/miolo.cli-react.mjs",
|
|
39
|
-
"default": "./dist/cli-react/miolo.cli-react.umd.js"
|
|
29
|
+
"default": "./src/server-dev.mjs"
|
|
40
30
|
}
|
|
41
31
|
},
|
|
42
32
|
"files": [
|
|
43
33
|
"bin",
|
|
44
|
-
"src"
|
|
45
|
-
"logo",
|
|
46
|
-
"dist"
|
|
34
|
+
"src"
|
|
47
35
|
],
|
|
48
36
|
"scripts": {
|
|
49
|
-
"reset": "rm -fr
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"cli-react-clean": "rm -fr ./dist/cli-react/*",
|
|
54
|
-
"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,mjs",
|
|
55
|
-
"cli-react-dist": "npm run cli-react-clean && npm run cli-react-bundle",
|
|
56
|
-
"server-clean": "rm -fr ./dist/server/*",
|
|
57
|
-
"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",
|
|
58
|
-
"server-dist": "npm run server-clean && npm run server-bundle",
|
|
59
|
-
"dist": "npm run cli-dist && npm run cli-react-dist && npm run server-dist",
|
|
60
|
-
"site": "npx xeira site",
|
|
37
|
+
"reset": "rm -fr package-lock.json npm-lock.yaml dist/* && npm i",
|
|
38
|
+
"clean": "rm -fr ./dist/*",
|
|
39
|
+
"bundle": "npx xeira bundle --target=node --source_index=./src/index.mjs --bundle_folder=./dist --bundle_name=miolo --bundle_extension=node.mjs",
|
|
40
|
+
"dist": "npm run clean && npm run bundle",
|
|
61
41
|
"test": "npx xeira test --files=./test/index.mjs",
|
|
62
|
-
"
|
|
42
|
+
"publish": "npm publish"
|
|
63
43
|
},
|
|
64
44
|
"dependencies": {
|
|
65
45
|
"@babel/plugin-proposal-decorators": "^7.28.0",
|
|
66
|
-
"@dotenvx/dotenvx": "^1.47.
|
|
46
|
+
"@dotenvx/dotenvx": "^1.47.6",
|
|
67
47
|
"@koa/bodyparser": "^6.0.0",
|
|
68
48
|
"@koa/cors": "^5.0.0",
|
|
69
49
|
"@koa/router": "^13.1.1",
|
|
@@ -96,19 +76,16 @@
|
|
|
96
76
|
"vite": "^7.0.4",
|
|
97
77
|
"winston": "^3.17.0",
|
|
98
78
|
"winston-daily-rotate-file": "^5.0.0",
|
|
99
|
-
"xeira": "^1.2.2",
|
|
100
79
|
"yargs-parser": "^22.0.0"
|
|
101
80
|
},
|
|
102
|
-
"peerDependencies": {
|
|
103
|
-
"react": "^18.3.1",
|
|
104
|
-
"react-dom": "^18.3.1"
|
|
105
|
-
},
|
|
106
81
|
"devDependencies": {
|
|
107
|
-
"
|
|
82
|
+
"esbuild": "^0.25.6",
|
|
83
|
+
"node-fetch": "^3.3.2",
|
|
84
|
+
"xeira": "^1.2.3"
|
|
108
85
|
},
|
|
109
86
|
"eslintConfig": {
|
|
110
87
|
"extends": [
|
|
111
|
-
"
|
|
88
|
+
"../../node_modules/xeira/configs/eslint.react.cjs"
|
|
112
89
|
]
|
|
113
90
|
}
|
|
114
91
|
}
|