rajt
Version:
A serverless bundler layer, fully typed for AWS Lambda (Node.js and LLRT) and Cloudflare Workers.
38 lines (29 loc) • 1.24 kB
text/typescript
import { config } from 'dotenv'
import { serve } from '@hono/node-server'
import createApp from './create-app'
import { getRoutes, getMiddlewares } from './routes'
import { registerHandler, registerMiddleware } from './register'
import { Ability } from './auth'
import { getAvailablePort } from './utils/port'
import jsonImport from './utils/json-import'
import { setEnv, detectEnvironment } from './utils/environment'
setEnv(detectEnvironment())
config({ path: '../../.env.dev' })
let routes = await getRoutes()
routes.forEach(r => registerHandler(r.name, r.handle))
routes = routes.filter(r => r?.path)
const middlewares = await getMiddlewares()
middlewares.forEach(mw => registerMiddleware(mw.handle))
Ability.fromRoutes(routes)
Ability.roles = jsonImport('../../../../roles.json')
const fetch = createApp({ routes }).fetch
const desiredPort = process.env?.PORT ? Number(process.env.PORT) : 3000
getAvailablePort(desiredPort)
.then(port => {
if (port != desiredPort)
console.warn(`🟠 Port ${desiredPort} was in use, using ${port} as a fallback`)
console.log(`🚀 API running on http://localhost:${port}`)
serve({ fetch, port })
}).catch(err => {
console.error('Error finding available port:', err)
})