JSON schema validation for h3, using typebox & ajv
npm install h3-typebox[![npm version][npm-version-src]][npm-version-href]
[![npm downloads][npm-downloads-src]][npm-downloads-href]
[![Github Actions][github-actions-src]][github-actions-href]
[![Codecov][codecov-src]][codecov-href]
> JSON schema validation for h3, using typebox & ajv.
``shUsing npm
npm install h3-typebox
Usage
`js
import { createServer } from 'http'
import { createApp } from 'h3'
import { validateBody, validateQuery, Type } from 'h3-typebox'const app = createApp()
app.use('/', async (event) => {
// Validate body
const body = await validateBody(event, Type.Object({
optional: Type.Optional(Type.String()),
required: Type.Boolean(),
}))
// Validate query
const query = validateQuery(event, Type.Object({
required: Type.String(),
}))
})
createServer(app).listen(process.env.PORT || 3000)
`See how to define your schema with
Type on TypeBox documentation.$3
You can define a options object on
validateBody or validateQuery. Currently the following options are supported:-
includeAjvFormats: Boolean#### includeAjvFormats
Some formats like
date, date-time or email are specified in the current JSONSchema draft, but not included in ajv by default, but provided by the ajv-formats package. If one of these formats is needed, you can specify includeAjvFormats: true in the options of validateBody or validateQuery like this:`ts
// Body
validateBody(event, schema, { includeAjvFormats: true })// Query
validateQuery(event, schema, { includeAjvFormats: true })
`Currently, only the following extended formats are supported for performance and security reasons:
- date-time
- time
- date
- email
- uri
- uri-reference
These can be used by custom schemas with the
Type.Unsafe method or with an inline schema:`ts
const bodySchema = Type.Object({
optional: Type.Optional(Type.String()),
dateTime: Type.String({ format: 'date-time' })
})
validateBody(event, bodySchema, { includeAjvFormats: true })
`Development 💻
- Clone this repository
- Install dependencies using
pnpm install
- Run interactive tests using pnpm dev`Made with 💙
Published under MIT License.
[npm-version-src]: https://img.shields.io/npm/v/h3-typebox?style=flat-square
[npm-version-href]: https://npmjs.com/package/h3-typebox
[npm-downloads-src]: https://img.shields.io/npm/dm/h3-typebox?style=flat-square
[npm-downloads-href]: https://npmjs.com/package/h3-typebox
[github-actions-src]: https://img.shields.io/github/workflow/status/kevinmarrec/h3-typebox/CI
[github-actions-href]: https://github.com/kevinmarrec/h3-typebox/actions?query=workflow%3Aci
[codecov-src]: https://img.shields.io/codecov/c/gh/kevinmarrec/h3-typebox/main?style=flat-square
[codecov-href]: https://codecov.io/gh/kevinmarrec/h3-typebox