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