{"id":13595044,"url":"https://github.com/wobsoriano/h3-zod","last_synced_at":"2025-05-16T06:05:58.822Z","repository":{"id":41057755,"uuid":"508129541","full_name":"wobsoriano/h3-zod","owner":"wobsoriano","description":"TypeScript-first schema validation for h3 and Nuxt applications","archived":false,"fork":false,"pushed_at":"2025-02-21T21:18:36.000Z","size":410,"stargazers_count":165,"open_issues_count":1,"forks_count":5,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-05-09T20:51:30.600Z","etag":null,"topics":["nuxt","schema-validation","typescript","vue","zod"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wobsoriano.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-06-28T02:35:58.000Z","updated_at":"2025-04-29T21:32:50.000Z","dependencies_parsed_at":"2023-10-14T15:27:31.454Z","dependency_job_id":"6734595f-a964-47c5-ac78-cadb186ca669","html_url":"https://github.com/wobsoriano/h3-zod","commit_stats":{"total_commits":90,"total_committers":3,"mean_commits":30.0,"dds":"0.022222222222222254","last_synced_commit":"9aa22b45b6a11bd5f03d14a920e420a0ab630308"},"previous_names":[],"tags_count":26,"template":false,"template_full_name":"wobsoriano/library-starter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wobsoriano%2Fh3-zod","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wobsoriano%2Fh3-zod/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wobsoriano%2Fh3-zod/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wobsoriano%2Fh3-zod/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wobsoriano","download_url":"https://codeload.github.com/wobsoriano/h3-zod/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254478188,"owners_count":22077676,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["nuxt","schema-validation","typescript","vue","zod"],"created_at":"2024-08-01T16:01:43.003Z","updated_at":"2025-05-16T06:05:53.814Z","avatar_url":"https://github.com/wobsoriano.png","language":"TypeScript","funding_links":[],"categories":["TypeScript","vue"],"sub_categories":[],"readme":"# h3-zod\n\n[![npm (tag)](https://img.shields.io/npm/v/h3-zod?style=flat\u0026colorA=000000\u0026colorB=000000)](https://www.npmjs.com/package/h3-zod) ![npm bundle size](https://img.shields.io/bundlephobia/minzip/h3-zod?style=flat\u0026colorA=000000\u0026colorB=000000) ![NPM](https://img.shields.io/npm/l/h3-zod?style=flat\u0026colorA=000000\u0026colorB=000000)\n\nValidate [h3](https://github.com/unjs/h3) and Nuxt requests with [zod](https://github.com/colinhacks/zod).\n\n\u003e [!IMPORTANT]\n\u003e Starting with h3 version 1.8.0, built-in [runtime + type-safe request utilities](https://unjs.io/blog/2023-08-15-h3-towards-the-edge-of-the-web#runtime-type-safe-request-utils) are included, so you might not need this module.\n\n## Install\n\n```bash\nnpm install zod h3-zod\n```\n\n## Usage\n\nImport it like:\n\n```ts\nimport { useSafeValidatedBody, useSafeValidatedQuery, zh } from 'h3-zod'\n\n// Or\n```\n\nHelpers that don't throw when parsing fails:\n\n```ts\nexport default defineEventHandler(async (event) =\u003e {\n  const query = await zh.useSafeValidatedQuery(event, z.object({\n    required: z.string()\n  }))\n\n  const body = await zh.useSafeValidatedBody(event, z.object({\n    optional: z.string().optional(),\n    required: z.boolean()\n  }))\n\n  const params = await zh.useSafeValidatedParams(event, {\n    id: z.number()\n  })\n\n  if (!params.success) {\n    // params.error\n  }\n})\n```\n\nHelpers that throw error 400 when parsing fails:\n\n```ts\nexport default defineEventHandler(async (event) =\u003e {\n  const query = await zh.useValidatedQuery(event, z.object({\n    required: z.string()\n  }))\n\n  const body = await zh.useValidatedBody(event, z.object({\n    optional: z.string().optional(),\n    required: z.boolean()\n  }))\n\n  const params = await zh.useValidatedParams(event, {\n    id: z.number()\n  })\n})\n```\n\nYou can also pass an object schema:\n\n```ts\nexport default defineEventHandler(async (event) =\u003e {\n  const body = await zh.useValidatedBody(event, {\n    optional: z.string().optional(),\n    required: z.boolean()\n  })\n})\n```\n\n## Helper Zod Schemas\n\n#### zh.boolAsString\n- `\"true\"` → `true`\n- `\"false\"` → `false`\n- `\"notboolean\"` → throws `ZodError`\n\n#### zh.checkboxAsString\n- `\"on\"` → `true`\n- `undefined` → `false`\n- `\"anythingbuton\"` → throws `ZodError`\n\n#### zh.intAsString\n- `\"3\"` → `3`\n- `\"3.14\"` → throws `ZodError`\n- `\"notanumber\"` → throws `ZodError`\n\n#### zh.numAsString\n- `\"3\"` → `3`\n- `\"3.14\"` → `3.14`\n- `\"notanumber\"` → throws `ZodError`\n\n### Usage\n\n```ts\nconst Schema = z.object({\n  isAdmin: zh.boolAsString,\n  agreedToTerms: zh.checkboxAsString,\n  age: zh.intAsString,\n  cost: zh.numAsString,\n})\n\nconst parsed = Schema.parse({\n  isAdmin: 'true',\n  agreedToTerms: 'on',\n  age: '38',\n  cost: '10.99'\n})\n\nconsole.log(parsed)\n// {\n//   isAdmin: true,\n//   agreedToTerms: true,\n//   age: 38,\n//   cost: 10.99\n// }\n```\n\n## Related\n\n- [h3-typebox](https://github.com/kevinmarrec/h3-typebox)\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwobsoriano%2Fh3-zod","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwobsoriano%2Fh3-zod","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwobsoriano%2Fh3-zod/lists"}