52 lines
1.4 KiB
Markdown
52 lines
1.4 KiB
Markdown
|
# Effect Schema Validator Middleware for Hono
|
||
|
|
||
|
This package provides a validator middleware using [Effect Schema](https://github.com/Effect-TS/effect/blob/main/packages/schema/README.md) for [Hono](https://honojs.dev) applications. With this middleware, you can define schemas using Effect Schema and validate incoming data in your Hono routes.
|
||
|
|
||
|
## Why Effect Schema?
|
||
|
|
||
|
Effect Schema offers several advantages over other validation libraries:
|
||
|
|
||
|
1. Bidirectional transformations: Effect Schema can both decode and encode data.
|
||
|
2. Integration with Effect: It inherits benefits from the Effect ecosystem, such as dependency tracking in transformations.
|
||
|
3. Highly customizable: Users can attach meta-information through annotations.
|
||
|
4. Functional programming style: Uses combinators and transformations for schema definition.
|
||
|
|
||
|
## Usage
|
||
|
|
||
|
```ts
|
||
|
import { Hono } from 'hono'
|
||
|
import { Schema as S } from '@effect/schema'
|
||
|
import { effectValidator } from '@hono/effect-validator'
|
||
|
|
||
|
const app = new Hono()
|
||
|
|
||
|
const User = S.Struct({
|
||
|
name: S.String,
|
||
|
age: S.Number,
|
||
|
})
|
||
|
|
||
|
app.post('/user', effectValidator('json', User), (c) => {
|
||
|
const user = c.req.valid('json')
|
||
|
|
||
|
return c.json({
|
||
|
success: true,
|
||
|
message: `${user.name} is ${user.age}`,
|
||
|
})
|
||
|
})
|
||
|
```
|
||
|
|
||
|
## API
|
||
|
|
||
|
### `effectValidator(target, schema)`
|
||
|
|
||
|
- `target`: The target of validation ('json', 'form', 'query', etc.)
|
||
|
- `schema`: An Effect Schema schema
|
||
|
|
||
|
## Author
|
||
|
|
||
|
Günther Brunner <https://github.com/gunta>
|
||
|
|
||
|
## License
|
||
|
|
||
|
MIT
|