# Using npm
npm install h3-typebox
# Using yarn
yarn install h3-typebox
# Using pnpm
pnpm install h3-typeboximport { 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:
- date-time
 - time
 - date
 - uri
 - uri-reference
 
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 })- Clone this repository
 - Install dependencies using 
pnpm install - Run interactive tests using 
pnpm dev 
Made with 💙
Published under MIT License.