express-zod-api 24.0.0-beta.1 → 24.0.0-beta.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,6 +1,6 @@
1
- "use strict";var yn=Object.create;var mt=Object.defineProperty;var gn=Object.getOwnPropertyDescriptor;var hn=Object.getOwnPropertyNames;var bn=Object.getPrototypeOf,xn=Object.prototype.hasOwnProperty;var Sn=(e,t)=>{for(var r in t)mt(e,r,{get:t[r],enumerable:!0})},Ar=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of hn(t))!xn.call(e,n)&&n!==r&&mt(e,n,{get:()=>t[n],enumerable:!(o=gn(t,n))||o.enumerable});return e};var y=(e,t,r)=>(r=e!=null?yn(bn(e)):{},Ar(t||!e||!e.__esModule?mt(r,"default",{value:e,enumerable:!0}):r,e)),Rn=e=>Ar(mt({},"__esModule",{value:!0}),e);var _s={};Sn(_s,{BuiltinLogger:()=>qe,DependsOnMethod:()=>Be,Documentation:()=>wt,DocumentationError:()=>J,EndpointsFactory:()=>ge,EventStreamFactory:()=>Mt,InputValidationError:()=>G,Integration:()=>jt,Middleware:()=>F,MissingPeerError:()=>ze,OutputValidationError:()=>se,ResultHandler:()=>fe,RoutingError:()=>ne,ServeStatic:()=>Fe,arrayEndpointsFactory:()=>Wr,arrayResultHandler:()=>Rt,attachRouting:()=>jo,createConfig:()=>Nr,createServer:()=>Mo,defaultEndpointsFactory:()=>Gr,defaultResultHandler:()=>ye,ensureHttpError:()=>Ee,ez:()=>fn,getExamples:()=>Re,getMessageFromError:()=>ee,testEndpoint:()=>rn,testMiddleware:()=>on});module.exports=Rn(_s);var Z=y(require("ramda"),1),W=require("zod/v4");var M=y(require("ramda"),1),ae=require("zod/v4");var v={json:"application/json",upload:"multipart/form-data",raw:"application/octet-stream",sse:"text/event-stream",form:"application/x-www-form-urlencoded"};var ne=class extends Error{name="RoutingError";cause;constructor(t,r,o){super(t),this.cause={method:r,path:o}}},J=class extends Error{name="DocumentationError";cause;constructor(t,{method:r,path:o,isResponse:n}){super(t),this.cause=`${n?"Response":"Input"} schema of an Endpoint assigned to ${r.toUpperCase()} method of ${o} path.`}},Ge=class extends Error{name="IOSchemaError"},lt=class extends Ge{constructor(r){super("Found",{cause:r});this.cause=r}name="DeepCheckError"},se=class extends Ge{constructor(r){super(ee(r),{cause:r});this.cause=r}name="OutputValidationError"},G=class extends Ge{constructor(r){super(ee(r),{cause:r});this.cause=r}name="InputValidationError"},ie=class extends Error{constructor(r,o){super(ee(r),{cause:r});this.cause=r;this.handled=o}name="ResultHandlerError"},ze=class extends Error{name="MissingPeerError";constructor(t){super(`Missing peer dependency: ${t}. Please install it to use the feature.`)}};var Kt=/:([A-Za-z0-9_]+)/g,ut=e=>e.match(Kt)?.map(t=>t.slice(1))||[],On=e=>{let r=(e.header("content-type")||"").toLowerCase().startsWith(v.upload);return"files"in e&&r},qt={get:["query","params"],post:["body","params","files"],put:["body","params"],patch:["body","params"],delete:["query","params"]},Tn=["body","query","params"],Bt=e=>e.method.toLowerCase(),ft=(e,t={})=>{let r=Bt(e);return r==="options"?{}:(t[r]||qt[r]||Tn).filter(o=>o==="files"?On(e):!0).reduce((o,n)=>Object.assign(o,e[n]),{})},pe=e=>e instanceof Error?e:e instanceof ae.z.ZodError?new Error(ee(e),{cause:e}):new Error(String(e)),ee=e=>e instanceof ae.z.ZodError?e.issues.map(({path:t,message:r})=>(t.length?[t.join("/")]:[]).concat(r).join(": ")).join("; "):e instanceof se?`output${e.cause.issues[0]?.path.length>0?"/":": "}${e.message}`:e.message,ce=(e,t)=>e._zod.def.type===t,Pn=e=>Object.entries(e._zod.def.shape).reduce((t,[r,o])=>{let{examples:n=[]}=ae.globalRegistry.get(o)?.[T]||{};return Oe(t,n.map(M.objOf(r)),([s,i])=>({...s,...i}))},[]),Re=({schema:e,variant:t="original",validate:r=t==="parsed",pullProps:o=!1})=>{let n=ae.globalRegistry.get(e)?.[T]?.examples||[];if(!n.length&&o&&ce(e,"object")&&(n=Pn(e)),!r&&t==="original")return n;let s=[];for(let i of n){let p=ae.z.safeParse(e,i);p.success&&s.push(t==="parsed"?p.data:i)}return s},Oe=(e,t,r)=>e.length&&t.length?M.xprod(e,t).map(r):e.concat(t),Ft=e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase(),de=(...e)=>{let t=M.chain(o=>o.split(/[^A-Z0-9]/gi),e);return M.chain(o=>o.replaceAll(/[A-Z]+/g,n=>`/${n}`).split("/"),t).map(Ft).join("")},yt=M.tryCatch((e,t)=>typeof ae.z.parse(e,t),M.always(void 0)),gt=({_zod:{optin:e,optout:t}},{isResponse:r})=>(r?t:e)==="optional",L=e=>typeof e=="object"&&e!==null,Te=M.memoizeWith(()=>"static",()=>process.env.NODE_ENV==="production");var Cr=y(require("ramda"),1),T=Symbol.for("express-zod-api"),Ir=(e,t)=>{let r=e.meta(),o=t.meta();if(!r?.[T])return t;let n=Oe(o?.[T]?.examples||[],r[T].examples||[],([s,i])=>typeof s=="object"&&typeof i=="object"&&s&&i?Cr.mergeDeepRight(s,i):i);return t.meta({...o,[T]:{...o?.[T],examples:n}})},te=e=>{let{brand:t}=e._zod.bag;if(typeof t=="symbol"||typeof t=="string"||typeof t=="number")return t};var wn=W.z.core.$constructor("$EZBrandCheck",(e,t)=>{W.z.core.$ZodCheck.init(e,t),e._zod.onattach.push(r=>r._zod.bag.brand=t.brand),e._zod.check=()=>{}}),En=function(e){let{[T]:t,...r}=this.meta()||{},o=t?.examples.slice()||[];return o.push(e),this.meta({...r,[T]:{...t,examples:o}})},vn=function(){return this.meta({...this.meta(),deprecated:!0})},kn=function(e){let{[T]:t={examples:[]},...r}=this.meta()||{};return this.meta({...r,[T]:{...t,defaultLabel:e}})},An=function(e){return this.check(new wn({brand:e,check:"$EZBrandCheck"}))},Cn=function(e){let t=typeof e=="function"?e:Z.pipe(Z.toPairs,Z.map(([s,i])=>Z.pair(e[String(s)]||s,i)),Z.fromPairs),r=t(Z.map(Z.invoker(0,"clone"),this._zod.def.shape)),n=(this._zod.def.catchall instanceof W.z.ZodUnknown?W.z.looseObject:W.z.object)(r);return this.transform(t).pipe(n)};if(!(T in globalThis)){globalThis[T]=!0;for(let e of Object.keys(W.z)){if(!e.startsWith("Zod")||/(Success|Error|Function)$/.test(e))continue;let t=W.z[e];typeof t=="function"&&Object.defineProperties(t.prototype,{example:{get(){return En.bind(this)}},deprecated:{get(){return vn.bind(this)}},brand:{set(){},get(){return An.bind(this)}}})}Object.defineProperty(W.z.ZodDefault.prototype,"label",{get(){return kn.bind(this)}}),Object.defineProperty(W.z.ZodObject.prototype,"remap",{get(){return Cn.bind(this)}})}function Nr(e){return e}var Qt=require("zod/v4");var Ze=y(require("ramda"),1),Wt=require("zod/v4");var ue=y(require("ramda"),1),Ut=require("zod/v4");var je=require("zod/v4"),Pe=Symbol("DateIn"),zr=()=>je.z.union([je.z.iso.date(),je.z.iso.datetime(),je.z.iso.datetime({local:!0})]).transform(t=>new Date(t)).pipe(je.z.date()).brand(Pe);var jr=require("zod/v4"),we=Symbol("DateOut"),Mr=()=>jr.z.date().transform(e=>e.toISOString()).brand(we);var Dt=require("zod/v4"),We=Symbol("Form"),Lr=e=>(e instanceof Dt.z.ZodObject?e:Dt.z.object(e)).brand(We);var Zr=require("zod/v4"),me=Symbol("Upload"),$r=()=>Zr.z.custom(e=>typeof e=="object"&&e!==null&&"name"in e&&"encoding"in e&&"mimetype"in e&&"data"in e&&"tempFilePath"in e&&"truncated"in e&&"size"in e&&"md5"in e&&"mv"in e&&typeof e.name=="string"&&typeof e.encoding=="string"&&typeof e.mimetype=="string"&&Buffer.isBuffer(e.data)&&typeof e.tempFilePath=="string"&&typeof e.truncated=="boolean"&&typeof e.size=="number"&&typeof e.md5=="string"&&typeof e.mv=="function",{error:({input:e})=>({message:`Expected file upload, received ${typeof e}`})}).brand(me);var Kr=require("zod/v4");var Ye=require("zod/v4"),le=Symbol("File"),Hr=Ye.z.custom(e=>Buffer.isBuffer(e),{message:"Expected Buffer"}),In={buffer:()=>Hr.brand(le),string:()=>Ye.z.string().brand(le),binary:()=>Hr.or(Ye.z.string()).brand(le),base64:()=>Ye.z.base64().brand(le)};function ht(e){return In[e||"string"]()}var B=Symbol("Raw"),qr=Kr.z.object({raw:ht("buffer")}),Nn=e=>qr.extend(e).brand(B);function Br(e){return e?Nn(e):qr.brand(B)}var Fr=(e,{io:t,condition:r})=>ue.tryCatch(()=>{Ut.z.toJSONSchema(e,{io:t,unrepresentable:"any",override:({zodSchema:o})=>{if(r(o))throw new lt(o)}})},o=>o.cause)(),Dr=(e,{io:t})=>{let o=[Ut.z.toJSONSchema(e,{io:t,unrepresentable:"any",override:({jsonSchema:n})=>{typeof n.default=="bigint"&&delete n.default}})];for(;o.length;){let n=o.shift();if(ue.is(Object,n)){if(n.$ref==="#")return!0;o.push(...ue.values(n))}ue.is(Array,n)&&o.push(...ue.values(n))}return!1},Ur=e=>Fr(e,{condition:t=>{let r=te(t);return typeof r=="symbol"&&[me,B,We].includes(r)},io:"input"}),zn=["nan","symbol","map","set","bigint","void","promise","never"],Vt=(e,t)=>Fr(e,{io:t,condition:r=>{let o=te(r),{type:n}=r._zod.def;return!!(zn.includes(n)||t==="input"&&(n==="date"||o===we)||t==="output"&&(o===Pe||o===B||o===me))}});var bt=y(require("http-errors"),1);var Qe=y(require("http-errors"),1),Vr=require("zod/v4");var _t=(e,{variant:t,args:r,...o})=>{if(typeof e=="function"&&(e=e(...r)),e instanceof Vr.z.ZodType)return[{schema:e,...o}];if(Array.isArray(e)&&!e.length){let n=new Error(`At least one ${t} response schema required.`);throw new ie(n)}return(Array.isArray(e)?e:[e]).map(({schema:n,statusCode:s,mimeType:i})=>({schema:n,statusCodes:typeof s=="number"?[s]:s||o.statusCodes,mimeTypes:typeof i=="string"?[i]:i===void 0?o.mimeTypes:i}))},Xe=(e,t,{url:r},o)=>!e.expose&&t.error("Server side error",{error:e,url:r,payload:o}),Ee=e=>(0,Qe.isHttpError)(e)?e:(0,Qe.default)(e instanceof G?400:500,ee(e),{cause:e.cause||e}),ve=e=>Te()&&!e.expose?(0,Qe.default)(e.statusCode).message:e.message;var xt=({error:e,logger:t,response:r})=>{t.error("Result handler failure",e);let o=ve((0,bt.default)(500,`An error occurred while serving the result: ${e.message}.`+(e.handled?`
2
- Original error: ${e.handled.message}.`:""),{expose:(0,bt.isHttpError)(e.cause)?e.cause.expose:!1}));r.status(500).type("text/plain").end(o)};var Jt=require("zod/v4");var Gt=class{},F=class extends Gt{#e;#t;#r;constructor({input:t=Jt.z.object({}),security:r,handler:o}){super(),this.#e=t,this.#t=r,this.#r=o}get security(){return this.#t}get schema(){return this.#e}async execute({input:t,...r}){try{let o=await this.#e.parseAsync(t);return this.#r({...r,input:o})}catch(o){throw o instanceof Jt.z.ZodError?new G(o):o}}},Me=class extends F{constructor(t,{provider:r=()=>({}),transformer:o=n=>n}={}){super({handler:async({request:n,response:s})=>new Promise((i,p)=>{let d=c=>{if(c&&c instanceof Error)return p(o(c));i(r(n,s))};t(n,s,d)?.catch(d)})})}};var Le=class{nest(t){return Object.assign(t,{"":this})}};var et=class extends Le{},St=class e extends et{#e;constructor(t){super(),this.#e=t}#t(t){return new e({...this.#e,...t})}deprecated(){return this.#t({deprecated:!0})}get isDeprecated(){return this.#e.deprecated||!1}get description(){return this.#e.description}get shortDescription(){return this.#e.shortDescription}get methods(){return Object.freeze(this.#e.methods)}get inputSchema(){return this.#e.inputSchema}get outputSchema(){return this.#e.outputSchema}get requestType(){let t=Ur(this.#e.inputSchema);if(t){let r=te(t);if(r===me)return"upload";if(r===B)return"raw";if(r===We)return"form"}return"json"}getResponses(t){return Object.freeze(t==="negative"?this.#e.resultHandler.getNegativeResponse():this.#e.resultHandler.getPositiveResponse(this.#e.outputSchema))}get security(){let t=Ze.pluck("security",this.#e.middlewares||[]);return Ze.reject(Ze.isNil,t)}get scopes(){return Object.freeze(this.#e.scopes||[])}get tags(){return Object.freeze(this.#e.tags||[])}getOperationId(t){return this.#e.getOperationId?.(t)}async#r(t){try{return await this.#e.outputSchema.parseAsync(t)}catch(r){throw r instanceof Wt.z.ZodError?new se(r):r}}async#o({method:t,logger:r,options:o,response:n,...s}){for(let i of this.#e.middlewares||[])if(!(t==="options"&&!(i instanceof Me))&&(Object.assign(o,await i.execute({...s,options:o,response:n,logger:r})),n.writableEnded)){r.warn("A middleware has closed the stream. Accumulated options:",o);break}}async#n({input:t,...r}){let o;try{o=await this.#e.inputSchema.parseAsync(t)}catch(n){throw n instanceof Wt.z.ZodError?new G(n):n}return this.#e.handler({...r,input:o})}async#s(t){try{await this.#e.resultHandler.execute(t)}catch(r){xt({...t,error:new ie(pe(r),t.error||void 0)})}}async execute({request:t,response:r,logger:o,config:n}){let s=Bt(t),i={},p={output:{},error:null},d=ft(t,n.inputSources);try{if(await this.#o({method:s,input:d,request:t,response:r,logger:o,options:i}),r.writableEnded)return;if(s==="options")return void r.status(200).end();p={output:await this.#r(await this.#n({input:d,logger:o,options:i})),error:null}}catch(c){p={output:null,error:pe(c)}}await this.#s({...p,input:d,request:t,response:r,logger:o,options:i})}};var _r=y(require("ramda"),1);var Jr=(e,t)=>{let r=_r.pluck("schema",e);r.push(t);let o=r.reduce((n,s)=>n.and(s));return r.reduce((n,s)=>Ir(s,n),o)};var H=require("zod/v4");var $e={positive:200,negative:400},He=Object.keys($e);var Yt=class{#e;constructor(t){this.#e=t}execute(...t){return this.#e(...t)}},fe=class extends Yt{#e;#t;constructor(t){super(t.handler),this.#e=t.positive,this.#t=t.negative}getPositiveResponse(t){return _t(this.#e,{variant:"positive",args:[t],statusCodes:[$e.positive],mimeTypes:[v.json]})}getNegativeResponse(){return _t(this.#t,{variant:"negative",args:[],statusCodes:[$e.negative],mimeTypes:[v.json]})}},ye=new fe({positive:e=>{let t=Re({schema:e,pullProps:!0}),r=H.z.object({status:H.z.literal("success"),data:e});return t.reduce((o,n)=>o.example({status:"success",data:n}),r)},negative:H.z.object({status:H.z.literal("error"),error:H.z.object({message:H.z.string()})}).example({status:"error",error:{message:"Sample error message"}}),handler:({error:e,input:t,output:r,request:o,response:n,logger:s})=>{if(e){let i=Ee(e);return Xe(i,s,o,t),void n.status(i.statusCode).set(i.headers).json({status:"error",error:{message:ve(i)}})}n.status($e.positive).json({status:"success",data:r})}}),Rt=new fe({positive:e=>{let t=Re({schema:e}),r=e instanceof H.z.ZodObject&&"items"in e.shape&&e.shape.items instanceof H.z.ZodArray?e.shape.items:H.z.array(H.z.any());return t.reduce((o,n)=>L(n)&&"items"in n&&Array.isArray(n.items)?o.example(n.items):o,r)},negative:H.z.string().example("Sample error message"),handler:({response:e,output:t,error:r,logger:o,request:n,input:s})=>{if(r){let i=Ee(r);return Xe(i,o,n,s),void e.status(i.statusCode).type("text/plain").send(ve(i))}if("items"in t&&Array.isArray(t.items))return void e.status($e.positive).json(t.items);throw new Error("Property 'items' is missing in the endpoint output")}});var ge=class e{constructor(t){this.resultHandler=t}middlewares=[];static#e(t,r){let o=new e(r);return o.middlewares=t,o}addMiddleware(t){return e.#e(this.middlewares.concat(t instanceof F?t:new F(t)),this.resultHandler)}use=this.addExpressMiddleware;addExpressMiddleware(...t){return e.#e(this.middlewares.concat(new Me(...t)),this.resultHandler)}addOptions(t){return e.#e(this.middlewares.concat(new F({handler:t})),this.resultHandler)}build({input:t=Qt.z.object({}),output:r,operationId:o,scope:n,tag:s,method:i,...p}){let{middlewares:d,resultHandler:c}=this,m=typeof i=="string"?[i]:i,h=typeof o=="function"?o:()=>o,b=typeof n=="string"?[n]:n||[],g=typeof s=="string"?[s]:s||[];return new St({...p,middlewares:d,outputSchema:r,resultHandler:c,scopes:b,tags:g,methods:m,getOperationId:h,inputSchema:Jr(d,t)})}buildVoid({handler:t,...r}){return this.build({...r,output:Qt.z.object({}),handler:async o=>(await t(o),{})})}},Gr=new ge(ye),Wr=new ge(Rt);var ro=y(require("ansis"),1),oo=require("node:util"),er=require("node:perf_hooks");var Y=require("ansis"),Yr=y(require("ramda"),1);var Xt={debug:Y.blue,info:Y.green,warn:(0,Y.hex)("#FFA500"),error:Y.red,ctx:Y.cyanBright},Ot={debug:10,info:20,warn:30,error:40},Qr=e=>L(e)&&Object.keys(Ot).some(t=>t in e),Xr=e=>e in Ot,eo=(e,t)=>Ot[e]<Ot[t],jn=(e,t=0)=>Intl.NumberFormat(void 0,{useGrouping:!1,minimumFractionDigits:0,maximumFractionDigits:t,style:"unit",unitDisplay:"long",unit:e}),Ke=Yr.memoizeWith((e,t)=>`${e}${t}`,jn),to=e=>e<1e-6?Ke("nanosecond",3).format(e/1e-6):e<.001?Ke("nanosecond").format(e/1e-6):e<1?Ke("microsecond").format(e/.001):e<1e3?Ke("millisecond").format(e):e<6e4?Ke("second",2).format(e/1e3):Ke("minute",2).format(e/6e4);var qe=class e{config;constructor({color:t=ro.default.isSupported(),level:r=Te()?"warn":"debug",depth:o=2,ctx:n={}}={}){this.config={color:t,level:r,depth:o,ctx:n}}format(t){let{depth:r,color:o,level:n}=this.config;return(0,oo.inspect)(t,{depth:r,colors:o,breakLength:n==="debug"?80:1/0,compact:n==="debug"?3:!0})}print(t,r,o){let{level:n,ctx:{requestId:s,...i},color:p}=this.config;if(n==="silent"||eo(t,n))return;let d=[new Date().toISOString()];s&&d.push(p?Xt.ctx(s):s),d.push(p?`${Xt[t](t)}:`:`${t}:`,r),o!==void 0&&d.push(this.format(o)),Object.keys(i).length>0&&d.push(this.format(i)),console.log(d.join(" "))}debug(t,r){this.print("debug",t,r)}info(t,r){this.print("info",t,r)}warn(t,r){this.print("warn",t,r)}error(t,r){this.print("error",t,r)}child(t){return new e({...this.config,ctx:t})}get ctx(){return this.config.ctx}profile(t){let r=er.performance.now();return()=>{let o=er.performance.now()-r,{message:n,severity:s="debug",formatter:i=to}=typeof t=="object"?t:{message:t};this.print(typeof s=="function"?s(o):s,n,i(o))}}};var no=y(require("ramda"),1);var Be=class e extends Le{#e;constructor(t){super(),this.#e=t}get entries(){let t=no.filter(r=>!!r[1],Object.entries(this.#e));return Object.freeze(t)}deprecated(){let t=Object.entries(this.#e).reduce((r,[o,n])=>Object.assign(r,{[o]:n.deprecated()}),{});return new e(t)}};var so=y(require("express"),1),Fe=class{#e;constructor(...t){this.#e=t}apply(t,r){return r(t,so.default.static(...this.#e))}};var tt=y(require("express"),1),Io=y(require("node:http"),1),No=y(require("node:https"),1);var De=async(e,t="default")=>{try{return(await Promise.resolve().then(()=>y(require(e))))[t]}catch{}throw new ze(e)};var mo=y(require("http-errors"),1);var tr=require("zod/v4");var R=y(require("ramda"),1);var Mn=e=>e.type==="object",Ln=R.mergeDeepWith((e,t)=>{if(Array.isArray(e)&&Array.isArray(t))return R.concat(e,t);if(e===t)return t;throw new Error("Can not flatten properties")}),Zn=R.pipe(Object.keys,R.without(["type","properties","required","examples","description"]),R.isEmpty),io=R.pair(!0),Ue=(e,t="coerce")=>{let r=[R.pair(!1,e)],o={type:"object",properties:{}},n=[];for(;r.length;){let[s,i]=r.shift();if(i.description&&(o.description??=i.description),i.allOf&&r.push(...i.allOf.map(p=>{if(t==="throw"&&!(p.type==="object"&&Zn(p)))throw new Error("Can not merge");return R.pair(s,p)})),i.anyOf&&r.push(...R.map(io,i.anyOf)),i.oneOf&&r.push(...R.map(io,i.oneOf)),!!Mn(i)&&(i.properties&&(o.properties=(t==="throw"?Ln:R.mergeDeepRight)(o.properties,i.properties),!s&&i.required&&n.push(...i.required)),i.examples?.length&&(s?o.examples=R.concat(o.examples||[],i.examples):o.examples=Oe(o.examples?.filter(L)||[],i.examples.filter(L),([p,d])=>R.mergeDeepRight(p,d))),i.propertyNames)){let p=[];typeof i.propertyNames.const=="string"&&p.push(i.propertyNames.const),i.propertyNames.enum&&p.push(...i.propertyNames.enum.filter(c=>typeof c=="string"));let d={...Object(i.additionalProperties)};for(let c of p)o.properties[c]??=d;s||n.push(...p)}}return n.length&&(o.required=[...new Set(n)]),o};var Tt=class{constructor(t){this.logger=t}#e=new WeakSet;#t=new WeakMap;checkSchema(t,r){if(!this.#e.has(t)){for(let o of["input","output"]){let n=[tr.z.toJSONSchema(t[`${o}Schema`],{unrepresentable:"any"})];for(;n.length>0;){let s=n.shift();s.type&&s.type!=="object"&&this.logger.warn(`Endpoint ${o} schema is not object-based`,r);for(let i of["allOf","oneOf","anyOf"])s[i]&&n.push(...s[i])}}if(t.requestType==="json"){let o=Vt(t.inputSchema,"input");o&&this.logger.warn("The final input schema of the endpoint contains an unsupported JSON payload type.",Object.assign(r,{reason:o}))}for(let o of He)for(let{mimeTypes:n,schema:s}of t.getResponses(o)){if(!n?.includes(v.json))continue;let i=Vt(s,"output");i&&this.logger.warn(`The final ${o} response schema of the endpoint contains an unsupported JSON payload type.`,Object.assign(r,{reason:i}))}this.#e.add(t)}}checkPathParams(t,r,o){let n=this.#t.get(r);if(n?.paths.includes(t))return;let s=ut(t);if(s.length===0)return;let i=n?.flat||Ue(tr.z.toJSONSchema(r.inputSchema,{unrepresentable:"any",io:"input"}));for(let p of s)p in i.properties||this.logger.warn("The input schema of the endpoint is most likely missing the parameter of the path it's assigned to.",Object.assign(o,{path:t,param:p}));n?n.paths.push(t):this.#t.set(r,{flat:i,paths:[t]})}};var rr=["get","post","put","delete","patch"],ao=e=>rr.includes(e);var $n=e=>{let[t,r]=e.trim().split(/ (.+)/,2);return r&&ao(t)?[r,t]:[e]},Hn=e=>e.trim().split("/").filter(Boolean).join("/"),po=(e,t)=>Object.entries(e).map(([r,o])=>{let[n,s]=$n(r);return[[t||""].concat(Hn(n)||[]).join("/"),o,s]}),Kn=(e,t)=>{throw new ne("Route with explicit method can only be assigned with Endpoint",e,t)},co=(e,t,r)=>{if(!(!r||r.includes(e)))throw new ne(`Method ${e} is not supported by the assigned Endpoint.`,e,t)},or=(e,t,r)=>{let o=`${e} ${t}`;if(r.has(o))throw new ne("Route has a duplicate",e,t);r.add(o)},Ve=({routing:e,onEndpoint:t,onStatic:r})=>{let o=po(e),n=new Set;for(;o.length;){let[s,i,p]=o.shift();if(i instanceof et)if(p)or(p,s,n),co(p,s,i.methods),t(i,s,p);else{let{methods:d=["get"]}=i;for(let c of d)or(c,s,n),t(i,s,c)}else if(p&&Kn(p,s),i instanceof Fe)r&&i.apply(s,r);else if(i instanceof Be)for(let[d,c]of i.entries){let{methods:m}=c;or(d,s,n),co(d,s,m),t(c,s,d)}else o.unshift(...po(i,s))}};var lo=y(require("ramda"),1),uo=e=>e.sort((t,r)=>+(t==="options")-+(r==="options")).join(", ").toUpperCase(),qn=e=>({method:t},r,o)=>{let n=uo(e);r.set({Allow:n});let s=(0,mo.default)(405,`${t} is not allowed`,{headers:{Allow:n}});o(s)},Bn=e=>({"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":uo(e),"Access-Control-Allow-Headers":"content-type"}),nr=({app:e,getLogger:t,config:r,routing:o,parsers:n})=>{let s=Te()?void 0:new Tt(t()),i=new Map;Ve({routing:o,onEndpoint:(c,m,h)=>{Te()||(s?.checkSchema(c,{path:m,method:h}),s?.checkPathParams(m,c,{method:h}));let b=n?.[c.requestType]||[],g=lo.pair(b,c);i.has(m)||i.set(m,new Map(r.cors?[["options",g]]:[])),i.get(m)?.set(h,g)},onStatic:e.use.bind(e)}),s=void 0;let d=new Map;for(let[c,m]of i){let h=Array.from(m.keys());for(let[b,[g,A]]of m){let C=async($,O)=>{let I=t($);if(r.cors){let N=Bn(h),_=typeof r.cors=="function"?await r.cors({request:$,endpoint:A,logger:I,defaultHeaders:N}):N;O.set(_)}return A.execute({request:$,response:O,logger:I,config:r})};e[b](c,...g,C)}r.wrongMethodBehavior!==404&&d.set(c,qn(h))}for(let[c,m]of d)e.all(c,m)};var Ro=y(require("http-errors"),1);var xo=require("node:timers/promises");var fo=e=>"_httpMessage"in e&&typeof e._httpMessage=="object"&&e._httpMessage!==null&&"headersSent"in e._httpMessage&&typeof e._httpMessage.headersSent=="boolean"&&"setHeader"in e._httpMessage&&typeof e._httpMessage.setHeader=="function",yo=e=>"server"in e&&typeof e.server=="object"&&e.server!==null&&"close"in e.server&&typeof e.server.close=="function",go=e=>"encrypted"in e&&typeof e.encrypted=="boolean"&&e.encrypted,ho=({},e)=>void(!e.headersSent&&e.setHeader("connection","close")),bo=e=>new Promise((t,r)=>void e.close(o=>o?r(o):t()));var So=(e,{timeout:t=1e3,logger:r}={})=>{let o,n=new Set,s=c=>void n.delete(c.destroy()),i=c=>void(fo(c)?!c._httpMessage.headersSent&&c._httpMessage.setHeader("connection","close"):s(c)),p=c=>void(o?c.destroy():n.add(c.once("close",()=>void n.delete(c))));for(let c of e)for(let m of["connection","secureConnection"])c.on(m,p);let d=async()=>{for(let c of e)c.on("request",ho);r?.info("Graceful shutdown",{sockets:n.size,timeout:t});for(let c of n)(go(c)||yo(c))&&i(c);for await(let c of(0,xo.setInterval)(10,Date.now()))if(n.size===0||Date.now()-c>=t)break;for(let c of n)s(c);return Promise.allSettled(e.map(bo))};return{sockets:n,shutdown:()=>o??=d()}};var Oo=({errorHandler:e,getLogger:t})=>async(r,o,n,s)=>r?e.execute({error:pe(r),request:o,response:n,input:null,output:null,options:{},logger:t(o)}):s(),To=({errorHandler:e,getLogger:t})=>async(r,o)=>{let n=(0,Ro.default)(404,`Can not ${r.method} ${r.path}`),s=t(r);try{await e.execute({request:r,response:o,logger:s,error:n,input:null,output:null,options:{}})}catch(i){xt({response:o,logger:s,error:new ie(pe(i),n)})}},Fn=e=>(t,{},r)=>{if(Object.values(t?.files||[]).flat().find(({truncated:n})=>n))return r(e);r()},Dn=e=>({log:e.debug.bind(e)}),Po=async({getLogger:e,config:t})=>{let r=await De("express-fileupload"),{limitError:o,beforeUpload:n,...s}={...typeof t.upload=="object"&&t.upload},i=[];return i.push(async(p,d,c)=>{let m=e(p);return await n?.({request:p,logger:m}),r({debug:!0,...s,abortOnLimit:!1,parseNested:!0,logger:Dn(m)})(p,d,c)}),o&&i.push(Fn(o)),i},wo=(e,{},t)=>{Buffer.isBuffer(e.body)&&(e.body={raw:e.body}),t()},Eo=({logger:e,config:{childLoggerProvider:t,accessLogger:r=({method:o,path:n},s)=>s.debug(`${o}: ${n}`)}})=>async(o,n,s)=>{let i=await t?.({request:o,parent:e})||e;r?.(o,i),o.res&&(o.res.locals[T]={logger:i}),s()},vo=e=>t=>t?.res?.locals[T]?.logger||e,ko=e=>process.on("deprecation",({message:t,namespace:r,name:o,stack:n})=>e.warn(`${o} (${r}): ${t}`,n.split(`
3
- `).slice(1))),Ao=({servers:e,logger:t,options:{timeout:r,events:o=["SIGINT","SIGTERM"]}})=>{let n=So(e,{logger:t,timeout:r}),s=()=>n.shutdown().then(()=>process.exit());for(let i of o)process.on(i,s)};var K=require("ansis"),Co=e=>{if(e.columns<132)return;let t=(0,K.italic)("Proudly supports transgender community.".padStart(109)),r=(0,K.italic)("Start your API server with I/O schema validation and custom middlewares in minutes.".padStart(109)),o=(0,K.italic)("Thank you for choosing Express Zod API for your project.".padStart(132)),n=(0,K.italic)("for Ashley".padEnd(20)),s=(0,K.hex)("#F5A9B8"),i=(0,K.hex)("#5BCEFA"),p=new Array(14).fill(i,1,3).fill(s,3,5).fill(K.whiteBright,5,7).fill(s,7,9).fill(i,9,12).fill(K.gray,12,13),d=`
1
+ "use strict";var fn=Object.create;var ct=Object.defineProperty;var yn=Object.getOwnPropertyDescriptor;var gn=Object.getOwnPropertyNames;var hn=Object.getPrototypeOf,bn=Object.prototype.hasOwnProperty;var xn=(e,t)=>{for(var r in t)ct(e,r,{get:t[r],enumerable:!0})},vr=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of gn(t))!bn.call(e,n)&&n!==r&&ct(e,n,{get:()=>t[n],enumerable:!(o=yn(t,n))||o.enumerable});return e};var y=(e,t,r)=>(r=e!=null?fn(hn(e)):{},vr(t||!e||!e.__esModule?ct(r,"default",{value:e,enumerable:!0}):r,e)),Sn=e=>vr(ct({},"__esModule",{value:!0}),e);var qs={};xn(qs,{BuiltinLogger:()=>He,DependsOnMethod:()=>Ke,Documentation:()=>Tt,DocumentationError:()=>V,EndpointsFactory:()=>ue,EventStreamFactory:()=>jt,InputValidationError:()=>G,Integration:()=>Nt,Middleware:()=>q,MissingPeerError:()=>ze,OutputValidationError:()=>je,ResultHandler:()=>me,RoutingError:()=>ie,ServeStatic:()=>qe,arrayEndpointsFactory:()=>Vr,arrayResultHandler:()=>xt,attachRouting:()=>No,createConfig:()=>kr,createServer:()=>jo,defaultEndpointsFactory:()=>Jr,defaultResultHandler:()=>le,ensureHttpError:()=>Oe,ez:()=>un,getMessageFromError:()=>ne,testEndpoint:()=>en,testMiddleware:()=>tn});module.exports=Sn(qs);var L=y(require("ramda"),1),J=require("zod/v4");var Ce=Symbol.for("express-zod-api"),ee=e=>{let{brand:t}=e._zod.bag||{};if(typeof t=="symbol"||typeof t=="string"||typeof t=="number")return t};var Rn=J.z.core.$constructor("$EZBrandCheck",(e,t)=>{J.z.core.$ZodCheck.init(e,t),e._zod.onattach.push(r=>r._zod.bag.brand=t.brand),e._zod.check=()=>{}}),On=function(e){let{examples:t=[]}=this.meta()||{},r=t.slice();return r.push(e),this.meta({examples:r})},Tn=function(){return this.meta({deprecated:!0})},Pn=function(e){return this.meta({default:e})},wn=function(e){return this.check(new Rn({brand:e,check:"$EZBrandCheck"}))},En=function(e){let t=typeof e=="function"?e:L.pipe(L.toPairs,L.map(([s,i])=>L.pair(e[String(s)]||s,i)),L.fromPairs),r=t(L.map(L.invoker(0,"clone"),this._zod.def.shape)),n=(this._zod.def.catchall instanceof J.z.ZodUnknown?J.z.looseObject:J.z.object)(r);return this.transform(t).pipe(n)};if(!(Ce in globalThis)){globalThis[Ce]=!0;for(let e of Object.keys(J.z)){if(!e.startsWith("Zod")||/(Success|Error|Function)$/.test(e))continue;let t=J.z[e];typeof t=="function"&&Object.defineProperties(t.prototype,{example:{value:On,writable:!1},deprecated:{value:Tn,writable:!1},brand:{set(){},get(){return wn.bind(this)}}})}Object.defineProperty(J.z.ZodDefault.prototype,"label",{value:Pn,writable:!1}),Object.defineProperty(J.z.ZodObject.prototype,"remap",{value:En,writable:!1})}function kr(e){return e}var Gt=require("zod/v4");var de=y(require("ramda"),1),Qe=require("zod/v4");var ce=y(require("ramda"),1),Ft=require("zod/v4");var Cr=require("zod/v4"),he=Symbol("Buffer"),dt=()=>Cr.z.custom(e=>Buffer.isBuffer(e),{error:"Expected Buffer"}).brand(he);var Ae=require("zod/v4"),be=Symbol("DateIn"),Ar=({examples:e,...t}={})=>Ae.z.union([Ae.z.iso.date(),Ae.z.iso.datetime(),Ae.z.iso.datetime({local:!0})]).meta({examples:e}).transform(o=>new Date(o)).pipe(Ae.z.date()).brand(be).meta(t);var Ir=require("zod/v4"),xe=Symbol("DateOut"),Nr=({examples:e,...t}={})=>Ir.z.date().transform(r=>r.toISOString()).brand(xe).meta({...t,examples:e});var jr=require("zod/v4");var H=y(require("ramda"),1),Ie=require("zod/v4");var E={json:"application/json",upload:"multipart/form-data",raw:"application/octet-stream",sse:"text/event-stream",form:"application/x-www-form-urlencoded"};var Zt=/:([A-Za-z0-9_]+)/g,mt=e=>e.match(Zt)?.map(t=>t.slice(1))||[],vn=e=>{let r=(e.header("content-type")||"").toLowerCase().startsWith(E.upload);return"files"in e&&r},Bt={get:["query","params"],post:["body","params","files"],put:["body","params"],patch:["body","params"],delete:["query","params"]},kn=["body","query","params"],Ht=e=>e.method.toLowerCase(),lt=(e,t={})=>{let r=Ht(e);return r==="options"?{}:(t[r]||Bt[r]||kn).filter(o=>o==="files"?vn(e):!0).reduce((o,n)=>Object.assign(o,e[n]),{})},oe=e=>e instanceof Error?e:e instanceof Ie.z.ZodError?new Ie.z.ZodRealError(e.issues):new Error(String(e)),ne=e=>e instanceof Ie.z.ZodError?e.issues.map(({path:t,message:r})=>`${t.length?`${Ie.z.core.toDotPath(t)}: `:""}${r}`).join("; "):e.message,Ne=(e,t)=>e._zod.def.type===t,Se=(e,t,r)=>e.length&&t.length?H.xprod(e,t).map(r):e.concat(t),Kt=e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase(),se=(...e)=>{let t=H.chain(o=>o.split(/[^A-Z0-9]/gi),e);return H.chain(o=>o.replaceAll(/[A-Z]+/g,n=>`/${n}`).split("/"),t).map(Kt).join("")},ut=H.tryCatch((e,t)=>typeof Ie.z.parse(e,t),H.always(void 0)),M=e=>typeof e=="object"&&e!==null,Re=H.memoizeWith(()=>"static",()=>process.env.NODE_ENV==="production");var ie=class extends Error{name="RoutingError";cause;constructor(t,r,o){super(t),this.cause={method:r,path:o}}},V=class extends Error{name="DocumentationError";cause;constructor(t,{method:r,path:o,isResponse:n}){super(t),this.cause=`${n?"Response":"Input"} schema of an Endpoint assigned to ${r.toUpperCase()} method of ${o} path.`}},Ve=class extends Error{name="IOSchemaError"},ft=class extends Ve{constructor(r){super("Found",{cause:r});this.cause=r}name="DeepCheckError"},je=class extends Ve{constructor(r){let o=new jr.z.ZodError(r.issues.map(({path:n,...s})=>({...s,path:["output",...n]})));super(ne(o),{cause:r});this.cause=r}name="OutputValidationError"},G=class extends Ve{constructor(r){super(ne(r),{cause:r});this.cause=r}name="InputValidationError"},ae=class extends Error{constructor(r,o){super(ne(r),{cause:r});this.cause=r;this.handled=o}name="ResultHandlerError"},ze=class extends Error{name="MissingPeerError";constructor(t){super(`Missing peer dependency: ${t}. Please install it to use the feature.`)}};var qt=require("zod/v4"),Ge=Symbol("Form"),zr=e=>(e instanceof qt.z.ZodObject?e:qt.z.object(e)).brand(Ge);var Lr=require("zod/v4"),pe=Symbol("Upload"),Mr=()=>Lr.z.custom(e=>typeof e=="object"&&e!==null&&"name"in e&&"encoding"in e&&"mimetype"in e&&"data"in e&&"tempFilePath"in e&&"truncated"in e&&"size"in e&&"md5"in e&&"mv"in e&&typeof e.name=="string"&&typeof e.encoding=="string"&&typeof e.mimetype=="string"&&Buffer.isBuffer(e.data)&&typeof e.tempFilePath=="string"&&typeof e.truncated=="boolean"&&typeof e.size=="number"&&typeof e.md5=="string"&&typeof e.mv=="function",{error:({input:e})=>({message:`Expected file upload, received ${typeof e}`})}).brand(pe);var $r=require("zod/v4");var K=Symbol("Raw"),Zr=$r.z.object({raw:dt()}),Cn=e=>Zr.extend(e).brand(K);function Br(e){return e?Cn(e):Zr.brand(K)}var Hr=(e,{io:t,condition:r})=>ce.tryCatch(()=>{Ft.z.toJSONSchema(e,{io:t,unrepresentable:"any",override:({zodSchema:o})=>{if(r(o))throw new ft(o)}})},o=>o.cause)(),Kr=(e,{io:t})=>{let o=[Ft.z.toJSONSchema(e,{io:t,unrepresentable:"any",override:({jsonSchema:n})=>{typeof n.default=="bigint"&&delete n.default}})];for(;o.length;){let n=o.shift();if(ce.is(Object,n)){if(n.$ref==="#")return!0;o.push(...ce.values(n))}ce.is(Array,n)&&o.push(...ce.values(n))}return!1},qr=e=>Hr(e,{condition:t=>{let r=ee(t);return typeof r=="symbol"&&[pe,K,Ge].includes(r)},io:"input"}),An=["nan","symbol","map","set","bigint","void","promise","never"],Ut=(e,t)=>Hr(e,{io:t,condition:r=>{let o=ee(r),{type:n}=r._zod.def;return!!(An.includes(n)||o===he||t==="input"&&(n==="date"||o===xe)||t==="output"&&(o===be||o===K||o===pe))}});var gt=y(require("http-errors"),1);var We=y(require("http-errors"),1),Fr=y(require("ramda"),1),yt=require("zod/v4");var Dt=(e,{variant:t,args:r,...o})=>{if(typeof e=="function"&&(e=e(...r)),e instanceof yt.z.ZodType)return[{schema:e,...o}];if(Array.isArray(e)&&!e.length){let n=new Error(`At least one ${t} response schema required.`);throw new ae(n)}return(Array.isArray(e)?e:[e]).map(({schema:n,statusCode:s,mimeType:i})=>({schema:n,statusCodes:typeof s=="number"?[s]:s||o.statusCodes,mimeTypes:typeof i=="string"?[i]:i===void 0?o.mimeTypes:i}))},Ye=(e,t,{url:r},o)=>!e.expose&&t.error("Server side error",{error:e,url:r,payload:o}),Oe=e=>(0,We.isHttpError)(e)?e:(0,We.default)(e instanceof G?400:500,ne(e),{cause:e.cause||e}),Te=e=>Re()&&!e.expose?(0,We.default)(e.statusCode).message:e.message,Ur=e=>Object.entries(e._zod.def.shape).reduce((t,[r,o])=>{let{examples:n=[]}=yt.globalRegistry.get(o)||{};return Se(t,n.map(Fr.objOf(r)),([s,i])=>({...s,...i}))},[]);var ht=({error:e,logger:t,response:r})=>{t.error("Result handler failure",e);let o=Te((0,gt.default)(500,`An error occurred while serving the result: ${e.message}.`+(e.handled?`
2
+ Original error: ${e.handled.message}.`:""),{expose:(0,gt.isHttpError)(e.cause)?e.cause.expose:!1}));r.status(500).type("text/plain").end(o)};var _t=require("zod/v4");var Jt=class{},q=class extends Jt{#e;#t;#r;constructor({input:t=_t.z.object({}),security:r,handler:o}){super(),this.#e=t,this.#t=r,this.#r=o}get security(){return this.#t}get schema(){return this.#e}async execute({input:t,...r}){try{let o=await this.#e.parseAsync(t);return this.#r({...r,input:o})}catch(o){throw o instanceof _t.z.ZodError?new G(o):o}}},Le=class extends q{constructor(t,{provider:r=()=>({}),transformer:o=n=>n}={}){super({handler:async({request:n,response:s})=>new Promise((i,p)=>{let d=c=>{if(c&&c instanceof Error)return p(o(c));i(r(n,s))};t(n,s,d)?.catch(d)})})}};var Me=class{nest(t){return Object.assign(t,{"":this})}};var Xe=class extends Me{},bt=class e extends Xe{#e;#t=de.once(()=>{let t=this.#e.outputSchema.meta();if(t?.examples?.length||!Ne(this.#e.outputSchema,"object"))return;let r=Ur(this.#e.outputSchema);r.length&&Qe.globalRegistry.remove(this.#e.outputSchema).add(this.#e.outputSchema,{...t,examples:r})});constructor(t){super(),this.#e=t}#r(t){return new e({...this.#e,...t})}deprecated(){return this.#r({deprecated:!0})}get isDeprecated(){return this.#e.deprecated||!1}get description(){return this.#e.description}get shortDescription(){return this.#e.shortDescription}get methods(){return Object.freeze(this.#e.methods)}get inputSchema(){return this.#e.inputSchema}get outputSchema(){return this.#t(),this.#e.outputSchema}get requestType(){let t=qr(this.#e.inputSchema);if(t){let r=ee(t);if(r===pe)return"upload";if(r===K)return"raw";if(r===Ge)return"form"}return"json"}getResponses(t){return t==="positive"&&this.#t(),Object.freeze(t==="negative"?this.#e.resultHandler.getNegativeResponse():this.#e.resultHandler.getPositiveResponse(this.#e.outputSchema))}get security(){let t=de.pluck("security",this.#e.middlewares||[]);return de.reject(de.isNil,t)}get scopes(){return Object.freeze(this.#e.scopes||[])}get tags(){return Object.freeze(this.#e.tags||[])}getOperationId(t){return this.#e.getOperationId?.(t)}async#o(t){try{return await this.#e.outputSchema.parseAsync(t)}catch(r){throw r instanceof Qe.z.ZodError?new je(r):r}}async#n({method:t,logger:r,options:o,response:n,...s}){for(let i of this.#e.middlewares||[])if(!(t==="options"&&!(i instanceof Le))&&(Object.assign(o,await i.execute({...s,options:o,response:n,logger:r})),n.writableEnded)){r.warn("A middleware has closed the stream. Accumulated options:",o);break}}async#s({input:t,...r}){let o;try{o=await this.#e.inputSchema.parseAsync(t)}catch(n){throw n instanceof Qe.z.ZodError?new G(n):n}return this.#e.handler({...r,input:o})}async#i(t){try{await this.#e.resultHandler.execute(t)}catch(r){ht({...t,error:new ae(oe(r),t.error||void 0)})}}async execute({request:t,response:r,logger:o,config:n}){let s=Ht(t),i={},p={output:{},error:null},d=lt(t,n.inputSources);try{if(await this.#n({method:s,input:d,request:t,response:r,logger:o,options:i}),r.writableEnded)return;if(s==="options")return void r.status(200).end();p={output:await this.#o(await this.#s({input:d,logger:o,options:i})),error:null}}catch(c){p={output:null,error:oe(c)}}await this.#i({...p,input:d,request:t,response:r,logger:o,options:i})}};var Dr=y(require("ramda"),1),_r=(e,t)=>Dr.pluck("schema",e).concat(t).reduce((r,o)=>r.and(o));var A=require("zod/v4");var $e={positive:200,negative:400},Ze=Object.keys($e);var Vt=class{#e;constructor(t){this.#e=t}execute(...t){return this.#e(...t)}},me=class extends Vt{#e;#t;constructor(t){super(t.handler),this.#e=t.positive,this.#t=t.negative}getPositiveResponse(t){return Dt(this.#e,{variant:"positive",args:[t],statusCodes:[$e.positive],mimeTypes:[E.json]})}getNegativeResponse(){return Dt(this.#t,{variant:"negative",args:[],statusCodes:[$e.negative],mimeTypes:[E.json]})}},le=new me({positive:e=>{let t=A.z.object({status:A.z.literal("success"),data:e}),{examples:r=[]}=A.globalRegistry.get(e)||{};return r.length&&A.globalRegistry.add(t,{examples:r.map(o=>({status:"success",data:o}))}),t},negative:A.z.object({status:A.z.literal("error"),error:A.z.object({message:A.z.string()})}).example({status:"error",error:{message:"Sample error message"}}),handler:({error:e,input:t,output:r,request:o,response:n,logger:s})=>{if(e){let i=Oe(e);return Ye(i,s,o,t),void n.status(i.statusCode).set(i.headers).json({status:"error",error:{message:Te(i)}})}n.status($e.positive).json({status:"success",data:r})}}),xt=new me({positive:e=>{let t=e instanceof A.z.ZodObject&&"items"in e.shape&&e.shape.items instanceof A.z.ZodArray?e.shape.items:A.z.array(A.z.any()),r=t.meta();if(r?.examples?.length)return t;let o=(A.globalRegistry.get(e)?.examples||[]).filter(n=>M(n)&&"items"in n&&Array.isArray(n.items)).map(n=>n.items);return o.length&&A.globalRegistry.remove(t).add(t,{...r,examples:o}),t},negative:A.z.string().example("Sample error message"),handler:({response:e,output:t,error:r,logger:o,request:n,input:s})=>{if(r){let i=Oe(r);return Ye(i,o,n,s),void e.status(i.statusCode).type("text/plain").send(Te(i))}if("items"in t&&Array.isArray(t.items))return void e.status($e.positive).json(t.items);throw new Error("Property 'items' is missing in the endpoint output")}});var ue=class e{constructor(t){this.resultHandler=t}middlewares=[];static#e(t,r){let o=new e(r);return o.middlewares=t,o}addMiddleware(t){return e.#e(this.middlewares.concat(t instanceof q?t:new q(t)),this.resultHandler)}use=this.addExpressMiddleware;addExpressMiddleware(...t){return e.#e(this.middlewares.concat(new Le(...t)),this.resultHandler)}addOptions(t){return e.#e(this.middlewares.concat(new q({handler:t})),this.resultHandler)}build({input:t=Gt.z.object({}),output:r,operationId:o,scope:n,tag:s,method:i,...p}){let{middlewares:d,resultHandler:c}=this,m=typeof i=="string"?[i]:i,h=typeof o=="function"?o:()=>o,x=typeof n=="string"?[n]:n||[],g=typeof s=="string"?[s]:s||[];return new bt({...p,middlewares:d,outputSchema:r,resultHandler:c,scopes:x,tags:g,methods:m,getOperationId:h,inputSchema:_r(d,t)})}buildVoid({handler:t,...r}){return this.build({...r,output:Gt.z.object({}),handler:async o=>(await t(o),{})})}},Jr=new ue(le),Vr=new ue(xt);var eo=y(require("ansis"),1),to=require("node:util"),Yt=require("node:perf_hooks");var W=require("ansis"),Gr=y(require("ramda"),1);var Wt={debug:W.blue,info:W.green,warn:(0,W.hex)("#FFA500"),error:W.red,ctx:W.cyanBright},St={debug:10,info:20,warn:30,error:40},Wr=e=>M(e)&&Object.keys(St).some(t=>t in e),Yr=e=>e in St,Qr=(e,t)=>St[e]<St[t],In=(e,t=0)=>Intl.NumberFormat(void 0,{useGrouping:!1,minimumFractionDigits:0,maximumFractionDigits:t,style:"unit",unitDisplay:"long",unit:e}),Be=Gr.memoizeWith((e,t)=>`${e}${t}`,In),Xr=e=>e<1e-6?Be("nanosecond",3).format(e/1e-6):e<.001?Be("nanosecond").format(e/1e-6):e<1?Be("microsecond").format(e/.001):e<1e3?Be("millisecond").format(e):e<6e4?Be("second",2).format(e/1e3):Be("minute",2).format(e/6e4);var He=class e{config;constructor({color:t=eo.default.isSupported(),level:r=Re()?"warn":"debug",depth:o=2,ctx:n={}}={}){this.config={color:t,level:r,depth:o,ctx:n}}format(t){let{depth:r,color:o,level:n}=this.config;return(0,to.inspect)(t,{depth:r,colors:o,breakLength:n==="debug"?80:1/0,compact:n==="debug"?3:!0})}print(t,r,o){let{level:n,ctx:{requestId:s,...i},color:p}=this.config;if(n==="silent"||Qr(t,n))return;let d=[new Date().toISOString()];s&&d.push(p?Wt.ctx(s):s),d.push(p?`${Wt[t](t)}:`:`${t}:`,r),o!==void 0&&d.push(this.format(o)),Object.keys(i).length>0&&d.push(this.format(i)),console.log(d.join(" "))}debug(t,r){this.print("debug",t,r)}info(t,r){this.print("info",t,r)}warn(t,r){this.print("warn",t,r)}error(t,r){this.print("error",t,r)}child(t){return new e({...this.config,ctx:t})}get ctx(){return this.config.ctx}profile(t){let r=Yt.performance.now();return()=>{let o=Yt.performance.now()-r,{message:n,severity:s="debug",formatter:i=Xr}=typeof t=="object"?t:{message:t};this.print(typeof s=="function"?s(o):s,n,i(o))}}};var ro=y(require("ramda"),1);var Ke=class e extends Me{#e;constructor(t){super(),this.#e=t}get entries(){let t=ro.filter(r=>!!r[1],Object.entries(this.#e));return Object.freeze(t)}deprecated(){let t=Object.entries(this.#e).reduce((r,[o,n])=>Object.assign(r,{[o]:n.deprecated()}),{});return new e(t)}};var oo=y(require("express"),1),qe=class{#e;constructor(...t){this.#e=t}apply(t,r){return r(t,oo.default.static(...this.#e))}};var et=y(require("express"),1),Co=y(require("node:http"),1),Ao=y(require("node:https"),1);var Fe=async(e,t="default")=>{try{return(await Promise.resolve().then(()=>y(require(e))))[t]}catch{}throw new ze(e)};var po=y(require("http-errors"),1);var Qt=require("zod/v4");var S=y(require("ramda"),1);var Nn=e=>e.type==="object",jn=S.mergeDeepWith((e,t)=>{if(Array.isArray(e)&&Array.isArray(t))return S.concat(e,t);if(e===t)return t;throw new Error("Can not flatten properties",{cause:{a:e,b:t}})}),zn=S.pipe(Object.keys,S.without(["type","properties","required","examples","description","additionalProperties"]),S.isEmpty),no=S.pair(!0),Ue=(e,t="coerce")=>{let r=[S.pair(!1,e)],o={type:"object",properties:{}},n=[];for(;r.length;){let[s,i]=r.shift();if(i.description&&(o.description??=i.description),i.allOf&&r.push(...i.allOf.map(p=>{if(t==="throw"&&!(p.type==="object"&&zn(p)))throw new Error("Can not merge");return S.pair(s,p)})),i.anyOf&&r.push(...S.map(no,i.anyOf)),i.oneOf&&r.push(...S.map(no,i.oneOf)),i.examples?.length&&(s?o.examples=S.concat(o.examples||[],i.examples):o.examples=Se(o.examples?.filter(M)||[],i.examples.filter(M),([p,d])=>S.mergeDeepRight(p,d))),!!Nn(i)&&(r.push([s,{examples:Ln(i)}]),i.properties&&(o.properties=(t==="throw"?jn:S.mergeDeepRight)(o.properties,i.properties),!s&&i.required&&n.push(...i.required)),i.propertyNames)){let p=[];typeof i.propertyNames.const=="string"&&p.push(i.propertyNames.const),i.propertyNames.enum&&p.push(...i.propertyNames.enum.filter(c=>typeof c=="string"));let d={...Object(i.additionalProperties)};for(let c of p)o.properties[c]??=d;s||n.push(...p)}}return n.length&&(o.required=[...new Set(n)]),o},Ln=e=>Object.entries(e.properties||{}).reduce((t,[r,{examples:o=[]}])=>Se(t,o.map(S.objOf(r)),([n,s])=>({...n,...s})),[]);var Rt=class{constructor(t){this.logger=t}#e=new WeakSet;#t=new WeakMap;checkSchema(t,r){if(!this.#e.has(t)){for(let o of["input","output"]){let n=[Qt.z.toJSONSchema(t[`${o}Schema`],{unrepresentable:"any"})];for(;n.length>0;){let s=n.shift();s.type&&s.type!=="object"&&this.logger.warn(`Endpoint ${o} schema is not object-based`,r);for(let i of["allOf","oneOf","anyOf"])s[i]&&n.push(...s[i])}}if(t.requestType==="json"){let o=Ut(t.inputSchema,"input");o&&this.logger.warn("The final input schema of the endpoint contains an unsupported JSON payload type.",Object.assign(r,{reason:o}))}for(let o of Ze)for(let{mimeTypes:n,schema:s}of t.getResponses(o)){if(!n?.includes(E.json))continue;let i=Ut(s,"output");i&&this.logger.warn(`The final ${o} response schema of the endpoint contains an unsupported JSON payload type.`,Object.assign(r,{reason:i}))}this.#e.add(t)}}checkPathParams(t,r,o){let n=this.#t.get(r);if(n?.paths.includes(t))return;let s=mt(t);if(s.length===0)return;let i=n?.flat||Ue(Qt.z.toJSONSchema(r.inputSchema,{unrepresentable:"any",io:"input"}));for(let p of s)p in i.properties||this.logger.warn("The input schema of the endpoint is most likely missing the parameter of the path it's assigned to.",Object.assign(o,{path:t,param:p}));n?n.paths.push(t):this.#t.set(r,{flat:i,paths:[t]})}};var Xt=["get","post","put","delete","patch"],so=e=>Xt.includes(e);var Mn=e=>{let[t,r]=e.trim().split(/ (.+)/,2);return r&&so(t)?[r,t]:[e]},$n=e=>e.trim().split("/").filter(Boolean).join("/"),io=(e,t)=>Object.entries(e).map(([r,o])=>{let[n,s]=Mn(r);return[[t||""].concat($n(n)||[]).join("/"),o,s]}),Zn=(e,t)=>{throw new ie("Route with explicit method can only be assigned with Endpoint",e,t)},ao=(e,t,r)=>{if(!(!r||r.includes(e)))throw new ie(`Method ${e} is not supported by the assigned Endpoint.`,e,t)},er=(e,t,r)=>{let o=`${e} ${t}`;if(r.has(o))throw new ie("Route has a duplicate",e,t);r.add(o)},De=({routing:e,onEndpoint:t,onStatic:r})=>{let o=io(e),n=new Set;for(;o.length;){let[s,i,p]=o.shift();if(i instanceof Xe)if(p)er(p,s,n),ao(p,s,i.methods),t(i,s,p);else{let{methods:d=["get"]}=i;for(let c of d)er(c,s,n),t(i,s,c)}else if(p&&Zn(p,s),i instanceof qe)r&&i.apply(s,r);else if(i instanceof Ke)for(let[d,c]of i.entries){let{methods:m}=c;er(d,s,n),ao(d,s,m),t(c,s,d)}else o.unshift(...io(i,s))}};var co=y(require("ramda"),1),mo=e=>e.sort((t,r)=>+(t==="options")-+(r==="options")).join(", ").toUpperCase(),Bn=e=>({method:t},r,o)=>{let n=mo(e);r.set({Allow:n});let s=(0,po.default)(405,`${t} is not allowed`,{headers:{Allow:n}});o(s)},Hn=e=>({"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":mo(e),"Access-Control-Allow-Headers":"content-type"}),tr=({app:e,getLogger:t,config:r,routing:o,parsers:n})=>{let s=Re()?void 0:new Rt(t()),i=new Map;De({routing:o,onEndpoint:(c,m,h)=>{Re()||(s?.checkSchema(c,{path:m,method:h}),s?.checkPathParams(m,c,{method:h}));let x=n?.[c.requestType]||[],g=co.pair(x,c);i.has(m)||i.set(m,new Map(r.cors?[["options",g]]:[])),i.get(m)?.set(h,g)},onStatic:e.use.bind(e)}),s=void 0;let d=new Map;for(let[c,m]of i){let h=Array.from(m.keys());for(let[x,[g,k]]of m){let C=async($,O)=>{let N=t($);if(r.cors){let I=Hn(h),_=typeof r.cors=="function"?await r.cors({request:$,endpoint:k,logger:N,defaultHeaders:I}):I;O.set(_)}return k.execute({request:$,response:O,logger:N,config:r})};e[x](c,...g,C)}r.wrongMethodBehavior!==404&&d.set(c,Bn(h))}for(let[c,m]of d)e.all(c,m)};var xo=y(require("http-errors"),1);var ho=require("node:timers/promises");var lo=e=>"_httpMessage"in e&&typeof e._httpMessage=="object"&&e._httpMessage!==null&&"headersSent"in e._httpMessage&&typeof e._httpMessage.headersSent=="boolean"&&"setHeader"in e._httpMessage&&typeof e._httpMessage.setHeader=="function",uo=e=>"server"in e&&typeof e.server=="object"&&e.server!==null&&"close"in e.server&&typeof e.server.close=="function",fo=e=>"encrypted"in e&&typeof e.encrypted=="boolean"&&e.encrypted,yo=({},e)=>void(!e.headersSent&&e.setHeader("connection","close")),go=e=>new Promise((t,r)=>void e.close(o=>o?r(o):t()));var bo=(e,{timeout:t=1e3,logger:r}={})=>{let o,n=new Set,s=c=>void n.delete(c.destroy()),i=c=>void(lo(c)?!c._httpMessage.headersSent&&c._httpMessage.setHeader("connection","close"):s(c)),p=c=>void(o?c.destroy():n.add(c.once("close",()=>void n.delete(c))));for(let c of e)for(let m of["connection","secureConnection"])c.on(m,p);let d=async()=>{for(let c of e)c.on("request",yo);r?.info("Graceful shutdown",{sockets:n.size,timeout:t});for(let c of n)(fo(c)||uo(c))&&i(c);for await(let c of(0,ho.setInterval)(10,Date.now()))if(n.size===0||Date.now()-c>=t)break;for(let c of n)s(c);return Promise.allSettled(e.map(go))};return{sockets:n,shutdown:()=>o??=d()}};var So=({errorHandler:e,getLogger:t})=>async(r,o,n,s)=>r?e.execute({error:oe(r),request:o,response:n,input:null,output:null,options:{},logger:t(o)}):s(),Ro=({errorHandler:e,getLogger:t})=>async(r,o)=>{let n=(0,xo.default)(404,`Can not ${r.method} ${r.path}`),s=t(r);try{await e.execute({request:r,response:o,logger:s,error:n,input:null,output:null,options:{}})}catch(i){ht({response:o,logger:s,error:new ae(oe(i),n)})}},Kn=e=>(t,{},r)=>{if(Object.values(t?.files||[]).flat().find(({truncated:n})=>n))return r(e);r()},qn=e=>({log:e.debug.bind(e)}),Oo=async({getLogger:e,config:t})=>{let r=await Fe("express-fileupload"),{limitError:o,beforeUpload:n,...s}={...typeof t.upload=="object"&&t.upload},i=[];return i.push(async(p,d,c)=>{let m=e(p);return await n?.({request:p,logger:m}),r({debug:!0,...s,abortOnLimit:!1,parseNested:!0,logger:qn(m)})(p,d,c)}),o&&i.push(Kn(o)),i},To=(e,{},t)=>{Buffer.isBuffer(e.body)&&(e.body={raw:e.body}),t()},Po=({logger:e,config:{childLoggerProvider:t,accessLogger:r=({method:o,path:n},s)=>s.debug(`${o}: ${n}`)}})=>async(o,n,s)=>{let i=await t?.({request:o,parent:e})||e;r?.(o,i),o.res&&(o.res.locals[Ce]={logger:i}),s()},wo=e=>t=>t?.res?.locals[Ce]?.logger||e,Eo=e=>process.on("deprecation",({message:t,namespace:r,name:o,stack:n})=>e.warn(`${o} (${r}): ${t}`,n.split(`
3
+ `).slice(1))),vo=({servers:e,logger:t,options:{timeout:r,beforeExit:o,events:n=["SIGINT","SIGTERM"]}})=>{let s=bo(e,{logger:t,timeout:r}),i=async()=>{await s.shutdown(),await o?.(),process.exit()};for(let p of n)process.on(p,i)};var Z=require("ansis"),ko=e=>{if(e.columns<132)return;let t=(0,Z.italic)("Proudly supports transgender community.".padStart(109)),r=(0,Z.italic)("Start your API server with I/O schema validation and custom middlewares in minutes.".padStart(109)),o=(0,Z.italic)("Thank you for choosing Express Zod API for your project.".padStart(132)),n=(0,Z.italic)("for Ashley".padEnd(20)),s=(0,Z.hex)("#F5A9B8"),i=(0,Z.hex)("#5BCEFA"),p=new Array(14).fill(i,1,3).fill(s,3,5).fill(Z.whiteBright,5,7).fill(s,7,9).fill(i,9,12).fill(Z.gray,12,13),d=`
4
4
  8888888888 8888888888P 888 d8888 8888888b. 8888888
5
5
  888 d88P 888 d88888 888 Y88b 888
6
6
  888 d88P 888 d88P888 888 888 888
@@ -15,9 +15,9 @@ ${n}888${r}
15
15
  ${o}
16
16
  `;e.write(d.split(`
17
17
  `).map((c,m)=>p[m]?p[m](c):c).join(`
18
- `))};var zo=e=>{e.startupLogo!==!1&&Co(process.stdout);let t=e.errorHandler||ye,r=Qr(e.logger)?e.logger:new qe(e.logger);r.debug("Running",{build:"v24.0.0-beta.1 (CJS)",env:process.env.NODE_ENV||"development"}),ko(r);let o=Eo({logger:r,config:e}),s={getLogger:vo(r),errorHandler:t},i=To(s),p=Oo(s);return{...s,logger:r,notFoundHandler:i,catcher:p,loggingMiddleware:o}},jo=(e,t)=>{let{logger:r,getLogger:o,notFoundHandler:n,loggingMiddleware:s}=zo(e);return nr({app:e.app.use(s),routing:t,getLogger:o,config:e}),{notFoundHandler:n,logger:r}},Mo=async(e,t)=>{let{logger:r,getLogger:o,notFoundHandler:n,catcher:s,loggingMiddleware:i}=zo(e),p=(0,tt.default)().disable("x-powered-by").use(i);if(e.compression){let b=await De("compression");p.use(b(typeof e.compression=="object"?e.compression:void 0))}await e.beforeRouting?.({app:p,getLogger:o});let d={json:[e.jsonParser||tt.default.json()],raw:[e.rawParser||tt.default.raw(),wo],form:[e.formParser||tt.default.urlencoded()],upload:e.upload?await Po({config:e,getLogger:o}):[]};nr({app:p,routing:t,getLogger:o,config:e,parsers:d}),p.use(s,n);let c=[],m=(b,g)=>()=>b.listen(g,()=>r.info("Listening",g)),h=[];if(e.http){let b=Io.default.createServer(p);c.push(b),h.push(m(b,e.http.listen))}if(e.https){let b=No.default.createServer(e.https.options,p);c.push(b),h.push(m(b,e.https.listen))}return e.gracefulShutdown&&Ao({logger:r,servers:c,options:e.gracefulShutdown===!0?{}:e.gracefulShutdown}),{app:p,logger:r,servers:h.map(b=>b())}};var Xo=require("openapi3-ts/oas31"),en=y(require("ramda"),1);var S=y(require("ramda"),1);var Lo=e=>L(e)&&"or"in e,Zo=e=>L(e)&&"and"in e,sr=e=>!Zo(e)&&!Lo(e),$o=e=>{let t=S.filter(sr,e),r=S.chain(S.prop("and"),S.filter(Zo,e)),[o,n]=S.partition(sr,r),s=S.concat(t,o),i=S.filter(Lo,e);return S.map(S.prop("or"),S.concat(i,n)).reduce((d,c)=>Oe(d,S.map(m=>sr(m)?[m]:m.and,c),([m,h])=>S.concat(m,h)),S.reject(S.isEmpty,[s]))};var he=require("openapi3-ts/oas31"),l=y(require("ramda"),1),rt=require("zod/v4");var Ho=["a-im","accept","accept-additions","accept-ch","accept-charset","accept-datetime","accept-encoding","accept-features","accept-language","accept-signature","access-control","access-control-request-headers","access-control-request-method","alpn","alt-used","alternates","amp-cache-transform","apply-to-redirect-ref","authentication-control","authentication-info","authorization","available-dictionary","c-ext","c-man","c-opt","c-pep","c-pep-info","cache-control","cal-managed-id","caldav-timezones","capsule-protocol","cert-not-after","cert-not-before","client-cert","client-cert-chain","close","cmcd-object","cmcd-request","cmcd-session","cmcd-status","cmsd-dynamic","cmsd-static","concealed-auth-export","configuration-context","connection","content-digest","content-disposition","content-encoding","content-id","content-language","content-length","content-location","content-md5","content-range","content-script-type","content-type","cookie","cookie2","cross-origin-embedder-policy","cross-origin-embedder-policy-report-only","cross-origin-opener-policy","cross-origin-opener-policy-report-only","cross-origin-resource-policy","cta-common-access-token","dasl","date","dav","default-style","delta-base","deprecation","depth","derived-from","destination","detached-jws","differential-id","dictionary-id","digest","dpop","dpop-nonce","early-data","ediint-features","expect","expect-ct","ext","forwarded","from","getprofile","hobareg","host","http2-settings","if","if-match","if-modified-since","if-none-match","if-range","if-schedule-tag-match","if-unmodified-since","im","include-referred-token-binding-id","isolation","keep-alive","label","last-event-id","link","link-template","lock-token","man","max-forwards","memento-datetime","meter","method-check","method-check-expires","mime-version","negotiate","nel","odata-entityid","odata-isolation","odata-maxversion","odata-version","opt","ordering-type","origin","origin-agent-cluster","oscore","oslc-core-version","overwrite","p3p","pep","pep-info","permissions-policy","pics-label","ping-from","ping-to","position","pragma","prefer","preference-applied","priority","profileobject","protocol","protocol-info","protocol-query","protocol-request","proxy-authorization","proxy-features","proxy-instruction","public","public-key-pins","public-key-pins-report-only","range","redirect-ref","referer","referer-root","referrer-policy","repeatability-client-id","repeatability-first-sent","repeatability-request-id","repeatability-result","replay-nonce","reporting-endpoints","repr-digest","safe","schedule-reply","schedule-tag","sec-fetch-storage-access","sec-gpc","sec-purpose","sec-token-binding","sec-websocket-extensions","sec-websocket-key","sec-websocket-protocol","sec-websocket-version","security-scheme","setprofile","signature","signature-input","slug","soapaction","status-uri","sunset","surrogate-capability","tcn","te","timeout","topic","traceparent","tracestate","trailer","transfer-encoding","ttl","upgrade","urgency","uri","use-as-dictionary","user-agent","variant-vary","via","want-content-digest","want-digest","want-repr-digest","warning","x-content-type-options","x-frame-options"];var Ko=50,Bo="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString",Fo={integer:0,number:0,string:"",boolean:!1,object:{},null:null,array:[]},Do=e=>e.replace(Kt,t=>`{${t.slice(1)}}`),Vn=({zodSchema:e,jsonSchema:t})=>{let r=rt.globalRegistry.get(e)?.[T]?.defaultLabel??t.default;return{...t,default:typeof r=="bigint"?String(r):r}},_n=({},e)=>{if(e.isResponse)throw new J("Please use ez.upload() only for input.",e);return{type:"string",format:"binary"}},Jn=({jsonSchema:e})=>({type:"string",format:e.type==="string"?e.format==="base64"?"byte":"file":"binary"}),Gn=({zodSchema:e,jsonSchema:t})=>{if(!e._zod.disc)return t;let r=Array.from(e._zod.disc.keys()).pop();return{...t,discriminator:t.discriminator??{propertyName:r}}},Wn=l.tryCatch(({jsonSchema:e})=>{if(!e.allOf)throw"no allOf";return Ue(e,"throw")},(e,{jsonSchema:t})=>t),Yn=({jsonSchema:e})=>{if(!e.anyOf)return e;let t=e.anyOf[0];return Object.assign(t,{type:is(t.type)})},qo=e=>e in Fo,Qn=({jsonSchema:e})=>({type:typeof e.enum?.[0],...e}),Xn=({jsonSchema:e})=>({type:typeof(e.const||e.enum?.[0]),...e}),es=({zodSchema:e,jsonSchema:t},{isResponse:r})=>{if(r||!ce(e,"object"))return t;let{required:o=[]}=t,n=[];for(let s of o){let i=e._zod.def.shape[s];i&&!gt(i,{isResponse:r})&&n.push(s)}return{...t,required:n}},ke=({$ref:e,type:t,allOf:r,oneOf:o,anyOf:n,not:s,...i})=>{if(e)return{$ref:e};let p={type:Array.isArray(t)?t.filter(qo):t&&qo(t)?t:void 0,...i};for(let[d,c]of l.toPairs({allOf:r,oneOf:o,anyOf:n}))c&&(p[d]=c.map(ke));return s&&(p.not=ke(s)),p},ts=({},e)=>{if(e.isResponse)throw new J("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:Bo}}},rs=({},e)=>{if(!e.isResponse)throw new J("Please use ez.dateIn() for input.",e);return{description:"YYYY-MM-DDTHH:mm:ss.sssZ",type:"string",format:"date-time",externalDocs:{url:Bo}}},os=()=>({type:"string",format:"bigint",pattern:/^-?\d+$/.source}),ns=({zodSchema:e,jsonSchema:t})=>e._zod.def.rest!==null?t:{...t,items:{not:{}}},ss=e=>{let t=Array.isArray(e.type)?e.type[0]:e.type;return Fo?.[t]},is=e=>e==="null"?e:typeof e=="string"?[e,"null"]:e&&[...new Set(e).add("null")],as=({zodSchema:e,jsonSchema:t},r)=>{let o=e._zod.def[r.isResponse?"out":"in"],n=e._zod.def[r.isResponse?"in":"out"];if(!ce(o,"transform"))return t;let s=ke(pr(n,{ctx:r}));if((0,he.isSchemaObject)(s))if(r.isResponse){let i=yt(o,ss(s));if(i&&["number","string","boolean"].includes(i))return{type:i}}else{let{type:i,...p}=s;return{...p,format:`${p.format||i} (preprocessed)`}}return t},ps=({jsonSchema:e})=>{if(e.type!=="object")return e;let t=e;return!t.properties||!("raw"in t.properties)?e:t.properties.raw},ir=e=>e.length?l.fromPairs(l.zip(l.times(t=>`example${t+1}`,e.length),l.map(l.objOf("value"),e))):void 0,cs=(e,t)=>t?.includes(e)||e.startsWith("x-")||Ho.includes(e),Uo=({path:e,method:t,request:r,inputSources:o,makeRef:n,composition:s,isHeader:i,security:p,description:d=`${t.toUpperCase()} ${e} Parameter`})=>{let c=Ue(r),m=ut(e),h=o.includes("query"),b=o.includes("params"),g=o.includes("headers"),A=O=>b&&m.includes(O),C=l.chain(l.filter(O=>O.type==="header"),p??[]).map(({name:O})=>O),$=O=>g&&(i?.(O,t,e)??cs(O,C));return Object.entries(c.properties).reduce((O,[I,N])=>{let _=A(I)?"path":$(I)?"header":h?"query":void 0;if(!_)return O;let j=ke(N),re=s==="components"?n(N,j,de(d,I)):j;return O.concat({name:I,in:_,deprecated:N.deprecated,required:c.required?.includes(I)||!1,description:j.description||d,schema:re,examples:ir((0,he.isSchemaObject)(j)&&j.examples?.length?j.examples:l.pluck(I,c.examples?.filter(l.both(L,l.has(I)))||[]))})},[])},ar={nullable:Yn,default:Vn,union:Gn,bigint:os,intersection:Wn,tuple:ns,pipe:as,literal:Xn,enum:Qn,object:es,[Pe]:ts,[we]:rs,[me]:_n,[le]:Jn,[B]:ps},ds=({zodSchema:e,jsonSchema:t},{isResponse:r})=>{let o={...t},n=Re({schema:e,variant:r?"parsed":"original",validate:!0,pullProps:!0});return n.length&&(o.examples=n.slice()),o},ms=(e,t,r)=>{let o=[e,t];for(;o.length;){let n=o.shift();if(l.is(Object,n)){if((0,he.isReferenceObject)(n)&&!n.$ref.startsWith("#/components")){let s=n.$ref.split("/").pop(),i=t[s];i&&(n.$ref=r.makeRef(i,ke(i)).$ref);continue}o.push(...l.values(n))}l.is(Array,n)&&o.push(...l.values(n))}return e},pr=(e,{ctx:t,rules:r=ar})=>{let{$defs:o={},properties:n={}}=rt.z.toJSONSchema(rt.z.object({subject:e}),{unrepresentable:"any",io:t.isResponse?"output":"input",override:s=>{let i=te(s.zodSchema),p=r[i&&i in r?i:s.zodSchema._zod.def.type];if(p){let d={...p(s,t)};for(let c in s.jsonSchema)delete s.jsonSchema[c];Object.assign(s.jsonSchema,d)}Object.assign(s.jsonSchema,ds(s,t))}});return ms(n.subject,o,t)},Vo=(e,t)=>{if((0,he.isReferenceObject)(e))return[e,!1];let r=!1,o=l.map(p=>{let[d,c]=Vo(p,t);return r=r||c,d}),n=l.omit(t),s={properties:n,examples:l.map(n),required:l.without(t),allOf:o,oneOf:o,anyOf:o},i=l.evolve(s,e);return[i,r||!!i.required?.length]},_o=({method:e,path:t,schema:r,mimeTypes:o,variant:n,makeRef:s,composition:i,hasMultipleStatusCodes:p,statusCode:d,brandHandling:c,description:m=`${e.toUpperCase()} ${t} ${Ft(n)} response ${p?d:""}`.trim()})=>{if(!o)return{description:m};let h=ke(pr(r,{rules:{...c,...ar},ctx:{isResponse:!0,makeRef:s,path:t,method:e}})),b=[];(0,he.isSchemaObject)(h)&&h.examples&&(b.push(...h.examples),delete h.examples);let g={schema:i==="components"?s(r,h,de(m)):h,examples:ir(b)};return{description:m,content:l.fromPairs(l.xprod(o,[g]))}},ls=({format:e})=>{let t={type:"http",scheme:"bearer"};return e&&(t.bearerFormat=e),t},us=({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},fs=({name:e})=>({type:"apiKey",in:"header",name:e}),ys=({name:e})=>({type:"apiKey",in:"cookie",name:e}),gs=({url:e})=>({type:"openIdConnect",openIdConnectUrl:e}),hs=({flows:e={}})=>({type:"oauth2",flows:l.map(t=>({...t,scopes:t.scopes||{}}),l.reject(l.isNil,e))}),Jo=(e,t=[])=>{let r=o=>o.type==="basic"?{type:"http",scheme:"basic"}:o.type==="bearer"?ls(o):o.type==="input"?us(o,t):o.type==="header"?fs(o):o.type==="cookie"?ys(o):o.type==="openid"?gs(o):hs(o);return e.map(o=>o.map(r))},Go=(e,t,r)=>e.map(o=>o.reduce((n,s)=>{let i=r(s),p=["oauth2","openIdConnect"].includes(s.type);return Object.assign(n,{[i]:p?t:[]})},{})),Wo=({schema:e,brandHandling:t,makeRef:r,path:o,method:n})=>pr(e,{rules:{...t,...ar},ctx:{isResponse:!1,makeRef:r,path:o,method:n}}),Yo=({method:e,path:t,schema:r,request:o,mimeType:n,makeRef:s,composition:i,paramNames:p,description:d=`${e.toUpperCase()} ${t} Request body`})=>{let[c,m]=Vo(ke(o),p),h=[];(0,he.isSchemaObject)(c)&&c.examples&&(h.push(...c.examples),delete c.examples);let b={schema:i==="components"?s(r,c,de(d)):c,examples:ir(h.length?h:Ue(o).examples?.filter(A=>L(A)&&!Array.isArray(A)).map(l.omit(p))||[])},g={description:d,content:{[n]:b}};return(m||n===v.raw)&&(g.required=!0),g},Qo=e=>Object.entries(e).reduce((t,[r,o])=>{if(!o)return t;let n={name:r,description:typeof o=="string"?o:o.description};return typeof o=="object"&&o.url&&(n.externalDocs={url:o.url}),t.concat(n)},[]),cr=e=>e.length<=Ko?e:e.slice(0,Ko-1)+"\u2026",Pt=e=>e.length?e.slice():void 0;var wt=class extends Xo.OpenApiBuilder{#e=new Map;#t=new Map;#r=new Map;#o(t,r,o=this.#r.get(t)){return o||(o=`Schema${this.#r.size+1}`,this.#r.set(t,o)),this.addSchema(o,r),{$ref:`#/components/schemas/${o}`}}#n(t,r,o){let n=o||de(r,t),s=this.#t.get(n);if(s===void 0)return this.#t.set(n,1),n;if(o)throw new J(`Duplicated operationId: "${o}"`,{method:r,isResponse:!1,path:t});return s++,this.#t.set(n,s),`${n}${s}`}#s(t){let r=JSON.stringify(t);for(let n in this.rootDoc.components?.securitySchemes||{})if(r===JSON.stringify(this.rootDoc.components?.securitySchemes?.[n]))return n;let o=(this.#e.get(t.type)||0)+1;return this.#e.set(t.type,o),`${t.type.toUpperCase()}_${o}`}constructor({routing:t,config:r,title:o,version:n,serverUrl:s,descriptions:i,brandHandling:p,tags:d,isHeader:c,hasSummaryFromDescription:m=!0,composition:h="inline"}){super(),this.addInfo({title:o,version:n});for(let g of typeof s=="string"?[s]:s)this.addServer({url:g});Ve({routing:t,onEndpoint:(g,A,C)=>{let $={path:A,method:C,endpoint:g,composition:h,brandHandling:p,makeRef:this.#o.bind(this)},{description:O,shortDescription:I,scopes:N,inputSchema:_}=g,j=I?cr(I):m&&O?cr(O):void 0,re=r.inputSources?.[C]||qt[C],Ne=this.#n(A,C,g.getOperationId(C)),it=Wo({...$,schema:_}),xe=$o(g.security),at=Uo({...$,inputSources:re,isHeader:c,security:xe,request:it,description:i?.requestParameter?.call(null,{method:C,path:A,operationId:Ne})}),pt={};for(let oe of He){let Se=g.getResponses(oe);for(let{mimeTypes:dt,schema:$t,statusCodes:kr}of Se)for(let Ht of kr)pt[Ht]=_o({...$,variant:oe,schema:$t,mimeTypes:dt,statusCode:Ht,hasMultipleStatusCodes:Se.length>1||kr.length>1,description:i?.[`${oe}Response`]?.call(null,{method:C,path:A,operationId:Ne,statusCode:Ht})})}let ct=re.includes("body")?Yo({...$,request:it,paramNames:en.pluck("name",at),schema:_,mimeType:v[g.requestType],description:i?.requestBody?.call(null,{method:C,path:A,operationId:Ne})}):void 0,Lt=Go(Jo(xe,re),N,oe=>{let Se=this.#s(oe);return this.addSecurityScheme(Se,oe),Se}),Zt={operationId:Ne,summary:j,description:O,deprecated:g.isDeprecated||void 0,tags:Pt(g.tags),parameters:Pt(at),requestBody:ct,security:Pt(Lt),responses:pt};this.addPath(Do(A),{[C]:Zt})}}),d&&(this.rootDoc.tags=Qo(d))}};var Et=require("node-mocks-http");var bs=e=>(0,Et.createRequest)({...e,headers:{"content-type":v.json,...e?.headers}}),xs=e=>(0,Et.createResponse)(e),Ss=e=>{let t={warn:[],error:[],info:[],debug:[]};return new Proxy(e||{},{get(r,o,n){return o==="_getLogs"?()=>t:Xr(o)?(...s)=>t[o].push(s):Reflect.get(r,o,n)}})},tn=({requestProps:e,responseOptions:t,configProps:r,loggerProps:o})=>{let n=bs(e),s=xs({req:n,...t});s.req=t?.req||n,n.res=s;let i=Ss(o),p={cors:!1,logger:i,...r};return{requestMock:n,responseMock:s,loggerMock:i,configMock:p}},rn=async({endpoint:e,...t})=>{let{requestMock:r,responseMock:o,loggerMock:n,configMock:s}=tn(t);return await e.execute({request:r,response:o,config:s,logger:n}),{requestMock:r,responseMock:o,loggerMock:n}},on=async({middleware:e,options:t={},...r})=>{let{requestMock:o,responseMock:n,loggerMock:s,configMock:{inputSources:i,errorHandler:p=ye}}=tn(r),d=ft(o,i),c={request:o,response:n,logger:s,input:d,options:t};try{let m=await e.execute(c);return{requestMock:o,responseMock:n,loggerMock:s,output:m}}catch(m){return await p.execute({...c,error:pe(m),output:null}),{requestMock:o,responseMock:n,loggerMock:s,output:{}}}};var dn=y(require("ramda"),1),st=y(require("typescript"),1),mn=require("zod/v4");var pn=y(require("ramda"),1),U=y(require("typescript"),1);var Q=y(require("ramda"),1),u=y(require("typescript"),1),a=u.default.factory,vt=[a.createModifier(u.default.SyntaxKind.ExportKeyword)],Rs=[a.createModifier(u.default.SyntaxKind.AsyncKeyword)],ot={public:[a.createModifier(u.default.SyntaxKind.PublicKeyword)],protectedReadonly:[a.createModifier(u.default.SyntaxKind.ProtectedKeyword),a.createModifier(u.default.SyntaxKind.ReadonlyKeyword)]},dr=(e,t)=>u.default.addSyntheticLeadingComment(e,u.default.SyntaxKind.MultiLineCommentTrivia,`* ${t} `,!0),mr=(e,t)=>{let r=u.default.createSourceFile("print.ts","",u.default.ScriptTarget.Latest,!1,u.default.ScriptKind.TS);return u.default.createPrinter(t).printNode(u.default.EmitHint.Unspecified,e,r)},Os=/^[A-Za-z_$][A-Za-z0-9_$]*$/,lr=e=>typeof e=="string"&&Os.test(e)?a.createIdentifier(e):E(e),kt=(e,...t)=>a.createTemplateExpression(a.createTemplateHead(e),t.map(([r,o=""],n)=>a.createTemplateSpan(r,n===t.length-1?a.createTemplateTail(o):a.createTemplateMiddle(o)))),At=(e,{type:t,mod:r,init:o,optional:n}={})=>a.createParameterDeclaration(r,void 0,e,n?a.createToken(u.default.SyntaxKind.QuestionToken):void 0,t?f(t):void 0,o),_e=e=>Object.entries(e).map(([t,r])=>At(t,typeof r=="string"||typeof r=="number"||typeof r=="object"&&"kind"in r?{type:r}:r)),ur=(e,t=[])=>a.createConstructorDeclaration(ot.public,e,a.createBlock(t)),f=(e,t)=>typeof e=="number"?a.createKeywordTypeNode(e):typeof e=="string"||u.default.isIdentifier(e)?a.createTypeReferenceNode(e,t&&Q.map(f,t)):e,fr=f("Record",[u.default.SyntaxKind.StringKeyword,u.default.SyntaxKind.AnyKeyword]),Ae=(e,t,{isOptional:r,isDeprecated:o,comment:n}={})=>{let s=f(t),i=a.createPropertySignature(void 0,lr(e),r?a.createToken(u.default.SyntaxKind.QuestionToken):void 0,r?a.createUnionTypeNode([s,f(u.default.SyntaxKind.UndefinedKeyword)]):s),p=Q.reject(Q.isNil,[o?"@deprecated":void 0,n]);return p.length?dr(i,p.join(" ")):i},yr=e=>u.default.setEmitFlags(e,u.default.EmitFlags.SingleLine),gr=(...e)=>a.createArrayBindingPattern(e.map(t=>a.createBindingElement(void 0,void 0,t))),z=(e,t,{type:r,expose:o}={})=>a.createVariableStatement(o&&vt,a.createVariableDeclarationList([a.createVariableDeclaration(e,void 0,r?f(r):void 0,t)],u.default.NodeFlags.Const)),hr=(e,t)=>X(e,a.createUnionTypeNode(Q.map(q,t)),{expose:!0}),X=(e,t,{expose:r,comment:o,params:n}={})=>{let s=a.createTypeAliasDeclaration(r?vt:void 0,e,n&&Rr(n),t);return o?dr(s,o):s},nn=(e,t)=>a.createPropertyDeclaration(ot.public,e,void 0,f(t),void 0),br=(e,t,r,{typeParams:o,returns:n}={})=>a.createMethodDeclaration(ot.public,void 0,e,void 0,o&&Rr(o),t,n,a.createBlock(r)),xr=(e,t,{typeParams:r}={})=>a.createClassDeclaration(vt,e,r&&Rr(r),void 0,t),Sr=e=>a.createTypeOperatorNode(u.default.SyntaxKind.KeyOfKeyword,f(e)),Ct=e=>f(Promise.name,[e]),It=(e,t,{expose:r,comment:o}={})=>{let n=a.createInterfaceDeclaration(r?vt:void 0,e,void 0,void 0,t);return o?dr(n,o):n},Rr=e=>(Array.isArray(e)?e.map(t=>Q.pair(t,void 0)):Object.entries(e)).map(([t,r])=>{let{type:o,init:n}=typeof r=="object"&&"init"in r?r:{type:r};return a.createTypeParameterDeclaration([],t,o?f(o):void 0,n?f(n):void 0)}),Ce=(e,t,{isAsync:r}={})=>a.createArrowFunction(r?Rs:void 0,void 0,Array.isArray(e)?Q.map(At,e):_e(e),void 0,void 0,t),P=e=>e,nt=(e,t,r)=>a.createConditionalExpression(e,a.createToken(u.default.SyntaxKind.QuestionToken),t,a.createToken(u.default.SyntaxKind.ColonToken),r),w=(e,...t)=>(...r)=>a.createCallExpression(t.reduce((o,n)=>typeof n=="string"||u.default.isIdentifier(n)?a.createPropertyAccessExpression(o,n):a.createElementAccessExpression(o,n),typeof e=="string"?a.createIdentifier(e):e),void 0,r),Je=(e,...t)=>a.createNewExpression(a.createIdentifier(e),void 0,t),Nt=(e,t)=>f("Extract",[e,t]),Or=(e,t)=>a.createExpressionStatement(a.createBinaryExpression(e,a.createToken(u.default.SyntaxKind.EqualsToken),t)),D=(e,t)=>a.createIndexedAccessTypeNode(f(e),f(t)),sn=e=>a.createUnionTypeNode([f(e),Ct(e)]),Tr=(e,t)=>a.createFunctionTypeNode(void 0,_e(e),f(t)),E=e=>typeof e=="number"?a.createNumericLiteral(e):typeof e=="bigint"?a.createBigIntLiteral(e.toString()):typeof e=="boolean"?e?a.createTrue():a.createFalse():e===null?a.createNull():a.createStringLiteral(e),q=e=>a.createLiteralTypeNode(E(e)),Ts=[u.default.SyntaxKind.AnyKeyword,u.default.SyntaxKind.BigIntKeyword,u.default.SyntaxKind.BooleanKeyword,u.default.SyntaxKind.NeverKeyword,u.default.SyntaxKind.NumberKeyword,u.default.SyntaxKind.ObjectKeyword,u.default.SyntaxKind.StringKeyword,u.default.SyntaxKind.SymbolKeyword,u.default.SyntaxKind.UndefinedKeyword,u.default.SyntaxKind.UnknownKeyword,u.default.SyntaxKind.VoidKeyword],an=e=>Ts.includes(e.kind);var zt=class{constructor(t){this.serverUrl=t}paths=new Set;tags=new Map;registry=new Map;#e={pathType:a.createIdentifier("Path"),implementationType:a.createIdentifier("Implementation"),keyParameter:a.createIdentifier("key"),pathParameter:a.createIdentifier("path"),paramsArgument:a.createIdentifier("params"),ctxArgument:a.createIdentifier("ctx"),methodParameter:a.createIdentifier("method"),requestParameter:a.createIdentifier("request"),eventParameter:a.createIdentifier("event"),dataParameter:a.createIdentifier("data"),handlerParameter:a.createIdentifier("handler"),msgParameter:a.createIdentifier("msg"),parseRequestFn:a.createIdentifier("parseRequest"),substituteFn:a.createIdentifier("substitute"),provideMethod:a.createIdentifier("provide"),onMethod:a.createIdentifier("on"),implementationArgument:a.createIdentifier("implementation"),hasBodyConst:a.createIdentifier("hasBody"),undefinedValue:a.createIdentifier("undefined"),responseConst:a.createIdentifier("response"),restConst:a.createIdentifier("rest"),searchParamsConst:a.createIdentifier("searchParams"),defaultImplementationConst:a.createIdentifier("defaultImplementation"),clientConst:a.createIdentifier("client"),contentTypeConst:a.createIdentifier("contentType"),isJsonConst:a.createIdentifier("isJSON"),sourceProp:a.createIdentifier("source")};interfaces={input:a.createIdentifier("Input"),positive:a.createIdentifier("PositiveResponse"),negative:a.createIdentifier("NegativeResponse"),encoded:a.createIdentifier("EncodedResponse"),response:a.createIdentifier("Response")};methodType=hr("Method",rr);someOfType=X("SomeOf",D("T",Sr("T")),{params:["T"]});requestType=X("Request",Sr(this.interfaces.input),{expose:!0});someOf=({name:t})=>f(this.someOfType.name,[t]);makePathType=()=>hr(this.#e.pathType,Array.from(this.paths));makePublicInterfaces=()=>Object.keys(this.interfaces).map(t=>It(this.interfaces[t],Array.from(this.registry).map(([r,{store:o,isDeprecated:n}])=>Ae(r,o[t],{isDeprecated:n})),{expose:!0}));makeEndpointTags=()=>z("endpointTags",a.createObjectLiteralExpression(Array.from(this.tags).map(([t,r])=>a.createPropertyAssignment(lr(t),a.createArrayLiteralExpression(pn.map(E,r))))),{expose:!0});makeImplementationType=()=>X(this.#e.implementationType,Tr({[this.#e.methodParameter.text]:this.methodType.name,[this.#e.pathParameter.text]:U.default.SyntaxKind.StringKeyword,[this.#e.paramsArgument.text]:fr,[this.#e.ctxArgument.text]:{optional:!0,type:"T"}},Ct(U.default.SyntaxKind.AnyKeyword)),{expose:!0,params:{T:{init:U.default.SyntaxKind.UnknownKeyword}}});makeParseRequestFn=()=>z(this.#e.parseRequestFn,Ce({[this.#e.requestParameter.text]:U.default.SyntaxKind.StringKeyword},a.createAsExpression(w(this.#e.requestParameter,P("split"))(a.createRegularExpressionLiteral("/ (.+)/"),E(2)),a.createTupleTypeNode([f(this.methodType.name),f(this.#e.pathType)]))));makeSubstituteFn=()=>z(this.#e.substituteFn,Ce({[this.#e.pathParameter.text]:U.default.SyntaxKind.StringKeyword,[this.#e.paramsArgument.text]:fr},a.createBlock([z(this.#e.restConst,a.createObjectLiteralExpression([a.createSpreadAssignment(this.#e.paramsArgument)])),a.createForInStatement(a.createVariableDeclarationList([a.createVariableDeclaration(this.#e.keyParameter)],U.default.NodeFlags.Const),this.#e.paramsArgument,a.createBlock([Or(this.#e.pathParameter,w(this.#e.pathParameter,P("replace"))(kt(":",[this.#e.keyParameter]),Ce([],a.createBlock([a.createExpressionStatement(a.createDeleteExpression(a.createElementAccessExpression(this.#e.restConst,this.#e.keyParameter))),a.createReturnStatement(a.createElementAccessExpression(this.#e.paramsArgument,this.#e.keyParameter))]))))])),a.createReturnStatement(a.createAsExpression(a.createArrayLiteralExpression([this.#e.pathParameter,this.#e.restConst]),f("const")))])));#t=()=>br(this.#e.provideMethod,_e({[this.#e.requestParameter.text]:"K",[this.#e.paramsArgument.text]:D(this.interfaces.input,"K"),[this.#e.ctxArgument.text]:{optional:!0,type:"T"}}),[z(gr(this.#e.methodParameter,this.#e.pathParameter),w(this.#e.parseRequestFn)(this.#e.requestParameter)),a.createReturnStatement(w(a.createThis(),this.#e.implementationArgument)(this.#e.methodParameter,a.createSpreadElement(w(this.#e.substituteFn)(this.#e.pathParameter,this.#e.paramsArgument)),this.#e.ctxArgument))],{typeParams:{K:this.requestType.name},returns:Ct(D(this.interfaces.response,"K"))});makeClientClass=t=>xr(t,[ur([At(this.#e.implementationArgument,{type:f(this.#e.implementationType,["T"]),mod:ot.protectedReadonly,init:this.#e.defaultImplementationConst})]),this.#t()],{typeParams:["T"]});#r=t=>kt("?",[Je(URLSearchParams.name,t)]);#o=()=>Je(URL.name,kt("",[this.#e.pathParameter],[this.#e.searchParamsConst]),E(this.serverUrl));makeDefaultImplementation=()=>{let t=a.createPropertyAssignment(P("method"),w(this.#e.methodParameter,P("toUpperCase"))()),r=a.createPropertyAssignment(P("headers"),nt(this.#e.hasBodyConst,a.createObjectLiteralExpression([a.createPropertyAssignment(E("Content-Type"),E(v.json))]),this.#e.undefinedValue)),o=a.createPropertyAssignment(P("body"),nt(this.#e.hasBodyConst,w(JSON[Symbol.toStringTag],P("stringify"))(this.#e.paramsArgument),this.#e.undefinedValue)),n=z(this.#e.responseConst,a.createAwaitExpression(w(fetch.name)(this.#o(),a.createObjectLiteralExpression([t,r,o])))),s=z(this.#e.hasBodyConst,a.createLogicalNot(w(a.createArrayLiteralExpression([E("get"),E("delete")]),P("includes"))(this.#e.methodParameter))),i=z(this.#e.searchParamsConst,nt(this.#e.hasBodyConst,E(""),this.#r(this.#e.paramsArgument))),p=z(this.#e.contentTypeConst,w(this.#e.responseConst,P("headers"),P("get"))(E("content-type"))),d=a.createIfStatement(a.createPrefixUnaryExpression(U.default.SyntaxKind.ExclamationToken,this.#e.contentTypeConst),a.createReturnStatement()),c=z(this.#e.isJsonConst,w(this.#e.contentTypeConst,P("startsWith"))(E(v.json))),m=a.createReturnStatement(w(this.#e.responseConst,nt(this.#e.isJsonConst,E(P("json")),E(P("text"))))());return z(this.#e.defaultImplementationConst,Ce([this.#e.methodParameter,this.#e.pathParameter,this.#e.paramsArgument],a.createBlock([s,i,n,p,d,c,m]),{isAsync:!0}),{type:this.#e.implementationType})};#n=()=>ur(_e({request:"K",params:D(this.interfaces.input,"K")}),[z(gr(this.#e.pathParameter,this.#e.restConst),w(this.#e.substituteFn)(a.createElementAccessExpression(w(this.#e.parseRequestFn)(this.#e.requestParameter),E(1)),this.#e.paramsArgument)),z(this.#e.searchParamsConst,this.#r(this.#e.restConst)),Or(a.createPropertyAccessExpression(a.createThis(),this.#e.sourceProp),Je("EventSource",this.#o()))]);#s=t=>a.createTypeLiteralNode([Ae(P("event"),t)]);#i=()=>br(this.#e.onMethod,_e({[this.#e.eventParameter.text]:"E",[this.#e.handlerParameter.text]:Tr({[this.#e.dataParameter.text]:D(Nt("R",yr(this.#s("E"))),q(P("data")))},sn(U.default.SyntaxKind.VoidKeyword))}),[a.createExpressionStatement(w(a.createThis(),this.#e.sourceProp,P("addEventListener"))(this.#e.eventParameter,Ce([this.#e.msgParameter],w(this.#e.handlerParameter)(w(JSON[Symbol.toStringTag],P("parse"))(a.createPropertyAccessExpression(a.createParenthesizedExpression(a.createAsExpression(this.#e.msgParameter,f(MessageEvent.name))),P("data"))))))),a.createReturnStatement(a.createThis())],{typeParams:{E:D("R",q(P("event")))}});makeSubscriptionClass=t=>xr(t,[nn(this.#e.sourceProp,"EventSource"),this.#n(),this.#i()],{typeParams:{K:Nt(this.requestType.name,a.createTemplateLiteralType(a.createTemplateHead("get "),[a.createTemplateLiteralTypeSpan(f(U.default.SyntaxKind.StringKeyword),a.createTemplateTail(""))])),R:Nt(D(this.interfaces.positive,"K"),yr(this.#s(U.default.SyntaxKind.StringKeyword)))}});makeUsageStatements=(t,r)=>[z(this.#e.clientConst,Je(t)),w(this.#e.clientConst,this.#e.provideMethod)(E("get /v1/user/retrieve"),a.createObjectLiteralExpression([a.createPropertyAssignment("id",E("10"))])),w(Je(r,E("get /v1/events/stream"),a.createObjectLiteralExpression()),this.#e.onMethod)(E("time"),Ce(["time"],a.createBlock([])))]};var k=y(require("ramda"),1),x=y(require("typescript"),1),cn=require("zod/v4");var Pr=(e,{onEach:t,rules:r,onMissing:o,ctx:n={}})=>{let s=te(e),i=s&&s in r?r[s]:r[e._zod.def.type],d=i?i(e,{...n,next:m=>Pr(m,{ctx:n,onEach:t,rules:r,onMissing:o})}):o(e,n),c=t&&t(e,{prev:d,...n});return c?{...d,...c}:d};var{factory:V}=x.default,Ps={[x.default.SyntaxKind.AnyKeyword]:"",[x.default.SyntaxKind.BigIntKeyword]:BigInt(0),[x.default.SyntaxKind.BooleanKeyword]:!1,[x.default.SyntaxKind.NumberKeyword]:0,[x.default.SyntaxKind.ObjectKeyword]:{},[x.default.SyntaxKind.StringKeyword]:"",[x.default.SyntaxKind.UndefinedKeyword]:void 0},wr={name:k.path(["name","text"]),type:k.path(["type"]),optional:k.path(["questionToken"])},ws=({_zod:{def:e}})=>{let t=e.values.map(r=>r===void 0?f(x.default.SyntaxKind.UndefinedKeyword):q(r));return t.length===1?t[0]:V.createUnionTypeNode(t)},Es=(e,{isResponse:t,next:r,makeAlias:o})=>{let n=()=>{let s=Object.entries(e._zod.def.shape).map(([i,p])=>{let{description:d,deprecated:c}=cn.globalRegistry.get(p)||{};return Ae(i,r(p),{comment:d,isDeprecated:c,isOptional:gt(p,{isResponse:t})})});return V.createTypeLiteralNode(s)};return Dr(e,{io:t?"output":"input"})?o(e,n):n()},vs=({_zod:{def:e}},{next:t})=>V.createArrayTypeNode(t(e.element)),ks=({_zod:{def:e}})=>V.createUnionTypeNode(Object.values(e.entries).map(q)),As=({_zod:{def:e}},{next:t})=>{let r=new Map;for(let o of e.options){let n=t(o);r.set(an(n)?n.kind:n,n)}return V.createUnionTypeNode(Array.from(r.values()))},Cs=e=>Ps?.[e.kind],Is=({_zod:{def:e}},{next:t})=>t(e.innerType),Ns=({_zod:{def:e}},{next:t})=>V.createUnionTypeNode([t(e.innerType),q(null)]),zs=({_zod:{def:e}},{next:t})=>V.createTupleTypeNode(e.items.map(t).concat(e.rest===null?[]:V.createRestTypeNode(t(e.rest)))),js=({_zod:{def:e}},{next:t})=>f("Record",[e.keyType,e.valueType].map(t)),Ms=k.tryCatch(e=>{if(!e.every(x.default.isTypeLiteralNode))throw new Error("Not objects");let t=k.chain(k.prop("members"),e),r=k.uniqWith((...o)=>{if(!k.eqBy(wr.name,...o))return!1;if(k.both(k.eqBy(wr.type),k.eqBy(wr.optional))(...o))return!0;throw new Error("Has conflicting prop")},t);return V.createTypeLiteralNode(r)},(e,t)=>V.createIntersectionTypeNode(t)),Ls=({_zod:{def:e}},{next:t})=>Ms([e.left,e.right].map(t)),be=e=>()=>f(e),Er=({_zod:{def:e}},{next:t})=>t(e.innerType),Zs=({_zod:{def:e}},{next:t,isResponse:r})=>{let o=e[r?"out":"in"],n=e[r?"in":"out"];if(!ce(o,"transform"))return t(o);let s=t(n),i=yt(o,Cs(s)),p={number:x.default.SyntaxKind.NumberKeyword,bigint:x.default.SyntaxKind.BigIntKeyword,boolean:x.default.SyntaxKind.BooleanKeyword,string:x.default.SyntaxKind.StringKeyword,undefined:x.default.SyntaxKind.UndefinedKeyword,object:x.default.SyntaxKind.ObjectKeyword};return f(i&&p[i]||x.default.SyntaxKind.AnyKeyword)},$s=()=>q(null),Hs=({_zod:{def:e}},{makeAlias:t,next:r})=>t(e.getter,()=>r(e.getter())),Ks=e=>{let t=f(x.default.SyntaxKind.StringKeyword),r=f("Buffer"),o=V.createUnionTypeNode([t,r]);return ce(e,"string")?t:ce(e,"union")?o:r},qs=(e,{next:t})=>t(e._zod.def.shape.raw),Bs={string:be(x.default.SyntaxKind.StringKeyword),number:be(x.default.SyntaxKind.NumberKeyword),bigint:be(x.default.SyntaxKind.BigIntKeyword),boolean:be(x.default.SyntaxKind.BooleanKeyword),any:be(x.default.SyntaxKind.AnyKeyword),undefined:be(x.default.SyntaxKind.UndefinedKeyword),[Pe]:be(x.default.SyntaxKind.StringKeyword),[we]:be(x.default.SyntaxKind.StringKeyword),null:$s,array:vs,tuple:zs,record:js,object:Es,literal:ws,intersection:Ls,union:As,default:Er,enum:ks,optional:Is,nullable:Ns,catch:Er,pipe:Zs,lazy:Hs,readonly:Er,[le]:Ks,[B]:qs},vr=(e,{brandHandling:t,ctx:r})=>Pr(e,{rules:{...t,...Bs},onMissing:()=>f(x.default.SyntaxKind.AnyKeyword),ctx:r});var jt=class extends zt{#e=[this.someOfType];#t=new Map;#r=[];#o(t,r){let o=this.#t.get(t)?.name?.text;if(!o){o=`Type${this.#t.size+1}`;let n=q(null);this.#t.set(t,X(o,n)),this.#t.set(t,X(o,r()))}return f(o)}constructor({routing:t,brandHandling:r,variant:o="client",clientClassName:n="Client",subscriptionClassName:s="Subscription",serverUrl:i="https://example.com",noContent:p=mn.z.undefined()}){super(i);let d={makeAlias:this.#o.bind(this)},c={brandHandling:r,ctx:{...d,isResponse:!1}},m={brandHandling:r,ctx:{...d,isResponse:!0}};Ve({routing:t,onEndpoint:(b,g,A)=>{let C=de.bind(null,A,g),{isDeprecated:$,inputSchema:O,tags:I}=b,N=`${A} ${g}`,_=X(C("input"),vr(O,c),{comment:N});this.#e.push(_);let j=He.reduce((it,xe)=>{let at=b.getResponses(xe),pt=dn.chain(([Lt,{schema:Zt,mimeTypes:oe,statusCodes:Se}])=>{let dt=X(C(xe,"variant",`${Lt+1}`),vr(oe?Zt:p,m),{comment:N});return this.#e.push(dt),Se.map($t=>Ae($t,dt.name))},Array.from(at.entries())),ct=It(C(xe,"response","variants"),pt,{comment:N});return this.#e.push(ct),Object.assign(it,{[xe]:ct})},{});this.paths.add(g);let re=q(N),Ne={input:f(_.name),positive:this.someOf(j.positive),negative:this.someOf(j.negative),response:a.createUnionTypeNode([D(this.interfaces.positive,re),D(this.interfaces.negative,re)]),encoded:a.createIntersectionTypeNode([f(j.positive.name),f(j.negative.name)])};this.registry.set(N,{isDeprecated:$,store:Ne}),this.tags.set(N,I)}}),this.#e.unshift(...this.#t.values()),this.#e.push(this.makePathType(),this.methodType,...this.makePublicInterfaces(),this.requestType),o!=="types"&&(this.#e.push(this.makeEndpointTags(),this.makeParseRequestFn(),this.makeSubstituteFn(),this.makeImplementationType(),this.makeDefaultImplementation(),this.makeClientClass(n),this.makeSubscriptionClass(s)),this.#r.push(...this.makeUsageStatements(n,s)))}#n(t){return this.#r.length?this.#r.map(r=>typeof r=="string"?r:mr(r,t)).join(`
19
- `):void 0}print(t){let r=this.#n(t),o=r&&st.default.addSyntheticLeadingComment(st.default.addSyntheticLeadingComment(a.createEmptyStatement(),st.default.SyntaxKind.SingleLineCommentTrivia," Usage example:"),st.default.SyntaxKind.MultiLineCommentTrivia,`
20
- ${r}`);return this.#e.concat(o||[]).map((n,s)=>mr(n,s<this.#e.length?t:{...t,omitTrailingSemicolon:!0})).join(`
18
+ `))};var Io=e=>{e.startupLogo!==!1&&ko(process.stdout);let t=e.errorHandler||le,r=Wr(e.logger)?e.logger:new He(e.logger);r.debug("Running",{build:"v24.0.0-beta.11 (CJS)",env:process.env.NODE_ENV||"development"}),Eo(r);let o=Po({logger:r,config:e}),s={getLogger:wo(r),errorHandler:t},i=Ro(s),p=So(s);return{...s,logger:r,notFoundHandler:i,catcher:p,loggingMiddleware:o}},No=(e,t)=>{let{logger:r,getLogger:o,notFoundHandler:n,loggingMiddleware:s}=Io(e);return tr({app:e.app.use(s),routing:t,getLogger:o,config:e}),{notFoundHandler:n,logger:r}},jo=async(e,t)=>{let{logger:r,getLogger:o,notFoundHandler:n,catcher:s,loggingMiddleware:i}=Io(e),p=(0,et.default)().disable("x-powered-by").use(i);if(e.compression){let x=await Fe("compression");p.use(x(typeof e.compression=="object"?e.compression:void 0))}await e.beforeRouting?.({app:p,getLogger:o});let d={json:[e.jsonParser||et.default.json()],raw:[e.rawParser||et.default.raw(),To],form:[e.formParser||et.default.urlencoded()],upload:e.upload?await Oo({config:e,getLogger:o}):[]};tr({app:p,routing:t,getLogger:o,config:e,parsers:d}),p.use(s,n);let c=[],m=(x,g)=>()=>x.listen(g,()=>r.info("Listening",g)),h=[];if(e.http){let x=Co.default.createServer(p);c.push(x),h.push(m(x,e.http.listen))}if(e.https){let x=Ao.default.createServer(e.https.options,p);c.push(x),h.push(m(x,e.https.listen))}return c.length||r.warn("No servers configured."),e.gracefulShutdown&&vo({logger:r,servers:c,options:e.gracefulShutdown===!0?{}:e.gracefulShutdown}),{app:p,logger:r,servers:h.map(x=>x())}};var Yo=require("openapi3-ts/oas31"),Qo=y(require("ramda"),1);var R=y(require("ramda"),1);var zo=e=>M(e)&&"or"in e,Lo=e=>M(e)&&"and"in e,rr=e=>!Lo(e)&&!zo(e),Mo=e=>{let t=R.filter(rr,e),r=R.chain(R.prop("and"),R.filter(Lo,e)),[o,n]=R.partition(rr,r),s=R.concat(t,o),i=R.filter(zo,e);return R.map(R.prop("or"),R.concat(i,n)).reduce((d,c)=>Se(d,R.map(m=>rr(m)?[m]:m.and,c),([m,h])=>R.concat(m,h)),R.reject(R.isEmpty,[s]))};var fe=require("openapi3-ts/oas31"),l=y(require("ramda"),1),or=require("zod/v4");var $o=["a-im","accept","accept-additions","accept-ch","accept-charset","accept-datetime","accept-encoding","accept-features","accept-language","accept-signature","access-control","access-control-request-headers","access-control-request-method","alpn","alt-used","alternates","amp-cache-transform","apply-to-redirect-ref","authentication-control","authentication-info","authorization","available-dictionary","c-ext","c-man","c-opt","c-pep","c-pep-info","cache-control","cal-managed-id","caldav-timezones","capsule-protocol","cert-not-after","cert-not-before","client-cert","client-cert-chain","close","cmcd-object","cmcd-request","cmcd-session","cmcd-status","cmsd-dynamic","cmsd-static","concealed-auth-export","configuration-context","connection","content-digest","content-disposition","content-encoding","content-id","content-language","content-length","content-location","content-md5","content-range","content-script-type","content-type","cookie","cookie2","cross-origin-embedder-policy","cross-origin-embedder-policy-report-only","cross-origin-opener-policy","cross-origin-opener-policy-report-only","cross-origin-resource-policy","cta-common-access-token","dasl","date","dav","default-style","delta-base","deprecation","depth","derived-from","destination","detached-jws","differential-id","dictionary-id","digest","dpop","dpop-nonce","early-data","ediint-features","expect","expect-ct","ext","forwarded","from","getprofile","hobareg","host","http2-settings","if","if-match","if-modified-since","if-none-match","if-range","if-schedule-tag-match","if-unmodified-since","im","include-referred-token-binding-id","isolation","keep-alive","label","last-event-id","link","link-template","lock-token","man","max-forwards","memento-datetime","meter","method-check","method-check-expires","mime-version","negotiate","nel","odata-entityid","odata-isolation","odata-maxversion","odata-version","opt","ordering-type","origin","origin-agent-cluster","oscore","oslc-core-version","overwrite","p3p","pep","pep-info","permissions-policy","pics-label","ping-from","ping-to","position","pragma","prefer","preference-applied","priority","profileobject","protocol","protocol-info","protocol-query","protocol-request","proxy-authorization","proxy-features","proxy-instruction","public","public-key-pins","public-key-pins-report-only","range","redirect-ref","referer","referer-root","referrer-policy","repeatability-client-id","repeatability-first-sent","repeatability-request-id","repeatability-result","replay-nonce","reporting-endpoints","repr-digest","safe","schedule-reply","schedule-tag","sec-fetch-storage-access","sec-gpc","sec-purpose","sec-token-binding","sec-websocket-extensions","sec-websocket-key","sec-websocket-protocol","sec-websocket-version","security-scheme","setprofile","signature","signature-input","slug","soapaction","status-uri","sunset","surrogate-capability","tcn","te","timeout","topic","traceparent","tracestate","trailer","transfer-encoding","ttl","upgrade","urgency","uri","use-as-dictionary","user-agent","variant-vary","via","want-content-digest","want-digest","want-repr-digest","warning","x-content-type-options","x-frame-options"];var Zo=50,Ho="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString",Ko={integer:0,number:0,string:"",boolean:!1,object:{},null:null,array:[]},qo=e=>e.replace(Zt,t=>`{${t.slice(1)}}`),Un=({},e)=>{if(e.isResponse)throw new V("Please use ez.upload() only for input.",e);return{type:"string",format:"binary"}},Dn=({jsonSchema:e})=>({...e,externalDocs:{description:"raw binary data",url:"https://swagger.io/specification/#working-with-binary-data"}}),_n=({zodSchema:e,jsonSchema:t})=>{if(!e._zod.propValues)return t;let r=Object.keys(e._zod.propValues).pop();return r?{...t,discriminator:t.discriminator??{propertyName:r}}:t},Jn=l.tryCatch(({jsonSchema:e})=>{if(!e.allOf)throw"no allOf";return Ue(e,"throw")},(e,{jsonSchema:t})=>t),Vn=({jsonSchema:e})=>{if(!e.anyOf)return e;let t=e.anyOf[0];return Object.assign(t,{type:rs(t.type)})},Bo=e=>e in Ko,Gn=({jsonSchema:e})=>({type:typeof e.enum?.[0],...e}),Wn=({jsonSchema:e})=>({type:typeof(e.const||e.enum?.[0]),...e}),Pe=({$ref:e,type:t,allOf:r,oneOf:o,anyOf:n,not:s,...i})=>{if(e)return{$ref:e};let p={type:Array.isArray(t)?t.filter(Bo):t&&Bo(t)?t:void 0,...i};for(let[d,c]of l.toPairs({allOf:r,oneOf:o,anyOf:n}))c&&(p[d]=c.map(Pe));return s&&(p.not=Pe(s)),p},Yn=({jsonSchema:{examples:e,description:t}},r)=>{if(r.isResponse)throw new V("Please use ez.dateOut() for output.",r);let o={description:t||"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:Ho}};return e?.length&&(o.examples=e),o},Qn=({jsonSchema:{examples:e,description:t}},r)=>{if(!r.isResponse)throw new V("Please use ez.dateIn() for input.",r);let o={description:t||"YYYY-MM-DDTHH:mm:ss.sssZ",type:"string",format:"date-time",externalDocs:{url:Ho}};return e?.length&&(o.examples=e),o},Xn=()=>({type:"string",format:"bigint",pattern:/^-?\d+$/.source}),es=({zodSchema:e,jsonSchema:t})=>e._zod.def.rest!==null?t:{...t,items:{not:{}}},ts=e=>{let t=Array.isArray(e.type)?e.type[0]:e.type;return Ko?.[t]},rs=e=>e==="null"?e:typeof e=="string"?[e,"null"]:e&&[...new Set(e).add("null")],os=({zodSchema:e,jsonSchema:t},r)=>{let o=e._zod.def[r.isResponse?"out":"in"],n=e._zod.def[r.isResponse?"in":"out"];if(!Ne(o,"transform"))return t;let s=Pe(ir(n,{ctx:r}));if((0,fe.isSchemaObject)(s))if(r.isResponse){let i=ut(o,ts(s));if(i&&["number","string","boolean"].includes(i))return{...t,type:i}}else{let{type:i,...p}=s;return{...p,format:`${p.format||i} (preprocessed)`}}return t},ns=({jsonSchema:e})=>{if(e.type!=="object")return e;let t=e;return!t.properties||!("raw"in t.properties)?e:t.properties.raw},nr=e=>e.length?l.fromPairs(l.zip(l.times(t=>`example${t+1}`,e.length),l.map(l.objOf("value"),e))):void 0,ss=(e,t)=>t?.includes(e)||e.startsWith("x-")||$o.includes(e),Fo=({path:e,method:t,request:r,inputSources:o,makeRef:n,composition:s,isHeader:i,security:p,description:d=`${t.toUpperCase()} ${e} Parameter`})=>{let c=Ue(r),m=mt(e),h=o.includes("query"),x=o.includes("params"),g=o.includes("headers"),k=O=>x&&m.includes(O),C=l.chain(l.filter(O=>O.type==="header"),p??[]).map(({name:O})=>O),$=O=>g&&(i?.(O,t,e)??ss(O,C));return Object.entries(c.properties).reduce((O,[N,I])=>{let _=k(N)?"path":$(N)?"header":h?"query":void 0;if(!_)return O;let z=Pe(I),te=s==="components"?n(I.id||JSON.stringify(I),z,se(d,N)):z;return O.concat({name:N,in:_,deprecated:I.deprecated,required:c.required?.includes(N)||!1,description:z.description||d,schema:te,examples:nr((0,fe.isSchemaObject)(z)&&z.examples?.length?z.examples:l.pluck(N,c.examples?.filter(l.both(M,l.has(N)))||[]))})},[])},sr={nullable:Vn,union:_n,bigint:Xn,intersection:Jn,tuple:es,pipe:os,literal:Wn,enum:Gn,[be]:Yn,[xe]:Qn,[pe]:Un,[K]:ns,[he]:Dn},is=(e,t,r)=>{let o=[e,t];for(;o.length;){let n=o.shift();if(l.is(Object,n)){if((0,fe.isReferenceObject)(n)&&!n.$ref.startsWith("#/components")){let s=n.$ref.split("/").pop(),i=t[s];i&&(n.$ref=r.makeRef(i.id||i,Pe(i)).$ref);continue}o.push(...l.values(n))}l.is(Array,n)&&o.push(...l.values(n))}return e},ir=(e,{ctx:t,rules:r=sr})=>{let{$defs:o={},properties:n={}}=or.z.toJSONSchema(or.z.object({subject:e}),{unrepresentable:"any",io:t.isResponse?"output":"input",override:s=>{let i=ee(s.zodSchema),p=r[i&&i in r?i:s.zodSchema._zod.def.type];if(p){let d={...p(s,t)};for(let c in s.jsonSchema)delete s.jsonSchema[c];Object.assign(s.jsonSchema,d)}}});return is(n.subject,o,t)},Uo=(e,t)=>{if((0,fe.isReferenceObject)(e))return[e,!1];let r=!1,o=l.map(p=>{let[d,c]=Uo(p,t);return r=r||c,d}),n=l.omit(t),s={properties:n,examples:l.map(n),required:l.without(t),allOf:o,oneOf:o,anyOf:o},i=l.evolve(s,e);return[i,r||!!i.required?.length]},Do=({method:e,path:t,schema:r,mimeTypes:o,variant:n,makeRef:s,composition:i,hasMultipleStatusCodes:p,statusCode:d,brandHandling:c,description:m=`${e.toUpperCase()} ${t} ${Kt(n)} response ${p?d:""}`.trim()})=>{if(!o)return{description:m};let h=Pe(ir(r,{rules:{...c,...sr},ctx:{isResponse:!0,makeRef:s,path:t,method:e}})),x=[];(0,fe.isSchemaObject)(h)&&h.examples&&(x.push(...h.examples),delete h.examples);let g={schema:i==="components"?s(r,h,se(m)):h,examples:nr(x)};return{description:m,content:l.fromPairs(l.xprod(o,[g]))}},as=({format:e})=>{let t={type:"http",scheme:"bearer"};return e&&(t.bearerFormat=e),t},ps=({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},cs=({name:e})=>({type:"apiKey",in:"header",name:e}),ds=({name:e})=>({type:"apiKey",in:"cookie",name:e}),ms=({url:e})=>({type:"openIdConnect",openIdConnectUrl:e}),ls=({flows:e={}})=>({type:"oauth2",flows:l.map(t=>({...t,scopes:t.scopes||{}}),l.reject(l.isNil,e))}),_o=(e,t=[])=>{let r=o=>o.type==="basic"?{type:"http",scheme:"basic"}:o.type==="bearer"?as(o):o.type==="input"?ps(o,t):o.type==="header"?cs(o):o.type==="cookie"?ds(o):o.type==="openid"?ms(o):ls(o);return e.map(o=>o.map(r))},Jo=(e,t,r)=>e.map(o=>o.reduce((n,s)=>{let i=r(s),p=["oauth2","openIdConnect"].includes(s.type);return Object.assign(n,{[i]:p?t:[]})},{})),Vo=({schema:e,brandHandling:t,makeRef:r,path:o,method:n})=>ir(e,{rules:{...t,...sr},ctx:{isResponse:!1,makeRef:r,path:o,method:n}}),Go=({method:e,path:t,schema:r,request:o,mimeType:n,makeRef:s,composition:i,paramNames:p,description:d=`${e.toUpperCase()} ${t} Request body`})=>{let[c,m]=Uo(Pe(o),p),h=[];(0,fe.isSchemaObject)(c)&&c.examples&&(h.push(...c.examples),delete c.examples);let x={schema:i==="components"?s(r,c,se(d)):c,examples:nr(h.length?h:Ue(o).examples?.filter(k=>M(k)&&!Array.isArray(k)).map(l.omit(p))||[])},g={description:d,content:{[n]:x}};return(m||n===E.raw)&&(g.required=!0),g},Wo=e=>Object.entries(e).reduce((t,[r,o])=>{if(!o)return t;let n={name:r,description:typeof o=="string"?o:o.description};return typeof o=="object"&&o.url&&(n.externalDocs={url:o.url}),t.concat(n)},[]),ar=e=>e.length<=Zo?e:e.slice(0,Zo-1)+"\u2026",Ot=e=>e.length?e.slice():void 0;var Tt=class extends Yo.OpenApiBuilder{#e=new Map;#t=new Map;#r=new Map;#o(t,r,o=this.#r.get(t)){return o||(o=`Schema${this.#r.size+1}`,this.#r.set(t,o)),this.addSchema(o,r),{$ref:`#/components/schemas/${o}`}}#n(t,r,o){let n=o||se(r,t),s=this.#t.get(n);if(s===void 0)return this.#t.set(n,1),n;if(o)throw new V(`Duplicated operationId: "${o}"`,{method:r,isResponse:!1,path:t});return s++,this.#t.set(n,s),`${n}${s}`}#s(t){let r=JSON.stringify(t);for(let n in this.rootDoc.components?.securitySchemes||{})if(r===JSON.stringify(this.rootDoc.components?.securitySchemes?.[n]))return n;let o=(this.#e.get(t.type)||0)+1;return this.#e.set(t.type,o),`${t.type.toUpperCase()}_${o}`}constructor({routing:t,config:r,title:o,version:n,serverUrl:s,descriptions:i,brandHandling:p,tags:d,isHeader:c,hasSummaryFromDescription:m=!0,composition:h="inline"}){super(),this.addInfo({title:o,version:n});for(let g of typeof s=="string"?[s]:s)this.addServer({url:g});De({routing:t,onEndpoint:(g,k,C)=>{let $={path:k,method:C,endpoint:g,composition:h,brandHandling:p,makeRef:this.#o.bind(this)},{description:O,shortDescription:N,scopes:I,inputSchema:_}=g,z=N?ar(N):m&&O?ar(O):void 0,te=r.inputSources?.[C]||Bt[C],ke=this.#n(k,C,g.getOperationId(C)),nt=Vo({...$,schema:_}),ye=Mo(g.security),st=Fo({...$,inputSources:te,isHeader:c,security:ye,request:nt,description:i?.requestParameter?.call(null,{method:C,path:k,operationId:ke})}),it={};for(let re of Ze){let ge=g.getResponses(re);for(let{mimeTypes:pt,schema:Mt,statusCodes:Er}of ge)for(let $t of Er)it[$t]=Do({...$,variant:re,schema:Mt,mimeTypes:pt,statusCode:$t,hasMultipleStatusCodes:ge.length>1||Er.length>1,description:i?.[`${re}Response`]?.call(null,{method:C,path:k,operationId:ke,statusCode:$t})})}let at=te.includes("body")?Go({...$,request:nt,paramNames:Qo.pluck("name",st),schema:_,mimeType:E[g.requestType],description:i?.requestBody?.call(null,{method:C,path:k,operationId:ke})}):void 0,zt=Jo(_o(ye,te),I,re=>{let ge=this.#s(re);return this.addSecurityScheme(ge,re),ge}),Lt={operationId:ke,summary:z,description:O,deprecated:g.isDeprecated||void 0,tags:Ot(g.tags),parameters:Ot(st),requestBody:at,security:Ot(zt),responses:it};this.addPath(qo(k),{[C]:Lt})}}),d&&(this.rootDoc.tags=Wo(d))}};var Pt=require("node-mocks-http");var us=e=>(0,Pt.createRequest)({...e,headers:{"content-type":E.json,...e?.headers}}),fs=e=>(0,Pt.createResponse)(e),ys=e=>{let t={warn:[],error:[],info:[],debug:[]};return new Proxy(e||{},{get(r,o,n){return o==="_getLogs"?()=>t:Yr(o)?(...s)=>t[o].push(s):Reflect.get(r,o,n)}})},Xo=({requestProps:e,responseOptions:t,configProps:r,loggerProps:o})=>{let n=us(e),s=fs({req:n,...t});s.req=t?.req||n,n.res=s;let i=ys(o),p={cors:!1,logger:i,...r};return{requestMock:n,responseMock:s,loggerMock:i,configMock:p}},en=async({endpoint:e,...t})=>{let{requestMock:r,responseMock:o,loggerMock:n,configMock:s}=Xo(t);return await e.execute({request:r,response:o,config:s,logger:n}),{requestMock:r,responseMock:o,loggerMock:n}},tn=async({middleware:e,options:t={},...r})=>{let{requestMock:o,responseMock:n,loggerMock:s,configMock:{inputSources:i,errorHandler:p=le}}=Xo(r),d=lt(o,i),c={request:o,response:n,logger:s,input:d,options:t};try{let m=await e.execute(c);return{requestMock:o,responseMock:n,loggerMock:s,output:m}}catch(m){return await p.execute({...c,error:oe(m),output:null}),{requestMock:o,responseMock:n,loggerMock:s,output:{}}}};var cn=y(require("ramda"),1),ot=y(require("typescript"),1),dn=require("zod/v4");var sn=y(require("ramda"),1),U=y(require("typescript"),1);var Y=y(require("ramda"),1),u=y(require("typescript"),1),a=u.default.factory,wt=[a.createModifier(u.default.SyntaxKind.ExportKeyword)],gs=[a.createModifier(u.default.SyntaxKind.AsyncKeyword)],tt={public:[a.createModifier(u.default.SyntaxKind.PublicKeyword)],protectedReadonly:[a.createModifier(u.default.SyntaxKind.ProtectedKeyword),a.createModifier(u.default.SyntaxKind.ReadonlyKeyword)]},pr=(e,t)=>u.default.addSyntheticLeadingComment(e,u.default.SyntaxKind.MultiLineCommentTrivia,`* ${t} `,!0),cr=(e,t)=>{let r=u.default.createSourceFile("print.ts","",u.default.ScriptTarget.Latest,!1,u.default.ScriptKind.TS);return u.default.createPrinter(t).printNode(u.default.EmitHint.Unspecified,e,r)},hs=/^[A-Za-z_$][A-Za-z0-9_$]*$/,dr=e=>typeof e=="string"&&hs.test(e)?a.createIdentifier(e):w(e),Et=(e,...t)=>a.createTemplateExpression(a.createTemplateHead(e),t.map(([r,o=""],n)=>a.createTemplateSpan(r,n===t.length-1?a.createTemplateTail(o):a.createTemplateMiddle(o)))),vt=(e,{type:t,mod:r,init:o,optional:n}={})=>a.createParameterDeclaration(r,void 0,e,n?a.createToken(u.default.SyntaxKind.QuestionToken):void 0,t?f(t):void 0,o),_e=e=>Object.entries(e).map(([t,r])=>vt(t,typeof r=="string"||typeof r=="number"||typeof r=="object"&&"kind"in r?{type:r}:r)),mr=(e,t=[])=>a.createConstructorDeclaration(tt.public,e,a.createBlock(t)),f=(e,t)=>typeof e=="number"?a.createKeywordTypeNode(e):typeof e=="string"||u.default.isIdentifier(e)?a.createTypeReferenceNode(e,t&&Y.map(f,t)):e,lr=f("Record",[u.default.SyntaxKind.StringKeyword,u.default.SyntaxKind.AnyKeyword]),we=(e,t,{isOptional:r,isDeprecated:o,comment:n}={})=>{let s=f(t),i=a.createPropertySignature(void 0,dr(e),r?a.createToken(u.default.SyntaxKind.QuestionToken):void 0,r?a.createUnionTypeNode([s,f(u.default.SyntaxKind.UndefinedKeyword)]):s),p=Y.reject(Y.isNil,[o?"@deprecated":void 0,n]);return p.length?pr(i,p.join(" ")):i},ur=e=>u.default.setEmitFlags(e,u.default.EmitFlags.SingleLine),fr=(...e)=>a.createArrayBindingPattern(e.map(t=>a.createBindingElement(void 0,void 0,t))),j=(e,t,{type:r,expose:o}={})=>a.createVariableStatement(o&&wt,a.createVariableDeclarationList([a.createVariableDeclaration(e,void 0,r?f(r):void 0,t)],u.default.NodeFlags.Const)),yr=(e,t)=>Q(e,a.createUnionTypeNode(Y.map(B,t)),{expose:!0}),Q=(e,t,{expose:r,comment:o,params:n}={})=>{let s=a.createTypeAliasDeclaration(r?wt:void 0,e,n&&xr(n),t);return o?pr(s,o):s},rn=(e,t)=>a.createPropertyDeclaration(tt.public,e,void 0,f(t),void 0),gr=(e,t,r,{typeParams:o,returns:n}={})=>a.createMethodDeclaration(tt.public,void 0,e,void 0,o&&xr(o),t,n,a.createBlock(r)),hr=(e,t,{typeParams:r}={})=>a.createClassDeclaration(wt,e,r&&xr(r),void 0,t),br=e=>a.createTypeOperatorNode(u.default.SyntaxKind.KeyOfKeyword,f(e)),kt=e=>f(Promise.name,[e]),Ct=(e,t,{expose:r,comment:o}={})=>{let n=a.createInterfaceDeclaration(r?wt:void 0,e,void 0,void 0,t);return o?pr(n,o):n},xr=e=>(Array.isArray(e)?e.map(t=>Y.pair(t,void 0)):Object.entries(e)).map(([t,r])=>{let{type:o,init:n}=typeof r=="object"&&"init"in r?r:{type:r};return a.createTypeParameterDeclaration([],t,o?f(o):void 0,n?f(n):void 0)}),Ee=(e,t,{isAsync:r}={})=>a.createArrowFunction(r?gs:void 0,void 0,Array.isArray(e)?Y.map(vt,e):_e(e),void 0,void 0,t),T=e=>e,rt=(e,t,r)=>a.createConditionalExpression(e,a.createToken(u.default.SyntaxKind.QuestionToken),t,a.createToken(u.default.SyntaxKind.ColonToken),r),P=(e,...t)=>(...r)=>a.createCallExpression(t.reduce((o,n)=>typeof n=="string"||u.default.isIdentifier(n)?a.createPropertyAccessExpression(o,n):a.createElementAccessExpression(o,n),typeof e=="string"?a.createIdentifier(e):e),void 0,r),Je=(e,...t)=>a.createNewExpression(a.createIdentifier(e),void 0,t),At=(e,t)=>f("Extract",[e,t]),Sr=(e,t)=>a.createExpressionStatement(a.createBinaryExpression(e,a.createToken(u.default.SyntaxKind.EqualsToken),t)),F=(e,t)=>a.createIndexedAccessTypeNode(f(e),f(t)),on=e=>a.createUnionTypeNode([f(e),kt(e)]),Rr=(e,t)=>a.createFunctionTypeNode(void 0,_e(e),f(t)),w=e=>typeof e=="number"?a.createNumericLiteral(e):typeof e=="bigint"?a.createBigIntLiteral(e.toString()):typeof e=="boolean"?e?a.createTrue():a.createFalse():e===null?a.createNull():a.createStringLiteral(e),B=e=>a.createLiteralTypeNode(w(e)),bs=[u.default.SyntaxKind.AnyKeyword,u.default.SyntaxKind.BigIntKeyword,u.default.SyntaxKind.BooleanKeyword,u.default.SyntaxKind.NeverKeyword,u.default.SyntaxKind.NumberKeyword,u.default.SyntaxKind.ObjectKeyword,u.default.SyntaxKind.StringKeyword,u.default.SyntaxKind.SymbolKeyword,u.default.SyntaxKind.UndefinedKeyword,u.default.SyntaxKind.UnknownKeyword,u.default.SyntaxKind.VoidKeyword],nn=e=>bs.includes(e.kind);var It=class{constructor(t){this.serverUrl=t}paths=new Set;tags=new Map;registry=new Map;#e={pathType:a.createIdentifier("Path"),implementationType:a.createIdentifier("Implementation"),keyParameter:a.createIdentifier("key"),pathParameter:a.createIdentifier("path"),paramsArgument:a.createIdentifier("params"),ctxArgument:a.createIdentifier("ctx"),methodParameter:a.createIdentifier("method"),requestParameter:a.createIdentifier("request"),eventParameter:a.createIdentifier("event"),dataParameter:a.createIdentifier("data"),handlerParameter:a.createIdentifier("handler"),msgParameter:a.createIdentifier("msg"),parseRequestFn:a.createIdentifier("parseRequest"),substituteFn:a.createIdentifier("substitute"),provideMethod:a.createIdentifier("provide"),onMethod:a.createIdentifier("on"),implementationArgument:a.createIdentifier("implementation"),hasBodyConst:a.createIdentifier("hasBody"),undefinedValue:a.createIdentifier("undefined"),responseConst:a.createIdentifier("response"),restConst:a.createIdentifier("rest"),searchParamsConst:a.createIdentifier("searchParams"),defaultImplementationConst:a.createIdentifier("defaultImplementation"),clientConst:a.createIdentifier("client"),contentTypeConst:a.createIdentifier("contentType"),isJsonConst:a.createIdentifier("isJSON"),sourceProp:a.createIdentifier("source")};interfaces={input:a.createIdentifier("Input"),positive:a.createIdentifier("PositiveResponse"),negative:a.createIdentifier("NegativeResponse"),encoded:a.createIdentifier("EncodedResponse"),response:a.createIdentifier("Response")};methodType=yr("Method",Xt);someOfType=Q("SomeOf",F("T",br("T")),{params:["T"]});requestType=Q("Request",br(this.interfaces.input),{expose:!0});someOf=({name:t})=>f(this.someOfType.name,[t]);makePathType=()=>yr(this.#e.pathType,Array.from(this.paths));makePublicInterfaces=()=>Object.keys(this.interfaces).map(t=>Ct(this.interfaces[t],Array.from(this.registry).map(([r,{store:o,isDeprecated:n}])=>we(r,o[t],{isDeprecated:n})),{expose:!0}));makeEndpointTags=()=>j("endpointTags",a.createObjectLiteralExpression(Array.from(this.tags).map(([t,r])=>a.createPropertyAssignment(dr(t),a.createArrayLiteralExpression(sn.map(w,r))))),{expose:!0});makeImplementationType=()=>Q(this.#e.implementationType,Rr({[this.#e.methodParameter.text]:this.methodType.name,[this.#e.pathParameter.text]:U.default.SyntaxKind.StringKeyword,[this.#e.paramsArgument.text]:lr,[this.#e.ctxArgument.text]:{optional:!0,type:"T"}},kt(U.default.SyntaxKind.AnyKeyword)),{expose:!0,params:{T:{init:U.default.SyntaxKind.UnknownKeyword}}});makeParseRequestFn=()=>j(this.#e.parseRequestFn,Ee({[this.#e.requestParameter.text]:U.default.SyntaxKind.StringKeyword},a.createAsExpression(P(this.#e.requestParameter,T("split"))(a.createRegularExpressionLiteral("/ (.+)/"),w(2)),a.createTupleTypeNode([f(this.methodType.name),f(this.#e.pathType)]))));makeSubstituteFn=()=>j(this.#e.substituteFn,Ee({[this.#e.pathParameter.text]:U.default.SyntaxKind.StringKeyword,[this.#e.paramsArgument.text]:lr},a.createBlock([j(this.#e.restConst,a.createObjectLiteralExpression([a.createSpreadAssignment(this.#e.paramsArgument)])),a.createForInStatement(a.createVariableDeclarationList([a.createVariableDeclaration(this.#e.keyParameter)],U.default.NodeFlags.Const),this.#e.paramsArgument,a.createBlock([Sr(this.#e.pathParameter,P(this.#e.pathParameter,T("replace"))(Et(":",[this.#e.keyParameter]),Ee([],a.createBlock([a.createExpressionStatement(a.createDeleteExpression(a.createElementAccessExpression(this.#e.restConst,this.#e.keyParameter))),a.createReturnStatement(a.createElementAccessExpression(this.#e.paramsArgument,this.#e.keyParameter))]))))])),a.createReturnStatement(a.createAsExpression(a.createArrayLiteralExpression([this.#e.pathParameter,this.#e.restConst]),f("const")))])));#t=()=>gr(this.#e.provideMethod,_e({[this.#e.requestParameter.text]:"K",[this.#e.paramsArgument.text]:F(this.interfaces.input,"K"),[this.#e.ctxArgument.text]:{optional:!0,type:"T"}}),[j(fr(this.#e.methodParameter,this.#e.pathParameter),P(this.#e.parseRequestFn)(this.#e.requestParameter)),a.createReturnStatement(P(a.createThis(),this.#e.implementationArgument)(this.#e.methodParameter,a.createSpreadElement(P(this.#e.substituteFn)(this.#e.pathParameter,this.#e.paramsArgument)),this.#e.ctxArgument))],{typeParams:{K:this.requestType.name},returns:kt(F(this.interfaces.response,"K"))});makeClientClass=t=>hr(t,[mr([vt(this.#e.implementationArgument,{type:f(this.#e.implementationType,["T"]),mod:tt.protectedReadonly,init:this.#e.defaultImplementationConst})]),this.#t()],{typeParams:["T"]});#r=t=>Et("?",[Je(URLSearchParams.name,t)]);#o=()=>Je(URL.name,Et("",[this.#e.pathParameter],[this.#e.searchParamsConst]),w(this.serverUrl));makeDefaultImplementation=()=>{let t=a.createPropertyAssignment(T("method"),P(this.#e.methodParameter,T("toUpperCase"))()),r=a.createPropertyAssignment(T("headers"),rt(this.#e.hasBodyConst,a.createObjectLiteralExpression([a.createPropertyAssignment(w("Content-Type"),w(E.json))]),this.#e.undefinedValue)),o=a.createPropertyAssignment(T("body"),rt(this.#e.hasBodyConst,P(JSON[Symbol.toStringTag],T("stringify"))(this.#e.paramsArgument),this.#e.undefinedValue)),n=j(this.#e.responseConst,a.createAwaitExpression(P(fetch.name)(this.#o(),a.createObjectLiteralExpression([t,r,o])))),s=j(this.#e.hasBodyConst,a.createLogicalNot(P(a.createArrayLiteralExpression([w("get"),w("delete")]),T("includes"))(this.#e.methodParameter))),i=j(this.#e.searchParamsConst,rt(this.#e.hasBodyConst,w(""),this.#r(this.#e.paramsArgument))),p=j(this.#e.contentTypeConst,P(this.#e.responseConst,T("headers"),T("get"))(w("content-type"))),d=a.createIfStatement(a.createPrefixUnaryExpression(U.default.SyntaxKind.ExclamationToken,this.#e.contentTypeConst),a.createReturnStatement()),c=j(this.#e.isJsonConst,P(this.#e.contentTypeConst,T("startsWith"))(w(E.json))),m=a.createReturnStatement(P(this.#e.responseConst,rt(this.#e.isJsonConst,w(T("json")),w(T("text"))))());return j(this.#e.defaultImplementationConst,Ee([this.#e.methodParameter,this.#e.pathParameter,this.#e.paramsArgument],a.createBlock([s,i,n,p,d,c,m]),{isAsync:!0}),{type:this.#e.implementationType})};#n=()=>mr(_e({request:"K",params:F(this.interfaces.input,"K")}),[j(fr(this.#e.pathParameter,this.#e.restConst),P(this.#e.substituteFn)(a.createElementAccessExpression(P(this.#e.parseRequestFn)(this.#e.requestParameter),w(1)),this.#e.paramsArgument)),j(this.#e.searchParamsConst,this.#r(this.#e.restConst)),Sr(a.createPropertyAccessExpression(a.createThis(),this.#e.sourceProp),Je("EventSource",this.#o()))]);#s=t=>a.createTypeLiteralNode([we(T("event"),t)]);#i=()=>gr(this.#e.onMethod,_e({[this.#e.eventParameter.text]:"E",[this.#e.handlerParameter.text]:Rr({[this.#e.dataParameter.text]:F(At("R",ur(this.#s("E"))),B(T("data")))},on(U.default.SyntaxKind.VoidKeyword))}),[a.createExpressionStatement(P(a.createThis(),this.#e.sourceProp,T("addEventListener"))(this.#e.eventParameter,Ee([this.#e.msgParameter],P(this.#e.handlerParameter)(P(JSON[Symbol.toStringTag],T("parse"))(a.createPropertyAccessExpression(a.createParenthesizedExpression(a.createAsExpression(this.#e.msgParameter,f(MessageEvent.name))),T("data"))))))),a.createReturnStatement(a.createThis())],{typeParams:{E:F("R",B(T("event")))}});makeSubscriptionClass=t=>hr(t,[rn(this.#e.sourceProp,"EventSource"),this.#n(),this.#i()],{typeParams:{K:At(this.requestType.name,a.createTemplateLiteralType(a.createTemplateHead("get "),[a.createTemplateLiteralTypeSpan(f(U.default.SyntaxKind.StringKeyword),a.createTemplateTail(""))])),R:At(F(this.interfaces.positive,"K"),ur(this.#s(U.default.SyntaxKind.StringKeyword)))}});makeUsageStatements=(t,r)=>[j(this.#e.clientConst,Je(t)),P(this.#e.clientConst,this.#e.provideMethod)(w("get /v1/user/retrieve"),a.createObjectLiteralExpression([a.createPropertyAssignment("id",w("10"))])),P(Je(r,w("get /v1/events/stream"),a.createObjectLiteralExpression()),this.#e.onMethod)(w("time"),Ee(["time"],a.createBlock([])))]};var v=y(require("ramda"),1),b=y(require("typescript"),1),an=require("zod/v4");var Or=(e,{onEach:t,rules:r,onMissing:o,ctx:n={}})=>{let s=ee(e),i=s&&s in r?r[s]:r[e._zod.def.type],d=i?i(e,{...n,next:m=>Or(m,{ctx:n,onEach:t,rules:r,onMissing:o})}):o(e,n),c=t&&t(e,{prev:d,...n});return c?{...d,...c}:d};var{factory:X}=b.default,xs={[b.default.SyntaxKind.AnyKeyword]:"",[b.default.SyntaxKind.BigIntKeyword]:BigInt(0),[b.default.SyntaxKind.BooleanKeyword]:!1,[b.default.SyntaxKind.NumberKeyword]:0,[b.default.SyntaxKind.ObjectKeyword]:{},[b.default.SyntaxKind.StringKeyword]:"",[b.default.SyntaxKind.UndefinedKeyword]:void 0},Tr={name:v.path(["name","text"]),type:v.path(["type"]),optional:v.path(["questionToken"])},Ss=({_zod:{def:e}})=>{let t=e.values.map(r=>r===void 0?f(b.default.SyntaxKind.UndefinedKeyword):B(r));return t.length===1?t[0]:X.createUnionTypeNode(t)},Rs=(e,{isResponse:t,next:r,makeAlias:o})=>{let n=()=>{let s=Object.entries(e._zod.def.shape).map(([i,p])=>{let{description:d,deprecated:c}=an.globalRegistry.get(p)||{};return we(i,r(p),{comment:d,isDeprecated:c,isOptional:(t?p._zod.optout:p._zod.optin)==="optional"})});return X.createTypeLiteralNode(s)};return Kr(e,{io:t?"output":"input"})?o(e,n):n()},Os=({_zod:{def:e}},{next:t})=>X.createArrayTypeNode(t(e.element)),Ts=({_zod:{def:e}})=>X.createUnionTypeNode(Object.values(e.entries).map(B)),Ps=({_zod:{def:e}},{next:t})=>{let r=new Map;for(let o of e.options){let n=t(o);r.set(nn(n)?n.kind:n,n)}return X.createUnionTypeNode(Array.from(r.values()))},ws=e=>xs?.[e.kind],Es=({_zod:{def:e}},{next:t})=>t(e.innerType),vs=({_zod:{def:e}},{next:t})=>X.createUnionTypeNode([t(e.innerType),B(null)]),ks=({_zod:{def:e}},{next:t})=>X.createTupleTypeNode(e.items.map(t).concat(e.rest===null?[]:X.createRestTypeNode(t(e.rest)))),Cs=({_zod:{def:e}},{next:t})=>f("Record",[e.keyType,e.valueType].map(t)),As=v.tryCatch(e=>{if(!e.every(b.default.isTypeLiteralNode))throw new Error("Not objects");let t=v.chain(v.prop("members"),e),r=v.uniqWith((...o)=>{if(!v.eqBy(Tr.name,...o))return!1;if(v.both(v.eqBy(Tr.type),v.eqBy(Tr.optional))(...o))return!0;throw new Error("Has conflicting prop")},t);return X.createTypeLiteralNode(r)},(e,t)=>X.createIntersectionTypeNode(t)),Is=({_zod:{def:e}},{next:t})=>As([e.left,e.right].map(t)),D=e=>()=>f(e),Pr=({_zod:{def:e}},{next:t})=>t(e.innerType),pn=e=>f(e?b.default.SyntaxKind.UnknownKeyword:b.default.SyntaxKind.AnyKeyword),Ns=({_zod:{def:e}},{next:t,isResponse:r})=>{let o=e[r?"out":"in"],n=e[r?"in":"out"];if(!Ne(o,"transform"))return t(o);let s=t(n),i=ut(o,ws(s)),p={number:b.default.SyntaxKind.NumberKeyword,bigint:b.default.SyntaxKind.BigIntKeyword,boolean:b.default.SyntaxKind.BooleanKeyword,string:b.default.SyntaxKind.StringKeyword,undefined:b.default.SyntaxKind.UndefinedKeyword,object:b.default.SyntaxKind.ObjectKeyword};return f(i&&p[i]||pn(r))},js=()=>B(null),zs=({_zod:{def:e}},{makeAlias:t,next:r})=>t(e.getter,()=>r(e.getter())),Ls=()=>f("Buffer"),Ms=(e,{next:t})=>t(e._zod.def.shape.raw),$s={string:D(b.default.SyntaxKind.StringKeyword),number:D(b.default.SyntaxKind.NumberKeyword),bigint:D(b.default.SyntaxKind.BigIntKeyword),boolean:D(b.default.SyntaxKind.BooleanKeyword),any:D(b.default.SyntaxKind.AnyKeyword),undefined:D(b.default.SyntaxKind.UndefinedKeyword),[be]:D(b.default.SyntaxKind.StringKeyword),[xe]:D(b.default.SyntaxKind.StringKeyword),never:D(b.default.SyntaxKind.NeverKeyword),void:D(b.default.SyntaxKind.UndefinedKeyword),unknown:D(b.default.SyntaxKind.UnknownKeyword),null:js,array:Os,tuple:ks,record:Cs,object:Rs,literal:Ss,intersection:Is,union:Ps,default:Pr,enum:Ts,optional:Es,nullable:vs,catch:Pr,pipe:Ns,lazy:zs,readonly:Pr,[he]:Ls,[K]:Ms},wr=(e,{brandHandling:t,ctx:r})=>Or(e,{rules:{...t,...$s},onMissing:({},{isResponse:o})=>pn(o),ctx:r});var Nt=class extends It{#e=[this.someOfType];#t=new Map;#r=[];#o(t,r){let o=this.#t.get(t)?.name?.text;if(!o){o=`Type${this.#t.size+1}`;let n=B(null);this.#t.set(t,Q(o,n)),this.#t.set(t,Q(o,r()))}return f(o)}constructor({routing:t,brandHandling:r,variant:o="client",clientClassName:n="Client",subscriptionClassName:s="Subscription",serverUrl:i="https://example.com",noContent:p=dn.z.undefined()}){super(i);let d={makeAlias:this.#o.bind(this)},c={brandHandling:r,ctx:{...d,isResponse:!1}},m={brandHandling:r,ctx:{...d,isResponse:!0}};De({routing:t,onEndpoint:(x,g,k)=>{let C=se.bind(null,k,g),{isDeprecated:$,inputSchema:O,tags:N}=x,I=`${k} ${g}`,_=Q(C("input"),wr(O,c),{comment:I});this.#e.push(_);let z=Ze.reduce((nt,ye)=>{let st=x.getResponses(ye),it=cn.chain(([zt,{schema:Lt,mimeTypes:re,statusCodes:ge}])=>{let pt=Q(C(ye,"variant",`${zt+1}`),wr(re?Lt:p,m),{comment:I});return this.#e.push(pt),ge.map(Mt=>we(Mt,pt.name))},Array.from(st.entries())),at=Ct(C(ye,"response","variants"),it,{comment:I});return this.#e.push(at),Object.assign(nt,{[ye]:at})},{});this.paths.add(g);let te=B(I),ke={input:f(_.name),positive:this.someOf(z.positive),negative:this.someOf(z.negative),response:a.createUnionTypeNode([F(this.interfaces.positive,te),F(this.interfaces.negative,te)]),encoded:a.createIntersectionTypeNode([f(z.positive.name),f(z.negative.name)])};this.registry.set(I,{isDeprecated:$,store:ke}),this.tags.set(I,N)}}),this.#e.unshift(...this.#t.values()),this.#e.push(this.makePathType(),this.methodType,...this.makePublicInterfaces(),this.requestType),o!=="types"&&(this.#e.push(this.makeEndpointTags(),this.makeParseRequestFn(),this.makeSubstituteFn(),this.makeImplementationType(),this.makeDefaultImplementation(),this.makeClientClass(n),this.makeSubscriptionClass(s)),this.#r.push(...this.makeUsageStatements(n,s)))}#n(t){return this.#r.length?this.#r.map(r=>typeof r=="string"?r:cr(r,t)).join(`
19
+ `):void 0}print(t){let r=this.#n(t),o=r&&ot.default.addSyntheticLeadingComment(ot.default.addSyntheticLeadingComment(a.createEmptyStatement(),ot.default.SyntaxKind.SingleLineCommentTrivia," Usage example:"),ot.default.SyntaxKind.MultiLineCommentTrivia,`
20
+ ${r}`);return this.#e.concat(o||[]).map((n,s)=>cr(n,s<this.#e.length?t:{...t,omitTrailingSemicolon:!0})).join(`
21
21
 
22
- `)}async printFormatted({printerOptions:t,format:r}={}){let o=r;if(!o)try{let i=(await De("prettier")).format;o=p=>i(p,{filepath:"client.ts"})}catch{}let n=this.#n(t);this.#r=n&&o?[await o(n)]:this.#r;let s=this.print(t);return o?o(s):s}};var Ie=require("zod/v4");var un=(e,t)=>Ie.z.object({data:t,event:Ie.z.literal(e),id:Ie.z.string().optional(),retry:Ie.z.int().positive().optional()}),Fs=(e,t,r)=>un(String(t),e[t]).transform(o=>[`event: ${o.event}`,`data: ${JSON.stringify(o.data)}`,"",""].join(`
23
- `)).parse({event:t,data:r}),Ds=1e4,ln=e=>e.headersSent||e.writeHead(200,{connection:"keep-alive","content-type":v.sse,"cache-control":"no-cache"}),Us=e=>new F({handler:async({response:t})=>setTimeout(()=>ln(t),Ds)&&{isClosed:()=>t.writableEnded||t.closed,emit:(r,o)=>{ln(t),t.write(Fs(e,r,o),"utf-8"),t.flush?.()}}}),Vs=e=>new fe({positive:()=>{let[t,...r]=Object.entries(e).map(([o,n])=>un(o,n));return{mimeType:v.sse,schema:r.length?Ie.z.discriminatedUnion("event",[t,...r]):t}},negative:{mimeType:"text/plain",schema:Ie.z.string()},handler:async({response:t,error:r,logger:o,request:n,input:s})=>{if(r){let i=Ee(r);Xe(i,o,n,s),t.headersSent||t.status(i.statusCode).type("text/plain").write(ve(i),"utf-8")}t.end()}}),Mt=class extends ge{constructor(t){super(Vs(t)),this.middlewares=[Us(t)]}};var fn={dateIn:zr,dateOut:Mr,form:Lr,file:ht,upload:$r,raw:Br};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});
22
+ `)}async printFormatted({printerOptions:t,format:r}={}){let o=r;if(!o)try{let i=(await Fe("prettier")).format;o=p=>i(p,{filepath:"client.ts"})}catch{}let n=this.#n(t);this.#r=n&&o?[await o(n)]:this.#r;let s=this.print(t);return o?o(s):s}};var ve=require("zod/v4");var ln=(e,t)=>ve.z.object({data:t,event:ve.z.literal(e),id:ve.z.string().optional(),retry:ve.z.int().positive().optional()}),Zs=(e,t,r)=>ln(String(t),e[t]).transform(o=>[`event: ${o.event}`,`data: ${JSON.stringify(o.data)}`,"",""].join(`
23
+ `)).parse({event:t,data:r}),Bs=1e4,mn=e=>e.headersSent||e.writeHead(200,{connection:"keep-alive","content-type":E.sse,"cache-control":"no-cache"}),Hs=e=>new q({handler:async({response:t})=>setTimeout(()=>mn(t),Bs)&&{isClosed:()=>t.writableEnded||t.closed,emit:(r,o)=>{mn(t),t.write(Zs(e,r,o),"utf-8"),t.flush?.()}}}),Ks=e=>new me({positive:()=>{let[t,...r]=Object.entries(e).map(([o,n])=>ln(o,n));return{mimeType:E.sse,schema:r.length?ve.z.discriminatedUnion("event",[t,...r]):t}},negative:{mimeType:"text/plain",schema:ve.z.string()},handler:async({response:t,error:r,logger:o,request:n,input:s})=>{if(r){let i=Oe(r);Ye(i,o,n,s),t.headersSent||t.status(i.statusCode).type("text/plain").write(Te(i),"utf-8")}t.end()}}),jt=class extends ue{constructor(t){super(Ks(t)),this.middlewares=[Hs(t)]}};var un={dateIn:Ar,dateOut:Nr,form:zr,upload:Mr,raw:Br,buffer:dt};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,getMessageFromError,testEndpoint,testMiddleware});
package/dist/index.d.cts CHANGED
@@ -195,8 +195,7 @@ declare abstract class AbstractMiddleware {
195
195
  }
196
196
  declare class Middleware<OPT extends FlatObject, OUT extends FlatObject, SCO extends string, IN extends IOSchema = EmptySchema> extends AbstractMiddleware {
197
197
  #private;
198
- constructor({ input, // @todo revisit
199
- security, handler, }: {
198
+ constructor({ input, security, handler, }: {
200
199
  /**
201
200
  * @desc Input schema of the Middleware, combining properties from all the enabled input sources
202
201
  * @default z.object({})
@@ -224,11 +223,11 @@ declare class ExpressMiddleware<R extends Request, S extends Response, OUT exten
224
223
  });
225
224
  }
226
225
 
227
- type Base = object & {
226
+ type Base$1 = object & {
228
227
  [Symbol.iterator]?: never;
229
228
  };
230
229
  /** @desc The type allowed on the top level of Middlewares and Endpoints */
231
- type IOSchema = z.ZodType<Base>;
230
+ type IOSchema = z.ZodType<Base$1>;
232
231
 
233
232
  declare const methods: ("get" | "post" | "put" | "delete" | "patch")[];
234
233
  type Method = (typeof methods)[number];
@@ -465,7 +464,7 @@ type UploadOptions = Pick<express_fileupload__default.Options, "createParentPath
465
464
  type CompressionOptions = Pick<compression.CompressionOptions, "threshold" | "level" | "strategy" | "chunkSize" | "memLevel">;
466
465
  interface GracefulOptions {
467
466
  /**
468
- * @desc Time given to drain ongoing requests before exit.
467
+ * @desc Time given to drain ongoing requests before closing the server.
469
468
  * @default 1000
470
469
  * */
471
470
  timeout?: number;
@@ -475,6 +474,8 @@ interface GracefulOptions {
475
474
  * @default [SIGINT, SIGTERM]
476
475
  * */
477
476
  events?: string[];
477
+ /** @desc The hook to call after the server was closed, but before terminating the process. */
478
+ beforeExit?: () => void | Promise<void>;
478
479
  }
479
480
  type BeforeRouting = (params: {
480
481
  app: IRouter;
@@ -543,6 +544,7 @@ declare function createConfig(config: AppConfig): AppConfig;
543
544
 
544
545
  /** @desc this type does not allow props assignment, but it works for reading them when merged with another interface */
545
546
  type EmptyObject = z.output<EmptySchema>;
547
+ /** Avoiding z.ZodObject<Record<string, never>, $strip>, because its z.output<> is generic "object" (external issue) */
546
548
  type EmptySchema = z.ZodRecord<z.ZodString, z.ZodNever>;
547
549
  type FlatObject = Record<string, unknown>;
548
550
  /** @link https://stackoverflow.com/a/65492934 */
@@ -556,33 +558,6 @@ interface TagOverrides {
556
558
  }
557
559
  type Tag = NoNever<keyof TagOverrides, string>;
558
560
  declare const getMessageFromError: (error: Error) => string;
559
- declare const getExamples: <T extends $ZodType, V extends "original" | "parsed" | undefined>({ schema, variant, validate, pullProps, }: {
560
- schema: T;
561
- /**
562
- * @desc examples variant: original or parsed
563
- * @example "parsed" — for the case when possible schema transformations should be applied
564
- * @default "original"
565
- * @override validate: variant "parsed" activates validation as well
566
- * */
567
- variant?: V;
568
- /**
569
- * @desc filters out the examples that do not match the schema
570
- * @default variant === "parsed"
571
- * */
572
- validate?: boolean;
573
- /**
574
- * @desc should pull examples from properties — applicable to ZodObject only
575
- * @default false
576
- * */
577
- pullProps?: boolean;
578
- }) => ReadonlyArray<V extends "parsed" ? z.output<T> : z.input<T>>;
579
-
580
- declare const metaSymbol: unique symbol;
581
- interface Metadata {
582
- examples: unknown[];
583
- /** @override ZodDefault::_zod.def.defaultValue() in depictDefault */
584
- defaultLabel?: string;
585
- }
586
561
 
587
562
  /**
588
563
  * @fileoverview Mapping utils for Zod Runtime Plugin (remap)
@@ -603,18 +578,18 @@ type Intact<T, U> = {
603
578
 
604
579
  declare module "zod/v4/core" {
605
580
  interface GlobalMeta {
606
- [metaSymbol]?: Metadata;
607
581
  deprecated?: boolean;
582
+ default?: unknown;
608
583
  }
609
584
  }
610
585
  declare module "zod/v4" {
611
586
  interface ZodType {
612
- /** @desc Add an example value (before any transformations, can be called multiple times) */
613
- example(example: z.input<this>): this;
587
+ /** @desc Shorthand for .meta({examples}), it can be called multiple times */
588
+ example(example: z.output<this>): this;
614
589
  deprecated(): this;
615
590
  }
616
591
  interface ZodDefault<T extends $ZodType = $ZodType> extends ZodType {
617
- /** @desc Change the default value in the generated Documentation to a label */
592
+ /** @desc Change the default value in the generated Documentation to a label, alias for .meta({ default }) */
618
593
  label(label: string): this;
619
594
  }
620
595
  interface ZodObject<out Shape extends $ZodShape = $ZodLooseShape, out Config extends $ZodObjectConfig = $ZodObjectConfig> extends ZodType {
@@ -674,8 +649,7 @@ declare class EndpointsFactory<IN extends IOSchema = EmptySchema, OUT extends Fl
674
649
  } | undefined) => EndpointsFactory<IN, OUT & AOUT, SCO>;
675
650
  addExpressMiddleware<R extends Request, S extends Response, AOUT extends FlatObject = EmptyObject>(...params: ConstructorParameters<typeof ExpressMiddleware<R, S, AOUT>>): EndpointsFactory<IN, OUT & AOUT, SCO>;
676
651
  addOptions<AOUT extends FlatObject>(getOptions: () => Promise<AOUT>): EndpointsFactory<IN, OUT & AOUT, SCO>;
677
- build<BOUT extends IOSchema, BIN extends IOSchema = EmptySchema>({ input, // @todo revisit
678
- output: outputSchema, operationId, scope, tag, method, ...rest }: BuildProps<BIN, BOUT, IN, OUT, SCO>): Endpoint<z.ZodIntersection<IN, BIN>, BOUT, OUT>;
652
+ build<BOUT extends IOSchema, BIN extends IOSchema = EmptySchema>({ input, output: outputSchema, operationId, scope, tag, method, ...rest }: BuildProps<BIN, BOUT, IN, OUT, SCO>): Endpoint<z.ZodIntersection<IN, BIN>, BOUT, OUT>;
679
653
  /** @desc shorthand for returning {} while having output schema z.object({}) */
680
654
  buildVoid<BIN extends IOSchema = EmptySchema>({ handler, ...rest }: Omit<BuildProps<BIN, z.ZodVoid, IN, OUT, SCO>, "output">): Endpoint<z.ZodIntersection<IN, BIN>, z.ZodObject<{}, z.core.$strip>, OUT>;
681
655
  }
@@ -698,7 +672,7 @@ declare const createServer: (config: ServerConfig, routing: Routing) => Promise<
698
672
  }>;
699
673
 
700
674
  interface ReqResCommons {
701
- makeRef: (key: object, subject: SchemaObject | ReferenceObject, name?: string) => ReferenceObject;
675
+ makeRef: (key: object | string, subject: SchemaObject | ReferenceObject, name?: string) => ReferenceObject;
702
676
  path: string;
703
677
  method: Method;
704
678
  }
@@ -741,7 +715,7 @@ interface DocumentationParams {
741
715
  /**
742
716
  * @desc Handling rules for your own branded schemas.
743
717
  * @desc Keys: brands (recommended to use unique symbols).
744
- * @desc Values: functions having schema as first argument that you should assign type to, second one is a context.
718
+ * @desc Values: functions having Zod context as first argument, second one is the framework context.
745
719
  * @example { MyBrand: ( { zodSchema, jsonSchema } ) => ({ type: "object" })
746
720
  */
747
721
  brandHandling?: BrandHandling;
@@ -928,20 +902,10 @@ declare class EventStreamFactory<E extends EventsMap> extends EndpointsFactory<E
928
902
  constructor(events: E);
929
903
  }
930
904
 
931
- declare const variants: {
932
- buffer: () => z.core.$ZodBranded<z.ZodCustom<Buffer<ArrayBufferLike>, Buffer<ArrayBufferLike>>, symbol>;
933
- string: () => z.core.$ZodBranded<z.ZodString, symbol>;
934
- binary: () => z.core.$ZodBranded<z.ZodUnion<[z.ZodCustom<Buffer<ArrayBufferLike>, Buffer<ArrayBufferLike>>, z.ZodString]>, symbol>;
935
- base64: () => z.core.$ZodBranded<z.ZodBase64, symbol>;
936
- };
937
- type Variants = typeof variants;
938
- type Variant = keyof Variants;
939
- declare function file(): ReturnType<Variants["string"]>;
940
- declare function file<K extends Variant>(variant: K): ReturnType<Variants[K]>;
941
-
942
905
  declare const base: z.ZodObject<{
943
906
  raw: z.core.$ZodBranded<z.ZodCustom<Buffer<ArrayBufferLike>, Buffer<ArrayBufferLike>>, symbol>;
944
907
  }, z.core.$strip>;
908
+ type Base = ReturnType<typeof base.brand<symbol>>;
945
909
  declare const extended: <S extends $ZodShape>(extra: S) => z.core.$ZodBranded<z.ZodObject<("raw" & keyof S extends never ? {
946
910
  raw: z.core.$ZodBranded<z.ZodCustom<Buffer<ArrayBufferLike>, Buffer<ArrayBufferLike>>, symbol>;
947
911
  } & S : ({
@@ -955,17 +919,16 @@ declare const extended: <S extends $ZodShape>(extra: S) => z.core.$ZodBranded<z.
955
919
  } extends infer T_1 extends z.core.util.SomeObject ? { [K in keyof T_1 as K extends keyof S ? never : K]: {
956
920
  raw: z.core.$ZodBranded<z.ZodCustom<Buffer<ArrayBufferLike>, Buffer<ArrayBufferLike>>, symbol>;
957
921
  }[K]; } : never) & { [K_1 in keyof S]: S[K_1]; })[k]; } : never, z.core.$strip>, symbol>;
958
- /** Shorthand for z.object({ raw: ez.file("buffer") }) */
959
- declare function raw(): ReturnType<typeof base.brand<symbol>>;
922
+ declare function raw(): Base;
960
923
  declare function raw<S extends $ZodShape>(extra: S): ReturnType<typeof extended<S>>;
961
924
 
962
925
  declare const ez: {
963
- dateIn: () => zod_v4_core.$ZodBranded<zod_v4.ZodPipe<zod_v4.ZodPipe<zod_v4.ZodUnion<[zod_v4.ZodString, zod_v4.ZodString, zod_v4.ZodString]>, zod_v4.ZodTransform<Date, string>>, zod_v4.ZodDate>, symbol>;
964
- dateOut: () => zod_v4_core.$ZodBranded<zod_v4.ZodPipe<zod_v4.ZodDate, zod_v4.ZodTransform<string, Date>>, symbol>;
926
+ dateIn: ({ examples, ...rest }?: Parameters<zod_v4.ZodString["meta"]>[0]) => zod_v4_core.$ZodBranded<zod_v4.ZodPipe<zod_v4.ZodPipe<zod_v4.ZodUnion<readonly [zod_v4.ZodISODate, zod_v4.ZodISODateTime, zod_v4.ZodISODateTime]>, zod_v4.ZodTransform<Date, string>>, zod_v4.ZodDate>, symbol>;
927
+ dateOut: ({ examples, ...rest }?: Parameters<zod_v4.ZodString["meta"]>[0]) => zod_v4_core.$ZodBranded<zod_v4.ZodPipe<zod_v4.ZodDate, zod_v4.ZodTransform<string, Date>>, symbol>;
965
928
  form: <S extends zod_v4_core.$ZodShape>(base: S | zod_v4.ZodObject<S>) => zod_v4_core.$ZodBranded<zod_v4.ZodObject<{ -readonly [P in keyof S]: S[P]; }, zod_v4_core.$strip>, symbol>;
966
- file: typeof file;
967
929
  upload: () => zod_v4_core.$ZodBranded<zod_v4.ZodCustom<express_fileupload.UploadedFile, express_fileupload.UploadedFile>, symbol>;
968
930
  raw: typeof raw;
931
+ buffer: () => zod_v4_core.$ZodBranded<zod_v4.ZodCustom<Buffer<ArrayBufferLike>, Buffer<ArrayBufferLike>>, symbol>;
969
932
  };
970
933
 
971
- export { type ApiResponse, type AppConfig, type BasicSecurity, type BearerSecurity, BuiltinLogger, type CommonConfig, type CookieSecurity, DependsOnMethod, type Depicter, Documentation, DocumentationError, EndpointsFactory, EventStreamFactory, type FlatObject, type HeaderSecurity, type IOSchema, type InputSecurity, InputValidationError, Integration, type LoggerOverrides, type Method, Middleware, MissingPeerError, type OAuth2Security, type OpenIdSecurity, OutputValidationError, type Producer, ResultHandler, type Routing, RoutingError, ServeStatic, type ServerConfig, type TagOverrides, arrayEndpointsFactory, arrayResultHandler, attachRouting, createConfig, createServer, defaultEndpointsFactory, defaultResultHandler, ensureHttpError, ez, getExamples, getMessageFromError, testEndpoint, testMiddleware };
934
+ export { type ApiResponse, type AppConfig, type BasicSecurity, type BearerSecurity, BuiltinLogger, type CommonConfig, type CookieSecurity, DependsOnMethod, type Depicter, Documentation, DocumentationError, EndpointsFactory, EventStreamFactory, type FlatObject, type HeaderSecurity, type IOSchema, type InputSecurity, InputValidationError, Integration, type LoggerOverrides, type Method, Middleware, MissingPeerError, type OAuth2Security, type OpenIdSecurity, OutputValidationError, type Producer, ResultHandler, type Routing, RoutingError, ServeStatic, type ServerConfig, type TagOverrides, arrayEndpointsFactory, arrayResultHandler, attachRouting, createConfig, createServer, defaultEndpointsFactory, defaultResultHandler, ensureHttpError, ez, getMessageFromError, testEndpoint, testMiddleware };