JSON schema validation for h3, using typebox & ajv.
# Using npm
npm install h3-typebox
# Using yarn
yarn install h3-typebox
# Using pnpm
pnpm install h3-typebox
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.
You can define a options object on validateBody
or validateQuery
. Currently the following options are supported:
includeAjvFormats: Boolean
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:
// 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:
These can be used by custom schemas with the Type.Unsafe
method or with an inline schema:
const bodySchema = Type.Object({
optional: Type.Optional(Type.String()),
dateTime: Type.String({ format: 'date-time' })
})
validateBody(event, bodySchema, { includeAjvFormats: true })
pnpm install
pnpm dev
Made with ?
Published under MIT License.