@tealina/server
Version:
Includes core runtime utility functions for API files to routes.
109 lines (85 loc) ⢠2.49 kB
Markdown
A utility package for resolving lazy import structures in file-based routing systems.
- š Automatically resolves nested lazy import routing structures
- š§ Native TypeScript support with full type inference
- š File system-based route organization
- ā” Lightweight with zero dependencies
```bash
npm install @tealina/server
```
```ts
// api-v1/post/login.ts
const handler = async (req, res) => {
const { body } = req
console.log(body.account)
res.send({ token: 'JWT token' })
}
export default handler
```
```ts
// api-v1/post/index.ts
export default {
// path: import module
'/login': import('./login.js'),
'/user/create': import('./user/create.js'),
}
```
```ts
// api-v1/get/index.ts
export default {
'/user/:id': import('./user/[id].js'),
}
```
```ts
// api-v1/index.ts
export default {
'get': import('./get/index.js'), // GET method routes
'post': import('./post/index.js'), // POST method routes
// supports other HTTP methods
}
```
```ts
import apis from './api-v1/index.js'
import { loadAPIs, transformToRouteOptions } from '@tealina/server'
async function registerRoutes() {
// Load and transform API structure
const routeOptions = await transformToRouteOptions(apis)
// Register routes
for (const { url, method, handler } of routeOptions) {
// Register routes here, for example:
// app[method](url, handler)
console.log(`Registering route: ${method} ${url}`)
}
}
```
Transforms lazy-import route structures into usable route options arrays.
**Parameters:**
- `apiRecord`: Lazy import object with specific structure
**Returns:**
Array of route options with:
- `url`: Route path
- `method`: HTTP method (get, post, put, delete, etc.)
- `handler`: Request handler function
## Project Structure Example
```
src/
āāā api-v1/
ā āāā index.ts # Main export file
ā āāā get/
ā ā āāā index.ts # GET routes collection
ā ā āāā user/[id].ts # Dynamic route
ā āāā post/
ā āāā index.ts # POST routes collection
ā āāā login.ts # Login endpoint
ā āāā user/
ā āāā create.ts # User creation endpoint
āāā server.ts # Server entry file
```