h3-zod
Validate h3 and Nuxt requests with zod.
Important
H3 1.8.0 now has built-in runtime + type-safe request utilities, eliminating the need for this module.
Install
npm install zod h3-zod
Usage
Import it like:
import { zh } from 'h3-zod';
// Or
import { useSafeValidatedQuery, useSafeValidatedBody } from 'h3-zod';
Helpers that don't throw when parsing fails:
export default defineEventHandler(async (event) => {
const query = zh.useSafeValidatedQuery(event, z.object({
required: z.string()
}))
const body = await zh.useSafeValidatedBody(event, z.object({
optional: z.string().optional(),
required: z.boolean()
}))
const params = zh.useSafeValidatedParams(event, {
id: z.number()
})
if (!params.success) {
// params.error
}
})
Helpers that throw error 400 when parsing fails:
export default defineEventHandler(async (event) => {
const query = zh.useValidatedQuery(event, z.object({
required: z.string()
}))
const body = await zh.useValidatedBody(event, z.object({
optional: z.string().optional(),
required: z.boolean()
}))
const params = await zh.useValidatedParams(event, {
id: z.number()
})
})
You can also pass an object schema:
export default defineEventHandler(async (event) => {
const body = await zh.useValidatedBody(event, {
optional: z.string().optional(),
required: z.boolean()
})
})
Helper Zod Schemas
zh.boolAsString
"true"
βtrue
"false"
βfalse
"notboolean"
β throwsZodError
zh.checkboxAsString
"on"
βtrue
undefined
βfalse
"anythingbuton"
β throwsZodError
zh.intAsString
"3"
β3
"3.14"
β throwsZodError
"notanumber"
β throwsZodError
zh.numAsString
"3"
β3
"3.14"
β3.14
"notanumber"
β throwsZodError
Usage
const Schema = z.object({
isAdmin: zh.boolAsString,
agreedToTerms: zh.checkboxAsString,
age: zh.intAsString,
cost: zh.numAsString,
});
const parsed = Schema.parse({
isAdmin: 'true',
agreedToTerms: 'on',
age: '38',
cost: '10.99'
});
console.log(parsed)
// {
// isAdmin: true,
// agreedToTerms: true,
// age: 38,
// cost: 10.99
// }
Related
License
MIT