Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Intevel/h3-valibot

Repository files navigation

h3-valibot

npm version npm downloads Github Actions CI License

Schema validation for h3 using Valibot πŸ€–

Install

# Using npm
npm install h3-valibot
# Using pnpm
pnpm install h3-valibot
# Using bun
bun add h3-valibot

Validation

import { useValidatedBody, v, vh } from 'h3-valibot'
import { createApp, createRouter, eventHandler } from 'h3';
import { email, minLength, string, objectAsync } from 'valibot';
export const app = createApp();
const LoginSchema = v.object({
 email: vh.email,
 password: v.pipe(v.string(), v.minLength(8)),
 });
const router = createRouter();
app.use(router);
router.post("/login", eventHandler(async (event) => {
 const body = await useValidatedBody(event, LoginSchema);
 return body;
 }),
);

Safe Validation

// same as above
router.post("/login", eventHandler(async (event) => {
 const body = await useSafeValidatedBody(event, LoginSchema);
 if (!body.success) // do something
 return body.output;
 }),
);

Utils available

h3-valibot provides a series of utils and their safe variants (don't throw an h3 error):

  • useValidatedBody
  • useValidatedInput
  • useValidatedParams
  • useValidatedQuery
  • useSafeValidatedBody
  • useSafeValidatedInput
  • useSafeValidatedParams
  • useSafeValidatedQuery

Each one accepts an h3 event, a valibot schema and optionally a parser config.

Helpers

It also provides a set of helpers via vh object, mainly related to string validation, particularly useful during the prototyping phase of any project. For production use we still suggest to create dedicated schemas with project-related error messages and fallbacks.

  • boolAsString
  • checkboxAsString
  • dateAsString
  • intAsString
  • numAsString
  • email
  • uuid

For more details or examples please refer to their JSdocs or source code.

Errors

h3-valibot throws an ValiError when the validation fails:

Example

{
 "statusCode": 400,
 "statusMessage": "Bad Request",
 "stack": [],
 "data": {
 "issues": [
 {
 "validation": "email",
 "origin": "value",
 "message": "Invalid email",
 "input": "github@conner-bachmande",
 "path": [
 {
 "schema": "object",
 "input": {
 "email": "github@conner-bachmande",
 "password": "12345678"
 },
 "key": "email",
 "value": "github@conner-bachmande"
 }
 ],
 "reason": "string"
 }
 ],
 "name": "ValiError"
 }
}

Nuxt auto-imports

This library supports Nuxt's auto-imports, just add it in your nuxt.config.ts:

export default defineNuxtConfig({
 modules: [
 // ...
 'h3-valibot/nuxt',
 ],
})

License

Published under MIT - Made with ❀️ by Conner Bachmann

About

πŸ€– Schema validation for h3 using Valibot

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Contributors 3

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /