miolo 2.0.0-beta.9 → 2.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 (36) hide show
  1. package/bin/build-client.mjs +5 -3
  2. package/bin/build-server.mjs +10 -7
  3. package/bin/create-bin.mjs +38 -0
  4. package/bin/dev.mjs +74 -5
  5. package/bin/index.mjs +13 -7
  6. package/bin/restart.mjs +6 -4
  7. package/bin/start.mjs +3 -1
  8. package/bin/stop.mjs +4 -2
  9. package/dist/cli/miolo.cli.umd.js +238 -465
  10. package/dist/cli/miolo.cli.umd.js.map +1 -1
  11. package/dist/cli-react/miolo.cli-react.umd.js +282 -505
  12. package/dist/cli-react/miolo.cli-react.umd.js.map +1 -1
  13. package/dist/server/miolo.server.node.mjs +1180 -1190
  14. package/package.json +18 -31
  15. package/src/cli/fetcher/utils.mjs +3 -3
  16. package/src/cli-react/context/MioloContextProvider.jsx +27 -19
  17. package/src/cli-react/context/MioloContextProvider.mjs +23 -13
  18. package/src/server/config/defaults.mjs +9 -2
  19. package/src/server/engines/cron/emails.mjs +2 -2
  20. package/src/server/engines/cron/index.mjs +16 -16
  21. package/src/server/engines/cron/init.mjs +4 -4
  22. package/src/server/engines/cron/ipsum.mjs +1 -1
  23. package/src/server/engines/cron/syscheck.mjs +1 -1
  24. package/src/server/index.mjs +2 -0
  25. package/src/server/middleware/http/custom_blacklist.mjs +2 -1
  26. package/src/server/middleware/routes/router/crud/attachCrudRoutes.mjs +1 -1
  27. package/src/server/middleware/routes/router/queries/attachQueriesRoutes.mjs +1 -1
  28. package/src/server/middleware/vite/devserver.mjs +9 -1
  29. package/src/server/middleware/vite/watcher.mjs +42 -0
  30. package/src/server/server-cron.mjs +40 -0
  31. package/src/server/server-dev.mjs +2 -0
  32. package/src/server/server.mjs +6 -3
  33. package/src/cli/fetcher/v1.tar.gz +0 -0
  34. package/src/cli-react/_jsx.tar.gz +0 -0
  35. package/src/cli-react/ssr/hooks.tar.gz +0 -0
  36. package/src/server/middleware/ssr/_old.tar.gz +0 -0
@@ -1,10 +1,12 @@
1
1
 
2
2
  import {xeiraBundle} from 'xeira'
3
- import { cleanFolder } from './util.mjs'
3
+ //import { cleanFolder } from './util.mjs'
4
4
 
5
- export default async function({ appName, entry, dest }) {
5
+ process.env.NODE_ENV = 'production'
6
+
7
+ export default async function(appName, entry, dest) {
6
8
  console.log(`[${appName}][prod] Building client from entry ${entry}`)
7
- cleanFolder(dest)
9
+ //cleanFolder(dest)
8
10
 
9
11
  // fs.copyFileSync(proot('./cli/index.html'), proot('./build/cli/index.html'))
10
12
  await xeiraBundle({
@@ -3,7 +3,9 @@ import path from 'node:path'
3
3
  import { readFile, writeFile} from 'node:fs/promises'
4
4
  import { build } from 'vite'
5
5
  import {xeiraBundle} from 'xeira'
6
- import { cleanFolder } from './util.mjs'
6
+ //import { cleanFolder } from './util.mjs'
7
+
8
+ process.env.NODE_ENV = 'production'
7
9
 
8
10
  export async function _fixProdBuild(appName, filePath) {
9
11
  try {
@@ -19,8 +21,8 @@ export async function _fixProdBuild(appName, filePath) {
19
21
  }
20
22
  }
21
23
 
22
- export default async function({ appName, ssrEntry, ssrDest, entry, dest }) {
23
- cleanFolder(dest)
24
+ export default async function(appName, ssrEntry, ssrDest, entry, dest) {
25
+ //cleanFolder(dest)
24
26
 
25
27
  console.log(`[${appName}][prod] Building first the SSR entry ${ssrEntry}`)
26
28
  await build({
@@ -28,12 +30,13 @@ export default async function({ appName, ssrEntry, ssrDest, entry, dest }) {
28
30
  outDir: path.resolve(process.cwd(), ssrDest),
29
31
  ssr: path.resolve(process.cwd(), ssrEntry),
30
32
  rollupOptions: {
31
- // Opciones adicionales de Rollup si las necesitas
33
+ //
32
34
  },
33
35
  },
34
- // Otras opciones de Vite si son necesarias
35
- // root: path.resolve(process.cwd(), 'demo'), // Si tu root del proyecto es /demo
36
- // plugins: [/* tus plugins */],
36
+ // server ssr's entry must bundle externals
37
+ ssr: {
38
+ noExternal: true
39
+ }
37
40
  })
38
41
 
39
42
  console.log(`[${appName}][prod] Building server from entry ${entry}`)
@@ -0,0 +1,38 @@
1
+ import {readFileSync, writeFileSync} from 'node:fs'
2
+ import path from 'path'
3
+ import { fileURLToPath } from 'url'
4
+
5
+ const __my_filename = fileURLToPath(import.meta.url)
6
+ const __my_dirname = path.dirname(__my_filename)
7
+
8
+
9
+ export default async function(appName, dest, serverName) {
10
+ console.log(`[${appName}][prod][create-bin] Creating bin files...`)
11
+
12
+ const readSource = (f) => readFileSync(path.resolve(__my_dirname, f), {encoding:'utf8'})
13
+ const writeDest = (f, content) => writeFileSync(path.join(process.cwd(), dest, f), content, {encoding:'utf8',flag:'w'})
14
+
15
+ const utilContent = readSource('./util.mjs')
16
+ writeDest('util.mjs', utilContent)
17
+
18
+ let startContent = readSource('./start.mjs')
19
+ startContent = startContent.replace('export default async function', 'async function start')
20
+ startContent = startContent.replace('(appName, dest, serverName)', `(appName= '${appName}', dest= '${dest}', serverName= '${serverName}')`)
21
+ startContent+= '\n'
22
+ startContent+= 'start()'
23
+ writeDest('start.mjs', startContent)
24
+
25
+ let stopContent = readSource('./stop.mjs')
26
+ stopContent = stopContent.replace('export default async function', 'async function stop')
27
+ stopContent = stopContent.replace('(appName)', `(appName= '${appName}')`)
28
+ stopContent+= '\n'
29
+ stopContent+= 'stop()'
30
+ writeDest('stop.mjs', stopContent)
31
+
32
+ let restartContent = readSource('./restart.mjs')
33
+ restartContent = restartContent.replace('export default async function', 'async function restart')
34
+ restartContent = restartContent.replace('(appName, dest, serverName)', `(appName= '${appName}', dest= '${dest}', serverName= '${serverName}')`)
35
+ restartContent+= '\n'
36
+ restartContent+= 'restart()'
37
+ writeDest('restart.mjs', restartContent)
38
+ }
package/bin/dev.mjs CHANGED
@@ -1,8 +1,77 @@
1
1
  import path from 'node:path'
2
+ import { fork } from 'node:child_process'
2
3
 
3
- export default async function({ appName, entry, serverName }) {
4
+ process.env.NODE_ENV = 'development'
5
+
6
+ let serverProcess = null
7
+ // let retryCount = 0
8
+ // const maxRetries = 5
9
+
10
+ function _isProcessRunning(pid) {
11
+ try {
12
+ process.kill(pid, 0) // Sending a signal 0 does nothing but checks if the process exists
13
+ return true
14
+ } catch (error) {
15
+ return false
16
+ }
17
+ }
18
+
19
+ async function startDevServerProcess({ appName, entry }) {
20
+ const serverPath = path.join(process.cwd(), entry)
21
+ serverProcess = fork(serverPath)
22
+
23
+ console.log(`[${appName}][dev] Server process started with pid ${serverProcess.pid} from ${process.pid}`)
24
+
25
+ serverProcess.on('exit', (code, args) => {
26
+ console.log(`[${appName}][dev] Server process exited with code ${code} - ${args}`)
27
+ serverProcess = null
28
+ // Puedes implementar lógica de reintento aquí si es necesario
29
+ // if (code !== 0 && retryCount < maxRetries) {
30
+ // retryCount++
31
+ // console.log(`[${serverName}][dev] Attempting to restart server (${retryCount}/${maxRetries})...`)
32
+ // // Espera un breve tiempo antes de intentar reiniciar
33
+ // await new Promise(resolve => setTimeout(resolve, 2000))
34
+ // startDevServerProcess({ entry, serverName })
35
+ // } else if (code !== 0) {
36
+ // console.error(`[${serverName}][dev] Server failed to start after ${maxRetries} retries. Exiting.`)
37
+ // process.exit(1)
38
+ // }
39
+ })
40
+
41
+ serverProcess.on('message', (message) => {
42
+ if (message === 'miolo_restart') {
43
+ console.log(`[${appName}][dev] Received restart signal. Restarting server...`)
44
+
45
+ const pidToKill = serverProcess ? serverProcess.pid : null
46
+ if (pidToKill) {
47
+ console.log(`[${appName}][dev] Killing process with PID: ${pidToKill}`)
48
+ // Clean kill
49
+ process.kill(pidToKill, 'SIGTERM')
50
+
51
+ // Harder if still alive
52
+ setTimeout(() => {
53
+ if (_isProcessRunning(pidToKill)) {
54
+ process.kill(pidToKill, 'SIGKILL')
55
+ }
56
+ }, 2000)
57
+ }
58
+
59
+ startDevServerProcess({ appName, entry }) // Inicia un nuevo proceso
60
+ }
61
+ })
62
+ }
63
+
64
+
65
+ export default async function(appName, entry, serverName) {
4
66
  console.log(`[${appName}][dev] Running DEV server ${serverName} from entry ${entry}`)
5
- const srv_module = await import(path.join(process.cwd(), entry))
6
- const server = srv_module[serverName]
7
- await server()
8
- }
67
+ await startDevServerProcess({ appName, entry })
68
+ }
69
+
70
+
71
+
72
+ // export default async function({ appName, entry, serverName }) {
73
+ // console.log(`[${appName}][dev] Running DEV server ${serverName} from entry ${entry}`)
74
+ // const srv_module = await import(path.join(process.cwd(), entry))
75
+ // const server = srv_module[serverName]
76
+ // await server()
77
+ // }
package/bin/index.mjs CHANGED
@@ -14,15 +14,14 @@ async function main() {
14
14
  case 'dev':
15
15
  const devHandler = (await import ('./dev.mjs')).default
16
16
  const devEntry = args.entry || './src/server/server-dev.mjs'
17
- const devServerName = args['server-name'] || 'miolo_server'
18
- await devHandler({ appName, entry: devEntry, serverName: devServerName })
17
+ await devHandler(appName, /*entry*/ devEntry, serverName)
19
18
  break
20
19
 
21
20
  case 'build-client':
22
21
  const buildClientHandler = (await import ('./build-client.mjs')).default
23
22
  const clientEntry = args.entry || './cli/entry-cli.jsx'
24
23
  const clientDest = args.dest || './dist/cli'
25
- await buildClientHandler({ appName, entry: clientEntry, dest: clientDest })
24
+ await buildClientHandler(appName, /*entry*/ clientEntry, /*dest*/ clientDest)
26
25
  break
27
26
 
28
27
  case 'build-server':
@@ -31,23 +30,30 @@ async function main() {
31
30
  const ssrDest = args['ssr-dest'] || './dist/server'
32
31
  const serverEntry = args.entry || './src/server/server-prod.mjs'
33
32
  const serverDest = args.dest || './dist/server'
34
- await buildServerHandler({ appName, ssrEntry, ssrDest, entry: serverEntry, dest: serverDest })
33
+ await buildServerHandler(appName, ssrEntry, ssrDest, /*entry*/ serverEntry, /*dest*/ serverDest)
35
34
  break
36
35
 
37
36
  case 'start':
38
37
  const startHandler = (await import ('./start.mjs')).default
39
38
  const startDest = args.dest || './dist/server'
40
- await startHandler({appName, serverName, dest: startDest})
39
+ await startHandler(appName, /*dest*/ startDest, serverName)
41
40
  break
42
41
 
43
42
  case 'stop':
44
43
  const stopHandler = (await import ('./stop.mjs')).default
45
- await stopHandler({appName})
44
+ await stopHandler(appName)
46
45
  break
47
46
 
48
47
  case 'restart':
49
48
  const restartHandler = (await import ('./restart.mjs')).default
50
- await restartHandler({appName, serverName})
49
+ const restartDest = args.dest || './dist/server'
50
+ await restartHandler({appName, /*dest*/ restartDest, serverName})
51
+ break
52
+
53
+ case 'create-bin':
54
+ const createHandler = (await import ('./create-bin.mjs')).default
55
+ const createDest = args.dest || './dist/server'
56
+ await createHandler(appName, /*dest*/ createDest, serverName)
51
57
  break
52
58
 
53
59
  default:
package/bin/restart.mjs CHANGED
@@ -1,10 +1,12 @@
1
1
  import start from "./start.mjs"
2
2
  import stop from "./stop.mjs"
3
3
 
4
- export default async function({appName, dest, serverName}) {
5
- console.log(`[${appName}][prod][stop] Restarting server...`)
4
+ process.env.NODE_ENV = 'production'
6
5
 
7
- await stop({appName})
8
- await start({appName, dest, serverName})
6
+ export default async function(appName, dest, serverName) {
7
+ console.log(`[${appName}][prod][restart] Restarting server...`)
8
+
9
+ await stop(appName)
10
+ await start(appName, dest, serverName)
9
11
 
10
12
  }
package/bin/start.mjs CHANGED
@@ -1,7 +1,9 @@
1
1
  import path from 'node:path'
2
2
  import { pidFileCreate } from "./util.mjs"
3
3
 
4
- export default async function({appName, dest, serverName}) {
4
+ process.env.NODE_ENV = 'production'
5
+
6
+ export default async function(appName, dest, serverName) {
5
7
  // if (! fs.existsSync(CLI_DEST_MAIN)) {
6
8
  // console.error(`[${appName}][prod][start] Cannot start server (prod): CLI bundle does not exist ${CLI_DEST_MAIN}`)
7
9
  // return
package/bin/stop.mjs CHANGED
@@ -1,6 +1,8 @@
1
- import { pidFileRead } from "./util.mjs";
1
+ import { pidFileRead } from "./util.mjs"
2
2
 
3
- export default async function({appName}) {
3
+ process.env.NODE_ENV = 'production'
4
+
5
+ export default async function(appName) {
4
6
  console.log(`[${appName}][prod][stop] Stopping server...`)
5
7
 
6
8
  try {