one
Version:
One is a new React Framework that makes Vite serve both native and web.
53 lines (42 loc) • 1.59 kB
text/typescript
import './polyfills-server'
import FSExtra from 'fs-extra'
import type { Hono } from 'hono'
import type { VXRNOptions } from 'vxrn'
import { setServerGlobals } from './server/setServerGlobals'
import { setupBuildInfo } from './server/setupBuildOptions'
import { ensureExists } from './utils/ensureExists'
import type { One } from './vite/types'
process.on('uncaughtException', (err) => {
console.error(`[one] Uncaught exception`, err?.stack || err)
})
export async function serve(args: VXRNOptions['server'] & { app?: Hono } = {}) {
const buildInfo = (await FSExtra.readJSON(`dist/buildInfo.json`)) as One.BuildInfo
const { oneOptions } = buildInfo
setServerGlobals()
setupBuildInfo(buildInfo)
ensureExists(oneOptions)
// to avoid loading the CACHE_KEY before we set it use async imports:
const { labelProcess } = await import('./cli/label-process')
const { removeUndefined } = await import('./utils/removeUndefined')
const { loadEnv, serve: vxrnServe } = await import('vxrn/serve')
const { oneServe } = await import('./server/oneServe')
labelProcess('serve')
if (args.loadEnv) {
await loadEnv('production')
}
return await vxrnServe({
app: args.app,
// fallback to one plugin
...oneOptions.server,
// override with any flags given to cli
...removeUndefined({
port: args.port ? +args.port : undefined,
host: args.host,
compress: args.compress,
}),
async beforeRegisterRoutes(options, app) {
await oneServe(oneOptions, buildInfo, app)
},
async afterRegisterRoutes(options, app) {},
})
}