express-zod-api 21.11.1 → 21.11.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,15 @@
2
2
 
3
3
  ## Version 21
4
4
 
5
+ ### v21.11.2
6
+
7
+ - Fixed issue on emitting server-sent events (SSE), introduced in v21.5.0:
8
+ - Emitting SSE failed due to internal error `flush is not a function` having `compression` disabled in config;
9
+ - The `.flush()` method of `response` is a feature of `compression` (optional peer dependency);
10
+ - It is required to call the method when `compression` is enabled;
11
+ - This version fixes the issue by calling the method conditionally;
12
+ - This bug was reported by [@bobgubko](https://github.com/bobgubko).
13
+
5
14
  ### v21.11.1
6
15
 
7
16
  - Common styling methods (coloring) are extracted from the built-in logger instance:
package/README.md CHANGED
@@ -86,6 +86,7 @@ Therefore, many basic tasks can be accomplished faster and easier, in particular
86
86
 
87
87
  These people contributed to the improvement of the framework by reporting bugs, making changes and suggesting ideas:
88
88
 
89
+ [<img src="https://github.com/bobgubko.png" alt="@bobgubko" width="50px" />](https://github.com/bobgubko)
89
90
  [<img src="https://github.com/HenriJ.png" alt="@HenriJ" width="50px" />](https://github.com/HenriJ)
90
91
  [<img src="https://github.com/JonParton.png" alt="@JonParton" width="50px" />](https://github.com/JonParton)
91
92
  [<img src="https://github.com/williamgcampbell.png" alt="@williamgcampbell" width="50px" />](https://github.com/williamgcampbell)
@@ -102,7 +103,6 @@ These people contributed to the improvement of the framework by reporting bugs,
102
103
  [<img src="https://github.com/danclaytondev.png" alt="@danclaytondev" width="50px" />](https://github.com/danclaytondev)
103
104
  [<img src="https://github.com/huyhoang160593.png" alt="@huyhoang160593" width="50px" />](https://github.com/huyhoang160593)
104
105
  [<img src="https://github.com/sarahssharkey.png" alt="@sarahssharkey" width="50px" />](https://github.com/sarahssharkey)
105
- [<img src="https://github.com/bobgubko.png" alt="@bobgubko" width="50px" />](https://github.com/bobgubko)
106
106
  [<img src="https://github.com/master-chu.png" alt="@master-chu" width="50px" />](https://github.com/master-chu)
107
107
  [<img src="https://github.com/alindsay55661.png" alt="@alindsay55661" width="50px" />](https://github.com/alindsay55661)
108
108
  [<img src="https://github.com/john-schmitz.png" alt="@john-schmitz" width="50px" />](https://github.com/john-schmitz)
package/dist/index.cjs CHANGED
@@ -15,9 +15,9 @@ ${s}888${r}
15
15
  ${o}
16
16
  `;e.write(d.split(`
17
17
  `).map((p,l)=>c[l]?c[l](p):p).join(`
18
- `))};var go=e=>{e.startupLogo!==!1&&uo(process.stdout);let t=e.errorHandler||Le,r=Fr(e.logger)?e.logger:new Me(e.logger);r.debug("Running",{build:"v21.11.1 (CJS)",env:process.env.NODE_ENV||"development"}),mo(r);let o=po({logger:r,config:e}),i={getLogger:co(r),errorHandler:t},a=so(i),c=no(i);return{...i,logger:r,notFoundHandler:a,parserFailureHandler:c,loggingMiddleware:o}},ho=(e,t)=>{let{logger:r,getLogger:o,notFoundHandler:s,loggingMiddleware:i}=go(e);return sr({app:e.app.use(i),routing:t,getLogger:o,config:e}),{notFoundHandler:s,logger:r}},xo=async(e,t)=>{let{logger:r,getLogger:o,notFoundHandler:s,parserFailureHandler:i,loggingMiddleware:a}=go(e),c=(0,It.default)().disable("x-powered-by").use(a);if(e.compression){let y=await De("compression");c.use(y(typeof e.compression=="object"?e.compression:void 0))}let d={json:[e.jsonParser||It.default.json()],raw:[e.rawParser||It.default.raw(),ao],upload:e.upload?await io({config:e,getLogger:o}):[]};await e.beforeRouting?.({app:c,getLogger:o}),sr({app:c,routing:t,getLogger:o,config:e,parsers:d}),c.use(i,s);let p=[],l=(y,b)=>()=>y.listen(b,()=>r.info("Listening",b)),u=[];if(e.http){let y=fo.default.createServer(c);p.push(y),u.push(l(y,e.http.listen))}if(e.https){let y=yo.default.createServer(e.https.options,c);p.push(y),u.push(l(y,e.https.listen))}return e.gracefulShutdown&&lo({logger:r,servers:p,options:e.gracefulShutdown===!0?{}:e.gracefulShutdown}),{app:c,logger:r,servers:u.map(y=>y())}};var ko=require("openapi3-ts/oas31"),jo=require("ramda");var Q=require("openapi3-ts/oas31"),m=require("ramda"),T=require("zod");var Oe=(e,{onEach:t,rules:r,onMissing:o,ctx:s={}})=>{let i=r[e._def[x]?.brand]||r[e._def.typeName],c=i?i(e,{...s,next:p=>Oe(p,{ctx:s,onEach:t,rules:r,onMissing:o})}):o(e,s),d=t&&t(e,{prev:c,...s});return d?{...c,...d}:c};var bo=50,To="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString",Mn={integer:0,number:0,string:"",boolean:!1,object:{},null:null,array:[]},Oo=/:([A-Za-z0-9_]+)/g,Hn=/^\d{4}-\d{2}-\d{2}$/,Un=/^\d{2}:\d{2}:\d{2}(\.\d+)?$/,Kn=e=>e?/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(([+-]\d{2}:\d{2})|Z)$/:/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?Z$/,Dn=e=>e.match(Oo)?.map(t=>t.slice(1))||[],Ro=e=>e.replace(Oo,t=>`{${t.slice(1)}}`),Fn=({_def:e},{next:t})=>({...t(e.innerType),default:e[x]?.defaultLabel||e.defaultValue()}),Bn=({_def:{innerType:e}},{next:t})=>t(e),qn=()=>({format:"any"}),$n=({},e)=>{if(e.isResponse)throw new k("Please use ez.upload() only for input.",e);return{type:"string",format:"binary"}},Vn=e=>{let t=e.unwrap();return{type:"string",format:t instanceof T.z.ZodString?t._def.checks.find(r=>r.kind==="base64")?"byte":"file":"binary"}},Gn=({options:e},{next:t})=>({oneOf:e.map(t)}),_n=({options:e,discriminator:t},{next:r})=>({discriminator:{propertyName:t},oneOf:e.map(r)}),Jn=(e,t)=>{if(Array.isArray(e)&&Array.isArray(t))return(0,m.concat)(e,t);if(e===t)return t;throw new Error("Can not flatten properties")},Yn=e=>{let[t,r]=e.filter(Q.isSchemaObject).filter(s=>s.type==="object"&&Object.keys(s).every(i=>["type","properties","required","examples"].includes(i)));if(!t||!r)throw new Error("Can not flatten objects");let o={type:"object"};return(t.properties||r.properties)&&(o.properties=(0,m.mergeDeepWith)(Jn,t.properties||{},r.properties||{})),(t.required||r.required)&&(o.required=(0,m.union)(t.required||[],r.required||[])),(t.examples||r.examples)&&(o.examples=fe(t.examples||[],r.examples||[],([s,i])=>(0,m.mergeDeepRight)(s,i))),o},Qn=({_def:{left:e,right:t}},{next:r})=>{let o=[e,t].map(r);try{return Yn(o)}catch{}return{allOf:o}},Wn=(e,{next:t})=>t(e.unwrap()),Xn=(e,{next:t})=>t(e.unwrap()),es=(e,{next:t})=>{let r=t(e.unwrap());return(0,Q.isSchemaObject)(r)&&(r.type=Po(r)),r},Ao=e=>{let t=(0,m.toLower)((0,m.type)(e));return typeof e=="bigint"?"integer":t==="number"||t==="string"||t==="boolean"||t==="object"||t==="null"||t==="array"?t:void 0},So=e=>({type:Ao(Object.values(e.enum)[0]),enum:Object.values(e.enum)}),ts=({value:e})=>({type:Ao(e),const:e}),rs=(e,{isResponse:t,next:r})=>{let o=Object.keys(e.shape),s=c=>t&&Ye(c)?c instanceof T.z.ZodOptional:c.isOptional(),i=o.filter(c=>!s(e.shape[c])),a={type:"object"};return o.length&&(a.properties=Et(e,r)),i.length&&(a.required=i),a},os=()=>({type:"null"}),ns=({},e)=>{if(e.isResponse)throw new k("Please use ez.dateOut() for output.",e);return{description:"YYYY-MM-DDTHH:mm:ss.sssZ",type:"string",format:"date-time",pattern:/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$/.source,externalDocs:{url:To}}},ss=({},e)=>{if(!e.isResponse)throw new k("Please use ez.dateIn() for input.",e);return{description:"YYYY-MM-DDTHH:mm:ss.sssZ",type:"string",format:"date-time",externalDocs:{url:To}}},is=({},e)=>{throw new k(`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)},as=()=>({type:"boolean"}),ps=()=>({type:"integer",format:"bigint"}),cs=e=>e.every(t=>t instanceof T.z.ZodLiteral),ds=({keySchema:e,valueSchema:t},{next:r})=>{if(e instanceof T.z.ZodEnum||e instanceof T.z.ZodNativeEnum){let o=Object.values(e.enum),s={type:"object"};return o.length&&(s.properties=Et(T.z.object((0,m.fromPairs)((0,m.xprod)(o,[t]))),r),s.required=o),s}if(e instanceof T.z.ZodLiteral)return{type:"object",properties:Et(T.z.object({[e.value]:t}),r),required:[e.value]};if(e instanceof T.z.ZodUnion&&cs(e.options)){let o=(0,m.map)(i=>`${i.value}`,e.options),s=(0,m.fromPairs)((0,m.xprod)(o,[t]));return{type:"object",properties:Et(T.z.object(s),r),required:o}}return{type:"object",additionalProperties:r(t)}},ms=({_def:{minLength:e,maxLength:t},element:r},{next:o})=>{let s={type:"array",items:o(r)};return e&&(s.minItems=e.value),t&&(s.maxItems=t.value),s},ls=({items:e,_def:{rest:t}},{next:r})=>({type:"array",prefixItems:e.map(r),items:t===null?{not:{}}:r(t)}),us=({isEmail:e,isURL:t,minLength:r,maxLength:o,isUUID:s,isCUID:i,isCUID2:a,isULID:c,isIP:d,isEmoji:p,isDatetime:l,isCIDR:u,isDate:y,isTime:b,isBase64:P,isNANOID:N,isBase64url:h,isDuration:W,_def:{checks:E}})=>{let Z=E.find(S=>S.kind==="regex"),M=E.find(S=>S.kind==="datetime"),q=E.some(S=>S.kind==="jwt"),X=E.find(S=>S.kind==="length"),z={type:"string"},de={"date-time":l,byte:P,base64url:h,date:y,time:b,duration:W,email:e,url:t,uuid:s,cuid:i,cuid2:a,ulid:c,nanoid:N,jwt:q,ip:d,cidr:u,emoji:p};for(let S in de)if(de[S]){z.format=S;break}return X&&([z.minLength,z.maxLength]=[X.value,X.value]),r!==null&&(z.minLength=r),o!==null&&(z.maxLength=o),y&&(z.pattern=Hn.source),b&&(z.pattern=Un.source),l&&(z.pattern=Kn(M?.offset).source),Z&&(z.pattern=Z.regex.source),z},fs=({isInt:e,maxValue:t,minValue:r,_def:{checks:o}})=>{let s=o.find(u=>u.kind==="min"),i=r===null?e?Number.MIN_SAFE_INTEGER:-Number.MAX_VALUE:r,a=s?s.inclusive:!0,c=o.find(u=>u.kind==="max"),d=t===null?e?Number.MAX_SAFE_INTEGER:Number.MAX_VALUE:t,p=c?c.inclusive:!0,l={type:e?"integer":"number",format:e?"int64":"double"};return a?l.minimum=i:l.exclusiveMinimum=i,p?l.maximum=d:l.exclusiveMaximum=d,l},Et=({shape:e},t)=>(0,m.map)(t,e),ys=e=>{let t=Array.isArray(e.type)?e.type[0]:e.type;return Mn?.[t]},Po=({type:e})=>e==="null"?e:typeof e=="string"?[e,"null"]:e?[...new Set(e).add("null")]:"null",gs=(e,{isResponse:t,next:r})=>{let o=r(e.innerType()),{effect:s}=e._def;if(t&&s.type==="transform"&&(0,Q.isSchemaObject)(o)){let i=lt(e,ys(o));return i&&["number","string","boolean"].includes(i)?{type:i}:r(T.z.any())}if(!t&&s.type==="preprocess"&&(0,Q.isSchemaObject)(o)){let{type:i,...a}=o;return{...a,format:`${a.format||i} (preprocessed)`}}return o},hs=({_def:e},{isResponse:t,next:r})=>r(e[t?"out":"in"]),xs=(e,{next:t})=>t(e.unwrap()),bs=(e,{next:t,makeRef:r})=>r(e,()=>t(e.schema)),Ss=(e,{next:t})=>t(e.unwrap().shape.raw),wo=e=>e.length?(0,m.fromPairs)((0,m.zip)((0,m.times)(t=>`example${t+1}`,e.length),(0,m.map)((0,m.objOf)("value"),e))):void 0,Io=(e,t,r=[])=>(0,m.pipe)(Y,(0,m.map)((0,m.when)(o=>(0,m.type)(o)==="Object",(0,m.omit)(r))),wo)({schema:e,variant:t?"parsed":"original",validate:!0}),Ts=(e,t)=>(0,m.pipe)(Y,(0,m.filter)((0,m.has)(t)),(0,m.pluck)(t),wo)({schema:e,variant:"original",validate:!0}),Re=e=>e instanceof T.z.ZodObject?e:e instanceof T.z.ZodBranded?Re(e.unwrap()):e instanceof T.z.ZodUnion||e instanceof T.z.ZodDiscriminatedUnion?e.options.map(t=>Re(t)).reduce((t,r)=>t.merge(r.partial()),T.z.object({})):e instanceof T.z.ZodEffects?Re(e._def.schema):e instanceof T.z.ZodPipeline?Re(e._def.in):Re(e._def.left).merge(Re(e._def.right)),Eo=({path:e,method:t,schema:r,inputSources:o,makeRef:s,composition:i,brandHandling:a,description:c=`${t.toUpperCase()} ${e} Parameter`})=>{let{shape:d}=Re(r),p=Dn(e),l=o.includes("query"),u=o.includes("params"),y=o.includes("headers"),b=h=>u&&p.includes(h),P=h=>y&&$t(h);return Object.keys(d).map(h=>({name:h,location:b(h)?"path":P(h)?"header":l?"query":void 0})).filter(h=>h.location!==void 0).map(({name:h,location:W})=>{let E=Oe(d[h],{rules:{...a,...ar},onEach:pr,onMissing:cr,ctx:{isResponse:!1,makeRef:s,path:e,method:t}}),Z=i==="components"?s(d[h],E,ne(c,h)):E;return{name:h,in:W,required:!d[h].isOptional(),description:E.description||c,schema:Z,examples:Ts(r,h)}})},ar={ZodString:us,ZodNumber:fs,ZodBigInt:ps,ZodBoolean:as,ZodNull:os,ZodArray:ms,ZodTuple:ls,ZodRecord:ds,ZodObject:rs,ZodLiteral:ts,ZodIntersection:Qn,ZodUnion:Gn,ZodAny:qn,ZodDefault:Fn,ZodEnum:So,ZodNativeEnum:So,ZodEffects:gs,ZodOptional:Wn,ZodNullable:es,ZodDiscriminatedUnion:_n,ZodBranded:xs,ZodDate:is,ZodCatch:Bn,ZodPipeline:hs,ZodLazy:bs,ZodReadonly:Xn,[V]:Vn,[ze]:$n,[xe]:ss,[he]:ns,[se]:Ss},pr=(e,{isResponse:t,prev:r})=>{if((0,Q.isReferenceObject)(r))return{};let{description:o}=e,s=e instanceof T.z.ZodLazy,i=r.type!==void 0,a=t&&Ye(e),c=!s&&i&&!a&&e.isNullable(),d={};if(o&&(d.description=o),c&&(d.type=Po(r)),!s){let p=Y({schema:e,variant:t?"parsed":"original",validate:!0});p.length&&(d.examples=p.slice())}return d},cr=(e,t)=>{throw new k(`Zod type ${e.constructor.name} is unsupported.`,t)},ir=(e,t)=>{if((0,Q.isReferenceObject)(e))return e;let r={...e};return r.properties&&(r.properties=(0,m.omit)(t,r.properties)),r.examples&&(r.examples=r.examples.map(o=>(0,m.omit)(t,o))),r.required&&(r.required=r.required.filter(o=>!t.includes(o))),r.allOf&&(r.allOf=r.allOf.map(o=>ir(o,t))),r.oneOf&&(r.oneOf=r.oneOf.map(o=>ir(o,t))),r},zo=e=>(0,Q.isReferenceObject)(e)?e:(0,m.omit)(["examples"],e),Co=({method:e,path:t,schema:r,mimeTypes:o,variant:s,makeRef:i,composition:a,hasMultipleStatusCodes:c,statusCode:d,brandHandling:p,description:l=`${e.toUpperCase()} ${t} ${Vt(s)} response ${c?d:""}`.trim()})=>{if(!o)return{description:l};let u=zo(Oe(r,{rules:{...p,...ar},onEach:pr,onMissing:cr,ctx:{isResponse:!0,makeRef:i,path:t,method:e}})),y={schema:a==="components"?i(r,u,ne(l)):u,examples:Io(r,!0)};return{description:l,content:(0,m.fromPairs)((0,m.xprod)(o,[y]))}},Os=()=>({type:"http",scheme:"basic"}),Rs=({format:e})=>{let t={type:"http",scheme:"bearer"};return e&&(t.bearerFormat=e),t},As=({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},Ps=({name:e})=>({type:"apiKey",in:"header",name:e}),ws=({name:e})=>({type:"apiKey",in:"cookie",name:e}),Is=({url:e})=>({type:"openIdConnect",openIdConnectUrl:e}),Es=({flows:e={}})=>({type:"oauth2",flows:(0,m.map)(t=>({...t,scopes:t.scopes||{}}),(0,m.reject)(m.isNil,e))}),Zo=(e,t)=>{let r={basic:Os,bearer:Rs,input:As,header:Ps,cookie:ws,openid:Is,oauth2:Es};return Tt(e,o=>r[o.type](o,t))},zt=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?zt(Qt(e)):zt({or:[e]}),vo=({method:e,path:t,schema:r,mimeType:o,makeRef:s,composition:i,brandHandling:a,paramNames:c,description:d=`${e.toUpperCase()} ${t} Request body`})=>{let p=zo(ir(Oe(r,{rules:{...a,...ar},onEach:pr,onMissing:cr,ctx:{isResponse:!1,makeRef:s,path:t,method:e}}),c)),l={schema:i==="components"?s(r,p,ne(d)):p,examples:Io(r,!1,c)};return{description:d,content:{[o]:l}}},No=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}),dr=e=>e.length<=bo?e:e.slice(0,bo-1)+"\u2026";var Ct=class extends ko.OpenApiBuilder{lastSecuritySchemaIds=new Map;lastOperationIdSuffixes=new Map;references=new Map;makeRef(t,r,o=this.references.get(t)){return o||(o=`Schema${this.references.size+1}`,this.references.set(t,o),typeof r=="function"&&(r=r())),typeof r=="object"&&this.addSchema(o,r),{$ref:`#/components/schemas/${o}`}}ensureUniqOperationId(t,r,o){let s=o||ne(r,t),i=this.lastOperationIdSuffixes.get(s);if(i===void 0)return this.lastOperationIdSuffixes.set(s,1),s;if(o)throw new k(`Duplicated operationId: "${o}"`,{method:r,isResponse:!1,path:t});return i++,this.lastOperationIdSuffixes.set(s,i),`${s}${i}`}ensureUniqSecuritySchemaName(t){let r=JSON.stringify(t);for(let s in this.rootDoc.components?.securitySchemes||{})if(r===JSON.stringify(this.rootDoc.components?.securitySchemes?.[s]))return s;let o=(this.lastSecuritySchemaIds.get(t.type)||0)+1;return this.lastSecuritySchemaIds.set(t.type,o),`${t.type.toUpperCase()}_${o}`}constructor({routing:t,config:r,title:o,version:s,serverUrl:i,descriptions:a,brandHandling:c,hasSummaryFromDescription:d=!0,composition:p="inline"}){super(),this.addInfo({title:o,version:s});for(let u of typeof i=="string"?[i]:i)this.addServer({url:u});Fe({routing:t,onEndpoint:(u,y,b)=>{let P={path:y,method:b,endpoint:u,composition:p,brandHandling:c,makeRef:this.makeRef.bind(this)},[N,h]=["short","long"].map(u.getDescription.bind(u)),W=N?dr(N):d&&h?dr(h):void 0,E=u.getTags(),Z=r.inputSources?.[b]||Bt[b],M=this.ensureUniqOperationId(y,b,u.getOperationId(b)),q=Eo({...P,inputSources:Z,schema:u.getSchema("input"),description:a?.requestParameter?.call(null,{method:b,path:y,operationId:M})}),X={};for(let S of je){let me=u.getResponses(S);for(let{mimeTypes:Ge,schema:Dt,statusCodes:nt}of me)for(let _e of nt)X[_e]=Co({...P,variant:S,schema:Dt,mimeTypes:Ge,statusCode:_e,hasMultipleStatusCodes:me.length>1||nt.length>1,description:a?.[`${S}Response`]?.call(null,{method:b,path:y,operationId:M,statusCode:_e})})}let z=Z.includes("body")?vo({...P,paramNames:(0,jo.pluck)("name",q),schema:u.getSchema("input"),mimeType:R[u.getRequestType()],description:a?.requestBody?.call(null,{method:b,path:y,operationId:M})}):void 0,de=zt(Tt(Zo(u.getSecurity(),Z),S=>{let me=this.ensureUniqSecuritySchemaName(S),Ge=["oauth2","openIdConnect"].includes(S.type)?u.getScopes().slice():[];return this.addSecurityScheme(me,S),{name:me,scopes:Ge}}));this.addPath(Ro(y),{[b]:{operationId:M,summary:W,description:h,tags:E.length>0?E:void 0,parameters:q.length>0?q:void 0,requestBody:z,security:de.length>0?de:void 0,responses:X}})}}),this.rootDoc.tags=r.tags?No(r.tags):[]}};var Zt=require("node-mocks-http"),zs=e=>(0,Zt.createRequest)({...e,headers:{"content-type":R.json,...e?.headers}}),Cs=e=>(0,Zt.createResponse)(e),Zs=e=>{let t={warn:[],error:[],info:[],debug:[]};return new Proxy(e||{},{get(r,o,s){return o==="_getLogs"?()=>t:Br(o)?(...i)=>t[o].push(i):Reflect.get(r,o,s)}})},Lo=({requestProps:e,responseOptions:t,configProps:r,loggerProps:o})=>{let s=zs(e),i=Cs({req:s,...t});i.req=t?.req||s,s.res=i;let a=Zs(o),c={cors:!1,logger:a,...r};return{requestMock:s,responseMock:i,loggerMock:a,configMock:c}},Mo=async({endpoint:e,...t})=>{let{requestMock:r,responseMock:o,loggerMock:s,configMock:i}=Lo(t);return await e.execute({request:r,response:o,config:i,logger:s}),{requestMock:r,responseMock:o,loggerMock:s}},Ho=async({middleware:e,options:t={},errorHandler:r,...o})=>{let{requestMock:s,responseMock:i,loggerMock:a,configMock:c}=Lo(o),d=mt(s,c.inputSources);try{let p=await e.execute({request:s,response:i,logger:a,input:d,options:t});return{requestMock:s,responseMock:i,loggerMock:a,output:p}}catch(p){if(!r)throw p;return r(oe(p),i),{requestMock:s,responseMock:i,loggerMock:a,output:{}}}};var Wo=require("ramda"),L=C(require("typescript"),1),Xo=require("zod");var A=C(require("typescript"),1);var O=C(require("typescript"),1),{factory:mr}=O.default,pe=(e,t)=>O.default.addSyntheticLeadingComment(e,O.default.SyntaxKind.MultiLineCommentTrivia,`* ${t} `,!0),lr=(e,t)=>{let r=O.default.createSourceFile("print.ts","",O.default.ScriptTarget.Latest,!1,O.default.ScriptKind.TS);return O.default.createPrinter(t).printNode(O.default.EmitHint.Unspecified,e,r)},vs=/^[A-Za-z_$][A-Za-z0-9_$]*$/,Be=e=>typeof e=="number"?mr.createNumericLiteral(e):vs.test(e)?mr.createIdentifier(e):mr.createStringLiteral(e),Ns=[O.default.SyntaxKind.AnyKeyword,O.default.SyntaxKind.BigIntKeyword,O.default.SyntaxKind.BooleanKeyword,O.default.SyntaxKind.NeverKeyword,O.default.SyntaxKind.NumberKeyword,O.default.SyntaxKind.ObjectKeyword,O.default.SyntaxKind.StringKeyword,O.default.SyntaxKind.SymbolKeyword,O.default.SyntaxKind.UndefinedKeyword,O.default.SyntaxKind.UnknownKeyword,O.default.SyntaxKind.VoidKeyword],Uo=e=>Ns.includes(e.kind);var n=A.default.factory,Ae=[n.createModifier(A.default.SyntaxKind.ExportKeyword)],ks=[n.createModifier(A.default.SyntaxKind.AsyncKeyword)],js=[n.createModifier(A.default.SyntaxKind.PublicKeyword)],Ko=[n.createModifier(A.default.SyntaxKind.ProtectedKeyword),n.createModifier(A.default.SyntaxKind.ReadonlyKeyword)],Do=n.createToken(A.default.SyntaxKind.DotDotDotToken),Ls=n.createTemplateHead(""),Ms=n.createTemplateMiddle(" "),rt=n.createTemplateTail(""),qe=n.createExpressionWithTypeArguments(n.createIdentifier("Record"),[n.createKeywordTypeNode(A.default.SyntaxKind.StringKeyword),n.createKeywordTypeNode(A.default.SyntaxKind.AnyKeyword)]),Hs=e=>n.createTemplateLiteralType(Ls,e.map((t,r)=>n.createTemplateLiteralTypeSpan(n.createTypeReferenceNode(t),r===e.length-1?rt:Ms))),vt=Hs(["M","P"]),Nt=(e,t,r)=>n.createParameterDeclaration(Array.isArray(r)?r:void 0,Array.isArray(r)?void 0:r,e,void 0,t,void 0),$e=(e,t)=>Object.entries(e).map(([r,o])=>Nt(n.createIdentifier(r),o,t)),Fo=e=>n.createConstructorDeclaration(void 0,e,n.createBlock([])),ur=(e,t)=>n.createPropertySignature(void 0,Be(e),void 0,t),Bo=(...e)=>n.createArrayBindingPattern(e.map(t=>n.createBindingElement(void 0,void 0,t))),D=(e,t,r)=>n.createVariableDeclarationList([n.createVariableDeclaration(e,void 0,r,t)],A.default.NodeFlags.Const),fr=(e,t)=>F(e,n.createUnionTypeNode(t.map(r=>n.createLiteralTypeNode(n.createStringLiteral(r)))),{isPublic:!0}),F=(e,t,{isPublic:r,comment:o,params:s}={})=>{let i=n.createTypeAliasDeclaration(r?Ae:void 0,e,s&&Lt(s),t);return o?pe(i,o):i},qo=()=>F("SomeOf",n.createIndexedAccessTypeNode(n.createTypeReferenceNode("T"),ot("T")),{params:{T:void 0}}),kt=(e,t,r,o,s)=>n.createMethodDeclaration(js,void 0,e,void 0,o,t,s,r),$o=(e,t,r)=>n.createClassDeclaration(Ae,e,void 0,void 0,[t,...r]),ot=e=>n.createTypeOperatorNode(A.default.SyntaxKind.KeyOfKeyword,n.createTypeReferenceNode(e)),Vo=(e,t,r)=>n.createConditionalTypeNode(t,ot(e),n.createIndexedAccessTypeNode(n.createTypeReferenceNode(e),t),r),jt=e=>n.createTypeReferenceNode(Promise.name,[e==="any"?n.createKeywordTypeNode(A.default.SyntaxKind.AnyKeyword):e]),yr=(e,t,{isPublic:r,comment:o}={})=>{let s=n.createInterfaceDeclaration(r?Ae:void 0,e,void 0,void 0,t);return o?pe(s,o):s},Lt=e=>Object.entries(e).map(([t,r])=>n.createTypeParameterDeclaration([],t,r&&n.createTypeReferenceNode(r))),Go=(e,t,r)=>n.createArrowFunction(r?ks:void 0,void 0,e.map(o=>Nt(o)),void 0,void 0,t),gr=(e,t,r)=>n.createCallExpression(n.createPropertyAccessExpression(n.createCallExpression(n.createPropertyAccessExpression(n.createIdentifier(Object.name),I("keys")),void 0,[e]),I("reduce")),void 0,[n.createArrowFunction(void 0,void 0,$e({acc:void 0,key:void 0}),void 0,void 0,t),r]),I=e=>e,Ve=(e,t,r)=>n.createConditionalExpression(e,n.createToken(A.default.SyntaxKind.QuestionToken),t,n.createToken(A.default.SyntaxKind.ColonToken),r),B=(e,t,r)=>n.createCallExpression(n.createPropertyAccessExpression(Array.isArray(e)?n.createPropertyAccessExpression(...e):e,t),void 0,r),_o=(e,t)=>n.createBinaryExpression(e,n.createToken(A.default.SyntaxKind.AmpersandAmpersandToken),t),Jo=(e,t)=>n.createBinaryExpression(e,n.createToken(A.default.SyntaxKind.EqualsEqualsEqualsToken),t);var Yo=["get","post","put","delete","patch"];var Ht=require("ramda"),g=C(require("typescript"),1),Mt=require("zod");var{factory:f}=g.default,Us={[g.default.SyntaxKind.AnyKeyword]:"",[g.default.SyntaxKind.BigIntKeyword]:BigInt(0),[g.default.SyntaxKind.BooleanKeyword]:!1,[g.default.SyntaxKind.NumberKeyword]:0,[g.default.SyntaxKind.ObjectKeyword]:{},[g.default.SyntaxKind.StringKeyword]:"",[g.default.SyntaxKind.UndefinedKeyword]:void 0},Ks=({value:e})=>f.createLiteralTypeNode(typeof e=="number"?f.createNumericLiteral(e):typeof e=="boolean"?e?f.createTrue():f.createFalse():f.createStringLiteral(e)),Ds=({shape:e},{isResponse:t,next:r,optionalPropStyle:{withQuestionMark:o}})=>{let s=Object.entries(e).map(([i,a])=>{let c=t&&Ye(a)?a instanceof Mt.z.ZodOptional:a.isOptional(),d=f.createPropertySignature(void 0,Be(i),c&&o?f.createToken(g.default.SyntaxKind.QuestionToken):void 0,r(a));return a.description?pe(d,a.description):d});return f.createTypeLiteralNode(s)},Fs=({element:e},{next:t})=>f.createArrayTypeNode(t(e)),Bs=({options:e})=>f.createUnionTypeNode(e.map(t=>f.createLiteralTypeNode(f.createStringLiteral(t)))),Qo=({options:e},{next:t})=>{let r=new Map;for(let o of e){let s=t(o);r.set(Uo(s)?s.kind:s,s)}return f.createUnionTypeNode(Array.from(r.values()))},qs=e=>Us?.[e.kind],$s=(e,{next:t,isResponse:r})=>{let o=t(e.innerType());if(r&&e._def.effect.type==="transform"){let s=lt(e,qs(o)),i={number:g.default.SyntaxKind.NumberKeyword,bigint:g.default.SyntaxKind.BigIntKeyword,boolean:g.default.SyntaxKind.BooleanKeyword,string:g.default.SyntaxKind.StringKeyword,undefined:g.default.SyntaxKind.UndefinedKeyword,object:g.default.SyntaxKind.ObjectKeyword};return f.createKeywordTypeNode(s&&i[s]||g.default.SyntaxKind.AnyKeyword)}return o},Vs=e=>f.createUnionTypeNode(Object.values(e.enum).map(t=>f.createLiteralTypeNode(typeof t=="number"?f.createNumericLiteral(t):f.createStringLiteral(t)))),Gs=(e,{next:t,optionalPropStyle:{withUndefined:r}})=>{let o=t(e.unwrap());return r?f.createUnionTypeNode([o,f.createKeywordTypeNode(g.default.SyntaxKind.UndefinedKeyword)]):o},_s=(e,{next:t})=>f.createUnionTypeNode([t(e.unwrap()),f.createLiteralTypeNode(f.createNull())]),Js=({items:e,_def:{rest:t}},{next:r})=>f.createTupleTypeNode(e.map(r).concat(t===null?[]:f.createRestTypeNode(r(t)))),Ys=({keySchema:e,valueSchema:t},{next:r})=>f.createExpressionWithTypeArguments(f.createIdentifier("Record"),[e,t].map(r)),Qs=({_def:{left:e,right:t}},{next:r})=>{let o=[e,t].map(r);return o.every(g.default.isTypeLiteralNode)?f.createTypeLiteralNode((0,Ht.chain)((0,Ht.prop)("members"),o)):f.createIntersectionTypeNode(o)},Ws=({_def:e},{next:t})=>t(e.innerType),ce=e=>()=>f.createKeywordTypeNode(e),Xs=(e,{next:t})=>t(e.unwrap()),ei=(e,{next:t})=>t(e.unwrap()),ti=({_def:e},{next:t})=>t(e.innerType),ri=({_def:e},{next:t,isResponse:r})=>t(e[r?"out":"in"]),oi=()=>f.createLiteralTypeNode(f.createNull()),ni=(e,{makeAlias:t,next:r})=>t(e,()=>r(e.schema)),si=e=>{let t=e.unwrap(),r=f.createKeywordTypeNode(g.default.SyntaxKind.StringKeyword),o=f.createTypeReferenceNode("Buffer"),s=f.createUnionTypeNode([r,o]);return t instanceof Mt.z.ZodString?r:t instanceof Mt.z.ZodUnion?s:o},ii=(e,{next:t})=>t(e.unwrap().shape.raw),ai={ZodString:ce(g.default.SyntaxKind.StringKeyword),ZodNumber:ce(g.default.SyntaxKind.NumberKeyword),ZodBigInt:ce(g.default.SyntaxKind.BigIntKeyword),ZodBoolean:ce(g.default.SyntaxKind.BooleanKeyword),ZodAny:ce(g.default.SyntaxKind.AnyKeyword),ZodUndefined:ce(g.default.SyntaxKind.UndefinedKeyword),[he]:ce(g.default.SyntaxKind.StringKeyword),[xe]:ce(g.default.SyntaxKind.StringKeyword),ZodNull:oi,ZodArray:Fs,ZodTuple:Js,ZodRecord:Ys,ZodObject:Ds,ZodLiteral:Ks,ZodIntersection:Qs,ZodUnion:Qo,ZodDefault:Ws,ZodEnum:Bs,ZodNativeEnum:Vs,ZodEffects:$s,ZodOptional:Gs,ZodNullable:_s,ZodDiscriminatedUnion:Qo,ZodBranded:Xs,ZodCatch:ti,ZodPipeline:ri,ZodLazy:ni,ZodReadonly:ei,[V]:si,[se]:ii},hr=(e,{brandHandling:t,ctx:r})=>Oe(e,{rules:{...t,...ai},onMissing:()=>f.createKeywordTypeNode(g.default.SyntaxKind.AnyKeyword),ctx:r});var Ut=class{someOf=qo();program=[this.someOf];usage=[];registry=new Map;paths=new Set;aliases=new Map;ids={pathType:n.createIdentifier("Path"),methodType:n.createIdentifier("Method"),requestType:n.createIdentifier("Request"),methodPathType:n.createIdentifier("MethodPath"),inputInterface:n.createIdentifier("Input"),posResponseInterface:n.createIdentifier("PositiveResponse"),negResponseInterface:n.createIdentifier("NegativeResponse"),encResponseInterface:n.createIdentifier("EncodedResponse"),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"),requestParameter:n.createIdentifier("request"),args:n.createIdentifier("args"),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"),contentTypeConst:n.createIdentifier("contentType"),isJsonConst:n.createIdentifier("isJSON")};interfaces=[{id:this.ids.inputInterface,kind:"input",props:[]},{id:this.ids.posResponseInterface,kind:"positive",props:[]},{id:this.ids.negResponseInterface,kind:"negative",props:[]},{id:this.ids.encResponseInterface,kind:"encoded",props:[]},{id:this.ids.responseInterface,kind:"response",props:[]}];makeAlias(t,r){let o=this.aliases.get(t)?.name?.text;if(!o){o=`Type${this.aliases.size+1}`;let s=n.createLiteralTypeNode(n.createNull());this.aliases.set(t,F(o,s)),this.aliases.set(t,F(o,r()))}return n.createTypeReferenceNode(o)}makeSomeOf=({name:t})=>n.createTypeReferenceNode(this.someOf.name,[n.createTypeReferenceNode(t)]);constructor({routing:t,brandHandling:r,variant:o="client",serverUrl:s="https://example.com",optionalPropStyle:i={withQuestionMark:!0,withUndefined:!0},noContent:a=Xo.z.undefined()}){let c={makeAlias:this.makeAlias.bind(this),optionalPropStyle:i},d={brandHandling:r,ctx:{...c,isResponse:!1}},p={brandHandling:r,ctx:{...c,isResponse:!0}};Fe({routing:t,onEndpoint:(_,le,st)=>{let Je=ne.bind(null,st,le),H=`${st} ${le}`,it=F(Je("input"),hr(_.getSchema("input"),d),{comment:H});this.program.push(it);let at=je.reduce((Ft,pt)=>{let mn=_.getResponses(pt),ln=(0,Wo.chain)(([un,{schema:fn,mimeTypes:yn,statusCodes:gn}])=>{let Sr=F(Je(pt,"variant",`${un+1}`),hr(yn?fn:a,p),{comment:H});return this.program.push(Sr),gn.map(hn=>ur(hn,n.createTypeReferenceNode(Sr.name)))},Array.from(mn.entries())),br=yr(Je(pt,"response","variants"),ln,{comment:H});return this.program.push(br),Object.assign(Ft,{[pt]:br})},{});this.paths.add(le);let dn=_.getResponses("positive").some(({mimeTypes:Ft})=>Ft?.includes(R.json)),xr=n.createLiteralTypeNode(n.createStringLiteral(H));this.registry.set(H,{input:n.createTypeReferenceNode(it.name),positive:this.makeSomeOf(at.positive),negative:this.makeSomeOf(at.negative),response:n.createUnionTypeNode([n.createIndexedAccessTypeNode(n.createTypeReferenceNode(this.ids.posResponseInterface),xr),n.createIndexedAccessTypeNode(n.createTypeReferenceNode(this.ids.negResponseInterface),xr)]),encoded:n.createIntersectionTypeNode([n.createTypeReferenceNode(at.positive.name),n.createTypeReferenceNode(at.negative.name)]),tags:_.getTags(),isJson:dn})}}),this.program.unshift(...this.aliases.values()),this.program.push(fr(this.ids.pathType,Array.from(this.paths))),this.program.push(fr(this.ids.methodType,Yo));let u=[],y=[];for(let[_,{isJson:le,tags:st,...Je}]of this.registry){for(let H of this.interfaces)H.props.push(ur(_,Je[H.kind]));if(o!=="types"){let H=Be(_);le&&u.push(n.createPropertyAssignment(H,n.createTrue())),y.push(n.createPropertyAssignment(H,n.createArrayLiteralExpression(st.map(it=>n.createStringLiteral(it)))))}}for(let{id:_,props:le}of this.interfaces)this.program.push(yr(_,le,{isPublic:!0}));if(this.program.push(F(this.ids.requestType,ot(this.ids.inputInterface),{isPublic:!0})),this.program.push(F(this.ids.methodPathType,n.createTypeReferenceNode(this.ids.requestType),{isPublic:!0,comment:"@deprecated use Request instead"})),o==="types")return;let b=pe(n.createVariableStatement(Ae,D(this.ids.jsonEndpointsConst,n.createObjectLiteralExpression(u))),"@deprecated use content-type header of an actual response"),P=n.createVariableStatement(Ae,D(this.ids.endpointTagsConst,n.createObjectLiteralExpression(y))),N=F(this.ids.implementationType,n.createFunctionTypeNode(void 0,$e({[this.ids.methodParameter.text]:n.createTypeReferenceNode(this.ids.methodType),[this.ids.pathParameter.text]:n.createKeywordTypeNode(L.default.SyntaxKind.StringKeyword),[this.ids.paramsArgument.text]:qe}),jt("any")),{isPublic:!0}),h=n.createTemplateExpression(n.createTemplateHead(":"),[n.createTemplateSpan(this.ids.keyParameter,rt)]),W=gr(this.ids.paramsArgument,B(this.ids.accumulator,I("replace"),[h,n.createElementAccessExpression(this.ids.paramsArgument,this.ids.keyParameter)]),this.ids.pathParameter),E=gr(this.ids.paramsArgument,B(n.createIdentifier(Object.name),I("assign"),[this.ids.accumulator,_o(n.createPrefixUnaryExpression(L.default.SyntaxKind.ExclamationToken,B(this.ids.pathParameter,I("includes"),[h])),n.createObjectLiteralExpression([n.createPropertyAssignment(n.createComputedPropertyName(this.ids.keyParameter),n.createElementAccessExpression(this.ids.paramsArgument,this.ids.keyParameter))],!1))]),n.createObjectLiteralExpression()),Z=pe(kt(this.ids.provideMethod,$e({[this.ids.methodParameter.text]:n.createTypeReferenceNode("M"),[this.ids.pathParameter.text]:n.createTypeReferenceNode("P"),[this.ids.paramsArgument.text]:n.createConditionalTypeNode(vt,ot(this.ids.inputInterface),n.createIndexedAccessTypeNode(n.createTypeReferenceNode(this.ids.inputInterface),vt),qe)}),void 0,Lt({M:this.ids.methodType,P:this.ids.pathType}),jt(Vo(this.ids.responseInterface,vt,n.createKeywordTypeNode(L.default.SyntaxKind.UnknownKeyword)))),"@deprecated use the overload with 2 arguments instead"),M=kt(this.ids.provideMethod,$e({[this.ids.requestParameter.text]:n.createTypeReferenceNode("K"),[this.ids.paramsArgument.text]:n.createIndexedAccessTypeNode(n.createTypeReferenceNode(this.ids.inputInterface),n.createTypeReferenceNode("K"))}),void 0,Lt({K:this.ids.requestType}),jt(n.createIndexedAccessTypeNode(n.createTypeReferenceNode(this.ids.responseInterface),n.createTypeReferenceNode("K")))),q=kt(this.ids.provideMethod,$e({[this.ids.args.text]:n.createUnionTypeNode([n.createTupleTypeNode([n.createKeywordTypeNode(L.default.SyntaxKind.StringKeyword),n.createKeywordTypeNode(L.default.SyntaxKind.StringKeyword),qe]),n.createTupleTypeNode([n.createKeywordTypeNode(L.default.SyntaxKind.StringKeyword),qe])])},Do),n.createBlock([n.createVariableStatement(void 0,D(Bo(this.ids.methodParameter,this.ids.pathParameter,this.ids.paramsArgument),n.createAsExpression(n.createParenthesizedExpression(Ve(Jo(n.createPropertyAccessExpression(this.ids.args,I("length")),n.createNumericLiteral(2)),n.createArrayLiteralExpression([n.createSpreadElement(B(n.createElementAccessExpression(this.ids.args,0),I("split"),[n.createRegularExpressionLiteral("/ (.+)/"),n.createNumericLiteral(2)])),n.createElementAccessExpression(this.ids.args,1)]),this.ids.args)),n.createTupleTypeNode([n.createTypeReferenceNode(this.ids.methodType),n.createTypeReferenceNode(this.ids.pathType),qe])))),n.createReturnStatement(B(n.createThis(),this.ids.implementationArgument,[this.ids.methodParameter,W,E]))])),X=$o(this.ids.clientClass,Fo([Nt(this.ids.implementationArgument,n.createTypeReferenceNode(this.ids.implementationType),Ko)]),[Z,M,q]),z=F(this.ids.providerType,n.createIndexedAccessTypeNode(n.createTypeReferenceNode(this.ids.clientClass),n.createLiteralTypeNode(n.createStringLiteral(this.ids.provideMethod.text))),{isPublic:!0,comment:"@deprecated will be removed in v22"});this.program.push(b,P,N,X,z);let de=n.createPropertyAssignment(this.ids.methodParameter,B(this.ids.methodParameter,I("toUpperCase"))),S=n.createPropertyAssignment(this.ids.headersProperty,Ve(this.ids.hasBodyConst,n.createObjectLiteralExpression([n.createPropertyAssignment(n.createStringLiteral("Content-Type"),n.createStringLiteral(R.json))]),this.ids.undefinedValue)),me=n.createPropertyAssignment(this.ids.bodyProperty,Ve(this.ids.hasBodyConst,B(n.createIdentifier(JSON[Symbol.toStringTag]),I("stringify"),[this.ids.paramsArgument]),this.ids.undefinedValue)),Ge=n.createVariableStatement(void 0,D(this.ids.responseConst,n.createAwaitExpression(n.createCallExpression(n.createIdentifier(fetch.name),void 0,[n.createNewExpression(n.createIdentifier(URL.name),void 0,[n.createTemplateExpression(n.createTemplateHead(""),[n.createTemplateSpan(this.ids.pathParameter,n.createTemplateMiddle("")),n.createTemplateSpan(this.ids.searchParamsConst,rt)]),n.createStringLiteral(s)]),n.createObjectLiteralExpression([de,S,me])])))),Dt=n.createVariableStatement(void 0,D(this.ids.hasBodyConst,n.createLogicalNot(B(n.createArrayLiteralExpression([n.createStringLiteral("get"),n.createStringLiteral("delete")]),I("includes"),[this.ids.methodParameter])))),nt=n.createVariableStatement(void 0,D(this.ids.searchParamsConst,Ve(this.ids.hasBodyConst,n.createStringLiteral(""),n.createTemplateExpression(n.createTemplateHead("?"),[n.createTemplateSpan(n.createNewExpression(n.createIdentifier(URLSearchParams.name),void 0,[this.ids.paramsArgument]),rt)])))),_e=n.createVariableStatement(void 0,D(this.ids.contentTypeConst,B([this.ids.responseConst,this.ids.headersProperty],I("get"),[n.createStringLiteral("content-type")]))),on=n.createIfStatement(n.createPrefixUnaryExpression(L.default.SyntaxKind.ExclamationToken,this.ids.contentTypeConst),n.createReturnStatement(void 0),void 0),nn=n.createVariableStatement(void 0,D(this.ids.isJsonConst,n.createCallChain(n.createPropertyAccessChain(this.ids.contentTypeConst,void 0,I("startsWith")),void 0,void 0,[n.createStringLiteral(R.json)]))),sn=n.createReturnStatement(n.createCallExpression(n.createElementAccessExpression(this.ids.responseConst,Ve(this.ids.isJsonConst,n.createStringLiteral(I("json")),n.createStringLiteral(I("text")))),void 0,[])),an=n.createVariableStatement(Ae,D(this.ids.exampleImplementationConst,Go([this.ids.methodParameter,this.ids.pathParameter,this.ids.paramsArgument],n.createBlock([Dt,nt,Ge,_e,on,nn,sn]),!0),n.createTypeReferenceNode(this.ids.implementationType))),pn=n.createExpressionStatement(B(this.ids.clientConst,this.ids.provideMethod,[n.createStringLiteral("get /v1/user/retrieve"),n.createObjectLiteralExpression([n.createPropertyAssignment("id",n.createStringLiteral("10"))])])),cn=n.createVariableStatement(void 0,D(this.ids.clientConst,n.createNewExpression(this.ids.clientClass,void 0,[this.ids.exampleImplementationConst])));this.usage.push(an,cn,pn)}printUsage(t){return this.usage.length?this.usage.map(r=>typeof r=="string"?r:lr(r,t)).join(`
18
+ `))};var go=e=>{e.startupLogo!==!1&&uo(process.stdout);let t=e.errorHandler||Le,r=Fr(e.logger)?e.logger:new Me(e.logger);r.debug("Running",{build:"v21.11.2 (CJS)",env:process.env.NODE_ENV||"development"}),mo(r);let o=po({logger:r,config:e}),i={getLogger:co(r),errorHandler:t},a=so(i),c=no(i);return{...i,logger:r,notFoundHandler:a,parserFailureHandler:c,loggingMiddleware:o}},ho=(e,t)=>{let{logger:r,getLogger:o,notFoundHandler:s,loggingMiddleware:i}=go(e);return sr({app:e.app.use(i),routing:t,getLogger:o,config:e}),{notFoundHandler:s,logger:r}},xo=async(e,t)=>{let{logger:r,getLogger:o,notFoundHandler:s,parserFailureHandler:i,loggingMiddleware:a}=go(e),c=(0,It.default)().disable("x-powered-by").use(a);if(e.compression){let y=await De("compression");c.use(y(typeof e.compression=="object"?e.compression:void 0))}let d={json:[e.jsonParser||It.default.json()],raw:[e.rawParser||It.default.raw(),ao],upload:e.upload?await io({config:e,getLogger:o}):[]};await e.beforeRouting?.({app:c,getLogger:o}),sr({app:c,routing:t,getLogger:o,config:e,parsers:d}),c.use(i,s);let p=[],l=(y,b)=>()=>y.listen(b,()=>r.info("Listening",b)),u=[];if(e.http){let y=fo.default.createServer(c);p.push(y),u.push(l(y,e.http.listen))}if(e.https){let y=yo.default.createServer(e.https.options,c);p.push(y),u.push(l(y,e.https.listen))}return e.gracefulShutdown&&lo({logger:r,servers:p,options:e.gracefulShutdown===!0?{}:e.gracefulShutdown}),{app:c,logger:r,servers:u.map(y=>y())}};var ko=require("openapi3-ts/oas31"),jo=require("ramda");var Q=require("openapi3-ts/oas31"),m=require("ramda"),T=require("zod");var Oe=(e,{onEach:t,rules:r,onMissing:o,ctx:s={}})=>{let i=r[e._def[x]?.brand]||r[e._def.typeName],c=i?i(e,{...s,next:p=>Oe(p,{ctx:s,onEach:t,rules:r,onMissing:o})}):o(e,s),d=t&&t(e,{prev:c,...s});return d?{...c,...d}:c};var bo=50,To="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString",Mn={integer:0,number:0,string:"",boolean:!1,object:{},null:null,array:[]},Oo=/:([A-Za-z0-9_]+)/g,Hn=/^\d{4}-\d{2}-\d{2}$/,Un=/^\d{2}:\d{2}:\d{2}(\.\d+)?$/,Kn=e=>e?/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(([+-]\d{2}:\d{2})|Z)$/:/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?Z$/,Dn=e=>e.match(Oo)?.map(t=>t.slice(1))||[],Ro=e=>e.replace(Oo,t=>`{${t.slice(1)}}`),Fn=({_def:e},{next:t})=>({...t(e.innerType),default:e[x]?.defaultLabel||e.defaultValue()}),Bn=({_def:{innerType:e}},{next:t})=>t(e),qn=()=>({format:"any"}),$n=({},e)=>{if(e.isResponse)throw new k("Please use ez.upload() only for input.",e);return{type:"string",format:"binary"}},Vn=e=>{let t=e.unwrap();return{type:"string",format:t instanceof T.z.ZodString?t._def.checks.find(r=>r.kind==="base64")?"byte":"file":"binary"}},Gn=({options:e},{next:t})=>({oneOf:e.map(t)}),_n=({options:e,discriminator:t},{next:r})=>({discriminator:{propertyName:t},oneOf:e.map(r)}),Jn=(e,t)=>{if(Array.isArray(e)&&Array.isArray(t))return(0,m.concat)(e,t);if(e===t)return t;throw new Error("Can not flatten properties")},Yn=e=>{let[t,r]=e.filter(Q.isSchemaObject).filter(s=>s.type==="object"&&Object.keys(s).every(i=>["type","properties","required","examples"].includes(i)));if(!t||!r)throw new Error("Can not flatten objects");let o={type:"object"};return(t.properties||r.properties)&&(o.properties=(0,m.mergeDeepWith)(Jn,t.properties||{},r.properties||{})),(t.required||r.required)&&(o.required=(0,m.union)(t.required||[],r.required||[])),(t.examples||r.examples)&&(o.examples=fe(t.examples||[],r.examples||[],([s,i])=>(0,m.mergeDeepRight)(s,i))),o},Qn=({_def:{left:e,right:t}},{next:r})=>{let o=[e,t].map(r);try{return Yn(o)}catch{}return{allOf:o}},Wn=(e,{next:t})=>t(e.unwrap()),Xn=(e,{next:t})=>t(e.unwrap()),es=(e,{next:t})=>{let r=t(e.unwrap());return(0,Q.isSchemaObject)(r)&&(r.type=Po(r)),r},Ao=e=>{let t=(0,m.toLower)((0,m.type)(e));return typeof e=="bigint"?"integer":t==="number"||t==="string"||t==="boolean"||t==="object"||t==="null"||t==="array"?t:void 0},So=e=>({type:Ao(Object.values(e.enum)[0]),enum:Object.values(e.enum)}),ts=({value:e})=>({type:Ao(e),const:e}),rs=(e,{isResponse:t,next:r})=>{let o=Object.keys(e.shape),s=c=>t&&Ye(c)?c instanceof T.z.ZodOptional:c.isOptional(),i=o.filter(c=>!s(e.shape[c])),a={type:"object"};return o.length&&(a.properties=Et(e,r)),i.length&&(a.required=i),a},os=()=>({type:"null"}),ns=({},e)=>{if(e.isResponse)throw new k("Please use ez.dateOut() for output.",e);return{description:"YYYY-MM-DDTHH:mm:ss.sssZ",type:"string",format:"date-time",pattern:/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$/.source,externalDocs:{url:To}}},ss=({},e)=>{if(!e.isResponse)throw new k("Please use ez.dateIn() for input.",e);return{description:"YYYY-MM-DDTHH:mm:ss.sssZ",type:"string",format:"date-time",externalDocs:{url:To}}},is=({},e)=>{throw new k(`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)},as=()=>({type:"boolean"}),ps=()=>({type:"integer",format:"bigint"}),cs=e=>e.every(t=>t instanceof T.z.ZodLiteral),ds=({keySchema:e,valueSchema:t},{next:r})=>{if(e instanceof T.z.ZodEnum||e instanceof T.z.ZodNativeEnum){let o=Object.values(e.enum),s={type:"object"};return o.length&&(s.properties=Et(T.z.object((0,m.fromPairs)((0,m.xprod)(o,[t]))),r),s.required=o),s}if(e instanceof T.z.ZodLiteral)return{type:"object",properties:Et(T.z.object({[e.value]:t}),r),required:[e.value]};if(e instanceof T.z.ZodUnion&&cs(e.options)){let o=(0,m.map)(i=>`${i.value}`,e.options),s=(0,m.fromPairs)((0,m.xprod)(o,[t]));return{type:"object",properties:Et(T.z.object(s),r),required:o}}return{type:"object",additionalProperties:r(t)}},ms=({_def:{minLength:e,maxLength:t},element:r},{next:o})=>{let s={type:"array",items:o(r)};return e&&(s.minItems=e.value),t&&(s.maxItems=t.value),s},ls=({items:e,_def:{rest:t}},{next:r})=>({type:"array",prefixItems:e.map(r),items:t===null?{not:{}}:r(t)}),us=({isEmail:e,isURL:t,minLength:r,maxLength:o,isUUID:s,isCUID:i,isCUID2:a,isULID:c,isIP:d,isEmoji:p,isDatetime:l,isCIDR:u,isDate:y,isTime:b,isBase64:P,isNANOID:N,isBase64url:h,isDuration:W,_def:{checks:E}})=>{let Z=E.find(S=>S.kind==="regex"),M=E.find(S=>S.kind==="datetime"),q=E.some(S=>S.kind==="jwt"),X=E.find(S=>S.kind==="length"),z={type:"string"},de={"date-time":l,byte:P,base64url:h,date:y,time:b,duration:W,email:e,url:t,uuid:s,cuid:i,cuid2:a,ulid:c,nanoid:N,jwt:q,ip:d,cidr:u,emoji:p};for(let S in de)if(de[S]){z.format=S;break}return X&&([z.minLength,z.maxLength]=[X.value,X.value]),r!==null&&(z.minLength=r),o!==null&&(z.maxLength=o),y&&(z.pattern=Hn.source),b&&(z.pattern=Un.source),l&&(z.pattern=Kn(M?.offset).source),Z&&(z.pattern=Z.regex.source),z},fs=({isInt:e,maxValue:t,minValue:r,_def:{checks:o}})=>{let s=o.find(u=>u.kind==="min"),i=r===null?e?Number.MIN_SAFE_INTEGER:-Number.MAX_VALUE:r,a=s?s.inclusive:!0,c=o.find(u=>u.kind==="max"),d=t===null?e?Number.MAX_SAFE_INTEGER:Number.MAX_VALUE:t,p=c?c.inclusive:!0,l={type:e?"integer":"number",format:e?"int64":"double"};return a?l.minimum=i:l.exclusiveMinimum=i,p?l.maximum=d:l.exclusiveMaximum=d,l},Et=({shape:e},t)=>(0,m.map)(t,e),ys=e=>{let t=Array.isArray(e.type)?e.type[0]:e.type;return Mn?.[t]},Po=({type:e})=>e==="null"?e:typeof e=="string"?[e,"null"]:e?[...new Set(e).add("null")]:"null",gs=(e,{isResponse:t,next:r})=>{let o=r(e.innerType()),{effect:s}=e._def;if(t&&s.type==="transform"&&(0,Q.isSchemaObject)(o)){let i=lt(e,ys(o));return i&&["number","string","boolean"].includes(i)?{type:i}:r(T.z.any())}if(!t&&s.type==="preprocess"&&(0,Q.isSchemaObject)(o)){let{type:i,...a}=o;return{...a,format:`${a.format||i} (preprocessed)`}}return o},hs=({_def:e},{isResponse:t,next:r})=>r(e[t?"out":"in"]),xs=(e,{next:t})=>t(e.unwrap()),bs=(e,{next:t,makeRef:r})=>r(e,()=>t(e.schema)),Ss=(e,{next:t})=>t(e.unwrap().shape.raw),wo=e=>e.length?(0,m.fromPairs)((0,m.zip)((0,m.times)(t=>`example${t+1}`,e.length),(0,m.map)((0,m.objOf)("value"),e))):void 0,Io=(e,t,r=[])=>(0,m.pipe)(Y,(0,m.map)((0,m.when)(o=>(0,m.type)(o)==="Object",(0,m.omit)(r))),wo)({schema:e,variant:t?"parsed":"original",validate:!0}),Ts=(e,t)=>(0,m.pipe)(Y,(0,m.filter)((0,m.has)(t)),(0,m.pluck)(t),wo)({schema:e,variant:"original",validate:!0}),Re=e=>e instanceof T.z.ZodObject?e:e instanceof T.z.ZodBranded?Re(e.unwrap()):e instanceof T.z.ZodUnion||e instanceof T.z.ZodDiscriminatedUnion?e.options.map(t=>Re(t)).reduce((t,r)=>t.merge(r.partial()),T.z.object({})):e instanceof T.z.ZodEffects?Re(e._def.schema):e instanceof T.z.ZodPipeline?Re(e._def.in):Re(e._def.left).merge(Re(e._def.right)),Eo=({path:e,method:t,schema:r,inputSources:o,makeRef:s,composition:i,brandHandling:a,description:c=`${t.toUpperCase()} ${e} Parameter`})=>{let{shape:d}=Re(r),p=Dn(e),l=o.includes("query"),u=o.includes("params"),y=o.includes("headers"),b=h=>u&&p.includes(h),P=h=>y&&$t(h);return Object.keys(d).map(h=>({name:h,location:b(h)?"path":P(h)?"header":l?"query":void 0})).filter(h=>h.location!==void 0).map(({name:h,location:W})=>{let E=Oe(d[h],{rules:{...a,...ar},onEach:pr,onMissing:cr,ctx:{isResponse:!1,makeRef:s,path:e,method:t}}),Z=i==="components"?s(d[h],E,ne(c,h)):E;return{name:h,in:W,required:!d[h].isOptional(),description:E.description||c,schema:Z,examples:Ts(r,h)}})},ar={ZodString:us,ZodNumber:fs,ZodBigInt:ps,ZodBoolean:as,ZodNull:os,ZodArray:ms,ZodTuple:ls,ZodRecord:ds,ZodObject:rs,ZodLiteral:ts,ZodIntersection:Qn,ZodUnion:Gn,ZodAny:qn,ZodDefault:Fn,ZodEnum:So,ZodNativeEnum:So,ZodEffects:gs,ZodOptional:Wn,ZodNullable:es,ZodDiscriminatedUnion:_n,ZodBranded:xs,ZodDate:is,ZodCatch:Bn,ZodPipeline:hs,ZodLazy:bs,ZodReadonly:Xn,[V]:Vn,[ze]:$n,[xe]:ss,[he]:ns,[se]:Ss},pr=(e,{isResponse:t,prev:r})=>{if((0,Q.isReferenceObject)(r))return{};let{description:o}=e,s=e instanceof T.z.ZodLazy,i=r.type!==void 0,a=t&&Ye(e),c=!s&&i&&!a&&e.isNullable(),d={};if(o&&(d.description=o),c&&(d.type=Po(r)),!s){let p=Y({schema:e,variant:t?"parsed":"original",validate:!0});p.length&&(d.examples=p.slice())}return d},cr=(e,t)=>{throw new k(`Zod type ${e.constructor.name} is unsupported.`,t)},ir=(e,t)=>{if((0,Q.isReferenceObject)(e))return e;let r={...e};return r.properties&&(r.properties=(0,m.omit)(t,r.properties)),r.examples&&(r.examples=r.examples.map(o=>(0,m.omit)(t,o))),r.required&&(r.required=r.required.filter(o=>!t.includes(o))),r.allOf&&(r.allOf=r.allOf.map(o=>ir(o,t))),r.oneOf&&(r.oneOf=r.oneOf.map(o=>ir(o,t))),r},zo=e=>(0,Q.isReferenceObject)(e)?e:(0,m.omit)(["examples"],e),Co=({method:e,path:t,schema:r,mimeTypes:o,variant:s,makeRef:i,composition:a,hasMultipleStatusCodes:c,statusCode:d,brandHandling:p,description:l=`${e.toUpperCase()} ${t} ${Vt(s)} response ${c?d:""}`.trim()})=>{if(!o)return{description:l};let u=zo(Oe(r,{rules:{...p,...ar},onEach:pr,onMissing:cr,ctx:{isResponse:!0,makeRef:i,path:t,method:e}})),y={schema:a==="components"?i(r,u,ne(l)):u,examples:Io(r,!0)};return{description:l,content:(0,m.fromPairs)((0,m.xprod)(o,[y]))}},Os=()=>({type:"http",scheme:"basic"}),Rs=({format:e})=>{let t={type:"http",scheme:"bearer"};return e&&(t.bearerFormat=e),t},As=({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},Ps=({name:e})=>({type:"apiKey",in:"header",name:e}),ws=({name:e})=>({type:"apiKey",in:"cookie",name:e}),Is=({url:e})=>({type:"openIdConnect",openIdConnectUrl:e}),Es=({flows:e={}})=>({type:"oauth2",flows:(0,m.map)(t=>({...t,scopes:t.scopes||{}}),(0,m.reject)(m.isNil,e))}),Zo=(e,t)=>{let r={basic:Os,bearer:Rs,input:As,header:Ps,cookie:ws,openid:Is,oauth2:Es};return Tt(e,o=>r[o.type](o,t))},zt=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?zt(Qt(e)):zt({or:[e]}),vo=({method:e,path:t,schema:r,mimeType:o,makeRef:s,composition:i,brandHandling:a,paramNames:c,description:d=`${e.toUpperCase()} ${t} Request body`})=>{let p=zo(ir(Oe(r,{rules:{...a,...ar},onEach:pr,onMissing:cr,ctx:{isResponse:!1,makeRef:s,path:t,method:e}}),c)),l={schema:i==="components"?s(r,p,ne(d)):p,examples:Io(r,!1,c)};return{description:d,content:{[o]:l}}},No=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}),dr=e=>e.length<=bo?e:e.slice(0,bo-1)+"\u2026";var Ct=class extends ko.OpenApiBuilder{lastSecuritySchemaIds=new Map;lastOperationIdSuffixes=new Map;references=new Map;makeRef(t,r,o=this.references.get(t)){return o||(o=`Schema${this.references.size+1}`,this.references.set(t,o),typeof r=="function"&&(r=r())),typeof r=="object"&&this.addSchema(o,r),{$ref:`#/components/schemas/${o}`}}ensureUniqOperationId(t,r,o){let s=o||ne(r,t),i=this.lastOperationIdSuffixes.get(s);if(i===void 0)return this.lastOperationIdSuffixes.set(s,1),s;if(o)throw new k(`Duplicated operationId: "${o}"`,{method:r,isResponse:!1,path:t});return i++,this.lastOperationIdSuffixes.set(s,i),`${s}${i}`}ensureUniqSecuritySchemaName(t){let r=JSON.stringify(t);for(let s in this.rootDoc.components?.securitySchemes||{})if(r===JSON.stringify(this.rootDoc.components?.securitySchemes?.[s]))return s;let o=(this.lastSecuritySchemaIds.get(t.type)||0)+1;return this.lastSecuritySchemaIds.set(t.type,o),`${t.type.toUpperCase()}_${o}`}constructor({routing:t,config:r,title:o,version:s,serverUrl:i,descriptions:a,brandHandling:c,hasSummaryFromDescription:d=!0,composition:p="inline"}){super(),this.addInfo({title:o,version:s});for(let u of typeof i=="string"?[i]:i)this.addServer({url:u});Fe({routing:t,onEndpoint:(u,y,b)=>{let P={path:y,method:b,endpoint:u,composition:p,brandHandling:c,makeRef:this.makeRef.bind(this)},[N,h]=["short","long"].map(u.getDescription.bind(u)),W=N?dr(N):d&&h?dr(h):void 0,E=u.getTags(),Z=r.inputSources?.[b]||Bt[b],M=this.ensureUniqOperationId(y,b,u.getOperationId(b)),q=Eo({...P,inputSources:Z,schema:u.getSchema("input"),description:a?.requestParameter?.call(null,{method:b,path:y,operationId:M})}),X={};for(let S of je){let me=u.getResponses(S);for(let{mimeTypes:Ge,schema:Dt,statusCodes:nt}of me)for(let _e of nt)X[_e]=Co({...P,variant:S,schema:Dt,mimeTypes:Ge,statusCode:_e,hasMultipleStatusCodes:me.length>1||nt.length>1,description:a?.[`${S}Response`]?.call(null,{method:b,path:y,operationId:M,statusCode:_e})})}let z=Z.includes("body")?vo({...P,paramNames:(0,jo.pluck)("name",q),schema:u.getSchema("input"),mimeType:R[u.getRequestType()],description:a?.requestBody?.call(null,{method:b,path:y,operationId:M})}):void 0,de=zt(Tt(Zo(u.getSecurity(),Z),S=>{let me=this.ensureUniqSecuritySchemaName(S),Ge=["oauth2","openIdConnect"].includes(S.type)?u.getScopes().slice():[];return this.addSecurityScheme(me,S),{name:me,scopes:Ge}}));this.addPath(Ro(y),{[b]:{operationId:M,summary:W,description:h,tags:E.length>0?E:void 0,parameters:q.length>0?q:void 0,requestBody:z,security:de.length>0?de:void 0,responses:X}})}}),this.rootDoc.tags=r.tags?No(r.tags):[]}};var Zt=require("node-mocks-http"),zs=e=>(0,Zt.createRequest)({...e,headers:{"content-type":R.json,...e?.headers}}),Cs=e=>(0,Zt.createResponse)(e),Zs=e=>{let t={warn:[],error:[],info:[],debug:[]};return new Proxy(e||{},{get(r,o,s){return o==="_getLogs"?()=>t:Br(o)?(...i)=>t[o].push(i):Reflect.get(r,o,s)}})},Lo=({requestProps:e,responseOptions:t,configProps:r,loggerProps:o})=>{let s=zs(e),i=Cs({req:s,...t});i.req=t?.req||s,s.res=i;let a=Zs(o),c={cors:!1,logger:a,...r};return{requestMock:s,responseMock:i,loggerMock:a,configMock:c}},Mo=async({endpoint:e,...t})=>{let{requestMock:r,responseMock:o,loggerMock:s,configMock:i}=Lo(t);return await e.execute({request:r,response:o,config:i,logger:s}),{requestMock:r,responseMock:o,loggerMock:s}},Ho=async({middleware:e,options:t={},errorHandler:r,...o})=>{let{requestMock:s,responseMock:i,loggerMock:a,configMock:c}=Lo(o),d=mt(s,c.inputSources);try{let p=await e.execute({request:s,response:i,logger:a,input:d,options:t});return{requestMock:s,responseMock:i,loggerMock:a,output:p}}catch(p){if(!r)throw p;return r(oe(p),i),{requestMock:s,responseMock:i,loggerMock:a,output:{}}}};var Wo=require("ramda"),L=C(require("typescript"),1),Xo=require("zod");var A=C(require("typescript"),1);var O=C(require("typescript"),1),{factory:mr}=O.default,pe=(e,t)=>O.default.addSyntheticLeadingComment(e,O.default.SyntaxKind.MultiLineCommentTrivia,`* ${t} `,!0),lr=(e,t)=>{let r=O.default.createSourceFile("print.ts","",O.default.ScriptTarget.Latest,!1,O.default.ScriptKind.TS);return O.default.createPrinter(t).printNode(O.default.EmitHint.Unspecified,e,r)},vs=/^[A-Za-z_$][A-Za-z0-9_$]*$/,Be=e=>typeof e=="number"?mr.createNumericLiteral(e):vs.test(e)?mr.createIdentifier(e):mr.createStringLiteral(e),Ns=[O.default.SyntaxKind.AnyKeyword,O.default.SyntaxKind.BigIntKeyword,O.default.SyntaxKind.BooleanKeyword,O.default.SyntaxKind.NeverKeyword,O.default.SyntaxKind.NumberKeyword,O.default.SyntaxKind.ObjectKeyword,O.default.SyntaxKind.StringKeyword,O.default.SyntaxKind.SymbolKeyword,O.default.SyntaxKind.UndefinedKeyword,O.default.SyntaxKind.UnknownKeyword,O.default.SyntaxKind.VoidKeyword],Uo=e=>Ns.includes(e.kind);var n=A.default.factory,Ae=[n.createModifier(A.default.SyntaxKind.ExportKeyword)],ks=[n.createModifier(A.default.SyntaxKind.AsyncKeyword)],js=[n.createModifier(A.default.SyntaxKind.PublicKeyword)],Ko=[n.createModifier(A.default.SyntaxKind.ProtectedKeyword),n.createModifier(A.default.SyntaxKind.ReadonlyKeyword)],Do=n.createToken(A.default.SyntaxKind.DotDotDotToken),Ls=n.createTemplateHead(""),Ms=n.createTemplateMiddle(" "),rt=n.createTemplateTail(""),qe=n.createExpressionWithTypeArguments(n.createIdentifier("Record"),[n.createKeywordTypeNode(A.default.SyntaxKind.StringKeyword),n.createKeywordTypeNode(A.default.SyntaxKind.AnyKeyword)]),Hs=e=>n.createTemplateLiteralType(Ls,e.map((t,r)=>n.createTemplateLiteralTypeSpan(n.createTypeReferenceNode(t),r===e.length-1?rt:Ms))),vt=Hs(["M","P"]),Nt=(e,t,r)=>n.createParameterDeclaration(Array.isArray(r)?r:void 0,Array.isArray(r)?void 0:r,e,void 0,t,void 0),$e=(e,t)=>Object.entries(e).map(([r,o])=>Nt(n.createIdentifier(r),o,t)),Fo=e=>n.createConstructorDeclaration(void 0,e,n.createBlock([])),ur=(e,t)=>n.createPropertySignature(void 0,Be(e),void 0,t),Bo=(...e)=>n.createArrayBindingPattern(e.map(t=>n.createBindingElement(void 0,void 0,t))),D=(e,t,r)=>n.createVariableDeclarationList([n.createVariableDeclaration(e,void 0,r,t)],A.default.NodeFlags.Const),fr=(e,t)=>F(e,n.createUnionTypeNode(t.map(r=>n.createLiteralTypeNode(n.createStringLiteral(r)))),{isPublic:!0}),F=(e,t,{isPublic:r,comment:o,params:s}={})=>{let i=n.createTypeAliasDeclaration(r?Ae:void 0,e,s&&Lt(s),t);return o?pe(i,o):i},qo=()=>F("SomeOf",n.createIndexedAccessTypeNode(n.createTypeReferenceNode("T"),ot("T")),{params:{T:void 0}}),kt=(e,t,r,o,s)=>n.createMethodDeclaration(js,void 0,e,void 0,o,t,s,r),$o=(e,t,r)=>n.createClassDeclaration(Ae,e,void 0,void 0,[t,...r]),ot=e=>n.createTypeOperatorNode(A.default.SyntaxKind.KeyOfKeyword,n.createTypeReferenceNode(e)),Vo=(e,t,r)=>n.createConditionalTypeNode(t,ot(e),n.createIndexedAccessTypeNode(n.createTypeReferenceNode(e),t),r),jt=e=>n.createTypeReferenceNode(Promise.name,[e==="any"?n.createKeywordTypeNode(A.default.SyntaxKind.AnyKeyword):e]),yr=(e,t,{isPublic:r,comment:o}={})=>{let s=n.createInterfaceDeclaration(r?Ae:void 0,e,void 0,void 0,t);return o?pe(s,o):s},Lt=e=>Object.entries(e).map(([t,r])=>n.createTypeParameterDeclaration([],t,r&&n.createTypeReferenceNode(r))),Go=(e,t,r)=>n.createArrowFunction(r?ks:void 0,void 0,e.map(o=>Nt(o)),void 0,void 0,t),gr=(e,t,r)=>n.createCallExpression(n.createPropertyAccessExpression(n.createCallExpression(n.createPropertyAccessExpression(n.createIdentifier(Object.name),I("keys")),void 0,[e]),I("reduce")),void 0,[n.createArrowFunction(void 0,void 0,$e({acc:void 0,key:void 0}),void 0,void 0,t),r]),I=e=>e,Ve=(e,t,r)=>n.createConditionalExpression(e,n.createToken(A.default.SyntaxKind.QuestionToken),t,n.createToken(A.default.SyntaxKind.ColonToken),r),B=(e,t,r)=>n.createCallExpression(n.createPropertyAccessExpression(Array.isArray(e)?n.createPropertyAccessExpression(...e):e,t),void 0,r),_o=(e,t)=>n.createBinaryExpression(e,n.createToken(A.default.SyntaxKind.AmpersandAmpersandToken),t),Jo=(e,t)=>n.createBinaryExpression(e,n.createToken(A.default.SyntaxKind.EqualsEqualsEqualsToken),t);var Yo=["get","post","put","delete","patch"];var Ht=require("ramda"),g=C(require("typescript"),1),Mt=require("zod");var{factory:f}=g.default,Us={[g.default.SyntaxKind.AnyKeyword]:"",[g.default.SyntaxKind.BigIntKeyword]:BigInt(0),[g.default.SyntaxKind.BooleanKeyword]:!1,[g.default.SyntaxKind.NumberKeyword]:0,[g.default.SyntaxKind.ObjectKeyword]:{},[g.default.SyntaxKind.StringKeyword]:"",[g.default.SyntaxKind.UndefinedKeyword]:void 0},Ks=({value:e})=>f.createLiteralTypeNode(typeof e=="number"?f.createNumericLiteral(e):typeof e=="boolean"?e?f.createTrue():f.createFalse():f.createStringLiteral(e)),Ds=({shape:e},{isResponse:t,next:r,optionalPropStyle:{withQuestionMark:o}})=>{let s=Object.entries(e).map(([i,a])=>{let c=t&&Ye(a)?a instanceof Mt.z.ZodOptional:a.isOptional(),d=f.createPropertySignature(void 0,Be(i),c&&o?f.createToken(g.default.SyntaxKind.QuestionToken):void 0,r(a));return a.description?pe(d,a.description):d});return f.createTypeLiteralNode(s)},Fs=({element:e},{next:t})=>f.createArrayTypeNode(t(e)),Bs=({options:e})=>f.createUnionTypeNode(e.map(t=>f.createLiteralTypeNode(f.createStringLiteral(t)))),Qo=({options:e},{next:t})=>{let r=new Map;for(let o of e){let s=t(o);r.set(Uo(s)?s.kind:s,s)}return f.createUnionTypeNode(Array.from(r.values()))},qs=e=>Us?.[e.kind],$s=(e,{next:t,isResponse:r})=>{let o=t(e.innerType());if(r&&e._def.effect.type==="transform"){let s=lt(e,qs(o)),i={number:g.default.SyntaxKind.NumberKeyword,bigint:g.default.SyntaxKind.BigIntKeyword,boolean:g.default.SyntaxKind.BooleanKeyword,string:g.default.SyntaxKind.StringKeyword,undefined:g.default.SyntaxKind.UndefinedKeyword,object:g.default.SyntaxKind.ObjectKeyword};return f.createKeywordTypeNode(s&&i[s]||g.default.SyntaxKind.AnyKeyword)}return o},Vs=e=>f.createUnionTypeNode(Object.values(e.enum).map(t=>f.createLiteralTypeNode(typeof t=="number"?f.createNumericLiteral(t):f.createStringLiteral(t)))),Gs=(e,{next:t,optionalPropStyle:{withUndefined:r}})=>{let o=t(e.unwrap());return r?f.createUnionTypeNode([o,f.createKeywordTypeNode(g.default.SyntaxKind.UndefinedKeyword)]):o},_s=(e,{next:t})=>f.createUnionTypeNode([t(e.unwrap()),f.createLiteralTypeNode(f.createNull())]),Js=({items:e,_def:{rest:t}},{next:r})=>f.createTupleTypeNode(e.map(r).concat(t===null?[]:f.createRestTypeNode(r(t)))),Ys=({keySchema:e,valueSchema:t},{next:r})=>f.createExpressionWithTypeArguments(f.createIdentifier("Record"),[e,t].map(r)),Qs=({_def:{left:e,right:t}},{next:r})=>{let o=[e,t].map(r);return o.every(g.default.isTypeLiteralNode)?f.createTypeLiteralNode((0,Ht.chain)((0,Ht.prop)("members"),o)):f.createIntersectionTypeNode(o)},Ws=({_def:e},{next:t})=>t(e.innerType),ce=e=>()=>f.createKeywordTypeNode(e),Xs=(e,{next:t})=>t(e.unwrap()),ei=(e,{next:t})=>t(e.unwrap()),ti=({_def:e},{next:t})=>t(e.innerType),ri=({_def:e},{next:t,isResponse:r})=>t(e[r?"out":"in"]),oi=()=>f.createLiteralTypeNode(f.createNull()),ni=(e,{makeAlias:t,next:r})=>t(e,()=>r(e.schema)),si=e=>{let t=e.unwrap(),r=f.createKeywordTypeNode(g.default.SyntaxKind.StringKeyword),o=f.createTypeReferenceNode("Buffer"),s=f.createUnionTypeNode([r,o]);return t instanceof Mt.z.ZodString?r:t instanceof Mt.z.ZodUnion?s:o},ii=(e,{next:t})=>t(e.unwrap().shape.raw),ai={ZodString:ce(g.default.SyntaxKind.StringKeyword),ZodNumber:ce(g.default.SyntaxKind.NumberKeyword),ZodBigInt:ce(g.default.SyntaxKind.BigIntKeyword),ZodBoolean:ce(g.default.SyntaxKind.BooleanKeyword),ZodAny:ce(g.default.SyntaxKind.AnyKeyword),ZodUndefined:ce(g.default.SyntaxKind.UndefinedKeyword),[he]:ce(g.default.SyntaxKind.StringKeyword),[xe]:ce(g.default.SyntaxKind.StringKeyword),ZodNull:oi,ZodArray:Fs,ZodTuple:Js,ZodRecord:Ys,ZodObject:Ds,ZodLiteral:Ks,ZodIntersection:Qs,ZodUnion:Qo,ZodDefault:Ws,ZodEnum:Bs,ZodNativeEnum:Vs,ZodEffects:$s,ZodOptional:Gs,ZodNullable:_s,ZodDiscriminatedUnion:Qo,ZodBranded:Xs,ZodCatch:ti,ZodPipeline:ri,ZodLazy:ni,ZodReadonly:ei,[V]:si,[se]:ii},hr=(e,{brandHandling:t,ctx:r})=>Oe(e,{rules:{...t,...ai},onMissing:()=>f.createKeywordTypeNode(g.default.SyntaxKind.AnyKeyword),ctx:r});var Ut=class{someOf=qo();program=[this.someOf];usage=[];registry=new Map;paths=new Set;aliases=new Map;ids={pathType:n.createIdentifier("Path"),methodType:n.createIdentifier("Method"),requestType:n.createIdentifier("Request"),methodPathType:n.createIdentifier("MethodPath"),inputInterface:n.createIdentifier("Input"),posResponseInterface:n.createIdentifier("PositiveResponse"),negResponseInterface:n.createIdentifier("NegativeResponse"),encResponseInterface:n.createIdentifier("EncodedResponse"),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"),requestParameter:n.createIdentifier("request"),args:n.createIdentifier("args"),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"),contentTypeConst:n.createIdentifier("contentType"),isJsonConst:n.createIdentifier("isJSON")};interfaces=[{id:this.ids.inputInterface,kind:"input",props:[]},{id:this.ids.posResponseInterface,kind:"positive",props:[]},{id:this.ids.negResponseInterface,kind:"negative",props:[]},{id:this.ids.encResponseInterface,kind:"encoded",props:[]},{id:this.ids.responseInterface,kind:"response",props:[]}];makeAlias(t,r){let o=this.aliases.get(t)?.name?.text;if(!o){o=`Type${this.aliases.size+1}`;let s=n.createLiteralTypeNode(n.createNull());this.aliases.set(t,F(o,s)),this.aliases.set(t,F(o,r()))}return n.createTypeReferenceNode(o)}makeSomeOf=({name:t})=>n.createTypeReferenceNode(this.someOf.name,[n.createTypeReferenceNode(t)]);constructor({routing:t,brandHandling:r,variant:o="client",serverUrl:s="https://example.com",optionalPropStyle:i={withQuestionMark:!0,withUndefined:!0},noContent:a=Xo.z.undefined()}){let c={makeAlias:this.makeAlias.bind(this),optionalPropStyle:i},d={brandHandling:r,ctx:{...c,isResponse:!1}},p={brandHandling:r,ctx:{...c,isResponse:!0}};Fe({routing:t,onEndpoint:(_,le,st)=>{let Je=ne.bind(null,st,le),H=`${st} ${le}`,it=F(Je("input"),hr(_.getSchema("input"),d),{comment:H});this.program.push(it);let at=je.reduce((Ft,pt)=>{let mn=_.getResponses(pt),ln=(0,Wo.chain)(([un,{schema:fn,mimeTypes:yn,statusCodes:gn}])=>{let Sr=F(Je(pt,"variant",`${un+1}`),hr(yn?fn:a,p),{comment:H});return this.program.push(Sr),gn.map(hn=>ur(hn,n.createTypeReferenceNode(Sr.name)))},Array.from(mn.entries())),br=yr(Je(pt,"response","variants"),ln,{comment:H});return this.program.push(br),Object.assign(Ft,{[pt]:br})},{});this.paths.add(le);let dn=_.getResponses("positive").some(({mimeTypes:Ft})=>Ft?.includes(R.json)),xr=n.createLiteralTypeNode(n.createStringLiteral(H));this.registry.set(H,{input:n.createTypeReferenceNode(it.name),positive:this.makeSomeOf(at.positive),negative:this.makeSomeOf(at.negative),response:n.createUnionTypeNode([n.createIndexedAccessTypeNode(n.createTypeReferenceNode(this.ids.posResponseInterface),xr),n.createIndexedAccessTypeNode(n.createTypeReferenceNode(this.ids.negResponseInterface),xr)]),encoded:n.createIntersectionTypeNode([n.createTypeReferenceNode(at.positive.name),n.createTypeReferenceNode(at.negative.name)]),tags:_.getTags(),isJson:dn})}}),this.program.unshift(...this.aliases.values()),this.program.push(fr(this.ids.pathType,Array.from(this.paths))),this.program.push(fr(this.ids.methodType,Yo));let u=[],y=[];for(let[_,{isJson:le,tags:st,...Je}]of this.registry){for(let H of this.interfaces)H.props.push(ur(_,Je[H.kind]));if(o!=="types"){let H=Be(_);le&&u.push(n.createPropertyAssignment(H,n.createTrue())),y.push(n.createPropertyAssignment(H,n.createArrayLiteralExpression(st.map(it=>n.createStringLiteral(it)))))}}for(let{id:_,props:le}of this.interfaces)this.program.push(yr(_,le,{isPublic:!0}));if(this.program.push(F(this.ids.requestType,ot(this.ids.inputInterface),{isPublic:!0})),this.program.push(F(this.ids.methodPathType,n.createTypeReferenceNode(this.ids.requestType),{isPublic:!0,comment:"@deprecated use Request instead"})),o==="types")return;let b=pe(n.createVariableStatement(Ae,D(this.ids.jsonEndpointsConst,n.createObjectLiteralExpression(u))),"@deprecated use content-type header of an actual response"),P=n.createVariableStatement(Ae,D(this.ids.endpointTagsConst,n.createObjectLiteralExpression(y))),N=F(this.ids.implementationType,n.createFunctionTypeNode(void 0,$e({[this.ids.methodParameter.text]:n.createTypeReferenceNode(this.ids.methodType),[this.ids.pathParameter.text]:n.createKeywordTypeNode(L.default.SyntaxKind.StringKeyword),[this.ids.paramsArgument.text]:qe}),jt("any")),{isPublic:!0}),h=n.createTemplateExpression(n.createTemplateHead(":"),[n.createTemplateSpan(this.ids.keyParameter,rt)]),W=gr(this.ids.paramsArgument,B(this.ids.accumulator,I("replace"),[h,n.createElementAccessExpression(this.ids.paramsArgument,this.ids.keyParameter)]),this.ids.pathParameter),E=gr(this.ids.paramsArgument,B(n.createIdentifier(Object.name),I("assign"),[this.ids.accumulator,_o(n.createPrefixUnaryExpression(L.default.SyntaxKind.ExclamationToken,B(this.ids.pathParameter,I("includes"),[h])),n.createObjectLiteralExpression([n.createPropertyAssignment(n.createComputedPropertyName(this.ids.keyParameter),n.createElementAccessExpression(this.ids.paramsArgument,this.ids.keyParameter))],!1))]),n.createObjectLiteralExpression()),Z=pe(kt(this.ids.provideMethod,$e({[this.ids.methodParameter.text]:n.createTypeReferenceNode("M"),[this.ids.pathParameter.text]:n.createTypeReferenceNode("P"),[this.ids.paramsArgument.text]:n.createConditionalTypeNode(vt,ot(this.ids.inputInterface),n.createIndexedAccessTypeNode(n.createTypeReferenceNode(this.ids.inputInterface),vt),qe)}),void 0,Lt({M:this.ids.methodType,P:this.ids.pathType}),jt(Vo(this.ids.responseInterface,vt,n.createKeywordTypeNode(L.default.SyntaxKind.UnknownKeyword)))),"@deprecated use the overload with 2 arguments instead"),M=kt(this.ids.provideMethod,$e({[this.ids.requestParameter.text]:n.createTypeReferenceNode("K"),[this.ids.paramsArgument.text]:n.createIndexedAccessTypeNode(n.createTypeReferenceNode(this.ids.inputInterface),n.createTypeReferenceNode("K"))}),void 0,Lt({K:this.ids.requestType}),jt(n.createIndexedAccessTypeNode(n.createTypeReferenceNode(this.ids.responseInterface),n.createTypeReferenceNode("K")))),q=kt(this.ids.provideMethod,$e({[this.ids.args.text]:n.createUnionTypeNode([n.createTupleTypeNode([n.createKeywordTypeNode(L.default.SyntaxKind.StringKeyword),n.createKeywordTypeNode(L.default.SyntaxKind.StringKeyword),qe]),n.createTupleTypeNode([n.createKeywordTypeNode(L.default.SyntaxKind.StringKeyword),qe])])},Do),n.createBlock([n.createVariableStatement(void 0,D(Bo(this.ids.methodParameter,this.ids.pathParameter,this.ids.paramsArgument),n.createAsExpression(n.createParenthesizedExpression(Ve(Jo(n.createPropertyAccessExpression(this.ids.args,I("length")),n.createNumericLiteral(2)),n.createArrayLiteralExpression([n.createSpreadElement(B(n.createElementAccessExpression(this.ids.args,0),I("split"),[n.createRegularExpressionLiteral("/ (.+)/"),n.createNumericLiteral(2)])),n.createElementAccessExpression(this.ids.args,1)]),this.ids.args)),n.createTupleTypeNode([n.createTypeReferenceNode(this.ids.methodType),n.createTypeReferenceNode(this.ids.pathType),qe])))),n.createReturnStatement(B(n.createThis(),this.ids.implementationArgument,[this.ids.methodParameter,W,E]))])),X=$o(this.ids.clientClass,Fo([Nt(this.ids.implementationArgument,n.createTypeReferenceNode(this.ids.implementationType),Ko)]),[Z,M,q]),z=F(this.ids.providerType,n.createIndexedAccessTypeNode(n.createTypeReferenceNode(this.ids.clientClass),n.createLiteralTypeNode(n.createStringLiteral(this.ids.provideMethod.text))),{isPublic:!0,comment:"@deprecated will be removed in v22"});this.program.push(b,P,N,X,z);let de=n.createPropertyAssignment(this.ids.methodParameter,B(this.ids.methodParameter,I("toUpperCase"))),S=n.createPropertyAssignment(this.ids.headersProperty,Ve(this.ids.hasBodyConst,n.createObjectLiteralExpression([n.createPropertyAssignment(n.createStringLiteral("Content-Type"),n.createStringLiteral(R.json))]),this.ids.undefinedValue)),me=n.createPropertyAssignment(this.ids.bodyProperty,Ve(this.ids.hasBodyConst,B(n.createIdentifier(JSON[Symbol.toStringTag]),I("stringify"),[this.ids.paramsArgument]),this.ids.undefinedValue)),Ge=n.createVariableStatement(void 0,D(this.ids.responseConst,n.createAwaitExpression(n.createCallExpression(n.createIdentifier(fetch.name),void 0,[n.createNewExpression(n.createIdentifier(URL.name),void 0,[n.createTemplateExpression(n.createTemplateHead(""),[n.createTemplateSpan(this.ids.pathParameter,n.createTemplateMiddle("")),n.createTemplateSpan(this.ids.searchParamsConst,rt)]),n.createStringLiteral(s)]),n.createObjectLiteralExpression([de,S,me])])))),Dt=n.createVariableStatement(void 0,D(this.ids.hasBodyConst,n.createLogicalNot(B(n.createArrayLiteralExpression([n.createStringLiteral("get"),n.createStringLiteral("delete")]),I("includes"),[this.ids.methodParameter])))),nt=n.createVariableStatement(void 0,D(this.ids.searchParamsConst,Ve(this.ids.hasBodyConst,n.createStringLiteral(""),n.createTemplateExpression(n.createTemplateHead("?"),[n.createTemplateSpan(n.createNewExpression(n.createIdentifier(URLSearchParams.name),void 0,[this.ids.paramsArgument]),rt)])))),_e=n.createVariableStatement(void 0,D(this.ids.contentTypeConst,B([this.ids.responseConst,this.ids.headersProperty],I("get"),[n.createStringLiteral("content-type")]))),on=n.createIfStatement(n.createPrefixUnaryExpression(L.default.SyntaxKind.ExclamationToken,this.ids.contentTypeConst),n.createReturnStatement(void 0),void 0),nn=n.createVariableStatement(void 0,D(this.ids.isJsonConst,n.createCallChain(n.createPropertyAccessChain(this.ids.contentTypeConst,void 0,I("startsWith")),void 0,void 0,[n.createStringLiteral(R.json)]))),sn=n.createReturnStatement(n.createCallExpression(n.createElementAccessExpression(this.ids.responseConst,Ve(this.ids.isJsonConst,n.createStringLiteral(I("json")),n.createStringLiteral(I("text")))),void 0,[])),an=n.createVariableStatement(Ae,D(this.ids.exampleImplementationConst,Go([this.ids.methodParameter,this.ids.pathParameter,this.ids.paramsArgument],n.createBlock([Dt,nt,Ge,_e,on,nn,sn]),!0),n.createTypeReferenceNode(this.ids.implementationType))),pn=n.createExpressionStatement(B(this.ids.clientConst,this.ids.provideMethod,[n.createStringLiteral("get /v1/user/retrieve"),n.createObjectLiteralExpression([n.createPropertyAssignment("id",n.createStringLiteral("10"))])])),cn=n.createVariableStatement(void 0,D(this.ids.clientConst,n.createNewExpression(this.ids.clientClass,void 0,[this.ids.exampleImplementationConst])));this.usage.push(an,cn,pn)}printUsage(t){return this.usage.length?this.usage.map(r=>typeof r=="string"?r:lr(r,t)).join(`
19
19
  `):void 0}print(t){let r=this.printUsage(t),o=r&&L.default.addSyntheticLeadingComment(L.default.addSyntheticLeadingComment(n.createEmptyStatement(),L.default.SyntaxKind.SingleLineCommentTrivia," Usage example:"),L.default.SyntaxKind.MultiLineCommentTrivia,`
20
20
  ${r}`);return this.program.concat(o||[]).map((s,i)=>lr(s,i<this.program.length?t:{...t,omitTrailingSemicolon:!0})).join(`
21
21
 
22
22
  `)}async printFormatted({printerOptions:t,format:r}={}){let o=r;if(!o)try{let a=(await De("prettier")).format;o=c=>a(c,{filepath:"client.ts"})}catch{}let s=this.printUsage(t);this.usage=s&&o?[await o(s)]:this.usage;let i=this.print(t);return o?o(i):i}};var Pe=require("zod");var tn=(e,t)=>Pe.z.object({data:t,event:Pe.z.literal(e),id:Pe.z.string().optional(),retry:Pe.z.number().int().positive().optional()}),pi=(e,t,r)=>tn(String(t),e[t]).transform(o=>[`event: ${o.event}`,`data: ${JSON.stringify(o.data)}`,"",""].join(`
23
- `)).parse({event:t,data:r}),ci=1e4,en=e=>e.headersSent||e.writeHead(200,{connection:"keep-alive","content-type":R.sse,"cache-control":"no-cache"}),di=e=>new U({handler:async({response:t})=>setTimeout(()=>en(t),ci)&&{isClosed:()=>t.writableEnded||t.closed,emit:(r,o)=>{en(t),t.write(pi(e,r,o),"utf-8"),t.flush()}}}),mi=e=>new ie({positive:()=>{let[t,...r]=Object.entries(e).map(([o,s])=>tn(o,s));return{mimeType:R.sse,schema:r.length?Pe.z.discriminatedUnion("event",[t,...r]):t}},negative:{mimeType:"text/plain",schema:Pe.z.string()},handler:async({response:t,error:r,logger:o,request:s,input:i})=>{if(r){let a=be(r);Xe(a,o,s,i),t.headersSent||t.status(a.statusCode).type("text/plain").write(Se(a),"utf-8")}t.end()}}),Kt=class extends ae{constructor({events:t,config:r}){super({config:r,resultHandler:mi(t)}),this.middlewares=[di(t)]}};var rn={dateIn:Pr,dateOut:Ir,file:gt,upload:vr,raw:Cr};0&&(module.exports={BuiltinLogger,DependsOnMethod,Documentation,DocumentationError,EndpointsFactory,EventStreamFactory,InputValidationError,Integration,Middleware,MissingPeerError,OutputValidationError,ResultHandler,RoutingError,ServeStatic,arrayEndpointsFactory,arrayResultHandler,attachRouting,createConfig,createServer,defaultEndpointsFactory,defaultResultHandler,ensureHttpError,ez,getExamples,getMessageFromError,testEndpoint,testMiddleware});
23
+ `)).parse({event:t,data:r}),ci=1e4,en=e=>e.headersSent||e.writeHead(200,{connection:"keep-alive","content-type":R.sse,"cache-control":"no-cache"}),di=e=>new U({handler:async({response:t})=>setTimeout(()=>en(t),ci)&&{isClosed:()=>t.writableEnded||t.closed,emit:(r,o)=>{en(t),t.write(pi(e,r,o),"utf-8"),t.flush?.()}}}),mi=e=>new ie({positive:()=>{let[t,...r]=Object.entries(e).map(([o,s])=>tn(o,s));return{mimeType:R.sse,schema:r.length?Pe.z.discriminatedUnion("event",[t,...r]):t}},negative:{mimeType:"text/plain",schema:Pe.z.string()},handler:async({response:t,error:r,logger:o,request:s,input:i})=>{if(r){let a=be(r);Xe(a,o,s,i),t.headersSent||t.status(a.statusCode).type("text/plain").write(Se(a),"utf-8")}t.end()}}),Kt=class extends ae{constructor({events:t,config:r}){super({config:r,resultHandler:mi(t)}),this.middlewares=[di(t)]}};var rn={dateIn:Pr,dateOut:Ir,file:gt,upload:vr,raw:Cr};0&&(module.exports={BuiltinLogger,DependsOnMethod,Documentation,DocumentationError,EndpointsFactory,EventStreamFactory,InputValidationError,Integration,Middleware,MissingPeerError,OutputValidationError,ResultHandler,RoutingError,ServeStatic,arrayEndpointsFactory,arrayResultHandler,attachRouting,createConfig,createServer,defaultEndpointsFactory,defaultResultHandler,ensureHttpError,ez,getExamples,getMessageFromError,testEndpoint,testMiddleware});
package/dist/index.js CHANGED
@@ -15,9 +15,9 @@ ${s}888${r}
15
15
  ${o}
16
16
  `;e.write(d.split(`
17
17
  `).map((p,m)=>c[m]?c[m](p):p).join(`
18
- `))};var Yr=e=>{e.startupLogo!==!1&&Jr(process.stdout);let t=e.errorHandler||Fe,r=wr(e.logger)?e.logger:new Be(e.logger);r.debug("Running",{build:"v21.11.1 (ESM)",env:process.env.NODE_ENV||"development"}),Vr(r);let o=qr({logger:r,config:e}),i={getLogger:$r(r),errorHandler:t},a=Dr(i),c=Kr(i);return{...i,logger:r,notFoundHandler:a,parserFailureHandler:c,loggingMiddleware:o}},qn=(e,t)=>{let{logger:r,getLogger:o,notFoundHandler:s,loggingMiddleware:i}=Yr(e);return Kt({app:e.app.use(i),routing:t,getLogger:o,config:e}),{notFoundHandler:s,logger:r}},$n=async(e,t)=>{let{logger:r,getLogger:o,notFoundHandler:s,parserFailureHandler:i,loggingMiddleware:a}=Yr(e),c=Dt().disable("x-powered-by").use(a);if(e.compression){let f=await we("compression");c.use(f(typeof e.compression=="object"?e.compression:void 0))}let d={json:[e.jsonParser||Dt.json()],raw:[e.rawParser||Dt.raw(),Br],upload:e.upload?await Fr({config:e,getLogger:o}):[]};await e.beforeRouting?.({app:c,getLogger:o}),Kt({app:c,routing:t,getLogger:o,config:e,parsers:d}),c.use(i,s);let p=[],m=(f,x)=>()=>f.listen(x,()=>r.info("Listening",x)),l=[];if(e.http){let f=Fn.createServer(c);p.push(f),l.push(m(f,e.http.listen))}if(e.https){let f=Bn.createServer(e.https.options,c);p.push(f),l.push(m(f,e.https.listen))}return e.gracefulShutdown&&Gr({logger:r,servers:p,options:e.gracefulShutdown===!0?{}:e.gracefulShutdown}),{app:c,logger:r,servers:l.map(f=>f())}};import{OpenApiBuilder as Ws}from"openapi3-ts/oas31";import{pluck as Xs}from"ramda";import{isReferenceObject as qt,isSchemaObject as gt}from"openapi3-ts/oas31";import{concat as Vn,type as Xr,filter as Gn,fromPairs as ht,has as _n,isNil as Jn,map as Ee,mergeAll as Yn,mergeDeepRight as Qn,mergeDeepWith as Wn,objOf as eo,omit as xt,pipe as to,pluck as Xn,reject as es,times as ts,toLower as rs,union as os,when as ns,xprod as Ft,zip as ss}from"ramda";import{z as S}from"zod";var le=(e,{onEach:t,rules:r,onMissing:o,ctx:s={}})=>{let i=r[e._def[h]?.brand]||r[e._def.typeName],c=i?i(e,{...s,next:p=>le(p,{ctx:s,onEach:t,rules:r,onMissing:o})}):o(e,s),d=t&&t(e,{prev:c,...s});return d?{...c,...d}:c};var Qr=50,ro="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString",is={integer:0,number:0,string:"",boolean:!1,object:{},null:null,array:[]},oo=/:([A-Za-z0-9_]+)/g,as=/^\d{4}-\d{2}-\d{2}$/,ps=/^\d{2}:\d{2}:\d{2}(\.\d+)?$/,cs=e=>e?/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(([+-]\d{2}:\d{2})|Z)$/:/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?Z$/,ds=e=>e.match(oo)?.map(t=>t.slice(1))||[],no=e=>e.replace(oo,t=>`{${t.slice(1)}}`),ms=({_def:e},{next:t})=>({...t(e.innerType),default:e[h]?.defaultLabel||e.defaultValue()}),ls=({_def:{innerType:e}},{next:t})=>t(e),us=()=>({format:"any"}),fs=({},e)=>{if(e.isResponse)throw new N("Please use ez.upload() only for input.",e);return{type:"string",format:"binary"}},ys=e=>{let t=e.unwrap();return{type:"string",format:t instanceof S.ZodString?t._def.checks.find(r=>r.kind==="base64")?"byte":"file":"binary"}},gs=({options:e},{next:t})=>({oneOf:e.map(t)}),hs=({options:e,discriminator:t},{next:r})=>({discriminator:{propertyName:t},oneOf:e.map(r)}),xs=(e,t)=>{if(Array.isArray(e)&&Array.isArray(t))return Vn(e,t);if(e===t)return t;throw new Error("Can not flatten properties")},bs=e=>{let[t,r]=e.filter(gt).filter(s=>s.type==="object"&&Object.keys(s).every(i=>["type","properties","required","examples"].includes(i)));if(!t||!r)throw new Error("Can not flatten objects");let o={type:"object"};return(t.properties||r.properties)&&(o.properties=Wn(xs,t.properties||{},r.properties||{})),(t.required||r.required)&&(o.required=os(t.required||[],r.required||[])),(t.examples||r.examples)&&(o.examples=ne(t.examples||[],r.examples||[],([s,i])=>Qn(s,i))),o},Ss=({_def:{left:e,right:t}},{next:r})=>{let o=[e,t].map(r);try{return bs(o)}catch{}return{allOf:o}},Ts=(e,{next:t})=>t(e.unwrap()),Os=(e,{next:t})=>t(e.unwrap()),Rs=(e,{next:t})=>{let r=t(e.unwrap());return gt(r)&&(r.type=io(r)),r},so=e=>{let t=rs(Xr(e));return typeof e=="bigint"?"integer":t==="number"||t==="string"||t==="boolean"||t==="object"||t==="null"||t==="array"?t:void 0},Wr=e=>({type:so(Object.values(e.enum)[0]),enum:Object.values(e.enum)}),As=({value:e})=>({type:so(e),const:e}),Ps=(e,{isResponse:t,next:r})=>{let o=Object.keys(e.shape),s=c=>t&&He(c)?c instanceof S.ZodOptional:c.isOptional(),i=o.filter(c=>!s(e.shape[c])),a={type:"object"};return o.length&&(a.properties=yt(e,r)),i.length&&(a.required=i),a},ws=()=>({type:"null"}),Is=({},e)=>{if(e.isResponse)throw new N("Please use ez.dateOut() for output.",e);return{description:"YYYY-MM-DDTHH:mm:ss.sssZ",type:"string",format:"date-time",pattern:/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$/.source,externalDocs:{url:ro}}},Es=({},e)=>{if(!e.isResponse)throw new N("Please use ez.dateIn() for input.",e);return{description:"YYYY-MM-DDTHH:mm:ss.sssZ",type:"string",format:"date-time",externalDocs:{url:ro}}},zs=({},e)=>{throw new N(`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)},Cs=()=>({type:"boolean"}),Zs=()=>({type:"integer",format:"bigint"}),vs=e=>e.every(t=>t instanceof S.ZodLiteral),Ns=({keySchema:e,valueSchema:t},{next:r})=>{if(e instanceof S.ZodEnum||e instanceof S.ZodNativeEnum){let o=Object.values(e.enum),s={type:"object"};return o.length&&(s.properties=yt(S.object(ht(Ft(o,[t]))),r),s.required=o),s}if(e instanceof S.ZodLiteral)return{type:"object",properties:yt(S.object({[e.value]:t}),r),required:[e.value]};if(e instanceof S.ZodUnion&&vs(e.options)){let o=Ee(i=>`${i.value}`,e.options),s=ht(Ft(o,[t]));return{type:"object",properties:yt(S.object(s),r),required:o}}return{type:"object",additionalProperties:r(t)}},ks=({_def:{minLength:e,maxLength:t},element:r},{next:o})=>{let s={type:"array",items:o(r)};return e&&(s.minItems=e.value),t&&(s.maxItems=t.value),s},js=({items:e,_def:{rest:t}},{next:r})=>({type:"array",prefixItems:e.map(r),items:t===null?{not:{}}:r(t)}),Ls=({isEmail:e,isURL:t,minLength:r,maxLength:o,isUUID:s,isCUID:i,isCUID2:a,isULID:c,isIP:d,isEmoji:p,isDatetime:m,isCIDR:l,isDate:f,isTime:x,isBase64:A,isNANOID:C,isBase64url:y,isDuration:q,_def:{checks:w}})=>{let z=w.find(b=>b.kind==="regex"),Z=w.find(b=>b.kind==="datetime"),H=w.some(b=>b.kind==="jwt"),$=w.find(b=>b.kind==="length"),I={type:"string"},X={"date-time":m,byte:A,base64url:y,date:f,time:x,duration:q,email:e,url:t,uuid:s,cuid:i,cuid2:a,ulid:c,nanoid:C,jwt:H,ip:d,cidr:l,emoji:p};for(let b in X)if(X[b]){I.format=b;break}return $&&([I.minLength,I.maxLength]=[$.value,$.value]),r!==null&&(I.minLength=r),o!==null&&(I.maxLength=o),f&&(I.pattern=as.source),x&&(I.pattern=ps.source),m&&(I.pattern=cs(Z?.offset).source),z&&(I.pattern=z.regex.source),I},Ms=({isInt:e,maxValue:t,minValue:r,_def:{checks:o}})=>{let s=o.find(l=>l.kind==="min"),i=r===null?e?Number.MIN_SAFE_INTEGER:-Number.MAX_VALUE:r,a=s?s.inclusive:!0,c=o.find(l=>l.kind==="max"),d=t===null?e?Number.MAX_SAFE_INTEGER:Number.MAX_VALUE:t,p=c?c.inclusive:!0,m={type:e?"integer":"number",format:e?"int64":"double"};return a?m.minimum=i:m.exclusiveMinimum=i,p?m.maximum=d:m.exclusiveMaximum=d,m},yt=({shape:e},t)=>Ee(t,e),Hs=e=>{let t=Array.isArray(e.type)?e.type[0]:e.type;return is?.[t]},io=({type:e})=>e==="null"?e:typeof e=="string"?[e,"null"]:e?[...new Set(e).add("null")]:"null",Us=(e,{isResponse:t,next:r})=>{let o=r(e.innerType()),{effect:s}=e._def;if(t&&s.type==="transform"&&gt(o)){let i=tt(e,Hs(o));return i&&["number","string","boolean"].includes(i)?{type:i}:r(S.any())}if(!t&&s.type==="preprocess"&&gt(o)){let{type:i,...a}=o;return{...a,format:`${a.format||i} (preprocessed)`}}return o},Ks=({_def:e},{isResponse:t,next:r})=>r(e[t?"out":"in"]),Ds=(e,{next:t})=>t(e.unwrap()),Fs=(e,{next:t,makeRef:r})=>r(e,()=>t(e.schema)),Bs=(e,{next:t})=>t(e.unwrap().shape.raw),ao=e=>e.length?ht(ss(ts(t=>`example${t+1}`,e.length),Ee(eo("value"),e))):void 0,po=(e,t,r=[])=>to(_,Ee(ns(o=>Xr(o)==="Object",xt(r))),ao)({schema:e,variant:t?"parsed":"original",validate:!0}),qs=(e,t)=>to(_,Gn(_n(t)),Xn(t),ao)({schema:e,variant:"original",validate:!0}),ue=e=>e instanceof S.ZodObject?e:e instanceof S.ZodBranded?ue(e.unwrap()):e instanceof S.ZodUnion||e instanceof S.ZodDiscriminatedUnion?e.options.map(t=>ue(t)).reduce((t,r)=>t.merge(r.partial()),S.object({})):e instanceof S.ZodEffects?ue(e._def.schema):e instanceof S.ZodPipeline?ue(e._def.in):ue(e._def.left).merge(ue(e._def.right)),co=({path:e,method:t,schema:r,inputSources:o,makeRef:s,composition:i,brandHandling:a,description:c=`${t.toUpperCase()} ${e} Parameter`})=>{let{shape:d}=ue(r),p=ds(e),m=o.includes("query"),l=o.includes("params"),f=o.includes("headers"),x=y=>l&&p.includes(y),A=y=>f&&zt(y);return Object.keys(d).map(y=>({name:y,location:x(y)?"path":A(y)?"header":m?"query":void 0})).filter(y=>y.location!==void 0).map(({name:y,location:q})=>{let w=le(d[y],{rules:{...a,...$t},onEach:Vt,onMissing:Gt,ctx:{isResponse:!1,makeRef:s,path:e,method:t}}),z=i==="components"?s(d[y],w,J(c,y)):w;return{name:y,in:q,required:!d[y].isOptional(),description:w.description||c,schema:z,examples:qs(r,y)}})},$t={ZodString:Ls,ZodNumber:Ms,ZodBigInt:Zs,ZodBoolean:Cs,ZodNull:ws,ZodArray:ks,ZodTuple:js,ZodRecord:Ns,ZodObject:Ps,ZodLiteral:As,ZodIntersection:Ss,ZodUnion:gs,ZodAny:us,ZodDefault:ms,ZodEnum:Wr,ZodNativeEnum:Wr,ZodEffects:Us,ZodOptional:Ts,ZodNullable:Rs,ZodDiscriminatedUnion:hs,ZodBranded:Ds,ZodDate:zs,ZodCatch:ls,ZodPipeline:Ks,ZodLazy:Fs,ZodReadonly:Os,[U]:ys,[xe]:fs,[ae]:Es,[ie]:Is,[Y]:Bs},Vt=(e,{isResponse:t,prev:r})=>{if(qt(r))return{};let{description:o}=e,s=e instanceof S.ZodLazy,i=r.type!==void 0,a=t&&He(e),c=!s&&i&&!a&&e.isNullable(),d={};if(o&&(d.description=o),c&&(d.type=io(r)),!s){let p=_({schema:e,variant:t?"parsed":"original",validate:!0});p.length&&(d.examples=p.slice())}return d},Gt=(e,t)=>{throw new N(`Zod type ${e.constructor.name} is unsupported.`,t)},Bt=(e,t)=>{if(qt(e))return e;let r={...e};return r.properties&&(r.properties=xt(t,r.properties)),r.examples&&(r.examples=r.examples.map(o=>xt(t,o))),r.required&&(r.required=r.required.filter(o=>!t.includes(o))),r.allOf&&(r.allOf=r.allOf.map(o=>Bt(o,t))),r.oneOf&&(r.oneOf=r.oneOf.map(o=>Bt(o,t))),r},mo=e=>qt(e)?e:xt(["examples"],e),lo=({method:e,path:t,schema:r,mimeTypes:o,variant:s,makeRef:i,composition:a,hasMultipleStatusCodes:c,statusCode:d,brandHandling:p,description:m=`${e.toUpperCase()} ${t} ${Ct(s)} response ${c?d:""}`.trim()})=>{if(!o)return{description:m};let l=mo(le(r,{rules:{...p,...$t},onEach:Vt,onMissing:Gt,ctx:{isResponse:!0,makeRef:i,path:t,method:e}})),f={schema:a==="components"?i(r,l,J(m)):l,examples:po(r,!0)};return{description:m,content:ht(Ft(o,[f]))}},$s=()=>({type:"http",scheme:"basic"}),Vs=({format:e})=>{let t={type:"http",scheme:"bearer"};return e&&(t.bearerFormat=e),t},Gs=({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},_s=({name:e})=>({type:"apiKey",in:"header",name:e}),Js=({name:e})=>({type:"apiKey",in:"cookie",name:e}),Ys=({url:e})=>({type:"openIdConnect",openIdConnectUrl:e}),Qs=({flows:e={}})=>({type:"oauth2",flows:Ee(t=>({...t,scopes:t.scopes||{}}),es(Jn,e))}),uo=(e,t)=>{let r={basic:$s,bearer:Vs,input:Gs,header:_s,cookie:Js,openid:Ys,oauth2:Qs};return ct(e,o=>r[o.type](o,t))},bt=e=>"or"in e?e.or.map(t=>"and"in t?Yn(Ee(({name:r,scopes:o})=>eo(r,o),t.and)):{[t.name]:t.scopes}):"and"in e?bt(jt(e)):bt({or:[e]}),fo=({method:e,path:t,schema:r,mimeType:o,makeRef:s,composition:i,brandHandling:a,paramNames:c,description:d=`${e.toUpperCase()} ${t} Request body`})=>{let p=mo(Bt(le(r,{rules:{...a,...$t},onEach:Vt,onMissing:Gt,ctx:{isResponse:!1,makeRef:s,path:t,method:e}}),c)),m={schema:i==="components"?s(r,p,J(d)):p,examples:po(r,!1,c)};return{description:d,content:{[o]:m}}},yo=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}),_t=e=>e.length<=Qr?e:e.slice(0,Qr-1)+"\u2026";var Jt=class extends Ws{lastSecuritySchemaIds=new Map;lastOperationIdSuffixes=new Map;references=new Map;makeRef(t,r,o=this.references.get(t)){return o||(o=`Schema${this.references.size+1}`,this.references.set(t,o),typeof r=="function"&&(r=r())),typeof r=="object"&&this.addSchema(o,r),{$ref:`#/components/schemas/${o}`}}ensureUniqOperationId(t,r,o){let s=o||J(r,t),i=this.lastOperationIdSuffixes.get(s);if(i===void 0)return this.lastOperationIdSuffixes.set(s,1),s;if(o)throw new N(`Duplicated operationId: "${o}"`,{method:r,isResponse:!1,path:t});return i++,this.lastOperationIdSuffixes.set(s,i),`${s}${i}`}ensureUniqSecuritySchemaName(t){let r=JSON.stringify(t);for(let s in this.rootDoc.components?.securitySchemes||{})if(r===JSON.stringify(this.rootDoc.components?.securitySchemes?.[s]))return s;let o=(this.lastSecuritySchemaIds.get(t.type)||0)+1;return this.lastSecuritySchemaIds.set(t.type,o),`${t.type.toUpperCase()}_${o}`}constructor({routing:t,config:r,title:o,version:s,serverUrl:i,descriptions:a,brandHandling:c,hasSummaryFromDescription:d=!0,composition:p="inline"}){super(),this.addInfo({title:o,version:s});for(let l of typeof i=="string"?[i]:i)this.addServer({url:l});Ie({routing:t,onEndpoint:(l,f,x)=>{let A={path:f,method:x,endpoint:l,composition:p,brandHandling:c,makeRef:this.makeRef.bind(this)},[C,y]=["short","long"].map(l.getDescription.bind(l)),q=C?_t(C):d&&y?_t(y):void 0,w=l.getTags(),z=r.inputSources?.[x]||It[x],Z=this.ensureUniqOperationId(f,x,l.getOperationId(x)),H=co({...A,inputSources:z,schema:l.getSchema("input"),description:a?.requestParameter?.call(null,{method:x,path:f,operationId:Z})}),$={};for(let b of Pe){let ee=l.getResponses(b);for(let{mimeTypes:ke,schema:Pt,statusCodes:_e}of ee)for(let je of _e)$[je]=lo({...A,variant:b,schema:Pt,mimeTypes:ke,statusCode:je,hasMultipleStatusCodes:ee.length>1||_e.length>1,description:a?.[`${b}Response`]?.call(null,{method:x,path:f,operationId:Z,statusCode:je})})}let I=z.includes("body")?fo({...A,paramNames:Xs("name",H),schema:l.getSchema("input"),mimeType:O[l.getRequestType()],description:a?.requestBody?.call(null,{method:x,path:f,operationId:Z})}):void 0,X=bt(ct(uo(l.getSecurity(),z),b=>{let ee=this.ensureUniqSecuritySchemaName(b),ke=["oauth2","openIdConnect"].includes(b.type)?l.getScopes().slice():[];return this.addSecurityScheme(ee,b),{name:ee,scopes:ke}}));this.addPath(no(f),{[x]:{operationId:Z,summary:q,description:y,tags:w.length>0?w:void 0,parameters:H.length>0?H:void 0,requestBody:I,security:X.length>0?X:void 0,responses:$}})}}),this.rootDoc.tags=r.tags?yo(r.tags):[]}};import{createRequest as ei,createResponse as ti}from"node-mocks-http";var ri=e=>ei({...e,headers:{"content-type":O.json,...e?.headers}}),oi=e=>ti(e),ni=e=>{let t={warn:[],error:[],info:[],debug:[]};return new Proxy(e||{},{get(r,o,s){return o==="_getLogs"?()=>t:Ir(o)?(...i)=>t[o].push(i):Reflect.get(r,o,s)}})},go=({requestProps:e,responseOptions:t,configProps:r,loggerProps:o})=>{let s=ri(e),i=oi({req:s,...t});i.req=t?.req||s,s.res=i;let a=ni(o),c={cors:!1,logger:a,...r};return{requestMock:s,responseMock:i,loggerMock:a,configMock:c}},si=async({endpoint:e,...t})=>{let{requestMock:r,responseMock:o,loggerMock:s,configMock:i}=go(t);return await e.execute({request:r,response:o,config:i,logger:s}),{requestMock:r,responseMock:o,loggerMock:s}},ii=async({middleware:e,options:t={},errorHandler:r,...o})=>{let{requestMock:s,responseMock:i,loggerMock:a,configMock:c}=go(o),d=et(s,c.inputSources);try{let p=await e.execute({request:s,response:i,logger:a,input:d,options:t});return{requestMock:s,responseMock:i,loggerMock:a,output:p}}catch(p){if(!r)throw p;return r(G(p),i),{requestMock:s,responseMock:i,loggerMock:a,output:{}}}};import{chain as Ui}from"ramda";import M from"typescript";import{z as Ki}from"zod";import R from"typescript";import T from"typescript";var{factory:Yt}=T,Q=(e,t)=>T.addSyntheticLeadingComment(e,T.SyntaxKind.MultiLineCommentTrivia,`* ${t} `,!0),Qt=(e,t)=>{let r=T.createSourceFile("print.ts","",T.ScriptTarget.Latest,!1,T.ScriptKind.TS);return T.createPrinter(t).printNode(T.EmitHint.Unspecified,e,r)},ai=/^[A-Za-z_$][A-Za-z0-9_$]*$/,ze=e=>typeof e=="number"?Yt.createNumericLiteral(e):ai.test(e)?Yt.createIdentifier(e):Yt.createStringLiteral(e),pi=[T.SyntaxKind.AnyKeyword,T.SyntaxKind.BigIntKeyword,T.SyntaxKind.BooleanKeyword,T.SyntaxKind.NeverKeyword,T.SyntaxKind.NumberKeyword,T.SyntaxKind.ObjectKeyword,T.SyntaxKind.StringKeyword,T.SyntaxKind.SymbolKeyword,T.SyntaxKind.UndefinedKeyword,T.SyntaxKind.UnknownKeyword,T.SyntaxKind.VoidKeyword],ho=e=>pi.includes(e.kind);var n=R.factory,fe=[n.createModifier(R.SyntaxKind.ExportKeyword)],ci=[n.createModifier(R.SyntaxKind.AsyncKeyword)],di=[n.createModifier(R.SyntaxKind.PublicKeyword)],xo=[n.createModifier(R.SyntaxKind.ProtectedKeyword),n.createModifier(R.SyntaxKind.ReadonlyKeyword)],bo=n.createToken(R.SyntaxKind.DotDotDotToken),mi=n.createTemplateHead(""),li=n.createTemplateMiddle(" "),Ve=n.createTemplateTail(""),Ce=n.createExpressionWithTypeArguments(n.createIdentifier("Record"),[n.createKeywordTypeNode(R.SyntaxKind.StringKeyword),n.createKeywordTypeNode(R.SyntaxKind.AnyKeyword)]),ui=e=>n.createTemplateLiteralType(mi,e.map((t,r)=>n.createTemplateLiteralTypeSpan(n.createTypeReferenceNode(t),r===e.length-1?Ve:li))),St=ui(["M","P"]),Tt=(e,t,r)=>n.createParameterDeclaration(Array.isArray(r)?r:void 0,Array.isArray(r)?void 0:r,e,void 0,t,void 0),Ze=(e,t)=>Object.entries(e).map(([r,o])=>Tt(n.createIdentifier(r),o,t)),So=e=>n.createConstructorDeclaration(void 0,e,n.createBlock([])),Wt=(e,t)=>n.createPropertySignature(void 0,ze(e),void 0,t),To=(...e)=>n.createArrayBindingPattern(e.map(t=>n.createBindingElement(void 0,void 0,t))),k=(e,t,r)=>n.createVariableDeclarationList([n.createVariableDeclaration(e,void 0,r,t)],R.NodeFlags.Const),Xt=(e,t)=>j(e,n.createUnionTypeNode(t.map(r=>n.createLiteralTypeNode(n.createStringLiteral(r)))),{isPublic:!0}),j=(e,t,{isPublic:r,comment:o,params:s}={})=>{let i=n.createTypeAliasDeclaration(r?fe:void 0,e,s&&At(s),t);return o?Q(i,o):i},Oo=()=>j("SomeOf",n.createIndexedAccessTypeNode(n.createTypeReferenceNode("T"),Ge("T")),{params:{T:void 0}}),Ot=(e,t,r,o,s)=>n.createMethodDeclaration(di,void 0,e,void 0,o,t,s,r),Ro=(e,t,r)=>n.createClassDeclaration(fe,e,void 0,void 0,[t,...r]),Ge=e=>n.createTypeOperatorNode(R.SyntaxKind.KeyOfKeyword,n.createTypeReferenceNode(e)),Ao=(e,t,r)=>n.createConditionalTypeNode(t,Ge(e),n.createIndexedAccessTypeNode(n.createTypeReferenceNode(e),t),r),Rt=e=>n.createTypeReferenceNode(Promise.name,[e==="any"?n.createKeywordTypeNode(R.SyntaxKind.AnyKeyword):e]),er=(e,t,{isPublic:r,comment:o}={})=>{let s=n.createInterfaceDeclaration(r?fe:void 0,e,void 0,void 0,t);return o?Q(s,o):s},At=e=>Object.entries(e).map(([t,r])=>n.createTypeParameterDeclaration([],t,r&&n.createTypeReferenceNode(r))),Po=(e,t,r)=>n.createArrowFunction(r?ci:void 0,void 0,e.map(o=>Tt(o)),void 0,void 0,t),tr=(e,t,r)=>n.createCallExpression(n.createPropertyAccessExpression(n.createCallExpression(n.createPropertyAccessExpression(n.createIdentifier(Object.name),P("keys")),void 0,[e]),P("reduce")),void 0,[n.createArrowFunction(void 0,void 0,Ze({acc:void 0,key:void 0}),void 0,void 0,t),r]),P=e=>e,ve=(e,t,r)=>n.createConditionalExpression(e,n.createToken(R.SyntaxKind.QuestionToken),t,n.createToken(R.SyntaxKind.ColonToken),r),L=(e,t,r)=>n.createCallExpression(n.createPropertyAccessExpression(Array.isArray(e)?n.createPropertyAccessExpression(...e):e,t),void 0,r),wo=(e,t)=>n.createBinaryExpression(e,n.createToken(R.SyntaxKind.AmpersandAmpersandToken),t),Io=(e,t)=>n.createBinaryExpression(e,n.createToken(R.SyntaxKind.EqualsEqualsEqualsToken),t);var Eo=["get","post","put","delete","patch"];import{chain as fi,prop as yi}from"ramda";import g from"typescript";import{z as rr}from"zod";var{factory:u}=g,gi={[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},hi=({value:e})=>u.createLiteralTypeNode(typeof e=="number"?u.createNumericLiteral(e):typeof e=="boolean"?e?u.createTrue():u.createFalse():u.createStringLiteral(e)),xi=({shape:e},{isResponse:t,next:r,optionalPropStyle:{withQuestionMark:o}})=>{let s=Object.entries(e).map(([i,a])=>{let c=t&&He(a)?a instanceof rr.ZodOptional:a.isOptional(),d=u.createPropertySignature(void 0,ze(i),c&&o?u.createToken(g.SyntaxKind.QuestionToken):void 0,r(a));return a.description?Q(d,a.description):d});return u.createTypeLiteralNode(s)},bi=({element:e},{next:t})=>u.createArrayTypeNode(t(e)),Si=({options:e})=>u.createUnionTypeNode(e.map(t=>u.createLiteralTypeNode(u.createStringLiteral(t)))),zo=({options:e},{next:t})=>{let r=new Map;for(let o of e){let s=t(o);r.set(ho(s)?s.kind:s,s)}return u.createUnionTypeNode(Array.from(r.values()))},Ti=e=>gi?.[e.kind],Oi=(e,{next:t,isResponse:r})=>{let o=t(e.innerType());if(r&&e._def.effect.type==="transform"){let s=tt(e,Ti(o)),i={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&&i[s]||g.SyntaxKind.AnyKeyword)}return o},Ri=e=>u.createUnionTypeNode(Object.values(e.enum).map(t=>u.createLiteralTypeNode(typeof t=="number"?u.createNumericLiteral(t):u.createStringLiteral(t)))),Ai=(e,{next:t,optionalPropStyle:{withUndefined:r}})=>{let o=t(e.unwrap());return r?u.createUnionTypeNode([o,u.createKeywordTypeNode(g.SyntaxKind.UndefinedKeyword)]):o},Pi=(e,{next:t})=>u.createUnionTypeNode([t(e.unwrap()),u.createLiteralTypeNode(u.createNull())]),wi=({items:e,_def:{rest:t}},{next:r})=>u.createTupleTypeNode(e.map(r).concat(t===null?[]:u.createRestTypeNode(r(t)))),Ii=({keySchema:e,valueSchema:t},{next:r})=>u.createExpressionWithTypeArguments(u.createIdentifier("Record"),[e,t].map(r)),Ei=({_def:{left:e,right:t}},{next:r})=>{let o=[e,t].map(r);return o.every(g.isTypeLiteralNode)?u.createTypeLiteralNode(fi(yi("members"),o)):u.createIntersectionTypeNode(o)},zi=({_def:e},{next:t})=>t(e.innerType),W=e=>()=>u.createKeywordTypeNode(e),Ci=(e,{next:t})=>t(e.unwrap()),Zi=(e,{next:t})=>t(e.unwrap()),vi=({_def:e},{next:t})=>t(e.innerType),Ni=({_def:e},{next:t,isResponse:r})=>t(e[r?"out":"in"]),ki=()=>u.createLiteralTypeNode(u.createNull()),ji=(e,{makeAlias:t,next:r})=>t(e,()=>r(e.schema)),Li=e=>{let t=e.unwrap(),r=u.createKeywordTypeNode(g.SyntaxKind.StringKeyword),o=u.createTypeReferenceNode("Buffer"),s=u.createUnionTypeNode([r,o]);return t instanceof rr.ZodString?r:t instanceof rr.ZodUnion?s:o},Mi=(e,{next:t})=>t(e.unwrap().shape.raw),Hi={ZodString:W(g.SyntaxKind.StringKeyword),ZodNumber:W(g.SyntaxKind.NumberKeyword),ZodBigInt:W(g.SyntaxKind.BigIntKeyword),ZodBoolean:W(g.SyntaxKind.BooleanKeyword),ZodAny:W(g.SyntaxKind.AnyKeyword),ZodUndefined:W(g.SyntaxKind.UndefinedKeyword),[ie]:W(g.SyntaxKind.StringKeyword),[ae]:W(g.SyntaxKind.StringKeyword),ZodNull:ki,ZodArray:bi,ZodTuple:wi,ZodRecord:Ii,ZodObject:xi,ZodLiteral:hi,ZodIntersection:Ei,ZodUnion:zo,ZodDefault:zi,ZodEnum:Si,ZodNativeEnum:Ri,ZodEffects:Oi,ZodOptional:Ai,ZodNullable:Pi,ZodDiscriminatedUnion:zo,ZodBranded:Ci,ZodCatch:vi,ZodPipeline:Ni,ZodLazy:ji,ZodReadonly:Zi,[U]:Li,[Y]:Mi},or=(e,{brandHandling:t,ctx:r})=>le(e,{rules:{...t,...Hi},onMissing:()=>u.createKeywordTypeNode(g.SyntaxKind.AnyKeyword),ctx:r});var nr=class{someOf=Oo();program=[this.someOf];usage=[];registry=new Map;paths=new Set;aliases=new Map;ids={pathType:n.createIdentifier("Path"),methodType:n.createIdentifier("Method"),requestType:n.createIdentifier("Request"),methodPathType:n.createIdentifier("MethodPath"),inputInterface:n.createIdentifier("Input"),posResponseInterface:n.createIdentifier("PositiveResponse"),negResponseInterface:n.createIdentifier("NegativeResponse"),encResponseInterface:n.createIdentifier("EncodedResponse"),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"),requestParameter:n.createIdentifier("request"),args:n.createIdentifier("args"),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"),contentTypeConst:n.createIdentifier("contentType"),isJsonConst:n.createIdentifier("isJSON")};interfaces=[{id:this.ids.inputInterface,kind:"input",props:[]},{id:this.ids.posResponseInterface,kind:"positive",props:[]},{id:this.ids.negResponseInterface,kind:"negative",props:[]},{id:this.ids.encResponseInterface,kind:"encoded",props:[]},{id:this.ids.responseInterface,kind:"response",props:[]}];makeAlias(t,r){let o=this.aliases.get(t)?.name?.text;if(!o){o=`Type${this.aliases.size+1}`;let s=n.createLiteralTypeNode(n.createNull());this.aliases.set(t,j(o,s)),this.aliases.set(t,j(o,r()))}return n.createTypeReferenceNode(o)}makeSomeOf=({name:t})=>n.createTypeReferenceNode(this.someOf.name,[n.createTypeReferenceNode(t)]);constructor({routing:t,brandHandling:r,variant:o="client",serverUrl:s="https://example.com",optionalPropStyle:i={withQuestionMark:!0,withUndefined:!0},noContent:a=Ki.undefined()}){let c={makeAlias:this.makeAlias.bind(this),optionalPropStyle:i},d={brandHandling:r,ctx:{...c,isResponse:!1}},p={brandHandling:r,ctx:{...c,isResponse:!0}};Ie({routing:t,onEndpoint:(F,te,Je)=>{let Le=J.bind(null,Je,te),v=`${Je} ${te}`,Ye=j(Le("input"),or(F.getSchema("input"),d),{comment:v});this.program.push(Ye);let Qe=Pe.reduce((wt,We)=>{let Uo=F.getResponses(We),Ko=Ui(([Do,{schema:Fo,mimeTypes:Bo,statusCodes:qo}])=>{let pr=j(Le(We,"variant",`${Do+1}`),or(Bo?Fo:a,p),{comment:v});return this.program.push(pr),qo.map($o=>Wt($o,n.createTypeReferenceNode(pr.name)))},Array.from(Uo.entries())),ar=er(Le(We,"response","variants"),Ko,{comment:v});return this.program.push(ar),Object.assign(wt,{[We]:ar})},{});this.paths.add(te);let Ho=F.getResponses("positive").some(({mimeTypes:wt})=>wt?.includes(O.json)),ir=n.createLiteralTypeNode(n.createStringLiteral(v));this.registry.set(v,{input:n.createTypeReferenceNode(Ye.name),positive:this.makeSomeOf(Qe.positive),negative:this.makeSomeOf(Qe.negative),response:n.createUnionTypeNode([n.createIndexedAccessTypeNode(n.createTypeReferenceNode(this.ids.posResponseInterface),ir),n.createIndexedAccessTypeNode(n.createTypeReferenceNode(this.ids.negResponseInterface),ir)]),encoded:n.createIntersectionTypeNode([n.createTypeReferenceNode(Qe.positive.name),n.createTypeReferenceNode(Qe.negative.name)]),tags:F.getTags(),isJson:Ho})}}),this.program.unshift(...this.aliases.values()),this.program.push(Xt(this.ids.pathType,Array.from(this.paths))),this.program.push(Xt(this.ids.methodType,Eo));let l=[],f=[];for(let[F,{isJson:te,tags:Je,...Le}]of this.registry){for(let v of this.interfaces)v.props.push(Wt(F,Le[v.kind]));if(o!=="types"){let v=ze(F);te&&l.push(n.createPropertyAssignment(v,n.createTrue())),f.push(n.createPropertyAssignment(v,n.createArrayLiteralExpression(Je.map(Ye=>n.createStringLiteral(Ye)))))}}for(let{id:F,props:te}of this.interfaces)this.program.push(er(F,te,{isPublic:!0}));if(this.program.push(j(this.ids.requestType,Ge(this.ids.inputInterface),{isPublic:!0})),this.program.push(j(this.ids.methodPathType,n.createTypeReferenceNode(this.ids.requestType),{isPublic:!0,comment:"@deprecated use Request instead"})),o==="types")return;let x=Q(n.createVariableStatement(fe,k(this.ids.jsonEndpointsConst,n.createObjectLiteralExpression(l))),"@deprecated use content-type header of an actual response"),A=n.createVariableStatement(fe,k(this.ids.endpointTagsConst,n.createObjectLiteralExpression(f))),C=j(this.ids.implementationType,n.createFunctionTypeNode(void 0,Ze({[this.ids.methodParameter.text]:n.createTypeReferenceNode(this.ids.methodType),[this.ids.pathParameter.text]:n.createKeywordTypeNode(M.SyntaxKind.StringKeyword),[this.ids.paramsArgument.text]:Ce}),Rt("any")),{isPublic:!0}),y=n.createTemplateExpression(n.createTemplateHead(":"),[n.createTemplateSpan(this.ids.keyParameter,Ve)]),q=tr(this.ids.paramsArgument,L(this.ids.accumulator,P("replace"),[y,n.createElementAccessExpression(this.ids.paramsArgument,this.ids.keyParameter)]),this.ids.pathParameter),w=tr(this.ids.paramsArgument,L(n.createIdentifier(Object.name),P("assign"),[this.ids.accumulator,wo(n.createPrefixUnaryExpression(M.SyntaxKind.ExclamationToken,L(this.ids.pathParameter,P("includes"),[y])),n.createObjectLiteralExpression([n.createPropertyAssignment(n.createComputedPropertyName(this.ids.keyParameter),n.createElementAccessExpression(this.ids.paramsArgument,this.ids.keyParameter))],!1))]),n.createObjectLiteralExpression()),z=Q(Ot(this.ids.provideMethod,Ze({[this.ids.methodParameter.text]:n.createTypeReferenceNode("M"),[this.ids.pathParameter.text]:n.createTypeReferenceNode("P"),[this.ids.paramsArgument.text]:n.createConditionalTypeNode(St,Ge(this.ids.inputInterface),n.createIndexedAccessTypeNode(n.createTypeReferenceNode(this.ids.inputInterface),St),Ce)}),void 0,At({M:this.ids.methodType,P:this.ids.pathType}),Rt(Ao(this.ids.responseInterface,St,n.createKeywordTypeNode(M.SyntaxKind.UnknownKeyword)))),"@deprecated use the overload with 2 arguments instead"),Z=Ot(this.ids.provideMethod,Ze({[this.ids.requestParameter.text]:n.createTypeReferenceNode("K"),[this.ids.paramsArgument.text]:n.createIndexedAccessTypeNode(n.createTypeReferenceNode(this.ids.inputInterface),n.createTypeReferenceNode("K"))}),void 0,At({K:this.ids.requestType}),Rt(n.createIndexedAccessTypeNode(n.createTypeReferenceNode(this.ids.responseInterface),n.createTypeReferenceNode("K")))),H=Ot(this.ids.provideMethod,Ze({[this.ids.args.text]:n.createUnionTypeNode([n.createTupleTypeNode([n.createKeywordTypeNode(M.SyntaxKind.StringKeyword),n.createKeywordTypeNode(M.SyntaxKind.StringKeyword),Ce]),n.createTupleTypeNode([n.createKeywordTypeNode(M.SyntaxKind.StringKeyword),Ce])])},bo),n.createBlock([n.createVariableStatement(void 0,k(To(this.ids.methodParameter,this.ids.pathParameter,this.ids.paramsArgument),n.createAsExpression(n.createParenthesizedExpression(ve(Io(n.createPropertyAccessExpression(this.ids.args,P("length")),n.createNumericLiteral(2)),n.createArrayLiteralExpression([n.createSpreadElement(L(n.createElementAccessExpression(this.ids.args,0),P("split"),[n.createRegularExpressionLiteral("/ (.+)/"),n.createNumericLiteral(2)])),n.createElementAccessExpression(this.ids.args,1)]),this.ids.args)),n.createTupleTypeNode([n.createTypeReferenceNode(this.ids.methodType),n.createTypeReferenceNode(this.ids.pathType),Ce])))),n.createReturnStatement(L(n.createThis(),this.ids.implementationArgument,[this.ids.methodParameter,q,w]))])),$=Ro(this.ids.clientClass,So([Tt(this.ids.implementationArgument,n.createTypeReferenceNode(this.ids.implementationType),xo)]),[z,Z,H]),I=j(this.ids.providerType,n.createIndexedAccessTypeNode(n.createTypeReferenceNode(this.ids.clientClass),n.createLiteralTypeNode(n.createStringLiteral(this.ids.provideMethod.text))),{isPublic:!0,comment:"@deprecated will be removed in v22"});this.program.push(x,A,C,$,I);let X=n.createPropertyAssignment(this.ids.methodParameter,L(this.ids.methodParameter,P("toUpperCase"))),b=n.createPropertyAssignment(this.ids.headersProperty,ve(this.ids.hasBodyConst,n.createObjectLiteralExpression([n.createPropertyAssignment(n.createStringLiteral("Content-Type"),n.createStringLiteral(O.json))]),this.ids.undefinedValue)),ee=n.createPropertyAssignment(this.ids.bodyProperty,ve(this.ids.hasBodyConst,L(n.createIdentifier(JSON[Symbol.toStringTag]),P("stringify"),[this.ids.paramsArgument]),this.ids.undefinedValue)),ke=n.createVariableStatement(void 0,k(this.ids.responseConst,n.createAwaitExpression(n.createCallExpression(n.createIdentifier(fetch.name),void 0,[n.createNewExpression(n.createIdentifier(URL.name),void 0,[n.createTemplateExpression(n.createTemplateHead(""),[n.createTemplateSpan(this.ids.pathParameter,n.createTemplateMiddle("")),n.createTemplateSpan(this.ids.searchParamsConst,Ve)]),n.createStringLiteral(s)]),n.createObjectLiteralExpression([X,b,ee])])))),Pt=n.createVariableStatement(void 0,k(this.ids.hasBodyConst,n.createLogicalNot(L(n.createArrayLiteralExpression([n.createStringLiteral("get"),n.createStringLiteral("delete")]),P("includes"),[this.ids.methodParameter])))),_e=n.createVariableStatement(void 0,k(this.ids.searchParamsConst,ve(this.ids.hasBodyConst,n.createStringLiteral(""),n.createTemplateExpression(n.createTemplateHead("?"),[n.createTemplateSpan(n.createNewExpression(n.createIdentifier(URLSearchParams.name),void 0,[this.ids.paramsArgument]),Ve)])))),je=n.createVariableStatement(void 0,k(this.ids.contentTypeConst,L([this.ids.responseConst,this.ids.headersProperty],P("get"),[n.createStringLiteral("content-type")]))),vo=n.createIfStatement(n.createPrefixUnaryExpression(M.SyntaxKind.ExclamationToken,this.ids.contentTypeConst),n.createReturnStatement(void 0),void 0),No=n.createVariableStatement(void 0,k(this.ids.isJsonConst,n.createCallChain(n.createPropertyAccessChain(this.ids.contentTypeConst,void 0,P("startsWith")),void 0,void 0,[n.createStringLiteral(O.json)]))),ko=n.createReturnStatement(n.createCallExpression(n.createElementAccessExpression(this.ids.responseConst,ve(this.ids.isJsonConst,n.createStringLiteral(P("json")),n.createStringLiteral(P("text")))),void 0,[])),jo=n.createVariableStatement(fe,k(this.ids.exampleImplementationConst,Po([this.ids.methodParameter,this.ids.pathParameter,this.ids.paramsArgument],n.createBlock([Pt,_e,ke,je,vo,No,ko]),!0),n.createTypeReferenceNode(this.ids.implementationType))),Lo=n.createExpressionStatement(L(this.ids.clientConst,this.ids.provideMethod,[n.createStringLiteral("get /v1/user/retrieve"),n.createObjectLiteralExpression([n.createPropertyAssignment("id",n.createStringLiteral("10"))])])),Mo=n.createVariableStatement(void 0,k(this.ids.clientConst,n.createNewExpression(this.ids.clientClass,void 0,[this.ids.exampleImplementationConst])));this.usage.push(jo,Mo,Lo)}printUsage(t){return this.usage.length?this.usage.map(r=>typeof r=="string"?r:Qt(r,t)).join(`
18
+ `))};var Yr=e=>{e.startupLogo!==!1&&Jr(process.stdout);let t=e.errorHandler||Fe,r=wr(e.logger)?e.logger:new Be(e.logger);r.debug("Running",{build:"v21.11.2 (ESM)",env:process.env.NODE_ENV||"development"}),Vr(r);let o=qr({logger:r,config:e}),i={getLogger:$r(r),errorHandler:t},a=Dr(i),c=Kr(i);return{...i,logger:r,notFoundHandler:a,parserFailureHandler:c,loggingMiddleware:o}},qn=(e,t)=>{let{logger:r,getLogger:o,notFoundHandler:s,loggingMiddleware:i}=Yr(e);return Kt({app:e.app.use(i),routing:t,getLogger:o,config:e}),{notFoundHandler:s,logger:r}},$n=async(e,t)=>{let{logger:r,getLogger:o,notFoundHandler:s,parserFailureHandler:i,loggingMiddleware:a}=Yr(e),c=Dt().disable("x-powered-by").use(a);if(e.compression){let f=await we("compression");c.use(f(typeof e.compression=="object"?e.compression:void 0))}let d={json:[e.jsonParser||Dt.json()],raw:[e.rawParser||Dt.raw(),Br],upload:e.upload?await Fr({config:e,getLogger:o}):[]};await e.beforeRouting?.({app:c,getLogger:o}),Kt({app:c,routing:t,getLogger:o,config:e,parsers:d}),c.use(i,s);let p=[],m=(f,x)=>()=>f.listen(x,()=>r.info("Listening",x)),l=[];if(e.http){let f=Fn.createServer(c);p.push(f),l.push(m(f,e.http.listen))}if(e.https){let f=Bn.createServer(e.https.options,c);p.push(f),l.push(m(f,e.https.listen))}return e.gracefulShutdown&&Gr({logger:r,servers:p,options:e.gracefulShutdown===!0?{}:e.gracefulShutdown}),{app:c,logger:r,servers:l.map(f=>f())}};import{OpenApiBuilder as Ws}from"openapi3-ts/oas31";import{pluck as Xs}from"ramda";import{isReferenceObject as qt,isSchemaObject as gt}from"openapi3-ts/oas31";import{concat as Vn,type as Xr,filter as Gn,fromPairs as ht,has as _n,isNil as Jn,map as Ee,mergeAll as Yn,mergeDeepRight as Qn,mergeDeepWith as Wn,objOf as eo,omit as xt,pipe as to,pluck as Xn,reject as es,times as ts,toLower as rs,union as os,when as ns,xprod as Ft,zip as ss}from"ramda";import{z as S}from"zod";var le=(e,{onEach:t,rules:r,onMissing:o,ctx:s={}})=>{let i=r[e._def[h]?.brand]||r[e._def.typeName],c=i?i(e,{...s,next:p=>le(p,{ctx:s,onEach:t,rules:r,onMissing:o})}):o(e,s),d=t&&t(e,{prev:c,...s});return d?{...c,...d}:c};var Qr=50,ro="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString",is={integer:0,number:0,string:"",boolean:!1,object:{},null:null,array:[]},oo=/:([A-Za-z0-9_]+)/g,as=/^\d{4}-\d{2}-\d{2}$/,ps=/^\d{2}:\d{2}:\d{2}(\.\d+)?$/,cs=e=>e?/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(([+-]\d{2}:\d{2})|Z)$/:/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?Z$/,ds=e=>e.match(oo)?.map(t=>t.slice(1))||[],no=e=>e.replace(oo,t=>`{${t.slice(1)}}`),ms=({_def:e},{next:t})=>({...t(e.innerType),default:e[h]?.defaultLabel||e.defaultValue()}),ls=({_def:{innerType:e}},{next:t})=>t(e),us=()=>({format:"any"}),fs=({},e)=>{if(e.isResponse)throw new N("Please use ez.upload() only for input.",e);return{type:"string",format:"binary"}},ys=e=>{let t=e.unwrap();return{type:"string",format:t instanceof S.ZodString?t._def.checks.find(r=>r.kind==="base64")?"byte":"file":"binary"}},gs=({options:e},{next:t})=>({oneOf:e.map(t)}),hs=({options:e,discriminator:t},{next:r})=>({discriminator:{propertyName:t},oneOf:e.map(r)}),xs=(e,t)=>{if(Array.isArray(e)&&Array.isArray(t))return Vn(e,t);if(e===t)return t;throw new Error("Can not flatten properties")},bs=e=>{let[t,r]=e.filter(gt).filter(s=>s.type==="object"&&Object.keys(s).every(i=>["type","properties","required","examples"].includes(i)));if(!t||!r)throw new Error("Can not flatten objects");let o={type:"object"};return(t.properties||r.properties)&&(o.properties=Wn(xs,t.properties||{},r.properties||{})),(t.required||r.required)&&(o.required=os(t.required||[],r.required||[])),(t.examples||r.examples)&&(o.examples=ne(t.examples||[],r.examples||[],([s,i])=>Qn(s,i))),o},Ss=({_def:{left:e,right:t}},{next:r})=>{let o=[e,t].map(r);try{return bs(o)}catch{}return{allOf:o}},Ts=(e,{next:t})=>t(e.unwrap()),Os=(e,{next:t})=>t(e.unwrap()),Rs=(e,{next:t})=>{let r=t(e.unwrap());return gt(r)&&(r.type=io(r)),r},so=e=>{let t=rs(Xr(e));return typeof e=="bigint"?"integer":t==="number"||t==="string"||t==="boolean"||t==="object"||t==="null"||t==="array"?t:void 0},Wr=e=>({type:so(Object.values(e.enum)[0]),enum:Object.values(e.enum)}),As=({value:e})=>({type:so(e),const:e}),Ps=(e,{isResponse:t,next:r})=>{let o=Object.keys(e.shape),s=c=>t&&He(c)?c instanceof S.ZodOptional:c.isOptional(),i=o.filter(c=>!s(e.shape[c])),a={type:"object"};return o.length&&(a.properties=yt(e,r)),i.length&&(a.required=i),a},ws=()=>({type:"null"}),Is=({},e)=>{if(e.isResponse)throw new N("Please use ez.dateOut() for output.",e);return{description:"YYYY-MM-DDTHH:mm:ss.sssZ",type:"string",format:"date-time",pattern:/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$/.source,externalDocs:{url:ro}}},Es=({},e)=>{if(!e.isResponse)throw new N("Please use ez.dateIn() for input.",e);return{description:"YYYY-MM-DDTHH:mm:ss.sssZ",type:"string",format:"date-time",externalDocs:{url:ro}}},zs=({},e)=>{throw new N(`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)},Cs=()=>({type:"boolean"}),Zs=()=>({type:"integer",format:"bigint"}),vs=e=>e.every(t=>t instanceof S.ZodLiteral),Ns=({keySchema:e,valueSchema:t},{next:r})=>{if(e instanceof S.ZodEnum||e instanceof S.ZodNativeEnum){let o=Object.values(e.enum),s={type:"object"};return o.length&&(s.properties=yt(S.object(ht(Ft(o,[t]))),r),s.required=o),s}if(e instanceof S.ZodLiteral)return{type:"object",properties:yt(S.object({[e.value]:t}),r),required:[e.value]};if(e instanceof S.ZodUnion&&vs(e.options)){let o=Ee(i=>`${i.value}`,e.options),s=ht(Ft(o,[t]));return{type:"object",properties:yt(S.object(s),r),required:o}}return{type:"object",additionalProperties:r(t)}},ks=({_def:{minLength:e,maxLength:t},element:r},{next:o})=>{let s={type:"array",items:o(r)};return e&&(s.minItems=e.value),t&&(s.maxItems=t.value),s},js=({items:e,_def:{rest:t}},{next:r})=>({type:"array",prefixItems:e.map(r),items:t===null?{not:{}}:r(t)}),Ls=({isEmail:e,isURL:t,minLength:r,maxLength:o,isUUID:s,isCUID:i,isCUID2:a,isULID:c,isIP:d,isEmoji:p,isDatetime:m,isCIDR:l,isDate:f,isTime:x,isBase64:A,isNANOID:C,isBase64url:y,isDuration:q,_def:{checks:w}})=>{let z=w.find(b=>b.kind==="regex"),Z=w.find(b=>b.kind==="datetime"),H=w.some(b=>b.kind==="jwt"),$=w.find(b=>b.kind==="length"),I={type:"string"},X={"date-time":m,byte:A,base64url:y,date:f,time:x,duration:q,email:e,url:t,uuid:s,cuid:i,cuid2:a,ulid:c,nanoid:C,jwt:H,ip:d,cidr:l,emoji:p};for(let b in X)if(X[b]){I.format=b;break}return $&&([I.minLength,I.maxLength]=[$.value,$.value]),r!==null&&(I.minLength=r),o!==null&&(I.maxLength=o),f&&(I.pattern=as.source),x&&(I.pattern=ps.source),m&&(I.pattern=cs(Z?.offset).source),z&&(I.pattern=z.regex.source),I},Ms=({isInt:e,maxValue:t,minValue:r,_def:{checks:o}})=>{let s=o.find(l=>l.kind==="min"),i=r===null?e?Number.MIN_SAFE_INTEGER:-Number.MAX_VALUE:r,a=s?s.inclusive:!0,c=o.find(l=>l.kind==="max"),d=t===null?e?Number.MAX_SAFE_INTEGER:Number.MAX_VALUE:t,p=c?c.inclusive:!0,m={type:e?"integer":"number",format:e?"int64":"double"};return a?m.minimum=i:m.exclusiveMinimum=i,p?m.maximum=d:m.exclusiveMaximum=d,m},yt=({shape:e},t)=>Ee(t,e),Hs=e=>{let t=Array.isArray(e.type)?e.type[0]:e.type;return is?.[t]},io=({type:e})=>e==="null"?e:typeof e=="string"?[e,"null"]:e?[...new Set(e).add("null")]:"null",Us=(e,{isResponse:t,next:r})=>{let o=r(e.innerType()),{effect:s}=e._def;if(t&&s.type==="transform"&&gt(o)){let i=tt(e,Hs(o));return i&&["number","string","boolean"].includes(i)?{type:i}:r(S.any())}if(!t&&s.type==="preprocess"&&gt(o)){let{type:i,...a}=o;return{...a,format:`${a.format||i} (preprocessed)`}}return o},Ks=({_def:e},{isResponse:t,next:r})=>r(e[t?"out":"in"]),Ds=(e,{next:t})=>t(e.unwrap()),Fs=(e,{next:t,makeRef:r})=>r(e,()=>t(e.schema)),Bs=(e,{next:t})=>t(e.unwrap().shape.raw),ao=e=>e.length?ht(ss(ts(t=>`example${t+1}`,e.length),Ee(eo("value"),e))):void 0,po=(e,t,r=[])=>to(_,Ee(ns(o=>Xr(o)==="Object",xt(r))),ao)({schema:e,variant:t?"parsed":"original",validate:!0}),qs=(e,t)=>to(_,Gn(_n(t)),Xn(t),ao)({schema:e,variant:"original",validate:!0}),ue=e=>e instanceof S.ZodObject?e:e instanceof S.ZodBranded?ue(e.unwrap()):e instanceof S.ZodUnion||e instanceof S.ZodDiscriminatedUnion?e.options.map(t=>ue(t)).reduce((t,r)=>t.merge(r.partial()),S.object({})):e instanceof S.ZodEffects?ue(e._def.schema):e instanceof S.ZodPipeline?ue(e._def.in):ue(e._def.left).merge(ue(e._def.right)),co=({path:e,method:t,schema:r,inputSources:o,makeRef:s,composition:i,brandHandling:a,description:c=`${t.toUpperCase()} ${e} Parameter`})=>{let{shape:d}=ue(r),p=ds(e),m=o.includes("query"),l=o.includes("params"),f=o.includes("headers"),x=y=>l&&p.includes(y),A=y=>f&&zt(y);return Object.keys(d).map(y=>({name:y,location:x(y)?"path":A(y)?"header":m?"query":void 0})).filter(y=>y.location!==void 0).map(({name:y,location:q})=>{let w=le(d[y],{rules:{...a,...$t},onEach:Vt,onMissing:Gt,ctx:{isResponse:!1,makeRef:s,path:e,method:t}}),z=i==="components"?s(d[y],w,J(c,y)):w;return{name:y,in:q,required:!d[y].isOptional(),description:w.description||c,schema:z,examples:qs(r,y)}})},$t={ZodString:Ls,ZodNumber:Ms,ZodBigInt:Zs,ZodBoolean:Cs,ZodNull:ws,ZodArray:ks,ZodTuple:js,ZodRecord:Ns,ZodObject:Ps,ZodLiteral:As,ZodIntersection:Ss,ZodUnion:gs,ZodAny:us,ZodDefault:ms,ZodEnum:Wr,ZodNativeEnum:Wr,ZodEffects:Us,ZodOptional:Ts,ZodNullable:Rs,ZodDiscriminatedUnion:hs,ZodBranded:Ds,ZodDate:zs,ZodCatch:ls,ZodPipeline:Ks,ZodLazy:Fs,ZodReadonly:Os,[U]:ys,[xe]:fs,[ae]:Es,[ie]:Is,[Y]:Bs},Vt=(e,{isResponse:t,prev:r})=>{if(qt(r))return{};let{description:o}=e,s=e instanceof S.ZodLazy,i=r.type!==void 0,a=t&&He(e),c=!s&&i&&!a&&e.isNullable(),d={};if(o&&(d.description=o),c&&(d.type=io(r)),!s){let p=_({schema:e,variant:t?"parsed":"original",validate:!0});p.length&&(d.examples=p.slice())}return d},Gt=(e,t)=>{throw new N(`Zod type ${e.constructor.name} is unsupported.`,t)},Bt=(e,t)=>{if(qt(e))return e;let r={...e};return r.properties&&(r.properties=xt(t,r.properties)),r.examples&&(r.examples=r.examples.map(o=>xt(t,o))),r.required&&(r.required=r.required.filter(o=>!t.includes(o))),r.allOf&&(r.allOf=r.allOf.map(o=>Bt(o,t))),r.oneOf&&(r.oneOf=r.oneOf.map(o=>Bt(o,t))),r},mo=e=>qt(e)?e:xt(["examples"],e),lo=({method:e,path:t,schema:r,mimeTypes:o,variant:s,makeRef:i,composition:a,hasMultipleStatusCodes:c,statusCode:d,brandHandling:p,description:m=`${e.toUpperCase()} ${t} ${Ct(s)} response ${c?d:""}`.trim()})=>{if(!o)return{description:m};let l=mo(le(r,{rules:{...p,...$t},onEach:Vt,onMissing:Gt,ctx:{isResponse:!0,makeRef:i,path:t,method:e}})),f={schema:a==="components"?i(r,l,J(m)):l,examples:po(r,!0)};return{description:m,content:ht(Ft(o,[f]))}},$s=()=>({type:"http",scheme:"basic"}),Vs=({format:e})=>{let t={type:"http",scheme:"bearer"};return e&&(t.bearerFormat=e),t},Gs=({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},_s=({name:e})=>({type:"apiKey",in:"header",name:e}),Js=({name:e})=>({type:"apiKey",in:"cookie",name:e}),Ys=({url:e})=>({type:"openIdConnect",openIdConnectUrl:e}),Qs=({flows:e={}})=>({type:"oauth2",flows:Ee(t=>({...t,scopes:t.scopes||{}}),es(Jn,e))}),uo=(e,t)=>{let r={basic:$s,bearer:Vs,input:Gs,header:_s,cookie:Js,openid:Ys,oauth2:Qs};return ct(e,o=>r[o.type](o,t))},bt=e=>"or"in e?e.or.map(t=>"and"in t?Yn(Ee(({name:r,scopes:o})=>eo(r,o),t.and)):{[t.name]:t.scopes}):"and"in e?bt(jt(e)):bt({or:[e]}),fo=({method:e,path:t,schema:r,mimeType:o,makeRef:s,composition:i,brandHandling:a,paramNames:c,description:d=`${e.toUpperCase()} ${t} Request body`})=>{let p=mo(Bt(le(r,{rules:{...a,...$t},onEach:Vt,onMissing:Gt,ctx:{isResponse:!1,makeRef:s,path:t,method:e}}),c)),m={schema:i==="components"?s(r,p,J(d)):p,examples:po(r,!1,c)};return{description:d,content:{[o]:m}}},yo=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}),_t=e=>e.length<=Qr?e:e.slice(0,Qr-1)+"\u2026";var Jt=class extends Ws{lastSecuritySchemaIds=new Map;lastOperationIdSuffixes=new Map;references=new Map;makeRef(t,r,o=this.references.get(t)){return o||(o=`Schema${this.references.size+1}`,this.references.set(t,o),typeof r=="function"&&(r=r())),typeof r=="object"&&this.addSchema(o,r),{$ref:`#/components/schemas/${o}`}}ensureUniqOperationId(t,r,o){let s=o||J(r,t),i=this.lastOperationIdSuffixes.get(s);if(i===void 0)return this.lastOperationIdSuffixes.set(s,1),s;if(o)throw new N(`Duplicated operationId: "${o}"`,{method:r,isResponse:!1,path:t});return i++,this.lastOperationIdSuffixes.set(s,i),`${s}${i}`}ensureUniqSecuritySchemaName(t){let r=JSON.stringify(t);for(let s in this.rootDoc.components?.securitySchemes||{})if(r===JSON.stringify(this.rootDoc.components?.securitySchemes?.[s]))return s;let o=(this.lastSecuritySchemaIds.get(t.type)||0)+1;return this.lastSecuritySchemaIds.set(t.type,o),`${t.type.toUpperCase()}_${o}`}constructor({routing:t,config:r,title:o,version:s,serverUrl:i,descriptions:a,brandHandling:c,hasSummaryFromDescription:d=!0,composition:p="inline"}){super(),this.addInfo({title:o,version:s});for(let l of typeof i=="string"?[i]:i)this.addServer({url:l});Ie({routing:t,onEndpoint:(l,f,x)=>{let A={path:f,method:x,endpoint:l,composition:p,brandHandling:c,makeRef:this.makeRef.bind(this)},[C,y]=["short","long"].map(l.getDescription.bind(l)),q=C?_t(C):d&&y?_t(y):void 0,w=l.getTags(),z=r.inputSources?.[x]||It[x],Z=this.ensureUniqOperationId(f,x,l.getOperationId(x)),H=co({...A,inputSources:z,schema:l.getSchema("input"),description:a?.requestParameter?.call(null,{method:x,path:f,operationId:Z})}),$={};for(let b of Pe){let ee=l.getResponses(b);for(let{mimeTypes:ke,schema:Pt,statusCodes:_e}of ee)for(let je of _e)$[je]=lo({...A,variant:b,schema:Pt,mimeTypes:ke,statusCode:je,hasMultipleStatusCodes:ee.length>1||_e.length>1,description:a?.[`${b}Response`]?.call(null,{method:x,path:f,operationId:Z,statusCode:je})})}let I=z.includes("body")?fo({...A,paramNames:Xs("name",H),schema:l.getSchema("input"),mimeType:O[l.getRequestType()],description:a?.requestBody?.call(null,{method:x,path:f,operationId:Z})}):void 0,X=bt(ct(uo(l.getSecurity(),z),b=>{let ee=this.ensureUniqSecuritySchemaName(b),ke=["oauth2","openIdConnect"].includes(b.type)?l.getScopes().slice():[];return this.addSecurityScheme(ee,b),{name:ee,scopes:ke}}));this.addPath(no(f),{[x]:{operationId:Z,summary:q,description:y,tags:w.length>0?w:void 0,parameters:H.length>0?H:void 0,requestBody:I,security:X.length>0?X:void 0,responses:$}})}}),this.rootDoc.tags=r.tags?yo(r.tags):[]}};import{createRequest as ei,createResponse as ti}from"node-mocks-http";var ri=e=>ei({...e,headers:{"content-type":O.json,...e?.headers}}),oi=e=>ti(e),ni=e=>{let t={warn:[],error:[],info:[],debug:[]};return new Proxy(e||{},{get(r,o,s){return o==="_getLogs"?()=>t:Ir(o)?(...i)=>t[o].push(i):Reflect.get(r,o,s)}})},go=({requestProps:e,responseOptions:t,configProps:r,loggerProps:o})=>{let s=ri(e),i=oi({req:s,...t});i.req=t?.req||s,s.res=i;let a=ni(o),c={cors:!1,logger:a,...r};return{requestMock:s,responseMock:i,loggerMock:a,configMock:c}},si=async({endpoint:e,...t})=>{let{requestMock:r,responseMock:o,loggerMock:s,configMock:i}=go(t);return await e.execute({request:r,response:o,config:i,logger:s}),{requestMock:r,responseMock:o,loggerMock:s}},ii=async({middleware:e,options:t={},errorHandler:r,...o})=>{let{requestMock:s,responseMock:i,loggerMock:a,configMock:c}=go(o),d=et(s,c.inputSources);try{let p=await e.execute({request:s,response:i,logger:a,input:d,options:t});return{requestMock:s,responseMock:i,loggerMock:a,output:p}}catch(p){if(!r)throw p;return r(G(p),i),{requestMock:s,responseMock:i,loggerMock:a,output:{}}}};import{chain as Ui}from"ramda";import M from"typescript";import{z as Ki}from"zod";import R from"typescript";import T from"typescript";var{factory:Yt}=T,Q=(e,t)=>T.addSyntheticLeadingComment(e,T.SyntaxKind.MultiLineCommentTrivia,`* ${t} `,!0),Qt=(e,t)=>{let r=T.createSourceFile("print.ts","",T.ScriptTarget.Latest,!1,T.ScriptKind.TS);return T.createPrinter(t).printNode(T.EmitHint.Unspecified,e,r)},ai=/^[A-Za-z_$][A-Za-z0-9_$]*$/,ze=e=>typeof e=="number"?Yt.createNumericLiteral(e):ai.test(e)?Yt.createIdentifier(e):Yt.createStringLiteral(e),pi=[T.SyntaxKind.AnyKeyword,T.SyntaxKind.BigIntKeyword,T.SyntaxKind.BooleanKeyword,T.SyntaxKind.NeverKeyword,T.SyntaxKind.NumberKeyword,T.SyntaxKind.ObjectKeyword,T.SyntaxKind.StringKeyword,T.SyntaxKind.SymbolKeyword,T.SyntaxKind.UndefinedKeyword,T.SyntaxKind.UnknownKeyword,T.SyntaxKind.VoidKeyword],ho=e=>pi.includes(e.kind);var n=R.factory,fe=[n.createModifier(R.SyntaxKind.ExportKeyword)],ci=[n.createModifier(R.SyntaxKind.AsyncKeyword)],di=[n.createModifier(R.SyntaxKind.PublicKeyword)],xo=[n.createModifier(R.SyntaxKind.ProtectedKeyword),n.createModifier(R.SyntaxKind.ReadonlyKeyword)],bo=n.createToken(R.SyntaxKind.DotDotDotToken),mi=n.createTemplateHead(""),li=n.createTemplateMiddle(" "),Ve=n.createTemplateTail(""),Ce=n.createExpressionWithTypeArguments(n.createIdentifier("Record"),[n.createKeywordTypeNode(R.SyntaxKind.StringKeyword),n.createKeywordTypeNode(R.SyntaxKind.AnyKeyword)]),ui=e=>n.createTemplateLiteralType(mi,e.map((t,r)=>n.createTemplateLiteralTypeSpan(n.createTypeReferenceNode(t),r===e.length-1?Ve:li))),St=ui(["M","P"]),Tt=(e,t,r)=>n.createParameterDeclaration(Array.isArray(r)?r:void 0,Array.isArray(r)?void 0:r,e,void 0,t,void 0),Ze=(e,t)=>Object.entries(e).map(([r,o])=>Tt(n.createIdentifier(r),o,t)),So=e=>n.createConstructorDeclaration(void 0,e,n.createBlock([])),Wt=(e,t)=>n.createPropertySignature(void 0,ze(e),void 0,t),To=(...e)=>n.createArrayBindingPattern(e.map(t=>n.createBindingElement(void 0,void 0,t))),k=(e,t,r)=>n.createVariableDeclarationList([n.createVariableDeclaration(e,void 0,r,t)],R.NodeFlags.Const),Xt=(e,t)=>j(e,n.createUnionTypeNode(t.map(r=>n.createLiteralTypeNode(n.createStringLiteral(r)))),{isPublic:!0}),j=(e,t,{isPublic:r,comment:o,params:s}={})=>{let i=n.createTypeAliasDeclaration(r?fe:void 0,e,s&&At(s),t);return o?Q(i,o):i},Oo=()=>j("SomeOf",n.createIndexedAccessTypeNode(n.createTypeReferenceNode("T"),Ge("T")),{params:{T:void 0}}),Ot=(e,t,r,o,s)=>n.createMethodDeclaration(di,void 0,e,void 0,o,t,s,r),Ro=(e,t,r)=>n.createClassDeclaration(fe,e,void 0,void 0,[t,...r]),Ge=e=>n.createTypeOperatorNode(R.SyntaxKind.KeyOfKeyword,n.createTypeReferenceNode(e)),Ao=(e,t,r)=>n.createConditionalTypeNode(t,Ge(e),n.createIndexedAccessTypeNode(n.createTypeReferenceNode(e),t),r),Rt=e=>n.createTypeReferenceNode(Promise.name,[e==="any"?n.createKeywordTypeNode(R.SyntaxKind.AnyKeyword):e]),er=(e,t,{isPublic:r,comment:o}={})=>{let s=n.createInterfaceDeclaration(r?fe:void 0,e,void 0,void 0,t);return o?Q(s,o):s},At=e=>Object.entries(e).map(([t,r])=>n.createTypeParameterDeclaration([],t,r&&n.createTypeReferenceNode(r))),Po=(e,t,r)=>n.createArrowFunction(r?ci:void 0,void 0,e.map(o=>Tt(o)),void 0,void 0,t),tr=(e,t,r)=>n.createCallExpression(n.createPropertyAccessExpression(n.createCallExpression(n.createPropertyAccessExpression(n.createIdentifier(Object.name),P("keys")),void 0,[e]),P("reduce")),void 0,[n.createArrowFunction(void 0,void 0,Ze({acc:void 0,key:void 0}),void 0,void 0,t),r]),P=e=>e,ve=(e,t,r)=>n.createConditionalExpression(e,n.createToken(R.SyntaxKind.QuestionToken),t,n.createToken(R.SyntaxKind.ColonToken),r),L=(e,t,r)=>n.createCallExpression(n.createPropertyAccessExpression(Array.isArray(e)?n.createPropertyAccessExpression(...e):e,t),void 0,r),wo=(e,t)=>n.createBinaryExpression(e,n.createToken(R.SyntaxKind.AmpersandAmpersandToken),t),Io=(e,t)=>n.createBinaryExpression(e,n.createToken(R.SyntaxKind.EqualsEqualsEqualsToken),t);var Eo=["get","post","put","delete","patch"];import{chain as fi,prop as yi}from"ramda";import g from"typescript";import{z as rr}from"zod";var{factory:u}=g,gi={[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},hi=({value:e})=>u.createLiteralTypeNode(typeof e=="number"?u.createNumericLiteral(e):typeof e=="boolean"?e?u.createTrue():u.createFalse():u.createStringLiteral(e)),xi=({shape:e},{isResponse:t,next:r,optionalPropStyle:{withQuestionMark:o}})=>{let s=Object.entries(e).map(([i,a])=>{let c=t&&He(a)?a instanceof rr.ZodOptional:a.isOptional(),d=u.createPropertySignature(void 0,ze(i),c&&o?u.createToken(g.SyntaxKind.QuestionToken):void 0,r(a));return a.description?Q(d,a.description):d});return u.createTypeLiteralNode(s)},bi=({element:e},{next:t})=>u.createArrayTypeNode(t(e)),Si=({options:e})=>u.createUnionTypeNode(e.map(t=>u.createLiteralTypeNode(u.createStringLiteral(t)))),zo=({options:e},{next:t})=>{let r=new Map;for(let o of e){let s=t(o);r.set(ho(s)?s.kind:s,s)}return u.createUnionTypeNode(Array.from(r.values()))},Ti=e=>gi?.[e.kind],Oi=(e,{next:t,isResponse:r})=>{let o=t(e.innerType());if(r&&e._def.effect.type==="transform"){let s=tt(e,Ti(o)),i={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&&i[s]||g.SyntaxKind.AnyKeyword)}return o},Ri=e=>u.createUnionTypeNode(Object.values(e.enum).map(t=>u.createLiteralTypeNode(typeof t=="number"?u.createNumericLiteral(t):u.createStringLiteral(t)))),Ai=(e,{next:t,optionalPropStyle:{withUndefined:r}})=>{let o=t(e.unwrap());return r?u.createUnionTypeNode([o,u.createKeywordTypeNode(g.SyntaxKind.UndefinedKeyword)]):o},Pi=(e,{next:t})=>u.createUnionTypeNode([t(e.unwrap()),u.createLiteralTypeNode(u.createNull())]),wi=({items:e,_def:{rest:t}},{next:r})=>u.createTupleTypeNode(e.map(r).concat(t===null?[]:u.createRestTypeNode(r(t)))),Ii=({keySchema:e,valueSchema:t},{next:r})=>u.createExpressionWithTypeArguments(u.createIdentifier("Record"),[e,t].map(r)),Ei=({_def:{left:e,right:t}},{next:r})=>{let o=[e,t].map(r);return o.every(g.isTypeLiteralNode)?u.createTypeLiteralNode(fi(yi("members"),o)):u.createIntersectionTypeNode(o)},zi=({_def:e},{next:t})=>t(e.innerType),W=e=>()=>u.createKeywordTypeNode(e),Ci=(e,{next:t})=>t(e.unwrap()),Zi=(e,{next:t})=>t(e.unwrap()),vi=({_def:e},{next:t})=>t(e.innerType),Ni=({_def:e},{next:t,isResponse:r})=>t(e[r?"out":"in"]),ki=()=>u.createLiteralTypeNode(u.createNull()),ji=(e,{makeAlias:t,next:r})=>t(e,()=>r(e.schema)),Li=e=>{let t=e.unwrap(),r=u.createKeywordTypeNode(g.SyntaxKind.StringKeyword),o=u.createTypeReferenceNode("Buffer"),s=u.createUnionTypeNode([r,o]);return t instanceof rr.ZodString?r:t instanceof rr.ZodUnion?s:o},Mi=(e,{next:t})=>t(e.unwrap().shape.raw),Hi={ZodString:W(g.SyntaxKind.StringKeyword),ZodNumber:W(g.SyntaxKind.NumberKeyword),ZodBigInt:W(g.SyntaxKind.BigIntKeyword),ZodBoolean:W(g.SyntaxKind.BooleanKeyword),ZodAny:W(g.SyntaxKind.AnyKeyword),ZodUndefined:W(g.SyntaxKind.UndefinedKeyword),[ie]:W(g.SyntaxKind.StringKeyword),[ae]:W(g.SyntaxKind.StringKeyword),ZodNull:ki,ZodArray:bi,ZodTuple:wi,ZodRecord:Ii,ZodObject:xi,ZodLiteral:hi,ZodIntersection:Ei,ZodUnion:zo,ZodDefault:zi,ZodEnum:Si,ZodNativeEnum:Ri,ZodEffects:Oi,ZodOptional:Ai,ZodNullable:Pi,ZodDiscriminatedUnion:zo,ZodBranded:Ci,ZodCatch:vi,ZodPipeline:Ni,ZodLazy:ji,ZodReadonly:Zi,[U]:Li,[Y]:Mi},or=(e,{brandHandling:t,ctx:r})=>le(e,{rules:{...t,...Hi},onMissing:()=>u.createKeywordTypeNode(g.SyntaxKind.AnyKeyword),ctx:r});var nr=class{someOf=Oo();program=[this.someOf];usage=[];registry=new Map;paths=new Set;aliases=new Map;ids={pathType:n.createIdentifier("Path"),methodType:n.createIdentifier("Method"),requestType:n.createIdentifier("Request"),methodPathType:n.createIdentifier("MethodPath"),inputInterface:n.createIdentifier("Input"),posResponseInterface:n.createIdentifier("PositiveResponse"),negResponseInterface:n.createIdentifier("NegativeResponse"),encResponseInterface:n.createIdentifier("EncodedResponse"),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"),requestParameter:n.createIdentifier("request"),args:n.createIdentifier("args"),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"),contentTypeConst:n.createIdentifier("contentType"),isJsonConst:n.createIdentifier("isJSON")};interfaces=[{id:this.ids.inputInterface,kind:"input",props:[]},{id:this.ids.posResponseInterface,kind:"positive",props:[]},{id:this.ids.negResponseInterface,kind:"negative",props:[]},{id:this.ids.encResponseInterface,kind:"encoded",props:[]},{id:this.ids.responseInterface,kind:"response",props:[]}];makeAlias(t,r){let o=this.aliases.get(t)?.name?.text;if(!o){o=`Type${this.aliases.size+1}`;let s=n.createLiteralTypeNode(n.createNull());this.aliases.set(t,j(o,s)),this.aliases.set(t,j(o,r()))}return n.createTypeReferenceNode(o)}makeSomeOf=({name:t})=>n.createTypeReferenceNode(this.someOf.name,[n.createTypeReferenceNode(t)]);constructor({routing:t,brandHandling:r,variant:o="client",serverUrl:s="https://example.com",optionalPropStyle:i={withQuestionMark:!0,withUndefined:!0},noContent:a=Ki.undefined()}){let c={makeAlias:this.makeAlias.bind(this),optionalPropStyle:i},d={brandHandling:r,ctx:{...c,isResponse:!1}},p={brandHandling:r,ctx:{...c,isResponse:!0}};Ie({routing:t,onEndpoint:(F,te,Je)=>{let Le=J.bind(null,Je,te),v=`${Je} ${te}`,Ye=j(Le("input"),or(F.getSchema("input"),d),{comment:v});this.program.push(Ye);let Qe=Pe.reduce((wt,We)=>{let Uo=F.getResponses(We),Ko=Ui(([Do,{schema:Fo,mimeTypes:Bo,statusCodes:qo}])=>{let pr=j(Le(We,"variant",`${Do+1}`),or(Bo?Fo:a,p),{comment:v});return this.program.push(pr),qo.map($o=>Wt($o,n.createTypeReferenceNode(pr.name)))},Array.from(Uo.entries())),ar=er(Le(We,"response","variants"),Ko,{comment:v});return this.program.push(ar),Object.assign(wt,{[We]:ar})},{});this.paths.add(te);let Ho=F.getResponses("positive").some(({mimeTypes:wt})=>wt?.includes(O.json)),ir=n.createLiteralTypeNode(n.createStringLiteral(v));this.registry.set(v,{input:n.createTypeReferenceNode(Ye.name),positive:this.makeSomeOf(Qe.positive),negative:this.makeSomeOf(Qe.negative),response:n.createUnionTypeNode([n.createIndexedAccessTypeNode(n.createTypeReferenceNode(this.ids.posResponseInterface),ir),n.createIndexedAccessTypeNode(n.createTypeReferenceNode(this.ids.negResponseInterface),ir)]),encoded:n.createIntersectionTypeNode([n.createTypeReferenceNode(Qe.positive.name),n.createTypeReferenceNode(Qe.negative.name)]),tags:F.getTags(),isJson:Ho})}}),this.program.unshift(...this.aliases.values()),this.program.push(Xt(this.ids.pathType,Array.from(this.paths))),this.program.push(Xt(this.ids.methodType,Eo));let l=[],f=[];for(let[F,{isJson:te,tags:Je,...Le}]of this.registry){for(let v of this.interfaces)v.props.push(Wt(F,Le[v.kind]));if(o!=="types"){let v=ze(F);te&&l.push(n.createPropertyAssignment(v,n.createTrue())),f.push(n.createPropertyAssignment(v,n.createArrayLiteralExpression(Je.map(Ye=>n.createStringLiteral(Ye)))))}}for(let{id:F,props:te}of this.interfaces)this.program.push(er(F,te,{isPublic:!0}));if(this.program.push(j(this.ids.requestType,Ge(this.ids.inputInterface),{isPublic:!0})),this.program.push(j(this.ids.methodPathType,n.createTypeReferenceNode(this.ids.requestType),{isPublic:!0,comment:"@deprecated use Request instead"})),o==="types")return;let x=Q(n.createVariableStatement(fe,k(this.ids.jsonEndpointsConst,n.createObjectLiteralExpression(l))),"@deprecated use content-type header of an actual response"),A=n.createVariableStatement(fe,k(this.ids.endpointTagsConst,n.createObjectLiteralExpression(f))),C=j(this.ids.implementationType,n.createFunctionTypeNode(void 0,Ze({[this.ids.methodParameter.text]:n.createTypeReferenceNode(this.ids.methodType),[this.ids.pathParameter.text]:n.createKeywordTypeNode(M.SyntaxKind.StringKeyword),[this.ids.paramsArgument.text]:Ce}),Rt("any")),{isPublic:!0}),y=n.createTemplateExpression(n.createTemplateHead(":"),[n.createTemplateSpan(this.ids.keyParameter,Ve)]),q=tr(this.ids.paramsArgument,L(this.ids.accumulator,P("replace"),[y,n.createElementAccessExpression(this.ids.paramsArgument,this.ids.keyParameter)]),this.ids.pathParameter),w=tr(this.ids.paramsArgument,L(n.createIdentifier(Object.name),P("assign"),[this.ids.accumulator,wo(n.createPrefixUnaryExpression(M.SyntaxKind.ExclamationToken,L(this.ids.pathParameter,P("includes"),[y])),n.createObjectLiteralExpression([n.createPropertyAssignment(n.createComputedPropertyName(this.ids.keyParameter),n.createElementAccessExpression(this.ids.paramsArgument,this.ids.keyParameter))],!1))]),n.createObjectLiteralExpression()),z=Q(Ot(this.ids.provideMethod,Ze({[this.ids.methodParameter.text]:n.createTypeReferenceNode("M"),[this.ids.pathParameter.text]:n.createTypeReferenceNode("P"),[this.ids.paramsArgument.text]:n.createConditionalTypeNode(St,Ge(this.ids.inputInterface),n.createIndexedAccessTypeNode(n.createTypeReferenceNode(this.ids.inputInterface),St),Ce)}),void 0,At({M:this.ids.methodType,P:this.ids.pathType}),Rt(Ao(this.ids.responseInterface,St,n.createKeywordTypeNode(M.SyntaxKind.UnknownKeyword)))),"@deprecated use the overload with 2 arguments instead"),Z=Ot(this.ids.provideMethod,Ze({[this.ids.requestParameter.text]:n.createTypeReferenceNode("K"),[this.ids.paramsArgument.text]:n.createIndexedAccessTypeNode(n.createTypeReferenceNode(this.ids.inputInterface),n.createTypeReferenceNode("K"))}),void 0,At({K:this.ids.requestType}),Rt(n.createIndexedAccessTypeNode(n.createTypeReferenceNode(this.ids.responseInterface),n.createTypeReferenceNode("K")))),H=Ot(this.ids.provideMethod,Ze({[this.ids.args.text]:n.createUnionTypeNode([n.createTupleTypeNode([n.createKeywordTypeNode(M.SyntaxKind.StringKeyword),n.createKeywordTypeNode(M.SyntaxKind.StringKeyword),Ce]),n.createTupleTypeNode([n.createKeywordTypeNode(M.SyntaxKind.StringKeyword),Ce])])},bo),n.createBlock([n.createVariableStatement(void 0,k(To(this.ids.methodParameter,this.ids.pathParameter,this.ids.paramsArgument),n.createAsExpression(n.createParenthesizedExpression(ve(Io(n.createPropertyAccessExpression(this.ids.args,P("length")),n.createNumericLiteral(2)),n.createArrayLiteralExpression([n.createSpreadElement(L(n.createElementAccessExpression(this.ids.args,0),P("split"),[n.createRegularExpressionLiteral("/ (.+)/"),n.createNumericLiteral(2)])),n.createElementAccessExpression(this.ids.args,1)]),this.ids.args)),n.createTupleTypeNode([n.createTypeReferenceNode(this.ids.methodType),n.createTypeReferenceNode(this.ids.pathType),Ce])))),n.createReturnStatement(L(n.createThis(),this.ids.implementationArgument,[this.ids.methodParameter,q,w]))])),$=Ro(this.ids.clientClass,So([Tt(this.ids.implementationArgument,n.createTypeReferenceNode(this.ids.implementationType),xo)]),[z,Z,H]),I=j(this.ids.providerType,n.createIndexedAccessTypeNode(n.createTypeReferenceNode(this.ids.clientClass),n.createLiteralTypeNode(n.createStringLiteral(this.ids.provideMethod.text))),{isPublic:!0,comment:"@deprecated will be removed in v22"});this.program.push(x,A,C,$,I);let X=n.createPropertyAssignment(this.ids.methodParameter,L(this.ids.methodParameter,P("toUpperCase"))),b=n.createPropertyAssignment(this.ids.headersProperty,ve(this.ids.hasBodyConst,n.createObjectLiteralExpression([n.createPropertyAssignment(n.createStringLiteral("Content-Type"),n.createStringLiteral(O.json))]),this.ids.undefinedValue)),ee=n.createPropertyAssignment(this.ids.bodyProperty,ve(this.ids.hasBodyConst,L(n.createIdentifier(JSON[Symbol.toStringTag]),P("stringify"),[this.ids.paramsArgument]),this.ids.undefinedValue)),ke=n.createVariableStatement(void 0,k(this.ids.responseConst,n.createAwaitExpression(n.createCallExpression(n.createIdentifier(fetch.name),void 0,[n.createNewExpression(n.createIdentifier(URL.name),void 0,[n.createTemplateExpression(n.createTemplateHead(""),[n.createTemplateSpan(this.ids.pathParameter,n.createTemplateMiddle("")),n.createTemplateSpan(this.ids.searchParamsConst,Ve)]),n.createStringLiteral(s)]),n.createObjectLiteralExpression([X,b,ee])])))),Pt=n.createVariableStatement(void 0,k(this.ids.hasBodyConst,n.createLogicalNot(L(n.createArrayLiteralExpression([n.createStringLiteral("get"),n.createStringLiteral("delete")]),P("includes"),[this.ids.methodParameter])))),_e=n.createVariableStatement(void 0,k(this.ids.searchParamsConst,ve(this.ids.hasBodyConst,n.createStringLiteral(""),n.createTemplateExpression(n.createTemplateHead("?"),[n.createTemplateSpan(n.createNewExpression(n.createIdentifier(URLSearchParams.name),void 0,[this.ids.paramsArgument]),Ve)])))),je=n.createVariableStatement(void 0,k(this.ids.contentTypeConst,L([this.ids.responseConst,this.ids.headersProperty],P("get"),[n.createStringLiteral("content-type")]))),vo=n.createIfStatement(n.createPrefixUnaryExpression(M.SyntaxKind.ExclamationToken,this.ids.contentTypeConst),n.createReturnStatement(void 0),void 0),No=n.createVariableStatement(void 0,k(this.ids.isJsonConst,n.createCallChain(n.createPropertyAccessChain(this.ids.contentTypeConst,void 0,P("startsWith")),void 0,void 0,[n.createStringLiteral(O.json)]))),ko=n.createReturnStatement(n.createCallExpression(n.createElementAccessExpression(this.ids.responseConst,ve(this.ids.isJsonConst,n.createStringLiteral(P("json")),n.createStringLiteral(P("text")))),void 0,[])),jo=n.createVariableStatement(fe,k(this.ids.exampleImplementationConst,Po([this.ids.methodParameter,this.ids.pathParameter,this.ids.paramsArgument],n.createBlock([Pt,_e,ke,je,vo,No,ko]),!0),n.createTypeReferenceNode(this.ids.implementationType))),Lo=n.createExpressionStatement(L(this.ids.clientConst,this.ids.provideMethod,[n.createStringLiteral("get /v1/user/retrieve"),n.createObjectLiteralExpression([n.createPropertyAssignment("id",n.createStringLiteral("10"))])])),Mo=n.createVariableStatement(void 0,k(this.ids.clientConst,n.createNewExpression(this.ids.clientClass,void 0,[this.ids.exampleImplementationConst])));this.usage.push(jo,Mo,Lo)}printUsage(t){return this.usage.length?this.usage.map(r=>typeof r=="string"?r:Qt(r,t)).join(`
19
19
  `):void 0}print(t){let r=this.printUsage(t),o=r&&M.addSyntheticLeadingComment(M.addSyntheticLeadingComment(n.createEmptyStatement(),M.SyntaxKind.SingleLineCommentTrivia," Usage example:"),M.SyntaxKind.MultiLineCommentTrivia,`
20
20
  ${r}`);return this.program.concat(o||[]).map((s,i)=>Qt(s,i<this.program.length?t:{...t,omitTrailingSemicolon:!0})).join(`
21
21
 
22
22
  `)}async printFormatted({printerOptions:t,format:r}={}){let o=r;if(!o)try{let a=(await we("prettier")).format;o=c=>a(c,{filepath:"client.ts"})}catch{}let s=this.printUsage(t);this.usage=s&&o?[await o(s)]:this.usage;let i=this.print(t);return o?o(i):i}};import{z as Ne}from"zod";var Zo=(e,t)=>Ne.object({data:t,event:Ne.literal(e),id:Ne.string().optional(),retry:Ne.number().int().positive().optional()}),Di=(e,t,r)=>Zo(String(t),e[t]).transform(o=>[`event: ${o.event}`,`data: ${JSON.stringify(o.data)}`,"",""].join(`
23
- `)).parse({event:t,data:r}),Fi=1e4,Co=e=>e.headersSent||e.writeHead(200,{connection:"keep-alive","content-type":O.sse,"cache-control":"no-cache"}),Bi=e=>new K({handler:async({response:t})=>setTimeout(()=>Co(t),Fi)&&{isClosed:()=>t.writableEnded||t.closed,emit:(r,o)=>{Co(t),t.write(Di(e,r,o),"utf-8"),t.flush()}}}),qi=e=>new de({positive:()=>{let[t,...r]=Object.entries(e).map(([o,s])=>Zo(o,s));return{mimeType:O.sse,schema:r.length?Ne.discriminatedUnion("event",[t,...r]):t}},negative:{mimeType:"text/plain",schema:Ne.string()},handler:async({response:t,error:r,logger:o,request:s,input:i})=>{if(r){let a=be(r);Ke(a,o,s,i),t.headersSent||t.status(a.statusCode).type("text/plain").write(pe(a),"utf-8")}t.end()}}),sr=class extends me{constructor({events:t,config:r}){super({config:r,resultHandler:qi(t)}),this.middlewares=[Bi(t)]}};var $i={dateIn:lr,dateOut:ur,file:st,upload:gr,raw:yr};export{Be as BuiltinLogger,qe as DependsOnMethod,Jt as Documentation,N as DocumentationError,me as EndpointsFactory,sr as EventStreamFactory,B as InputValidationError,nr as Integration,K as Middleware,Me as MissingPeerError,re as OutputValidationError,de as ResultHandler,ye as RoutingError,$e as ServeStatic,Rn as arrayEndpointsFactory,Ht as arrayResultHandler,qn as attachRouting,mn as createConfig,$n as createServer,On as defaultEndpointsFactory,Fe as defaultResultHandler,be as ensureHttpError,$i as ez,_ as getExamples,oe as getMessageFromError,si as testEndpoint,ii as testMiddleware};
23
+ `)).parse({event:t,data:r}),Fi=1e4,Co=e=>e.headersSent||e.writeHead(200,{connection:"keep-alive","content-type":O.sse,"cache-control":"no-cache"}),Bi=e=>new K({handler:async({response:t})=>setTimeout(()=>Co(t),Fi)&&{isClosed:()=>t.writableEnded||t.closed,emit:(r,o)=>{Co(t),t.write(Di(e,r,o),"utf-8"),t.flush?.()}}}),qi=e=>new de({positive:()=>{let[t,...r]=Object.entries(e).map(([o,s])=>Zo(o,s));return{mimeType:O.sse,schema:r.length?Ne.discriminatedUnion("event",[t,...r]):t}},negative:{mimeType:"text/plain",schema:Ne.string()},handler:async({response:t,error:r,logger:o,request:s,input:i})=>{if(r){let a=be(r);Ke(a,o,s,i),t.headersSent||t.status(a.statusCode).type("text/plain").write(pe(a),"utf-8")}t.end()}}),sr=class extends me{constructor({events:t,config:r}){super({config:r,resultHandler:qi(t)}),this.middlewares=[Bi(t)]}};var $i={dateIn:lr,dateOut:ur,file:st,upload:gr,raw:yr};export{Be as BuiltinLogger,qe as DependsOnMethod,Jt as Documentation,N as DocumentationError,me as EndpointsFactory,sr as EventStreamFactory,B as InputValidationError,nr as Integration,K as Middleware,Me as MissingPeerError,re as OutputValidationError,de as ResultHandler,ye as RoutingError,$e as ServeStatic,Rn as arrayEndpointsFactory,Ht as arrayResultHandler,qn as attachRouting,mn as createConfig,$n as createServer,On as defaultEndpointsFactory,Fe as defaultResultHandler,be as ensureHttpError,$i as ez,_ as getExamples,oe as getMessageFromError,si as testEndpoint,ii as testMiddleware};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "express-zod-api",
3
- "version": "21.11.1",
3
+ "version": "21.11.2",
4
4
  "description": "A Typescript framework 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": {
@@ -129,7 +129,7 @@
129
129
  "@types/semver": "^7.5.8",
130
130
  "@types/swagger-ui-express": "^4.1.6",
131
131
  "@typescript-eslint/rule-tester": "^8.15.0",
132
- "@vitest/coverage-v8": "^3.0.1",
132
+ "@vitest/coverage-v8": "^3.0.3",
133
133
  "camelize-ts": "^3.0.0",
134
134
  "compression": "^1.7.4",
135
135
  "cors": "^2.8.5",
@@ -154,7 +154,7 @@
154
154
  "typescript": "^5.5.2",
155
155
  "typescript-eslint": "^8.15.0",
156
156
  "undici": "^6.19.8",
157
- "vitest": "^3.0.1",
157
+ "vitest": "^3.0.3",
158
158
  "zod": "^3.23.0"
159
159
  },
160
160
  "resolutions": {