hono-openapi 0.4.3 → 0.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -44,7 +44,7 @@ pnpm add hono-openapi @hono/arktype-validator arktype
44
44
  #### For TypeBox
45
45
 
46
46
  ```bash
47
- pnpm add hono-openapi @hono/typebox-validator @sinclair/typebox"
47
+ pnpm add hono-openapi @hono/typebox-validator @sinclair/typebox
48
48
  ```
49
49
 
50
50
  #### For Effect
package/arktype.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var e=require("@hono/arktype-validator"),r=require("./toOpenAPISchema.cjs"),a=require("./utils.cjs");function t(e){return{builder:async a=>({schema:await r.convert(e.toJsonSchema())}),validator:r=>{e(r)}}}require("json-schema-walker"),exports.resolver=t,exports.validator=function(r,o,i){const s=e.arktypeValidator(r,o,i);return Object.assign(s,{[a.uniqueSymbol]:{resolver:async e=>a.generateValidatorDocs(r,await t(o).builder(e))}})};
1
+ "use strict";var e=require("@hono/arktype-validator"),r=require("./toOpenAPISchema.cjs"),a=require("./utils.cjs");function t(e){return{builder:async a=>({schema:await r.convert(e.toJsonSchema())}),validator:r=>{e.assert(r)}}}require("json-schema-walker"),exports.resolver=t,exports.validator=function(r,o,s){const i=e.arktypeValidator(r,o,s);return Object.assign(i,{[a.uniqueSymbol]:{resolver:async e=>a.generateValidatorDocs(r,await t(o).builder(e))}})};
package/arktype.js CHANGED
@@ -1 +1 @@
1
- import{arktypeValidator as a}from"@hono/arktype-validator";import{c as o}from"./toOpenAPISchema.js";import{u as r,g as t}from"./utils.js";import"json-schema-walker";function s(a){return{builder:async r=>({schema:await o(a.toJsonSchema())}),validator:o=>{a(o)}}}function e(o,e,i){const n=a(o,e,i);return Object.assign(n,{[r]:{resolver:async a=>t(o,await s(e).builder(a))}})}export{s as resolver,e as validator};
1
+ import{arktypeValidator as a}from"@hono/arktype-validator";import{c as r}from"./toOpenAPISchema.js";import{u as o,g as t}from"./utils.js";import"json-schema-walker";function s(a){return{builder:async o=>({schema:await r(a.toJsonSchema())}),validator:r=>{a.assert(r)}}}function e(r,e,i){const n=a(r,e,i);return Object.assign(n,{[o]:{resolver:async a=>t(r,await s(e).builder(a))}})}export{s as resolver,e as validator};
package/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var e=require("hono/http-exception"),t=require("./utils.cjs");const n=["GET","PUT","POST","DELETE","OPTIONS","HEAD","PATCH","TRACE"],s=e=>e.charAt(0).toUpperCase()+e.slice(1),o=(e,t)=>{let n=e;if("/"===t)return`${n}Index`;for(const e of t.split("/"))123===e.charCodeAt(0)?n+=`By${s(e.slice(1,-1))}`:n+=s(e);return n};function c({path:e,method:t,data:n,schema:s}){e=(e=>e.split("/").map((e=>{let t=e;return t.startsWith(":")&&(t=t.slice(1,t.length),t.endsWith("?")&&(t=t.slice(0,-1)),t=`{${t}}`),t})).join("/"))(e);const c=t.toLowerCase();s[e]={...s[e]?s[e]:{},[c]:{responses:{},...s[e]?.[c]??{},operationId:o(c,e),...n}}}function a(e,{excludeStaticFile:t=!0,exclude:n=[]}){const s={},o=Array.isArray(n)?n:[n];for(const[n,c]of Object.entries(e))if(!(o.some((e=>"string"==typeof e?n===e:e.test(n)))||n.includes("*")||t&&n.includes("."))){for(const e of Object.keys(c)){const t=c[e];if(n.includes("{")){t.parameters||(t.parameters=[]);const e=n.split("/").filter((e=>e.startsWith("{")&&!t.parameters.find((t=>"path"===t.in&&t.name===e.slice(1,e.length-1)))));for(const n of e){const e=n.slice(1,n.length-1),s=t.parameters.findIndex((t=>"param"===t.in&&t.name===e));-1!==s?t.parameters[s].in="path":t.parameters.push({schema:{type:"string"},in:"path",name:e,required:!0})}}t.responses||(t.responses={200:{}})}s[n]=c}return s}async function i(e,{documentation:s={},excludeStaticFile:o=!0,exclude:i=[],excludeMethods:r=["OPTIONS"],excludeTags:p=[],defaultOptions:l}={documentation:{},excludeStaticFile:!0,exclude:[],excludeMethods:["OPTIONS"],excludeTags:[]},{version:d="3.1.0",components:m={}}={version:"3.1.0",components:{}},u){const h={version:d,components:m},f={};for(const s of e.routes){if(!(t.uniqueSymbol in s.handler))continue;if(r.includes(s.method))continue;if(!1===n.includes(s.method)&&"ALL"!==s.method)continue;const{resolver:e,metadata:o={}}=s.handler[t.uniqueSymbol],a=l?.[s.method],{docs:i,components:p}=await e({...h,...o},a);if(h.components={...h.components,...p??{}},"ALL"===s.method)for(const e of n)c({path:s.path,data:i,method:e,schema:f});else c({method:s.method,path:s.path,data:i,schema:f})}for(const e in f)for(const t in f[e]){const n=f[e][t]?.hide;n&&("boolean"==typeof n?n:u&&n(u))&&delete f[e][t]}return{openapi:h.version,...{...s,tags:s.tags?.filter((e=>!p?.includes(e?.name))),info:{title:"Hono Documentation",description:"Development documentation",version:"0.0.0",...s.info},paths:{...a(f,{excludeStaticFile:o,exclude:i}),...s.paths},components:{...s.components,schemas:{...h.components,...s.components?.schemas}}}}}exports.describeRoute=function(n){const{validateResponse:s,...o}=n;return Object.assign((async(t,o)=>{if(await o(),s&&n.responses){const s=t.res.status,o=t.res.headers.get("content-type");if(s&&o){const c=n.responses[s];if(c&&"content"in c&&c.content){const n=o.split(";")[0],s=c.content[n];if(s?.schema&&"validator"in s.schema)try{let e;const o=t.res.clone();if("application/json"===n?e=await o.json():"text/plain"===n&&(e=await o.text()),!e)throw new Error("No data to validate!");await s.schema.validator(e)}catch(t){throw new e.HTTPException(400,{message:"Response validation failed!",cause:t})}}}}}),{[t.uniqueSymbol]:{resolver:(e,t)=>async function(e,t,n={}){let s={};const o={...n,...t,responses:{...n?.responses,...t.responses}};for(const t of Object.keys(o.responses)){const n=o.responses[t];if(n&&"content"in n)for(const t of Object.keys(n.content??{})){const o=n.content?.[t];if(o&&(o.schema&&"builder"in o.schema)){const t=await o.schema.builder(e);o.schema=t.schema,t.components&&(s={...s,...t.components})}}}return{docs:o,components:s}}(e,o,t)}})},exports.generateSpecs=i,exports.openAPISpecs=function(e,t){const n={version:"3.1.0",components:{}};let s=null;return async o=>(s||(s=await i(e,t,n,o)),o.json(s))};
1
+ "use strict";var e=require("./utils.cjs"),t=require("hono/http-exception");const n=["GET","PUT","POST","DELETE","OPTIONS","HEAD","PATCH","TRACE"],s=e=>e.charAt(0).toUpperCase()+e.slice(1),o=new Map,a=(e,t)=>{const n=`${e}:${t}`;if(o.has(n))return o.get(n);let a=e;if("/"===t)return`${a}Index`;for(const e of t.split("/"))123===e.charCodeAt(0)?a+=`By${s(e.slice(1,-1))}`:a+=s(e);return o.set(n,a),a};function c({path:e,method:t,data:n,schema:s}){e=(e=>e.split("/").map((e=>{let t=e;return t.startsWith(":")&&(t=t.slice(1,t.length),t.endsWith("?")&&(t=t.slice(0,-1)),t=`{${t}}`),t})).join("/"))(e);const o=t.toLowerCase();s[e]={...s[e]?s[e]:{},[o]:{responses:{},operationId:a(o,e),...s[e]?.[o]??{},...n,parameters:r(s[e]?.[o]?.parameters??[],n.parameters??[])}}}function r(e,t){const n=e=>"$ref"in e?e.$ref:`${e.in} ${e.name}`;if(0===e.length||0===t.length)return 0===e.length?t:e;const s=t.reduce(((e,t)=>(e.set(n(t),t),e)),new Map),o=e.reduce(((e,t)=>{const o=n(t),a=s.get(o);return s.delete(o),e.push(a??t),e}),[]);return o.push(...s.values()),o}function i(e,{excludeStaticFile:t=!0,exclude:n=[]}){const s={},o=Array.isArray(n)?n:[n];for(const[n,a]of Object.entries(e))if(!(o.some((e=>"string"==typeof e?n===e:e.test(n)))||n.includes("*")||t&&n.includes("."))){for(const e of Object.keys(a)){const t=a[e];if(n.includes("{")){t.parameters||(t.parameters=[]);const e=n.split("/").filter((e=>e.startsWith("{")&&!t.parameters.find((t=>"path"===t.in&&t.name===e.slice(1,e.length-1)))));for(const n of e){const e=n.slice(1,n.length-1),s=t.parameters.findIndex((t=>"param"===t.in&&t.name===e));-1!==s?t.parameters[s].in="path":t.parameters.push({schema:{type:"string"},in:"path",name:e,required:!0})}}t.responses||(t.responses={200:{}})}s[n]=a}return s}async function p(t,{documentation:s={},excludeStaticFile:o=!0,exclude:a=[],excludeMethods:r=["OPTIONS"],excludeTags:p=[],defaultOptions:l}={documentation:{},excludeStaticFile:!0,exclude:[],excludeMethods:["OPTIONS"],excludeTags:[]},{version:u="3.1.0",components:d={}}={version:"3.1.0",components:{}},m){const h={version:u,components:d},f={};for(const s of t.routes){if(!(e.uniqueSymbol in s.handler))continue;if(r.includes(s.method))continue;if(!1===n.includes(s.method)&&"ALL"!==s.method)continue;const{resolver:t,metadata:o={}}=s.handler[e.uniqueSymbol],a=l?.[s.method],{docs:i,components:p}=await t({...h,...o},a);if(h.components={...h.components,...p??{}},"ALL"===s.method)for(const e of n)c({path:s.path,data:i,method:e,schema:f});else c({method:s.method,path:s.path,data:i,schema:f})}for(const e in f)for(const t in f[e]){const n=f[e][t]?.hide;n&&("boolean"==typeof n?n:m&&n(m))&&delete f[e][t]}return{openapi:h.version,...{...s,tags:s.tags?.filter((e=>!p?.includes(e?.name))),info:{title:"Hono Documentation",description:"Development documentation",version:"0.0.0",...s.info},paths:{...i(f,{excludeStaticFile:o,exclude:a}),...s.paths},components:{...s.components,schemas:{...h.components,...s.components?.schemas}}}}}async function l(e,t,n={}){let s={};const o={...n,...t,responses:{...n?.responses,...t.responses}};if(o.responses)for(const t of Object.keys(o.responses)){const n=o.responses[t];if(n&&"content"in n)for(const t of Object.keys(n.content??{})){const o=n.content?.[t];if(o&&(o.schema&&"builder"in o.schema)){const t=await o.schema.builder(e);o.schema=t.schema,t.components&&(s={...s,...t.components})}}}return{docs:o,components:s}}exports.generateValidatorDocs=e.generateValidatorDocs,exports.uniqueSymbol=e.uniqueSymbol,exports.describeRoute=function(n){const{validateResponse:s,...o}=n;return Object.assign((async(e,o)=>{if(await o(),s&&n.responses){const o=e.res.status,a=e.res.headers.get("content-type");if(o&&a){const c=n.responses[o];if(c&&"content"in c&&c.content){const n=a.split(";")[0],o=c.content[n];if(o?.schema&&"validator"in o.schema)try{let t;const s=e.res.clone();if("application/json"===n?t=await s.json():"text/plain"===n&&(t=await s.text()),!t)throw new Error("No data to validate!");await o.schema.validator(t)}catch(e){let n={status:500,message:"Response validation failed!"};throw"object"==typeof s&&(n={...n,...s}),new t.HTTPException(n.status,{message:n.message,cause:e})}}}}}),{[e.uniqueSymbol]:{resolver:(e,t)=>l(e,o,t)}})},exports.generateRouteSpecs=l,exports.generateSpecs=p,exports.openAPISpecs=function(e,t){const n={version:"3.1.0",components:{}};let s=null;return async o=>(s||(s=await p(e,t,n,o)),o.json(s))};
package/index.js CHANGED
@@ -1 +1 @@
1
- import{HTTPException as e}from"hono/http-exception";import{u as t}from"./utils.js";function n(n){const{validateResponse:s,...o}=n;return Object.assign((async(t,o)=>{if(await o(),s&&n.responses){const s=t.res.status,o=t.res.headers.get("content-type");if(s&&o){const c=n.responses[s];if(c&&"content"in c&&c.content){const n=o.split(";")[0],s=c.content[n];if(s?.schema&&"validator"in s.schema)try{let e;const o=t.res.clone();if("application/json"===n?e=await o.json():"text/plain"===n&&(e=await o.text()),!e)throw new Error("No data to validate!");await s.schema.validator(e)}catch(t){throw new e(400,{message:"Response validation failed!",cause:t})}}}}}),{[t]:{resolver:(e,t)=>async function(e,t,n={}){let s={};const o={...n,...t,responses:{...n?.responses,...t.responses}};for(const t of Object.keys(o.responses)){const n=o.responses[t];if(n&&"content"in n)for(const t of Object.keys(n.content??{})){const o=n.content?.[t];if(o&&(o.schema&&"builder"in o.schema)){const t=await o.schema.builder(e);o.schema=t.schema,t.components&&(s={...s,...t.components})}}}return{docs:o,components:s}}(e,o,t)}})}const s=["GET","PUT","POST","DELETE","OPTIONS","HEAD","PATCH","TRACE"],o=e=>e.charAt(0).toUpperCase()+e.slice(1),c=(e,t)=>{let n=e;if("/"===t)return`${n}Index`;for(const e of t.split("/"))123===e.charCodeAt(0)?n+=`By${o(e.slice(1,-1))}`:n+=o(e);return n};function a({path:e,method:t,data:n,schema:s}){e=(e=>e.split("/").map((e=>{let t=e;return t.startsWith(":")&&(t=t.slice(1,t.length),t.endsWith("?")&&(t=t.slice(0,-1)),t=`{${t}}`),t})).join("/"))(e);const o=t.toLowerCase();s[e]={...s[e]?s[e]:{},[o]:{responses:{},...s[e]?.[o]??{},operationId:c(o,e),...n}}}function i(e,{excludeStaticFile:t=!0,exclude:n=[]}){const s={},o=Array.isArray(n)?n:[n];for(const[n,c]of Object.entries(e))if(!(o.some((e=>"string"==typeof e?n===e:e.test(n)))||n.includes("*")||t&&n.includes("."))){for(const e of Object.keys(c)){const t=c[e];if(n.includes("{")){t.parameters||(t.parameters=[]);const e=n.split("/").filter((e=>e.startsWith("{")&&!t.parameters.find((t=>"path"===t.in&&t.name===e.slice(1,e.length-1)))));for(const n of e){const e=n.slice(1,n.length-1),s=t.parameters.findIndex((t=>"param"===t.in&&t.name===e));-1!==s?t.parameters[s].in="path":t.parameters.push({schema:{type:"string"},in:"path",name:e,required:!0})}}t.responses||(t.responses={200:{}})}s[n]=c}return s}function r(e,t){const n={version:"3.1.0",components:{}};let s=null;return async o=>(s||(s=await p(e,t,n,o)),o.json(s))}async function p(e,{documentation:n={},excludeStaticFile:o=!0,exclude:c=[],excludeMethods:r=["OPTIONS"],excludeTags:p=[],defaultOptions:l}={documentation:{},excludeStaticFile:!0,exclude:[],excludeMethods:["OPTIONS"],excludeTags:[]},{version:d="3.1.0",components:m={}}={version:"3.1.0",components:{}},h){const f={version:d,components:m},u={};for(const n of e.routes){if(!(t in n.handler))continue;if(r.includes(n.method))continue;if(!1===s.includes(n.method)&&"ALL"!==n.method)continue;const{resolver:e,metadata:o={}}=n.handler[t],c=l?.[n.method],{docs:i,components:p}=await e({...f,...o},c);if(f.components={...f.components,...p??{}},"ALL"===n.method)for(const e of s)a({path:n.path,data:i,method:e,schema:u});else a({method:n.method,path:n.path,data:i,schema:u})}for(const e in u)for(const t in u[e]){const n=u[e][t]?.hide;n&&("boolean"==typeof n?n:h&&n(h))&&delete u[e][t]}return{openapi:f.version,...{...n,tags:n.tags?.filter((e=>!p?.includes(e?.name))),info:{title:"Hono Documentation",description:"Development documentation",version:"0.0.0",...n.info},paths:{...i(u,{excludeStaticFile:o,exclude:c}),...n.paths},components:{...n.components,schemas:{...f.components,...n.components?.schemas}}}}}export{n as describeRoute,p as generateSpecs,r as openAPISpecs};
1
+ import{u as e}from"./utils.js";export{g as generateValidatorDocs}from"./utils.js";import{HTTPException as t}from"hono/http-exception";const n=["GET","PUT","POST","DELETE","OPTIONS","HEAD","PATCH","TRACE"],s=e=>e.charAt(0).toUpperCase()+e.slice(1),o=new Map,a=(e,t)=>{const n=`${e}:${t}`;if(o.has(n))return o.get(n);let a=e;if("/"===t)return`${a}Index`;for(const e of t.split("/"))123===e.charCodeAt(0)?a+=`By${s(e.slice(1,-1))}`:a+=s(e);return o.set(n,a),a};function c({path:e,method:t,data:n,schema:s}){e=(e=>e.split("/").map((e=>{let t=e;return t.startsWith(":")&&(t=t.slice(1,t.length),t.endsWith("?")&&(t=t.slice(0,-1)),t=`{${t}}`),t})).join("/"))(e);const o=t.toLowerCase();s[e]={...s[e]?s[e]:{},[o]:{responses:{},operationId:a(o,e),...s[e]?.[o]??{},...n,parameters:r(s[e]?.[o]?.parameters??[],n.parameters??[])}}}function r(e,t){const n=e=>"$ref"in e?e.$ref:`${e.in} ${e.name}`;if(0===e.length||0===t.length)return 0===e.length?t:e;const s=t.reduce(((e,t)=>(e.set(n(t),t),e)),new Map),o=e.reduce(((e,t)=>{const o=n(t),a=s.get(o);return s.delete(o),e.push(a??t),e}),[]);return o.push(...s.values()),o}function i(e,{excludeStaticFile:t=!0,exclude:n=[]}){const s={},o=Array.isArray(n)?n:[n];for(const[n,a]of Object.entries(e))if(!(o.some((e=>"string"==typeof e?n===e:e.test(n)))||n.includes("*")||t&&n.includes("."))){for(const e of Object.keys(a)){const t=a[e];if(n.includes("{")){t.parameters||(t.parameters=[]);const e=n.split("/").filter((e=>e.startsWith("{")&&!t.parameters.find((t=>"path"===t.in&&t.name===e.slice(1,e.length-1)))));for(const n of e){const e=n.slice(1,n.length-1),s=t.parameters.findIndex((t=>"param"===t.in&&t.name===e));-1!==s?t.parameters[s].in="path":t.parameters.push({schema:{type:"string"},in:"path",name:e,required:!0})}}t.responses||(t.responses={200:{}})}s[n]=a}return s}function p(e,t){const n={version:"3.1.0",components:{}};let s=null;return async o=>(s||(s=await l(e,t,n,o)),o.json(s))}async function l(t,{documentation:s={},excludeStaticFile:o=!0,exclude:a=[],excludeMethods:r=["OPTIONS"],excludeTags:p=[],defaultOptions:l}={documentation:{},excludeStaticFile:!0,exclude:[],excludeMethods:["OPTIONS"],excludeTags:[]},{version:m="3.1.0",components:d={}}={version:"3.1.0",components:{}},u){const h={version:m,components:d},f={};for(const s of t.routes){if(!(e in s.handler))continue;if(r.includes(s.method))continue;if(!1===n.includes(s.method)&&"ALL"!==s.method)continue;const{resolver:t,metadata:o={}}=s.handler[e],a=l?.[s.method],{docs:i,components:p}=await t({...h,...o},a);if(h.components={...h.components,...p??{}},"ALL"===s.method)for(const e of n)c({path:s.path,data:i,method:e,schema:f});else c({method:s.method,path:s.path,data:i,schema:f})}for(const e in f)for(const t in f[e]){const n=f[e][t]?.hide;n&&("boolean"==typeof n?n:u&&n(u))&&delete f[e][t]}return{openapi:h.version,...{...s,tags:s.tags?.filter((e=>!p?.includes(e?.name))),info:{title:"Hono Documentation",description:"Development documentation",version:"0.0.0",...s.info},paths:{...i(f,{excludeStaticFile:o,exclude:a}),...s.paths},components:{...s.components,schemas:{...h.components,...s.components?.schemas}}}}}function m(n){const{validateResponse:s,...o}=n;return Object.assign((async(e,o)=>{if(await o(),s&&n.responses){const o=e.res.status,a=e.res.headers.get("content-type");if(o&&a){const c=n.responses[o];if(c&&"content"in c&&c.content){const n=a.split(";")[0],o=c.content[n];if(o?.schema&&"validator"in o.schema)try{let t;const s=e.res.clone();if("application/json"===n?t=await s.json():"text/plain"===n&&(t=await s.text()),!t)throw new Error("No data to validate!");await o.schema.validator(t)}catch(e){let n={status:500,message:"Response validation failed!"};throw"object"==typeof s&&(n={...n,...s}),new t(n.status,{message:n.message,cause:e})}}}}}),{[e]:{resolver:(e,t)=>d(e,o,t)}})}async function d(e,t,n={}){let s={};const o={...n,...t,responses:{...n?.responses,...t.responses}};if(o.responses)for(const t of Object.keys(o.responses)){const n=o.responses[t];if(n&&"content"in n)for(const t of Object.keys(n.content??{})){const o=n.content?.[t];if(o&&(o.schema&&"builder"in o.schema)){const t=await o.schema.builder(e);o.schema=t.schema,t.components&&(s={...s,...t.components})}}}return{docs:o,components:s}}export{m as describeRoute,d as generateRouteSpecs,l as generateSpecs,p as openAPISpecs,e as uniqueSymbol};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "hono-openapi",
3
3
  "description": "OpenAPI schema generator for Hono",
4
- "version": "0.4.3",
4
+ "version": "0.4.5",
5
5
  "types": "./index.d.ts",
6
6
  "main": "./index.js",
7
7
  "type": "module",
package/src/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
- export { describeRoute } from "./route.js";
2
- export { openAPISpecs, generateSpecs } from "./openapi.js";
1
+ export { generateSpecs, openAPISpecs } from "./openapi.js";
2
+ export { describeRoute, generateRouteSpecs } from "./route.js";
3
3
  export type * from "./types.js";
4
+ export * from "./utils.js";
package/src/route.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import type { MiddlewareHandler } from "hono/types";
2
+ import type { ClientErrorStatusCode, ServerErrorStatusCode } from "hono/utils/http-status";
2
3
  import type { DescribeRouteOptions, OpenAPIRouteHandlerConfig } from "./types.js";
3
4
  /**
4
5
  * Describe a route with OpenAPI specs.
@@ -37,7 +38,10 @@ export declare function generateRouteSpecs(config: OpenAPIRouteHandlerConfig, do
37
38
  security?: import("openapi-types").OpenAPIV3.SecurityRequirementObject[];
38
39
  servers?: import("openapi-types").OpenAPIV3.ServerObject[];
39
40
  hide?: boolean | (<E extends import("hono").Env = import("hono").Env, P extends string = string, I extends import("hono").Input = import("hono/types").BlankInput>(c: import("hono").Context<E, P, I>) => boolean);
40
- validateResponse?: boolean;
41
+ validateResponse?: boolean | {
42
+ status: ClientErrorStatusCode | ServerErrorStatusCode;
43
+ message?: string;
44
+ };
41
45
  };
42
46
  components: {};
43
47
  }>;
package/src/types.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import type { Context, Env, Input } from "hono";
2
2
  import type { BlankInput } from "hono/types";
3
+ import type { ClientErrorStatusCode, ServerErrorStatusCode } from "hono/utils/http-status";
3
4
  import type { OpenAPIV3 } from "openapi-types";
4
5
  import type { ALLOWED_METHODS } from "./helper.js";
5
6
  export type HasUndefined<T> = undefined extends T ? true : false;
@@ -32,7 +33,10 @@ export type DescribeRouteOptions = Omit<OpenAPIV3.OperationObject, "responses">
32
33
  /**
33
34
  * Validate response of the route
34
35
  */
35
- validateResponse?: boolean;
36
+ validateResponse?: boolean | {
37
+ status: ClientErrorStatusCode | ServerErrorStatusCode;
38
+ message?: string;
39
+ };
36
40
  /**
37
41
  * Responses of the request
38
42
  */
package/src/utils.d.ts CHANGED
@@ -1,7 +1,13 @@
1
1
  import type { ValidationTargets } from "hono";
2
2
  import type { OpenAPIV3 } from "openapi-types";
3
3
  import type { ResolverResult } from "./types.js";
4
+ /**
5
+ * The unique symbol for the middlewares, which makes it easier to identify them. Not meant to be used directly, unless you're creating a custom middleware.
6
+ */
4
7
  export declare const uniqueSymbol: unique symbol;
8
+ /**
9
+ * Generate OpenAPI docs for a validator middleware. Not meant to be used directly, unless you're creating a custom middleware.
10
+ */
5
11
  export declare function generateValidatorDocs<Target extends keyof ValidationTargets>(target: Target, _result: ReturnType<ResolverResult["builder"]>): Promise<{
6
12
  docs: Pick<{
7
13
  tags?: string[];
package/src/valibot.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { type Hook } from "@hono/valibot-validator";
2
+ import { type ConversionConfig } from "@valibot/to-json-schema";
2
3
  import type { Env, Input as HonoInput, MiddlewareHandler, ValidationTargets } from "hono";
3
4
  import { type BaseIssue, type BaseSchema, type GenericSchema, type GenericSchemaAsync, type InferInput, type InferOutput } from "valibot";
4
5
  import type { HasUndefined, ResolverResult } from "./types.js";
@@ -7,7 +8,7 @@ import type { HasUndefined, ResolverResult } from "./types.js";
7
8
  * @param schema Valibot schema
8
9
  * @returns Resolver result
9
10
  */
10
- export declare function resolver<T extends BaseSchema<unknown, unknown, BaseIssue<unknown>>>(schema: T): ResolverResult;
11
+ export declare function resolver<T extends BaseSchema<unknown, unknown, BaseIssue<unknown>>>(schema: T, config?: ConversionConfig): ResolverResult;
11
12
  /**
12
13
  * Create a validator middleware
13
14
  * @param target Target for validation
@@ -1 +1 @@
1
- "use strict";var e=require("json-schema-walker");const t=["$ref","definitions","title","multipleOf","maximum","exclusiveMaximum","minimum","exclusiveMinimum","maxLength","minLength","pattern","maxItems","minItems","uniqueItems","maxProperties","minProperties","required","enum","type","not","allOf","oneOf","anyOf","items","properties","additionalProperties","description","format","default","nullable","discriminator","readOnly","writeOnly","example","externalDocs","deprecated","xml"];let n=class extends Error{constructor(e){super(e),this.name="InvalidTypeError",this.message=e}};const i="x-",r=async(t,n)=>{if("object"!=typeof t)return t;if(t.type){const i=new e.Walker;return await i.loadSchema({definitions:n.definitions||[],...t,$schema:n.$schema},{dereference:!0,cloneSchema:!0,dereferenceOptions:{dereference:{circular:"ignore"}}}),await i.walk(o,i.vocabularies.DRAFT_07),"definitions"in i.rootSchema&&(i.rootSchema.definitions=void 0),i.rootSchema}if(Array.isArray(t)){const e=t;if(e.includes("null")){const t=e.filter((e=>"null"!==e));return{type:1===t.length?t[0]:t,nullable:!0}}}return t};function o(e){let r=e;return r?(r=function(e){return"object"!=typeof e||(e.$schema=void 0,e.$id=void 0,"id"in e&&(e.id=void 0)),e}(r),r=function(e){if("object"!=typeof e)return e;if(void 0===e.type)return e;if(function(e){if("object"==typeof e&&!Array.isArray(e)){if(e&&"$ref"in e&&e.$ref)return;if(e&&"properties"in e&&e.properties)return}const t=Array.isArray(e)?e:[e];for(const e of t)if(e&&!a.has(e))throw new n(`Type "${e}" is not a valid type`)}(e.type),Array.isArray(e.type)){e.type.includes("null")&&(e.nullable=!0);const t=e.type.filter((e=>"null"!==e));0===t.length?e.type=void 0:1===t.length?e.type=t[0]:(e.type=void 0,e.anyOf=t.map((e=>({type:e}))))}else"null"===e.type&&(e.type=void 0,e.nullable=!0);return e}(r),r=function(e){Object.hasOwnProperty.call(e,"const")&&(e.enum=[e.const],e.const=void 0);return e}(r),r=function(e){const t=e.dependencies;if("object"!=typeof t)return e;e.dependencies=void 0,Array.isArray(e.allOf)||(e.allOf=[]);for(const n in t){const i={oneOf:[{not:{required:[n]}},{required:[n,t[n]].flat()}]};e.allOf.push(i)}return e}(r),r=function(e){for(const t of["oneOf","anyOf"]){const n=e[t];if(!n)continue;if(!Array.isArray(n))return e;if(!n.some((e=>"null"===e.type)))return e;const i=n.filter((e=>"null"!==e.type));for(const e of i)e.nullable=!0;e[t]=i}return e}(r),r=function(e){if("object"!=typeof e)return e;"if"in e&&e.if&&e.then&&(e.oneOf=[{allOf:[e.if,e.then].filter(Boolean)},{allOf:[{not:e.if},e.else].filter(Boolean)}],e.if=void 0,e.then=void 0,e.else=void 0);return e}(r),r=function(e){"number"==typeof e.exclusiveMaximum&&(e.maximum=e.exclusiveMaximum,e.exclusiveMaximum=!0);"number"==typeof e.exclusiveMinimum&&(e.minimum=e.exclusiveMinimum,e.exclusiveMinimum=!0);return e}(r),r=function(e){e.examples&&Array.isArray(e.examples)&&(e.example=e.examples[0],e.examples=void 0);return e}(r),"object"==typeof r.patternProperties&&(r=function(e){return e["x-patternProperties"]=e.patternProperties,e.patternProperties=void 0,e.additionalProperties??=!0,e}(r)),"array"===r.type&&void 0===r.items&&(r.items={}),r=function(e){const n=Object.keys(e);for(const r of n)if(!r.startsWith(i)&&!t.includes(r)){e[`${i}${r}`]=e[r],e[r]=void 0}return e}(r),r):r}const a=new Set(["null","boolean","object","array","number","string","integer"]);exports.convert=async(t,n)=>{const i=new e.Walker;await i.loadSchema(t,n),await i.walk(o,i.vocabularies.DRAFT_07);const a=i.rootSchema;if(a?.definitions)for(const e in a.definitions){const n=a.definitions[e];a.definitions[e]=await r(n,t)}return a};
1
+ "use strict";var e=require("json-schema-walker");const t=["$ref","definitions","title","multipleOf","maximum","exclusiveMaximum","minimum","exclusiveMinimum","maxLength","minLength","pattern","maxItems","minItems","uniqueItems","maxProperties","minProperties","required","enum","type","not","allOf","oneOf","anyOf","items","properties","additionalProperties","description","format","default","nullable","discriminator","readOnly","writeOnly","example","externalDocs","deprecated","xml"];let n=class extends Error{constructor(e){super(e),this.name="InvalidTypeError",this.message=e}};const i="x-",r=async(t,n)=>{if("object"!=typeof t)return t;if(t.type){const i=new e.Walker;return await i.loadSchema({definitions:n.definitions||[],...t,$schema:n.$schema},{dereference:!0,cloneSchema:!0,dereferenceOptions:{dereference:{circular:"ignore"}}}),await i.walk(o,i.vocabularies.DRAFT_07),"definitions"in i.rootSchema&&(i.rootSchema.definitions=void 0),i.rootSchema}if(Array.isArray(t)){const e=t;if(e.includes("null")){const t=e.filter((e=>"null"!==e));return{type:1===t.length?t[0]:t,nullable:!0}}}return t};function o(e){let r=e;return r?(r=function(e){return"object"!=typeof e||(e.$schema=void 0,e.$id=void 0,"id"in e&&(e.id=void 0)),e}(r),r=function(e){if("object"!=typeof e)return e;if(void 0===e.type)return e;if(function(e){if("object"==typeof e&&!Array.isArray(e)){if(e&&"$ref"in e&&e.$ref)return;if(e&&"properties"in e&&e.properties)return}const t=Array.isArray(e)?e:[e];for(const e of t)if(e&&!a.has(e))throw new n(`Type "${e}" is not a valid type`)}(e.type),Array.isArray(e.type)){e.type.includes("null")&&(e.nullable=!0);const t=e.type.filter((e=>"null"!==e));0===t.length?e.type=void 0:1===t.length?e.type=t[0]:(e.type=void 0,e.anyOf=t.map((e=>({type:e}))))}else"null"===e.type&&(e.type=void 0,e.nullable=!0);return e}(r),r=function(e){void 0!==e.const&&(e.enum=[e.const],e.const=void 0);return e}(r),r=function(e){const t=e.dependencies;if("object"!=typeof t)return e;e.dependencies=void 0,Array.isArray(e.allOf)||(e.allOf=[]);for(const n in t){const i={oneOf:[{not:{required:[n]}},{required:[n,t[n]].flat()}]};e.allOf.push(i)}return e}(r),r=function(e){for(const t of["oneOf","anyOf"]){const n=e[t];if(!n)continue;if(!Array.isArray(n))return e;if(!n.some((e=>"null"===e.type)))return e;const i=n.filter((e=>"null"!==e.type));for(const e of i)e.nullable=!0;e[t]=i}return e}(r),r=function(e){if("object"!=typeof e)return e;"if"in e&&e.if&&e.then&&(e.oneOf=[{allOf:[e.if,e.then].filter(Boolean)},{allOf:[{not:e.if},e.else].filter(Boolean)}],e.if=void 0,e.then=void 0,e.else=void 0);return e}(r),r=function(e){"number"==typeof e.exclusiveMaximum&&(e.maximum=e.exclusiveMaximum,e.exclusiveMaximum=!0);"number"==typeof e.exclusiveMinimum&&(e.minimum=e.exclusiveMinimum,e.exclusiveMinimum=!0);return e}(r),r=function(e){e.examples&&Array.isArray(e.examples)&&(e.example=e.examples[0],e.examples=void 0);return e}(r),"object"==typeof r.patternProperties&&(r=function(e){return e["x-patternProperties"]=e.patternProperties,e.patternProperties=void 0,e.additionalProperties??=!0,e}(r)),"array"===r.type&&void 0===r.items&&(r.items={}),r=function(e){const n=Object.keys(e);for(const r of n)if(!r.startsWith(i)&&!t.includes(r)){e[`${i}${r}`]=e[r],e[r]=void 0}return e}(r),r):r}const a=new Set(["null","boolean","object","array","number","string","integer"]);exports.convert=async(t,n)=>{const i=new e.Walker;await i.loadSchema(t,n),await i.walk(o,i.vocabularies.DRAFT_07);const a=i.rootSchema;if(a?.definitions)for(const e in a.definitions){const n=a.definitions[e];a.definitions[e]=await r(n,t)}return a};
@@ -1 +1 @@
1
- import{Walker as e}from"json-schema-walker";const t=["$ref","definitions","title","multipleOf","maximum","exclusiveMaximum","minimum","exclusiveMinimum","maxLength","minLength","pattern","maxItems","minItems","uniqueItems","maxProperties","minProperties","required","enum","type","not","allOf","oneOf","anyOf","items","properties","additionalProperties","description","format","default","nullable","discriminator","readOnly","writeOnly","example","externalDocs","deprecated","xml"];let n=class extends Error{constructor(e){super(e),this.name="InvalidTypeError",this.message=e}};const i="x-",r=async(t,n)=>{if("object"!=typeof t)return t;if(t.type){const i=new e;return await i.loadSchema({definitions:n.definitions||[],...t,$schema:n.$schema},{dereference:!0,cloneSchema:!0,dereferenceOptions:{dereference:{circular:"ignore"}}}),await i.walk(a,i.vocabularies.DRAFT_07),"definitions"in i.rootSchema&&(i.rootSchema.definitions=void 0),i.rootSchema}if(Array.isArray(t)){const e=t;if(e.includes("null")){const t=e.filter((e=>"null"!==e));return{type:1===t.length?t[0]:t,nullable:!0}}}return t},o=async(t,n)=>{const i=new e;await i.loadSchema(t,n),await i.walk(a,i.vocabularies.DRAFT_07);const o=i.rootSchema;if(o?.definitions)for(const e in o.definitions){const n=o.definitions[e];o.definitions[e]=await r(n,t)}return o};function a(e){let r=e;return r?(r=function(e){return"object"!=typeof e||(e.$schema=void 0,e.$id=void 0,"id"in e&&(e.id=void 0)),e}(r),r=function(e){if("object"!=typeof e)return e;if(void 0===e.type)return e;if(function(e){if("object"==typeof e&&!Array.isArray(e)){if(e&&"$ref"in e&&e.$ref)return;if(e&&"properties"in e&&e.properties)return}const t=Array.isArray(e)?e:[e];for(const e of t)if(e&&!s.has(e))throw new n(`Type "${e}" is not a valid type`)}(e.type),Array.isArray(e.type)){e.type.includes("null")&&(e.nullable=!0);const t=e.type.filter((e=>"null"!==e));0===t.length?e.type=void 0:1===t.length?e.type=t[0]:(e.type=void 0,e.anyOf=t.map((e=>({type:e}))))}else"null"===e.type&&(e.type=void 0,e.nullable=!0);return e}(r),r=function(e){Object.hasOwnProperty.call(e,"const")&&(e.enum=[e.const],e.const=void 0);return e}(r),r=function(e){const t=e.dependencies;if("object"!=typeof t)return e;e.dependencies=void 0,Array.isArray(e.allOf)||(e.allOf=[]);for(const n in t){const i={oneOf:[{not:{required:[n]}},{required:[n,t[n]].flat()}]};e.allOf.push(i)}return e}(r),r=function(e){for(const t of["oneOf","anyOf"]){const n=e[t];if(!n)continue;if(!Array.isArray(n))return e;if(!n.some((e=>"null"===e.type)))return e;const i=n.filter((e=>"null"!==e.type));for(const e of i)e.nullable=!0;e[t]=i}return e}(r),r=function(e){if("object"!=typeof e)return e;"if"in e&&e.if&&e.then&&(e.oneOf=[{allOf:[e.if,e.then].filter(Boolean)},{allOf:[{not:e.if},e.else].filter(Boolean)}],e.if=void 0,e.then=void 0,e.else=void 0);return e}(r),r=function(e){"number"==typeof e.exclusiveMaximum&&(e.maximum=e.exclusiveMaximum,e.exclusiveMaximum=!0);"number"==typeof e.exclusiveMinimum&&(e.minimum=e.exclusiveMinimum,e.exclusiveMinimum=!0);return e}(r),r=function(e){e.examples&&Array.isArray(e.examples)&&(e.example=e.examples[0],e.examples=void 0);return e}(r),"object"==typeof r.patternProperties&&(r=function(e){return e["x-patternProperties"]=e.patternProperties,e.patternProperties=void 0,e.additionalProperties??=!0,e}(r)),"array"===r.type&&void 0===r.items&&(r.items={}),r=function(e){const n=Object.keys(e);for(const r of n)if(!r.startsWith(i)&&!t.includes(r)){e[`${i}${r}`]=e[r],e[r]=void 0}return e}(r),r):r}const s=new Set(["null","boolean","object","array","number","string","integer"]);export{o as c};
1
+ import{Walker as e}from"json-schema-walker";const t=["$ref","definitions","title","multipleOf","maximum","exclusiveMaximum","minimum","exclusiveMinimum","maxLength","minLength","pattern","maxItems","minItems","uniqueItems","maxProperties","minProperties","required","enum","type","not","allOf","oneOf","anyOf","items","properties","additionalProperties","description","format","default","nullable","discriminator","readOnly","writeOnly","example","externalDocs","deprecated","xml"];let n=class extends Error{constructor(e){super(e),this.name="InvalidTypeError",this.message=e}};const i="x-",r=async(t,n)=>{if("object"!=typeof t)return t;if(t.type){const i=new e;return await i.loadSchema({definitions:n.definitions||[],...t,$schema:n.$schema},{dereference:!0,cloneSchema:!0,dereferenceOptions:{dereference:{circular:"ignore"}}}),await i.walk(a,i.vocabularies.DRAFT_07),"definitions"in i.rootSchema&&(i.rootSchema.definitions=void 0),i.rootSchema}if(Array.isArray(t)){const e=t;if(e.includes("null")){const t=e.filter((e=>"null"!==e));return{type:1===t.length?t[0]:t,nullable:!0}}}return t},o=async(t,n)=>{const i=new e;await i.loadSchema(t,n),await i.walk(a,i.vocabularies.DRAFT_07);const o=i.rootSchema;if(o?.definitions)for(const e in o.definitions){const n=o.definitions[e];o.definitions[e]=await r(n,t)}return o};function a(e){let r=e;return r?(r=function(e){return"object"!=typeof e||(e.$schema=void 0,e.$id=void 0,"id"in e&&(e.id=void 0)),e}(r),r=function(e){if("object"!=typeof e)return e;if(void 0===e.type)return e;if(function(e){if("object"==typeof e&&!Array.isArray(e)){if(e&&"$ref"in e&&e.$ref)return;if(e&&"properties"in e&&e.properties)return}const t=Array.isArray(e)?e:[e];for(const e of t)if(e&&!s.has(e))throw new n(`Type "${e}" is not a valid type`)}(e.type),Array.isArray(e.type)){e.type.includes("null")&&(e.nullable=!0);const t=e.type.filter((e=>"null"!==e));0===t.length?e.type=void 0:1===t.length?e.type=t[0]:(e.type=void 0,e.anyOf=t.map((e=>({type:e}))))}else"null"===e.type&&(e.type=void 0,e.nullable=!0);return e}(r),r=function(e){void 0!==e.const&&(e.enum=[e.const],e.const=void 0);return e}(r),r=function(e){const t=e.dependencies;if("object"!=typeof t)return e;e.dependencies=void 0,Array.isArray(e.allOf)||(e.allOf=[]);for(const n in t){const i={oneOf:[{not:{required:[n]}},{required:[n,t[n]].flat()}]};e.allOf.push(i)}return e}(r),r=function(e){for(const t of["oneOf","anyOf"]){const n=e[t];if(!n)continue;if(!Array.isArray(n))return e;if(!n.some((e=>"null"===e.type)))return e;const i=n.filter((e=>"null"!==e.type));for(const e of i)e.nullable=!0;e[t]=i}return e}(r),r=function(e){if("object"!=typeof e)return e;"if"in e&&e.if&&e.then&&(e.oneOf=[{allOf:[e.if,e.then].filter(Boolean)},{allOf:[{not:e.if},e.else].filter(Boolean)}],e.if=void 0,e.then=void 0,e.else=void 0);return e}(r),r=function(e){"number"==typeof e.exclusiveMaximum&&(e.maximum=e.exclusiveMaximum,e.exclusiveMaximum=!0);"number"==typeof e.exclusiveMinimum&&(e.minimum=e.exclusiveMinimum,e.exclusiveMinimum=!0);return e}(r),r=function(e){e.examples&&Array.isArray(e.examples)&&(e.example=e.examples[0],e.examples=void 0);return e}(r),"object"==typeof r.patternProperties&&(r=function(e){return e["x-patternProperties"]=e.patternProperties,e.patternProperties=void 0,e.additionalProperties??=!0,e}(r)),"array"===r.type&&void 0===r.items&&(r.items={}),r=function(e){const n=Object.keys(e);for(const r of n)if(!r.startsWith(i)&&!t.includes(r)){e[`${i}${r}`]=e[r],e[r]=void 0}return e}(r),r):r}const s=new Set(["null","boolean","object","array","number","string","integer"]);export{o as c};
package/utils.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";const e=Symbol("openapi");exports.generateValidatorDocs=async function(e,s){const n=await s,o={};if("form"===e||"json"===e)o.requestBody={content:{["json"===e?"application/json":"application/x-www-form-urlencoded"]:{schema:n.schema}}};else{const s=[];if("$ref"in n.schema)s.push({in:e,name:n.schema.$ref,schema:n.schema});else for(const[o,c]of Object.entries(n.schema.properties??{}))s.push({in:e,name:o,schema:c,required:n.schema.required?.includes(o)});o.parameters=s}return{docs:o,components:n.components}},exports.uniqueSymbol=e;
1
+ "use strict";const e=Symbol("openapi");exports.generateValidatorDocs=async function(e,s){const n=await s,o={};if("form"===e||"json"===e)o.requestBody={content:{["json"===e?"application/json":"multipart/form-data"]:{schema:n.schema}}};else{const s=[];if("$ref"in n.schema)s.push({in:e,name:n.schema.$ref,schema:n.schema});else for(const[o,t]of Object.entries(n.schema.properties??{}))s.push({in:e,name:o,schema:t,required:n.schema.required?.includes(o)});o.parameters=s}return{docs:o,components:n.components}},exports.uniqueSymbol=e;
package/utils.js CHANGED
@@ -1 +1 @@
1
- const e=Symbol("openapi");async function s(e,s){const n=await s,o={};if("form"===e||"json"===e)o.requestBody={content:{["json"===e?"application/json":"application/x-www-form-urlencoded"]:{schema:n.schema}}};else{const s=[];if("$ref"in n.schema)s.push({in:e,name:n.schema.$ref,schema:n.schema});else for(const[o,c]of Object.entries(n.schema.properties??{}))s.push({in:e,name:o,schema:c,required:n.schema.required?.includes(o)});o.parameters=s}return{docs:o,components:n.components}}export{s as g,e as u};
1
+ const e=Symbol("openapi");async function s(e,s){const n=await s,a={};if("form"===e||"json"===e)a.requestBody={content:{["json"===e?"application/json":"multipart/form-data"]:{schema:n.schema}}};else{const s=[];if("$ref"in n.schema)s.push({in:e,name:n.schema.$ref,schema:n.schema});else for(const[a,o]of Object.entries(n.schema.properties??{}))s.push({in:e,name:a,schema:o,required:n.schema.required?.includes(a)});a.parameters=s}return{docs:a,components:n.components}}export{s as g,e as u};
package/valibot.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var e=require("@hono/valibot-validator"),r=require("@valibot/to-json-schema"),a=require("valibot"),t=require("./toOpenAPISchema.cjs"),o=require("./utils.cjs");function i(e){return{builder:async a=>({schema:await t.convert(r.toJsonSchema(e))}),validator:async r=>{await a.parseAsync(e,r)}}}require("json-schema-walker"),exports.resolver=i,exports.validator=function(r,a,t){const s=e.vValidator(r,a,t);return Object.assign(s,{[o.uniqueSymbol]:{resolver:async e=>o.generateValidatorDocs(r,await i(a).builder(e))}})};
1
+ "use strict";var e=require("@hono/valibot-validator"),r=require("@valibot/to-json-schema"),a=require("valibot"),t=require("./toOpenAPISchema.cjs"),o=require("./utils.cjs");function i(e,o){return{builder:async a=>({schema:await t.convert(r.toJsonSchema(e,o))}),validator:async r=>{await a.parseAsync(e,r)}}}require("json-schema-walker"),exports.resolver=i,exports.validator=function(r,a,t){const s=e.vValidator(r,a,t);return Object.assign(s,{[o.uniqueSymbol]:{resolver:async e=>o.generateValidatorDocs(r,await i(a).builder(e))}})};
package/valibot.js CHANGED
@@ -1 +1 @@
1
- import{vValidator as o}from"@hono/valibot-validator";import{toJsonSchema as a}from"@valibot/to-json-schema";import{parseAsync as t}from"valibot";import{c as r}from"./toOpenAPISchema.js";import{u as i,g as s}from"./utils.js";import"json-schema-walker";function m(o){return{builder:async t=>({schema:await r(a(o))}),validator:async a=>{await t(o,a)}}}function n(a,t,r){const n=o(a,t,r);return Object.assign(n,{[i]:{resolver:async o=>s(a,await m(t).builder(o))}})}export{m as resolver,n as validator};
1
+ import{vValidator as o}from"@hono/valibot-validator";import{toJsonSchema as a}from"@valibot/to-json-schema";import{parseAsync as t}from"valibot";import{c as r}from"./toOpenAPISchema.js";import{u as i,g as s}from"./utils.js";import"json-schema-walker";function m(o,i){return{builder:async t=>({schema:await r(a(o,i))}),validator:async a=>{await t(o,a)}}}function n(a,t,r){const n=o(a,t,r);return Object.assign(n,{[i]:{resolver:async o=>s(a,await m(t).builder(o))}})}export{m as resolver,n as validator};