UNPKG

@zodios/express

Version:
7 lines (4 loc) 2.33 kB
import x from 'express'; import { z as z$1 } from 'zod'; function P(t,e){return e.map(o=>({...o,path:`${t}${o.path}`}))}function d(t,e){var o,a,s,n;return ((o=t._def)==null?void 0:o.typeName)===e?!0:((a=t._def)==null?void 0:a.typeName)===z$1.ZodFirstPartyTypeKind.ZodEffects&&t._def.effect.type==="refinement"?d(t.innerType(),e):(s=t._def)!=null&&s.innerType?d((n=t._def)==null?void 0:n.innerType,e):!1}function f(t){var e;return ((e=t._def)==null?void 0:e.typeName)===z$1.ZodFirstPartyTypeKind.ZodEffects?f(t.innerType()):t}var R=["get","post","put","patch","delete"];async function l(t,e){return !d(t,z$1.ZodFirstPartyTypeKind.ZodString)&&e&&typeof e=="string"?z$1.preprocess(o=>{try{return JSON.parse(o)}catch{return o}},t).safeParseAsync(e):t.safeParseAsync(e)}function E(t,e){return async(o,a,s)=>{for(let n of t.parameters){let i=n.schema;switch(e||(i=f(i)),n.type){case"Body":{let r=await i.safeParseAsync(o.body);if(!r.success)return s({context:"body",error:r.error.issues});o.body=r.data;}break;case"Path":{let r=await l(i,o.params[n.name]);if(!r.success)return s({context:`path.${n.name}`,error:r.error.issues});o.params[n.name]=r.data;}break;case"Query":{let r=await l(i,o.query[n.name]);if(!r.success)return s({context:`query.${n.name}`,error:r.error.issues});o.query[n.name]=r.data;}break;case"Header":{let r=await n.schema.safeParseAsync(o.get(n.name));if(!r.success)return s({context:`header.${n.name}`,error:r.error.issues});o.headers[n.name]=r.data;}break}}s();}}function u(t,e,o,a){for(let s of R){let n=e[s].bind(e);e[s]=(i,...r)=>{let p=t.find(y=>y.method===s&&y.path===i);return p&&p.parameters&&(r=[E(p,o),a,...r]),n(i,...r)};}}function Z(t,e={}){let{express:o=x(),enableJsonBodyParser:a=!0,validate:s=!0,transform:n=!1,validationErrorHandler:i=b}=e;return a&&o.use(x.json()),t&&s&&u(t,o,n,i),o}function C(t,e={}){let{validate:o=!0,transform:a=!1,validationErrorHandler:s=b,...n}=e,i=(e==null?void 0:e.router)??x.Router(n);return o&&u(t,i,a,s),i}function O(t,e={}){return Z(t,{...e,enableJsonBodyParser:!1})}var c=class{constructor(e){this.context=e;}app(e,o={}){return Z(e,o)}nextApp(e,o={}){return O(e,o)}router(e,o){return C(e,o)}};function z(t){return new c(t)}function b(t,e,o,a){o.status(400).json(t);} export { P as prefixApi, Z as zodiosApp, z as zodiosContext, O as zodiosNextApp, C as zodiosRouter };