Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/nlfmt/rapid
Rapidly create typesafe routes for express, with built-in validation using zod
https://github.com/nlfmt/rapid
express typesafe typescript
Last synced: about 1 month ago
JSON representation
Rapidly create typesafe routes for express, with built-in validation using zod
- Host: GitHub
- URL: https://github.com/nlfmt/rapid
- Owner: nlfmt
- License: mit
- Created: 2024-08-30T00:50:05.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2024-09-01T20:38:34.000Z (3 months ago)
- Last Synced: 2024-09-28T12:23:34.388Z (about 2 months ago)
- Topics: express, typesafe, typescript
- Language: TypeScript
- Homepage: https://npmjs.com/package/@nlfmt/rapid
- Size: 63.5 KB
- Stars: 9
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# Rapid
Rapidly create typesafe routes for your express application.# Installation
Just add the package `@nlfmt/rapid` using your favorite package manager
```sh
pnpm add @nlfmt/rapid
```## Features
### Zod
Rapid uses [Zod](https://zod.dev/) 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.### Typesafe reusable Middleware
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.## Examples
```ts
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](examples) directory.## Contributing
Take a look at the [CONTRIBUTING.md](CONTRIBUTING.md) file for more information.## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.