express-zod-api 18.4.0 → 18.5.0-beta1

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/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
- var Bt=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});function Xr(e){return e}import rr from"assert/strict";import{z as ft}from"zod";import{z as eo}from"zod";var ne={positive:200,negative:400},nt=(e,t)=>e instanceof eo.ZodType?[{...t,schema:e}]:(Array.isArray(e)?e:[e]).map(({schema:r,statusCodes:o,statusCode:i,mimeTypes:s,mimeType:a})=>({schema:r,statusCodes:i?[i]:o||t.statusCodes,mimeTypes:a?[a]:s||t.mimeTypes}));import{z as To}from"zod";import{isHttpError as to}from"http-errors";import{createHash as ro}from"crypto";import{flip as oo,pickBy as no,xprod as io}from"ramda";import{z as so}from"zod";var ie=class extends Error{name="RoutingError"},C=class extends Error{name="DocumentationError";constructor({message:t,method:r,path:o,isResponse:i}){let s=`${t}
2
- Caused by ${i?"response":"input"} schema of an Endpoint assigned to ${r.toUpperCase()} method of ${o} path.`;super(s)}},L=class extends Error{name="IOSchemaError"},V=class extends L{name="OutputValidationError";originalError;constructor(t){super(H(t)),this.originalError=t}},j=class extends L{name="InputValidationError";originalError;constructor(t){super(H(t)),this.originalError=t}},_=class extends Error{name="ResultHandlerError";originalError;constructor(t,r){super(t),this.originalError=r||void 0}},se=class extends Error{name="MissingPeerError";constructor(t){let r=Array.isArray(t);super(`Missing ${r?"one of the following peer dependencies":"peer dependency"}: ${r?t.join(" | "):t}. Please install it to use the feature.`)}};var D="application/json",ve="multipart/form-data",$t="application/octet-stream";var ao=e=>{let r=(e.header("content-type")||"").toLowerCase().startsWith(ve);return"files"in e&&r},it={get:["query","params"],post:["body","params","files"],put:["body","params"],patch:["body","params"],delete:["query","params"]},po=["body","query","params"],st=e=>e.method.toLowerCase(),at=e=>e.startsWith("x-"),co=e=>no(oo(at),e),Vt=(e,t={})=>{let r=st(e);return r==="options"?{}:(t[r]||it[r]||po).filter(o=>o==="files"?ao(e):!0).map(o=>o==="headers"?co(e[o]):e[o]).reduce((o,i)=>({...o,...i}),{})},ae=e=>e instanceof Error?e:new Error(typeof e=="symbol"?e.toString():`${e}`),H=e=>e instanceof so.ZodError?e.issues.map(({path:t,message:r})=>(t.length?[t.join("/")]:[]).concat(r).join(": ")).join("; "):e instanceof V?`output${e.originalError.issues[0]?.path.length>0?"/":": "}${e.message}`:e.message,De=e=>to(e)?e.statusCode:e instanceof j?400:500,pt=({logger:e,request:t,input:r,error:o,statusCode:i})=>{i===500&&e.error(`Internal server error
1
+ var Bt=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});function eo(e){return e}import or from"assert/strict";import{z as ft}from"zod";import{z as to}from"zod";var oe={positive:200,negative:400},nt=(e,t)=>e instanceof to.ZodType?[{...t,schema:e}]:(Array.isArray(e)?e:[e]).map(({schema:r,statusCodes:o,statusCode:i,mimeTypes:s,mimeType:a})=>({schema:r,statusCodes:i?[i]:o||t.statusCodes,mimeTypes:a?[a]:s||t.mimeTypes}));import{z as So}from"zod";import{isHttpError as ro}from"http-errors";import{createHash as oo}from"crypto";import{flip as no,pickBy as io,xprod as so}from"ramda";import{z as ao}from"zod";var ne=class extends Error{name="RoutingError"},I=class extends Error{name="DocumentationError";constructor({message:t,method:r,path:o,isResponse:i}){let s=`${t}
2
+ Caused by ${i?"response":"input"} schema of an Endpoint assigned to ${r.toUpperCase()} method of ${o} path.`;super(s)}},k=class extends Error{name="IOSchemaError"},$=class extends k{name="OutputValidationError";originalError;constructor(t){super(j(t)),this.originalError=t}},L=class extends k{name="InputValidationError";originalError;constructor(t){super(j(t)),this.originalError=t}},V=class extends Error{name="ResultHandlerError";originalError;constructor(t,r){super(t),this.originalError=r||void 0}},ie=class extends Error{name="MissingPeerError";constructor(t){let r=Array.isArray(t);super(`Missing ${r?"one of the following peer dependencies":"peer dependency"}: ${r?t.join(" | "):t}. Please install it to use the feature.`)}};var v="application/json",Ne="multipart/form-data",$t="application/octet-stream";var po=e=>{let r=(e.header("content-type")||"").toLowerCase().startsWith(Ne);return"files"in e&&r},it={get:["query","params"],post:["body","params","files"],put:["body","params"],patch:["body","params"],delete:["query","params"]},co=["body","query","params"],st=e=>e.method.toLowerCase(),at=e=>e.startsWith("x-"),mo=e=>io(no(at),e),Vt=(e,t={})=>{let r=st(e);return r==="options"?{}:(t[r]||it[r]||co).filter(o=>o==="files"?po(e):!0).map(o=>o==="headers"?mo(e[o]):e[o]).reduce((o,i)=>({...o,...i}),{})},se=e=>e instanceof Error?e:new Error(typeof e=="symbol"?e.toString():`${e}`),j=e=>e instanceof ao.ZodError?e.issues.map(({path:t,message:r})=>(t.length?[t.join("/")]:[]).concat(r).join(": ")).join("; "):e instanceof $?`output${e.originalError.issues[0]?.path.length>0?"/":": "}${e.message}`:e.message,ve=e=>ro(e)?e.statusCode:e instanceof L?400:500,pt=({logger:e,request:t,input:r,error:o,statusCode:i})=>{i===500&&e.error(`Internal server error
3
3
  ${o.stack}
4
- `,{url:t.url,payload:r})},U=({schema:e,variant:t="original",validate:r=t==="parsed"})=>{let o=Y(e,"examples")||[];if(!r&&t==="original")return o;let i=[];for(let s of o){let a=e.safeParse(s);a.success&&i.push(t==="parsed"?a.data:s)}return i},G=(e,t,r)=>e.length&&t.length?io(e,t).map(r):e.concat(t),Te=e=>"coerce"in e._def&&typeof e._def.coerce=="boolean"?e._def.coerce:!1,dt=e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase(),I=(...e)=>e.flatMap(t=>t.split(/[^A-Z0-9]/gi)).flatMap(t=>t.replaceAll(/[A-Z]+/g,r=>`/${r}`).split("/")).map(dt).join(""),ke=e=>ro("sha1").update(JSON.stringify(e),"utf8").digest("hex"),Le=(e,t)=>{try{return typeof e.parse(t)}catch{return}},E=e=>typeof e=="object"&&e!==null;import{z as mo}from"zod";import{clone as lo,mergeDeepRight as uo}from"ramda";var Z="expressZodApiMeta",fo=e=>e.describe(e.description),M=e=>{let t=fo(e);return t._def[Z]=lo(t._def[Z])||{examples:[]},Object.defineProperty(t,"example",{get:()=>r=>{let o=M(t);return o._def[Z].examples.push(r),o}}),t instanceof mo.ZodDefault&&Object.defineProperty(t,"label",{get:()=>r=>{let o=M(t);return o._def[Z].defaultLabel=r,o}}),t},_t=e=>Z in e._def&&E(e._def[Z]),Y=(e,t)=>_t(e)?e._def[Z][t]:void 0,Gt=(e,t)=>{if(!_t(e))return t;let r=M(t);return r._def[Z].examples=G(r._def[Z].examples,e._def[Z].examples,([o,i])=>typeof o=="object"&&typeof i=="object"?uo({...o},{...i}):i),r},P=(e,t)=>{let r=M(t);return r._def[Z].kind=e,r},ct=(e,t)=>Y(e,"kind")===t;import{z as ho}from"zod";import{z as be}from"zod";var K="File",Yt=be.custom(e=>Buffer.isBuffer(e),{message:"Expected Buffer"}),yo=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,go={buffer:()=>P(K,Yt),string:()=>P(K,be.string()),binary:()=>P(K,Yt.or(be.string())),base64:()=>{let e=be.string(),t=e.base64?.()instanceof be.ZodString;return P(K,t?e.base64():e.regex(yo,"Does not match base64 encoding"))}};function je(e){return go[e||"string"]()}var W="Raw",Wt=()=>P(W,ho.object({raw:je("buffer")}));import{z as xo}from"zod";var Se="Upload",Jt=()=>P(Se,xo.custom(e=>typeof e=="object"&&e!==null&&"name"in e&&"encoding"in e&&"mimetype"in e&&"data"in e&&"tempFilePath"in e&&"truncated"in e&&"size"in e&&"md5"in e&&"mv"in e&&typeof e.name=="string"&&typeof e.encoding=="string"&&typeof e.mimetype=="string"&&Buffer.isBuffer(e.data)&&typeof e.tempFilePath=="string"&&typeof e.truncated=="boolean"&&typeof e.size=="number"&&typeof e.md5=="string"&&typeof e.mv=="function",e=>({message:`Expected file upload, received ${typeof e}`})));var mt=({schema:{options:e},next:t})=>e.some(t),Xt=({schema:{_def:e},next:t})=>[e.left,e.right].some(t),bo=({schema:e,next:t})=>Object.values(e.shape).some(t),Qt=({schema:e,next:t})=>t(e.unwrap()),So=({schema:e,next:t})=>t(e.innerType()),Oo=({schema:e,next:t})=>t(e.valueSchema),Ao=({schema:e,next:t})=>t(e.element),Ro=({schema:e,next:t})=>t(e._def.innerType),Po={ZodObject:bo,ZodUnion:mt,ZodDiscriminatedUnion:mt,ZodIntersection:Xt,ZodEffects:So,ZodOptional:Qt,ZodNullable:Qt,ZodRecord:Oo,ZodArray:Ao,ZodDefault:Ro},He=({subject:e,condition:t,rules:r=Po,depth:o=1,maxDepth:i=Number.POSITIVE_INFINITY})=>{if(t(e))return!0;let s=o<i?r[e._def.typeName]:void 0;return s?s({schema:e,next:a=>He({subject:a,condition:t,rules:r,maxDepth:i,depth:o+1})}):!1},Ue=e=>He({subject:e,maxDepth:3,rules:{ZodUnion:mt,ZodIntersection:Xt},condition:t=>t instanceof To.ZodEffects&&t._def.effect.type!=="refinement"}),er=e=>He({subject:e,condition:t=>ct(t,Se)}),tr=e=>He({subject:e,condition:t=>ct(t,W),maxDepth:3});var Ke=({error:e,logger:t,response:r})=>{t.error(`Result handler failure: ${e.message}.`),r.status(500).end(`An error occurred while serving the result: ${e.message}.`+(e.originalError?`
5
- Original error: ${e.originalError.message}.`:""))};import{chain as Co}from"ramda";var J=e=>E(e)&&"or"in e,de=e=>E(e)&&"and"in e,lt=e=>({and:Co(t=>de(t)?t.and:[t],e)}),Fe=(e,t)=>de(e)?{and:e.and.map(r=>J(r)?{or:r.or.map(t)}:t(r))}:J(e)?{or:e.or.map(r=>de(r)?{and:r.and.map(t)}:t(r))}:t(e),ut=e=>e.and.reduce((t,r)=>({or:G(t.or,J(r)?r.or:[r],lt)}),{or:[]}),pe=(e,t)=>de(e)?J(t)?pe(ut(e),t):lt([e,t]):J(e)?de(t)?pe(t,e):J(t)?{or:G(e.or,t.or,lt)}:pe(e,{and:[t]}):de(t)||J(t)?pe(t,e):{and:[e,t]};var ce=class{},qe=class extends ce{#e;#o;#n;#i;#t;#s;#a;#r;#p;#d;#c;constructor({methods:t,inputSchema:r,outputSchema:o,handler:i,resultHandler:s,getOperationId:a=()=>{},scopes:p=[],middlewares:d=[],tags:c=[],description:l,shortDescription:m}){super(),this.#s=i,this.#a=s,this.#n=d,this.#c=a,this.#o=t,this.#p=p,this.#d=c,this.#e={long:l,short:m},this.#r={input:r,output:o};for(let[f,b]of Object.entries(this.#r))rr(!Ue(b),new L(`Using transformations on the top level of endpoint ${f} schema is not allowed.`));this.#t={positive:nt(s.getPositiveResponse(o),{mimeTypes:[D],statusCodes:[ne.positive]}),negative:nt(s.getNegativeResponse(),{mimeTypes:[D],statusCodes:[ne.negative]})};for(let[f,b]of Object.entries(this.#t))rr(b.length,new _(`ResultHandler must have at least one ${f} response schema specified.`));this.#i={input:er(r)?[ve]:tr(r)?[$t]:[D],positive:this.#t.positive.flatMap(({mimeTypes:f})=>f),negative:this.#t.negative.flatMap(({mimeTypes:f})=>f)}}getDescription(t){return this.#e[t]}getMethods(){return this.#o}getSchema(t){return t==="input"||t==="output"?this.#r[t]:this.getResponses(t).map(({schema:r})=>r).reduce((r,o)=>r.or(o))}getMimeTypes(t){return this.#i[t]}getResponses(t){return this.#t[t]}getSecurity(){return this.#n.reduce((t,r)=>r.security?pe(t,r.security):t,{and:[]})}getScopes(){return this.#p}getTags(){return this.#d}getOperationId(t){return this.#c(t)}#m(t){return{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":this.#o.concat(t).concat("options").join(", ").toUpperCase(),"Access-Control-Allow-Headers":"content-type"}}async#l(t){try{return await this.#r.output.parseAsync(t)}catch(r){throw r instanceof ft.ZodError?new V(r):r}}async#u({method:t,input:r,request:o,response:i,logger:s,options:a}){for(let p of this.#n){if(t==="options"&&p.type==="proprietary")continue;let d;try{d=await p.input.parseAsync(r)}catch(c){throw c instanceof ft.ZodError?new j(c):c}if(Object.assign(a,await p.middleware({input:d,options:a,request:o,response:i,logger:s})),i.writableEnded){s.warn(`The middleware ${p.middleware.name} has closed the stream. Accumulated options:`,a);break}}}async#f({input:t,options:r,logger:o}){let i;try{i=await this.#r.input.parseAsync(t)}catch(s){throw s instanceof ft.ZodError?new j(s):s}return this.#s({input:i,options:r,logger:o})}async#y({error:t,request:r,response:o,logger:i,input:s,output:a,options:p}){try{await this.#a.handler({error:t,output:a,request:r,response:o,logger:i,input:s,options:p})}catch(d){Ke({logger:i,response:o,error:new _(ae(d).message,t)})}}async execute({request:t,response:r,logger:o,config:i,siblingMethods:s=[]}){let a=st(t),p={},d=null,c=null;if(i.cors){let m=this.#m(s);typeof i.cors=="function"&&(m=await i.cors({request:t,logger:o,endpoint:this,defaultHeaders:m}));for(let f in m)r.set(f,m[f])}let l=Vt(t,i.inputSources);try{if(await this.#u({method:a,input:l,request:t,response:r,logger:o,options:p}),r.writableEnded)return;if(a==="options"){r.status(200).end();return}d=await this.#l(await this.#f({input:l,logger:o,options:p}))}catch(m){c=ae(m)}await this.#y({input:l,output:d,request:t,response:r,error:c,logger:o,options:p})}};import{z as nr}from"zod";var or=(e,t)=>{let r=e.map(({input:i})=>i).concat(t),o=r.reduce((i,s)=>i.and(s));return r.reduce((i,s)=>Gt(s,i),o)};import Io from"assert/strict";var yt=e=>(Io(!Ue(e.input),new L("Using transformations on the top level of middleware input schema is not allowed.")),{...e,type:"proprietary"});import{z as N}from"zod";var gt=e=>e,Oe=gt({getPositiveResponse:e=>{let t=U({schema:e}),r=M(N.object({status:N.literal("success"),data:e}));return t.reduce((o,i)=>o.example({status:"success",data:i}),r)},getNegativeResponse:()=>M(N.object({status:N.literal("error"),error:N.object({message:N.string()})})).example({status:"error",error:{message:H(new Error("Sample error message"))}}),handler:({error:e,input:t,output:r,request:o,response:i,logger:s})=>{if(!e){i.status(ne.positive).json({status:"success",data:r});return}let a=De(e);pt({logger:s,statusCode:a,request:o,error:e,input:t}),i.status(a).json({status:"error",error:{message:H(e)}})}}),ht=gt({getPositiveResponse:e=>{let t=U({schema:e}),r=M("shape"in e&&"items"in e.shape&&e.shape.items instanceof N.ZodArray?e.shape.items:N.array(N.any()));return t.reduce((o,i)=>E(i)&&"items"in i&&Array.isArray(i.items)?o.example(i.items):o,r)},getNegativeResponse:()=>M(N.string()).example(H(new Error("Sample error message"))),handler:({response:e,output:t,error:r,logger:o,request:i,input:s})=>{if(r){let a=De(r);pt({logger:o,statusCode:a,request:i,error:r,input:s}),e.status(a).send(r.message);return}t&&"items"in t&&Array.isArray(t.items)?e.status(ne.positive).json(t.items):e.status(500).send("Property 'items' is missing in the endpoint output")}});var Ae=class e{resultHandler;middlewares=[];constructor(t){this.resultHandler="resultHandler"in t?t.resultHandler:t}static#e(t,r){let o=new e(r);return o.middlewares=t,o}addMiddleware(t){return e.#e(this.middlewares.concat(t),this.resultHandler)}use=this.addExpressMiddleware;addExpressMiddleware(t,r){let o=r?.transformer||(a=>a),i=r?.provider||(()=>({})),s={type:"express",input:nr.object({}),middleware:async({request:a,response:p})=>new Promise((d,c)=>{t(a,p,m=>{if(m&&m instanceof Error)return c(o(m));d(i(a,p))})})};return e.#e(this.middlewares.concat(s),this.resultHandler)}addOptions(t){return e.#e(this.middlewares.concat(yt({input:nr.object({}),middleware:async()=>t})),this.resultHandler)}build({input:t,handler:r,output:o,description:i,shortDescription:s,operationId:a,...p}){let{middlewares:d,resultHandler:c}=this,l="methods"in p?p.methods:[p.method],m=typeof a=="function"?a:()=>a,f="scopes"in p?p.scopes:"scope"in p&&p.scope?[p.scope]:[],b="tags"in p?p.tags:"tag"in p&&p.tag?[p.tag]:[];return new qe({handler:r,middlewares:d,outputSchema:o,resultHandler:c,scopes:f,tags:b,methods:l,getOperationId:m,description:i,shortDescription:s,inputSchema:or(d,t)})}},Eo=new Ae(Oe),Zo=new Ae(ht);import{inspect as zo}from"util";import{mapObjIndexed as wo}from"ramda";import{Ansis as Mo,blue as No,green as vo,hex as Do,red as ko}from"ansis";var xt={debug:10,info:20,warn:30,error:40},ir=e=>E(e)&&"level"in e&&("color"in e?typeof e.color=="boolean":!0)&&("depth"in e?typeof e.depth=="number"||e.depth===null:!0)&&typeof e.level=="string"&&["silent","warn","debug"].includes(e.level)&&!Object.values(e).some(t=>typeof t=="function"),Tt=({level:e,color:t=new Mo().isSupported(),depth:r=2})=>{let o={debug:No,info:vo,warn:Do("#FFA500"),error:ko},i=e==="debug",s=e==="silent"?100:xt[e],a=(p,d,c)=>{if(xt[p]<s)return;let l=[new Date().toISOString(),t?`${o[p](p)}:`:`${p}:`,d];c!==void 0&&l.push(zo(c,{colors:t,depth:r,breakLength:i?80:1/0,compact:i?3:!0})),console.log(l.join(" "))};return wo(({},p)=>(d,c)=>a(p,d,c),xt)};import{head as Lo,tail as jo,toPairs as Ho}from"ramda";var Re=class{pairs;firstEndpoint;siblingMethods;constructor(t){this.pairs=Ho(t).filter(r=>r!==void 0&&r[1]!==void 0),this.firstEndpoint=Lo(this.pairs)?.[1],this.siblingMethods=jo(this.pairs).map(([r])=>r)}};import Uo from"express";var Pe=class{params;constructor(...t){this.params=t}apply(t,r){return r(t,Uo.static(...this.params))}};import fr from"express";import Bo from"http";import $o from"https";var me=async(e,t="default")=>{try{return(await import(e))[t]}catch{}try{return await Promise.resolve().then(()=>Bt(e)[t])}catch{}throw new se(e)},sr=async e=>{for(let{moduleName:t,moduleExport:r}of e)try{return await me(t,r)}catch{}throw new se(e.map(({moduleName:t})=>t))};import ar from"assert/strict";var Q=({routing:e,onEndpoint:t,onStatic:r,parentPath:o,hasCors:i})=>{let s=Object.entries(e).map(([a,p])=>[a.trim(),p]);for(let[a,p]of s){ar.doesNotMatch(a,/\//,new ie(`The entry '${a}' must avoid having slashes \u2014 use nesting instead.`));let d=`${o||""}${a?`/${a}`:""}`;if(p instanceof ce){let c=p.getMethods().slice();i&&c.push("options");for(let l of c)t(p,d,l)}else if(p instanceof Pe)r&&p.apply(d,r);else if(p instanceof Re){for(let[c,l]of p.pairs)ar(l.getMethods().includes(c),new ie(`Endpoint assigned to ${c} method of ${d} must support ${c} method.`)),t(l,d,c);i&&p.firstEndpoint&&t(p.firstEndpoint,d,"options",p.siblingMethods)}else Q({onEndpoint:t,onStatic:r,hasCors:i,routing:p,parentPath:d})}};var bt=({app:e,rootLogger:t,config:r,routing:o})=>Q({routing:o,hasCors:!!r.cors,onEndpoint:(i,s,a,p)=>{e[a](s,async(d,c)=>{let l=r.childLoggerProvider?await r.childLoggerProvider({request:d,parent:t}):t;l.info(`${d.method}: ${s}`),await i.execute({request:d,response:c,logger:l,config:r,siblingMethods:p})})},onStatic:(i,s)=>{e.use(i,s)}});import pr,{isHttpError as Ko}from"http-errors";var dr=({errorHandler:e,rootLogger:t,getChildLogger:r})=>async(o,i,s,a)=>{if(!o)return a();e.handler({error:Ko(o)?o:pr(400,ae(o).message),request:i,response:s,input:null,output:null,options:{},logger:r?await r({request:i,parent:t}):t})},cr=({errorHandler:e,getChildLogger:t,rootLogger:r})=>async(o,i)=>{let s=pr(404,`Can not ${o.method} ${o.path}`),a=t?await t({request:o,parent:r}):r;try{e.handler({request:o,response:i,logger:a,error:s,input:null,output:null,options:{}})}catch(p){Ke({response:i,logger:a,error:new _(ae(p).message,s)})}},mr=e=>(t,{},r)=>{if(Object.values(t?.files||[]).flat().find(({truncated:i})=>i))return r(e);r()};import{gray as Fo,hex as lr,italic as Be,whiteBright as qo}from"ansis";var ur=()=>{let e=Be("Proudly supports transgender community.".padStart(109)),t=Be("Start your API server with I/O schema validation and custom middlewares in minutes.".padStart(109)),r=Be("Thank you for choosing Express Zod API for your project.".padStart(132)),o=Be("for Victoria".padEnd(20)),i=lr("#F5A9B8"),s=lr("#5BCEFA"),a=new Array(14).fill(s,1,3).fill(i,3,5).fill(qo,5,7).fill(i,7,9).fill(s,9,12).fill(Fo,12,13);return`
4
+ `,{url:t.url,payload:r})},H=({schema:e,variant:t="original",validate:r=t==="parsed"})=>{let o=G(e,"examples")||[];if(!r&&t==="original")return o;let i=[];for(let s of o){let a=e.safeParse(s);a.success&&i.push(t==="parsed"?a.data:s)}return i},_=(e,t,r)=>e.length&&t.length?so(e,t).map(r):e.concat(t),xe=e=>"coerce"in e._def&&typeof e._def.coerce=="boolean"?e._def.coerce:!1,dt=e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase(),Z=(...e)=>e.flatMap(t=>t.split(/[^A-Z0-9]/gi)).flatMap(t=>t.replaceAll(/[A-Z]+/g,r=>`/${r}`).split("/")).map(dt).join(""),De=e=>oo("sha1").update(JSON.stringify(e),"utf8").digest("hex"),ke=(e,t)=>{try{return typeof e.parse(t)}catch{return}},E=e=>typeof e=="object"&&e!==null;import{z as _t}from"zod";import{clone as lo,mergeDeepRight as uo}from"ramda";var P=Symbol.for("express-zod-api"),Le=e=>{let t=e.describe(e.description);return t._def[P]=lo(t._def[P])||{examples:[]},t},fo=function(e){let t=Le(this);return t._def[P].examples.push(e),t},yo=function(e){let t=Le(this);return t._def[P].defaultLabel=e,t};P in globalThis||(globalThis[P]=!0,Object.defineProperty(_t.ZodType.prototype,"example",{get(){return fo.bind(this)}}),Object.defineProperty(_t.ZodDefault.prototype,"label",{get(){return yo.bind(this)}}));var Gt=e=>P in e._def&&E(e._def[P]),G=(e,t)=>Gt(e)?e._def[P][t]:void 0,Yt=(e,t)=>{if(!Gt(e))return t;let r=Le(t);return r._def[P].examples=_(r._def[P].examples,e._def[P].examples,([o,i])=>typeof o=="object"&&typeof i=="object"?uo({...o},{...i}):i),r},C=(e,t)=>{let r=Le(t);return r._def[P].kind=e,r},ct=(e,t)=>G(e,"kind")===t,go=e=>e;import{z as To}from"zod";import{z as Te}from"zod";var U="File",Jt=Te.custom(e=>Buffer.isBuffer(e),{message:"Expected Buffer"}),ho=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,xo={buffer:()=>C(U,Jt),string:()=>C(U,Te.string()),binary:()=>C(U,Jt.or(Te.string())),base64:()=>{let e=Te.string(),t=e.base64?.()instanceof Te.ZodString;return C(U,t?e.base64():e.regex(ho,"Does not match base64 encoding"))}};function je(e){return xo[e||"string"]()}var Y="Raw",Qt=()=>C(Y,To.object({raw:je("buffer")}));import{z as bo}from"zod";var be="Upload",Wt=()=>C(be,bo.custom(e=>typeof e=="object"&&e!==null&&"name"in e&&"encoding"in e&&"mimetype"in e&&"data"in e&&"tempFilePath"in e&&"truncated"in e&&"size"in e&&"md5"in e&&"mv"in e&&typeof e.name=="string"&&typeof e.encoding=="string"&&typeof e.mimetype=="string"&&Buffer.isBuffer(e.data)&&typeof e.tempFilePath=="string"&&typeof e.truncated=="boolean"&&typeof e.size=="number"&&typeof e.md5=="string"&&typeof e.mv=="function",e=>({message:`Expected file upload, received ${typeof e}`})));var mt=({schema:{options:e},next:t})=>e.some(t),er=({schema:{_def:e},next:t})=>[e.left,e.right].some(t),Oo=({schema:e,next:t})=>Object.values(e.shape).some(t),Xt=({schema:e,next:t})=>t(e.unwrap()),Ao=({schema:e,next:t})=>t(e.innerType()),Ro=({schema:e,next:t})=>t(e.valueSchema),Po=({schema:e,next:t})=>t(e.element),Co=({schema:e,next:t})=>t(e._def.innerType),Io={ZodObject:Oo,ZodUnion:mt,ZodDiscriminatedUnion:mt,ZodIntersection:er,ZodEffects:Ao,ZodOptional:Xt,ZodNullable:Xt,ZodRecord:Ro,ZodArray:Po,ZodDefault:Co},He=({subject:e,condition:t,rules:r=Io,depth:o=1,maxDepth:i=Number.POSITIVE_INFINITY})=>{if(t(e))return!0;let s=o<i?r[e._def.typeName]:void 0;return s?s({schema:e,next:a=>He({subject:a,condition:t,rules:r,maxDepth:i,depth:o+1})}):!1},Ue=e=>He({subject:e,maxDepth:3,rules:{ZodUnion:mt,ZodIntersection:er},condition:t=>t instanceof So.ZodEffects&&t._def.effect.type!=="refinement"}),tr=e=>He({subject:e,condition:t=>ct(t,be)}),rr=e=>He({subject:e,condition:t=>ct(t,Y),maxDepth:3});var Ke=({error:e,logger:t,response:r})=>{t.error(`Result handler failure: ${e.message}.`),r.status(500).end(`An error occurred while serving the result: ${e.message}.`+(e.originalError?`
5
+ Original error: ${e.originalError.message}.`:""))};import{chain as Zo}from"ramda";var J=e=>E(e)&&"or"in e,pe=e=>E(e)&&"and"in e,lt=e=>({and:Zo(t=>pe(t)?t.and:[t],e)}),Fe=(e,t)=>pe(e)?{and:e.and.map(r=>J(r)?{or:r.or.map(t)}:t(r))}:J(e)?{or:e.or.map(r=>pe(r)?{and:r.and.map(t)}:t(r))}:t(e),ut=e=>e.and.reduce((t,r)=>({or:_(t.or,J(r)?r.or:[r],lt)}),{or:[]}),ae=(e,t)=>pe(e)?J(t)?ae(ut(e),t):lt([e,t]):J(e)?pe(t)?ae(t,e):J(t)?{or:_(e.or,t.or,lt)}:ae(e,{and:[t]}):pe(t)||J(t)?ae(t,e):{and:[e,t]};var de=class{},qe=class extends de{#e;#o;#n;#i;#t;#s;#a;#r;#p;#d;#c;constructor({methods:t,inputSchema:r,outputSchema:o,handler:i,resultHandler:s,getOperationId:a=()=>{},scopes:p=[],middlewares:d=[],tags:c=[],description:l,shortDescription:m}){super(),this.#s=i,this.#a=s,this.#n=d,this.#c=a,this.#o=t,this.#p=p,this.#d=c,this.#e={long:l,short:m},this.#r={input:r,output:o};for(let[f,b]of Object.entries(this.#r))or(!Ue(b),new k(`Using transformations on the top level of endpoint ${f} schema is not allowed.`));this.#t={positive:nt(s.getPositiveResponse(o),{mimeTypes:[v],statusCodes:[oe.positive]}),negative:nt(s.getNegativeResponse(),{mimeTypes:[v],statusCodes:[oe.negative]})};for(let[f,b]of Object.entries(this.#t))or(b.length,new V(`ResultHandler must have at least one ${f} response schema specified.`));this.#i={input:tr(r)?[Ne]:rr(r)?[$t]:[v],positive:this.#t.positive.flatMap(({mimeTypes:f})=>f),negative:this.#t.negative.flatMap(({mimeTypes:f})=>f)}}getDescription(t){return this.#e[t]}getMethods(){return this.#o}getSchema(t){return t==="input"||t==="output"?this.#r[t]:this.getResponses(t).map(({schema:r})=>r).reduce((r,o)=>r.or(o))}getMimeTypes(t){return this.#i[t]}getResponses(t){return this.#t[t]}getSecurity(){return this.#n.reduce((t,r)=>r.security?ae(t,r.security):t,{and:[]})}getScopes(){return this.#p}getTags(){return this.#d}getOperationId(t){return this.#c(t)}#m(t){return{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":this.#o.concat(t).concat("options").join(", ").toUpperCase(),"Access-Control-Allow-Headers":"content-type"}}async#l(t){try{return await this.#r.output.parseAsync(t)}catch(r){throw r instanceof ft.ZodError?new $(r):r}}async#u({method:t,input:r,request:o,response:i,logger:s,options:a}){for(let p of this.#n){if(t==="options"&&p.type==="proprietary")continue;let d;try{d=await p.input.parseAsync(r)}catch(c){throw c instanceof ft.ZodError?new L(c):c}if(Object.assign(a,await p.middleware({input:d,options:a,request:o,response:i,logger:s})),i.writableEnded){s.warn(`The middleware ${p.middleware.name} has closed the stream. Accumulated options:`,a);break}}}async#f({input:t,options:r,logger:o}){let i;try{i=await this.#r.input.parseAsync(t)}catch(s){throw s instanceof ft.ZodError?new L(s):s}return this.#s({input:i,options:r,logger:o})}async#y({error:t,request:r,response:o,logger:i,input:s,output:a,options:p}){try{await this.#a.handler({error:t,output:a,request:r,response:o,logger:i,input:s,options:p})}catch(d){Ke({logger:i,response:o,error:new V(se(d).message,t)})}}async execute({request:t,response:r,logger:o,config:i,siblingMethods:s=[]}){let a=st(t),p={},d=null,c=null;if(i.cors){let m=this.#m(s);typeof i.cors=="function"&&(m=await i.cors({request:t,logger:o,endpoint:this,defaultHeaders:m}));for(let f in m)r.set(f,m[f])}let l=Vt(t,i.inputSources);try{if(await this.#u({method:a,input:l,request:t,response:r,logger:o,options:p}),r.writableEnded)return;if(a==="options"){r.status(200).end();return}d=await this.#l(await this.#f({input:l,logger:o,options:p}))}catch(m){c=se(m)}await this.#y({input:l,output:d,request:t,response:r,error:c,logger:o,options:p})}};import{z as ir}from"zod";var nr=(e,t)=>{let r=e.map(({input:i})=>i).concat(t),o=r.reduce((i,s)=>i.and(s));return r.reduce((i,s)=>Yt(s,i),o)};import Eo from"assert/strict";var yt=e=>(Eo(!Ue(e.input),new k("Using transformations on the top level of middleware input schema is not allowed.")),{...e,type:"proprietary"});import{z as M}from"zod";var gt=e=>e,Se=gt({getPositiveResponse:e=>{let t=H({schema:e}),r=M.object({status:M.literal("success"),data:e});return t.reduce((o,i)=>o.example({status:"success",data:i}),r)},getNegativeResponse:()=>M.object({status:M.literal("error"),error:M.object({message:M.string()})}).example({status:"error",error:{message:j(new Error("Sample error message"))}}),handler:({error:e,input:t,output:r,request:o,response:i,logger:s})=>{if(!e){i.status(oe.positive).json({status:"success",data:r});return}let a=ve(e);pt({logger:s,statusCode:a,request:o,error:e,input:t}),i.status(a).json({status:"error",error:{message:j(e)}})}}),ht=gt({getPositiveResponse:e=>{let t=H({schema:e}),r="shape"in e&&"items"in e.shape&&e.shape.items instanceof M.ZodArray?e.shape.items:M.array(M.any());return t.reduce((o,i)=>E(i)&&"items"in i&&Array.isArray(i.items)?o.example(i.items):o,r)},getNegativeResponse:()=>M.string().example(j(new Error("Sample error message"))),handler:({response:e,output:t,error:r,logger:o,request:i,input:s})=>{if(r){let a=ve(r);pt({logger:o,statusCode:a,request:i,error:r,input:s}),e.status(a).send(r.message);return}t&&"items"in t&&Array.isArray(t.items)?e.status(oe.positive).json(t.items):e.status(500).send("Property 'items' is missing in the endpoint output")}});var Oe=class e{resultHandler;middlewares=[];constructor(t){this.resultHandler="resultHandler"in t?t.resultHandler:t}static#e(t,r){let o=new e(r);return o.middlewares=t,o}addMiddleware(t){return e.#e(this.middlewares.concat(t),this.resultHandler)}use=this.addExpressMiddleware;addExpressMiddleware(t,r){let o=r?.transformer||(a=>a),i=r?.provider||(()=>({})),s={type:"express",input:ir.object({}),middleware:async({request:a,response:p})=>new Promise((d,c)=>{t(a,p,m=>{if(m&&m instanceof Error)return c(o(m));d(i(a,p))})})};return e.#e(this.middlewares.concat(s),this.resultHandler)}addOptions(t){return e.#e(this.middlewares.concat(yt({input:ir.object({}),middleware:async()=>t})),this.resultHandler)}build({input:t,handler:r,output:o,description:i,shortDescription:s,operationId:a,...p}){let{middlewares:d,resultHandler:c}=this,l="methods"in p?p.methods:[p.method],m=typeof a=="function"?a:()=>a,f="scopes"in p?p.scopes:"scope"in p&&p.scope?[p.scope]:[],b="tags"in p?p.tags:"tag"in p&&p.tag?[p.tag]:[];return new qe({handler:r,middlewares:d,outputSchema:o,resultHandler:c,scopes:f,tags:b,methods:l,getOperationId:m,description:i,shortDescription:s,inputSchema:nr(d,t)})}},zo=new Oe(Se),wo=new Oe(ht);import{inspect as Mo}from"util";import{mapObjIndexed as No}from"ramda";import{Ansis as vo,blue as Do,green as ko,hex as Lo,red as jo}from"ansis";var xt={debug:10,info:20,warn:30,error:40},sr=e=>E(e)&&"level"in e&&("color"in e?typeof e.color=="boolean":!0)&&("depth"in e?typeof e.depth=="number"||e.depth===null:!0)&&typeof e.level=="string"&&["silent","warn","debug"].includes(e.level)&&!Object.values(e).some(t=>typeof t=="function"),Tt=({level:e,color:t=new vo().isSupported(),depth:r=2})=>{let o={debug:Do,info:ko,warn:Lo("#FFA500"),error:jo},i=e==="debug",s=e==="silent"?100:xt[e],a=(p,d,c)=>{if(xt[p]<s)return;let l=[new Date().toISOString(),t?`${o[p](p)}:`:`${p}:`,d];c!==void 0&&l.push(Mo(c,{colors:t,depth:r,breakLength:i?80:1/0,compact:i?3:!0})),console.log(l.join(" "))};return No(({},p)=>(d,c)=>a(p,d,c),xt)};import{head as Ho,tail as Uo,toPairs as Ko}from"ramda";var Ae=class{pairs;firstEndpoint;siblingMethods;constructor(t){this.pairs=Ko(t).filter(r=>r!==void 0&&r[1]!==void 0),this.firstEndpoint=Ho(this.pairs)?.[1],this.siblingMethods=Uo(this.pairs).map(([r])=>r)}};import Fo from"express";var Re=class{params;constructor(...t){this.params=t}apply(t,r){return r(t,Fo.static(...this.params))}};import yr from"express";import Vo from"http";import _o from"https";var ce=async(e,t="default")=>{try{return(await import(e))[t]}catch{}try{return await Promise.resolve().then(()=>Bt(e)[t])}catch{}throw new ie(e)},ar=async e=>{for(let{moduleName:t,moduleExport:r}of e)try{return await ce(t,r)}catch{}throw new ie(e.map(({moduleName:t})=>t))};import pr from"assert/strict";var Q=({routing:e,onEndpoint:t,onStatic:r,parentPath:o,hasCors:i})=>{let s=Object.entries(e).map(([a,p])=>[a.trim(),p]);for(let[a,p]of s){pr.doesNotMatch(a,/\//,new ne(`The entry '${a}' must avoid having slashes \u2014 use nesting instead.`));let d=`${o||""}${a?`/${a}`:""}`;if(p instanceof de){let c=p.getMethods().slice();i&&c.push("options");for(let l of c)t(p,d,l)}else if(p instanceof Re)r&&p.apply(d,r);else if(p instanceof Ae){for(let[c,l]of p.pairs)pr(l.getMethods().includes(c),new ne(`Endpoint assigned to ${c} method of ${d} must support ${c} method.`)),t(l,d,c);i&&p.firstEndpoint&&t(p.firstEndpoint,d,"options",p.siblingMethods)}else Q({onEndpoint:t,onStatic:r,hasCors:i,routing:p,parentPath:d})}};var bt=({app:e,rootLogger:t,config:r,routing:o})=>Q({routing:o,hasCors:!!r.cors,onEndpoint:(i,s,a,p)=>{e[a](s,async(d,c)=>{let l=r.childLoggerProvider?await r.childLoggerProvider({request:d,parent:t}):t;l.info(`${d.method}: ${s}`),await i.execute({request:d,response:c,logger:l,config:r,siblingMethods:p})})},onStatic:(i,s)=>{e.use(i,s)}});import dr,{isHttpError as qo}from"http-errors";var cr=({errorHandler:e,rootLogger:t,getChildLogger:r})=>async(o,i,s,a)=>{if(!o)return a();e.handler({error:qo(o)?o:dr(400,se(o).message),request:i,response:s,input:null,output:null,options:{},logger:r?await r({request:i,parent:t}):t})},mr=({errorHandler:e,getChildLogger:t,rootLogger:r})=>async(o,i)=>{let s=dr(404,`Can not ${o.method} ${o.path}`),a=t?await t({request:o,parent:r}):r;try{e.handler({request:o,response:i,logger:a,error:s,input:null,output:null,options:{}})}catch(p){Ke({response:i,logger:a,error:new V(se(p).message,s)})}},lr=e=>(t,{},r)=>{if(Object.values(t?.files||[]).flat().find(({truncated:i})=>i))return r(e);r()};import{gray as Bo,hex as ur,italic as Be,whiteBright as $o}from"ansis";var fr=()=>{let e=Be("Proudly supports transgender community.".padStart(109)),t=Be("Start your API server with I/O schema validation and custom middlewares in minutes.".padStart(109)),r=Be("Thank you for choosing Express Zod API for your project.".padStart(132)),o=Be("for Victoria".padEnd(20)),i=ur("#F5A9B8"),s=ur("#5BCEFA"),a=new Array(14).fill(s,1,3).fill(i,3,5).fill($o,5,7).fill(i,7,9).fill(s,9,12).fill(Bo,12,13);return`
6
6
  8888888888 8888888888P 888 d8888 8888888b. 8888888
7
7
  888 d88P 888 d88888 888 Y88b 888
8
8
  888 d88P 888 d88P888 888 888 888
@@ -17,8 +17,8 @@ ${o}888${t}
17
17
  ${r}
18
18
  `.split(`
19
19
  `).map((d,c)=>a[c]?a[c](d):d).join(`
20
- `)};var yr=e=>{e.startupLogo!==!1&&console.log(ur());let t=ir(e.logger)?Tt(e.logger):e.logger;t.debug("Running","v18.4.0 (ESM)");let r=e.errorHandler||Oe,{childLoggerProvider:o}=e,i={errorHandler:r,rootLogger:t,getChildLogger:o},s=cr(i),a=dr(i);return{rootLogger:t,errorHandler:r,notFoundHandler:s,parserFailureHandler:a}},Vo=(e,t)=>{let{rootLogger:r,notFoundHandler:o}=yr(e);return bt({app:e.app,routing:t,rootLogger:r,config:e}),{notFoundHandler:o,logger:r}},_o=async(e,t)=>{let r=fr().disable("x-powered-by");if(e.server.compression){let d=await me("compression");r.use(d(typeof e.server.compression=="object"?e.server.compression:void 0))}r.use(e.server.jsonParser||fr.json());let{rootLogger:o,notFoundHandler:i,parserFailureHandler:s}=yr(e);if(e.server.upload){let d=await me("express-fileupload"),{limitError:c,beforeUpload:l,...m}={...typeof e.server.upload=="object"&&e.server.upload};l&&l({app:r,logger:o}),r.use(d({...m,abortOnLimit:!1,parseNested:!0,logger:{log:o.debug.bind(o)}})),c&&r.use(mr(c))}e.server.rawParser&&(r.use(e.server.rawParser),r.use((d,{},c)=>{Buffer.isBuffer(d.body)&&(d.body={raw:d.body}),c()})),r.use(s),e.server.beforeRouting&&await e.server.beforeRouting({app:r,logger:o}),bt({app:r,routing:t,rootLogger:o,config:e}),r.use(i);let a=(d,c)=>d.listen(c,()=>{o.info("Listening",c)}),p={httpServer:a(Bo.createServer(r),e.server.listen),httpsServer:e.https?a($o.createServer(e.https.options,r),e.https.listen):void 0};return{app:r,...p,logger:o}};import ei from"assert/strict";import{OpenApiBuilder as ti}from"openapi3-ts/oas31";import F from"assert/strict";import{isReferenceObject as ee}from"openapi3-ts/oas31";import{both as Yo,complement as Wo,concat as Jo,type as Qo,filter as Xo,fromPairs as Ye,has as en,isNil as tn,map as le,mergeAll as rn,mergeDeepRight as on,mergeDeepWith as nn,objOf as br,omit as We,pipe as Sr,pluck as sn,range as an,reject as pn,toLower as dn,union as cn,when as mn,xprod as Je,zipObj as ln}from"ramda";import{z as T}from"zod";import{z as _e}from"zod";var $e=e=>!isNaN(e.getTime()),Ve=/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$/;var Ce="DateIn",gr=()=>{let e=_e.string(),r=e.date?.()instanceof _e.ZodString?_e.union([e.date(),e.datetime(),e.datetime({local:!0})]):e.regex(Ve);return P(Ce,r.transform(o=>new Date(o)).pipe(_e.date().refine($e)))};import{z as Go}from"zod";var Ie="DateOut",hr=()=>P(Ie,Go.date().refine($e).transform(e=>e.toISOString()));var X=({schema:e,onEach:t,rules:r,onMissing:o,...i})=>{let s=Y(e,"kind")||e._def.typeName,a=s?r[s]:void 0,p=i,c=a?a({schema:e,...p,next:m=>X({schema:m,...p,onEach:t,rules:r,onMissing:o})}):o({schema:e,...p}),l=t&&t({schema:e,prev:c,...p});return l?{...c,...l}:c};var xr=50,Or="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString",un={integer:0,number:0,string:"",boolean:!1,object:{},null:null,array:[]},Ar=/:([A-Za-z0-9_]+)/g,Rr=e=>e.match(Ar)?.map(t=>t.slice(1))||[],Pr=e=>e.replace(Ar,t=>`{${t.slice(1)}}`),fn=({schema:e,next:t})=>({...t(e._def.innerType),default:Y(e,"defaultLabel")||e._def.defaultValue()}),yn=({schema:{_def:{innerType:e}},next:t})=>t(e),gn=()=>({format:"any"}),hn=e=>(F(!e.isResponse,new C({message:"Please use ez.upload() only for input.",...e})),{type:"string",format:"binary"}),xn=({schema:e})=>({type:"string",format:e instanceof T.ZodString?e._def.checks.find(t=>t.kind==="regex"||t.kind==="base64")?"byte":"file":"binary"}),Tn=({schema:{options:e},next:t})=>({oneOf:e.map(t)}),bn=({schema:{options:e,discriminator:t},next:r})=>({discriminator:{propertyName:t},oneOf:Array.from(e.values()).map(r)}),Sn=e=>{let[t,r]=e.filter(i=>!ee(i)&&i.type==="object"&&Object.keys(i).every(s=>["type","properties","required","examples"].includes(s)));F(t&&r,"Can not flatten objects");let o={type:"object"};return(t.properties||r.properties)&&(o.properties=nn((i,s)=>Array.isArray(i)&&Array.isArray(s)?Jo(i,s):i===s?s:F.fail("Can not flatten properties"),t.properties||{},r.properties||{})),(t.required||r.required)&&(o.required=cn(t.required||[],r.required||[])),(t.examples||r.examples)&&(o.examples=G(t.examples||[],r.examples||[],([i,s])=>on(i,s))),o},On=({schema:{_def:{left:e,right:t}},next:r})=>{let o=[e,t].map(r);try{return Sn(o)}catch{}return{allOf:o}},An=({schema:e,next:t})=>t(e.unwrap()),Rn=({schema:e,next:t})=>t(e._def.innerType),Pn=({schema:e,next:t})=>{let r=t(e.unwrap());return ee(r)||(r.type=Ir(r)),r},Cr=e=>{let t=dn(Qo(e));return typeof e=="bigint"?"integer":t==="number"||t==="string"||t==="boolean"||t==="object"||t==="null"||t==="array"?t:void 0},Tr=({schema:e})=>({type:Cr(Object.values(e.enum)[0]),enum:Object.values(e.enum)}),Cn=({schema:{value:e}})=>({type:Cr(e),const:e}),In=({schema:e,isResponse:t,...r})=>{let o=Object.keys(e.shape),i=p=>t&&Te(p)?p instanceof T.ZodOptional:p.isOptional(),s=o.filter(p=>!i(e.shape[p])),a={type:"object"};return o.length&&(a.properties=Ge({schema:e,isResponse:t,...r})),s.length&&(a.required=s),a},En=()=>({type:"null"}),Zn=e=>(F(!e.isResponse,new C({message:"Please use ez.dateOut() for output.",...e})),{description:"YYYY-MM-DDTHH:mm:ss.sssZ",type:"string",format:"date-time",pattern:Ve.source,externalDocs:{url:Or}}),zn=e=>(F(e.isResponse,new C({message:"Please use ez.dateIn() for input.",...e})),{description:"YYYY-MM-DDTHH:mm:ss.sssZ",type:"string",format:"date-time",externalDocs:{url:Or}}),wn=e=>F.fail(new C({message:`Using z.date() within ${e.isResponse?"output":"input"} schema is forbidden. Please use ez.date${e.isResponse?"Out":"In"}() instead. Check out the documentation for details.`,...e})),Mn=()=>({type:"boolean"}),Nn=()=>({type:"integer",format:"bigint"}),vn=e=>e.every(t=>t instanceof T.ZodLiteral),Dn=({schema:{keySchema:e,valueSchema:t},...r})=>{if(e instanceof T.ZodEnum||e instanceof T.ZodNativeEnum){let o=Object.values(e.enum),i={type:"object"};return o.length&&(i.properties=Ge({schema:T.object(Ye(Je(o,[t]))),...r}),i.required=o),i}if(e instanceof T.ZodLiteral)return{type:"object",properties:Ge({schema:T.object({[e.value]:t}),...r}),required:[e.value]};if(e instanceof T.ZodUnion&&vn(e.options)){let o=le(s=>`${s.value}`,e.options),i=Ye(Je(o,[t]));return{type:"object",properties:Ge({schema:T.object(i),...r}),required:o}}return{type:"object",additionalProperties:r.next(t)}},kn=({schema:{_def:e,element:t},next:r})=>{let o={type:"array",items:r(t)};return e.minLength&&(o.minItems=e.minLength.value),e.maxLength&&(o.maxItems=e.maxLength.value),o},Ln=({schema:{items:e,_def:{rest:t}},next:r})=>({type:"array",prefixItems:e.map(r),items:t===null?{not:{}}:r(t)}),jn=({schema:{isEmail:e,isURL:t,minLength:r,maxLength:o,isUUID:i,isCUID:s,isCUID2:a,isULID:p,isIP:d,isEmoji:c,isDatetime:l,_def:{checks:m}}})=>{let f=m.find(S=>S.kind==="regex"),b=m.find(S=>S.kind==="datetime"),x=f?f.regex:b?b.offset?new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(([+-]\\d{2}:\\d{2})|Z)$"):new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?Z$"):void 0,A={type:"string"},h={"date-time":l,email:e,url:t,uuid:i,cuid:s,cuid2:a,ulid:p,ip:d,emoji:c};for(let S in h)if(h[S]){A.format=S;break}return r!==null&&(A.minLength=r),o!==null&&(A.maxLength=o),x&&(A.pattern=x.source),A},Hn=({schema:e})=>{let t=e._def.checks.find(({kind:d})=>d==="min"),r=e.minValue===null?e.isInt?Number.MIN_SAFE_INTEGER:-Number.MAX_VALUE:e.minValue,o=t?t.inclusive:!0,i=e._def.checks.find(({kind:d})=>d==="max"),s=e.maxValue===null?e.isInt?Number.MAX_SAFE_INTEGER:Number.MAX_VALUE:e.maxValue,a=i?i.inclusive:!0,p={type:e.isInt?"integer":"number",format:e.isInt?"int64":"double"};return o?p.minimum=r:p.exclusiveMinimum=r,a?p.maximum=s:p.exclusiveMaximum=s,p},Ge=({schema:{shape:e},next:t})=>le(t,e),Un=e=>{let t=Array.isArray(e.type)?e.type[0]:e.type;return un?.[t]},Ir=e=>{let t=typeof e.type=="string"?[e.type]:e.type||[];return t.includes("null")?t:t.concat("null")},Kn=({schema:e,isResponse:t,next:r})=>{let o=r(e.innerType()),{effect:i}=e._def;if(t&&i.type==="transform"&&!ee(o)){let s=Le(e,Un(o));return s&&["number","string","boolean"].includes(s)?{type:s}:r(T.any())}if(!t&&i.type==="preprocess"&&!ee(o)){let{type:s,...a}=o;return{...a,format:`${a.format||s} (preprocessed)`}}return o},Fn=({schema:e,isResponse:t,next:r})=>r(e._def[t?"out":"in"]),qn=({schema:e,next:t})=>t(e.unwrap()),Bn=({next:e,schema:t,serializer:r,getRef:o,makeRef:i})=>{let s=r(t.schema);return o(s)||(i(s,{}),i(s,e(t.schema)))},$n=({next:e,schema:t})=>e(t.shape.raw),Er=e=>e.length?ln(an(1,e.length+1).map(t=>`example${t}`),le(br("value"),e)):void 0,Zr=(e,t,r=[])=>Sr(U,le(mn(Yo(E,Wo(Array.isArray)),We(r))),Er)({schema:e,variant:t?"parsed":"original",validate:!0}),Vn=(e,t)=>Sr(U,Xo(en(t)),sn(t),Er)({schema:e,variant:"original",validate:!0}),Ee=(e,t)=>e instanceof T.ZodObject?e:e instanceof T.ZodUnion||e instanceof T.ZodDiscriminatedUnion?Array.from(e.options.values()).map(r=>Ee(r,t)).reduce((r,o)=>r.merge(o.partial()),T.object({})):e instanceof T.ZodEffects?(F(e._def.effect.type==="refinement",t),Ee(e._def.schema,t)):Ee(e._def.left,t).merge(Ee(e._def.right,t)),zr=({path:e,method:t,schema:r,inputSources:o,serializer:i,getRef:s,makeRef:a,composition:p,description:d=`${t.toUpperCase()} ${e} Parameter`})=>{let{shape:c}=Ee(r,new C({message:"Using transformations on the top level schema is not allowed.",path:e,method:t,isResponse:!1})),l=Rr(e),m=o.includes("query"),f=o.includes("params"),b=o.includes("headers"),x=h=>f&&l.includes(h),A=h=>b&&at(h);return Object.keys(c).filter(h=>m||x(h)).map(h=>{let S=X({schema:c[h],isResponse:!1,rules:Ot,onEach:At,onMissing:Rt,serializer:i,getRef:s,makeRef:a,path:e,method:t}),ye=p==="components"?a(I(d,h),S):S;return{name:h,in:x(h)?"path":A(h)?"header":"query",required:!c[h].isOptional(),description:S.description||d,schema:ye,examples:Vn(r,h)}})},Ot={ZodString:jn,ZodNumber:Hn,ZodBigInt:Nn,ZodBoolean:Mn,ZodNull:En,ZodArray:kn,ZodTuple:Ln,ZodRecord:Dn,ZodObject:In,ZodLiteral:Cn,ZodIntersection:On,ZodUnion:Tn,ZodAny:gn,ZodDefault:fn,ZodEnum:Tr,ZodNativeEnum:Tr,ZodEffects:Kn,ZodOptional:An,ZodNullable:Pn,ZodDiscriminatedUnion:bn,ZodBranded:qn,ZodDate:wn,ZodCatch:yn,ZodPipeline:Fn,ZodLazy:Bn,ZodReadonly:Rn,[K]:xn,[Se]:hn,[Ie]:zn,[Ce]:Zn,[W]:$n},At=({schema:e,isResponse:t,prev:r})=>{if(ee(r))return{};let{description:o}=e,i=e instanceof T.ZodLazy,s=r.type!==void 0,a=t&&Te(e),p=!i&&s&&!a&&e.isNullable(),d=i?[]:U({schema:e,variant:t?"parsed":"original",validate:!0}),c={};return o&&(c.description=o),p&&(c.type=Ir(r)),d.length&&(c.examples=Array.from(d)),c},Rt=({schema:e,...t})=>F.fail(new C({message:`Zod type ${e.constructor.name} is unsupported.`,...t})),St=(e,t)=>{if(ee(e))return e;let r={...e};return r.properties&&(r.properties=We(t,r.properties)),r.examples&&(r.examples=r.examples.map(o=>We(t,o))),r.required&&(r.required=r.required.filter(o=>!t.includes(o))),r.allOf&&(r.allOf=r.allOf.map(o=>St(o,t))),r.oneOf&&(r.oneOf=r.oneOf.map(o=>St(o,t))),r},wr=e=>ee(e)?e:We(["examples"],e),Mr=({method:e,path:t,schema:r,mimeTypes:o,variant:i,serializer:s,getRef:a,makeRef:p,composition:d,hasMultipleStatusCodes:c,statusCode:l,description:m=`${e.toUpperCase()} ${t} ${dt(i)} response ${c?l:""}`.trim()})=>{let f=wr(X({schema:r,isResponse:!0,rules:Ot,onEach:At,onMissing:Rt,serializer:s,getRef:a,makeRef:p,path:t,method:e})),b={schema:d==="components"?p(I(m),f):f,examples:Zr(r,!0)};return{description:m,content:Ye(Je(o,[b]))}},_n=()=>({type:"http",scheme:"basic"}),Gn=({format:e})=>{let t={type:"http",scheme:"bearer"};return e&&(t.bearerFormat=e),t},Yn=({name:e},t)=>{let r={type:"apiKey",in:"query",name:e};return t?.includes("body")&&(t?.includes("query")?(r["x-in-alternative"]="body",r.description=`${e} CAN also be supplied within the request body`):(r["x-in-actual"]="body",r.description=`${e} MUST be supplied within the request body instead of query`)),r},Wn=({name:e})=>({type:"apiKey",in:"header",name:e}),Jn=({name:e})=>({type:"apiKey",in:"cookie",name:e}),Qn=({url:e})=>({type:"openIdConnect",openIdConnectUrl:e}),Xn=({flows:e={}})=>({type:"oauth2",flows:le(t=>({...t,scopes:t.scopes||{}}),pn(tn,e))}),Nr=(e,t)=>{let r={basic:_n,bearer:Gn,input:Yn,header:Wn,cookie:Jn,openid:Qn,oauth2:Xn};return Fe(e,o=>r[o.type](o,t))},Qe=e=>"or"in e?e.or.map(t=>"and"in t?rn(le(({name:r,scopes:o})=>br(r,o),t.and)):{[t.name]:t.scopes}):"and"in e?Qe(ut(e)):Qe({or:[e]}),vr=({method:e,path:t,schema:r,mimeTypes:o,serializer:i,getRef:s,makeRef:a,composition:p,description:d=`${e.toUpperCase()} ${t} Request body`})=>{let c=Rr(t),l=wr(St(X({schema:r,isResponse:!1,rules:Ot,onEach:At,onMissing:Rt,serializer:i,getRef:s,makeRef:a,path:t,method:e}),c)),m={schema:p==="components"?a(I(d),l):l,examples:Zr(r,!1,c)};return{description:d,content:Ye(Je(o,[m]))}},Dr=e=>Object.keys(e).map(t=>{let r=e[t],o={name:t,description:typeof r=="string"?r:r.description};return typeof r=="object"&&r.url&&(o.externalDocs={url:r.url}),o}),Pt=e=>e.length<=xr?e:e.slice(0,xr-1)+"\u2026";var Ct=class extends ti{lastSecuritySchemaIds={};lastOperationIdSuffixes={};makeRef(t,r){return this.addSchema(t,r),this.getRef(t)}getRef(t){return t in(this.rootDoc.components?.schemas||{})?{$ref:`#/components/schemas/${t}`}:void 0}ensureUniqOperationId(t,r,o){if(o)return ei(!(o in this.lastOperationIdSuffixes),new C({message:`Duplicated operationId: "${o}"`,method:r,isResponse:!1,path:t})),this.lastOperationIdSuffixes[o]=1,o;let i=I(r,t);return i in this.lastOperationIdSuffixes?(this.lastOperationIdSuffixes[i]++,`${i}${this.lastOperationIdSuffixes[i]}`):(this.lastOperationIdSuffixes[i]=1,i)}ensureUniqSecuritySchemaName(t){let r=JSON.stringify(t);for(let o in this.rootDoc.components?.securitySchemes||{})if(r===JSON.stringify(this.rootDoc.components?.securitySchemes?.[o]))return o;return this.lastSecuritySchemaIds[t.type]=(this.lastSecuritySchemaIds?.[t.type]||0)+1,`${t.type.toUpperCase()}_${this.lastSecuritySchemaIds[t.type]}`}constructor({routing:t,config:r,title:o,version:i,serverUrl:s,descriptions:a,hasSummaryFromDescription:p=!0,composition:d="inline",serializer:c=ke}){super(),this.addInfo({title:o,version:i});for(let m of typeof s=="string"?[s]:s)this.addServer({url:m});Q({routing:t,onEndpoint:(m,f,b)=>{let x=b,A={path:f,method:x,endpoint:m,composition:d,serializer:c,getRef:this.getRef.bind(this),makeRef:this.makeRef.bind(this)},[h,S]=["short","long"].map(m.getDescription.bind(m)),ye=h?Pt(h):p&&S?Pt(S):void 0,ze=m.getTags(),ge=r.inputSources?.[x]||it[x],re=this.ensureUniqOperationId(f,x,m.getOperationId(x)),we=zr({...A,inputSources:ge,schema:m.getSchema("input"),description:a?.requestParameter?.call(null,{method:x,path:f,operationId:re})}),Me={};for(let v of["positive","negative"]){let g=m.getResponses(v);for(let{mimeTypes:O,schema:R,statusCodes:w}of g)for(let oe of w)Me[oe]=Mr({...A,variant:v,schema:R,mimeTypes:O,statusCode:oe,hasMultipleStatusCodes:g.length>1||w.length>1,description:a?.[`${v}Response`]?.call(null,{method:x,path:f,operationId:re,statusCode:oe})})}let ot=ge.includes("body")?vr({...A,schema:m.getSchema("input"),mimeTypes:m.getMimeTypes("input"),description:a?.requestBody?.call(null,{method:x,path:f,operationId:re})}):void 0,Ne=Qe(Fe(Nr(m.getSecurity(),ge),v=>{let g=this.ensureUniqSecuritySchemaName(v),O=["oauth2","openIdConnect"].includes(v.type)?m.getScopes():[];return this.addSecurityScheme(g,v),{name:g,scopes:O}}));this.addPath(Pr(f),{[x]:{operationId:re,summary:ye,description:S,tags:ze.length>0?ze:void 0,parameters:we.length>0?we:void 0,requestBody:ot,security:Ne.length>0?Ne:void 0,responses:Me}})}}),this.rootDoc.tags=r.tags?Dr(r.tags):[]}};import kr from"http";var ri=({fnMethod:e,requestProps:t})=>({method:"GET",header:e(()=>D),...t}),oi=({fnMethod:e,responseProps:t})=>{let r={writableEnded:!1,statusCode:200,statusMessage:kr.STATUS_CODES[200],set:e(()=>r),setHeader:e(()=>r),header:e(()=>r),status:e(o=>(r.statusCode=o,r.statusMessage=kr.STATUS_CODES[o],r)),json:e(()=>r),send:e(()=>r),end:e(()=>(r.writableEnded=!0,r)),...t};return r},ni=({fnMethod:e,loggerProps:t})=>({info:e(),warn:e(),error:e(),debug:e(),...t}),ii=async({endpoint:e,requestProps:t,responseProps:r,configProps:o,loggerProps:i,fnMethod:s})=>{let a=s||(await sr([{moduleName:"vitest",moduleExport:"vi"},{moduleName:"@jest/globals",moduleExport:"jest"}])).fn,p=ri({fnMethod:a,requestProps:t}),d=oi({fnMethod:a,responseProps:r}),c=ni({fnMethod:a,loggerProps:i}),l={cors:!1,logger:c,...o};return await e.execute({request:p,response:d,config:l,logger:c}),{requestMock:p,responseMock:d,loggerMock:c}};import z from"typescript";import k from"typescript";import{chain as Lr,toPairs as jr}from"ramda";var n=k.factory,q=[n.createModifier(k.SyntaxKind.ExportKeyword)],si=[n.createModifier(k.SyntaxKind.AsyncKeyword)],ai=[n.createModifier(k.SyntaxKind.PublicKeyword),n.createModifier(k.SyntaxKind.ReadonlyKeyword)],Hr=[n.createModifier(k.SyntaxKind.ProtectedKeyword),n.createModifier(k.SyntaxKind.ReadonlyKeyword)],It=n.createTemplateHead(""),ue=n.createTemplateTail(""),Et=n.createTemplateMiddle(" "),Zt=e=>n.createTemplateLiteralType(It,e.map((t,r)=>n.createTemplateLiteralTypeSpan(n.createTypeReferenceNode(t),r===e.length-1?ue:Et))),zt=Zt(["M","P"]),Xe=(e,t,r)=>n.createParameterDeclaration(r,void 0,e,void 0,t,void 0),et=(e,t)=>Lr(([r,o])=>[Xe(n.createIdentifier(r),o,t)],jr(e)),wt=(e,t)=>n.createExpressionWithTypeArguments(n.createIdentifier("Record"),[typeof e=="number"?n.createKeywordTypeNode(e):n.createTypeReferenceNode(e),n.createKeywordTypeNode(t)]),Ur=e=>n.createConstructorDeclaration(void 0,e,n.createBlock([])),Kr=(e,t)=>n.createPropertySignature(void 0,`"${e}"`,void 0,n.createTypeReferenceNode(t)),B=(e,t,r)=>n.createVariableDeclarationList([n.createVariableDeclaration(e,void 0,r,t)],k.NodeFlags.Const),Mt=(e,t)=>n.createTypeAliasDeclaration(q,e,void 0,n.createUnionTypeNode(t.map(r=>n.createLiteralTypeNode(n.createStringLiteral(r))))),tt=(e,t)=>n.createTypeAliasDeclaration(q,e,void 0,t),Fr=(e,t,r)=>n.createPropertyDeclaration(ai,e,void 0,t,r),qr=(e,t,r)=>n.createClassDeclaration(q,e,void 0,void 0,[t,...r]),Br=(e,t)=>n.createTypeReferenceNode("Promise",[n.createIndexedAccessTypeNode(n.createTypeReferenceNode(e),t)]),$r=()=>n.createTypeReferenceNode("Promise",[n.createKeywordTypeNode(k.SyntaxKind.AnyKeyword)]),Vr=(e,t,r)=>n.createInterfaceDeclaration(q,e,void 0,t,r),_r=e=>Lr(([t,r])=>[n.createTypeParameterDeclaration([],t,n.createTypeReferenceNode(r))],jr(e)),Nt=(e,t,r)=>n.createArrowFunction(r?si:void 0,void 0,e.map(o=>Xe(o)),void 0,void 0,t),vt=(e,t,r)=>n.createCallExpression(n.createPropertyAccessExpression(n.createCallExpression(n.createPropertyAccessExpression(n.createIdentifier("Object"),"keys"),void 0,[e]),"reduce"),void 0,[n.createArrowFunction(void 0,void 0,et({acc:void 0,key:void 0}),void 0,void 0,t),r]);var Gr=["get","post","put","delete","patch"];import y from"typescript";import{z as Lt}from"zod";import $ from"typescript";var{factory:rt}=$,Dt=(e,t)=>{$.addSyntheticLeadingComment(e,$.SyntaxKind.MultiLineCommentTrivia,`* ${t} `,!0)},fe=(e,t,r)=>{let o=rt.createTypeAliasDeclaration(void 0,rt.createIdentifier(t),void 0,e);return r&&Dt(o,r),o},kt=(e,t)=>{let r=$.createSourceFile("print.ts","",$.ScriptTarget.Latest,!1,$.ScriptKind.TS);return $.createPrinter(t).printNode($.EmitHint.Unspecified,e,r)},pi=/^[A-Za-z_$][A-Za-z0-9_$]*$/,Yr=e=>pi.test(e)?rt.createIdentifier(e):rt.createStringLiteral(e);var{factory:u}=y,di={[y.SyntaxKind.AnyKeyword]:"",[y.SyntaxKind.BigIntKeyword]:BigInt(0),[y.SyntaxKind.BooleanKeyword]:!1,[y.SyntaxKind.NumberKeyword]:0,[y.SyntaxKind.ObjectKeyword]:{},[y.SyntaxKind.StringKeyword]:"",[y.SyntaxKind.UndefinedKeyword]:void 0},ci=({schema:{value:e}})=>u.createLiteralTypeNode(typeof e=="number"?u.createNumericLiteral(e):typeof e=="boolean"?e?u.createTrue():u.createFalse():u.createStringLiteral(e)),mi=({schema:{shape:e},isResponse:t,next:r,optionalPropStyle:{withQuestionMark:o}})=>{let i=Object.entries(e).map(([s,a])=>{let p=t&&Te(a)?a instanceof Lt.ZodOptional:a.isOptional(),d=u.createPropertySignature(void 0,Yr(s),p&&o?u.createToken(y.SyntaxKind.QuestionToken):void 0,r(a));return a.description&&Dt(d,a.description),d});return u.createTypeLiteralNode(i)},li=({schema:{element:e},next:t})=>u.createArrayTypeNode(t(e)),ui=({schema:{options:e}})=>u.createUnionTypeNode(e.map(t=>u.createLiteralTypeNode(u.createStringLiteral(t)))),Wr=({schema:{options:e},next:t})=>u.createUnionTypeNode(e.map(t)),fi=e=>di?.[e.kind],yi=({schema:e,next:t,isResponse:r})=>{let o=t(e.innerType()),i=e._def.effect;if(r&&i.type==="transform"){let s=Le(e,fi(o)),a={number:y.SyntaxKind.NumberKeyword,bigint:y.SyntaxKind.BigIntKeyword,boolean:y.SyntaxKind.BooleanKeyword,string:y.SyntaxKind.StringKeyword,undefined:y.SyntaxKind.UndefinedKeyword,object:y.SyntaxKind.ObjectKeyword};return u.createKeywordTypeNode(s&&a[s]||y.SyntaxKind.AnyKeyword)}return o},gi=({schema:e})=>u.createUnionTypeNode(Object.values(e.enum).map(t=>u.createLiteralTypeNode(typeof t=="number"?u.createNumericLiteral(t):u.createStringLiteral(t)))),hi=({next:e,schema:t,optionalPropStyle:{withUndefined:r}})=>{let o=e(t.unwrap());return r?u.createUnionTypeNode([o,u.createKeywordTypeNode(y.SyntaxKind.UndefinedKeyword)]):o},xi=({next:e,schema:t})=>u.createUnionTypeNode([e(t.unwrap()),u.createLiteralTypeNode(u.createNull())]),Ti=({next:e,schema:{items:t,_def:{rest:r}}})=>u.createTupleTypeNode(t.map(e).concat(r===null?[]:u.createRestTypeNode(e(r)))),bi=({next:e,schema:{keySchema:t,valueSchema:r}})=>u.createExpressionWithTypeArguments(u.createIdentifier("Record"),[t,r].map(e)),Si=({next:e,schema:t})=>u.createIntersectionTypeNode([t._def.left,t._def.right].map(e)),Oi=({next:e,schema:t})=>e(t._def.innerType),te=e=>()=>u.createKeywordTypeNode(e),Ai=({next:e,schema:t})=>e(t.unwrap()),Ri=({next:e,schema:t})=>e(t._def.innerType),Pi=({next:e,schema:t})=>e(t._def.innerType),Ci=({schema:e,next:t,isResponse:r})=>t(e._def[r?"out":"in"]),Ii=()=>u.createLiteralTypeNode(u.createNull()),Ei=({getAlias:e,makeAlias:t,next:r,serializer:o,schema:i})=>{let s=`Type${o(i.schema)}`;return e(s)||(t(s,u.createLiteralTypeNode(u.createNull())),t(s,r(i.schema)))},Zi=({schema:e})=>{let t=u.createKeywordTypeNode(y.SyntaxKind.StringKeyword),r=u.createTypeReferenceNode("Buffer"),o=u.createUnionTypeNode([t,r]);return e instanceof Lt.ZodString?t:e instanceof Lt.ZodUnion?o:r},zi=({next:e,schema:t})=>e(t.shape.raw),wi={ZodString:te(y.SyntaxKind.StringKeyword),ZodNumber:te(y.SyntaxKind.NumberKeyword),ZodBigInt:te(y.SyntaxKind.BigIntKeyword),ZodBoolean:te(y.SyntaxKind.BooleanKeyword),ZodAny:te(y.SyntaxKind.AnyKeyword),[Ce]:te(y.SyntaxKind.StringKeyword),[Ie]:te(y.SyntaxKind.StringKeyword),ZodNull:Ii,ZodArray:li,ZodTuple:Ti,ZodRecord:bi,ZodObject:mi,ZodLiteral:ci,ZodIntersection:Si,ZodUnion:Wr,ZodDefault:Oi,ZodEnum:ui,ZodNativeEnum:gi,ZodEffects:yi,ZodOptional:hi,ZodNullable:xi,ZodDiscriminatedUnion:Wr,ZodBranded:Ai,ZodCatch:Pi,ZodPipeline:Ci,ZodLazy:Ei,ZodReadonly:Ri,[K]:Zi,[W]:zi},Ze=({schema:e,...t})=>X({schema:e,rules:wi,onMissing:()=>u.createKeywordTypeNode(y.SyntaxKind.AnyKeyword),...t});var jt=class{program=[];usage=[];registry={};paths=[];aliases={};ids={pathType:n.createIdentifier("Path"),methodType:n.createIdentifier("Method"),methodPathType:n.createIdentifier("MethodPath"),inputInterface:n.createIdentifier("Input"),posResponseInterface:n.createIdentifier("PositiveResponse"),negResponseInterface:n.createIdentifier("NegativeResponse"),responseInterface:n.createIdentifier("Response"),jsonEndpointsConst:n.createIdentifier("jsonEndpoints"),endpointTagsConst:n.createIdentifier("endpointTags"),providerType:n.createIdentifier("Provider"),implementationType:n.createIdentifier("Implementation"),clientClass:n.createIdentifier("ExpressZodAPIClient"),keyParameter:n.createIdentifier("key"),pathParameter:n.createIdentifier("path"),paramsArgument:n.createIdentifier("params"),methodParameter:n.createIdentifier("method"),accumulator:n.createIdentifier("acc"),provideMethod:n.createIdentifier("provide"),implementationArgument:n.createIdentifier("implementation"),headersProperty:n.createIdentifier("headers"),hasBodyConst:n.createIdentifier("hasBody"),undefinedValue:n.createIdentifier("undefined"),bodyProperty:n.createIdentifier("body"),responseConst:n.createIdentifier("response"),searchParamsConst:n.createIdentifier("searchParams"),exampleImplementationConst:n.createIdentifier("exampleImplementation"),clientConst:n.createIdentifier("client")};interfaces=[];getAlias(t){return t in this.aliases?n.createTypeReferenceNode(t):void 0}makeAlias(t,r){return this.aliases[t]=fe(r,t),this.getAlias(t)}constructor({routing:t,variant:r="client",serializer:o=ke,splitResponse:i=!1,optionalPropStyle:s={withQuestionMark:!0,withUndefined:!0}}){Q({routing:t,onEndpoint:(g,O,R)=>{let w={serializer:o,getAlias:this.getAlias.bind(this),makeAlias:this.makeAlias.bind(this),optionalPropStyle:s},oe=I(R,O,"input"),Jr=Ze({...w,schema:g.getSchema("input"),isResponse:!1}),he=i?I(R,O,"positive.response"):void 0,Ht=g.getSchema("positive"),Ut=i?Ze({...w,isResponse:!0,schema:Ht}):void 0,xe=i?I(R,O,"negative.response"):void 0,Kt=g.getSchema("negative"),Ft=i?Ze({...w,isResponse:!0,schema:Kt}):void 0,qt=I(R,O,"response"),Qr=he&&xe?n.createUnionTypeNode([n.createTypeReferenceNode(he),n.createTypeReferenceNode(xe)]):Ze({...w,isResponse:!0,schema:Ht.or(Kt)});this.program.push(fe(Jr,oe)),Ut&&he&&this.program.push(fe(Ut,he)),Ft&&xe&&this.program.push(fe(Ft,xe)),this.program.push(fe(Qr,qt)),R!=="options"&&(this.paths.push(O),this.registry[`${R} ${O}`]={input:oe,positive:he,negative:xe,response:qt,isJson:g.getMimeTypes("positive").includes(D),tags:g.getTags()})}}),this.program.unshift(...Object.values(this.aliases)),this.program.push(Mt(this.ids.pathType,this.paths)),this.program.push(Mt(this.ids.methodType,Gr)),this.program.push(tt(this.ids.methodPathType,Zt([this.ids.methodType,this.ids.pathType])));let a=[n.createHeritageClause(z.SyntaxKind.ExtendsKeyword,[wt(this.ids.methodPathType,z.SyntaxKind.AnyKeyword)])];this.interfaces.push({id:this.ids.inputInterface,kind:"input"}),i&&this.interfaces.push({id:this.ids.posResponseInterface,kind:"positive"},{id:this.ids.negResponseInterface,kind:"negative"}),this.interfaces.push({id:this.ids.responseInterface,kind:"response"});for(let{id:g,kind:O}of this.interfaces)this.program.push(Vr(g,a,Object.keys(this.registry).map(R=>{let w=this.registry[R][O];return w?Kr(R,w):void 0}).filter(R=>R!==void 0)));if(r==="types")return;let p=n.createVariableStatement(q,B(this.ids.jsonEndpointsConst,n.createObjectLiteralExpression(Object.keys(this.registry).filter(g=>this.registry[g].isJson).map(g=>n.createPropertyAssignment(`"${g}"`,n.createTrue()))))),d=n.createVariableStatement(q,B(this.ids.endpointTagsConst,n.createObjectLiteralExpression(Object.keys(this.registry).map(g=>n.createPropertyAssignment(`"${g}"`,n.createArrayLiteralExpression(this.registry[g].tags.map(O=>n.createStringLiteral(O)))))))),c=tt(this.ids.providerType,n.createFunctionTypeNode(_r({M:this.ids.methodType,P:this.ids.pathType}),et({method:n.createTypeReferenceNode("M"),path:n.createTypeReferenceNode("P"),params:n.createIndexedAccessTypeNode(n.createTypeReferenceNode(this.ids.inputInterface),zt)}),Br(this.ids.responseInterface,zt))),l=tt(this.ids.implementationType,n.createFunctionTypeNode(void 0,et({method:n.createTypeReferenceNode(this.ids.methodType),path:n.createKeywordTypeNode(z.SyntaxKind.StringKeyword),params:wt(z.SyntaxKind.StringKeyword,z.SyntaxKind.AnyKeyword)}),$r())),m=n.createTemplateExpression(n.createTemplateHead(":"),[n.createTemplateSpan(this.ids.keyParameter,ue)]),f=vt(this.ids.paramsArgument,n.createCallExpression(n.createPropertyAccessExpression(this.ids.accumulator,"replace"),void 0,[m,n.createElementAccessExpression(this.ids.paramsArgument,this.ids.keyParameter)]),this.ids.pathParameter),b=vt(this.ids.paramsArgument,n.createConditionalExpression(n.createBinaryExpression(n.createCallExpression(n.createPropertyAccessExpression(this.ids.pathParameter,"indexOf"),void 0,[m]),z.SyntaxKind.GreaterThanEqualsToken,n.createNumericLiteral(0)),void 0,this.ids.accumulator,void 0,n.createObjectLiteralExpression([n.createSpreadAssignment(this.ids.accumulator),n.createPropertyAssignment(n.createComputedPropertyName(this.ids.keyParameter),n.createElementAccessExpression(this.ids.paramsArgument,this.ids.keyParameter))])),n.createObjectLiteralExpression()),x=qr(this.ids.clientClass,Ur([Xe(this.ids.implementationArgument,n.createTypeReferenceNode(this.ids.implementationType),Hr)]),[Fr(this.ids.provideMethod,n.createTypeReferenceNode(this.ids.providerType),Nt([this.ids.methodParameter,this.ids.pathParameter,this.ids.paramsArgument],n.createCallExpression(n.createPropertyAccessExpression(n.createThis(),this.ids.implementationArgument),void 0,[this.ids.methodParameter,f,b]),!0))]);this.program.push(p,d,c,l,x);let A=n.createPropertyAssignment(this.ids.methodParameter,n.createCallExpression(n.createPropertyAccessExpression(this.ids.methodParameter,"toUpperCase"),void 0,void 0)),h=n.createPropertyAssignment(this.ids.headersProperty,n.createConditionalExpression(this.ids.hasBodyConst,void 0,n.createObjectLiteralExpression([n.createPropertyAssignment(n.createStringLiteral("Content-Type"),n.createStringLiteral(D))]),void 0,this.ids.undefinedValue)),S=n.createPropertyAssignment(this.ids.bodyProperty,n.createConditionalExpression(this.ids.hasBodyConst,void 0,n.createCallExpression(n.createPropertyAccessExpression(n.createIdentifier("JSON"),"stringify"),void 0,[this.ids.paramsArgument]),void 0,this.ids.undefinedValue)),ye=n.createVariableStatement(void 0,B(this.ids.responseConst,n.createAwaitExpression(n.createCallExpression(n.createIdentifier("fetch"),void 0,[n.createTemplateExpression(n.createTemplateHead("https://example.com"),[n.createTemplateSpan(this.ids.pathParameter,n.createTemplateMiddle("")),n.createTemplateSpan(this.ids.searchParamsConst,ue)]),n.createObjectLiteralExpression([A,h,S])])))),ze=n.createVariableStatement(void 0,B(this.ids.hasBodyConst,n.createLogicalNot(n.createCallExpression(n.createPropertyAccessExpression(n.createArrayLiteralExpression([n.createStringLiteral("get"),n.createStringLiteral("delete")]),"includes"),void 0,[this.ids.methodParameter])))),ge=n.createVariableStatement(void 0,B(this.ids.searchParamsConst,n.createConditionalExpression(this.ids.hasBodyConst,void 0,n.createStringLiteral(""),void 0,n.createTemplateExpression(n.createTemplateHead("?"),[n.createTemplateSpan(n.createNewExpression(n.createIdentifier("URLSearchParams"),void 0,[this.ids.paramsArgument]),ue)])))),[re,we]=["json","text"].map(g=>n.createReturnStatement(n.createCallExpression(n.createPropertyAccessExpression(this.ids.responseConst,g),void 0,void 0))),Me=n.createIfStatement(n.createBinaryExpression(n.createTemplateExpression(It,[n.createTemplateSpan(this.ids.methodParameter,Et),n.createTemplateSpan(this.ids.pathParameter,ue)]),z.SyntaxKind.InKeyword,this.ids.jsonEndpointsConst),n.createBlock([re])),ot=n.createVariableStatement(q,B(this.ids.exampleImplementationConst,Nt([this.ids.methodParameter,this.ids.pathParameter,this.ids.paramsArgument],n.createBlock([ze,ge,ye,Me,we]),!0),n.createTypeReferenceNode(this.ids.implementationType))),Ne=n.createExpressionStatement(n.createCallExpression(n.createPropertyAccessExpression(this.ids.clientConst,this.ids.provideMethod),void 0,[n.createStringLiteral("get"),n.createStringLiteral("/v1/user/retrieve"),n.createObjectLiteralExpression([n.createPropertyAssignment("id",n.createStringLiteral("10"))])])),v=n.createVariableStatement(void 0,B(this.ids.clientConst,n.createNewExpression(this.ids.clientClass,void 0,[this.ids.exampleImplementationConst])));this.usage.push(ot,v,Ne)}printUsage(t){return this.usage.length?this.usage.map(r=>typeof r=="string"?r:kt(r,t)).join(`
20
+ `)};var gr=e=>{e.startupLogo!==!1&&console.log(fr());let t=sr(e.logger)?Tt(e.logger):e.logger;t.debug("Running","v18.5.0-beta1 (ESM)");let r=e.errorHandler||Se,{childLoggerProvider:o}=e,i={errorHandler:r,rootLogger:t,getChildLogger:o},s=mr(i),a=cr(i);return{rootLogger:t,errorHandler:r,notFoundHandler:s,parserFailureHandler:a}},Go=(e,t)=>{let{rootLogger:r,notFoundHandler:o}=gr(e);return bt({app:e.app,routing:t,rootLogger:r,config:e}),{notFoundHandler:o,logger:r}},Yo=async(e,t)=>{let r=yr().disable("x-powered-by");if(e.server.compression){let d=await ce("compression");r.use(d(typeof e.server.compression=="object"?e.server.compression:void 0))}r.use(e.server.jsonParser||yr.json());let{rootLogger:o,notFoundHandler:i,parserFailureHandler:s}=gr(e);if(e.server.upload){let d=await ce("express-fileupload"),{limitError:c,beforeUpload:l,...m}={...typeof e.server.upload=="object"&&e.server.upload};l&&l({app:r,logger:o}),r.use(d({...m,abortOnLimit:!1,parseNested:!0,logger:{log:o.debug.bind(o)}})),c&&r.use(lr(c))}e.server.rawParser&&(r.use(e.server.rawParser),r.use((d,{},c)=>{Buffer.isBuffer(d.body)&&(d.body={raw:d.body}),c()})),r.use(s),e.server.beforeRouting&&await e.server.beforeRouting({app:r,logger:o}),bt({app:r,routing:t,rootLogger:o,config:e}),r.use(i);let a=(d,c)=>d.listen(c,()=>{o.info("Listening",c)}),p={httpServer:a(Vo.createServer(r),e.server.listen),httpsServer:e.https?a(_o.createServer(e.https.options,r),e.https.listen):void 0};return{app:r,...p,logger:o}};import ri from"assert/strict";import{OpenApiBuilder as oi}from"openapi3-ts/oas31";import K from"assert/strict";import{isReferenceObject as X}from"openapi3-ts/oas31";import{both as Qo,complement as Wo,concat as Xo,type as en,filter as tn,fromPairs as Ye,has as rn,isNil as on,map as me,mergeAll as nn,mergeDeepRight as sn,mergeDeepWith as an,objOf as Sr,omit as Je,pipe as Or,pluck as pn,range as dn,reject as cn,toLower as mn,union as ln,when as un,xprod as Qe,zipObj as fn}from"ramda";import{z as T}from"zod";import{z as _e}from"zod";var $e=e=>!isNaN(e.getTime()),Ve=/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$/;var Pe="DateIn",hr=()=>{let e=_e.string(),r=e.date?.()instanceof _e.ZodString?_e.union([e.date(),e.datetime(),e.datetime({local:!0})]):e.regex(Ve);return C(Pe,r.transform(o=>new Date(o)).pipe(_e.date().refine($e)))};import{z as Jo}from"zod";var Ce="DateOut",xr=()=>C(Ce,Jo.date().refine($e).transform(e=>e.toISOString()));var W=({schema:e,onEach:t,rules:r,onMissing:o,...i})=>{let s=G(e,"kind")||e._def.typeName,a=s?r[s]:void 0,p=i,c=a?a({schema:e,...p,next:m=>W({schema:m,...p,onEach:t,rules:r,onMissing:o})}):o({schema:e,...p}),l=t&&t({schema:e,prev:c,...p});return l?{...c,...l}:c};var Tr=50,Ar="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString",yn={integer:0,number:0,string:"",boolean:!1,object:{},null:null,array:[]},Rr=/:([A-Za-z0-9_]+)/g,Pr=e=>e.match(Rr)?.map(t=>t.slice(1))||[],Cr=e=>e.replace(Rr,t=>`{${t.slice(1)}}`),gn=({schema:e,next:t})=>({...t(e._def.innerType),default:G(e,"defaultLabel")||e._def.defaultValue()}),hn=({schema:{_def:{innerType:e}},next:t})=>t(e),xn=()=>({format:"any"}),Tn=e=>(K(!e.isResponse,new I({message:"Please use ez.upload() only for input.",...e})),{type:"string",format:"binary"}),bn=({schema:e})=>({type:"string",format:e instanceof T.ZodString?e._def.checks.find(t=>t.kind==="regex"||t.kind==="base64")?"byte":"file":"binary"}),Sn=({schema:{options:e},next:t})=>({oneOf:e.map(t)}),On=({schema:{options:e,discriminator:t},next:r})=>({discriminator:{propertyName:t},oneOf:Array.from(e.values()).map(r)}),An=e=>{let[t,r]=e.filter(i=>!X(i)&&i.type==="object"&&Object.keys(i).every(s=>["type","properties","required","examples"].includes(s)));K(t&&r,"Can not flatten objects");let o={type:"object"};return(t.properties||r.properties)&&(o.properties=an((i,s)=>Array.isArray(i)&&Array.isArray(s)?Xo(i,s):i===s?s:K.fail("Can not flatten properties"),t.properties||{},r.properties||{})),(t.required||r.required)&&(o.required=ln(t.required||[],r.required||[])),(t.examples||r.examples)&&(o.examples=_(t.examples||[],r.examples||[],([i,s])=>sn(i,s))),o},Rn=({schema:{_def:{left:e,right:t}},next:r})=>{let o=[e,t].map(r);try{return An(o)}catch{}return{allOf:o}},Pn=({schema:e,next:t})=>t(e.unwrap()),Cn=({schema:e,next:t})=>t(e._def.innerType),In=({schema:e,next:t})=>{let r=t(e.unwrap());return X(r)||(r.type=Zr(r)),r},Ir=e=>{let t=mn(en(e));return typeof e=="bigint"?"integer":t==="number"||t==="string"||t==="boolean"||t==="object"||t==="null"||t==="array"?t:void 0},br=({schema:e})=>({type:Ir(Object.values(e.enum)[0]),enum:Object.values(e.enum)}),Zn=({schema:{value:e}})=>({type:Ir(e),const:e}),En=({schema:e,isResponse:t,...r})=>{let o=Object.keys(e.shape),i=p=>t&&xe(p)?p instanceof T.ZodOptional:p.isOptional(),s=o.filter(p=>!i(e.shape[p])),a={type:"object"};return o.length&&(a.properties=Ge({schema:e,isResponse:t,...r})),s.length&&(a.required=s),a},zn=()=>({type:"null"}),wn=e=>(K(!e.isResponse,new I({message:"Please use ez.dateOut() for output.",...e})),{description:"YYYY-MM-DDTHH:mm:ss.sssZ",type:"string",format:"date-time",pattern:Ve.source,externalDocs:{url:Ar}}),Mn=e=>(K(e.isResponse,new I({message:"Please use ez.dateIn() for input.",...e})),{description:"YYYY-MM-DDTHH:mm:ss.sssZ",type:"string",format:"date-time",externalDocs:{url:Ar}}),Nn=e=>K.fail(new I({message:`Using z.date() within ${e.isResponse?"output":"input"} schema is forbidden. Please use ez.date${e.isResponse?"Out":"In"}() instead. Check out the documentation for details.`,...e})),vn=()=>({type:"boolean"}),Dn=()=>({type:"integer",format:"bigint"}),kn=e=>e.every(t=>t instanceof T.ZodLiteral),Ln=({schema:{keySchema:e,valueSchema:t},...r})=>{if(e instanceof T.ZodEnum||e instanceof T.ZodNativeEnum){let o=Object.values(e.enum),i={type:"object"};return o.length&&(i.properties=Ge({schema:T.object(Ye(Qe(o,[t]))),...r}),i.required=o),i}if(e instanceof T.ZodLiteral)return{type:"object",properties:Ge({schema:T.object({[e.value]:t}),...r}),required:[e.value]};if(e instanceof T.ZodUnion&&kn(e.options)){let o=me(s=>`${s.value}`,e.options),i=Ye(Qe(o,[t]));return{type:"object",properties:Ge({schema:T.object(i),...r}),required:o}}return{type:"object",additionalProperties:r.next(t)}},jn=({schema:{_def:e,element:t},next:r})=>{let o={type:"array",items:r(t)};return e.minLength&&(o.minItems=e.minLength.value),e.maxLength&&(o.maxItems=e.maxLength.value),o},Hn=({schema:{items:e,_def:{rest:t}},next:r})=>({type:"array",prefixItems:e.map(r),items:t===null?{not:{}}:r(t)}),Un=({schema:{isEmail:e,isURL:t,minLength:r,maxLength:o,isUUID:i,isCUID:s,isCUID2:a,isULID:p,isIP:d,isEmoji:c,isDatetime:l,_def:{checks:m}}})=>{let f=m.find(S=>S.kind==="regex"),b=m.find(S=>S.kind==="datetime"),x=f?f.regex:b?b.offset?new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(([+-]\\d{2}:\\d{2})|Z)$"):new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?Z$"):void 0,A={type:"string"},h={"date-time":l,email:e,url:t,uuid:i,cuid:s,cuid2:a,ulid:p,ip:d,emoji:c};for(let S in h)if(h[S]){A.format=S;break}return r!==null&&(A.minLength=r),o!==null&&(A.maxLength=o),x&&(A.pattern=x.source),A},Kn=({schema:e})=>{let t=e._def.checks.find(({kind:d})=>d==="min"),r=e.minValue===null?e.isInt?Number.MIN_SAFE_INTEGER:-Number.MAX_VALUE:e.minValue,o=t?t.inclusive:!0,i=e._def.checks.find(({kind:d})=>d==="max"),s=e.maxValue===null?e.isInt?Number.MAX_SAFE_INTEGER:Number.MAX_VALUE:e.maxValue,a=i?i.inclusive:!0,p={type:e.isInt?"integer":"number",format:e.isInt?"int64":"double"};return o?p.minimum=r:p.exclusiveMinimum=r,a?p.maximum=s:p.exclusiveMaximum=s,p},Ge=({schema:{shape:e},next:t})=>me(t,e),Fn=e=>{let t=Array.isArray(e.type)?e.type[0]:e.type;return yn?.[t]},Zr=e=>{let t=typeof e.type=="string"?[e.type]:e.type||[];return t.includes("null")?t:t.concat("null")},qn=({schema:e,isResponse:t,next:r})=>{let o=r(e.innerType()),{effect:i}=e._def;if(t&&i.type==="transform"&&!X(o)){let s=ke(e,Fn(o));return s&&["number","string","boolean"].includes(s)?{type:s}:r(T.any())}if(!t&&i.type==="preprocess"&&!X(o)){let{type:s,...a}=o;return{...a,format:`${a.format||s} (preprocessed)`}}return o},Bn=({schema:e,isResponse:t,next:r})=>r(e._def[t?"out":"in"]),$n=({schema:e,next:t})=>t(e.unwrap()),Vn=({next:e,schema:t,serializer:r,getRef:o,makeRef:i})=>{let s=r(t.schema);return o(s)||(i(s,{}),i(s,e(t.schema)))},_n=({next:e,schema:t})=>e(t.shape.raw),Er=e=>e.length?fn(dn(1,e.length+1).map(t=>`example${t}`),me(Sr("value"),e)):void 0,zr=(e,t,r=[])=>Or(H,me(un(Qo(E,Wo(Array.isArray)),Je(r))),Er)({schema:e,variant:t?"parsed":"original",validate:!0}),Gn=(e,t)=>Or(H,tn(rn(t)),pn(t),Er)({schema:e,variant:"original",validate:!0}),Ie=(e,t)=>e instanceof T.ZodObject?e:e instanceof T.ZodUnion||e instanceof T.ZodDiscriminatedUnion?Array.from(e.options.values()).map(r=>Ie(r,t)).reduce((r,o)=>r.merge(o.partial()),T.object({})):e instanceof T.ZodEffects?(K(e._def.effect.type==="refinement",t),Ie(e._def.schema,t)):Ie(e._def.left,t).merge(Ie(e._def.right,t)),wr=({path:e,method:t,schema:r,inputSources:o,serializer:i,getRef:s,makeRef:a,composition:p,description:d=`${t.toUpperCase()} ${e} Parameter`})=>{let{shape:c}=Ie(r,new I({message:"Using transformations on the top level schema is not allowed.",path:e,method:t,isResponse:!1})),l=Pr(e),m=o.includes("query"),f=o.includes("params"),b=o.includes("headers"),x=h=>f&&l.includes(h),A=h=>b&&at(h);return Object.keys(c).filter(h=>m||x(h)).map(h=>{let S=W({schema:c[h],isResponse:!1,rules:Ot,onEach:At,onMissing:Rt,serializer:i,getRef:s,makeRef:a,path:e,method:t}),fe=p==="components"?a(Z(d,h),S):S;return{name:h,in:x(h)?"path":A(h)?"header":"query",required:!c[h].isOptional(),description:S.description||d,schema:fe,examples:Gn(r,h)}})},Ot={ZodString:Un,ZodNumber:Kn,ZodBigInt:Dn,ZodBoolean:vn,ZodNull:zn,ZodArray:jn,ZodTuple:Hn,ZodRecord:Ln,ZodObject:En,ZodLiteral:Zn,ZodIntersection:Rn,ZodUnion:Sn,ZodAny:xn,ZodDefault:gn,ZodEnum:br,ZodNativeEnum:br,ZodEffects:qn,ZodOptional:Pn,ZodNullable:In,ZodDiscriminatedUnion:On,ZodBranded:$n,ZodDate:Nn,ZodCatch:hn,ZodPipeline:Bn,ZodLazy:Vn,ZodReadonly:Cn,[U]:bn,[be]:Tn,[Ce]:Mn,[Pe]:wn,[Y]:_n},At=({schema:e,isResponse:t,prev:r})=>{if(X(r))return{};let{description:o}=e,i=e instanceof T.ZodLazy,s=r.type!==void 0,a=t&&xe(e),p=!i&&s&&!a&&e.isNullable(),d=i?[]:H({schema:e,variant:t?"parsed":"original",validate:!0}),c={};return o&&(c.description=o),p&&(c.type=Zr(r)),d.length&&(c.examples=Array.from(d)),c},Rt=({schema:e,...t})=>K.fail(new I({message:`Zod type ${e.constructor.name} is unsupported.`,...t})),St=(e,t)=>{if(X(e))return e;let r={...e};return r.properties&&(r.properties=Je(t,r.properties)),r.examples&&(r.examples=r.examples.map(o=>Je(t,o))),r.required&&(r.required=r.required.filter(o=>!t.includes(o))),r.allOf&&(r.allOf=r.allOf.map(o=>St(o,t))),r.oneOf&&(r.oneOf=r.oneOf.map(o=>St(o,t))),r},Mr=e=>X(e)?e:Je(["examples"],e),Nr=({method:e,path:t,schema:r,mimeTypes:o,variant:i,serializer:s,getRef:a,makeRef:p,composition:d,hasMultipleStatusCodes:c,statusCode:l,description:m=`${e.toUpperCase()} ${t} ${dt(i)} response ${c?l:""}`.trim()})=>{let f=Mr(W({schema:r,isResponse:!0,rules:Ot,onEach:At,onMissing:Rt,serializer:s,getRef:a,makeRef:p,path:t,method:e})),b={schema:d==="components"?p(Z(m),f):f,examples:zr(r,!0)};return{description:m,content:Ye(Qe(o,[b]))}},Yn=()=>({type:"http",scheme:"basic"}),Jn=({format:e})=>{let t={type:"http",scheme:"bearer"};return e&&(t.bearerFormat=e),t},Qn=({name:e},t)=>{let r={type:"apiKey",in:"query",name:e};return t?.includes("body")&&(t?.includes("query")?(r["x-in-alternative"]="body",r.description=`${e} CAN also be supplied within the request body`):(r["x-in-actual"]="body",r.description=`${e} MUST be supplied within the request body instead of query`)),r},Wn=({name:e})=>({type:"apiKey",in:"header",name:e}),Xn=({name:e})=>({type:"apiKey",in:"cookie",name:e}),ei=({url:e})=>({type:"openIdConnect",openIdConnectUrl:e}),ti=({flows:e={}})=>({type:"oauth2",flows:me(t=>({...t,scopes:t.scopes||{}}),cn(on,e))}),vr=(e,t)=>{let r={basic:Yn,bearer:Jn,input:Qn,header:Wn,cookie:Xn,openid:ei,oauth2:ti};return Fe(e,o=>r[o.type](o,t))},We=e=>"or"in e?e.or.map(t=>"and"in t?nn(me(({name:r,scopes:o})=>Sr(r,o),t.and)):{[t.name]:t.scopes}):"and"in e?We(ut(e)):We({or:[e]}),Dr=({method:e,path:t,schema:r,mimeTypes:o,serializer:i,getRef:s,makeRef:a,composition:p,description:d=`${e.toUpperCase()} ${t} Request body`})=>{let c=Pr(t),l=Mr(St(W({schema:r,isResponse:!1,rules:Ot,onEach:At,onMissing:Rt,serializer:i,getRef:s,makeRef:a,path:t,method:e}),c)),m={schema:p==="components"?a(Z(d),l):l,examples:zr(r,!1,c)};return{description:d,content:Ye(Qe(o,[m]))}},kr=e=>Object.keys(e).map(t=>{let r=e[t],o={name:t,description:typeof r=="string"?r:r.description};return typeof r=="object"&&r.url&&(o.externalDocs={url:r.url}),o}),Pt=e=>e.length<=Tr?e:e.slice(0,Tr-1)+"\u2026";var Ct=class extends oi{lastSecuritySchemaIds={};lastOperationIdSuffixes={};makeRef(t,r){return this.addSchema(t,r),this.getRef(t)}getRef(t){return t in(this.rootDoc.components?.schemas||{})?{$ref:`#/components/schemas/${t}`}:void 0}ensureUniqOperationId(t,r,o){if(o)return ri(!(o in this.lastOperationIdSuffixes),new I({message:`Duplicated operationId: "${o}"`,method:r,isResponse:!1,path:t})),this.lastOperationIdSuffixes[o]=1,o;let i=Z(r,t);return i in this.lastOperationIdSuffixes?(this.lastOperationIdSuffixes[i]++,`${i}${this.lastOperationIdSuffixes[i]}`):(this.lastOperationIdSuffixes[i]=1,i)}ensureUniqSecuritySchemaName(t){let r=JSON.stringify(t);for(let o in this.rootDoc.components?.securitySchemes||{})if(r===JSON.stringify(this.rootDoc.components?.securitySchemes?.[o]))return o;return this.lastSecuritySchemaIds[t.type]=(this.lastSecuritySchemaIds?.[t.type]||0)+1,`${t.type.toUpperCase()}_${this.lastSecuritySchemaIds[t.type]}`}constructor({routing:t,config:r,title:o,version:i,serverUrl:s,descriptions:a,hasSummaryFromDescription:p=!0,composition:d="inline",serializer:c=De}){super(),this.addInfo({title:o,version:i});for(let m of typeof s=="string"?[s]:s)this.addServer({url:m});Q({routing:t,onEndpoint:(m,f,b)=>{let x=b,A={path:f,method:x,endpoint:m,composition:d,serializer:c,getRef:this.getRef.bind(this),makeRef:this.makeRef.bind(this)},[h,S]=["short","long"].map(m.getDescription.bind(m)),fe=h?Pt(h):p&&S?Pt(S):void 0,Ee=m.getTags(),ye=r.inputSources?.[x]||it[x],te=this.ensureUniqOperationId(f,x,m.getOperationId(x)),ze=wr({...A,inputSources:ye,schema:m.getSchema("input"),description:a?.requestParameter?.call(null,{method:x,path:f,operationId:te})}),we={};for(let N of["positive","negative"]){let g=m.getResponses(N);for(let{mimeTypes:O,schema:R,statusCodes:w}of g)for(let re of w)we[re]=Nr({...A,variant:N,schema:R,mimeTypes:O,statusCode:re,hasMultipleStatusCodes:g.length>1||w.length>1,description:a?.[`${N}Response`]?.call(null,{method:x,path:f,operationId:te,statusCode:re})})}let ot=ye.includes("body")?Dr({...A,schema:m.getSchema("input"),mimeTypes:m.getMimeTypes("input"),description:a?.requestBody?.call(null,{method:x,path:f,operationId:te})}):void 0,Me=We(Fe(vr(m.getSecurity(),ye),N=>{let g=this.ensureUniqSecuritySchemaName(N),O=["oauth2","openIdConnect"].includes(N.type)?m.getScopes():[];return this.addSecurityScheme(g,N),{name:g,scopes:O}}));this.addPath(Cr(f),{[x]:{operationId:te,summary:fe,description:S,tags:Ee.length>0?Ee:void 0,parameters:ze.length>0?ze:void 0,requestBody:ot,security:Me.length>0?Me:void 0,responses:we}})}}),this.rootDoc.tags=r.tags?kr(r.tags):[]}};import Lr from"http";var ni=({fnMethod:e,requestProps:t})=>({method:"GET",header:e(()=>v),...t}),ii=({fnMethod:e,responseProps:t})=>{let r={writableEnded:!1,statusCode:200,statusMessage:Lr.STATUS_CODES[200],set:e(()=>r),setHeader:e(()=>r),header:e(()=>r),status:e(o=>(r.statusCode=o,r.statusMessage=Lr.STATUS_CODES[o],r)),json:e(()=>r),send:e(()=>r),end:e(()=>(r.writableEnded=!0,r)),...t};return r},si=({fnMethod:e,loggerProps:t})=>({info:e(),warn:e(),error:e(),debug:e(),...t}),ai=async({endpoint:e,requestProps:t,responseProps:r,configProps:o,loggerProps:i,fnMethod:s})=>{let a=s||(await ar([{moduleName:"vitest",moduleExport:"vi"},{moduleName:"@jest/globals",moduleExport:"jest"}])).fn,p=ni({fnMethod:a,requestProps:t}),d=ii({fnMethod:a,responseProps:r}),c=si({fnMethod:a,loggerProps:i}),l={cors:!1,logger:c,...o};return await e.execute({request:p,response:d,config:l,logger:c}),{requestMock:p,responseMock:d,loggerMock:c}};import z from"typescript";import D from"typescript";import{chain as jr,toPairs as Hr}from"ramda";var n=D.factory,F=[n.createModifier(D.SyntaxKind.ExportKeyword)],pi=[n.createModifier(D.SyntaxKind.AsyncKeyword)],di=[n.createModifier(D.SyntaxKind.PublicKeyword),n.createModifier(D.SyntaxKind.ReadonlyKeyword)],Ur=[n.createModifier(D.SyntaxKind.ProtectedKeyword),n.createModifier(D.SyntaxKind.ReadonlyKeyword)],It=n.createTemplateHead(""),le=n.createTemplateTail(""),Zt=n.createTemplateMiddle(" "),Et=e=>n.createTemplateLiteralType(It,e.map((t,r)=>n.createTemplateLiteralTypeSpan(n.createTypeReferenceNode(t),r===e.length-1?le:Zt))),zt=Et(["M","P"]),Xe=(e,t,r)=>n.createParameterDeclaration(r,void 0,e,void 0,t,void 0),et=(e,t)=>jr(([r,o])=>[Xe(n.createIdentifier(r),o,t)],Hr(e)),wt=(e,t)=>n.createExpressionWithTypeArguments(n.createIdentifier("Record"),[typeof e=="number"?n.createKeywordTypeNode(e):n.createTypeReferenceNode(e),n.createKeywordTypeNode(t)]),Kr=e=>n.createConstructorDeclaration(void 0,e,n.createBlock([])),Fr=(e,t)=>n.createPropertySignature(void 0,`"${e}"`,void 0,n.createTypeReferenceNode(t)),q=(e,t,r)=>n.createVariableDeclarationList([n.createVariableDeclaration(e,void 0,r,t)],D.NodeFlags.Const),Mt=(e,t)=>n.createTypeAliasDeclaration(F,e,void 0,n.createUnionTypeNode(t.map(r=>n.createLiteralTypeNode(n.createStringLiteral(r))))),tt=(e,t)=>n.createTypeAliasDeclaration(F,e,void 0,t),qr=(e,t,r)=>n.createPropertyDeclaration(di,e,void 0,t,r),Br=(e,t,r)=>n.createClassDeclaration(F,e,void 0,void 0,[t,...r]),$r=(e,t)=>n.createTypeReferenceNode("Promise",[n.createIndexedAccessTypeNode(n.createTypeReferenceNode(e),t)]),Vr=()=>n.createTypeReferenceNode("Promise",[n.createKeywordTypeNode(D.SyntaxKind.AnyKeyword)]),_r=(e,t,r)=>n.createInterfaceDeclaration(F,e,void 0,t,r),Gr=e=>jr(([t,r])=>[n.createTypeParameterDeclaration([],t,n.createTypeReferenceNode(r))],Hr(e)),Nt=(e,t,r)=>n.createArrowFunction(r?pi:void 0,void 0,e.map(o=>Xe(o)),void 0,void 0,t),vt=(e,t,r)=>n.createCallExpression(n.createPropertyAccessExpression(n.createCallExpression(n.createPropertyAccessExpression(n.createIdentifier("Object"),"keys"),void 0,[e]),"reduce"),void 0,[n.createArrowFunction(void 0,void 0,et({acc:void 0,key:void 0}),void 0,void 0,t),r]);var Yr=["get","post","put","delete","patch"];import y from"typescript";import{z as Lt}from"zod";import B from"typescript";var{factory:rt}=B,Dt=(e,t)=>{B.addSyntheticLeadingComment(e,B.SyntaxKind.MultiLineCommentTrivia,`* ${t} `,!0)},ue=(e,t,r)=>{let o=rt.createTypeAliasDeclaration(void 0,rt.createIdentifier(t),void 0,e);return r&&Dt(o,r),o},kt=(e,t)=>{let r=B.createSourceFile("print.ts","",B.ScriptTarget.Latest,!1,B.ScriptKind.TS);return B.createPrinter(t).printNode(B.EmitHint.Unspecified,e,r)},ci=/^[A-Za-z_$][A-Za-z0-9_$]*$/,Jr=e=>ci.test(e)?rt.createIdentifier(e):rt.createStringLiteral(e);var{factory:u}=y,mi={[y.SyntaxKind.AnyKeyword]:"",[y.SyntaxKind.BigIntKeyword]:BigInt(0),[y.SyntaxKind.BooleanKeyword]:!1,[y.SyntaxKind.NumberKeyword]:0,[y.SyntaxKind.ObjectKeyword]:{},[y.SyntaxKind.StringKeyword]:"",[y.SyntaxKind.UndefinedKeyword]:void 0},li=({schema:{value:e}})=>u.createLiteralTypeNode(typeof e=="number"?u.createNumericLiteral(e):typeof e=="boolean"?e?u.createTrue():u.createFalse():u.createStringLiteral(e)),ui=({schema:{shape:e},isResponse:t,next:r,optionalPropStyle:{withQuestionMark:o}})=>{let i=Object.entries(e).map(([s,a])=>{let p=t&&xe(a)?a instanceof Lt.ZodOptional:a.isOptional(),d=u.createPropertySignature(void 0,Jr(s),p&&o?u.createToken(y.SyntaxKind.QuestionToken):void 0,r(a));return a.description&&Dt(d,a.description),d});return u.createTypeLiteralNode(i)},fi=({schema:{element:e},next:t})=>u.createArrayTypeNode(t(e)),yi=({schema:{options:e}})=>u.createUnionTypeNode(e.map(t=>u.createLiteralTypeNode(u.createStringLiteral(t)))),Qr=({schema:{options:e},next:t})=>u.createUnionTypeNode(e.map(t)),gi=e=>mi?.[e.kind],hi=({schema:e,next:t,isResponse:r})=>{let o=t(e.innerType()),i=e._def.effect;if(r&&i.type==="transform"){let s=ke(e,gi(o)),a={number:y.SyntaxKind.NumberKeyword,bigint:y.SyntaxKind.BigIntKeyword,boolean:y.SyntaxKind.BooleanKeyword,string:y.SyntaxKind.StringKeyword,undefined:y.SyntaxKind.UndefinedKeyword,object:y.SyntaxKind.ObjectKeyword};return u.createKeywordTypeNode(s&&a[s]||y.SyntaxKind.AnyKeyword)}return o},xi=({schema:e})=>u.createUnionTypeNode(Object.values(e.enum).map(t=>u.createLiteralTypeNode(typeof t=="number"?u.createNumericLiteral(t):u.createStringLiteral(t)))),Ti=({next:e,schema:t,optionalPropStyle:{withUndefined:r}})=>{let o=e(t.unwrap());return r?u.createUnionTypeNode([o,u.createKeywordTypeNode(y.SyntaxKind.UndefinedKeyword)]):o},bi=({next:e,schema:t})=>u.createUnionTypeNode([e(t.unwrap()),u.createLiteralTypeNode(u.createNull())]),Si=({next:e,schema:{items:t,_def:{rest:r}}})=>u.createTupleTypeNode(t.map(e).concat(r===null?[]:u.createRestTypeNode(e(r)))),Oi=({next:e,schema:{keySchema:t,valueSchema:r}})=>u.createExpressionWithTypeArguments(u.createIdentifier("Record"),[t,r].map(e)),Ai=({next:e,schema:t})=>u.createIntersectionTypeNode([t._def.left,t._def.right].map(e)),Ri=({next:e,schema:t})=>e(t._def.innerType),ee=e=>()=>u.createKeywordTypeNode(e),Pi=({next:e,schema:t})=>e(t.unwrap()),Ci=({next:e,schema:t})=>e(t._def.innerType),Ii=({next:e,schema:t})=>e(t._def.innerType),Zi=({schema:e,next:t,isResponse:r})=>t(e._def[r?"out":"in"]),Ei=()=>u.createLiteralTypeNode(u.createNull()),zi=({getAlias:e,makeAlias:t,next:r,serializer:o,schema:i})=>{let s=`Type${o(i.schema)}`;return e(s)||(t(s,u.createLiteralTypeNode(u.createNull())),t(s,r(i.schema)))},wi=({schema:e})=>{let t=u.createKeywordTypeNode(y.SyntaxKind.StringKeyword),r=u.createTypeReferenceNode("Buffer"),o=u.createUnionTypeNode([t,r]);return e instanceof Lt.ZodString?t:e instanceof Lt.ZodUnion?o:r},Mi=({next:e,schema:t})=>e(t.shape.raw),Ni={ZodString:ee(y.SyntaxKind.StringKeyword),ZodNumber:ee(y.SyntaxKind.NumberKeyword),ZodBigInt:ee(y.SyntaxKind.BigIntKeyword),ZodBoolean:ee(y.SyntaxKind.BooleanKeyword),ZodAny:ee(y.SyntaxKind.AnyKeyword),[Pe]:ee(y.SyntaxKind.StringKeyword),[Ce]:ee(y.SyntaxKind.StringKeyword),ZodNull:Ei,ZodArray:fi,ZodTuple:Si,ZodRecord:Oi,ZodObject:ui,ZodLiteral:li,ZodIntersection:Ai,ZodUnion:Qr,ZodDefault:Ri,ZodEnum:yi,ZodNativeEnum:xi,ZodEffects:hi,ZodOptional:Ti,ZodNullable:bi,ZodDiscriminatedUnion:Qr,ZodBranded:Pi,ZodCatch:Ii,ZodPipeline:Zi,ZodLazy:zi,ZodReadonly:Ci,[U]:wi,[Y]:Mi},Ze=({schema:e,...t})=>W({schema:e,rules:Ni,onMissing:()=>u.createKeywordTypeNode(y.SyntaxKind.AnyKeyword),...t});var jt=class{program=[];usage=[];registry={};paths=[];aliases={};ids={pathType:n.createIdentifier("Path"),methodType:n.createIdentifier("Method"),methodPathType:n.createIdentifier("MethodPath"),inputInterface:n.createIdentifier("Input"),posResponseInterface:n.createIdentifier("PositiveResponse"),negResponseInterface:n.createIdentifier("NegativeResponse"),responseInterface:n.createIdentifier("Response"),jsonEndpointsConst:n.createIdentifier("jsonEndpoints"),endpointTagsConst:n.createIdentifier("endpointTags"),providerType:n.createIdentifier("Provider"),implementationType:n.createIdentifier("Implementation"),clientClass:n.createIdentifier("ExpressZodAPIClient"),keyParameter:n.createIdentifier("key"),pathParameter:n.createIdentifier("path"),paramsArgument:n.createIdentifier("params"),methodParameter:n.createIdentifier("method"),accumulator:n.createIdentifier("acc"),provideMethod:n.createIdentifier("provide"),implementationArgument:n.createIdentifier("implementation"),headersProperty:n.createIdentifier("headers"),hasBodyConst:n.createIdentifier("hasBody"),undefinedValue:n.createIdentifier("undefined"),bodyProperty:n.createIdentifier("body"),responseConst:n.createIdentifier("response"),searchParamsConst:n.createIdentifier("searchParams"),exampleImplementationConst:n.createIdentifier("exampleImplementation"),clientConst:n.createIdentifier("client")};interfaces=[];getAlias(t){return t in this.aliases?n.createTypeReferenceNode(t):void 0}makeAlias(t,r){return this.aliases[t]=ue(r,t),this.getAlias(t)}constructor({routing:t,variant:r="client",serializer:o=De,splitResponse:i=!1,optionalPropStyle:s={withQuestionMark:!0,withUndefined:!0}}){Q({routing:t,onEndpoint:(g,O,R)=>{let w={serializer:o,getAlias:this.getAlias.bind(this),makeAlias:this.makeAlias.bind(this),optionalPropStyle:s},re=Z(R,O,"input"),Wr=Ze({...w,schema:g.getSchema("input"),isResponse:!1}),ge=i?Z(R,O,"positive.response"):void 0,Ht=g.getSchema("positive"),Ut=i?Ze({...w,isResponse:!0,schema:Ht}):void 0,he=i?Z(R,O,"negative.response"):void 0,Kt=g.getSchema("negative"),Ft=i?Ze({...w,isResponse:!0,schema:Kt}):void 0,qt=Z(R,O,"response"),Xr=ge&&he?n.createUnionTypeNode([n.createTypeReferenceNode(ge),n.createTypeReferenceNode(he)]):Ze({...w,isResponse:!0,schema:Ht.or(Kt)});this.program.push(ue(Wr,re)),Ut&&ge&&this.program.push(ue(Ut,ge)),Ft&&he&&this.program.push(ue(Ft,he)),this.program.push(ue(Xr,qt)),R!=="options"&&(this.paths.push(O),this.registry[`${R} ${O}`]={input:re,positive:ge,negative:he,response:qt,isJson:g.getMimeTypes("positive").includes(v),tags:g.getTags()})}}),this.program.unshift(...Object.values(this.aliases)),this.program.push(Mt(this.ids.pathType,this.paths)),this.program.push(Mt(this.ids.methodType,Yr)),this.program.push(tt(this.ids.methodPathType,Et([this.ids.methodType,this.ids.pathType])));let a=[n.createHeritageClause(z.SyntaxKind.ExtendsKeyword,[wt(this.ids.methodPathType,z.SyntaxKind.AnyKeyword)])];this.interfaces.push({id:this.ids.inputInterface,kind:"input"}),i&&this.interfaces.push({id:this.ids.posResponseInterface,kind:"positive"},{id:this.ids.negResponseInterface,kind:"negative"}),this.interfaces.push({id:this.ids.responseInterface,kind:"response"});for(let{id:g,kind:O}of this.interfaces)this.program.push(_r(g,a,Object.keys(this.registry).map(R=>{let w=this.registry[R][O];return w?Fr(R,w):void 0}).filter(R=>R!==void 0)));if(r==="types")return;let p=n.createVariableStatement(F,q(this.ids.jsonEndpointsConst,n.createObjectLiteralExpression(Object.keys(this.registry).filter(g=>this.registry[g].isJson).map(g=>n.createPropertyAssignment(`"${g}"`,n.createTrue()))))),d=n.createVariableStatement(F,q(this.ids.endpointTagsConst,n.createObjectLiteralExpression(Object.keys(this.registry).map(g=>n.createPropertyAssignment(`"${g}"`,n.createArrayLiteralExpression(this.registry[g].tags.map(O=>n.createStringLiteral(O)))))))),c=tt(this.ids.providerType,n.createFunctionTypeNode(Gr({M:this.ids.methodType,P:this.ids.pathType}),et({method:n.createTypeReferenceNode("M"),path:n.createTypeReferenceNode("P"),params:n.createIndexedAccessTypeNode(n.createTypeReferenceNode(this.ids.inputInterface),zt)}),$r(this.ids.responseInterface,zt))),l=tt(this.ids.implementationType,n.createFunctionTypeNode(void 0,et({method:n.createTypeReferenceNode(this.ids.methodType),path:n.createKeywordTypeNode(z.SyntaxKind.StringKeyword),params:wt(z.SyntaxKind.StringKeyword,z.SyntaxKind.AnyKeyword)}),Vr())),m=n.createTemplateExpression(n.createTemplateHead(":"),[n.createTemplateSpan(this.ids.keyParameter,le)]),f=vt(this.ids.paramsArgument,n.createCallExpression(n.createPropertyAccessExpression(this.ids.accumulator,"replace"),void 0,[m,n.createElementAccessExpression(this.ids.paramsArgument,this.ids.keyParameter)]),this.ids.pathParameter),b=vt(this.ids.paramsArgument,n.createConditionalExpression(n.createBinaryExpression(n.createCallExpression(n.createPropertyAccessExpression(this.ids.pathParameter,"indexOf"),void 0,[m]),z.SyntaxKind.GreaterThanEqualsToken,n.createNumericLiteral(0)),void 0,this.ids.accumulator,void 0,n.createObjectLiteralExpression([n.createSpreadAssignment(this.ids.accumulator),n.createPropertyAssignment(n.createComputedPropertyName(this.ids.keyParameter),n.createElementAccessExpression(this.ids.paramsArgument,this.ids.keyParameter))])),n.createObjectLiteralExpression()),x=Br(this.ids.clientClass,Kr([Xe(this.ids.implementationArgument,n.createTypeReferenceNode(this.ids.implementationType),Ur)]),[qr(this.ids.provideMethod,n.createTypeReferenceNode(this.ids.providerType),Nt([this.ids.methodParameter,this.ids.pathParameter,this.ids.paramsArgument],n.createCallExpression(n.createPropertyAccessExpression(n.createThis(),this.ids.implementationArgument),void 0,[this.ids.methodParameter,f,b]),!0))]);this.program.push(p,d,c,l,x);let A=n.createPropertyAssignment(this.ids.methodParameter,n.createCallExpression(n.createPropertyAccessExpression(this.ids.methodParameter,"toUpperCase"),void 0,void 0)),h=n.createPropertyAssignment(this.ids.headersProperty,n.createConditionalExpression(this.ids.hasBodyConst,void 0,n.createObjectLiteralExpression([n.createPropertyAssignment(n.createStringLiteral("Content-Type"),n.createStringLiteral(v))]),void 0,this.ids.undefinedValue)),S=n.createPropertyAssignment(this.ids.bodyProperty,n.createConditionalExpression(this.ids.hasBodyConst,void 0,n.createCallExpression(n.createPropertyAccessExpression(n.createIdentifier("JSON"),"stringify"),void 0,[this.ids.paramsArgument]),void 0,this.ids.undefinedValue)),fe=n.createVariableStatement(void 0,q(this.ids.responseConst,n.createAwaitExpression(n.createCallExpression(n.createIdentifier("fetch"),void 0,[n.createTemplateExpression(n.createTemplateHead("https://example.com"),[n.createTemplateSpan(this.ids.pathParameter,n.createTemplateMiddle("")),n.createTemplateSpan(this.ids.searchParamsConst,le)]),n.createObjectLiteralExpression([A,h,S])])))),Ee=n.createVariableStatement(void 0,q(this.ids.hasBodyConst,n.createLogicalNot(n.createCallExpression(n.createPropertyAccessExpression(n.createArrayLiteralExpression([n.createStringLiteral("get"),n.createStringLiteral("delete")]),"includes"),void 0,[this.ids.methodParameter])))),ye=n.createVariableStatement(void 0,q(this.ids.searchParamsConst,n.createConditionalExpression(this.ids.hasBodyConst,void 0,n.createStringLiteral(""),void 0,n.createTemplateExpression(n.createTemplateHead("?"),[n.createTemplateSpan(n.createNewExpression(n.createIdentifier("URLSearchParams"),void 0,[this.ids.paramsArgument]),le)])))),[te,ze]=["json","text"].map(g=>n.createReturnStatement(n.createCallExpression(n.createPropertyAccessExpression(this.ids.responseConst,g),void 0,void 0))),we=n.createIfStatement(n.createBinaryExpression(n.createTemplateExpression(It,[n.createTemplateSpan(this.ids.methodParameter,Zt),n.createTemplateSpan(this.ids.pathParameter,le)]),z.SyntaxKind.InKeyword,this.ids.jsonEndpointsConst),n.createBlock([te])),ot=n.createVariableStatement(F,q(this.ids.exampleImplementationConst,Nt([this.ids.methodParameter,this.ids.pathParameter,this.ids.paramsArgument],n.createBlock([Ee,ye,fe,we,ze]),!0),n.createTypeReferenceNode(this.ids.implementationType))),Me=n.createExpressionStatement(n.createCallExpression(n.createPropertyAccessExpression(this.ids.clientConst,this.ids.provideMethod),void 0,[n.createStringLiteral("get"),n.createStringLiteral("/v1/user/retrieve"),n.createObjectLiteralExpression([n.createPropertyAssignment("id",n.createStringLiteral("10"))])])),N=n.createVariableStatement(void 0,q(this.ids.clientConst,n.createNewExpression(this.ids.clientClass,void 0,[this.ids.exampleImplementationConst])));this.usage.push(ot,N,Me)}printUsage(t){return this.usage.length?this.usage.map(r=>typeof r=="string"?r:kt(r,t)).join(`
21
21
  `):void 0}print(t){let r=this.printUsage(t),o=r&&z.addSyntheticLeadingComment(z.addSyntheticLeadingComment(n.createEmptyStatement(),z.SyntaxKind.SingleLineCommentTrivia," Usage example:"),z.SyntaxKind.MultiLineCommentTrivia,`
22
22
  ${r}`);return this.program.concat(o||[]).map((i,s)=>kt(i,s<this.program.length?t:{...t,omitTrailingSemicolon:!0})).join(`
23
23
 
24
- `)}async printFormatted({printerOptions:t,format:r}={}){let o=r;if(!o)try{let a=(await me("prettier")).format;o=p=>a(p,{filepath:"client.ts"})}catch{}let i=this.printUsage(t);this.usage=i&&o?[await o(i)]:this.usage;let s=this.print(t);return o?o(s):s}};var Mi={dateIn:gr,dateOut:hr,file:je,upload:Jt,raw:Wt};export{ce as AbstractEndpoint,Re as DependsOnMethod,Ct as Documentation,C as DocumentationError,Ae as EndpointsFactory,j as InputValidationError,jt as Integration,se as MissingPeerError,V as OutputValidationError,ie as RoutingError,Pe as ServeStatic,Zo as arrayEndpointsFactory,ht as arrayResultHandler,Vo as attachRouting,Xr as createConfig,Tt as createLogger,yt as createMiddleware,gt as createResultHandler,_o as createServer,Eo as defaultEndpointsFactory,Oe as defaultResultHandler,Mi as ez,U as getExamples,H as getMessageFromError,De as getStatusCodeFromError,ii as testEndpoint,M as withMeta};
24
+ `)}async printFormatted({printerOptions:t,format:r}={}){let o=r;if(!o)try{let a=(await ce("prettier")).format;o=p=>a(p,{filepath:"client.ts"})}catch{}let i=this.printUsage(t);this.usage=i&&o?[await o(i)]:this.usage;let s=this.print(t);return o?o(s):s}};var vi={dateIn:hr,dateOut:xr,file:je,upload:Wt,raw:Qt};export{de as AbstractEndpoint,Ae as DependsOnMethod,Ct as Documentation,I as DocumentationError,Oe as EndpointsFactory,L as InputValidationError,jt as Integration,ie as MissingPeerError,$ as OutputValidationError,ne as RoutingError,Re as ServeStatic,wo as arrayEndpointsFactory,ht as arrayResultHandler,Go as attachRouting,eo as createConfig,Tt as createLogger,yt as createMiddleware,gt as createResultHandler,Yo as createServer,zo as defaultEndpointsFactory,Se as defaultResultHandler,vi as ez,H as getExamples,j as getMessageFromError,ve as getStatusCodeFromError,ai as testEndpoint,go as withMeta};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "express-zod-api",
3
- "version": "18.4.0",
3
+ "version": "18.5.0-beta1",
4
4
  "description": "A Typescript library to help you get an API server up and running with I/O schema validation and custom middlewares in minutes.",
5
5
  "license": "MIT",
6
6
  "repository": {