An universal plugin that scans the file system and automatically loads to a server all routes in a target directory.
npm install universal-autorouterAn universal plugin that scans the file system and automatically loads to a server all routes in a target directory.
Inspired by elysia-autoload package and compatible with Node.js and Bun runtimes.
``sh`
yarn add universal-autorouter
`ts
// /app.ts
import path from 'node:path'
import { serve } from '@hono/node-server'
import { Hono } from 'hono'
import autoloadRoutes from 'universal-autorouter'
const app = new Hono()
await autoloadRoutes(app, {
// Pattern to scan route files
pattern: '*/.ts',
// Prefix to add to routes
prefix: '/api',
// Source directory of route files: use "relative" path
routesDir: path.resolve(import.meta.dirname, 'api')
})
const port = +(process.env.PORT || 3000)
serve({
fetch: app.fetch,
port
}, () => console.log(Server running at http://localhost:${port}))`
`ts
// /routes/index.ts
import type { Context } from 'hono'
export default (c: Context) => {
return c.text('Hello World!')
}
`
Guide on how universal-autorouter matches routes:
``
āāā app.ts
āāā routes
ā āāā index.ts // index routes
ā āāā posts
ā ā āāā index.ts
ā ā āāā [id].ts // dynamic params
ā āāā likes
ā ā āāā [...].ts // wildcard
ā āāā domains
ā ā āāā @[...] // wildcard with @ prefix
ā ā ā āāā index.ts
ā āāā frontend
ā ā āāā index.tsx // usage of tsx extension
ā āāā events
ā ā āāā (post).ts // dynamic method
ā ā āāā (get).ts
ā āāā users.ts
āāā package.json
- /routes/index.ts ā GET //routes/posts/index.ts
- ā GET /posts/routes/posts/[id].ts
- ā GET /posts/:id/routes/users.ts
- ā GET /users/routes/likes/[...].ts
- ā GET /likes/*/routes/domains/@[...]/index.ts
- ā GET /domains/@*/routes/frontend/index.tsx
- ā GET /frontend/routes/events/(post).ts
- ā POST /events/routes/events/(get).ts
- ā GET /events
| Key | Type | Default | Description |
| ----------------- | --------------- | ------------------------------ | -------------------------------------------------------------------------------- |
| pattern? | string | */.{ts,tsx,js,jsx,mjs,cjs} | Glob patterns) |
| prefix? | string | | Prefix to be added to each route |./api
| routesDir? | string | | The folder where routes are located (use a relative path) |get
| defaultMethod? | Method | string | | Default method to use when the route filename doesn't use the (false
| viteDevServer? | ViteDevServer | _undefined_ | Developer server instance of Vite to use SSR module loader |
| skipNoRoutes? | boolean | | Skip the throw error when no routes are found |false
| skipImportErrors? | boolean | | Skip the import errors with the default export` of a rotue file |
This project is licensed under the MIT License.