miolo 2.0.0-beta.3 → 2.0.0-beta.5
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/build-client.mjs +19 -0
- package/bin/build-server.mjs +55 -0
- package/bin/dev.mjs +8 -0
- package/bin/index.mjs +64 -0
- package/bin/restart.mjs +10 -0
- package/bin/start.mjs +26 -0
- package/bin/stop.mjs +20 -0
- package/bin/util.mjs +37 -0
- package/dist/cli/miolo.cli.umd.js +1 -1
- package/dist/cli-react/miolo.cli-react.umd.js +1 -1
- package/dist/server/miolo.server.node.mjs +1 -1
- package/package.json +8 -10
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
|
|
2
|
+
import {xeiraBundle} from 'xeira'
|
|
3
|
+
import { cleanFolder } from './util.mjs'
|
|
4
|
+
|
|
5
|
+
export default async function({ appName, entry, dest }) {
|
|
6
|
+
console.log(`[${appName}][prod] Building client from entry ${entry}`)
|
|
7
|
+
cleanFolder(dest)
|
|
8
|
+
|
|
9
|
+
// fs.copyFileSync(proot('./cli/index.html'), proot('./build/cli/index.html'))
|
|
10
|
+
await xeiraBundle({
|
|
11
|
+
source_index: entry,
|
|
12
|
+
target: 'browser',
|
|
13
|
+
bundle_folder: dest,
|
|
14
|
+
bundle_name: appName,
|
|
15
|
+
bundle_extension: 'iife.bundle.min',
|
|
16
|
+
bundler: 'rollup',
|
|
17
|
+
bundle_node_polyfill: true
|
|
18
|
+
})
|
|
19
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
|
|
2
|
+
import path from 'node:path'
|
|
3
|
+
import { readFile, writeFile} from 'node:fs/promises'
|
|
4
|
+
import { build } from 'vite'
|
|
5
|
+
import {xeiraBundle} from 'xeira'
|
|
6
|
+
import { cleanFolder } from './util.mjs'
|
|
7
|
+
|
|
8
|
+
export async function _fixProdBuild(appName, filePath) {
|
|
9
|
+
try {
|
|
10
|
+
const content = await readFile(filePath, 'utf8')
|
|
11
|
+
const newContent = content.replace(
|
|
12
|
+
/var key = crypto\.pseudoRandomBytes\(32\)/g,
|
|
13
|
+
'var key = crypto.randomBytes(32)'
|
|
14
|
+
)
|
|
15
|
+
await writeFile(filePath, newContent, 'utf8')
|
|
16
|
+
console.log(`[${appName}][prod] Fixed server build (prod)!`)
|
|
17
|
+
} catch (error) {
|
|
18
|
+
console.error(`[${appName}][prod] Error fixing server build (prod): ${error}`)
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export default async function({ appName, ssrEntry, ssrDest, entry, dest }) {
|
|
23
|
+
|
|
24
|
+
console.log(`[${appName}][prod] Building first the SSR entry ${ssrEntry}`)
|
|
25
|
+
await build({
|
|
26
|
+
build: {
|
|
27
|
+
outDir: path.resolve(process.cwd(), ssrDest),
|
|
28
|
+
ssr: path.resolve(process.cwd(), ssrEntry),
|
|
29
|
+
rollupOptions: {
|
|
30
|
+
// Opciones adicionales de Rollup si las necesitas
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
// Otras opciones de Vite si son necesarias
|
|
34
|
+
// root: path.resolve(process.cwd(), 'demo'), // Si tu root del proyecto es /demo
|
|
35
|
+
// plugins: [/* tus plugins */],
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
console.log(`[${appName}][prod] Building server from entry ${entry}`)
|
|
39
|
+
cleanFolder(dest)
|
|
40
|
+
|
|
41
|
+
const serverExt = 'node.bundle.mjs'
|
|
42
|
+
await xeiraBundle({
|
|
43
|
+
source_index: entry,
|
|
44
|
+
target: 'node',
|
|
45
|
+
bundle_folder: dest,
|
|
46
|
+
bundle_name: appName,
|
|
47
|
+
bundle_extension: serverExt,
|
|
48
|
+
bundler: 'rollup',
|
|
49
|
+
bundle_node_polyfill: true,
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
console.log(`[${appName}][prod] Fixing server build (prod)...`)
|
|
53
|
+
const destFile = path.join(process.cwd(), `${dest}/${appName}.${serverExt}`)
|
|
54
|
+
await _fixProdBuild(appName, destFile)
|
|
55
|
+
}
|
package/bin/dev.mjs
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import path from 'node:path'
|
|
2
|
+
|
|
3
|
+
export default async function({ appName, entry, serverName }) {
|
|
4
|
+
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
|
+
}
|
package/bin/index.mjs
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import yargs from 'yargs-parser'
|
|
3
|
+
import { getAppName } from './util.mjs'
|
|
4
|
+
|
|
5
|
+
async function main() {
|
|
6
|
+
const args = yargs(process.argv.slice(2))
|
|
7
|
+
const command = args._[0]
|
|
8
|
+
|
|
9
|
+
try {
|
|
10
|
+
const appName = await getAppName()
|
|
11
|
+
const serverName = args['server-name'] || 'miolo_server'
|
|
12
|
+
|
|
13
|
+
switch (command) {
|
|
14
|
+
case 'dev':
|
|
15
|
+
const devHandler = await import ('./dev.mjs')
|
|
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 })
|
|
19
|
+
break
|
|
20
|
+
|
|
21
|
+
case 'build-client':
|
|
22
|
+
const buildClientHandler = await import ('./build-client.mjs')
|
|
23
|
+
const clientEntry = args.entry || './cli/entry-cli.jsx'
|
|
24
|
+
const clientDest = args.dest || './dist/cli'
|
|
25
|
+
await buildClientHandler({ appName, entry: clientEntry, dest: clientDest })
|
|
26
|
+
break
|
|
27
|
+
|
|
28
|
+
case 'build-server':
|
|
29
|
+
const buildServerHandler = await import ('./build-server.mjs')
|
|
30
|
+
const ssrEntry = args['ssr-entry'] || './server/ssr/entry-server.jsx'
|
|
31
|
+
const ssrDest = args['ssr-dest'] || './dist/server'
|
|
32
|
+
const serverEntry = args.entry || './src/server/server-prod.mjs'
|
|
33
|
+
const serverDest = args.dest || './dist/server'
|
|
34
|
+
await buildServerHandler({ appName, ssrEntry, ssrDest, entry: serverEntry, dest: serverDest })
|
|
35
|
+
break
|
|
36
|
+
|
|
37
|
+
case 'start':
|
|
38
|
+
const startHandler = await import ('./start.mjs')
|
|
39
|
+
const startDest = args.dest || './dist/server'
|
|
40
|
+
await startHandler({appName, serverName, dest: startDest})
|
|
41
|
+
break
|
|
42
|
+
|
|
43
|
+
case 'stop':
|
|
44
|
+
const stopHandler = await import ('./stop.mjs')
|
|
45
|
+
await stopHandler({appName})
|
|
46
|
+
break
|
|
47
|
+
|
|
48
|
+
case 'restart':
|
|
49
|
+
const restartHandler = await import ('./restart.mjs')
|
|
50
|
+
await restartHandler({appName, serverName})
|
|
51
|
+
break
|
|
52
|
+
|
|
53
|
+
default:
|
|
54
|
+
console.error(`[miolo] Unknown command: ${command}`)
|
|
55
|
+
console.log('[miolo] Available commands: dev, build-client, build-server, start, stop, restart')
|
|
56
|
+
process.exit(1)
|
|
57
|
+
}
|
|
58
|
+
} catch (error) {
|
|
59
|
+
console.error('[miolo] Error during command execution:', error)
|
|
60
|
+
process.exit(1)
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
main()
|
package/bin/restart.mjs
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import start from "./start.mjs"
|
|
2
|
+
import stop from "./stop.mjs"
|
|
3
|
+
|
|
4
|
+
export default async function(appName, dest, serverName) {
|
|
5
|
+
console.log(`[${appName}][prod][stop] Restarting server...`)
|
|
6
|
+
|
|
7
|
+
await stop(appName)
|
|
8
|
+
await start(appName, dest, serverName)
|
|
9
|
+
|
|
10
|
+
}
|
package/bin/start.mjs
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import path from 'node:path'
|
|
2
|
+
import { pidFileCreate } from "./util.mjs"
|
|
3
|
+
|
|
4
|
+
export default async function(appName, dest, serverName) {
|
|
5
|
+
// if (! fs.existsSync(CLI_DEST_MAIN)) {
|
|
6
|
+
// console.error(`[${appName}][prod][start] Cannot start server (prod): CLI bundle does not exist ${CLI_DEST_MAIN}`)
|
|
7
|
+
// return
|
|
8
|
+
// }
|
|
9
|
+
// if (! fs.existsSync(SRV_DEST_MAIN)) {
|
|
10
|
+
// console.error(`[${appName}][prod][start] Cannot start server (prod): SERVER bundle does not exist ${SRV_DEST_MAIN}`)
|
|
11
|
+
// return
|
|
12
|
+
// }
|
|
13
|
+
|
|
14
|
+
console.log(`[${appName}][prod][start] Starting server...`)
|
|
15
|
+
|
|
16
|
+
const serverExt = 'node.bundle.mjs'
|
|
17
|
+
const destFile = path.join(process.cwd(), `${dest}/${appName}.${serverExt}`)
|
|
18
|
+
|
|
19
|
+
const srv_module = await import(destFile)
|
|
20
|
+
const server = srv_module[serverName]
|
|
21
|
+
|
|
22
|
+
const pid = pidFileCreate(appName)
|
|
23
|
+
console.log(`[${appName}][prod][start] Starting server. PID is ${pid}...`)
|
|
24
|
+
|
|
25
|
+
await server()
|
|
26
|
+
}
|
package/bin/stop.mjs
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { pidFileRead } from "./util.mjs";
|
|
2
|
+
|
|
3
|
+
export default async function(appName) {
|
|
4
|
+
console.log(`[${appName}][prod][stop] Stopping server...`)
|
|
5
|
+
|
|
6
|
+
try {
|
|
7
|
+
const pid = pidFileRead(appName)
|
|
8
|
+
console.log(`[${appName}][prod][stop] Killing current process with PID ${pid}`)
|
|
9
|
+
|
|
10
|
+
process.kill(pid, 'SIGKILL')
|
|
11
|
+
|
|
12
|
+
return 1
|
|
13
|
+
} catch(_) {
|
|
14
|
+
console.log(`[${appName}][prod][stop] No current process to kill`)
|
|
15
|
+
console.error(_)
|
|
16
|
+
|
|
17
|
+
return 0
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
}
|
package/bin/util.mjs
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import {readdirSync, rmSync, writeFileSync, readFileSync} from 'node:fs'
|
|
2
|
+
import { readFile } from 'node:fs/promises'
|
|
3
|
+
import path from 'node:path'
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
export async function getAppName() {
|
|
7
|
+
try {
|
|
8
|
+
const packageJsonPath = path.join(process.cwd(), 'package.json')
|
|
9
|
+
const content = await readFile(packageJsonPath, 'utf8')
|
|
10
|
+
const packageData = JSON.parse(content)
|
|
11
|
+
return packageData.name
|
|
12
|
+
} catch (error) {
|
|
13
|
+
console.error('[miolo] Error reading package.json:', error)
|
|
14
|
+
return 'miolo'
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function cleanFolder(folder) {
|
|
19
|
+
readdirSync(folder).forEach(file => {
|
|
20
|
+
rmSync(`${folder}/${file}`, { recursive: true, force: true });
|
|
21
|
+
})
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
export function pidFileCreate(appName) {
|
|
26
|
+
const pidFilePath = `/tmp/${appName}.pid`
|
|
27
|
+
writeFileSync(pidFilePath, `${process.pid}`, {encoding:'utf8',flag:'w'})
|
|
28
|
+
return process.pid
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function pidFileRead(appName) {
|
|
32
|
+
const pidFilePath = `/tmp/${appName}.pid`
|
|
33
|
+
const pid = readFileSync(pidFilePath, {encoding:'utf8'})
|
|
34
|
+
return pid
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "miolo",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.5",
|
|
4
4
|
"description": "all-in-one koa-based server",
|
|
5
5
|
"author": "Donato Lorenzo <donato@afialapis.com>",
|
|
6
6
|
"contributors": [
|
|
@@ -15,6 +15,9 @@
|
|
|
15
15
|
},
|
|
16
16
|
"homepage": "https://www.afialapis.com/os/miolo",
|
|
17
17
|
"license": "MIT",
|
|
18
|
+
"bin": {
|
|
19
|
+
"miolo": "./bin/index.mjs"
|
|
20
|
+
},
|
|
18
21
|
"exports": {
|
|
19
22
|
"./server": {
|
|
20
23
|
"default": "./dist/server/miolo.server.node.mjs"
|
|
@@ -30,6 +33,7 @@
|
|
|
30
33
|
}
|
|
31
34
|
},
|
|
32
35
|
"files": [
|
|
36
|
+
"bin",
|
|
33
37
|
"src",
|
|
34
38
|
"logo",
|
|
35
39
|
"dist"
|
|
@@ -45,27 +49,20 @@
|
|
|
45
49
|
"server-clean": "rm -fr ./dist/server/*",
|
|
46
50
|
"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",
|
|
47
51
|
"server-dist": "npm run server-clean && npm run server-bundle",
|
|
48
|
-
|
|
49
52
|
"YY-server-dev-clean": "rm -fr ./dist/server-dev/*",
|
|
50
53
|
"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",
|
|
51
54
|
"YY-server-dev-dist": "npm run server-dev-clean && npm run server-dev-bundle",
|
|
52
|
-
|
|
53
55
|
"dist": "npm run cli-dist && npm run cli-react-dist && npm run server-dist",
|
|
54
56
|
"site": "npx xeira site",
|
|
55
57
|
"test": "npx xeira test --files=./test/index.mjs",
|
|
56
|
-
|
|
57
58
|
"X_pre-publish": "npm run test && npm run dist && npm run site",
|
|
58
|
-
"pre-publish": "npm run dist && npm run site",
|
|
59
|
-
|
|
60
|
-
|
|
59
|
+
"pre-publish": "npm run dist && npm run site",
|
|
61
60
|
"xxx_demo-guest": "rm -fr ./demo/build/miolo-demo-guest* && node demo/run.cjs --guest",
|
|
62
61
|
"xxx_demo-basic": "rm -fr ./demo/build/miolo-demo-basic* && node demo/run.cjs --basic",
|
|
63
62
|
"xxx_demo-credentials": "rm -fr ./demo/build/miolo-demo-credentials* && node demo/run.cjs --credentials",
|
|
64
63
|
"xxx_demo-credentials-debug": "rm -fr ./demo/build/miolo-demo-credentials* && DEBUG=winston* node demo/run.cjs --credentials",
|
|
65
64
|
"xxx_demo": "npm run demo-credentials",
|
|
66
|
-
|
|
67
65
|
"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
|
-
|
|
69
66
|
"xxx_demo-vite": "AUTH_TYPE=credentials node demo/server/server.mjs",
|
|
70
67
|
"xxx_demo-vite-prod": "NODE_ENV=production AUTH_TYPE=credentials node demo/server/server.mjs",
|
|
71
68
|
"xxx_demo-vite-build-client": "vite build --outDir demo/dist/client",
|
|
@@ -101,7 +98,8 @@
|
|
|
101
98
|
"socket.io-client": "^4.8.1",
|
|
102
99
|
"tinguir": "^0.0.7",
|
|
103
100
|
"winston": "^3.17.0",
|
|
104
|
-
"winston-daily-rotate-file": "^5.0.0"
|
|
101
|
+
"winston-daily-rotate-file": "^5.0.0",
|
|
102
|
+
"yargs-parser": "^21.1.1"
|
|
105
103
|
},
|
|
106
104
|
"peerDependencies": {
|
|
107
105
|
"react": "^18.3.1",
|