Rapidly create typesafe routes for your express application.
Just add the package @nlfmt/rapid
using your favorite package manager
pnpm add @nlfmt/rapid
Rapid uses Zod to validate the request body, query parameters, cookies and route parameters for you.
This allows you to define the shape of the data you expect to receive and Rapid will automatically validate it for you.
Using Rapid, you can define Middleware functions that add context to the route handler.
They can build on top of each other easily and are fully typesafe.
import { createRouter, ApiError } from "@nlfmt/rapid"
import express from "express"
import z from "zod"
const apiRouter = createRouter()
apiRouter
.path("/user/:userId")
.params({
// rapid automatically infers the param names from the url
userId: z.string().min(1),
})
.body(
z.object({
username: z.string().regex(
/^[a-zA-Z1-9_.]{3,}$/g,
"Username can only contain letters, underscores and dots"
),
password: z.string().min(6)
})
)
// rapid performs the input validation for you
// and types `body`, `params` and more accordingly
.put(({ body, params }) => {
const user = db.user.findById(params.userId)
if (!user)
throw new ApiError({
code: 404,
name: "NOT_FOUND",
message: "User not found",
})
return db.user.updateById(params.userId, body)
})
const app = express()
app.use(express.json())
app.use("/api", apiRouter.router)
app.listen(3000)
For more examples, check out the examples directory.
Take a look at the CONTRIBUTING.md file for more information.
This project is licensed under the MIT License - see the LICENSE file for details.