express-zod-api 16.5.0 → 16.5.2

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/CHANGELOG.md CHANGED
@@ -2,6 +2,24 @@
2
2
 
3
3
  ## Version 16
4
4
 
5
+ ### 16.5.2
6
+
7
+ - Refactoring: rewrote some reducers using declarative and functional approach.
8
+ - In certain cases it improved the performance slightly.
9
+
10
+ ### 16.5.1
11
+
12
+ - Excluding empty `properties` in the generated documentation.
13
+ - Applies to both `z.object()` and `z.record()`.
14
+
15
+ ```yaml
16
+ before:
17
+ type: object
18
+ properties: {}
19
+ after:
20
+ type: object
21
+ ```
22
+
5
23
  ### 16.5.0
6
24
 
7
25
  - Flattening nested intersections of object schemas in the generated documentation:
package/dist/index.cjs CHANGED
@@ -1,8 +1,8 @@
1
- "use strict";var fo=Object.create;var He=Object.defineProperty;var yo=Object.getOwnPropertyDescriptor;var go=Object.getOwnPropertyNames;var ho=Object.getPrototypeOf,xo=Object.prototype.hasOwnProperty;var To=(e,t)=>{for(var r in t)He(e,r,{get:t[r],enumerable:!0})},Jt=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of go(t))!xo.call(e,i)&&i!==r&&He(e,i,{get:()=>t[i],enumerable:!(o=yo(t,i))||o.enumerable});return e};var R=(e,t,r)=>(r=e!=null?fo(ho(e)):{},Jt(t||!e||!e.__esModule?He(r,"default",{value:e,enumerable:!0}):r,e)),bo=e=>Jt(He({},"__esModule",{value:!0}),e);var Fn={};To(Fn,{AbstractEndpoint:()=>ce,DependsOnMethod:()=>Se,Documentation:()=>st,DocumentationError:()=>w,EndpointsFactory:()=>be,InputValidationError:()=>K,Integration:()=>lt,MissingPeerError:()=>ie,OutputValidationError:()=>Y,RoutingError:()=>oe,ServeStatic:()=>Oe,arrayEndpointsFactory:()=>Tr,arrayResultHandler:()=>rt,attachRouting:()=>Zr,createConfig:()=>Qt,createLogger:()=>ot,createMiddleware:()=>et,createResultHandler:()=>tt,createServer:()=>zr,defaultEndpointsFactory:()=>xr,defaultResultHandler:()=>Te,ez:()=>mo,getExamples:()=>V,getMessageFromError:()=>F,getStatusCodeFromError:()=>ve,testEndpoint:()=>Jr,withMeta:()=>j});module.exports=bo(Fn);function Qt(e){return e}var Ot=R(require("assert/strict"),1),Qe=require("zod");var Xt=require("zod"),ye={positive:200,negative:400},ft=(e,t)=>e instanceof Xt.z.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}));var dr=require("http-errors"),cr=require("crypto"),mr=require("ramda"),A=require("zod");var oe=class extends Error{name="RoutingError"},w=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)}},W=class extends Error{name="IOSchemaError"},Y=class extends W{name="OutputValidationError";originalError;constructor(t){super(F(t)),this.originalError=t}},K=class extends W{name="InputValidationError";originalError;constructor(t){super(F(t)),this.originalError=t}},ne=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 yt=require("zod"),Ue=require("ramda"),B="expressZodApiMeta",So=e=>e.describe(e.description),j=e=>{let t=So(e);return t._def[B]=(0,Ue.clone)(t._def[B])||{examples:[]},Object.defineProperties(t,{example:{get:()=>r=>{let o=j(t);return o._def[B].examples.push(r),o}}})},er=e=>yt.z.object({[B]:yt.z.object({})}).safeParse(e._def).success,we=(e,t)=>er(e)?e._def[B][t]:void 0,tr=(e,t)=>{if(!er(e))return t;let r=j(t);return r._def[B].examples=se(r._def[B].examples,e._def[B].examples,([o,i])=>typeof o=="object"&&typeof i=="object"?(0,Ue.mergeDeepRight)({...o},{...i}):i),r},D=(e,t)=>{let r=j(t);return r._def[B].kind=e,r},gt=(e,t)=>we(e,"kind")===t;var q="application/json",Ee="multipart/form-data",rr="application/octet-stream";var sr=require("zod");var qe=require("zod");var or=require("zod"),Ke=e=>!isNaN(e.getTime()),Ze=or.z.custom(e=>Buffer.isBuffer(e),{message:"Expected Buffer"}),nr=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,Fe=/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$/;var ze="File",Be=e=>Object.entries(ir).reduce((t,[r,o])=>Object.defineProperty(t,r,{get:()=>o}),D(ze,e)),ir={buffer:({}={})=>Be(Ze),string:({}={})=>Be(qe.z.string()),binary:({}={})=>Be(Ze.or(qe.z.string())),base64:({}={})=>Be(qe.z.string().regex(nr,"Does not match base64 encoding"))};function Ve(e){return ir[e||"string"]()}var ae="Raw",ar=()=>D(ae,sr.z.object({raw:Ve("buffer")}));var M=require("zod");var Me="Upload",pr=()=>D(Me,M.z.custom(e=>M.z.object({name:M.z.string(),encoding:M.z.string(),mimetype:M.z.string(),data:Ze,tempFilePath:M.z.string(),truncated:M.z.boolean(),size:M.z.number(),md5:M.z.string(),mv:M.z.function()}).safeParse(e).success,e=>({message:`Expected file upload, received ${typeof e}`})));var Oo=e=>{let r=(e.header("content-type")||"").slice(0,Ee.length).toLowerCase()===Ee;return"files"in e&&r},$e={get:["query","params"],post:["body","params","files"],put:["body","params"],patch:["body","params"],delete:["query","params"]},Ro=["body","query","params"],ht=e=>e.method.toLowerCase(),xt=e=>e.startsWith("x-"),Ao=e=>Object.entries(e.headers).reduce((t,[r,o])=>xt(r)?{...t,[r]:o}:t,{}),lr=(e,t)=>{let r=ht(e);if(r==="options")return{};let o=Ro;return r in $e&&(o=$e[r]),t&&r in t&&(o=t[r]||o),o.filter(i=>i==="files"?Oo(e):!0).reduce((i,s)=>({...i,...s==="headers"?Ao(e):e[s]}),{})},he=e=>e instanceof Error?e:new Error(typeof e=="symbol"?e.toString():`${e}`),F=e=>e instanceof A.z.ZodError?e.issues.map(({path:t,message:r})=>(t.length?[t.join("/")]:[]).concat(r).join(": ")).join("; "):e instanceof Y?`output${e.originalError.issues[0]?.path.length>0?"/":": "}${e.message}`:e.message,ve=e=>(0,dr.isHttpError)(e)?e.statusCode:e instanceof K?400:500,Tt=({logger:e,request:t,input:r,error:o,statusCode:i})=>{i===500&&e.error(`Internal server error
1
+ "use strict";var go=Object.create;var Ue=Object.defineProperty;var ho=Object.getOwnPropertyDescriptor;var xo=Object.getOwnPropertyNames;var To=Object.getPrototypeOf,bo=Object.prototype.hasOwnProperty;var So=(e,t)=>{for(var r in t)Ue(e,r,{get:t[r],enumerable:!0})},Xt=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of xo(t))!bo.call(e,i)&&i!==r&&Ue(e,i,{get:()=>t[i],enumerable:!(o=ho(t,i))||o.enumerable});return e};var A=(e,t,r)=>(r=e!=null?go(To(e)):{},Xt(t||!e||!e.__esModule?Ue(r,"default",{value:e,enumerable:!0}):r,e)),Oo=e=>Xt(Ue({},"__esModule",{value:!0}),e);var qn={};So(qn,{AbstractEndpoint:()=>ce,DependsOnMethod:()=>Oe,Documentation:()=>at,DocumentationError:()=>w,EndpointsFactory:()=>Se,InputValidationError:()=>K,Integration:()=>ut,MissingPeerError:()=>ie,OutputValidationError:()=>Y,RoutingError:()=>oe,ServeStatic:()=>Re,arrayEndpointsFactory:()=>Sr,arrayResultHandler:()=>ot,attachRouting:()=>Mr,createConfig:()=>er,createLogger:()=>nt,createMiddleware:()=>tt,createResultHandler:()=>rt,createServer:()=>vr,defaultEndpointsFactory:()=>br,defaultResultHandler:()=>be,ez:()=>uo,getExamples:()=>V,getMessageFromError:()=>F,getStatusCodeFromError:()=>Ne,testEndpoint:()=>Xr,withMeta:()=>j});module.exports=Oo(qn);function er(e){return e}var At=A(require("assert/strict"),1),Xe=require("zod");var tr=require("zod"),ye={positive:200,negative:400},yt=(e,t)=>e instanceof tr.z.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}));var mr=require("http-errors"),lr=require("crypto"),he=require("ramda"),P=require("zod");var oe=class extends Error{name="RoutingError"},w=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)}},W=class extends Error{name="IOSchemaError"},Y=class extends W{name="OutputValidationError";originalError;constructor(t){super(F(t)),this.originalError=t}},K=class extends W{name="InputValidationError";originalError;constructor(t){super(F(t)),this.originalError=t}},ne=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 gt=require("zod"),Ke=require("ramda"),B="expressZodApiMeta",Ro=e=>e.describe(e.description),j=e=>{let t=Ro(e);return t._def[B]=(0,Ke.clone)(t._def[B])||{examples:[]},Object.defineProperties(t,{example:{get:()=>r=>{let o=j(t);return o._def[B].examples.push(r),o}}})},rr=e=>gt.z.object({[B]:gt.z.object({})}).safeParse(e._def).success,Ze=(e,t)=>rr(e)?e._def[B][t]:void 0,or=(e,t)=>{if(!rr(e))return t;let r=j(t);return r._def[B].examples=se(r._def[B].examples,e._def[B].examples,([o,i])=>typeof o=="object"&&typeof i=="object"?(0,Ke.mergeDeepRight)({...o},{...i}):i),r},D=(e,t)=>{let r=j(t);return r._def[B].kind=e,r},ht=(e,t)=>Ze(e,"kind")===t;var q="application/json",Fe="multipart/form-data",nr="application/octet-stream";var pr=require("zod");var $e=require("zod");var ir=require("zod"),Be=e=>!isNaN(e.getTime()),ze=ir.z.custom(e=>Buffer.isBuffer(e),{message:"Expected Buffer"}),sr=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,qe=/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$/;var Me="File",Ve=e=>Object.entries(ar).reduce((t,[r,o])=>Object.defineProperty(t,r,{get:()=>o}),D(Me,e)),ar={buffer:({}={})=>Ve(ze),string:({}={})=>Ve($e.z.string()),binary:({}={})=>Ve(ze.or($e.z.string())),base64:({}={})=>Ve($e.z.string().regex(sr,"Does not match base64 encoding"))};function _e(e){return ar[e||"string"]()}var ae="Raw",dr=()=>D(ae,pr.z.object({raw:_e("buffer")}));var M=require("zod");var ve="Upload",cr=()=>D(ve,M.z.custom(e=>M.z.object({name:M.z.string(),encoding:M.z.string(),mimetype:M.z.string(),data:ze,tempFilePath:M.z.string(),truncated:M.z.boolean(),size:M.z.number(),md5:M.z.string(),mv:M.z.function()}).safeParse(e).success,e=>({message:`Expected file upload, received ${typeof e}`})));var Ao=e=>{let r=(e.header("content-type")||"").toLowerCase().startsWith(Fe);return"files"in e&&r},xt={get:["query","params"],post:["body","params","files"],put:["body","params"],patch:["body","params"],delete:["query","params"]},Po=["body","query","params"],Tt=e=>e.method.toLowerCase(),bt=e=>e.startsWith("x-"),Co=e=>(0,he.pickBy)((0,he.flip)(bt),e),ur=(e,t={})=>{let r=Tt(e);return r==="options"?{}:(t[r]||xt[r]||Po).filter(o=>o==="files"?Ao(e):!0).map(o=>o==="headers"?Co(e[o]):e[o]).reduce((o,i)=>({...o,...i}),{})},xe=e=>e instanceof Error?e:new Error(typeof e=="symbol"?e.toString():`${e}`),F=e=>e instanceof P.z.ZodError?e.issues.map(({path:t,message:r})=>(t.length?[t.join("/")]:[]).concat(r).join(": ")).join("; "):e instanceof Y?`output${e.originalError.issues[0]?.path.length>0?"/":": "}${e.message}`:e.message,Ne=e=>(0,mr.isHttpError)(e)?e.statusCode:e instanceof K?400:500,St=({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})},V=({schema:e,variant:t="original",validate:r=t==="parsed"})=>{let o=we(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},se=(e,t,r)=>e.length&&t.length?(0,mr.xprod)(e,t).map(r):e.concat(t),ge=e=>e instanceof A.z.ZodEffects&&e._def.effect.type!=="refinement"?!0:e instanceof A.z.ZodUnion?e.options.some(ge):e instanceof A.z.ZodIntersection?[e._def.left,e._def.right].some(ge):!1,L=({subject:e,condition:t,maxDepth:r,depth:o=1})=>{if(t(e))return!0;if(r!==void 0&&o>=r)return!1;let i={condition:t,maxDepth:r,depth:o+1};return e instanceof A.z.ZodObject?Object.values(e.shape).some(s=>L({subject:s,...i})):e instanceof A.z.ZodUnion?e.options.some(s=>L({subject:s,...i})):e instanceof A.z.ZodIntersection?[e._def.left,e._def.right].some(s=>L({subject:s,...i})):e instanceof A.z.ZodOptional||e instanceof A.z.ZodNullable?L({subject:e.unwrap(),...i}):e instanceof A.z.ZodEffects||e instanceof A.z.ZodTransformer?L({subject:e.innerType(),...i}):e instanceof A.z.ZodRecord?L({subject:e.valueSchema,...i}):e instanceof A.z.ZodArray?L({subject:e.element,...i}):e instanceof A.z.ZodDefault?L({subject:e._def.innerType,...i}):!1},ur=e=>L({subject:e,condition:t=>gt(t,Me)}),fr=e=>L({subject:e,condition:t=>gt(t,ae),maxDepth:3}),Ne=e=>"coerce"in e._def&&typeof e._def.coerce=="boolean"?e._def.coerce:!1,bt=e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase(),v=(...e)=>e.flatMap(t=>t.split(/[^A-Z0-9]/gi)).flatMap(t=>t.replaceAll(/[A-Z]+/g,r=>`/${r}`).split("/")).map(bt).join(""),_e=e=>(0,cr.createHash)("sha1").update(JSON.stringify(e),"utf8").digest("hex"),Ge=(e,t)=>{try{return typeof e.parse(t)}catch{return}};var We=({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}.`:""))};var yr=e=>typeof e=="object"&&e!==null,pe=e=>yr(e)&&"or"in e,de=e=>yr(e)&&"and"in e,Ye=e=>({and:e.reduce((t,r)=>t.concat(de(r)?r.and:r),[])}),Je=(e,t)=>de(e)?{and:e.and.map(r=>pe(r)?{or:r.or.map(t)}:t(r))}:pe(e)?{or:e.or.map(r=>de(r)?{and:r.and.map(t)}:t(r))}:t(e),St=e=>e.and.reduce((t,r)=>({or:se(t.or,pe(r)?r.or:[r],Ye)}),{or:[]}),xe=(e,t)=>de(e)?de(t)?Ye([e,t]):pe(t)?xe(St(e),t):Ye([e,t]):pe(e)?de(t)?xe(t,e):pe(t)?{or:se(e.or,t.or,Ye)}:xe(e,{and:[t]}):de(t)||pe(t)?xe(t,e):{and:[e,t]};var ce=class{},Xe=class extends ce{#e;#o;#n;#i;#t;#s;#a;#r;#p;#d;#c;#m=[];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,T]of Object.entries(this.#r))(0,Ot.default)(!ge(T),new W(`Using transformations on the top level of endpoint ${f} schema is not allowed.`));this.#t={positive:ft(s.getPositiveResponse(o),{mimeTypes:[q],statusCodes:[ye.positive]}),negative:ft(s.getNegativeResponse(),{mimeTypes:[q],statusCodes:[ye.negative]})};for(let[f,T]of Object.entries(this.#t))(0,Ot.default)(T.length,new ne(`ResultHandler must have at least one ${f} response schema specified.`));this.#i={input:ur(r)?[Ee]:fr(r)?[rr]:[q],positive:this.#t.positive.flatMap(({mimeTypes:f})=>f),negative:this.#t.negative.flatMap(({mimeTypes:f})=>f)}}_setSiblingMethods(t){this.#m=t}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?xe(t,r.security):t,{and:[]})}getScopes(){return this.#p}getTags(){return this.#d}getOperationId(t){return this.#c(t)}#l(){return{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":this.#o.concat(this.#m).concat("options").join(", ").toUpperCase(),"Access-Control-Allow-Headers":"content-type"}}async#u(t){try{return await this.#r.output.parseAsync(t)}catch(r){throw r instanceof Qe.z.ZodError?new Y(r):r}}async#f({method:t,input:r,request:o,response:i,logger:s}){let a={},p=!1;for(let d of this.#n){if(t==="options"&&d.type==="proprietary")continue;let c;try{c=await d.input.parseAsync(r)}catch(l){throw l instanceof Qe.z.ZodError?new K(l):l}if(Object.assign(a,await d.middleware({input:c,options:a,request:o,response:i,logger:s})),p="writableEnded"in i&&i.writableEnded,p){s.warn(`The middleware ${d.middleware.name} has closed the stream. Accumulated options:`,a);break}}return{options:a,isStreamClosed:p}}async#y({input:t,options:r,logger:o}){let i;try{i=await this.#r.input.parseAsync(t)}catch(s){throw s instanceof Qe.z.ZodError?new K(s):s}return this.#s({input:i,options:r,logger:o})}async#g({error:t,request:r,response:o,logger:i,input:s,output:a}){try{await this.#a.handler({error:t,output:a,request:r,response:o,logger:i,input:s})}catch(p){We({logger:i,response:o,error:new ne(he(p).message,t)})}}async execute({request:t,response:r,logger:o,config:i}){let s=ht(t),a=null,p=null;if(i.cors){let c=this.#l();typeof i.cors=="function"&&(c=await i.cors({request:t,logger:o,endpoint:this,defaultHeaders:c}));for(let l in c)r.set(l,c[l])}let d=lr(t,i.inputSources);try{let{options:c,isStreamClosed:l}=await this.#f({method:s,input:d,request:t,response:r,logger:o});if(l)return;if(s==="options"){r.status(200).end();return}a=await this.#u(await this.#y({input:d,options:c,logger:o}))}catch(c){p=he(c)}await this.#g({input:d,output:a,request:t,response:r,error:p,logger:o})}};var Rt=require("zod");var gr=(e,t)=>{let r=e.map(({input:i})=>i).concat(t),o=r.reduce((i,s)=>i.and(s));return r.reduce((i,s)=>tr(s,i),o)};var hr=R(require("assert/strict"),1),et=e=>((0,hr.default)(!ge(e.input),new W("Using transformations on the top level of middleware input schema is not allowed.")),{...e,type:"proprietary"});var N=require("zod");var tt=e=>e,Te=tt({getPositiveResponse:e=>{let t=V({schema:e}),r=j(N.z.object({status:N.z.literal("success"),data:e}));return t.reduce((o,i)=>o.example({status:"success",data:i}),r)},getNegativeResponse:()=>j(N.z.object({status:N.z.literal("error"),error:N.z.object({message:N.z.string()})})).example({status:"error",error:{message:F(new Error("Sample error message"))}}),handler:({error:e,input:t,output:r,request:o,response:i,logger:s})=>{if(!e){i.status(ye.positive).json({status:"success",data:r});return}let a=ve(e);Tt({logger:s,statusCode:a,request:o,error:e,input:t}),i.status(a).json({status:"error",error:{message:F(e)}})}}),rt=tt({getPositiveResponse:e=>{let t=V({schema:e}),r=j("shape"in e&&"items"in e.shape&&e.shape.items instanceof N.z.ZodArray?e.shape.items:N.z.array(N.z.any()));return t.reduce((o,i)=>typeof i=="object"&&i!==null&&"items"in i&&Array.isArray(i.items)?o.example(i.items):o,r)},getNegativeResponse:()=>j(N.z.string()).example(F(new Error("Sample error message"))),handler:({response:e,output:t,error:r,logger:o,request:i,input:s})=>{if(r){let a=ve(r);Tt({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(ye.positive).json(t.items):e.status(500).send("Property 'items' is missing in the endpoint output")}});var be=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:Rt.z.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(et({input:Rt.z.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]:[],T="tags"in p?p.tags:"tag"in p&&p.tag?[p.tag]:[];return new Xe({handler:r,middlewares:d,outputSchema:o,resultHandler:c,scopes:f,tags:T,methods:l,getOperationId:m,description:i,shortDescription:s,inputSchema:gr(d,t)})}},xr=new be(Te),Tr=new be(rt);var br=require("util"),Sr=e=>typeof e=="object"&&e!==null&&"level"in e&&("color"in e?typeof e.color=="boolean":!0)&&typeof e.level=="string"&&["silent","warn","debug"].includes(e.level),ot=({winston:{createLogger:e,transports:t,format:{printf:r,timestamp:o,colorize:i,combine:s},config:{npm:a}},...p})=>{let d=f=>{let{[Symbol.for("level")]:T,[Symbol.for("message")]:g,[Symbol.for("splat")]:S,...y}=f;return(0,br.inspect)(y,!1,1,p.color)},c=f=>r(({timestamp:T,message:g,level:S,durationMs:y,...x})=>{typeof g=="object"&&(x={...x,...g},g="[No message]");let H=Object.keys(x).length>0,Z=[];y&&Z.push("duration:",`${y}ms`);let ee=f?d:JSON.stringify;if(H)Z.push(ee(x));else{let P=x?.[Symbol.for("splat")];Array.isArray(P)&&Z.push(...P.map(G=>typeof G=="object"?ee(G):G))}return[T,`${S}:`,g,...Z].join(" ")}),l=[o()],m={handleExceptions:!0};switch(p.color&&l.push(i()),p.level){case"debug":m.level="debug",l.push(c(!0));break;case"silent":case"warn":default:m.level="warn",l.push(c())}return m.format=s(...l),e({silent:p.level==="silent",levels:a.levels,transports:[new t.Console(m)],exitOnError:!1})};var Se=class{constructor(t){this.endpoints=t}};var Or=R(require("express"),1),Oe=class{params;constructor(...t){this.params=t}apply(t,r){return r(t,Or.default.static(...this.params))}};var It=R(require("express"),1),Ir=R(require("http"),1),wr=R(require("https"),1);var me=async(e,t="default")=>{try{return(await import(e))[t]}catch{}try{return await Promise.resolve().then(()=>require(e)[t])}catch{}throw new ie(e)},Rr=async e=>{for(let{moduleName:t,moduleExport:r}of e)try{return await me(t,r)}catch{}throw new ie(e.map(({moduleName:t})=>t))};var At=R(require("assert/strict"),1);var le=({routing:e,onEndpoint:t,onStatic:r,parentPath:o,hasCors:i})=>{Object.entries(e).forEach(([s,a])=>{s=s.trim(),At.default.doesNotMatch(s,/\//,new oe(`The entry '${s}' must avoid having slashes \u2014 use nesting instead.`));let p=`${o||""}${s?`/${s}`:""}`;if(a instanceof ce){let d=a.getMethods().slice();i&&d.push("options"),d.forEach(c=>{t(a,p,c)})}else if(a instanceof Oe)r&&a.apply(p,r);else if(a instanceof Se){if(Object.entries(a.endpoints).forEach(([d,c])=>{(0,At.default)(c.getMethods().includes(d),new oe(`Endpoint assigned to ${d} method of ${p} must support ${d} method.`)),t(c,p,d)}),i&&Object.keys(a.endpoints).length>0){let[d,...c]=Object.keys(a.endpoints),l=a.endpoints[d];l._setSiblingMethods(c),t(l,p,"options")}}else le({onEndpoint:t,onStatic:r,hasCors:i,routing:a,parentPath:p})})};var Ar=()=>`
4
+ `,{url:t.url,payload:r})},V=({schema:e,variant:t="original",validate:r=t==="parsed"})=>{let o=Ze(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},se=(e,t,r)=>e.length&&t.length?(0,he.xprod)(e,t).map(r):e.concat(t),ge=e=>e instanceof P.z.ZodEffects&&e._def.effect.type!=="refinement"?!0:e instanceof P.z.ZodUnion?e.options.some(ge):e instanceof P.z.ZodIntersection?[e._def.left,e._def.right].some(ge):!1,k=({subject:e,condition:t,maxDepth:r,depth:o=1})=>{if(t(e))return!0;if(r!==void 0&&o>=r)return!1;let i={condition:t,maxDepth:r,depth:o+1};return e instanceof P.z.ZodObject?Object.values(e.shape).some(s=>k({subject:s,...i})):e instanceof P.z.ZodUnion?e.options.some(s=>k({subject:s,...i})):e instanceof P.z.ZodIntersection?[e._def.left,e._def.right].some(s=>k({subject:s,...i})):e instanceof P.z.ZodOptional||e instanceof P.z.ZodNullable?k({subject:e.unwrap(),...i}):e instanceof P.z.ZodEffects||e instanceof P.z.ZodTransformer?k({subject:e.innerType(),...i}):e instanceof P.z.ZodRecord?k({subject:e.valueSchema,...i}):e instanceof P.z.ZodArray?k({subject:e.element,...i}):e instanceof P.z.ZodDefault?k({subject:e._def.innerType,...i}):!1},fr=e=>k({subject:e,condition:t=>ht(t,ve)}),yr=e=>k({subject:e,condition:t=>ht(t,ae),maxDepth:3}),je=e=>"coerce"in e._def&&typeof e._def.coerce=="boolean"?e._def.coerce:!1,Ot=e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase(),v=(...e)=>e.flatMap(t=>t.split(/[^A-Z0-9]/gi)).flatMap(t=>t.replaceAll(/[A-Z]+/g,r=>`/${r}`).split("/")).map(Ot).join(""),Ge=e=>(0,lr.createHash)("sha1").update(JSON.stringify(e),"utf8").digest("hex"),We=(e,t)=>{try{return typeof e.parse(t)}catch{return}};var Ye=({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}.`:""))};var gr=require("ramda");var hr=e=>typeof e=="object"&&e!==null,pe=e=>hr(e)&&"or"in e,de=e=>hr(e)&&"and"in e,Je=e=>({and:(0,gr.chain)(t=>de(t)?t.and:[t],e)}),Qe=(e,t)=>de(e)?{and:e.and.map(r=>pe(r)?{or:r.or.map(t)}:t(r))}:pe(e)?{or:e.or.map(r=>de(r)?{and:r.and.map(t)}:t(r))}:t(e),Rt=e=>e.and.reduce((t,r)=>({or:se(t.or,pe(r)?r.or:[r],Je)}),{or:[]}),Te=(e,t)=>de(e)?de(t)?Je([e,t]):pe(t)?Te(Rt(e),t):Je([e,t]):pe(e)?de(t)?Te(t,e):pe(t)?{or:se(e.or,t.or,Je)}:Te(e,{and:[t]}):de(t)||pe(t)?Te(t,e):{and:[e,t]};var ce=class{},et=class extends ce{#e;#o;#n;#i;#t;#s;#a;#r;#p;#d;#c;#m=[];constructor({methods:t,inputSchema:r,outputSchema:o,handler:i,resultHandler:s,getOperationId:a=()=>{},scopes:p=[],middlewares:d=[],tags:c=[],description:u,shortDescription:l}){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:u,short:l},this.#r={input:r,output:o};for(let[y,b]of Object.entries(this.#r))(0,At.default)(!ge(b),new W(`Using transformations on the top level of endpoint ${y} schema is not allowed.`));this.#t={positive:yt(s.getPositiveResponse(o),{mimeTypes:[q],statusCodes:[ye.positive]}),negative:yt(s.getNegativeResponse(),{mimeTypes:[q],statusCodes:[ye.negative]})};for(let[y,b]of Object.entries(this.#t))(0,At.default)(b.length,new ne(`ResultHandler must have at least one ${y} response schema specified.`));this.#i={input:fr(r)?[Fe]:yr(r)?[nr]:[q],positive:this.#t.positive.flatMap(({mimeTypes:y})=>y),negative:this.#t.negative.flatMap(({mimeTypes:y})=>y)}}_setSiblingMethods(t){this.#m=t}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?Te(t,r.security):t,{and:[]})}getScopes(){return this.#p}getTags(){return this.#d}getOperationId(t){return this.#c(t)}#l(){return{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":this.#o.concat(this.#m).concat("options").join(", ").toUpperCase(),"Access-Control-Allow-Headers":"content-type"}}async#u(t){try{return await this.#r.output.parseAsync(t)}catch(r){throw r instanceof Xe.z.ZodError?new Y(r):r}}async#f({method:t,input:r,request:o,response:i,logger:s}){let a={},p=!1;for(let d of this.#n){if(t==="options"&&d.type==="proprietary")continue;let c;try{c=await d.input.parseAsync(r)}catch(u){throw u instanceof Xe.z.ZodError?new K(u):u}if(Object.assign(a,await d.middleware({input:c,options:a,request:o,response:i,logger:s})),p="writableEnded"in i&&i.writableEnded,p){s.warn(`The middleware ${d.middleware.name} has closed the stream. Accumulated options:`,a);break}}return{options:a,isStreamClosed:p}}async#y({input:t,options:r,logger:o}){let i;try{i=await this.#r.input.parseAsync(t)}catch(s){throw s instanceof Xe.z.ZodError?new K(s):s}return this.#s({input:i,options:r,logger:o})}async#g({error:t,request:r,response:o,logger:i,input:s,output:a}){try{await this.#a.handler({error:t,output:a,request:r,response:o,logger:i,input:s})}catch(p){Ye({logger:i,response:o,error:new ne(xe(p).message,t)})}}async execute({request:t,response:r,logger:o,config:i}){let s=Tt(t),a=null,p=null;if(i.cors){let c=this.#l();typeof i.cors=="function"&&(c=await i.cors({request:t,logger:o,endpoint:this,defaultHeaders:c}));for(let u in c)r.set(u,c[u])}let d=ur(t,i.inputSources);try{let{options:c,isStreamClosed:u}=await this.#f({method:s,input:d,request:t,response:r,logger:o});if(u)return;if(s==="options"){r.status(200).end();return}a=await this.#u(await this.#y({input:d,options:c,logger:o}))}catch(c){p=xe(c)}await this.#g({input:d,output:a,request:t,response:r,error:p,logger:o})}};var Pt=require("zod");var xr=(e,t)=>{let r=e.map(({input:i})=>i).concat(t),o=r.reduce((i,s)=>i.and(s));return r.reduce((i,s)=>or(s,i),o)};var Tr=A(require("assert/strict"),1),tt=e=>((0,Tr.default)(!ge(e.input),new W("Using transformations on the top level of middleware input schema is not allowed.")),{...e,type:"proprietary"});var N=require("zod");var rt=e=>e,be=rt({getPositiveResponse:e=>{let t=V({schema:e}),r=j(N.z.object({status:N.z.literal("success"),data:e}));return t.reduce((o,i)=>o.example({status:"success",data:i}),r)},getNegativeResponse:()=>j(N.z.object({status:N.z.literal("error"),error:N.z.object({message:N.z.string()})})).example({status:"error",error:{message:F(new Error("Sample error message"))}}),handler:({error:e,input:t,output:r,request:o,response:i,logger:s})=>{if(!e){i.status(ye.positive).json({status:"success",data:r});return}let a=Ne(e);St({logger:s,statusCode:a,request:o,error:e,input:t}),i.status(a).json({status:"error",error:{message:F(e)}})}}),ot=rt({getPositiveResponse:e=>{let t=V({schema:e}),r=j("shape"in e&&"items"in e.shape&&e.shape.items instanceof N.z.ZodArray?e.shape.items:N.z.array(N.z.any()));return t.reduce((o,i)=>typeof i=="object"&&i!==null&&"items"in i&&Array.isArray(i.items)?o.example(i.items):o,r)},getNegativeResponse:()=>j(N.z.string()).example(F(new Error("Sample error message"))),handler:({response:e,output:t,error:r,logger:o,request:i,input:s})=>{if(r){let a=Ne(r);St({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(ye.positive).json(t.items):e.status(500).send("Property 'items' is missing in the endpoint output")}});var Se=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:Pt.z.object({}),middleware:async({request:a,response:p})=>new Promise((d,c)=>{t(a,p,l=>{if(l&&l instanceof Error)return c(o(l));d(i(a,p))})})};return e.#e(this.middlewares.concat(s),this.resultHandler)}addOptions(t){return e.#e(this.middlewares.concat(tt({input:Pt.z.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,u="methods"in p?p.methods:[p.method],l=typeof a=="function"?a:()=>a,y="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 et({handler:r,middlewares:d,outputSchema:o,resultHandler:c,scopes:y,tags:b,methods:u,getOperationId:l,description:i,shortDescription:s,inputSchema:xr(d,t)})}},br=new Se(be),Sr=new Se(ot);var Or=require("util"),Rr=e=>typeof e=="object"&&e!==null&&"level"in e&&("color"in e?typeof e.color=="boolean":!0)&&typeof e.level=="string"&&["silent","warn","debug"].includes(e.level),nt=({winston:{createLogger:e,transports:t,format:{printf:r,timestamp:o,colorize:i,combine:s},config:{npm:a}},...p})=>{let d=y=>{let{[Symbol.for("level")]:b,[Symbol.for("message")]:x,[Symbol.for("splat")]:R,...g}=y;return(0,Or.inspect)(g,!1,1,p.color)},c=y=>r(({timestamp:b,message:x,level:R,durationMs:g,...T})=>{typeof x=="object"&&(T={...T,...x},x="[No message]");let H=Object.keys(T).length>0,Z=[];g&&Z.push("duration:",`${g}ms`);let ee=y?d:JSON.stringify;if(H)Z.push(ee(T));else{let C=T?.[Symbol.for("splat")];Array.isArray(C)&&Z.push(...C.map(G=>typeof G=="object"?ee(G):G))}return[b,`${R}:`,x,...Z].join(" ")}),u=[o()],l={handleExceptions:!0};switch(p.color&&u.push(i()),p.level){case"debug":l.level="debug",u.push(c(!0));break;case"silent":case"warn":default:l.level="warn",u.push(c())}return l.format=s(...u),e({silent:p.level==="silent",levels:a.levels,transports:[new t.Console(l)],exitOnError:!1})};var Oe=class{constructor(t){this.endpoints=t}};var Ar=A(require("express"),1),Re=class{params;constructor(...t){this.params=t}apply(t,r){return r(t,Ar.default.static(...this.params))}};var Et=A(require("express"),1),Er=A(require("http"),1),Zr=A(require("https"),1);var me=async(e,t="default")=>{try{return(await import(e))[t]}catch{}try{return await Promise.resolve().then(()=>require(e)[t])}catch{}throw new ie(e)},Pr=async e=>{for(let{moduleName:t,moduleExport:r}of e)try{return await me(t,r)}catch{}throw new ie(e.map(({moduleName:t})=>t))};var Ct=A(require("assert/strict"),1);var le=({routing:e,onEndpoint:t,onStatic:r,parentPath:o,hasCors:i})=>{Object.entries(e).forEach(([s,a])=>{s=s.trim(),Ct.default.doesNotMatch(s,/\//,new oe(`The entry '${s}' must avoid having slashes \u2014 use nesting instead.`));let p=`${o||""}${s?`/${s}`:""}`;if(a instanceof ce){let d=a.getMethods().slice();i&&d.push("options"),d.forEach(c=>{t(a,p,c)})}else if(a instanceof Re)r&&a.apply(p,r);else if(a instanceof Oe){if(Object.entries(a.endpoints).forEach(([d,c])=>{(0,Ct.default)(c.getMethods().includes(d),new oe(`Endpoint assigned to ${d} method of ${p} must support ${d} method.`)),t(c,p,d)}),i&&Object.keys(a.endpoints).length>0){let[d,...c]=Object.keys(a.endpoints),u=a.endpoints[d];u._setSiblingMethods(c),t(u,p,"options")}}else le({onEndpoint:t,onStatic:r,hasCors:i,routing:a,parentPath:p})})};var Cr=()=>`
6
6
  \x1B[94m8888888888 8888888888P 888 d8888 8888888b. 8888888 \x1B[39m
7
7
  \x1B[94m888 d88P 888 d88888 888 Y88b 888\x1B[39m
8
8
  \x1B[95m888 d88P 888 d88P888 888 888 888\x1B[39m
@@ -15,8 +15,8 @@ Original error: ${e.originalError.message}.`:""))};var yr=e=>typeof e=="object"&
15
15
  \x1B[94m 888\x1B[3m Proudly supports transgender community.\x1B[23m\x1B[39m
16
16
  \x1B[94m\x1B[3mfor Nina \x1B[23m888\x1B[3m Start your API server with I/O schema validation and custom middlewares in minutes.\x1B[23m\x1B[39m
17
17
  \x1B[90m\x1B[3m Thank you for choosing Express Zod API for your project.\x1B[23m\x1B[39m
18
- `;var Pt=({app:e,rootLogger:t,config:r,routing:o})=>{r.startupLogo!==!1&&console.log(Ar()),t.debug("Running","v16.5.0 (CJS)"),le({routing:o,hasCors:!!r.cors,onEndpoint:(i,s,a)=>{e[a](s,async(p,d)=>{let c=r.childLoggerProvider?await r.childLoggerProvider({request:p,parent:t}):t;c.info(`${p.method}: ${s}`),await i.execute({request:p,response:d,logger:c,config:r})})},onStatic:(i,s)=>{e.use(i,s)}})};var Ct=R(require("http-errors"),1);var Pr=({errorHandler:e,rootLogger:t,getChildLogger:r})=>async(o,i,s,a)=>{if(!o)return a();e.handler({error:(0,Ct.default)(400,he(o).message),request:i,response:s,input:null,output:null,logger:r?await r({request:i,parent:t}):t})},Cr=({errorHandler:e,getChildLogger:t,rootLogger:r})=>async(o,i)=>{let s=(0,Ct.default)(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})}catch(p){We({response:i,logger:a,error:new ne(he(p).message,s)})}};var Er=async e=>{let t=Sr(e.logger)?ot({...e.logger,winston:await me("winston")}):e.logger,r=e.errorHandler||Te,{childLoggerProvider:o}=e,i={errorHandler:r,rootLogger:t,getChildLogger:o},s=Cr(i),a=Pr(i);return{rootLogger:t,errorHandler:r,notFoundHandler:s,parserFailureHandler:a}},Zr=async(e,t)=>{let{rootLogger:r,notFoundHandler:o}=await Er(e);return Pt({app:e.app,routing:t,rootLogger:r,config:e}),{notFoundHandler:o,logger:r}},zr=async(e,t)=>{let r=(0,It.default)().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))}if(r.use(e.server.jsonParser||It.default.json()),e.server.upload){let d=await me("express-fileupload");r.use(d({...typeof e.server.upload=="object"?e.server.upload:{},abortOnLimit:!1,parseNested:!0}))}e.server.rawParser&&(r.use(e.server.rawParser),r.use((d,{},c)=>{Buffer.isBuffer(d.body)&&(d.body={raw:d.body}),c()}));let{rootLogger:o,notFoundHandler:i,parserFailureHandler:s}=await Er(e);r.use(s),Pt({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(Ir.default.createServer(r),e.server.listen),httpsServer:e.https?a(wr.default.createServer(e.https.options,r),e.https.listen):void 0};return{app:r,...p,logger:o}};var Wr=R(require("assert/strict"),1),Yr=require("openapi3-ts/oas31");var $=R(require("assert/strict"),1),J=require("openapi3-ts/oas31"),I=require("ramda"),O=require("zod");var wt=require("zod");var je="DateIn",Mr=()=>D(je,wt.z.string().regex(Fe).transform(e=>new Date(e)).pipe(wt.z.date().refine(Ke)));var vr=require("zod");var De="DateOut",Nr=()=>D(De,vr.z.date().refine(Ke).transform(e=>e.toISOString()));var ue=({schema:e,onEach:t,rules:r,onMissing:o,...i})=>{let s=we(e,"kind")||e._def.typeName,a=s?r[s]:void 0,p=i,c=a?a({schema:e,...p,next:m=>ue({...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 jr=50,Lr="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString",Po={integer:0,number:0,string:"",boolean:!1,object:{},null:null,array:[]},kr=/:([A-Za-z0-9_]+)/g,Hr=e=>{let t=e.match(kr);return t?t.map(r=>r.slice(1)):[]},Ur=e=>e.replace(kr,t=>`{${t.slice(1)}}`),Co=({schema:{_def:{innerType:e,defaultValue:t}},next:r})=>({...r({schema:e}),default:t()}),Io=({schema:{_def:{innerType:e}},next:t})=>t({schema:e}),wo=()=>({format:"any"}),Eo=e=>((0,$.default)(!e.isResponse,new w({message:"Please use ez.upload() only for input.",...e})),{type:"string",format:"binary"}),Zo=({schema:e})=>({type:"string",format:e instanceof O.z.ZodString?e._def.checks.find(t=>t.kind==="regex")?"byte":"file":"binary"}),zo=({schema:{options:e},next:t})=>({oneOf:e.map(r=>t({schema:r}))}),Mo=({schema:{options:e,discriminator:t},next:r})=>({discriminator:{propertyName:t},oneOf:Array.from(e.values()).map(o=>r({schema:o}))}),vo=e=>{let[t,r]=e.filter(i=>!(0,J.isReferenceObject)(i)&&i.type==="object"&&Object.keys(i).every(s=>["type","properties","required","examples"].includes(s)));(0,$.default)(t&&r,"Can not flatten objects");let o={type:"object"};return(t.properties||r.properties)&&(o.properties=(0,I.mergeDeepWith)((i,s)=>Array.isArray(i)&&Array.isArray(s)?(0,I.concat)(i,s):i===s?s:$.default.fail("Can not flatten properties"),t.properties||{},r.properties||{})),(t.required||r.required)&&(o.required=(0,I.union)(t.required||[],r.required||[])),(t.examples||r.examples)&&(o.examples=se(t.examples||[],r.examples||[],([i,s])=>(0,I.mergeDeepRight)(i,s))),o},No=({schema:{_def:{left:e,right:t}},next:r})=>{let o=[e,t].map(i=>r({schema:i}));try{return vo(o)}catch{}return{allOf:o}},jo=({schema:e,next:t})=>t({schema:e.unwrap()}),Do=({schema:e,next:t})=>t({schema:e._def.innerType}),Lo=({schema:e,next:t})=>{let r=t({schema:e.unwrap()});return(0,J.isReferenceObject)(r)||(r.type=Kr(r)),r},Dr=({schema:e})=>({type:typeof Object.values(e.enum)[0],enum:Object.values(e.enum)}),ko=({schema:{value:e}})=>({type:typeof e,enum:[e]}),Ho=({schema:e,isResponse:t,...r})=>{let o=Object.keys(e.shape).filter(s=>{let a=e.shape[s];return!(t&&Ne(a)?a instanceof O.z.ZodOptional:a.isOptional())}),i={type:"object",properties:nt({schema:e,isResponse:t,...r})};return o.length&&(i.required=o),i},Uo=()=>({type:"null"}),Ko=e=>((0,$.default)(!e.isResponse,new w({message:"Please use ez.dateOut() for output.",...e})),{description:"YYYY-MM-DDTHH:mm:ss.sssZ",type:"string",format:"date-time",pattern:Fe.source,externalDocs:{url:Lr}}),Fo=e=>((0,$.default)(e.isResponse,new w({message:"Please use ez.dateIn() for input.",...e})),{description:"YYYY-MM-DDTHH:mm:ss.sssZ",type:"string",format:"date-time",externalDocs:{url:Lr}}),Bo=e=>$.default.fail(new w({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})),qo=()=>({type:"boolean"}),Vo=()=>({type:"integer",format:"bigint"}),$o=e=>e.reduce((t,r)=>t&&r instanceof O.z.ZodLiteral,!0),_o=({schema:{keySchema:e,valueSchema:t},...r})=>{if(e instanceof O.z.ZodEnum||e instanceof O.z.ZodNativeEnum){let o=Object.values(e.enum),i=o.reduce((a,p)=>({...a,[p]:t}),{}),s={type:"object",properties:nt({schema:O.z.object(i),...r})};return o.length&&(s.required=o),s}if(e instanceof O.z.ZodLiteral)return{type:"object",properties:nt({schema:O.z.object({[e.value]:t}),...r}),required:[e.value]};if(e instanceof O.z.ZodUnion&&$o(e.options)){let o=e.options.reduce((i,s)=>({...i,[`${s.value}`]:t}),{});return{type:"object",properties:nt({schema:O.z.object(o),...r}),required:e.options.map(i=>i.value)}}return{type:"object",additionalProperties:r.next({schema:t})}},Go=({schema:{_def:e,element:t},next:r})=>{let o={type:"array",items:r({schema:t})};return e.minLength&&(o.minItems=e.minLength.value),e.maxLength&&(o.maxItems=e.maxLength.value),o},Wo=({schema:{items:e},next:t})=>({type:"array",prefixItems:e.map(o=>t({schema:o}))}),Yo=({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(x=>x.kind==="regex"),T=m.find(x=>x.kind==="datetime"),g=f?f.regex:T?T.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,S={type:"string"},y={"date-time":l,email:e,url:t,uuid:i,cuid:s,cuid2:a,ulid:p,ip:d,emoji:c};for(let x in y)if(y[x]){S.format=x;break}return r!==null&&(S.minLength=r),o!==null&&(S.maxLength=o),g&&(S.pattern=g.source),S},Jo=({schema:e})=>{let t=e._def.checks.find(({kind:d})=>d==="min"),r=e.minValue===null?e.isInt?Number.MIN_SAFE_INTEGER:Number.MIN_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},nt=({schema:{shape:e},next:t})=>Object.keys(e).reduce((r,o)=>({...r,[o]:t({schema:e[o]})}),{}),Qo=e=>{let t=Array.isArray(e.type)?e.type[0]:e.type;return Po?.[t]},Kr=e=>{let t=typeof e.type=="string"?[e.type]:e.type||[];return t.includes("null")?t:t.concat("null")},Xo=({schema:e,isResponse:t,next:r})=>{let o=r({schema:e.innerType()}),{effect:i}=e._def;if(t&&i.type==="transform"&&!(0,J.isReferenceObject)(o)){let s=Ge(e,Qo(o));return s&&["number","string","boolean"].includes(s)?{type:s}:r({schema:O.z.any()})}if(!t&&i.type==="preprocess"&&!(0,J.isReferenceObject)(o)){let{type:s,...a}=o;return{...a,format:`${a.format||s} (preprocessed)`}}return o},en=({schema:e,isResponse:t,next:r})=>r({schema:e._def[t?"out":"in"]}),tn=({schema:e,next:t})=>t({schema:e.unwrap()}),rn=({next:e,schema:t,serializer:r,getRef:o,makeRef:i})=>{let s=r(t.schema);return o(s)||(i(s,{}),i(s,e({schema:t.schema})))},on=({next:e,schema:t})=>e({schema:t.shape.raw}),Fr=(e,t,r=[])=>{let o=V({schema:e,variant:t?"parsed":"original",validate:!0});if(o.length!==0)return o.reduce((i,s,a)=>({...i,[`example${a+1}`]:{value:typeof s=="object"&&!Array.isArray(s)?(0,I.omit)(r,s):s}}),{})},nn=(e,t,r)=>{let o=V({schema:e,variant:t?"parsed":"original",validate:!0});if(o.length!==0)return o.reduce((i,s,a)=>r in s?{...i,[`example${a+1}`]:{value:s[r]}}:i,{})},Le=(e,t)=>e instanceof O.z.ZodObject?e:e instanceof O.z.ZodUnion||e instanceof O.z.ZodDiscriminatedUnion?Array.from(e.options.values()).map(r=>Le(r,t)).reduce((r,o)=>r.merge(o.partial()),O.z.object({})):e instanceof O.z.ZodEffects?((0,$.default)(e._def.effect.type==="refinement",t),Le(e._def.schema,t)):Le(e._def.left,t).merge(Le(e._def.right,t)),Br=({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}=Le(r,new w({message:"Using transformations on the top level schema is not allowed.",path:e,method:t,isResponse:!1})),l=Hr(e),m=o.includes("query"),f=o.includes("params"),T=o.includes("headers"),g=y=>f&&l.includes(y),S=y=>T&&xt(y);return Object.keys(c).filter(y=>m||g(y)).map(y=>{let x=ue({schema:c[y],isResponse:!1,rules:Zt,onEach:zt,onMissing:Mt,serializer:i,getRef:s,makeRef:a,path:e,method:t}),H=p==="components"?a(v(d,y),x):x;return{name:y,in:g(y)?"path":S(y)?"header":"query",required:!c[y].isOptional(),description:x.description||d,schema:H,examples:nn(r,!1,y)}})},Zt={ZodString:Yo,ZodNumber:Jo,ZodBigInt:Vo,ZodBoolean:qo,ZodNull:Uo,ZodArray:Go,ZodTuple:Wo,ZodRecord:_o,ZodObject:Ho,ZodLiteral:ko,ZodIntersection:No,ZodUnion:zo,ZodAny:wo,ZodDefault:Co,ZodEnum:Dr,ZodNativeEnum:Dr,ZodEffects:Xo,ZodOptional:jo,ZodNullable:Lo,ZodDiscriminatedUnion:Mo,ZodBranded:tn,ZodDate:Bo,ZodCatch:Io,ZodPipeline:en,ZodLazy:rn,ZodReadonly:Do,[ze]:Zo,[Me]:Eo,[De]:Fo,[je]:Ko,[ae]:on},zt=({schema:e,isResponse:t,prev:r})=>{if((0,J.isReferenceObject)(r))return{};let{description:o}=e,i=e instanceof O.z.ZodLazy,s=r.type!==void 0,a=t&&Ne(e),p=!i&&s&&!a&&e.isNullable(),d=i?[]:V({schema:e,variant:t?"parsed":"original",validate:!0}),c={};return o&&(c.description=o),p&&(c.type=Kr(r)),d.length&&(c.examples=Array.from(d)),c},Mt=({schema:e,...t})=>$.default.fail(new w({message:`Zod type ${e.constructor.name} is unsupported.`,...t})),Et=(e,t)=>{if((0,J.isReferenceObject)(e))return e;let r=e.properties?(0,I.omit)(t,e.properties):void 0,o=e.examples?e.examples.map(p=>(0,I.omit)(t,p)):void 0,i=e.required?e.required.filter(p=>!t.includes(p)):void 0,s=e.allOf?e.allOf.map(p=>Et(p,t)):void 0,a=e.oneOf?e.oneOf.map(p=>Et(p,t)):void 0;return(0,I.omit)(Object.entries({properties:r,required:i,examples:o,allOf:s,oneOf:a}).filter(([{},p])=>p===void 0).map(([p])=>p),{...e,properties:r,required:i,examples:o,allOf:s,oneOf:a})},qr=e=>(0,J.isReferenceObject)(e)?e:(0,I.omit)(["examples"],e),Vr=({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} ${bt(i)} response ${c?l:""}`.trim()})=>{let f=qr(ue({schema:r,isResponse:!0,rules:Zt,onEach:zt,onMissing:Mt,serializer:s,getRef:a,makeRef:p,path:t,method:e})),T=Fr(r,!0),g=d==="components"?p(v(m),f):f;return{description:m,content:o.reduce((S,y)=>({...S,[y]:{schema:g,examples:T}}),{})}},sn=()=>({type:"http",scheme:"basic"}),an=({format:e})=>{let t={type:"http",scheme:"bearer"};return e&&(t.bearerFormat=e),t},pn=({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},dn=({name:e})=>({type:"apiKey",in:"header",name:e}),cn=({name:e})=>({type:"apiKey",in:"cookie",name:e}),mn=({url:e})=>({type:"openIdConnect",openIdConnectUrl:e}),ln=({flows:e={}})=>({type:"oauth2",flows:Object.keys(e).reduce((t,r)=>{let o=e[r];if(!o)return t;let{scopes:i={},...s}=o;return{...t,[r]:{...s,scopes:i}}},{})}),$r=(e,t)=>{let r={basic:sn,bearer:an,input:pn,header:dn,cookie:cn,openid:mn,oauth2:ln};return Je(e,o=>r[o.type](o,t))},it=e=>{if(typeof e=="object"){if("or"in e)return e.or.map(t=>("and"in t?t.and:[t]).reduce((r,{name:o,scopes:i})=>({...r,[o]:i}),{}));if("and"in e)return it(St(e))}return it({or:[e]})},_r=({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=Hr(t),l=qr(Et(ue({schema:r,isResponse:!1,rules:Zt,onEach:zt,onMissing:Mt,serializer:i,getRef:s,makeRef:a,path:t,method:e}),c)),m=Fr(r,!1,c),f=p==="components"?a(v(d),l):l;return{description:d,content:o.reduce((T,g)=>({...T,[g]:{schema:f,examples:m}}),{})}},Gr=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}),vt=e=>e.length<=jr?e:e.slice(0,jr-1)+"\u2026";var st=class extends Yr.OpenApiBuilder{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(0,Wr.default)(!(o in this.lastOperationIdSuffixes),new w({message:`Duplicated operationId: "${o}"`,method:r,isResponse:!1,path:t})),this.lastOperationIdSuffixes[o]=1,o;let i=v(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=_e}){super(),this.addInfo({title:o,version:i});for(let m of typeof s=="string"?[s]:s)this.addServer({url:m});le({routing:t,onEndpoint:(m,f,T)=>{let g=T,S={path:f,method:g,endpoint:m,composition:d,serializer:c,getRef:this.getRef.bind(this),makeRef:this.makeRef.bind(this)},[y,x]=["short","long"].map(m.getDescription.bind(m)),H=r.inputSources?.[g]||$e[g],Z=this.ensureUniqOperationId(f,g,m.getOperationId(g)),ee=Br({...S,inputSources:H,schema:m.getSchema("input"),description:a?.requestParameter?.call(null,{method:g,path:f,operationId:Z})}),P={operationId:Z,responses:{}};for(let U of["positive","negative"]){let te=m.getResponses(U);for(let{mimeTypes:Pe,schema:ut,statusCodes:b}of te)for(let C of b)P.responses[C]=Vr({...S,variant:U,schema:ut,mimeTypes:Pe,statusCode:C,hasMultipleStatusCodes:te.length>1||b.length>1,description:a?.[`${U}Response`]?.call(null,{method:g,path:f,operationId:Z,statusCode:C})})}x&&(P.description=x,p&&y===void 0&&(P.summary=vt(x))),y&&(P.summary=vt(y)),m.getTags().length>0&&(P.tags=m.getTags()),ee.length>0&&(P.parameters=ee),H.includes("body")&&(P.requestBody=_r({...S,schema:m.getSchema("input"),mimeTypes:m.getMimeTypes("input"),description:a?.requestBody?.call(null,{method:g,path:f,operationId:Z})}));let G=it(Je($r(m.getSecurity(),H),U=>{let te=this.ensureUniqSecuritySchemaName(U),Pe=["oauth2","openIdConnect"].includes(U.type)?m.getScopes():[];return this.addSecurityScheme(te,U),{name:te,scopes:Pe}}));G.length>0&&(P.security=G),this.addPath(Ur(f),{[g]:P})}}),this.rootDoc.tags=r.tags?Gr(r.tags):[]}};var Nt=R(require("http"),1);var un=({fnMethod:e,requestProps:t})=>({method:"GET",header:e(()=>q),...t}),fn=({fnMethod:e,responseProps:t})=>{let r={writableEnded:!1,statusCode:200,statusMessage:Nt.default.STATUS_CODES[200],set:e(()=>r),setHeader:e(()=>r),header:e(()=>r),status:e(o=>(r.statusCode=o,r.statusMessage=Nt.default.STATUS_CODES[o],r)),json:e(()=>r),send:e(()=>r),end:e(()=>(r.writableEnded=!0,r)),...t};return r},yn=({fnMethod:e,loggerProps:t})=>({info:e(),warn:e(),error:e(),debug:e(),...t}),Jr=async({endpoint:e,requestProps:t,responseProps:r,configProps:o,loggerProps:i,fnMethod:s})=>{let a=s||(await Rr([{moduleName:"vitest",moduleExport:"vi"},{moduleName:"@jest/globals",moduleExport:"jest"}])).fn,p=un({fnMethod:a,requestProps:t}),d=fn({fnMethod:a,responseProps:r}),c=yn({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}};var E=R(require("typescript"),1);var k=R(require("typescript"),1),n=k.default.factory,Q=[n.createModifier(k.default.SyntaxKind.ExportKeyword)],gn=[n.createModifier(k.default.SyntaxKind.AsyncKeyword)],hn=[n.createModifier(k.default.SyntaxKind.PublicKeyword),n.createModifier(k.default.SyntaxKind.ReadonlyKeyword)],Qr=[n.createModifier(k.default.SyntaxKind.ProtectedKeyword),n.createModifier(k.default.SyntaxKind.ReadonlyKeyword)],jt=n.createTemplateHead(""),Re=n.createTemplateTail(""),Dt=n.createTemplateMiddle(" "),Lt=e=>n.createTemplateLiteralType(jt,e.map((t,r)=>n.createTemplateLiteralTypeSpan(n.createTypeReferenceNode(t),r===e.length-1?Re:Dt))),kt=Lt(["M","P"]),at=(e,t,r)=>n.createParameterDeclaration(r,void 0,e,void 0,t,void 0),pt=(e,t)=>Object.keys(e).reduce((r,o)=>r.concat(at(n.createIdentifier(o),e[o],t)),[]),Ht=(e,t)=>n.createExpressionWithTypeArguments(n.createIdentifier("Record"),[typeof e=="number"?n.createKeywordTypeNode(e):n.createTypeReferenceNode(e),n.createKeywordTypeNode(t)]),Xr=e=>n.createConstructorDeclaration(void 0,e,n.createBlock([])),eo=(e,t)=>n.createPropertySignature(void 0,`"${e}"`,void 0,n.createTypeReferenceNode(t)),X=(e,t,r)=>n.createVariableDeclarationList([n.createVariableDeclaration(e,void 0,r,t)],k.default.NodeFlags.Const),Ut=(e,t)=>n.createTypeAliasDeclaration(Q,e,void 0,n.createUnionTypeNode(t.map(r=>n.createLiteralTypeNode(n.createStringLiteral(r))))),dt=(e,t)=>n.createTypeAliasDeclaration(Q,e,void 0,t),to=(e,t,r)=>n.createPropertyDeclaration(hn,e,void 0,t,r),ro=(e,t,r=[])=>n.createClassDeclaration(Q,e,void 0,void 0,[t,...r]),oo=(e,t)=>n.createTypeReferenceNode("Promise",[n.createIndexedAccessTypeNode(n.createTypeReferenceNode(e),t)]),no=()=>n.createTypeReferenceNode("Promise",[n.createKeywordTypeNode(k.default.SyntaxKind.AnyKeyword)]),io=(e,t,r)=>n.createInterfaceDeclaration(Q,e,void 0,t,r),so=e=>Object.keys(e).reduce((t,r)=>t.concat(n.createTypeParameterDeclaration([],r,n.createTypeReferenceNode(e[r]))),[]),Kt=(e,t,r)=>n.createArrowFunction(r?gn:void 0,void 0,e.map(o=>at(o)),void 0,void 0,t),Ft=(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,pt({acc:void 0,key:void 0}),void 0,void 0,t),r]);var ao=["get","post","put","delete","patch"];var h=R(require("typescript"),1),mt=require("zod");var _=R(require("typescript"),1),{factory:ct}=_.default,Bt=(e,t)=>{_.default.addSyntheticLeadingComment(e,_.default.SyntaxKind.MultiLineCommentTrivia,`* ${t} `,!0)},Ae=(e,t,r)=>{let o=ct.createTypeAliasDeclaration(void 0,ct.createIdentifier(t),void 0,e);return r&&Bt(o,r),o},qt=(e,t)=>{let r=_.default.createSourceFile("print.ts","",_.default.ScriptTarget.Latest,!1,_.default.ScriptKind.TS);return _.default.createPrinter(t).printNode(_.default.EmitHint.Unspecified,e,r)},xn=/^[A-Za-z_$][A-Za-z0-9_$]*$/,po=e=>xn.test(e)?ct.createIdentifier(e):ct.createStringLiteral(e);var{factory:u}=h.default,Tn={[h.default.SyntaxKind.AnyKeyword]:"",[h.default.SyntaxKind.BigIntKeyword]:BigInt(0),[h.default.SyntaxKind.BooleanKeyword]:!1,[h.default.SyntaxKind.NumberKeyword]:0,[h.default.SyntaxKind.ObjectKeyword]:{},[h.default.SyntaxKind.StringKeyword]:"",[h.default.SyntaxKind.UndefinedKeyword]:void 0},bn=({schema:{value:e}})=>u.createLiteralTypeNode(typeof e=="number"?u.createNumericLiteral(e):typeof e=="boolean"?e?u.createTrue():u.createFalse():u.createStringLiteral(e)),Sn=({schema:{shape:e},isResponse:t,next:r,optionalPropStyle:{withQuestionMark:o}})=>{let i=Object.entries(e).map(([s,a])=>{let p=t&&Ne(a)?a instanceof mt.z.ZodOptional:a.isOptional(),d=u.createPropertySignature(void 0,po(s),p&&o?u.createToken(h.default.SyntaxKind.QuestionToken):void 0,r({schema:a}));return a.description&&Bt(d,a.description),d});return u.createTypeLiteralNode(i)},On=({schema:{element:e},next:t})=>u.createArrayTypeNode(t({schema:e})),Rn=({schema:{options:e}})=>u.createUnionTypeNode(e.map(t=>u.createLiteralTypeNode(u.createStringLiteral(t)))),co=({schema:{options:e},next:t})=>u.createUnionTypeNode(e.map(r=>t({schema:r}))),An=e=>Tn?.[e.kind],Pn=({schema:e,next:t,isResponse:r})=>{let o=t({schema:e.innerType()}),i=e._def.effect;if(r&&i.type==="transform"){let s=Ge(e,An(o)),a={number:h.default.SyntaxKind.NumberKeyword,bigint:h.default.SyntaxKind.BigIntKeyword,boolean:h.default.SyntaxKind.BooleanKeyword,string:h.default.SyntaxKind.StringKeyword,undefined:h.default.SyntaxKind.UndefinedKeyword,object:h.default.SyntaxKind.ObjectKeyword};return u.createKeywordTypeNode(s&&a[s]||h.default.SyntaxKind.AnyKeyword)}return o},Cn=({schema:e})=>u.createUnionTypeNode(Object.values(e.enum).map(t=>u.createLiteralTypeNode(typeof t=="number"?u.createNumericLiteral(t):u.createStringLiteral(t)))),In=({next:e,schema:t,optionalPropStyle:{withUndefined:r}})=>{let o=e({schema:t.unwrap()});return r?u.createUnionTypeNode([o,u.createKeywordTypeNode(h.default.SyntaxKind.UndefinedKeyword)]):o},wn=({next:e,schema:t})=>u.createUnionTypeNode([e({schema:t.unwrap()}),u.createLiteralTypeNode(u.createNull())]),En=({next:e,schema:{items:t}})=>u.createTupleTypeNode(t.map(r=>e({schema:r}))),Zn=({next:e,schema:{keySchema:t,valueSchema:r}})=>u.createExpressionWithTypeArguments(u.createIdentifier("Record"),[e({schema:t}),e({schema:r})]),zn=({next:e,schema:t})=>u.createIntersectionTypeNode([t._def.left,t._def.right].map(r=>e({schema:r}))),Mn=({next:e,schema:t})=>e({schema:t._def.innerType}),fe=e=>()=>u.createKeywordTypeNode(e),vn=({next:e,schema:t})=>e({schema:t.unwrap()}),Nn=({next:e,schema:t})=>e({schema:t._def.innerType}),jn=({next:e,schema:t})=>e({schema:t._def.innerType}),Dn=({schema:e,next:t,isResponse:r})=>t({schema:e._def[r?"out":"in"]}),Ln=()=>u.createLiteralTypeNode(u.createNull()),kn=({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({schema:i.schema})))},Hn=({schema:e})=>{let t=u.createKeywordTypeNode(h.default.SyntaxKind.StringKeyword),r=u.createTypeReferenceNode("Buffer"),o=u.createUnionTypeNode([t,r]);return e instanceof mt.z.ZodString?t:e instanceof mt.z.ZodUnion?o:r},Un=({next:e,schema:t})=>e({schema:t.shape.raw}),Kn={ZodString:fe(h.default.SyntaxKind.StringKeyword),ZodNumber:fe(h.default.SyntaxKind.NumberKeyword),ZodBigInt:fe(h.default.SyntaxKind.BigIntKeyword),ZodBoolean:fe(h.default.SyntaxKind.BooleanKeyword),ZodAny:fe(h.default.SyntaxKind.AnyKeyword),[je]:fe(h.default.SyntaxKind.StringKeyword),[De]:fe(h.default.SyntaxKind.StringKeyword),ZodNull:Ln,ZodArray:On,ZodTuple:En,ZodRecord:Zn,ZodObject:Sn,ZodLiteral:bn,ZodIntersection:zn,ZodUnion:co,ZodDefault:Mn,ZodEnum:Rn,ZodNativeEnum:Cn,ZodEffects:Pn,ZodOptional:In,ZodNullable:wn,ZodDiscriminatedUnion:co,ZodBranded:vn,ZodCatch:jn,ZodPipeline:Dn,ZodLazy:kn,ZodReadonly:Nn,[ze]:Hn,[ae]:Un},ke=({schema:e,...t})=>ue({schema:e,rules:Kn,onMissing:()=>u.createKeywordTypeNode(h.default.SyntaxKind.AnyKeyword),...t});var lt=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]=Ae(r,t),this.getAlias(t)}constructor({routing:t,variant:r="client",serializer:o=_e,splitResponse:i=!1,optionalPropStyle:s={withQuestionMark:!0,withUndefined:!0}}){le({routing:t,onEndpoint:(b,C,z)=>{let re={serializer:o,getAlias:this.getAlias.bind(this),makeAlias:this.makeAlias.bind(this),optionalPropStyle:s},Vt=v(z,C,"input"),lo=ke({...re,schema:b.getSchema("input"),isResponse:!1}),Ce=i?v(z,C,"positive.response"):void 0,$t=b.getSchema("positive"),_t=i?ke({...re,isResponse:!0,schema:$t}):void 0,Ie=i?v(z,C,"negative.response"):void 0,Gt=b.getSchema("negative"),Wt=i?ke({...re,isResponse:!0,schema:Gt}):void 0,Yt=v(z,C,"response"),uo=Ce&&Ie?n.createUnionTypeNode([n.createTypeReferenceNode(Ce),n.createTypeReferenceNode(Ie)]):ke({...re,isResponse:!0,schema:$t.or(Gt)});this.program.push(Ae(lo,Vt)),_t&&Ce&&this.program.push(Ae(_t,Ce)),Wt&&Ie&&this.program.push(Ae(Wt,Ie)),this.program.push(Ae(uo,Yt)),z!=="options"&&(this.paths.push(C),this.registry[`${z} ${C}`]={input:Vt,positive:Ce,negative:Ie,response:Yt,isJson:b.getMimeTypes("positive").includes(q),tags:b.getTags()})}}),this.program.unshift(...Object.values(this.aliases)),this.program.push(Ut(this.ids.pathType,this.paths)),this.program.push(Ut(this.ids.methodType,ao)),this.program.push(dt(this.ids.methodPathType,Lt([this.ids.methodType,this.ids.pathType])));let a=[n.createHeritageClause(E.default.SyntaxKind.ExtendsKeyword,[Ht(this.ids.methodPathType,E.default.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:b,kind:C}of this.interfaces)this.program.push(io(b,a,Object.keys(this.registry).map(z=>{let re=this.registry[z][C];return re?eo(z,re):void 0}).filter(z=>z!==void 0)));if(r==="types")return;let p=n.createVariableStatement(Q,X(this.ids.jsonEndpointsConst,n.createObjectLiteralExpression(Object.keys(this.registry).filter(b=>this.registry[b].isJson).map(b=>n.createPropertyAssignment(`"${b}"`,n.createTrue()))))),d=n.createVariableStatement(Q,X(this.ids.endpointTagsConst,n.createObjectLiteralExpression(Object.keys(this.registry).map(b=>n.createPropertyAssignment(`"${b}"`,n.createArrayLiteralExpression(this.registry[b].tags.map(C=>n.createStringLiteral(C)))))))),c=dt(this.ids.providerType,n.createFunctionTypeNode(so({M:this.ids.methodType,P:this.ids.pathType}),pt({method:n.createTypeReferenceNode("M"),path:n.createTypeReferenceNode("P"),params:n.createIndexedAccessTypeNode(n.createTypeReferenceNode(this.ids.inputInterface),kt)}),oo(this.ids.responseInterface,kt))),l=dt(this.ids.implementationType,n.createFunctionTypeNode(void 0,pt({method:n.createTypeReferenceNode(this.ids.methodType),path:n.createKeywordTypeNode(E.default.SyntaxKind.StringKeyword),params:Ht(E.default.SyntaxKind.StringKeyword,E.default.SyntaxKind.AnyKeyword)}),no())),m=n.createTemplateExpression(n.createTemplateHead(":"),[n.createTemplateSpan(this.ids.keyParameter,Re)]),f=Ft(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),T=Ft(this.ids.paramsArgument,n.createConditionalExpression(n.createBinaryExpression(n.createCallExpression(n.createPropertyAccessExpression(this.ids.pathParameter,"indexOf"),void 0,[m]),E.default.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()),g=ro(this.ids.clientClass,Xr([at(this.ids.implementationArgument,n.createTypeReferenceNode(this.ids.implementationType),Qr)]),[to(this.ids.provideMethod,n.createTypeReferenceNode(this.ids.providerType),Kt([this.ids.methodParameter,this.ids.pathParameter,this.ids.paramsArgument],n.createCallExpression(n.createPropertyAccessExpression(n.createThis(),this.ids.implementationArgument),void 0,[this.ids.methodParameter,f,T]),!0))]);this.program.push(p,d,c,l,g);let S=n.createPropertyAssignment(this.ids.methodParameter,n.createCallExpression(n.createPropertyAccessExpression(this.ids.methodParameter,"toUpperCase"),void 0,void 0)),y=n.createPropertyAssignment(this.ids.headersProperty,n.createConditionalExpression(this.ids.hasBodyConst,void 0,n.createObjectLiteralExpression([n.createPropertyAssignment(n.createStringLiteral("Content-Type"),n.createStringLiteral(q))]),void 0,this.ids.undefinedValue)),x=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)),H=n.createVariableStatement(void 0,X(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,Re)]),n.createObjectLiteralExpression([S,y,x])])))),Z=n.createVariableStatement(void 0,X(this.ids.hasBodyConst,n.createLogicalNot(n.createCallExpression(n.createPropertyAccessExpression(n.createArrayLiteralExpression([n.createStringLiteral("get"),n.createStringLiteral("delete")]),"includes"),void 0,[this.ids.methodParameter])))),ee=n.createVariableStatement(void 0,X(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]),Re)])))),[P,G]=["json","text"].map(b=>n.createReturnStatement(n.createCallExpression(n.createPropertyAccessExpression(this.ids.responseConst,b),void 0,void 0))),U=n.createIfStatement(n.createBinaryExpression(n.createTemplateExpression(jt,[n.createTemplateSpan(this.ids.methodParameter,Dt),n.createTemplateSpan(this.ids.pathParameter,Re)]),E.default.SyntaxKind.InKeyword,this.ids.jsonEndpointsConst),n.createBlock([P])),te=n.createVariableStatement(Q,X(this.ids.exampleImplementationConst,Kt([this.ids.methodParameter,this.ids.pathParameter,this.ids.paramsArgument],n.createBlock([Z,ee,H,U,G]),!0),n.createTypeReferenceNode(this.ids.implementationType))),Pe=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"))])])),ut=n.createVariableStatement(void 0,X(this.ids.clientConst,n.createNewExpression(this.ids.clientClass,void 0,[this.ids.exampleImplementationConst])));this.usage.push(te,ut,Pe)}printUsage(t){return this.usage.length?this.usage.map(r=>typeof r=="string"?r:qt(r,t)).join(`
18
+ `;var It=({app:e,rootLogger:t,config:r,routing:o})=>{r.startupLogo!==!1&&console.log(Cr()),t.debug("Running","v16.5.2 (CJS)"),le({routing:o,hasCors:!!r.cors,onEndpoint:(i,s,a)=>{e[a](s,async(p,d)=>{let c=r.childLoggerProvider?await r.childLoggerProvider({request:p,parent:t}):t;c.info(`${p.method}: ${s}`),await i.execute({request:p,response:d,logger:c,config:r})})},onStatic:(i,s)=>{e.use(i,s)}})};var wt=A(require("http-errors"),1);var Ir=({errorHandler:e,rootLogger:t,getChildLogger:r})=>async(o,i,s,a)=>{if(!o)return a();e.handler({error:(0,wt.default)(400,xe(o).message),request:i,response:s,input:null,output:null,logger:r?await r({request:i,parent:t}):t})},wr=({errorHandler:e,getChildLogger:t,rootLogger:r})=>async(o,i)=>{let s=(0,wt.default)(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})}catch(p){Ye({response:i,logger:a,error:new ne(xe(p).message,s)})}};var zr=async e=>{let t=Rr(e.logger)?nt({...e.logger,winston:await me("winston")}):e.logger,r=e.errorHandler||be,{childLoggerProvider:o}=e,i={errorHandler:r,rootLogger:t,getChildLogger:o},s=wr(i),a=Ir(i);return{rootLogger:t,errorHandler:r,notFoundHandler:s,parserFailureHandler:a}},Mr=async(e,t)=>{let{rootLogger:r,notFoundHandler:o}=await zr(e);return It({app:e.app,routing:t,rootLogger:r,config:e}),{notFoundHandler:o,logger:r}},vr=async(e,t)=>{let r=(0,Et.default)().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))}if(r.use(e.server.jsonParser||Et.default.json()),e.server.upload){let d=await me("express-fileupload");r.use(d({...typeof e.server.upload=="object"?e.server.upload:{},abortOnLimit:!1,parseNested:!0}))}e.server.rawParser&&(r.use(e.server.rawParser),r.use((d,{},c)=>{Buffer.isBuffer(d.body)&&(d.body={raw:d.body}),c()}));let{rootLogger:o,notFoundHandler:i,parserFailureHandler:s}=await zr(e);r.use(s),It({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(Er.default.createServer(r),e.server.listen),httpsServer:e.https?a(Zr.default.createServer(e.https.options,r),e.https.listen):void 0};return{app:r,...p,logger:o}};var Jr=A(require("assert/strict"),1),Qr=require("openapi3-ts/oas31");var $=A(require("assert/strict"),1),J=require("openapi3-ts/oas31"),m=require("ramda"),O=require("zod");var Zt=require("zod");var De="DateIn",Nr=()=>D(De,Zt.z.string().regex(qe).transform(e=>new Date(e)).pipe(Zt.z.date().refine(Be)));var jr=require("zod");var ke="DateOut",Dr=()=>D(ke,jr.z.date().refine(Be).transform(e=>e.toISOString()));var ue=({schema:e,onEach:t,rules:r,onMissing:o,...i})=>{let s=Ze(e,"kind")||e._def.typeName,a=s?r[s]:void 0,p=i,c=a?a({schema:e,...p,next:l=>ue({...l,...p,onEach:t,rules:r,onMissing:o})}):o({schema:e,...p}),u=t&&t({schema:e,prev:c,...p});return u?{...c,...u}:c};var kr=50,Hr="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString",Io={integer:0,number:0,string:"",boolean:!1,object:{},null:null,array:[]},Ur=/:([A-Za-z0-9_]+)/g,Kr=e=>{let t=e.match(Ur);return t?t.map(r=>r.slice(1)):[]},Fr=e=>e.replace(Ur,t=>`{${t.slice(1)}}`),wo=({schema:{_def:{innerType:e,defaultValue:t}},next:r})=>({...r({schema:e}),default:t()}),Eo=({schema:{_def:{innerType:e}},next:t})=>t({schema:e}),Zo=()=>({format:"any"}),zo=e=>((0,$.default)(!e.isResponse,new w({message:"Please use ez.upload() only for input.",...e})),{type:"string",format:"binary"}),Mo=({schema:e})=>({type:"string",format:e instanceof O.z.ZodString?e._def.checks.find(t=>t.kind==="regex")?"byte":"file":"binary"}),vo=({schema:{options:e},next:t})=>({oneOf:e.map(r=>t({schema:r}))}),No=({schema:{options:e,discriminator:t},next:r})=>({discriminator:{propertyName:t},oneOf:Array.from(e.values()).map(o=>r({schema:o}))}),jo=e=>{let[t,r]=e.filter(i=>!(0,J.isReferenceObject)(i)&&i.type==="object"&&Object.keys(i).every(s=>["type","properties","required","examples"].includes(s)));(0,$.default)(t&&r,"Can not flatten objects");let o={type:"object"};return(t.properties||r.properties)&&(o.properties=(0,m.mergeDeepWith)((i,s)=>Array.isArray(i)&&Array.isArray(s)?(0,m.concat)(i,s):i===s?s:$.default.fail("Can not flatten properties"),t.properties||{},r.properties||{})),(t.required||r.required)&&(o.required=(0,m.union)(t.required||[],r.required||[])),(t.examples||r.examples)&&(o.examples=se(t.examples||[],r.examples||[],([i,s])=>(0,m.mergeDeepRight)(i,s))),o},Do=({schema:{_def:{left:e,right:t}},next:r})=>{let o=[e,t].map(i=>r({schema:i}));try{return jo(o)}catch{}return{allOf:o}},ko=({schema:e,next:t})=>t({schema:e.unwrap()}),Lo=({schema:e,next:t})=>t({schema:e._def.innerType}),Ho=({schema:e,next:t})=>{let r=t({schema:e.unwrap()});return(0,J.isReferenceObject)(r)||(r.type=Br(r)),r},Lr=({schema:e})=>({type:typeof Object.values(e.enum)[0],enum:Object.values(e.enum)}),Uo=({schema:{value:e}})=>({type:typeof e,enum:[e]}),Ko=({schema:e,isResponse:t,...r})=>{let o=Object.keys(e.shape),i=p=>t&&je(p)?p instanceof O.z.ZodOptional:p.isOptional(),s=o.filter(p=>!i(e.shape[p])),a={type:"object"};return o.length&&(a.properties=it({schema:e,isResponse:t,...r})),s.length&&(a.required=s),a},Fo=()=>({type:"null"}),Bo=e=>((0,$.default)(!e.isResponse,new w({message:"Please use ez.dateOut() for output.",...e})),{description:"YYYY-MM-DDTHH:mm:ss.sssZ",type:"string",format:"date-time",pattern:qe.source,externalDocs:{url:Hr}}),qo=e=>((0,$.default)(e.isResponse,new w({message:"Please use ez.dateIn() for input.",...e})),{description:"YYYY-MM-DDTHH:mm:ss.sssZ",type:"string",format:"date-time",externalDocs:{url:Hr}}),Vo=e=>$.default.fail(new w({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})),$o=()=>({type:"boolean"}),_o=()=>({type:"integer",format:"bigint"}),Go=e=>e.every(t=>t instanceof O.z.ZodLiteral),Wo=({schema:{keySchema:e,valueSchema:t},...r})=>{if(e instanceof O.z.ZodEnum||e instanceof O.z.ZodNativeEnum){let o=Object.values(e.enum),i={type:"object"};return o.length&&(i.properties=it({schema:O.z.object((0,m.fromPairs)((0,m.xprod)(o,[t]))),...r}),i.required=o),i}if(e instanceof O.z.ZodLiteral)return{type:"object",properties:it({schema:O.z.object({[e.value]:t}),...r}),required:[e.value]};if(e instanceof O.z.ZodUnion&&Go(e.options)){let o=(0,m.map)(s=>`${s.value}`,e.options),i=(0,m.fromPairs)((0,m.xprod)(o,[t]));return{type:"object",properties:it({schema:O.z.object(i),...r}),required:o}}return{type:"object",additionalProperties:r.next({schema:t})}},Yo=({schema:{_def:e,element:t},next:r})=>{let o={type:"array",items:r({schema:t})};return e.minLength&&(o.minItems=e.minLength.value),e.maxLength&&(o.maxItems=e.maxLength.value),o},Jo=({schema:{items:e},next:t})=>({type:"array",prefixItems:e.map(o=>t({schema:o}))}),Qo=({schema:{isEmail:e,isURL:t,minLength:r,maxLength:o,isUUID:i,isCUID:s,isCUID2:a,isULID:p,isIP:d,isEmoji:c,isDatetime:u,_def:{checks:l}}})=>{let y=l.find(T=>T.kind==="regex"),b=l.find(T=>T.kind==="datetime"),x=y?y.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,R={type:"string"},g={"date-time":u,email:e,url:t,uuid:i,cuid:s,cuid2:a,ulid:p,ip:d,emoji:c};for(let T in g)if(g[T]){R.format=T;break}return r!==null&&(R.minLength=r),o!==null&&(R.maxLength=o),x&&(R.pattern=x.source),R},Xo=({schema:e})=>{let t=e._def.checks.find(({kind:d})=>d==="min"),r=e.minValue===null?e.isInt?Number.MIN_SAFE_INTEGER:Number.MIN_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},it=({schema:{shape:e},next:t})=>(0,m.map)(r=>t({schema:r}),e),en=e=>{let t=Array.isArray(e.type)?e.type[0]:e.type;return Io?.[t]},Br=e=>{let t=typeof e.type=="string"?[e.type]:e.type||[];return t.includes("null")?t:t.concat("null")},tn=({schema:e,isResponse:t,next:r})=>{let o=r({schema:e.innerType()}),{effect:i}=e._def;if(t&&i.type==="transform"&&!(0,J.isReferenceObject)(o)){let s=We(e,en(o));return s&&["number","string","boolean"].includes(s)?{type:s}:r({schema:O.z.any()})}if(!t&&i.type==="preprocess"&&!(0,J.isReferenceObject)(o)){let{type:s,...a}=o;return{...a,format:`${a.format||s} (preprocessed)`}}return o},rn=({schema:e,isResponse:t,next:r})=>r({schema:e._def[t?"out":"in"]}),on=({schema:e,next:t})=>t({schema:e.unwrap()}),nn=({next:e,schema:t,serializer:r,getRef:o,makeRef:i})=>{let s=r(t.schema);return o(s)||(i(s,{}),i(s,e({schema:t.schema})))},sn=({next:e,schema:t})=>e({schema:t.shape.raw}),qr=(e,t,r=[])=>{let o=(0,m.pipe)(V,(0,m.map)((0,m.when)(i=>O.z.object({}).safeParse(i).success,(0,m.omit)(r))),(0,m.map)((0,m.objOf)("value")))({schema:e,variant:t?"parsed":"original",validate:!0});if(o.length!==0)return(0,m.zipObj)((0,m.range)(1,o.length+1).map(i=>`example${i}`),o)},an=(e,t,r)=>{let o=(0,m.pipe)(V,(0,m.filter)((0,m.has)(r)),(0,m.pluck)(r),(0,m.map)((0,m.objOf)("value")))({schema:e,variant:t?"parsed":"original",validate:!0});if(o.length!==0)return(0,m.zipObj)((0,m.range)(1,o.length+1).map(i=>`example${i}`),o)},Le=(e,t)=>e instanceof O.z.ZodObject?e:e instanceof O.z.ZodUnion||e instanceof O.z.ZodDiscriminatedUnion?Array.from(e.options.values()).map(r=>Le(r,t)).reduce((r,o)=>r.merge(o.partial()),O.z.object({})):e instanceof O.z.ZodEffects?((0,$.default)(e._def.effect.type==="refinement",t),Le(e._def.schema,t)):Le(e._def.left,t).merge(Le(e._def.right,t)),Vr=({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}=Le(r,new w({message:"Using transformations on the top level schema is not allowed.",path:e,method:t,isResponse:!1})),u=Kr(e),l=o.includes("query"),y=o.includes("params"),b=o.includes("headers"),x=g=>y&&u.includes(g),R=g=>b&&bt(g);return Object.keys(c).filter(g=>l||x(g)).map(g=>{let T=ue({schema:c[g],isResponse:!1,rules:Mt,onEach:vt,onMissing:Nt,serializer:i,getRef:s,makeRef:a,path:e,method:t}),H=p==="components"?a(v(d,g),T):T;return{name:g,in:x(g)?"path":R(g)?"header":"query",required:!c[g].isOptional(),description:T.description||d,schema:H,examples:an(r,!1,g)}})},Mt={ZodString:Qo,ZodNumber:Xo,ZodBigInt:_o,ZodBoolean:$o,ZodNull:Fo,ZodArray:Yo,ZodTuple:Jo,ZodRecord:Wo,ZodObject:Ko,ZodLiteral:Uo,ZodIntersection:Do,ZodUnion:vo,ZodAny:Zo,ZodDefault:wo,ZodEnum:Lr,ZodNativeEnum:Lr,ZodEffects:tn,ZodOptional:ko,ZodNullable:Ho,ZodDiscriminatedUnion:No,ZodBranded:on,ZodDate:Vo,ZodCatch:Eo,ZodPipeline:rn,ZodLazy:nn,ZodReadonly:Lo,[Me]:Mo,[ve]:zo,[ke]:qo,[De]:Bo,[ae]:sn},vt=({schema:e,isResponse:t,prev:r})=>{if((0,J.isReferenceObject)(r))return{};let{description:o}=e,i=e instanceof O.z.ZodLazy,s=r.type!==void 0,a=t&&je(e),p=!i&&s&&!a&&e.isNullable(),d=i?[]:V({schema:e,variant:t?"parsed":"original",validate:!0}),c={};return o&&(c.description=o),p&&(c.type=Br(r)),d.length&&(c.examples=Array.from(d)),c},Nt=({schema:e,...t})=>$.default.fail(new w({message:`Zod type ${e.constructor.name} is unsupported.`,...t})),zt=(e,t)=>{if((0,J.isReferenceObject)(e))return e;let r=e.properties?(0,m.omit)(t,e.properties):void 0,o=e.examples?e.examples.map(p=>(0,m.omit)(t,p)):void 0,i=e.required?e.required.filter(p=>!t.includes(p)):void 0,s=e.allOf?e.allOf.map(p=>zt(p,t)):void 0,a=e.oneOf?e.oneOf.map(p=>zt(p,t)):void 0;return(0,m.omit)(Object.entries({properties:r,required:i,examples:o,allOf:s,oneOf:a}).filter(([{},p])=>p===void 0).map(([p])=>p),{...e,properties:r,required:i,examples:o,allOf:s,oneOf:a})},$r=e=>(0,J.isReferenceObject)(e)?e:(0,m.omit)(["examples"],e),_r=({method:e,path:t,schema:r,mimeTypes:o,variant:i,serializer:s,getRef:a,makeRef:p,composition:d,hasMultipleStatusCodes:c,statusCode:u,description:l=`${e.toUpperCase()} ${t} ${Ot(i)} response ${c?u:""}`.trim()})=>{let y=$r(ue({schema:r,isResponse:!0,rules:Mt,onEach:vt,onMissing:Nt,serializer:s,getRef:a,makeRef:p,path:t,method:e})),b={schema:d==="components"?p(v(l),y):y,examples:qr(r,!0)};return{description:l,content:(0,m.fromPairs)((0,m.xprod)(o,[b]))}},pn=()=>({type:"http",scheme:"basic"}),dn=({format:e})=>{let t={type:"http",scheme:"bearer"};return e&&(t.bearerFormat=e),t},cn=({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},mn=({name:e})=>({type:"apiKey",in:"header",name:e}),ln=({name:e})=>({type:"apiKey",in:"cookie",name:e}),un=({url:e})=>({type:"openIdConnect",openIdConnectUrl:e}),fn=({flows:e={}})=>({type:"oauth2",flows:(0,m.map)(t=>({...t,scopes:t.scopes||{}}),(0,m.reject)(m.isNil,e))}),Gr=(e,t)=>{let r={basic:pn,bearer:dn,input:cn,header:mn,cookie:ln,openid:un,oauth2:fn};return Qe(e,o=>r[o.type](o,t))},st=e=>"or"in e?e.or.map(t=>"and"in t?(0,m.mergeAll)((0,m.map)(({name:r,scopes:o})=>(0,m.objOf)(r,o),t.and)):{[t.name]:t.scopes}):"and"in e?st(Rt(e)):st({or:[e]}),Wr=({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=Kr(t),u=$r(zt(ue({schema:r,isResponse:!1,rules:Mt,onEach:vt,onMissing:Nt,serializer:i,getRef:s,makeRef:a,path:t,method:e}),c)),l={schema:p==="components"?a(v(d),u):u,examples:qr(r,!1,c)};return{description:d,content:(0,m.fromPairs)((0,m.xprod)(o,[l]))}},Yr=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}),jt=e=>e.length<=kr?e:e.slice(0,kr-1)+"\u2026";var at=class extends Qr.OpenApiBuilder{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(0,Jr.default)(!(o in this.lastOperationIdSuffixes),new w({message:`Duplicated operationId: "${o}"`,method:r,isResponse:!1,path:t})),this.lastOperationIdSuffixes[o]=1,o;let i=v(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=Ge}){super(),this.addInfo({title:o,version:i});for(let l of typeof s=="string"?[s]:s)this.addServer({url:l});le({routing:t,onEndpoint:(l,y,b)=>{let x=b,R={path:y,method:x,endpoint:l,composition:d,serializer:c,getRef:this.getRef.bind(this),makeRef:this.makeRef.bind(this)},[g,T]=["short","long"].map(l.getDescription.bind(l)),H=r.inputSources?.[x]||xt[x],Z=this.ensureUniqOperationId(y,x,l.getOperationId(x)),ee=Vr({...R,inputSources:H,schema:l.getSchema("input"),description:a?.requestParameter?.call(null,{method:x,path:y,operationId:Z})}),C={operationId:Z,responses:{}};for(let U of["positive","negative"]){let te=l.getResponses(U);for(let{mimeTypes:Ie,schema:ft,statusCodes:S}of te)for(let I of S)C.responses[I]=_r({...R,variant:U,schema:ft,mimeTypes:Ie,statusCode:I,hasMultipleStatusCodes:te.length>1||S.length>1,description:a?.[`${U}Response`]?.call(null,{method:x,path:y,operationId:Z,statusCode:I})})}T&&(C.description=T,p&&g===void 0&&(C.summary=jt(T))),g&&(C.summary=jt(g)),l.getTags().length>0&&(C.tags=l.getTags()),ee.length>0&&(C.parameters=ee),H.includes("body")&&(C.requestBody=Wr({...R,schema:l.getSchema("input"),mimeTypes:l.getMimeTypes("input"),description:a?.requestBody?.call(null,{method:x,path:y,operationId:Z})}));let G=st(Qe(Gr(l.getSecurity(),H),U=>{let te=this.ensureUniqSecuritySchemaName(U),Ie=["oauth2","openIdConnect"].includes(U.type)?l.getScopes():[];return this.addSecurityScheme(te,U),{name:te,scopes:Ie}}));G.length>0&&(C.security=G),this.addPath(Fr(y),{[x]:C})}}),this.rootDoc.tags=r.tags?Yr(r.tags):[]}};var Dt=A(require("http"),1);var yn=({fnMethod:e,requestProps:t})=>({method:"GET",header:e(()=>q),...t}),gn=({fnMethod:e,responseProps:t})=>{let r={writableEnded:!1,statusCode:200,statusMessage:Dt.default.STATUS_CODES[200],set:e(()=>r),setHeader:e(()=>r),header:e(()=>r),status:e(o=>(r.statusCode=o,r.statusMessage=Dt.default.STATUS_CODES[o],r)),json:e(()=>r),send:e(()=>r),end:e(()=>(r.writableEnded=!0,r)),...t};return r},hn=({fnMethod:e,loggerProps:t})=>({info:e(),warn:e(),error:e(),debug:e(),...t}),Xr=async({endpoint:e,requestProps:t,responseProps:r,configProps:o,loggerProps:i,fnMethod:s})=>{let a=s||(await Pr([{moduleName:"vitest",moduleExport:"vi"},{moduleName:"@jest/globals",moduleExport:"jest"}])).fn,p=yn({fnMethod:a,requestProps:t}),d=gn({fnMethod:a,responseProps:r}),c=hn({fnMethod:a,loggerProps:i}),u={cors:!1,logger:c,...o};return await e.execute({request:p,response:d,config:u,logger:c}),{requestMock:p,responseMock:d,loggerMock:c}};var E=A(require("typescript"),1);var L=A(require("typescript"),1),Ae=require("ramda"),n=L.default.factory,Q=[n.createModifier(L.default.SyntaxKind.ExportKeyword)],xn=[n.createModifier(L.default.SyntaxKind.AsyncKeyword)],Tn=[n.createModifier(L.default.SyntaxKind.PublicKeyword),n.createModifier(L.default.SyntaxKind.ReadonlyKeyword)],eo=[n.createModifier(L.default.SyntaxKind.ProtectedKeyword),n.createModifier(L.default.SyntaxKind.ReadonlyKeyword)],kt=n.createTemplateHead(""),Pe=n.createTemplateTail(""),Lt=n.createTemplateMiddle(" "),Ht=e=>n.createTemplateLiteralType(kt,e.map((t,r)=>n.createTemplateLiteralTypeSpan(n.createTypeReferenceNode(t),r===e.length-1?Pe:Lt))),Ut=Ht(["M","P"]),pt=(e,t,r)=>n.createParameterDeclaration(r,void 0,e,void 0,t,void 0),dt=(e,t)=>(0,Ae.chain)(([r,o])=>[pt(n.createIdentifier(r),o,t)],(0,Ae.toPairs)(e)),Kt=(e,t)=>n.createExpressionWithTypeArguments(n.createIdentifier("Record"),[typeof e=="number"?n.createKeywordTypeNode(e):n.createTypeReferenceNode(e),n.createKeywordTypeNode(t)]),to=e=>n.createConstructorDeclaration(void 0,e,n.createBlock([])),ro=(e,t)=>n.createPropertySignature(void 0,`"${e}"`,void 0,n.createTypeReferenceNode(t)),X=(e,t,r)=>n.createVariableDeclarationList([n.createVariableDeclaration(e,void 0,r,t)],L.default.NodeFlags.Const),Ft=(e,t)=>n.createTypeAliasDeclaration(Q,e,void 0,n.createUnionTypeNode(t.map(r=>n.createLiteralTypeNode(n.createStringLiteral(r))))),ct=(e,t)=>n.createTypeAliasDeclaration(Q,e,void 0,t),oo=(e,t,r)=>n.createPropertyDeclaration(Tn,e,void 0,t,r),no=(e,t,r=[])=>n.createClassDeclaration(Q,e,void 0,void 0,[t,...r]),io=(e,t)=>n.createTypeReferenceNode("Promise",[n.createIndexedAccessTypeNode(n.createTypeReferenceNode(e),t)]),so=()=>n.createTypeReferenceNode("Promise",[n.createKeywordTypeNode(L.default.SyntaxKind.AnyKeyword)]),ao=(e,t,r)=>n.createInterfaceDeclaration(Q,e,void 0,t,r),po=e=>(0,Ae.chain)(([t,r])=>[n.createTypeParameterDeclaration([],t,n.createTypeReferenceNode(r))],(0,Ae.toPairs)(e)),Bt=(e,t,r)=>n.createArrowFunction(r?xn:void 0,void 0,e.map(o=>pt(o)),void 0,void 0,t),qt=(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,dt({acc:void 0,key:void 0}),void 0,void 0,t),r]);var co=["get","post","put","delete","patch"];var h=A(require("typescript"),1),lt=require("zod");var _=A(require("typescript"),1),{factory:mt}=_.default,Vt=(e,t)=>{_.default.addSyntheticLeadingComment(e,_.default.SyntaxKind.MultiLineCommentTrivia,`* ${t} `,!0)},Ce=(e,t,r)=>{let o=mt.createTypeAliasDeclaration(void 0,mt.createIdentifier(t),void 0,e);return r&&Vt(o,r),o},$t=(e,t)=>{let r=_.default.createSourceFile("print.ts","",_.default.ScriptTarget.Latest,!1,_.default.ScriptKind.TS);return _.default.createPrinter(t).printNode(_.default.EmitHint.Unspecified,e,r)},bn=/^[A-Za-z_$][A-Za-z0-9_$]*$/,mo=e=>bn.test(e)?mt.createIdentifier(e):mt.createStringLiteral(e);var{factory:f}=h.default,Sn={[h.default.SyntaxKind.AnyKeyword]:"",[h.default.SyntaxKind.BigIntKeyword]:BigInt(0),[h.default.SyntaxKind.BooleanKeyword]:!1,[h.default.SyntaxKind.NumberKeyword]:0,[h.default.SyntaxKind.ObjectKeyword]:{},[h.default.SyntaxKind.StringKeyword]:"",[h.default.SyntaxKind.UndefinedKeyword]:void 0},On=({schema:{value:e}})=>f.createLiteralTypeNode(typeof e=="number"?f.createNumericLiteral(e):typeof e=="boolean"?e?f.createTrue():f.createFalse():f.createStringLiteral(e)),Rn=({schema:{shape:e},isResponse:t,next:r,optionalPropStyle:{withQuestionMark:o}})=>{let i=Object.entries(e).map(([s,a])=>{let p=t&&je(a)?a instanceof lt.z.ZodOptional:a.isOptional(),d=f.createPropertySignature(void 0,mo(s),p&&o?f.createToken(h.default.SyntaxKind.QuestionToken):void 0,r({schema:a}));return a.description&&Vt(d,a.description),d});return f.createTypeLiteralNode(i)},An=({schema:{element:e},next:t})=>f.createArrayTypeNode(t({schema:e})),Pn=({schema:{options:e}})=>f.createUnionTypeNode(e.map(t=>f.createLiteralTypeNode(f.createStringLiteral(t)))),lo=({schema:{options:e},next:t})=>f.createUnionTypeNode(e.map(r=>t({schema:r}))),Cn=e=>Sn?.[e.kind],In=({schema:e,next:t,isResponse:r})=>{let o=t({schema:e.innerType()}),i=e._def.effect;if(r&&i.type==="transform"){let s=We(e,Cn(o)),a={number:h.default.SyntaxKind.NumberKeyword,bigint:h.default.SyntaxKind.BigIntKeyword,boolean:h.default.SyntaxKind.BooleanKeyword,string:h.default.SyntaxKind.StringKeyword,undefined:h.default.SyntaxKind.UndefinedKeyword,object:h.default.SyntaxKind.ObjectKeyword};return f.createKeywordTypeNode(s&&a[s]||h.default.SyntaxKind.AnyKeyword)}return o},wn=({schema:e})=>f.createUnionTypeNode(Object.values(e.enum).map(t=>f.createLiteralTypeNode(typeof t=="number"?f.createNumericLiteral(t):f.createStringLiteral(t)))),En=({next:e,schema:t,optionalPropStyle:{withUndefined:r}})=>{let o=e({schema:t.unwrap()});return r?f.createUnionTypeNode([o,f.createKeywordTypeNode(h.default.SyntaxKind.UndefinedKeyword)]):o},Zn=({next:e,schema:t})=>f.createUnionTypeNode([e({schema:t.unwrap()}),f.createLiteralTypeNode(f.createNull())]),zn=({next:e,schema:{items:t}})=>f.createTupleTypeNode(t.map(r=>e({schema:r}))),Mn=({next:e,schema:{keySchema:t,valueSchema:r}})=>f.createExpressionWithTypeArguments(f.createIdentifier("Record"),[e({schema:t}),e({schema:r})]),vn=({next:e,schema:t})=>f.createIntersectionTypeNode([t._def.left,t._def.right].map(r=>e({schema:r}))),Nn=({next:e,schema:t})=>e({schema:t._def.innerType}),fe=e=>()=>f.createKeywordTypeNode(e),jn=({next:e,schema:t})=>e({schema:t.unwrap()}),Dn=({next:e,schema:t})=>e({schema:t._def.innerType}),kn=({next:e,schema:t})=>e({schema:t._def.innerType}),Ln=({schema:e,next:t,isResponse:r})=>t({schema:e._def[r?"out":"in"]}),Hn=()=>f.createLiteralTypeNode(f.createNull()),Un=({getAlias:e,makeAlias:t,next:r,serializer:o,schema:i})=>{let s=`Type${o(i.schema)}`;return e(s)||(t(s,f.createLiteralTypeNode(f.createNull())),t(s,r({schema:i.schema})))},Kn=({schema:e})=>{let t=f.createKeywordTypeNode(h.default.SyntaxKind.StringKeyword),r=f.createTypeReferenceNode("Buffer"),o=f.createUnionTypeNode([t,r]);return e instanceof lt.z.ZodString?t:e instanceof lt.z.ZodUnion?o:r},Fn=({next:e,schema:t})=>e({schema:t.shape.raw}),Bn={ZodString:fe(h.default.SyntaxKind.StringKeyword),ZodNumber:fe(h.default.SyntaxKind.NumberKeyword),ZodBigInt:fe(h.default.SyntaxKind.BigIntKeyword),ZodBoolean:fe(h.default.SyntaxKind.BooleanKeyword),ZodAny:fe(h.default.SyntaxKind.AnyKeyword),[De]:fe(h.default.SyntaxKind.StringKeyword),[ke]:fe(h.default.SyntaxKind.StringKeyword),ZodNull:Hn,ZodArray:An,ZodTuple:zn,ZodRecord:Mn,ZodObject:Rn,ZodLiteral:On,ZodIntersection:vn,ZodUnion:lo,ZodDefault:Nn,ZodEnum:Pn,ZodNativeEnum:wn,ZodEffects:In,ZodOptional:En,ZodNullable:Zn,ZodDiscriminatedUnion:lo,ZodBranded:jn,ZodCatch:kn,ZodPipeline:Ln,ZodLazy:Un,ZodReadonly:Dn,[Me]:Kn,[ae]:Fn},He=({schema:e,...t})=>ue({schema:e,rules:Bn,onMissing:()=>f.createKeywordTypeNode(h.default.SyntaxKind.AnyKeyword),...t});var ut=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]=Ce(r,t),this.getAlias(t)}constructor({routing:t,variant:r="client",serializer:o=Ge,splitResponse:i=!1,optionalPropStyle:s={withQuestionMark:!0,withUndefined:!0}}){le({routing:t,onEndpoint:(S,I,z)=>{let re={serializer:o,getAlias:this.getAlias.bind(this),makeAlias:this.makeAlias.bind(this),optionalPropStyle:s},_t=v(z,I,"input"),fo=He({...re,schema:S.getSchema("input"),isResponse:!1}),we=i?v(z,I,"positive.response"):void 0,Gt=S.getSchema("positive"),Wt=i?He({...re,isResponse:!0,schema:Gt}):void 0,Ee=i?v(z,I,"negative.response"):void 0,Yt=S.getSchema("negative"),Jt=i?He({...re,isResponse:!0,schema:Yt}):void 0,Qt=v(z,I,"response"),yo=we&&Ee?n.createUnionTypeNode([n.createTypeReferenceNode(we),n.createTypeReferenceNode(Ee)]):He({...re,isResponse:!0,schema:Gt.or(Yt)});this.program.push(Ce(fo,_t)),Wt&&we&&this.program.push(Ce(Wt,we)),Jt&&Ee&&this.program.push(Ce(Jt,Ee)),this.program.push(Ce(yo,Qt)),z!=="options"&&(this.paths.push(I),this.registry[`${z} ${I}`]={input:_t,positive:we,negative:Ee,response:Qt,isJson:S.getMimeTypes("positive").includes(q),tags:S.getTags()})}}),this.program.unshift(...Object.values(this.aliases)),this.program.push(Ft(this.ids.pathType,this.paths)),this.program.push(Ft(this.ids.methodType,co)),this.program.push(ct(this.ids.methodPathType,Ht([this.ids.methodType,this.ids.pathType])));let a=[n.createHeritageClause(E.default.SyntaxKind.ExtendsKeyword,[Kt(this.ids.methodPathType,E.default.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:S,kind:I}of this.interfaces)this.program.push(ao(S,a,Object.keys(this.registry).map(z=>{let re=this.registry[z][I];return re?ro(z,re):void 0}).filter(z=>z!==void 0)));if(r==="types")return;let p=n.createVariableStatement(Q,X(this.ids.jsonEndpointsConst,n.createObjectLiteralExpression(Object.keys(this.registry).filter(S=>this.registry[S].isJson).map(S=>n.createPropertyAssignment(`"${S}"`,n.createTrue()))))),d=n.createVariableStatement(Q,X(this.ids.endpointTagsConst,n.createObjectLiteralExpression(Object.keys(this.registry).map(S=>n.createPropertyAssignment(`"${S}"`,n.createArrayLiteralExpression(this.registry[S].tags.map(I=>n.createStringLiteral(I)))))))),c=ct(this.ids.providerType,n.createFunctionTypeNode(po({M:this.ids.methodType,P:this.ids.pathType}),dt({method:n.createTypeReferenceNode("M"),path:n.createTypeReferenceNode("P"),params:n.createIndexedAccessTypeNode(n.createTypeReferenceNode(this.ids.inputInterface),Ut)}),io(this.ids.responseInterface,Ut))),u=ct(this.ids.implementationType,n.createFunctionTypeNode(void 0,dt({method:n.createTypeReferenceNode(this.ids.methodType),path:n.createKeywordTypeNode(E.default.SyntaxKind.StringKeyword),params:Kt(E.default.SyntaxKind.StringKeyword,E.default.SyntaxKind.AnyKeyword)}),so())),l=n.createTemplateExpression(n.createTemplateHead(":"),[n.createTemplateSpan(this.ids.keyParameter,Pe)]),y=qt(this.ids.paramsArgument,n.createCallExpression(n.createPropertyAccessExpression(this.ids.accumulator,"replace"),void 0,[l,n.createElementAccessExpression(this.ids.paramsArgument,this.ids.keyParameter)]),this.ids.pathParameter),b=qt(this.ids.paramsArgument,n.createConditionalExpression(n.createBinaryExpression(n.createCallExpression(n.createPropertyAccessExpression(this.ids.pathParameter,"indexOf"),void 0,[l]),E.default.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=no(this.ids.clientClass,to([pt(this.ids.implementationArgument,n.createTypeReferenceNode(this.ids.implementationType),eo)]),[oo(this.ids.provideMethod,n.createTypeReferenceNode(this.ids.providerType),Bt([this.ids.methodParameter,this.ids.pathParameter,this.ids.paramsArgument],n.createCallExpression(n.createPropertyAccessExpression(n.createThis(),this.ids.implementationArgument),void 0,[this.ids.methodParameter,y,b]),!0))]);this.program.push(p,d,c,u,x);let R=n.createPropertyAssignment(this.ids.methodParameter,n.createCallExpression(n.createPropertyAccessExpression(this.ids.methodParameter,"toUpperCase"),void 0,void 0)),g=n.createPropertyAssignment(this.ids.headersProperty,n.createConditionalExpression(this.ids.hasBodyConst,void 0,n.createObjectLiteralExpression([n.createPropertyAssignment(n.createStringLiteral("Content-Type"),n.createStringLiteral(q))]),void 0,this.ids.undefinedValue)),T=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)),H=n.createVariableStatement(void 0,X(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,Pe)]),n.createObjectLiteralExpression([R,g,T])])))),Z=n.createVariableStatement(void 0,X(this.ids.hasBodyConst,n.createLogicalNot(n.createCallExpression(n.createPropertyAccessExpression(n.createArrayLiteralExpression([n.createStringLiteral("get"),n.createStringLiteral("delete")]),"includes"),void 0,[this.ids.methodParameter])))),ee=n.createVariableStatement(void 0,X(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]),Pe)])))),[C,G]=["json","text"].map(S=>n.createReturnStatement(n.createCallExpression(n.createPropertyAccessExpression(this.ids.responseConst,S),void 0,void 0))),U=n.createIfStatement(n.createBinaryExpression(n.createTemplateExpression(kt,[n.createTemplateSpan(this.ids.methodParameter,Lt),n.createTemplateSpan(this.ids.pathParameter,Pe)]),E.default.SyntaxKind.InKeyword,this.ids.jsonEndpointsConst),n.createBlock([C])),te=n.createVariableStatement(Q,X(this.ids.exampleImplementationConst,Bt([this.ids.methodParameter,this.ids.pathParameter,this.ids.paramsArgument],n.createBlock([Z,ee,H,U,G]),!0),n.createTypeReferenceNode(this.ids.implementationType))),Ie=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"))])])),ft=n.createVariableStatement(void 0,X(this.ids.clientConst,n.createNewExpression(this.ids.clientClass,void 0,[this.ids.exampleImplementationConst])));this.usage.push(te,ft,Ie)}printUsage(t){return this.usage.length?this.usage.map(r=>typeof r=="string"?r:$t(r,t)).join(`
19
19
  `):void 0}print(t){let r=this.printUsage(t),o=r&&E.default.addSyntheticLeadingComment(E.default.addSyntheticLeadingComment(n.createEmptyStatement(),E.default.SyntaxKind.SingleLineCommentTrivia," Usage example:"),E.default.SyntaxKind.MultiLineCommentTrivia,`
20
- ${r}`);return this.program.concat(o||[]).map((i,s)=>qt(i,s<this.program.length?t:{...t,omitTrailingSemicolon:!0})).join(`
20
+ ${r}`);return this.program.concat(o||[]).map((i,s)=>$t(i,s<this.program.length?t:{...t,omitTrailingSemicolon:!0})).join(`
21
21
 
22
- `)}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 mo={dateIn:Mr,dateOut:Nr,file:Ve,upload:pr,raw:ar};0&&(module.exports={AbstractEndpoint,DependsOnMethod,Documentation,DocumentationError,EndpointsFactory,InputValidationError,Integration,MissingPeerError,OutputValidationError,RoutingError,ServeStatic,arrayEndpointsFactory,arrayResultHandler,attachRouting,createConfig,createLogger,createMiddleware,createResultHandler,createServer,defaultEndpointsFactory,defaultResultHandler,ez,getExamples,getMessageFromError,getStatusCodeFromError,testEndpoint,withMeta});
22
+ `)}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 uo={dateIn:Nr,dateOut:Dr,file:_e,upload:cr,raw:dr};0&&(module.exports={AbstractEndpoint,DependsOnMethod,Documentation,DocumentationError,EndpointsFactory,InputValidationError,Integration,MissingPeerError,OutputValidationError,RoutingError,ServeStatic,arrayEndpointsFactory,arrayResultHandler,attachRouting,createConfig,createLogger,createMiddleware,createResultHandler,createServer,defaultEndpointsFactory,defaultResultHandler,ez,getExamples,getMessageFromError,getStatusCodeFromError,testEndpoint,withMeta});
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
- var Ut=(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 Br(e){return e}import Xt from"assert/strict";import{z as ct}from"zod";import{z as qr}from"zod";var ce={positive:200,negative:400},rt=(e,t)=>e instanceof qr.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{isHttpError as Yr}from"http-errors";import{createHash as Jr}from"crypto";import{xprod as Qr}from"ramda";import{z as P}from"zod";var me=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)}},F=class extends Error{name="IOSchemaError"},X=class extends F{name="OutputValidationError";originalError;constructor(t){super(q(t)),this.originalError=t}},B=class extends F{name="InputValidationError";originalError;constructor(t){super(q(t)),this.originalError=t}},ee=class extends Error{name="ResultHandlerError";originalError;constructor(t,r){super(t),this.originalError=r||void 0}},le=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.`)}};import{z as Kt}from"zod";import{clone as Vr,mergeDeepRight as $r}from"ramda";var L="expressZodApiMeta",_r=e=>e.describe(e.description),k=e=>{let t=_r(e);return t._def[L]=Vr(t._def[L])||{examples:[]},Object.defineProperties(t,{example:{get:()=>r=>{let o=k(t);return o._def[L].examples.push(r),o}}})},Ft=e=>Kt.object({[L]:Kt.object({})}).safeParse(e._def).success,Oe=(e,t)=>Ft(e)?e._def[L][t]:void 0,Bt=(e,t)=>{if(!Ft(e))return t;let r=k(t);return r._def[L].examples=te(r._def[L].examples,e._def[L].examples,([o,i])=>typeof o=="object"&&typeof i=="object"?$r({...o},{...i}):i),r},z=(e,t)=>{let r=k(t);return r._def[L].kind=e,r},ot=(e,t)=>Oe(e,"kind")===t;var H="application/json",Re="multipart/form-data",qt="application/octet-stream";import{z as Wr}from"zod";import{z as nt}from"zod";import{z as Gr}from"zod";var Le=e=>!isNaN(e.getTime()),Ae=Gr.custom(e=>Buffer.isBuffer(e),{message:"Expected Buffer"}),Vt=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,ke=/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$/;var Pe="File",He=e=>Object.entries($t).reduce((t,[r,o])=>Object.defineProperty(t,r,{get:()=>o}),z(Pe,e)),$t={buffer:({}={})=>He(Ae),string:({}={})=>He(nt.string()),binary:({}={})=>He(Ae.or(nt.string())),base64:({}={})=>He(nt.string().regex(Vt,"Does not match base64 encoding"))};function Ue(e){return $t[e||"string"]()}var re="Raw",_t=()=>z(re,Wr.object({raw:Ue("buffer")}));import{z as M}from"zod";var Ce="Upload",Gt=()=>z(Ce,M.custom(e=>M.object({name:M.string(),encoding:M.string(),mimetype:M.string(),data:Ae,tempFilePath:M.string(),truncated:M.boolean(),size:M.number(),md5:M.string(),mv:M.function()}).safeParse(e).success,e=>({message:`Expected file upload, received ${typeof e}`})));var Xr=e=>{let r=(e.header("content-type")||"").slice(0,Re.length).toLowerCase()===Re;return"files"in e&&r},Ke={get:["query","params"],post:["body","params","files"],put:["body","params"],patch:["body","params"],delete:["query","params"]},eo=["body","query","params"],it=e=>e.method.toLowerCase(),st=e=>e.startsWith("x-"),to=e=>Object.entries(e.headers).reduce((t,[r,o])=>st(r)?{...t,[r]:o}:t,{}),Wt=(e,t)=>{let r=it(e);if(r==="options")return{};let o=eo;return r in Ke&&(o=Ke[r]),t&&r in t&&(o=t[r]||o),o.filter(i=>i==="files"?Xr(e):!0).reduce((i,s)=>({...i,...s==="headers"?to(e):e[s]}),{})},fe=e=>e instanceof Error?e:new Error(typeof e=="symbol"?e.toString():`${e}`),q=e=>e instanceof P.ZodError?e.issues.map(({path:t,message:r})=>(t.length?[t.join("/")]:[]).concat(r).join(": ")).join("; "):e instanceof X?`output${e.originalError.issues[0]?.path.length>0?"/":": "}${e.message}`:e.message,Fe=e=>Yr(e)?e.statusCode:e instanceof B?400:500,at=({logger:e,request:t,input:r,error:o,statusCode:i})=>{i===500&&e.error(`Internal server error
1
+ var qt=(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 Qr(e){return e}import or from"assert/strict";import{z as ut}from"zod";import{z as Xr}from"zod";var me={positive:200,negative:400},nt=(e,t)=>e instanceof Xr.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{isHttpError as io}from"http-errors";import{createHash as so}from"crypto";import{flip as ao,pickBy as po,xprod as co}from"ramda";import{z as P}from"zod";var le=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)}},F=class extends Error{name="IOSchemaError"},X=class extends F{name="OutputValidationError";originalError;constructor(t){super(q(t)),this.originalError=t}},B=class extends F{name="InputValidationError";originalError;constructor(t){super(q(t)),this.originalError=t}},ee=class extends Error{name="ResultHandlerError";originalError;constructor(t,r){super(t),this.originalError=r||void 0}},ue=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.`)}};import{z as Vt}from"zod";import{clone as eo,mergeDeepRight as to}from"ramda";var k="expressZodApiMeta",ro=e=>e.describe(e.description),L=e=>{let t=ro(e);return t._def[k]=eo(t._def[k])||{examples:[]},Object.defineProperties(t,{example:{get:()=>r=>{let o=L(t);return o._def[k].examples.push(r),o}}})},$t=e=>Vt.object({[k]:Vt.object({})}).safeParse(e._def).success,Re=(e,t)=>$t(e)?e._def[k][t]:void 0,_t=(e,t)=>{if(!$t(e))return t;let r=L(t);return r._def[k].examples=te(r._def[k].examples,e._def[k].examples,([o,i])=>typeof o=="object"&&typeof i=="object"?to({...o},{...i}):i),r},z=(e,t)=>{let r=L(t);return r._def[k].kind=e,r},it=(e,t)=>Re(e,"kind")===t;var H="application/json",ke="multipart/form-data",Gt="application/octet-stream";import{z as no}from"zod";import{z as st}from"zod";import{z as oo}from"zod";var Le=e=>!isNaN(e.getTime()),Ae=oo.custom(e=>Buffer.isBuffer(e),{message:"Expected Buffer"}),Wt=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,He=/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$/;var Pe="File",Ue=e=>Object.entries(Yt).reduce((t,[r,o])=>Object.defineProperty(t,r,{get:()=>o}),z(Pe,e)),Yt={buffer:({}={})=>Ue(Ae),string:({}={})=>Ue(st.string()),binary:({}={})=>Ue(Ae.or(st.string())),base64:({}={})=>Ue(st.string().regex(Wt,"Does not match base64 encoding"))};function Ke(e){return Yt[e||"string"]()}var re="Raw",Jt=()=>z(re,no.object({raw:Ke("buffer")}));import{z as M}from"zod";var Ce="Upload",Qt=()=>z(Ce,M.custom(e=>M.object({name:M.string(),encoding:M.string(),mimetype:M.string(),data:Ae,tempFilePath:M.string(),truncated:M.boolean(),size:M.number(),md5:M.string(),mv:M.function()}).safeParse(e).success,e=>({message:`Expected file upload, received ${typeof e}`})));var mo=e=>{let r=(e.header("content-type")||"").toLowerCase().startsWith(ke);return"files"in e&&r},at={get:["query","params"],post:["body","params","files"],put:["body","params"],patch:["body","params"],delete:["query","params"]},lo=["body","query","params"],pt=e=>e.method.toLowerCase(),dt=e=>e.startsWith("x-"),uo=e=>po(ao(dt),e),Xt=(e,t={})=>{let r=pt(e);return r==="options"?{}:(t[r]||at[r]||lo).filter(o=>o==="files"?mo(e):!0).map(o=>o==="headers"?uo(e[o]):e[o]).reduce((o,i)=>({...o,...i}),{})},ye=e=>e instanceof Error?e:new Error(typeof e=="symbol"?e.toString():`${e}`),q=e=>e instanceof P.ZodError?e.issues.map(({path:t,message:r})=>(t.length?[t.join("/")]:[]).concat(r).join(": ")).join("; "):e instanceof X?`output${e.originalError.issues[0]?.path.length>0?"/":": "}${e.message}`:e.message,Fe=e=>io(e)?e.statusCode:e instanceof B?400:500,ct=({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})},V=({schema:e,variant:t="original",validate:r=t==="parsed"})=>{let o=Oe(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},te=(e,t,r)=>e.length&&t.length?Qr(e,t).map(r):e.concat(t),ue=e=>e instanceof P.ZodEffects&&e._def.effect.type!=="refinement"?!0:e instanceof P.ZodUnion?e.options.some(ue):e instanceof P.ZodIntersection?[e._def.left,e._def.right].some(ue):!1,v=({subject:e,condition:t,maxDepth:r,depth:o=1})=>{if(t(e))return!0;if(r!==void 0&&o>=r)return!1;let i={condition:t,maxDepth:r,depth:o+1};return e instanceof P.ZodObject?Object.values(e.shape).some(s=>v({subject:s,...i})):e instanceof P.ZodUnion?e.options.some(s=>v({subject:s,...i})):e instanceof P.ZodIntersection?[e._def.left,e._def.right].some(s=>v({subject:s,...i})):e instanceof P.ZodOptional||e instanceof P.ZodNullable?v({subject:e.unwrap(),...i}):e instanceof P.ZodEffects||e instanceof P.ZodTransformer?v({subject:e.innerType(),...i}):e instanceof P.ZodRecord?v({subject:e.valueSchema,...i}):e instanceof P.ZodArray?v({subject:e.element,...i}):e instanceof P.ZodDefault?v({subject:e._def.innerType,...i}):!1},Yt=e=>v({subject:e,condition:t=>ot(t,Ce)}),Jt=e=>v({subject:e,condition:t=>ot(t,re),maxDepth:3}),Ie=e=>"coerce"in e._def&&typeof e._def.coerce=="boolean"?e._def.coerce:!1,pt=e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase(),E=(...e)=>e.flatMap(t=>t.split(/[^A-Z0-9]/gi)).flatMap(t=>t.replaceAll(/[A-Z]+/g,r=>`/${r}`).split("/")).map(pt).join(""),Be=e=>Jr("sha1").update(JSON.stringify(e),"utf8").digest("hex"),qe=(e,t)=>{try{return typeof e.parse(t)}catch{return}};var Ve=({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}.`:""))};var Qt=e=>typeof e=="object"&&e!==null,oe=e=>Qt(e)&&"or"in e,ne=e=>Qt(e)&&"and"in e,$e=e=>({and:e.reduce((t,r)=>t.concat(ne(r)?r.and:r),[])}),_e=(e,t)=>ne(e)?{and:e.and.map(r=>oe(r)?{or:r.or.map(t)}:t(r))}:oe(e)?{or:e.or.map(r=>ne(r)?{and:r.and.map(t)}:t(r))}:t(e),dt=e=>e.and.reduce((t,r)=>({or:te(t.or,oe(r)?r.or:[r],$e)}),{or:[]}),ye=(e,t)=>ne(e)?ne(t)?$e([e,t]):oe(t)?ye(dt(e),t):$e([e,t]):oe(e)?ne(t)?ye(t,e):oe(t)?{or:te(e.or,t.or,$e)}:ye(e,{and:[t]}):ne(t)||oe(t)?ye(t,e):{and:[e,t]};var ge=class{},Ge=class extends ge{#e;#o;#n;#i;#t;#s;#a;#r;#p;#d;#c;#m=[];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,T]of Object.entries(this.#r))Xt(!ue(T),new F(`Using transformations on the top level of endpoint ${f} schema is not allowed.`));this.#t={positive:rt(s.getPositiveResponse(o),{mimeTypes:[H],statusCodes:[ce.positive]}),negative:rt(s.getNegativeResponse(),{mimeTypes:[H],statusCodes:[ce.negative]})};for(let[f,T]of Object.entries(this.#t))Xt(T.length,new ee(`ResultHandler must have at least one ${f} response schema specified.`));this.#i={input:Yt(r)?[Re]:Jt(r)?[qt]:[H],positive:this.#t.positive.flatMap(({mimeTypes:f})=>f),negative:this.#t.negative.flatMap(({mimeTypes:f})=>f)}}_setSiblingMethods(t){this.#m=t}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?ye(t,r.security):t,{and:[]})}getScopes(){return this.#p}getTags(){return this.#d}getOperationId(t){return this.#c(t)}#l(){return{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":this.#o.concat(this.#m).concat("options").join(", ").toUpperCase(),"Access-Control-Allow-Headers":"content-type"}}async#u(t){try{return await this.#r.output.parseAsync(t)}catch(r){throw r instanceof ct.ZodError?new X(r):r}}async#f({method:t,input:r,request:o,response:i,logger:s}){let a={},p=!1;for(let d of this.#n){if(t==="options"&&d.type==="proprietary")continue;let c;try{c=await d.input.parseAsync(r)}catch(l){throw l instanceof ct.ZodError?new B(l):l}if(Object.assign(a,await d.middleware({input:c,options:a,request:o,response:i,logger:s})),p="writableEnded"in i&&i.writableEnded,p){s.warn(`The middleware ${d.middleware.name} has closed the stream. Accumulated options:`,a);break}}return{options:a,isStreamClosed:p}}async#y({input:t,options:r,logger:o}){let i;try{i=await this.#r.input.parseAsync(t)}catch(s){throw s instanceof ct.ZodError?new B(s):s}return this.#s({input:i,options:r,logger:o})}async#g({error:t,request:r,response:o,logger:i,input:s,output:a}){try{await this.#a.handler({error:t,output:a,request:r,response:o,logger:i,input:s})}catch(p){Ve({logger:i,response:o,error:new ee(fe(p).message,t)})}}async execute({request:t,response:r,logger:o,config:i}){let s=it(t),a=null,p=null;if(i.cors){let c=this.#l();typeof i.cors=="function"&&(c=await i.cors({request:t,logger:o,endpoint:this,defaultHeaders:c}));for(let l in c)r.set(l,c[l])}let d=Wt(t,i.inputSources);try{let{options:c,isStreamClosed:l}=await this.#f({method:s,input:d,request:t,response:r,logger:o});if(l)return;if(s==="options"){r.status(200).end();return}a=await this.#u(await this.#y({input:d,options:c,logger:o}))}catch(c){p=fe(c)}await this.#g({input:d,output:a,request:t,response:r,error:p,logger:o})}};import{z as tr}from"zod";var er=(e,t)=>{let r=e.map(({input:i})=>i).concat(t),o=r.reduce((i,s)=>i.and(s));return r.reduce((i,s)=>Bt(s,i),o)};import ro from"assert/strict";var mt=e=>(ro(!ue(e.input),new F("Using transformations on the top level of middleware input schema is not allowed.")),{...e,type:"proprietary"});import{z as N}from"zod";var lt=e=>e,we=lt({getPositiveResponse:e=>{let t=V({schema:e}),r=k(N.object({status:N.literal("success"),data:e}));return t.reduce((o,i)=>o.example({status:"success",data:i}),r)},getNegativeResponse:()=>k(N.object({status:N.literal("error"),error:N.object({message:N.string()})})).example({status:"error",error:{message:q(new Error("Sample error message"))}}),handler:({error:e,input:t,output:r,request:o,response:i,logger:s})=>{if(!e){i.status(ce.positive).json({status:"success",data:r});return}let a=Fe(e);at({logger:s,statusCode:a,request:o,error:e,input:t}),i.status(a).json({status:"error",error:{message:q(e)}})}}),ut=lt({getPositiveResponse:e=>{let t=V({schema:e}),r=k("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)=>typeof i=="object"&&i!==null&&"items"in i&&Array.isArray(i.items)?o.example(i.items):o,r)},getNegativeResponse:()=>k(N.string()).example(q(new Error("Sample error message"))),handler:({response:e,output:t,error:r,logger:o,request:i,input:s})=>{if(r){let a=Fe(r);at({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(ce.positive).json(t.items):e.status(500).send("Property 'items' is missing in the endpoint output")}});var Ee=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:tr.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(mt({input:tr.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]:[],T="tags"in p?p.tags:"tag"in p&&p.tag?[p.tag]:[];return new Ge({handler:r,middlewares:d,outputSchema:o,resultHandler:c,scopes:f,tags:T,methods:l,getOperationId:m,description:i,shortDescription:s,inputSchema:er(d,t)})}},oo=new Ee(we),no=new Ee(ut);import{inspect as io}from"util";var rr=e=>typeof e=="object"&&e!==null&&"level"in e&&("color"in e?typeof e.color=="boolean":!0)&&typeof e.level=="string"&&["silent","warn","debug"].includes(e.level),ft=({winston:{createLogger:e,transports:t,format:{printf:r,timestamp:o,colorize:i,combine:s},config:{npm:a}},...p})=>{let d=f=>{let{[Symbol.for("level")]:T,[Symbol.for("message")]:g,[Symbol.for("splat")]:S,...y}=f;return io(y,!1,1,p.color)},c=f=>r(({timestamp:T,message:g,level:S,durationMs:y,...x})=>{typeof g=="object"&&(x={...x,...g},g="[No message]");let j=Object.keys(x).length>0,I=[];y&&I.push("duration:",`${y}ms`);let Y=f?d:JSON.stringify;if(j)I.push(Y(x));else{let R=x?.[Symbol.for("splat")];Array.isArray(R)&&I.push(...R.map(K=>typeof K=="object"?Y(K):K))}return[T,`${S}:`,g,...I].join(" ")}),l=[o()],m={handleExceptions:!0};switch(p.color&&l.push(i()),p.level){case"debug":m.level="debug",l.push(c(!0));break;case"silent":case"warn":default:m.level="warn",l.push(c())}return m.format=s(...l),e({silent:p.level==="silent",levels:a.levels,transports:[new t.Console(m)],exitOnError:!1})};var Ze=class{constructor(t){this.endpoints=t}};import so from"express";var ze=class{params;constructor(...t){this.params=t}apply(t,r){return r(t,so.static(...this.params))}};import dr from"express";import ao from"http";import po from"https";var ie=async(e,t="default")=>{try{return(await import(e))[t]}catch{}try{return await Promise.resolve().then(()=>Ut(e)[t])}catch{}throw new le(e)},or=async e=>{for(let{moduleName:t,moduleExport:r}of e)try{return await ie(t,r)}catch{}throw new le(e.map(({moduleName:t})=>t))};import nr from"assert/strict";var se=({routing:e,onEndpoint:t,onStatic:r,parentPath:o,hasCors:i})=>{Object.entries(e).forEach(([s,a])=>{s=s.trim(),nr.doesNotMatch(s,/\//,new me(`The entry '${s}' must avoid having slashes \u2014 use nesting instead.`));let p=`${o||""}${s?`/${s}`:""}`;if(a instanceof ge){let d=a.getMethods().slice();i&&d.push("options"),d.forEach(c=>{t(a,p,c)})}else if(a instanceof ze)r&&a.apply(p,r);else if(a instanceof Ze){if(Object.entries(a.endpoints).forEach(([d,c])=>{nr(c.getMethods().includes(d),new me(`Endpoint assigned to ${d} method of ${p} must support ${d} method.`)),t(c,p,d)}),i&&Object.keys(a.endpoints).length>0){let[d,...c]=Object.keys(a.endpoints),l=a.endpoints[d];l._setSiblingMethods(c),t(l,p,"options")}}else se({onEndpoint:t,onStatic:r,hasCors:i,routing:a,parentPath:p})})};var ir=()=>`
4
+ `,{url:t.url,payload:r})},V=({schema:e,variant:t="original",validate:r=t==="parsed"})=>{let o=Re(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},te=(e,t,r)=>e.length&&t.length?co(e,t).map(r):e.concat(t),fe=e=>e instanceof P.ZodEffects&&e._def.effect.type!=="refinement"?!0:e instanceof P.ZodUnion?e.options.some(fe):e instanceof P.ZodIntersection?[e._def.left,e._def.right].some(fe):!1,v=({subject:e,condition:t,maxDepth:r,depth:o=1})=>{if(t(e))return!0;if(r!==void 0&&o>=r)return!1;let i={condition:t,maxDepth:r,depth:o+1};return e instanceof P.ZodObject?Object.values(e.shape).some(s=>v({subject:s,...i})):e instanceof P.ZodUnion?e.options.some(s=>v({subject:s,...i})):e instanceof P.ZodIntersection?[e._def.left,e._def.right].some(s=>v({subject:s,...i})):e instanceof P.ZodOptional||e instanceof P.ZodNullable?v({subject:e.unwrap(),...i}):e instanceof P.ZodEffects||e instanceof P.ZodTransformer?v({subject:e.innerType(),...i}):e instanceof P.ZodRecord?v({subject:e.valueSchema,...i}):e instanceof P.ZodArray?v({subject:e.element,...i}):e instanceof P.ZodDefault?v({subject:e._def.innerType,...i}):!1},er=e=>v({subject:e,condition:t=>it(t,Ce)}),tr=e=>v({subject:e,condition:t=>it(t,re),maxDepth:3}),Ie=e=>"coerce"in e._def&&typeof e._def.coerce=="boolean"?e._def.coerce:!1,mt=e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase(),E=(...e)=>e.flatMap(t=>t.split(/[^A-Z0-9]/gi)).flatMap(t=>t.replaceAll(/[A-Z]+/g,r=>`/${r}`).split("/")).map(mt).join(""),Be=e=>so("sha1").update(JSON.stringify(e),"utf8").digest("hex"),qe=(e,t)=>{try{return typeof e.parse(t)}catch{return}};var Ve=({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 fo}from"ramda";var rr=e=>typeof e=="object"&&e!==null,oe=e=>rr(e)&&"or"in e,ne=e=>rr(e)&&"and"in e,$e=e=>({and:fo(t=>ne(t)?t.and:[t],e)}),_e=(e,t)=>ne(e)?{and:e.and.map(r=>oe(r)?{or:r.or.map(t)}:t(r))}:oe(e)?{or:e.or.map(r=>ne(r)?{and:r.and.map(t)}:t(r))}:t(e),lt=e=>e.and.reduce((t,r)=>({or:te(t.or,oe(r)?r.or:[r],$e)}),{or:[]}),ge=(e,t)=>ne(e)?ne(t)?$e([e,t]):oe(t)?ge(lt(e),t):$e([e,t]):oe(e)?ne(t)?ge(t,e):oe(t)?{or:te(e.or,t.or,$e)}:ge(e,{and:[t]}):ne(t)||oe(t)?ge(t,e):{and:[e,t]};var he=class{},Ge=class extends he{#e;#o;#n;#i;#t;#s;#a;#r;#p;#d;#c;#m=[];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,T]of Object.entries(this.#r))or(!fe(T),new F(`Using transformations on the top level of endpoint ${f} schema is not allowed.`));this.#t={positive:nt(s.getPositiveResponse(o),{mimeTypes:[H],statusCodes:[me.positive]}),negative:nt(s.getNegativeResponse(),{mimeTypes:[H],statusCodes:[me.negative]})};for(let[f,T]of Object.entries(this.#t))or(T.length,new ee(`ResultHandler must have at least one ${f} response schema specified.`));this.#i={input:er(r)?[ke]:tr(r)?[Gt]:[H],positive:this.#t.positive.flatMap(({mimeTypes:f})=>f),negative:this.#t.negative.flatMap(({mimeTypes:f})=>f)}}_setSiblingMethods(t){this.#m=t}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?ge(t,r.security):t,{and:[]})}getScopes(){return this.#p}getTags(){return this.#d}getOperationId(t){return this.#c(t)}#l(){return{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":this.#o.concat(this.#m).concat("options").join(", ").toUpperCase(),"Access-Control-Allow-Headers":"content-type"}}async#u(t){try{return await this.#r.output.parseAsync(t)}catch(r){throw r instanceof ut.ZodError?new X(r):r}}async#f({method:t,input:r,request:o,response:i,logger:s}){let a={},p=!1;for(let d of this.#n){if(t==="options"&&d.type==="proprietary")continue;let c;try{c=await d.input.parseAsync(r)}catch(l){throw l instanceof ut.ZodError?new B(l):l}if(Object.assign(a,await d.middleware({input:c,options:a,request:o,response:i,logger:s})),p="writableEnded"in i&&i.writableEnded,p){s.warn(`The middleware ${d.middleware.name} has closed the stream. Accumulated options:`,a);break}}return{options:a,isStreamClosed:p}}async#y({input:t,options:r,logger:o}){let i;try{i=await this.#r.input.parseAsync(t)}catch(s){throw s instanceof ut.ZodError?new B(s):s}return this.#s({input:i,options:r,logger:o})}async#g({error:t,request:r,response:o,logger:i,input:s,output:a}){try{await this.#a.handler({error:t,output:a,request:r,response:o,logger:i,input:s})}catch(p){Ve({logger:i,response:o,error:new ee(ye(p).message,t)})}}async execute({request:t,response:r,logger:o,config:i}){let s=pt(t),a=null,p=null;if(i.cors){let c=this.#l();typeof i.cors=="function"&&(c=await i.cors({request:t,logger:o,endpoint:this,defaultHeaders:c}));for(let l in c)r.set(l,c[l])}let d=Xt(t,i.inputSources);try{let{options:c,isStreamClosed:l}=await this.#f({method:s,input:d,request:t,response:r,logger:o});if(l)return;if(s==="options"){r.status(200).end();return}a=await this.#u(await this.#y({input:d,options:c,logger:o}))}catch(c){p=ye(c)}await this.#g({input:d,output:a,request:t,response:r,error:p,logger:o})}};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)=>_t(s,i),o)};import yo from"assert/strict";var ft=e=>(yo(!fe(e.input),new F("Using transformations on the top level of middleware input schema is not allowed.")),{...e,type:"proprietary"});import{z as N}from"zod";var yt=e=>e,we=yt({getPositiveResponse:e=>{let t=V({schema:e}),r=L(N.object({status:N.literal("success"),data:e}));return t.reduce((o,i)=>o.example({status:"success",data:i}),r)},getNegativeResponse:()=>L(N.object({status:N.literal("error"),error:N.object({message:N.string()})})).example({status:"error",error:{message:q(new Error("Sample error message"))}}),handler:({error:e,input:t,output:r,request:o,response:i,logger:s})=>{if(!e){i.status(me.positive).json({status:"success",data:r});return}let a=Fe(e);ct({logger:s,statusCode:a,request:o,error:e,input:t}),i.status(a).json({status:"error",error:{message:q(e)}})}}),gt=yt({getPositiveResponse:e=>{let t=V({schema:e}),r=L("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)=>typeof i=="object"&&i!==null&&"items"in i&&Array.isArray(i.items)?o.example(i.items):o,r)},getNegativeResponse:()=>L(N.string()).example(q(new Error("Sample error message"))),handler:({response:e,output:t,error:r,logger:o,request:i,input:s})=>{if(r){let a=Fe(r);ct({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(me.positive).json(t.items):e.status(500).send("Property 'items' is missing in the endpoint output")}});var Ee=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(ft({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]:[],T="tags"in p?p.tags:"tag"in p&&p.tag?[p.tag]:[];return new Ge({handler:r,middlewares:d,outputSchema:o,resultHandler:c,scopes:f,tags:T,methods:l,getOperationId:m,description:i,shortDescription:s,inputSchema:nr(d,t)})}},go=new Ee(we),ho=new Ee(gt);import{inspect as xo}from"util";var sr=e=>typeof e=="object"&&e!==null&&"level"in e&&("color"in e?typeof e.color=="boolean":!0)&&typeof e.level=="string"&&["silent","warn","debug"].includes(e.level),ht=({winston:{createLogger:e,transports:t,format:{printf:r,timestamp:o,colorize:i,combine:s},config:{npm:a}},...p})=>{let d=f=>{let{[Symbol.for("level")]:T,[Symbol.for("message")]:h,[Symbol.for("splat")]:O,...y}=f;return xo(y,!1,1,p.color)},c=f=>r(({timestamp:T,message:h,level:O,durationMs:y,...x})=>{typeof h=="object"&&(x={...x,...h},h="[No message]");let j=Object.keys(x).length>0,I=[];y&&I.push("duration:",`${y}ms`);let Y=f?d:JSON.stringify;if(j)I.push(Y(x));else{let R=x?.[Symbol.for("splat")];Array.isArray(R)&&I.push(...R.map(K=>typeof K=="object"?Y(K):K))}return[T,`${O}:`,h,...I].join(" ")}),l=[o()],m={handleExceptions:!0};switch(p.color&&l.push(i()),p.level){case"debug":m.level="debug",l.push(c(!0));break;case"silent":case"warn":default:m.level="warn",l.push(c())}return m.format=s(...l),e({silent:p.level==="silent",levels:a.levels,transports:[new t.Console(m)],exitOnError:!1})};var Ze=class{constructor(t){this.endpoints=t}};import To from"express";var ze=class{params;constructor(...t){this.params=t}apply(t,r){return r(t,To.static(...this.params))}};import ur from"express";import bo from"http";import So from"https";var ie=async(e,t="default")=>{try{return(await import(e))[t]}catch{}try{return await Promise.resolve().then(()=>qt(e)[t])}catch{}throw new ue(e)},ar=async e=>{for(let{moduleName:t,moduleExport:r}of e)try{return await ie(t,r)}catch{}throw new ue(e.map(({moduleName:t})=>t))};import pr from"assert/strict";var se=({routing:e,onEndpoint:t,onStatic:r,parentPath:o,hasCors:i})=>{Object.entries(e).forEach(([s,a])=>{s=s.trim(),pr.doesNotMatch(s,/\//,new le(`The entry '${s}' must avoid having slashes \u2014 use nesting instead.`));let p=`${o||""}${s?`/${s}`:""}`;if(a instanceof he){let d=a.getMethods().slice();i&&d.push("options"),d.forEach(c=>{t(a,p,c)})}else if(a instanceof ze)r&&a.apply(p,r);else if(a instanceof Ze){if(Object.entries(a.endpoints).forEach(([d,c])=>{pr(c.getMethods().includes(d),new le(`Endpoint assigned to ${d} method of ${p} must support ${d} method.`)),t(c,p,d)}),i&&Object.keys(a.endpoints).length>0){let[d,...c]=Object.keys(a.endpoints),l=a.endpoints[d];l._setSiblingMethods(c),t(l,p,"options")}}else se({onEndpoint:t,onStatic:r,hasCors:i,routing:a,parentPath:p})})};var dr=()=>`
6
6
  \x1B[94m8888888888 8888888888P 888 d8888 8888888b. 8888888 \x1B[39m
7
7
  \x1B[94m888 d88P 888 d88888 888 Y88b 888\x1B[39m
8
8
  \x1B[95m888 d88P 888 d88P888 888 888 888\x1B[39m
@@ -15,8 +15,8 @@ Original error: ${e.originalError.message}.`:""))};var Qt=e=>typeof e=="object"&
15
15
  \x1B[94m 888\x1B[3m Proudly supports transgender community.\x1B[23m\x1B[39m
16
16
  \x1B[94m\x1B[3mfor Nina \x1B[23m888\x1B[3m Start your API server with I/O schema validation and custom middlewares in minutes.\x1B[23m\x1B[39m
17
17
  \x1B[90m\x1B[3m Thank you for choosing Express Zod API for your project.\x1B[23m\x1B[39m
18
- `;var yt=({app:e,rootLogger:t,config:r,routing:o})=>{r.startupLogo!==!1&&console.log(ir()),t.debug("Running","v16.5.0 (ESM)"),se({routing:o,hasCors:!!r.cors,onEndpoint:(i,s,a)=>{e[a](s,async(p,d)=>{let c=r.childLoggerProvider?await r.childLoggerProvider({request:p,parent:t}):t;c.info(`${p.method}: ${s}`),await i.execute({request:p,response:d,logger:c,config:r})})},onStatic:(i,s)=>{e.use(i,s)}})};import sr from"http-errors";var ar=({errorHandler:e,rootLogger:t,getChildLogger:r})=>async(o,i,s,a)=>{if(!o)return a();e.handler({error:sr(400,fe(o).message),request:i,response:s,input:null,output:null,logger:r?await r({request:i,parent:t}):t})},pr=({errorHandler:e,getChildLogger:t,rootLogger:r})=>async(o,i)=>{let s=sr(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})}catch(p){Ve({response:i,logger:a,error:new ee(fe(p).message,s)})}};var cr=async e=>{let t=rr(e.logger)?ft({...e.logger,winston:await ie("winston")}):e.logger,r=e.errorHandler||we,{childLoggerProvider:o}=e,i={errorHandler:r,rootLogger:t,getChildLogger:o},s=pr(i),a=ar(i);return{rootLogger:t,errorHandler:r,notFoundHandler:s,parserFailureHandler:a}},co=async(e,t)=>{let{rootLogger:r,notFoundHandler:o}=await cr(e);return yt({app:e.app,routing:t,rootLogger:r,config:e}),{notFoundHandler:o,logger:r}},mo=async(e,t)=>{let r=dr().disable("x-powered-by");if(e.server.compression){let d=await ie("compression");r.use(d(typeof e.server.compression=="object"?e.server.compression:void 0))}if(r.use(e.server.jsonParser||dr.json()),e.server.upload){let d=await ie("express-fileupload");r.use(d({...typeof e.server.upload=="object"?e.server.upload:{},abortOnLimit:!1,parseNested:!0}))}e.server.rawParser&&(r.use(e.server.rawParser),r.use((d,{},c)=>{Buffer.isBuffer(d.body)&&(d.body={raw:d.body}),c()}));let{rootLogger:o,notFoundHandler:i,parserFailureHandler:s}=await cr(e);r.use(s),yt({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(ao.createServer(r),e.server.listen),httpsServer:e.https?a(po.createServer(e.https.options,r),e.https.listen):void 0};return{app:r,...p,logger:o}};import nn from"assert/strict";import{OpenApiBuilder as sn}from"openapi3-ts/oas31";import $ from"assert/strict";import{isReferenceObject as pe}from"openapi3-ts/oas31";import{concat as uo,mergeDeepRight as fo,mergeDeepWith as yo,omit as je,union as go}from"ramda";import{z as O}from"zod";import{z as mr}from"zod";var Me="DateIn",lr=()=>z(Me,mr.string().regex(ke).transform(e=>new Date(e)).pipe(mr.date().refine(Le)));import{z as lo}from"zod";var ve="DateOut",ur=()=>z(ve,lo.date().refine(Le).transform(e=>e.toISOString()));var ae=({schema:e,onEach:t,rules:r,onMissing:o,...i})=>{let s=Oe(e,"kind")||e._def.typeName,a=s?r[s]:void 0,p=i,c=a?a({schema:e,...p,next:m=>ae({...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 fr=50,gr="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString",ho={integer:0,number:0,string:"",boolean:!1,object:{},null:null,array:[]},hr=/:([A-Za-z0-9_]+)/g,xr=e=>{let t=e.match(hr);return t?t.map(r=>r.slice(1)):[]},Tr=e=>e.replace(hr,t=>`{${t.slice(1)}}`),xo=({schema:{_def:{innerType:e,defaultValue:t}},next:r})=>({...r({schema:e}),default:t()}),To=({schema:{_def:{innerType:e}},next:t})=>t({schema:e}),bo=()=>({format:"any"}),So=e=>($(!e.isResponse,new C({message:"Please use ez.upload() only for input.",...e})),{type:"string",format:"binary"}),Oo=({schema:e})=>({type:"string",format:e instanceof O.ZodString?e._def.checks.find(t=>t.kind==="regex")?"byte":"file":"binary"}),Ro=({schema:{options:e},next:t})=>({oneOf:e.map(r=>t({schema:r}))}),Ao=({schema:{options:e,discriminator:t},next:r})=>({discriminator:{propertyName:t},oneOf:Array.from(e.values()).map(o=>r({schema:o}))}),Po=e=>{let[t,r]=e.filter(i=>!pe(i)&&i.type==="object"&&Object.keys(i).every(s=>["type","properties","required","examples"].includes(s)));$(t&&r,"Can not flatten objects");let o={type:"object"};return(t.properties||r.properties)&&(o.properties=yo((i,s)=>Array.isArray(i)&&Array.isArray(s)?uo(i,s):i===s?s:$.fail("Can not flatten properties"),t.properties||{},r.properties||{})),(t.required||r.required)&&(o.required=go(t.required||[],r.required||[])),(t.examples||r.examples)&&(o.examples=te(t.examples||[],r.examples||[],([i,s])=>fo(i,s))),o},Co=({schema:{_def:{left:e,right:t}},next:r})=>{let o=[e,t].map(i=>r({schema:i}));try{return Po(o)}catch{}return{allOf:o}},Io=({schema:e,next:t})=>t({schema:e.unwrap()}),wo=({schema:e,next:t})=>t({schema:e._def.innerType}),Eo=({schema:e,next:t})=>{let r=t({schema:e.unwrap()});return pe(r)||(r.type=br(r)),r},yr=({schema:e})=>({type:typeof Object.values(e.enum)[0],enum:Object.values(e.enum)}),Zo=({schema:{value:e}})=>({type:typeof e,enum:[e]}),zo=({schema:e,isResponse:t,...r})=>{let o=Object.keys(e.shape).filter(s=>{let a=e.shape[s];return!(t&&Ie(a)?a instanceof O.ZodOptional:a.isOptional())}),i={type:"object",properties:We({schema:e,isResponse:t,...r})};return o.length&&(i.required=o),i},Mo=()=>({type:"null"}),vo=e=>($(!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:ke.source,externalDocs:{url:gr}}),No=e=>($(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:gr}}),jo=e=>$.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})),Do=()=>({type:"boolean"}),Lo=()=>({type:"integer",format:"bigint"}),ko=e=>e.reduce((t,r)=>t&&r instanceof O.ZodLiteral,!0),Ho=({schema:{keySchema:e,valueSchema:t},...r})=>{if(e instanceof O.ZodEnum||e instanceof O.ZodNativeEnum){let o=Object.values(e.enum),i=o.reduce((a,p)=>({...a,[p]:t}),{}),s={type:"object",properties:We({schema:O.object(i),...r})};return o.length&&(s.required=o),s}if(e instanceof O.ZodLiteral)return{type:"object",properties:We({schema:O.object({[e.value]:t}),...r}),required:[e.value]};if(e instanceof O.ZodUnion&&ko(e.options)){let o=e.options.reduce((i,s)=>({...i,[`${s.value}`]:t}),{});return{type:"object",properties:We({schema:O.object(o),...r}),required:e.options.map(i=>i.value)}}return{type:"object",additionalProperties:r.next({schema:t})}},Uo=({schema:{_def:e,element:t},next:r})=>{let o={type:"array",items:r({schema:t})};return e.minLength&&(o.minItems=e.minLength.value),e.maxLength&&(o.maxItems=e.maxLength.value),o},Ko=({schema:{items:e},next:t})=>({type:"array",prefixItems:e.map(o=>t({schema:o}))}),Fo=({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(x=>x.kind==="regex"),T=m.find(x=>x.kind==="datetime"),g=f?f.regex:T?T.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,S={type:"string"},y={"date-time":l,email:e,url:t,uuid:i,cuid:s,cuid2:a,ulid:p,ip:d,emoji:c};for(let x in y)if(y[x]){S.format=x;break}return r!==null&&(S.minLength=r),o!==null&&(S.maxLength=o),g&&(S.pattern=g.source),S},Bo=({schema:e})=>{let t=e._def.checks.find(({kind:d})=>d==="min"),r=e.minValue===null?e.isInt?Number.MIN_SAFE_INTEGER:Number.MIN_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},We=({schema:{shape:e},next:t})=>Object.keys(e).reduce((r,o)=>({...r,[o]:t({schema:e[o]})}),{}),qo=e=>{let t=Array.isArray(e.type)?e.type[0]:e.type;return ho?.[t]},br=e=>{let t=typeof e.type=="string"?[e.type]:e.type||[];return t.includes("null")?t:t.concat("null")},Vo=({schema:e,isResponse:t,next:r})=>{let o=r({schema:e.innerType()}),{effect:i}=e._def;if(t&&i.type==="transform"&&!pe(o)){let s=qe(e,qo(o));return s&&["number","string","boolean"].includes(s)?{type:s}:r({schema:O.any()})}if(!t&&i.type==="preprocess"&&!pe(o)){let{type:s,...a}=o;return{...a,format:`${a.format||s} (preprocessed)`}}return o},$o=({schema:e,isResponse:t,next:r})=>r({schema:e._def[t?"out":"in"]}),_o=({schema:e,next:t})=>t({schema:e.unwrap()}),Go=({next:e,schema:t,serializer:r,getRef:o,makeRef:i})=>{let s=r(t.schema);return o(s)||(i(s,{}),i(s,e({schema:t.schema})))},Wo=({next:e,schema:t})=>e({schema:t.shape.raw}),Sr=(e,t,r=[])=>{let o=V({schema:e,variant:t?"parsed":"original",validate:!0});if(o.length!==0)return o.reduce((i,s,a)=>({...i,[`example${a+1}`]:{value:typeof s=="object"&&!Array.isArray(s)?je(r,s):s}}),{})},Yo=(e,t,r)=>{let o=V({schema:e,variant:t?"parsed":"original",validate:!0});if(o.length!==0)return o.reduce((i,s,a)=>r in s?{...i,[`example${a+1}`]:{value:s[r]}}:i,{})},Ne=(e,t)=>e instanceof O.ZodObject?e:e instanceof O.ZodUnion||e instanceof O.ZodDiscriminatedUnion?Array.from(e.options.values()).map(r=>Ne(r,t)).reduce((r,o)=>r.merge(o.partial()),O.object({})):e instanceof O.ZodEffects?($(e._def.effect.type==="refinement",t),Ne(e._def.schema,t)):Ne(e._def.left,t).merge(Ne(e._def.right,t)),Or=({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}=Ne(r,new C({message:"Using transformations on the top level schema is not allowed.",path:e,method:t,isResponse:!1})),l=xr(e),m=o.includes("query"),f=o.includes("params"),T=o.includes("headers"),g=y=>f&&l.includes(y),S=y=>T&&st(y);return Object.keys(c).filter(y=>m||g(y)).map(y=>{let x=ae({schema:c[y],isResponse:!1,rules:ht,onEach:xt,onMissing:Tt,serializer:i,getRef:s,makeRef:a,path:e,method:t}),j=p==="components"?a(E(d,y),x):x;return{name:y,in:g(y)?"path":S(y)?"header":"query",required:!c[y].isOptional(),description:x.description||d,schema:j,examples:Yo(r,!1,y)}})},ht={ZodString:Fo,ZodNumber:Bo,ZodBigInt:Lo,ZodBoolean:Do,ZodNull:Mo,ZodArray:Uo,ZodTuple:Ko,ZodRecord:Ho,ZodObject:zo,ZodLiteral:Zo,ZodIntersection:Co,ZodUnion:Ro,ZodAny:bo,ZodDefault:xo,ZodEnum:yr,ZodNativeEnum:yr,ZodEffects:Vo,ZodOptional:Io,ZodNullable:Eo,ZodDiscriminatedUnion:Ao,ZodBranded:_o,ZodDate:jo,ZodCatch:To,ZodPipeline:$o,ZodLazy:Go,ZodReadonly:wo,[Pe]:Oo,[Ce]:So,[ve]:No,[Me]:vo,[re]:Wo},xt=({schema:e,isResponse:t,prev:r})=>{if(pe(r))return{};let{description:o}=e,i=e instanceof O.ZodLazy,s=r.type!==void 0,a=t&&Ie(e),p=!i&&s&&!a&&e.isNullable(),d=i?[]:V({schema:e,variant:t?"parsed":"original",validate:!0}),c={};return o&&(c.description=o),p&&(c.type=br(r)),d.length&&(c.examples=Array.from(d)),c},Tt=({schema:e,...t})=>$.fail(new C({message:`Zod type ${e.constructor.name} is unsupported.`,...t})),gt=(e,t)=>{if(pe(e))return e;let r=e.properties?je(t,e.properties):void 0,o=e.examples?e.examples.map(p=>je(t,p)):void 0,i=e.required?e.required.filter(p=>!t.includes(p)):void 0,s=e.allOf?e.allOf.map(p=>gt(p,t)):void 0,a=e.oneOf?e.oneOf.map(p=>gt(p,t)):void 0;return je(Object.entries({properties:r,required:i,examples:o,allOf:s,oneOf:a}).filter(([{},p])=>p===void 0).map(([p])=>p),{...e,properties:r,required:i,examples:o,allOf:s,oneOf:a})},Rr=e=>pe(e)?e:je(["examples"],e),Ar=({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} ${pt(i)} response ${c?l:""}`.trim()})=>{let f=Rr(ae({schema:r,isResponse:!0,rules:ht,onEach:xt,onMissing:Tt,serializer:s,getRef:a,makeRef:p,path:t,method:e})),T=Sr(r,!0),g=d==="components"?p(E(m),f):f;return{description:m,content:o.reduce((S,y)=>({...S,[y]:{schema:g,examples:T}}),{})}},Jo=()=>({type:"http",scheme:"basic"}),Qo=({format:e})=>{let t={type:"http",scheme:"bearer"};return e&&(t.bearerFormat=e),t},Xo=({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},en=({name:e})=>({type:"apiKey",in:"header",name:e}),tn=({name:e})=>({type:"apiKey",in:"cookie",name:e}),rn=({url:e})=>({type:"openIdConnect",openIdConnectUrl:e}),on=({flows:e={}})=>({type:"oauth2",flows:Object.keys(e).reduce((t,r)=>{let o=e[r];if(!o)return t;let{scopes:i={},...s}=o;return{...t,[r]:{...s,scopes:i}}},{})}),Pr=(e,t)=>{let r={basic:Jo,bearer:Qo,input:Xo,header:en,cookie:tn,openid:rn,oauth2:on};return _e(e,o=>r[o.type](o,t))},Ye=e=>{if(typeof e=="object"){if("or"in e)return e.or.map(t=>("and"in t?t.and:[t]).reduce((r,{name:o,scopes:i})=>({...r,[o]:i}),{}));if("and"in e)return Ye(dt(e))}return Ye({or:[e]})},Cr=({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=xr(t),l=Rr(gt(ae({schema:r,isResponse:!1,rules:ht,onEach:xt,onMissing:Tt,serializer:i,getRef:s,makeRef:a,path:t,method:e}),c)),m=Sr(r,!1,c),f=p==="components"?a(E(d),l):l;return{description:d,content:o.reduce((T,g)=>({...T,[g]:{schema:f,examples:m}}),{})}},Ir=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}),bt=e=>e.length<=fr?e:e.slice(0,fr-1)+"\u2026";var St=class extends sn{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 nn(!(o in this.lastOperationIdSuffixes),new C({message:`Duplicated operationId: "${o}"`,method:r,isResponse:!1,path:t})),this.lastOperationIdSuffixes[o]=1,o;let i=E(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=Be}){super(),this.addInfo({title:o,version:i});for(let m of typeof s=="string"?[s]:s)this.addServer({url:m});se({routing:t,onEndpoint:(m,f,T)=>{let g=T,S={path:f,method:g,endpoint:m,composition:d,serializer:c,getRef:this.getRef.bind(this),makeRef:this.makeRef.bind(this)},[y,x]=["short","long"].map(m.getDescription.bind(m)),j=r.inputSources?.[g]||Ke[g],I=this.ensureUniqOperationId(f,g,m.getOperationId(g)),Y=Or({...S,inputSources:j,schema:m.getSchema("input"),description:a?.requestParameter?.call(null,{method:g,path:f,operationId:I})}),R={operationId:I,responses:{}};for(let D of["positive","negative"]){let J=m.getResponses(D);for(let{mimeTypes:Te,schema:tt,statusCodes:b}of J)for(let A of b)R.responses[A]=Ar({...S,variant:D,schema:tt,mimeTypes:Te,statusCode:A,hasMultipleStatusCodes:J.length>1||b.length>1,description:a?.[`${D}Response`]?.call(null,{method:g,path:f,operationId:I,statusCode:A})})}x&&(R.description=x,p&&y===void 0&&(R.summary=bt(x))),y&&(R.summary=bt(y)),m.getTags().length>0&&(R.tags=m.getTags()),Y.length>0&&(R.parameters=Y),j.includes("body")&&(R.requestBody=Cr({...S,schema:m.getSchema("input"),mimeTypes:m.getMimeTypes("input"),description:a?.requestBody?.call(null,{method:g,path:f,operationId:I})}));let K=Ye(_e(Pr(m.getSecurity(),j),D=>{let J=this.ensureUniqSecuritySchemaName(D),Te=["oauth2","openIdConnect"].includes(D.type)?m.getScopes():[];return this.addSecurityScheme(J,D),{name:J,scopes:Te}}));K.length>0&&(R.security=K),this.addPath(Tr(f),{[g]:R})}}),this.rootDoc.tags=r.tags?Ir(r.tags):[]}};import wr from"http";var an=({fnMethod:e,requestProps:t})=>({method:"GET",header:e(()=>H),...t}),pn=({fnMethod:e,responseProps:t})=>{let r={writableEnded:!1,statusCode:200,statusMessage:wr.STATUS_CODES[200],set:e(()=>r),setHeader:e(()=>r),header:e(()=>r),status:e(o=>(r.statusCode=o,r.statusMessage=wr.STATUS_CODES[o],r)),json:e(()=>r),send:e(()=>r),end:e(()=>(r.writableEnded=!0,r)),...t};return r},dn=({fnMethod:e,loggerProps:t})=>({info:e(),warn:e(),error:e(),debug:e(),...t}),cn=async({endpoint:e,requestProps:t,responseProps:r,configProps:o,loggerProps:i,fnMethod:s})=>{let a=s||(await or([{moduleName:"vitest",moduleExport:"vi"},{moduleName:"@jest/globals",moduleExport:"jest"}])).fn,p=an({fnMethod:a,requestProps:t}),d=pn({fnMethod:a,responseProps:r}),c=dn({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 U from"typescript";var n=U.factory,_=[n.createModifier(U.SyntaxKind.ExportKeyword)],mn=[n.createModifier(U.SyntaxKind.AsyncKeyword)],ln=[n.createModifier(U.SyntaxKind.PublicKeyword),n.createModifier(U.SyntaxKind.ReadonlyKeyword)],Er=[n.createModifier(U.SyntaxKind.ProtectedKeyword),n.createModifier(U.SyntaxKind.ReadonlyKeyword)],Ot=n.createTemplateHead(""),he=n.createTemplateTail(""),Rt=n.createTemplateMiddle(" "),At=e=>n.createTemplateLiteralType(Ot,e.map((t,r)=>n.createTemplateLiteralTypeSpan(n.createTypeReferenceNode(t),r===e.length-1?he:Rt))),Pt=At(["M","P"]),Je=(e,t,r)=>n.createParameterDeclaration(r,void 0,e,void 0,t,void 0),Qe=(e,t)=>Object.keys(e).reduce((r,o)=>r.concat(Je(n.createIdentifier(o),e[o],t)),[]),Ct=(e,t)=>n.createExpressionWithTypeArguments(n.createIdentifier("Record"),[typeof e=="number"?n.createKeywordTypeNode(e):n.createTypeReferenceNode(e),n.createKeywordTypeNode(t)]),Zr=e=>n.createConstructorDeclaration(void 0,e,n.createBlock([])),zr=(e,t)=>n.createPropertySignature(void 0,`"${e}"`,void 0,n.createTypeReferenceNode(t)),G=(e,t,r)=>n.createVariableDeclarationList([n.createVariableDeclaration(e,void 0,r,t)],U.NodeFlags.Const),It=(e,t)=>n.createTypeAliasDeclaration(_,e,void 0,n.createUnionTypeNode(t.map(r=>n.createLiteralTypeNode(n.createStringLiteral(r))))),Xe=(e,t)=>n.createTypeAliasDeclaration(_,e,void 0,t),Mr=(e,t,r)=>n.createPropertyDeclaration(ln,e,void 0,t,r),vr=(e,t,r=[])=>n.createClassDeclaration(_,e,void 0,void 0,[t,...r]),Nr=(e,t)=>n.createTypeReferenceNode("Promise",[n.createIndexedAccessTypeNode(n.createTypeReferenceNode(e),t)]),jr=()=>n.createTypeReferenceNode("Promise",[n.createKeywordTypeNode(U.SyntaxKind.AnyKeyword)]),Dr=(e,t,r)=>n.createInterfaceDeclaration(_,e,void 0,t,r),Lr=e=>Object.keys(e).reduce((t,r)=>t.concat(n.createTypeParameterDeclaration([],r,n.createTypeReferenceNode(e[r]))),[]),wt=(e,t,r)=>n.createArrowFunction(r?mn:void 0,void 0,e.map(o=>Je(o)),void 0,void 0,t),Et=(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,Qe({acc:void 0,key:void 0}),void 0,void 0,t),r]);var kr=["get","post","put","delete","patch"];import h from"typescript";import{z as Mt}from"zod";import W from"typescript";var{factory:et}=W,Zt=(e,t)=>{W.addSyntheticLeadingComment(e,W.SyntaxKind.MultiLineCommentTrivia,`* ${t} `,!0)},xe=(e,t,r)=>{let o=et.createTypeAliasDeclaration(void 0,et.createIdentifier(t),void 0,e);return r&&Zt(o,r),o},zt=(e,t)=>{let r=W.createSourceFile("print.ts","",W.ScriptTarget.Latest,!1,W.ScriptKind.TS);return W.createPrinter(t).printNode(W.EmitHint.Unspecified,e,r)},un=/^[A-Za-z_$][A-Za-z0-9_$]*$/,Hr=e=>un.test(e)?et.createIdentifier(e):et.createStringLiteral(e);var{factory:u}=h,fn={[h.SyntaxKind.AnyKeyword]:"",[h.SyntaxKind.BigIntKeyword]:BigInt(0),[h.SyntaxKind.BooleanKeyword]:!1,[h.SyntaxKind.NumberKeyword]:0,[h.SyntaxKind.ObjectKeyword]:{},[h.SyntaxKind.StringKeyword]:"",[h.SyntaxKind.UndefinedKeyword]:void 0},yn=({schema:{value:e}})=>u.createLiteralTypeNode(typeof e=="number"?u.createNumericLiteral(e):typeof e=="boolean"?e?u.createTrue():u.createFalse():u.createStringLiteral(e)),gn=({schema:{shape:e},isResponse:t,next:r,optionalPropStyle:{withQuestionMark:o}})=>{let i=Object.entries(e).map(([s,a])=>{let p=t&&Ie(a)?a instanceof Mt.ZodOptional:a.isOptional(),d=u.createPropertySignature(void 0,Hr(s),p&&o?u.createToken(h.SyntaxKind.QuestionToken):void 0,r({schema:a}));return a.description&&Zt(d,a.description),d});return u.createTypeLiteralNode(i)},hn=({schema:{element:e},next:t})=>u.createArrayTypeNode(t({schema:e})),xn=({schema:{options:e}})=>u.createUnionTypeNode(e.map(t=>u.createLiteralTypeNode(u.createStringLiteral(t)))),Ur=({schema:{options:e},next:t})=>u.createUnionTypeNode(e.map(r=>t({schema:r}))),Tn=e=>fn?.[e.kind],bn=({schema:e,next:t,isResponse:r})=>{let o=t({schema:e.innerType()}),i=e._def.effect;if(r&&i.type==="transform"){let s=qe(e,Tn(o)),a={number:h.SyntaxKind.NumberKeyword,bigint:h.SyntaxKind.BigIntKeyword,boolean:h.SyntaxKind.BooleanKeyword,string:h.SyntaxKind.StringKeyword,undefined:h.SyntaxKind.UndefinedKeyword,object:h.SyntaxKind.ObjectKeyword};return u.createKeywordTypeNode(s&&a[s]||h.SyntaxKind.AnyKeyword)}return o},Sn=({schema:e})=>u.createUnionTypeNode(Object.values(e.enum).map(t=>u.createLiteralTypeNode(typeof t=="number"?u.createNumericLiteral(t):u.createStringLiteral(t)))),On=({next:e,schema:t,optionalPropStyle:{withUndefined:r}})=>{let o=e({schema:t.unwrap()});return r?u.createUnionTypeNode([o,u.createKeywordTypeNode(h.SyntaxKind.UndefinedKeyword)]):o},Rn=({next:e,schema:t})=>u.createUnionTypeNode([e({schema:t.unwrap()}),u.createLiteralTypeNode(u.createNull())]),An=({next:e,schema:{items:t}})=>u.createTupleTypeNode(t.map(r=>e({schema:r}))),Pn=({next:e,schema:{keySchema:t,valueSchema:r}})=>u.createExpressionWithTypeArguments(u.createIdentifier("Record"),[e({schema:t}),e({schema:r})]),Cn=({next:e,schema:t})=>u.createIntersectionTypeNode([t._def.left,t._def.right].map(r=>e({schema:r}))),In=({next:e,schema:t})=>e({schema:t._def.innerType}),de=e=>()=>u.createKeywordTypeNode(e),wn=({next:e,schema:t})=>e({schema:t.unwrap()}),En=({next:e,schema:t})=>e({schema:t._def.innerType}),Zn=({next:e,schema:t})=>e({schema:t._def.innerType}),zn=({schema:e,next:t,isResponse:r})=>t({schema:e._def[r?"out":"in"]}),Mn=()=>u.createLiteralTypeNode(u.createNull()),vn=({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({schema:i.schema})))},Nn=({schema:e})=>{let t=u.createKeywordTypeNode(h.SyntaxKind.StringKeyword),r=u.createTypeReferenceNode("Buffer"),o=u.createUnionTypeNode([t,r]);return e instanceof Mt.ZodString?t:e instanceof Mt.ZodUnion?o:r},jn=({next:e,schema:t})=>e({schema:t.shape.raw}),Dn={ZodString:de(h.SyntaxKind.StringKeyword),ZodNumber:de(h.SyntaxKind.NumberKeyword),ZodBigInt:de(h.SyntaxKind.BigIntKeyword),ZodBoolean:de(h.SyntaxKind.BooleanKeyword),ZodAny:de(h.SyntaxKind.AnyKeyword),[Me]:de(h.SyntaxKind.StringKeyword),[ve]:de(h.SyntaxKind.StringKeyword),ZodNull:Mn,ZodArray:hn,ZodTuple:An,ZodRecord:Pn,ZodObject:gn,ZodLiteral:yn,ZodIntersection:Cn,ZodUnion:Ur,ZodDefault:In,ZodEnum:xn,ZodNativeEnum:Sn,ZodEffects:bn,ZodOptional:On,ZodNullable:Rn,ZodDiscriminatedUnion:Ur,ZodBranded:wn,ZodCatch:Zn,ZodPipeline:zn,ZodLazy:vn,ZodReadonly:En,[Pe]:Nn,[re]:jn},De=({schema:e,...t})=>ae({schema:e,rules:Dn,onMissing:()=>u.createKeywordTypeNode(h.SyntaxKind.AnyKeyword),...t});var vt=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]=xe(r,t),this.getAlias(t)}constructor({routing:t,variant:r="client",serializer:o=Be,splitResponse:i=!1,optionalPropStyle:s={withQuestionMark:!0,withUndefined:!0}}){se({routing:t,onEndpoint:(b,A,w)=>{let Q={serializer:o,getAlias:this.getAlias.bind(this),makeAlias:this.makeAlias.bind(this),optionalPropStyle:s},Nt=E(w,A,"input"),Kr=De({...Q,schema:b.getSchema("input"),isResponse:!1}),be=i?E(w,A,"positive.response"):void 0,jt=b.getSchema("positive"),Dt=i?De({...Q,isResponse:!0,schema:jt}):void 0,Se=i?E(w,A,"negative.response"):void 0,Lt=b.getSchema("negative"),kt=i?De({...Q,isResponse:!0,schema:Lt}):void 0,Ht=E(w,A,"response"),Fr=be&&Se?n.createUnionTypeNode([n.createTypeReferenceNode(be),n.createTypeReferenceNode(Se)]):De({...Q,isResponse:!0,schema:jt.or(Lt)});this.program.push(xe(Kr,Nt)),Dt&&be&&this.program.push(xe(Dt,be)),kt&&Se&&this.program.push(xe(kt,Se)),this.program.push(xe(Fr,Ht)),w!=="options"&&(this.paths.push(A),this.registry[`${w} ${A}`]={input:Nt,positive:be,negative:Se,response:Ht,isJson:b.getMimeTypes("positive").includes(H),tags:b.getTags()})}}),this.program.unshift(...Object.values(this.aliases)),this.program.push(It(this.ids.pathType,this.paths)),this.program.push(It(this.ids.methodType,kr)),this.program.push(Xe(this.ids.methodPathType,At([this.ids.methodType,this.ids.pathType])));let a=[n.createHeritageClause(Z.SyntaxKind.ExtendsKeyword,[Ct(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:b,kind:A}of this.interfaces)this.program.push(Dr(b,a,Object.keys(this.registry).map(w=>{let Q=this.registry[w][A];return Q?zr(w,Q):void 0}).filter(w=>w!==void 0)));if(r==="types")return;let p=n.createVariableStatement(_,G(this.ids.jsonEndpointsConst,n.createObjectLiteralExpression(Object.keys(this.registry).filter(b=>this.registry[b].isJson).map(b=>n.createPropertyAssignment(`"${b}"`,n.createTrue()))))),d=n.createVariableStatement(_,G(this.ids.endpointTagsConst,n.createObjectLiteralExpression(Object.keys(this.registry).map(b=>n.createPropertyAssignment(`"${b}"`,n.createArrayLiteralExpression(this.registry[b].tags.map(A=>n.createStringLiteral(A)))))))),c=Xe(this.ids.providerType,n.createFunctionTypeNode(Lr({M:this.ids.methodType,P:this.ids.pathType}),Qe({method:n.createTypeReferenceNode("M"),path:n.createTypeReferenceNode("P"),params:n.createIndexedAccessTypeNode(n.createTypeReferenceNode(this.ids.inputInterface),Pt)}),Nr(this.ids.responseInterface,Pt))),l=Xe(this.ids.implementationType,n.createFunctionTypeNode(void 0,Qe({method:n.createTypeReferenceNode(this.ids.methodType),path:n.createKeywordTypeNode(Z.SyntaxKind.StringKeyword),params:Ct(Z.SyntaxKind.StringKeyword,Z.SyntaxKind.AnyKeyword)}),jr())),m=n.createTemplateExpression(n.createTemplateHead(":"),[n.createTemplateSpan(this.ids.keyParameter,he)]),f=Et(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),T=Et(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()),g=vr(this.ids.clientClass,Zr([Je(this.ids.implementationArgument,n.createTypeReferenceNode(this.ids.implementationType),Er)]),[Mr(this.ids.provideMethod,n.createTypeReferenceNode(this.ids.providerType),wt([this.ids.methodParameter,this.ids.pathParameter,this.ids.paramsArgument],n.createCallExpression(n.createPropertyAccessExpression(n.createThis(),this.ids.implementationArgument),void 0,[this.ids.methodParameter,f,T]),!0))]);this.program.push(p,d,c,l,g);let S=n.createPropertyAssignment(this.ids.methodParameter,n.createCallExpression(n.createPropertyAccessExpression(this.ids.methodParameter,"toUpperCase"),void 0,void 0)),y=n.createPropertyAssignment(this.ids.headersProperty,n.createConditionalExpression(this.ids.hasBodyConst,void 0,n.createObjectLiteralExpression([n.createPropertyAssignment(n.createStringLiteral("Content-Type"),n.createStringLiteral(H))]),void 0,this.ids.undefinedValue)),x=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)),j=n.createVariableStatement(void 0,G(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,he)]),n.createObjectLiteralExpression([S,y,x])])))),I=n.createVariableStatement(void 0,G(this.ids.hasBodyConst,n.createLogicalNot(n.createCallExpression(n.createPropertyAccessExpression(n.createArrayLiteralExpression([n.createStringLiteral("get"),n.createStringLiteral("delete")]),"includes"),void 0,[this.ids.methodParameter])))),Y=n.createVariableStatement(void 0,G(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]),he)])))),[R,K]=["json","text"].map(b=>n.createReturnStatement(n.createCallExpression(n.createPropertyAccessExpression(this.ids.responseConst,b),void 0,void 0))),D=n.createIfStatement(n.createBinaryExpression(n.createTemplateExpression(Ot,[n.createTemplateSpan(this.ids.methodParameter,Rt),n.createTemplateSpan(this.ids.pathParameter,he)]),Z.SyntaxKind.InKeyword,this.ids.jsonEndpointsConst),n.createBlock([R])),J=n.createVariableStatement(_,G(this.ids.exampleImplementationConst,wt([this.ids.methodParameter,this.ids.pathParameter,this.ids.paramsArgument],n.createBlock([I,Y,j,D,K]),!0),n.createTypeReferenceNode(this.ids.implementationType))),Te=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"))])])),tt=n.createVariableStatement(void 0,G(this.ids.clientConst,n.createNewExpression(this.ids.clientClass,void 0,[this.ids.exampleImplementationConst])));this.usage.push(J,tt,Te)}printUsage(t){return this.usage.length?this.usage.map(r=>typeof r=="string"?r:zt(r,t)).join(`
18
+ `;var xt=({app:e,rootLogger:t,config:r,routing:o})=>{r.startupLogo!==!1&&console.log(dr()),t.debug("Running","v16.5.2 (ESM)"),se({routing:o,hasCors:!!r.cors,onEndpoint:(i,s,a)=>{e[a](s,async(p,d)=>{let c=r.childLoggerProvider?await r.childLoggerProvider({request:p,parent:t}):t;c.info(`${p.method}: ${s}`),await i.execute({request:p,response:d,logger:c,config:r})})},onStatic:(i,s)=>{e.use(i,s)}})};import cr from"http-errors";var mr=({errorHandler:e,rootLogger:t,getChildLogger:r})=>async(o,i,s,a)=>{if(!o)return a();e.handler({error:cr(400,ye(o).message),request:i,response:s,input:null,output:null,logger:r?await r({request:i,parent:t}):t})},lr=({errorHandler:e,getChildLogger:t,rootLogger:r})=>async(o,i)=>{let s=cr(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})}catch(p){Ve({response:i,logger:a,error:new ee(ye(p).message,s)})}};var fr=async e=>{let t=sr(e.logger)?ht({...e.logger,winston:await ie("winston")}):e.logger,r=e.errorHandler||we,{childLoggerProvider:o}=e,i={errorHandler:r,rootLogger:t,getChildLogger:o},s=lr(i),a=mr(i);return{rootLogger:t,errorHandler:r,notFoundHandler:s,parserFailureHandler:a}},Oo=async(e,t)=>{let{rootLogger:r,notFoundHandler:o}=await fr(e);return xt({app:e.app,routing:t,rootLogger:r,config:e}),{notFoundHandler:o,logger:r}},Ro=async(e,t)=>{let r=ur().disable("x-powered-by");if(e.server.compression){let d=await ie("compression");r.use(d(typeof e.server.compression=="object"?e.server.compression:void 0))}if(r.use(e.server.jsonParser||ur.json()),e.server.upload){let d=await ie("express-fileupload");r.use(d({...typeof e.server.upload=="object"?e.server.upload:{},abortOnLimit:!1,parseNested:!0}))}e.server.rawParser&&(r.use(e.server.rawParser),r.use((d,{},c)=>{Buffer.isBuffer(d.body)&&(d.body={raw:d.body}),c()}));let{rootLogger:o,notFoundHandler:i,parserFailureHandler:s}=await fr(e);r.use(s),xt({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(So.createServer(e.https.options,r),e.https.listen):void 0};return{app:r,...p,logger:o}};import An from"assert/strict";import{OpenApiBuilder as Pn}from"openapi3-ts/oas31";import $ from"assert/strict";import{isReferenceObject as pe}from"openapi3-ts/oas31";import{concat as Po,filter as Co,fromPairs as Ye,has as Io,isNil as wo,map as de,mergeAll as Eo,mergeDeepRight as Zo,mergeDeepWith as zo,objOf as bt,omit as je,pipe as br,pluck as Mo,range as Sr,reject as vo,union as No,when as jo,xprod as Je,zipObj as Or}from"ramda";import{z as S}from"zod";import{z as yr}from"zod";var Me="DateIn",gr=()=>z(Me,yr.string().regex(He).transform(e=>new Date(e)).pipe(yr.date().refine(Le)));import{z as Ao}from"zod";var ve="DateOut",hr=()=>z(ve,Ao.date().refine(Le).transform(e=>e.toISOString()));var ae=({schema:e,onEach:t,rules:r,onMissing:o,...i})=>{let s=Re(e,"kind")||e._def.typeName,a=s?r[s]:void 0,p=i,c=a?a({schema:e,...p,next:m=>ae({...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,Rr="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString",Do={integer:0,number:0,string:"",boolean:!1,object:{},null:null,array:[]},Ar=/:([A-Za-z0-9_]+)/g,Pr=e=>{let t=e.match(Ar);return t?t.map(r=>r.slice(1)):[]},Cr=e=>e.replace(Ar,t=>`{${t.slice(1)}}`),ko=({schema:{_def:{innerType:e,defaultValue:t}},next:r})=>({...r({schema:e}),default:t()}),Lo=({schema:{_def:{innerType:e}},next:t})=>t({schema:e}),Ho=()=>({format:"any"}),Uo=e=>($(!e.isResponse,new C({message:"Please use ez.upload() only for input.",...e})),{type:"string",format:"binary"}),Ko=({schema:e})=>({type:"string",format:e instanceof S.ZodString?e._def.checks.find(t=>t.kind==="regex")?"byte":"file":"binary"}),Fo=({schema:{options:e},next:t})=>({oneOf:e.map(r=>t({schema:r}))}),Bo=({schema:{options:e,discriminator:t},next:r})=>({discriminator:{propertyName:t},oneOf:Array.from(e.values()).map(o=>r({schema:o}))}),qo=e=>{let[t,r]=e.filter(i=>!pe(i)&&i.type==="object"&&Object.keys(i).every(s=>["type","properties","required","examples"].includes(s)));$(t&&r,"Can not flatten objects");let o={type:"object"};return(t.properties||r.properties)&&(o.properties=zo((i,s)=>Array.isArray(i)&&Array.isArray(s)?Po(i,s):i===s?s:$.fail("Can not flatten properties"),t.properties||{},r.properties||{})),(t.required||r.required)&&(o.required=No(t.required||[],r.required||[])),(t.examples||r.examples)&&(o.examples=te(t.examples||[],r.examples||[],([i,s])=>Zo(i,s))),o},Vo=({schema:{_def:{left:e,right:t}},next:r})=>{let o=[e,t].map(i=>r({schema:i}));try{return qo(o)}catch{}return{allOf:o}},$o=({schema:e,next:t})=>t({schema:e.unwrap()}),_o=({schema:e,next:t})=>t({schema:e._def.innerType}),Go=({schema:e,next:t})=>{let r=t({schema:e.unwrap()});return pe(r)||(r.type=Ir(r)),r},Tr=({schema:e})=>({type:typeof Object.values(e.enum)[0],enum:Object.values(e.enum)}),Wo=({schema:{value:e}})=>({type:typeof e,enum:[e]}),Yo=({schema:e,isResponse:t,...r})=>{let o=Object.keys(e.shape),i=p=>t&&Ie(p)?p instanceof S.ZodOptional:p.isOptional(),s=o.filter(p=>!i(e.shape[p])),a={type:"object"};return o.length&&(a.properties=We({schema:e,isResponse:t,...r})),s.length&&(a.required=s),a},Jo=()=>({type:"null"}),Qo=e=>($(!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:He.source,externalDocs:{url:Rr}}),Xo=e=>($(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:Rr}}),en=e=>$.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})),tn=()=>({type:"boolean"}),rn=()=>({type:"integer",format:"bigint"}),on=e=>e.every(t=>t instanceof S.ZodLiteral),nn=({schema:{keySchema:e,valueSchema:t},...r})=>{if(e instanceof S.ZodEnum||e instanceof S.ZodNativeEnum){let o=Object.values(e.enum),i={type:"object"};return o.length&&(i.properties=We({schema:S.object(Ye(Je(o,[t]))),...r}),i.required=o),i}if(e instanceof S.ZodLiteral)return{type:"object",properties:We({schema:S.object({[e.value]:t}),...r}),required:[e.value]};if(e instanceof S.ZodUnion&&on(e.options)){let o=de(s=>`${s.value}`,e.options),i=Ye(Je(o,[t]));return{type:"object",properties:We({schema:S.object(i),...r}),required:o}}return{type:"object",additionalProperties:r.next({schema:t})}},sn=({schema:{_def:e,element:t},next:r})=>{let o={type:"array",items:r({schema:t})};return e.minLength&&(o.minItems=e.minLength.value),e.maxLength&&(o.maxItems=e.maxLength.value),o},an=({schema:{items:e},next:t})=>({type:"array",prefixItems:e.map(o=>t({schema:o}))}),pn=({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(x=>x.kind==="regex"),T=m.find(x=>x.kind==="datetime"),h=f?f.regex:T?T.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,O={type:"string"},y={"date-time":l,email:e,url:t,uuid:i,cuid:s,cuid2:a,ulid:p,ip:d,emoji:c};for(let x in y)if(y[x]){O.format=x;break}return r!==null&&(O.minLength=r),o!==null&&(O.maxLength=o),h&&(O.pattern=h.source),O},dn=({schema:e})=>{let t=e._def.checks.find(({kind:d})=>d==="min"),r=e.minValue===null?e.isInt?Number.MIN_SAFE_INTEGER:Number.MIN_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},We=({schema:{shape:e},next:t})=>de(r=>t({schema:r}),e),cn=e=>{let t=Array.isArray(e.type)?e.type[0]:e.type;return Do?.[t]},Ir=e=>{let t=typeof e.type=="string"?[e.type]:e.type||[];return t.includes("null")?t:t.concat("null")},mn=({schema:e,isResponse:t,next:r})=>{let o=r({schema:e.innerType()}),{effect:i}=e._def;if(t&&i.type==="transform"&&!pe(o)){let s=qe(e,cn(o));return s&&["number","string","boolean"].includes(s)?{type:s}:r({schema:S.any()})}if(!t&&i.type==="preprocess"&&!pe(o)){let{type:s,...a}=o;return{...a,format:`${a.format||s} (preprocessed)`}}return o},ln=({schema:e,isResponse:t,next:r})=>r({schema:e._def[t?"out":"in"]}),un=({schema:e,next:t})=>t({schema:e.unwrap()}),fn=({next:e,schema:t,serializer:r,getRef:o,makeRef:i})=>{let s=r(t.schema);return o(s)||(i(s,{}),i(s,e({schema:t.schema})))},yn=({next:e,schema:t})=>e({schema:t.shape.raw}),wr=(e,t,r=[])=>{let o=br(V,de(jo(i=>S.object({}).safeParse(i).success,je(r))),de(bt("value")))({schema:e,variant:t?"parsed":"original",validate:!0});if(o.length!==0)return Or(Sr(1,o.length+1).map(i=>`example${i}`),o)},gn=(e,t,r)=>{let o=br(V,Co(Io(r)),Mo(r),de(bt("value")))({schema:e,variant:t?"parsed":"original",validate:!0});if(o.length!==0)return Or(Sr(1,o.length+1).map(i=>`example${i}`),o)},Ne=(e,t)=>e instanceof S.ZodObject?e:e instanceof S.ZodUnion||e instanceof S.ZodDiscriminatedUnion?Array.from(e.options.values()).map(r=>Ne(r,t)).reduce((r,o)=>r.merge(o.partial()),S.object({})):e instanceof S.ZodEffects?($(e._def.effect.type==="refinement",t),Ne(e._def.schema,t)):Ne(e._def.left,t).merge(Ne(e._def.right,t)),Er=({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}=Ne(r,new C({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"),T=o.includes("headers"),h=y=>f&&l.includes(y),O=y=>T&&dt(y);return Object.keys(c).filter(y=>m||h(y)).map(y=>{let x=ae({schema:c[y],isResponse:!1,rules:St,onEach:Ot,onMissing:Rt,serializer:i,getRef:s,makeRef:a,path:e,method:t}),j=p==="components"?a(E(d,y),x):x;return{name:y,in:h(y)?"path":O(y)?"header":"query",required:!c[y].isOptional(),description:x.description||d,schema:j,examples:gn(r,!1,y)}})},St={ZodString:pn,ZodNumber:dn,ZodBigInt:rn,ZodBoolean:tn,ZodNull:Jo,ZodArray:sn,ZodTuple:an,ZodRecord:nn,ZodObject:Yo,ZodLiteral:Wo,ZodIntersection:Vo,ZodUnion:Fo,ZodAny:Ho,ZodDefault:ko,ZodEnum:Tr,ZodNativeEnum:Tr,ZodEffects:mn,ZodOptional:$o,ZodNullable:Go,ZodDiscriminatedUnion:Bo,ZodBranded:un,ZodDate:en,ZodCatch:Lo,ZodPipeline:ln,ZodLazy:fn,ZodReadonly:_o,[Pe]:Ko,[Ce]:Uo,[ve]:Xo,[Me]:Qo,[re]:yn},Ot=({schema:e,isResponse:t,prev:r})=>{if(pe(r))return{};let{description:o}=e,i=e instanceof S.ZodLazy,s=r.type!==void 0,a=t&&Ie(e),p=!i&&s&&!a&&e.isNullable(),d=i?[]:V({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})=>$.fail(new C({message:`Zod type ${e.constructor.name} is unsupported.`,...t})),Tt=(e,t)=>{if(pe(e))return e;let r=e.properties?je(t,e.properties):void 0,o=e.examples?e.examples.map(p=>je(t,p)):void 0,i=e.required?e.required.filter(p=>!t.includes(p)):void 0,s=e.allOf?e.allOf.map(p=>Tt(p,t)):void 0,a=e.oneOf?e.oneOf.map(p=>Tt(p,t)):void 0;return je(Object.entries({properties:r,required:i,examples:o,allOf:s,oneOf:a}).filter(([{},p])=>p===void 0).map(([p])=>p),{...e,properties:r,required:i,examples:o,allOf:s,oneOf:a})},Zr=e=>pe(e)?e:je(["examples"],e),zr=({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} ${mt(i)} response ${c?l:""}`.trim()})=>{let f=Zr(ae({schema:r,isResponse:!0,rules:St,onEach:Ot,onMissing:Rt,serializer:s,getRef:a,makeRef:p,path:t,method:e})),T={schema:d==="components"?p(E(m),f):f,examples:wr(r,!0)};return{description:m,content:Ye(Je(o,[T]))}},hn=()=>({type:"http",scheme:"basic"}),xn=({format:e})=>{let t={type:"http",scheme:"bearer"};return e&&(t.bearerFormat=e),t},Tn=({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},bn=({name:e})=>({type:"apiKey",in:"header",name:e}),Sn=({name:e})=>({type:"apiKey",in:"cookie",name:e}),On=({url:e})=>({type:"openIdConnect",openIdConnectUrl:e}),Rn=({flows:e={}})=>({type:"oauth2",flows:de(t=>({...t,scopes:t.scopes||{}}),vo(wo,e))}),Mr=(e,t)=>{let r={basic:hn,bearer:xn,input:Tn,header:bn,cookie:Sn,openid:On,oauth2:Rn};return _e(e,o=>r[o.type](o,t))},Qe=e=>"or"in e?e.or.map(t=>"and"in t?Eo(de(({name:r,scopes:o})=>bt(r,o),t.and)):{[t.name]:t.scopes}):"and"in e?Qe(lt(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=Pr(t),l=Zr(Tt(ae({schema:r,isResponse:!1,rules:St,onEach:Ot,onMissing:Rt,serializer:i,getRef:s,makeRef:a,path:t,method:e}),c)),m={schema:p==="components"?a(E(d),l):l,examples:wr(r,!1,c)};return{description:d,content:Ye(Je(o,[m]))}},Nr=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}),At=e=>e.length<=xr?e:e.slice(0,xr-1)+"\u2026";var Pt=class extends Pn{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 An(!(o in this.lastOperationIdSuffixes),new C({message:`Duplicated operationId: "${o}"`,method:r,isResponse:!1,path:t})),this.lastOperationIdSuffixes[o]=1,o;let i=E(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=Be}){super(),this.addInfo({title:o,version:i});for(let m of typeof s=="string"?[s]:s)this.addServer({url:m});se({routing:t,onEndpoint:(m,f,T)=>{let h=T,O={path:f,method:h,endpoint:m,composition:d,serializer:c,getRef:this.getRef.bind(this),makeRef:this.makeRef.bind(this)},[y,x]=["short","long"].map(m.getDescription.bind(m)),j=r.inputSources?.[h]||at[h],I=this.ensureUniqOperationId(f,h,m.getOperationId(h)),Y=Er({...O,inputSources:j,schema:m.getSchema("input"),description:a?.requestParameter?.call(null,{method:h,path:f,operationId:I})}),R={operationId:I,responses:{}};for(let D of["positive","negative"]){let J=m.getResponses(D);for(let{mimeTypes:be,schema:ot,statusCodes:b}of J)for(let A of b)R.responses[A]=zr({...O,variant:D,schema:ot,mimeTypes:be,statusCode:A,hasMultipleStatusCodes:J.length>1||b.length>1,description:a?.[`${D}Response`]?.call(null,{method:h,path:f,operationId:I,statusCode:A})})}x&&(R.description=x,p&&y===void 0&&(R.summary=At(x))),y&&(R.summary=At(y)),m.getTags().length>0&&(R.tags=m.getTags()),Y.length>0&&(R.parameters=Y),j.includes("body")&&(R.requestBody=vr({...O,schema:m.getSchema("input"),mimeTypes:m.getMimeTypes("input"),description:a?.requestBody?.call(null,{method:h,path:f,operationId:I})}));let K=Qe(_e(Mr(m.getSecurity(),j),D=>{let J=this.ensureUniqSecuritySchemaName(D),be=["oauth2","openIdConnect"].includes(D.type)?m.getScopes():[];return this.addSecurityScheme(J,D),{name:J,scopes:be}}));K.length>0&&(R.security=K),this.addPath(Cr(f),{[h]:R})}}),this.rootDoc.tags=r.tags?Nr(r.tags):[]}};import jr from"http";var Cn=({fnMethod:e,requestProps:t})=>({method:"GET",header:e(()=>H),...t}),In=({fnMethod:e,responseProps:t})=>{let r={writableEnded:!1,statusCode:200,statusMessage:jr.STATUS_CODES[200],set:e(()=>r),setHeader:e(()=>r),header:e(()=>r),status:e(o=>(r.statusCode=o,r.statusMessage=jr.STATUS_CODES[o],r)),json:e(()=>r),send:e(()=>r),end:e(()=>(r.writableEnded=!0,r)),...t};return r},wn=({fnMethod:e,loggerProps:t})=>({info:e(),warn:e(),error:e(),debug:e(),...t}),En=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=Cn({fnMethod:a,requestProps:t}),d=In({fnMethod:a,responseProps:r}),c=wn({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 U from"typescript";import{chain as Dr,toPairs as kr}from"ramda";var n=U.factory,_=[n.createModifier(U.SyntaxKind.ExportKeyword)],Zn=[n.createModifier(U.SyntaxKind.AsyncKeyword)],zn=[n.createModifier(U.SyntaxKind.PublicKeyword),n.createModifier(U.SyntaxKind.ReadonlyKeyword)],Lr=[n.createModifier(U.SyntaxKind.ProtectedKeyword),n.createModifier(U.SyntaxKind.ReadonlyKeyword)],Ct=n.createTemplateHead(""),xe=n.createTemplateTail(""),It=n.createTemplateMiddle(" "),wt=e=>n.createTemplateLiteralType(Ct,e.map((t,r)=>n.createTemplateLiteralTypeSpan(n.createTypeReferenceNode(t),r===e.length-1?xe:It))),Et=wt(["M","P"]),Xe=(e,t,r)=>n.createParameterDeclaration(r,void 0,e,void 0,t,void 0),et=(e,t)=>Dr(([r,o])=>[Xe(n.createIdentifier(r),o,t)],kr(e)),Zt=(e,t)=>n.createExpressionWithTypeArguments(n.createIdentifier("Record"),[typeof e=="number"?n.createKeywordTypeNode(e):n.createTypeReferenceNode(e),n.createKeywordTypeNode(t)]),Hr=e=>n.createConstructorDeclaration(void 0,e,n.createBlock([])),Ur=(e,t)=>n.createPropertySignature(void 0,`"${e}"`,void 0,n.createTypeReferenceNode(t)),G=(e,t,r)=>n.createVariableDeclarationList([n.createVariableDeclaration(e,void 0,r,t)],U.NodeFlags.Const),zt=(e,t)=>n.createTypeAliasDeclaration(_,e,void 0,n.createUnionTypeNode(t.map(r=>n.createLiteralTypeNode(n.createStringLiteral(r))))),tt=(e,t)=>n.createTypeAliasDeclaration(_,e,void 0,t),Kr=(e,t,r)=>n.createPropertyDeclaration(zn,e,void 0,t,r),Fr=(e,t,r=[])=>n.createClassDeclaration(_,e,void 0,void 0,[t,...r]),Br=(e,t)=>n.createTypeReferenceNode("Promise",[n.createIndexedAccessTypeNode(n.createTypeReferenceNode(e),t)]),qr=()=>n.createTypeReferenceNode("Promise",[n.createKeywordTypeNode(U.SyntaxKind.AnyKeyword)]),Vr=(e,t,r)=>n.createInterfaceDeclaration(_,e,void 0,t,r),$r=e=>Dr(([t,r])=>[n.createTypeParameterDeclaration([],t,n.createTypeReferenceNode(r))],kr(e)),Mt=(e,t,r)=>n.createArrowFunction(r?Zn: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 _r=["get","post","put","delete","patch"];import g from"typescript";import{z as Dt}from"zod";import W from"typescript";var{factory:rt}=W,Nt=(e,t)=>{W.addSyntheticLeadingComment(e,W.SyntaxKind.MultiLineCommentTrivia,`* ${t} `,!0)},Te=(e,t,r)=>{let o=rt.createTypeAliasDeclaration(void 0,rt.createIdentifier(t),void 0,e);return r&&Nt(o,r),o},jt=(e,t)=>{let r=W.createSourceFile("print.ts","",W.ScriptTarget.Latest,!1,W.ScriptKind.TS);return W.createPrinter(t).printNode(W.EmitHint.Unspecified,e,r)},Mn=/^[A-Za-z_$][A-Za-z0-9_$]*$/,Gr=e=>Mn.test(e)?rt.createIdentifier(e):rt.createStringLiteral(e);var{factory:u}=g,vn={[g.SyntaxKind.AnyKeyword]:"",[g.SyntaxKind.BigIntKeyword]:BigInt(0),[g.SyntaxKind.BooleanKeyword]:!1,[g.SyntaxKind.NumberKeyword]:0,[g.SyntaxKind.ObjectKeyword]:{},[g.SyntaxKind.StringKeyword]:"",[g.SyntaxKind.UndefinedKeyword]:void 0},Nn=({schema:{value:e}})=>u.createLiteralTypeNode(typeof e=="number"?u.createNumericLiteral(e):typeof e=="boolean"?e?u.createTrue():u.createFalse():u.createStringLiteral(e)),jn=({schema:{shape:e},isResponse:t,next:r,optionalPropStyle:{withQuestionMark:o}})=>{let i=Object.entries(e).map(([s,a])=>{let p=t&&Ie(a)?a instanceof Dt.ZodOptional:a.isOptional(),d=u.createPropertySignature(void 0,Gr(s),p&&o?u.createToken(g.SyntaxKind.QuestionToken):void 0,r({schema:a}));return a.description&&Nt(d,a.description),d});return u.createTypeLiteralNode(i)},Dn=({schema:{element:e},next:t})=>u.createArrayTypeNode(t({schema:e})),kn=({schema:{options:e}})=>u.createUnionTypeNode(e.map(t=>u.createLiteralTypeNode(u.createStringLiteral(t)))),Wr=({schema:{options:e},next:t})=>u.createUnionTypeNode(e.map(r=>t({schema:r}))),Ln=e=>vn?.[e.kind],Hn=({schema:e,next:t,isResponse:r})=>{let o=t({schema:e.innerType()}),i=e._def.effect;if(r&&i.type==="transform"){let s=qe(e,Ln(o)),a={number:g.SyntaxKind.NumberKeyword,bigint:g.SyntaxKind.BigIntKeyword,boolean:g.SyntaxKind.BooleanKeyword,string:g.SyntaxKind.StringKeyword,undefined:g.SyntaxKind.UndefinedKeyword,object:g.SyntaxKind.ObjectKeyword};return u.createKeywordTypeNode(s&&a[s]||g.SyntaxKind.AnyKeyword)}return o},Un=({schema:e})=>u.createUnionTypeNode(Object.values(e.enum).map(t=>u.createLiteralTypeNode(typeof t=="number"?u.createNumericLiteral(t):u.createStringLiteral(t)))),Kn=({next:e,schema:t,optionalPropStyle:{withUndefined:r}})=>{let o=e({schema:t.unwrap()});return r?u.createUnionTypeNode([o,u.createKeywordTypeNode(g.SyntaxKind.UndefinedKeyword)]):o},Fn=({next:e,schema:t})=>u.createUnionTypeNode([e({schema:t.unwrap()}),u.createLiteralTypeNode(u.createNull())]),Bn=({next:e,schema:{items:t}})=>u.createTupleTypeNode(t.map(r=>e({schema:r}))),qn=({next:e,schema:{keySchema:t,valueSchema:r}})=>u.createExpressionWithTypeArguments(u.createIdentifier("Record"),[e({schema:t}),e({schema:r})]),Vn=({next:e,schema:t})=>u.createIntersectionTypeNode([t._def.left,t._def.right].map(r=>e({schema:r}))),$n=({next:e,schema:t})=>e({schema:t._def.innerType}),ce=e=>()=>u.createKeywordTypeNode(e),_n=({next:e,schema:t})=>e({schema:t.unwrap()}),Gn=({next:e,schema:t})=>e({schema:t._def.innerType}),Wn=({next:e,schema:t})=>e({schema:t._def.innerType}),Yn=({schema:e,next:t,isResponse:r})=>t({schema:e._def[r?"out":"in"]}),Jn=()=>u.createLiteralTypeNode(u.createNull()),Qn=({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({schema:i.schema})))},Xn=({schema:e})=>{let t=u.createKeywordTypeNode(g.SyntaxKind.StringKeyword),r=u.createTypeReferenceNode("Buffer"),o=u.createUnionTypeNode([t,r]);return e instanceof Dt.ZodString?t:e instanceof Dt.ZodUnion?o:r},ei=({next:e,schema:t})=>e({schema:t.shape.raw}),ti={ZodString:ce(g.SyntaxKind.StringKeyword),ZodNumber:ce(g.SyntaxKind.NumberKeyword),ZodBigInt:ce(g.SyntaxKind.BigIntKeyword),ZodBoolean:ce(g.SyntaxKind.BooleanKeyword),ZodAny:ce(g.SyntaxKind.AnyKeyword),[Me]:ce(g.SyntaxKind.StringKeyword),[ve]:ce(g.SyntaxKind.StringKeyword),ZodNull:Jn,ZodArray:Dn,ZodTuple:Bn,ZodRecord:qn,ZodObject:jn,ZodLiteral:Nn,ZodIntersection:Vn,ZodUnion:Wr,ZodDefault:$n,ZodEnum:kn,ZodNativeEnum:Un,ZodEffects:Hn,ZodOptional:Kn,ZodNullable:Fn,ZodDiscriminatedUnion:Wr,ZodBranded:_n,ZodCatch:Wn,ZodPipeline:Yn,ZodLazy:Qn,ZodReadonly:Gn,[Pe]:Xn,[re]:ei},De=({schema:e,...t})=>ae({schema:e,rules:ti,onMissing:()=>u.createKeywordTypeNode(g.SyntaxKind.AnyKeyword),...t});var kt=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]=Te(r,t),this.getAlias(t)}constructor({routing:t,variant:r="client",serializer:o=Be,splitResponse:i=!1,optionalPropStyle:s={withQuestionMark:!0,withUndefined:!0}}){se({routing:t,onEndpoint:(b,A,w)=>{let Q={serializer:o,getAlias:this.getAlias.bind(this),makeAlias:this.makeAlias.bind(this),optionalPropStyle:s},Lt=E(w,A,"input"),Yr=De({...Q,schema:b.getSchema("input"),isResponse:!1}),Se=i?E(w,A,"positive.response"):void 0,Ht=b.getSchema("positive"),Ut=i?De({...Q,isResponse:!0,schema:Ht}):void 0,Oe=i?E(w,A,"negative.response"):void 0,Kt=b.getSchema("negative"),Ft=i?De({...Q,isResponse:!0,schema:Kt}):void 0,Bt=E(w,A,"response"),Jr=Se&&Oe?n.createUnionTypeNode([n.createTypeReferenceNode(Se),n.createTypeReferenceNode(Oe)]):De({...Q,isResponse:!0,schema:Ht.or(Kt)});this.program.push(Te(Yr,Lt)),Ut&&Se&&this.program.push(Te(Ut,Se)),Ft&&Oe&&this.program.push(Te(Ft,Oe)),this.program.push(Te(Jr,Bt)),w!=="options"&&(this.paths.push(A),this.registry[`${w} ${A}`]={input:Lt,positive:Se,negative:Oe,response:Bt,isJson:b.getMimeTypes("positive").includes(H),tags:b.getTags()})}}),this.program.unshift(...Object.values(this.aliases)),this.program.push(zt(this.ids.pathType,this.paths)),this.program.push(zt(this.ids.methodType,_r)),this.program.push(tt(this.ids.methodPathType,wt([this.ids.methodType,this.ids.pathType])));let a=[n.createHeritageClause(Z.SyntaxKind.ExtendsKeyword,[Zt(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:b,kind:A}of this.interfaces)this.program.push(Vr(b,a,Object.keys(this.registry).map(w=>{let Q=this.registry[w][A];return Q?Ur(w,Q):void 0}).filter(w=>w!==void 0)));if(r==="types")return;let p=n.createVariableStatement(_,G(this.ids.jsonEndpointsConst,n.createObjectLiteralExpression(Object.keys(this.registry).filter(b=>this.registry[b].isJson).map(b=>n.createPropertyAssignment(`"${b}"`,n.createTrue()))))),d=n.createVariableStatement(_,G(this.ids.endpointTagsConst,n.createObjectLiteralExpression(Object.keys(this.registry).map(b=>n.createPropertyAssignment(`"${b}"`,n.createArrayLiteralExpression(this.registry[b].tags.map(A=>n.createStringLiteral(A)))))))),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),Et)}),Br(this.ids.responseInterface,Et))),l=tt(this.ids.implementationType,n.createFunctionTypeNode(void 0,et({method:n.createTypeReferenceNode(this.ids.methodType),path:n.createKeywordTypeNode(Z.SyntaxKind.StringKeyword),params:Zt(Z.SyntaxKind.StringKeyword,Z.SyntaxKind.AnyKeyword)}),qr())),m=n.createTemplateExpression(n.createTemplateHead(":"),[n.createTemplateSpan(this.ids.keyParameter,xe)]),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),T=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()),h=Fr(this.ids.clientClass,Hr([Xe(this.ids.implementationArgument,n.createTypeReferenceNode(this.ids.implementationType),Lr)]),[Kr(this.ids.provideMethod,n.createTypeReferenceNode(this.ids.providerType),Mt([this.ids.methodParameter,this.ids.pathParameter,this.ids.paramsArgument],n.createCallExpression(n.createPropertyAccessExpression(n.createThis(),this.ids.implementationArgument),void 0,[this.ids.methodParameter,f,T]),!0))]);this.program.push(p,d,c,l,h);let O=n.createPropertyAssignment(this.ids.methodParameter,n.createCallExpression(n.createPropertyAccessExpression(this.ids.methodParameter,"toUpperCase"),void 0,void 0)),y=n.createPropertyAssignment(this.ids.headersProperty,n.createConditionalExpression(this.ids.hasBodyConst,void 0,n.createObjectLiteralExpression([n.createPropertyAssignment(n.createStringLiteral("Content-Type"),n.createStringLiteral(H))]),void 0,this.ids.undefinedValue)),x=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)),j=n.createVariableStatement(void 0,G(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,xe)]),n.createObjectLiteralExpression([O,y,x])])))),I=n.createVariableStatement(void 0,G(this.ids.hasBodyConst,n.createLogicalNot(n.createCallExpression(n.createPropertyAccessExpression(n.createArrayLiteralExpression([n.createStringLiteral("get"),n.createStringLiteral("delete")]),"includes"),void 0,[this.ids.methodParameter])))),Y=n.createVariableStatement(void 0,G(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]),xe)])))),[R,K]=["json","text"].map(b=>n.createReturnStatement(n.createCallExpression(n.createPropertyAccessExpression(this.ids.responseConst,b),void 0,void 0))),D=n.createIfStatement(n.createBinaryExpression(n.createTemplateExpression(Ct,[n.createTemplateSpan(this.ids.methodParameter,It),n.createTemplateSpan(this.ids.pathParameter,xe)]),Z.SyntaxKind.InKeyword,this.ids.jsonEndpointsConst),n.createBlock([R])),J=n.createVariableStatement(_,G(this.ids.exampleImplementationConst,Mt([this.ids.methodParameter,this.ids.pathParameter,this.ids.paramsArgument],n.createBlock([I,Y,j,D,K]),!0),n.createTypeReferenceNode(this.ids.implementationType))),be=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"))])])),ot=n.createVariableStatement(void 0,G(this.ids.clientConst,n.createNewExpression(this.ids.clientClass,void 0,[this.ids.exampleImplementationConst])));this.usage.push(J,ot,be)}printUsage(t){return this.usage.length?this.usage.map(r=>typeof r=="string"?r:jt(r,t)).join(`
19
19
  `):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,`
20
- ${r}`);return this.program.concat(o||[]).map((i,s)=>zt(i,s<this.program.length?t:{...t,omitTrailingSemicolon:!0})).join(`
20
+ ${r}`);return this.program.concat(o||[]).map((i,s)=>jt(i,s<this.program.length?t:{...t,omitTrailingSemicolon:!0})).join(`
21
21
 
22
- `)}async printFormatted({printerOptions:t,format:r}={}){let o=r;if(!o)try{let a=(await ie("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 Ln={dateIn:lr,dateOut:ur,file:Ue,upload:Gt,raw:_t};export{ge as AbstractEndpoint,Ze as DependsOnMethod,St as Documentation,C as DocumentationError,Ee as EndpointsFactory,B as InputValidationError,vt as Integration,le as MissingPeerError,X as OutputValidationError,me as RoutingError,ze as ServeStatic,no as arrayEndpointsFactory,ut as arrayResultHandler,co as attachRouting,Br as createConfig,ft as createLogger,mt as createMiddleware,lt as createResultHandler,mo as createServer,oo as defaultEndpointsFactory,we as defaultResultHandler,Ln as ez,V as getExamples,q as getMessageFromError,Fe as getStatusCodeFromError,cn as testEndpoint,k as withMeta};
22
+ `)}async printFormatted({printerOptions:t,format:r}={}){let o=r;if(!o)try{let a=(await ie("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 ri={dateIn:gr,dateOut:hr,file:Ke,upload:Qt,raw:Jt};export{he as AbstractEndpoint,Ze as DependsOnMethod,Pt as Documentation,C as DocumentationError,Ee as EndpointsFactory,B as InputValidationError,kt as Integration,ue as MissingPeerError,X as OutputValidationError,le as RoutingError,ze as ServeStatic,ho as arrayEndpointsFactory,gt as arrayResultHandler,Oo as attachRouting,Qr as createConfig,ht as createLogger,ft as createMiddleware,yt as createResultHandler,Ro as createServer,go as defaultEndpointsFactory,we as defaultResultHandler,ri as ez,V as getExamples,q as getMessageFromError,Fe as getStatusCodeFromError,En as testEndpoint,L as withMeta};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "express-zod-api",
3
- "version": "16.5.0",
3
+ "version": "16.5.2",
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": {
@@ -35,13 +35,14 @@
35
35
  "test:types": "tsc --noEmit",
36
36
  "test:unit": "vitest run --coverage tests/unit tests/system",
37
37
  "test:badge": "make-coverage-badge --output-path coverage.svg",
38
+ "bench": "vitest bench --run tests/bench",
38
39
  "lint": "eslint src example tests tools && yarn prettier *.md --check",
39
40
  "mdfix": "prettier *.md --write",
40
41
  "cleanup": "rm -rf tests/**/node_modules coverage",
41
42
  "precommit": "yarn lint && yarn test && yarn build && git add example/example.* LICENSE coverage.svg",
42
43
  "prepublishOnly": "yarn lint && yarn test && yarn build",
43
44
  "postversion": "git push && git push --tags",
44
- "install_hooks": "husky install"
45
+ "install_hooks": "husky"
45
46
  },
46
47
  "type": "module",
47
48
  "main": "dist/index.cjs",
@@ -154,7 +155,7 @@
154
155
  "express-fileupload": "^1.4.3",
155
156
  "form-data": "^4.0.0",
156
157
  "http-errors": "^2.0.0",
157
- "husky": "^8.0.3",
158
+ "husky": "^9.0.5",
158
159
  "make-coverage-badge": "^1.2.0",
159
160
  "mockdate": "^3.0.5",
160
161
  "prettier": "3.2.4",