express-zod-api 19.1.2 → 19.2.0
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 +20 -0
- package/README.md +8 -2
- package/dist/index.cjs +7 -7
- package/dist/index.d.cts +86 -69
- package/dist/index.d.ts +86 -69
- package/dist/index.js +6 -6
- package/package.json +12 -10
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,26 @@
|
|
|
2
2
|
|
|
3
3
|
## Version 19
|
|
4
4
|
|
|
5
|
+
### v19.2.0
|
|
6
|
+
|
|
7
|
+
- Feat: `.child()` method for the built-in logger:
|
|
8
|
+
- You can assign request ID to the log entries without additional libraries now:
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
import { randomUUID } from "node:crypto";
|
|
12
|
+
import { BuiltinLogger, createConfig } from "express-zod-api";
|
|
13
|
+
|
|
14
|
+
declare module "express-zod-api" {
|
|
15
|
+
interface LoggerOverrides extends BuiltinLogger {}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const config = createConfig({
|
|
19
|
+
logger: { level: "debug", color: true },
|
|
20
|
+
childLoggerProvider: ({ parent }) =>
|
|
21
|
+
parent.child({ requestId: randomUUID() }),
|
|
22
|
+
});
|
|
23
|
+
```
|
|
24
|
+
|
|
5
25
|
### v19.1.2
|
|
6
26
|
|
|
7
27
|
- Fixed a bug on logger instance recognition failure:
|
package/README.md
CHANGED
|
@@ -568,15 +568,21 @@ declare module "express-zod-api" {
|
|
|
568
568
|
In case you need a dedicated logger for each request (for example, equipped with a request ID), you can specify the
|
|
569
569
|
`childLoggerProvider` option in your configuration. The function accepts the initially defined logger and the request,
|
|
570
570
|
it can also be asynchronous. The child logger returned by that function will replace the `logger` in all handlers.
|
|
571
|
+
You can use the `.child()` method of the built-in logger or [install a custom logger](#customizing-logger) instead.
|
|
571
572
|
|
|
572
573
|
```typescript
|
|
573
574
|
import { createConfig } from "express-zod-api";
|
|
574
575
|
import { randomUUID } from "node:crypto";
|
|
575
576
|
|
|
577
|
+
// This enables the .child() method on the built-in logger:
|
|
578
|
+
declare module "express-zod-api" {
|
|
579
|
+
interface LoggerOverrides extends BuiltinLogger {}
|
|
580
|
+
}
|
|
581
|
+
|
|
576
582
|
const config = createConfig({
|
|
577
|
-
|
|
583
|
+
logger: { level: "debug", color: true },
|
|
578
584
|
childLoggerProvider: ({ parent, request }) =>
|
|
579
|
-
parent.child({ requestId: randomUUID() }),
|
|
585
|
+
parent.child({ requestId: randomUUID() }),
|
|
580
586
|
});
|
|
581
587
|
```
|
|
582
588
|
|
package/dist/index.cjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
"use strict";var Ao=Object.create;var
|
|
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},Tt={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(),Rt=e=>e.startsWith("x-"),Mo=e=>(0,
|
|
1
|
+
"use strict";var Ao=Object.create;var Ve=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)Ve(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&&Ve(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?Ve(r,"default",{value:e,enumerable:!0}):r,e)),zo=e=>er(Ve({},"__esModule",{value:!0}),e);var ii={};Eo(ii,{AbstractEndpoint:()=>se,BuiltinLogger:()=>ae,DependsOnMethod:()=>Se,Documentation:()=>mt,DocumentationError:()=>P,EndpointsFactory:()=>Te,InputValidationError:()=>H,Integration:()=>xt,MissingPeerError:()=>re,OutputValidationError:()=>G,RoutingError:()=>ee,ServeStatic:()=>Oe,arrayEndpointsFactory:()=>Or,arrayResultHandler:()=>st,attachRouting:()=>kr,createConfig:()=>ar,createLogger:()=>Cr,createMiddleware:()=>nt,createResultHandler:()=>it,createServer:()=>Hr,defaultEndpointsFactory:()=>Rr,defaultResultHandler:()=>be,ez:()=>Ro,getExamples:()=>F,getMessageFromError:()=>U,getStatusCodeFromError:()=>Le,testEndpoint:()=>ao});module.exports=zo(ii);var sr=require("ramda"),De=require("zod");var tr=require("http-errors"),rr=require("crypto"),fe=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},Tt={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(),Rt=e=>e.startsWith("x-"),Mo=e=>(0,fe.pickBy)((0,fe.flip)(Rt),e),nr=(e,t={})=>{let r=St(e);return r==="options"?{}:(t[r]||Tt[r]||No).filter(o=>o==="files"?Zo(e):!0).map(o=>o==="headers"?Mo(e[o]):e[o]).reduce((o,i)=>({...o,...i}),{})},ye=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,Le=e=>(0,tr.isHttpError)(e)?e.statusCode:e instanceof H?400:500,Ot=({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},oe=(e,t,r)=>e.length&&t.length?(0,
|
|
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,It=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),wt=e=>e.and.reduce((t,r)=>({or:oe(t.or,ie(r)?r.or:[r],It)}),{or:[]}),ge=(e,t)=>he(e)?ie(t)?ge(wt(e),t):It([e,t]):ie(e)?he(t)?ge(t,e):ie(t)?{or:oe(e.or,t.or,It)}: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,Et.default)(!We(x),new V(`Using transformations on the top level of endpoint ${u} schema is not allowed.`));this.#t={positive:Object.freeze(Pt(s.getPositiveResponse(o),{mimeTypes:[N.json],statusCodes:[ye.positive]})),negative:Object.freeze(Pt(s.getNegativeResponse(),{mimeTypes:[N.json],statusCodes:[ye.negative]}))};for(let[u,x]of Object.entries(this.#t))(0,Et.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=St(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 zt=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);Ot({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);Ot({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:zt.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:zt.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"),j=require("ansis"),st={debug:10,info:20,warn:30,error:40},Cr=e=>K(e)&&Object.keys(st).some(t=>t in e),at=({level:e,color:t=new j.Ansis().isSupported(),depth:r=2})=>{let o={debug:j.blue,info:j.green,warn:(0,j.hex)("#FFA500"),error:j.red},i=e==="debug",s=e==="silent"?100:st[e],a=(p,d,c)=>{if(st[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),st)};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 pt=R(require("express"),1),Lr=R(require("http"),1),jr=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`
|
|
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,fe.xprod)(e,t).map(r):e.concat(t),je=e=>"coerce"in e._def&&typeof e._def.coerce=="boolean"?e._def.coerce:!1,At=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(At).join(""),Ge=e=>(0,rr.createHash)("sha1").update(JSON.stringify(e),"utf8").digest("hex"),_e=(e,t)=>{try{return typeof e.parse(t)}catch{return}},K=e=>typeof e=="object"&&e!==null;var Ye=require("ramda"),g=Symbol.for("express-zod-api"),Qe=e=>{let t=e.describe(e.description);return t._def[g]=(0,Ye.clone)(t._def[g])||{examples:[]},t},ir=(e,t)=>{if(!(g in e._def))return t;let r=Qe(t);return r._def[g].examples=oe(r._def[g].examples,e._def[g].examples,([o,i])=>typeof o=="object"&&typeof i=="object"?(0,Ye.mergeDeepRight)({...o},{...i}):i),r};var vo=function(e){let t=Qe(this);return t._def[g].examples.push(e),t},Lo=function(e){let t=Qe(this);return t._def[g].defaultLabel=e,t},jo=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 jo.bind(this)}}}),Object.defineProperty(De.z.ZodDefault.prototype,"label",{get(){return Lo.bind(this)}}));function ar(e){return e}var Et=R(require("assert/strict"),1),rt=require("zod");var pr=require("zod"),ge={positive:200,negative:400},Pt=(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 ke=require("zod"),_=Symbol("File"),dr=ke.z.custom(e=>Buffer.isBuffer(e),{message:"Expected Buffer"}),Do={buffer:()=>dr.brand(_),string:()=>ke.z.string().brand(_),binary:()=>dr.or(ke.z.string()).brand(_),base64:()=>ke.z.string().base64().brand(_)};function Je(e){return Do[e||"string"]()}var ne=Symbol("Raw"),lr=(e={})=>cr.z.object({raw:Je("buffer")}).extend(e).brand(ne);var mr=require("zod"),He=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(He);var Ct=(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:Ct,ZodDiscriminatedUnion:Ct,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)},We=(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=>We(a,{condition:t,rules:r,maxDepth:i,depth:o+1})}):!1},Xe=e=>We(e,{maxDepth:3,rules:{ZodUnion:Ct,ZodIntersection:gr},condition:t=>t instanceof yr.z.ZodEffects&&t._def.effect.type!=="refinement"}),hr=e=>We(e,{condition:t=>t._def[g]?.brand===He}),xr=e=>We(e,{condition:t=>t._def[g]?.brand===ne,maxDepth:3});var et=({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,xe=e=>K(e)&&"and"in e,It=e=>({and:(0,br.chain)(t=>xe(t)?t.and:[t],e)}),tt=(e,t)=>xe(e)?{and:e.and.map(r=>ie(r)?{or:r.or.map(t)}:t(r))}:ie(e)?{or:e.or.map(r=>xe(r)?{and:r.and.map(t)}:t(r))}:t(e),wt=e=>e.and.reduce((t,r)=>({or:oe(t.or,ie(r)?r.or:[r],It)}),{or:[]}),he=(e,t)=>xe(e)?ie(t)?he(wt(e),t):It([e,t]):ie(e)?xe(t)?he(t,e):ie(t)?{or:oe(e.or,t.or,It)}:he(e,{and:[t]}):xe(t)||ie(t)?he(t,e):{and:[e,t]};var se=class{},ot=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:c=[],tags:l=[],description:m,shortDescription:y}){super(),this.#a=i,this.#p=s,this.#n=c,this.#l=a,this.#o=Object.freeze(t),this.#d=Object.freeze(p),this.#c=Object.freeze(l),this.#e={long:m,short:y},this.#r={input:r,output:o};for(let[u,x]of Object.entries(this.#r))(0,Et.default)(!Xe(x),new V(`Using transformations on the top level of endpoint ${u} schema is not allowed.`));this.#t={positive:Object.freeze(Pt(s.getPositiveResponse(o),{mimeTypes:[N.json],statusCodes:[ge.positive]})),negative:Object.freeze(Pt(s.getNegativeResponse(),{mimeTypes:[N.json],statusCodes:[ge.negative]}))};for(let[u,x]of Object.entries(this.#t))(0,Et.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?he(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 rt.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 c;try{c=await p.input.parseAsync(r)}catch(l){throw l instanceof rt.z.ZodError?new H(l):l}if(Object.assign(a,await p.middleware({input:c,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 rt.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(c){et({logger:i,response:o,error:new te(ye(c).message,t)})}}async execute({request:t,response:r,logger:o,config:i,siblingMethods:s=[]}){let a=St(t),p={},c=null,l=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}c=await this.#u(await this.#y({input:m,logger:o,options:p}))}catch(y){l=ye(y)}await this.#g({input:m,output:c,request:t,response:r,error:l,logger:o,options:p})}};var zt=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),nt=e=>((0,Sr.default)(!Xe(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 it=e=>e,be=it({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(ge.positive).json({status:"success",data:r});return}let a=Le(e);Ot({logger:s,statusCode:a,request:o,error:e,input:t}),i.status(a).json({status:"error",error:{message:U(e)}})}}),st=it({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=Le(r);Ot({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(ge.positive).json(t.items):e.status(500).send("Property 'items' is missing in the endpoint output")}});var Te=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:zt.z.object({}),middleware:async({request:a,response:p})=>new Promise((c,l)=>{t(a,p,y=>{if(y&&y instanceof Error)return l(o(y));c(i(a,p))})})};return e.#e(this.middlewares.concat(s),this.resultHandler)}addOptions(t){return e.#e(this.middlewares.concat(nt({input:zt.z.object({}),middleware:t})),this.resultHandler)}build({input:t,handler:r,output:o,description:i,shortDescription:s,operationId:a,...p}){let{middlewares:c,resultHandler:l}=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 ot({handler:r,middlewares:c,outputSchema:o,resultHandler:l,scopes:u,tags:x,methods:m,getOperationId:y,description:i,shortDescription:s,inputSchema:Tr(c,t)})}},Rr=new Te(be),Or=new Te(st);var j=require("ansis"),Pr=require("util");var at={debug:10,info:20,warn:30,error:40},Ar=e=>K(e)&&Object.keys(at).some(t=>t in e);var ae=class e{constructor(t){this.config=t}styles={debug:j.blue,info:j.green,warn:(0,j.hex)("#FFA500"),error:j.red};prettyPrint(t){return(0,Pr.inspect)(t,{colors:this.config.color,depth:this.config.depth,breakLength:this.config.level==="debug"?80:1/0,compact:this.config.level==="debug"?3:!0})}print(t,r,o){if(this.config.level==="silent"||at[t]<at[this.config.level])return;let{requestId:i,...s}=this.config.ctx||{},a=[new Date().toISOString()];i&&a.push(this.config.color?(0,j.cyanBright)(i):i),a.push(this.config.color?`${this.styles[t](t)}:`:`${t}:`,r),o!==void 0&&a.push(this.prettyPrint(o)),Object.keys(s).length>0&&a.push(this.prettyPrint(s)),console.log(a.join(" "))}debug(t,r){this.print("debug",t,r)}info(t,r){this.print("info",t,r)}warn(t,r){this.print("warn",t,r)}error(t,r){this.print("error",t,r)}child(t){return new e({...this.config,ctx:t})}},Cr=e=>new ae(e);var Re=require("ramda"),Se=class{pairs;firstEndpoint;siblingMethods;constructor(t){this.pairs=Object.freeze((0,Re.toPairs)(t).filter(r=>r!==void 0&&r[1]!==void 0)),this.firstEndpoint=(0,Re.head)(this.pairs)?.[1],this.siblingMethods=Object.freeze((0,Re.tail)(this.pairs).map(([r])=>r))}};var Ir=R(require("express"),1),Oe=class{params;constructor(...t){this.params=t}apply(t,r){return r(t,Ir.default.static(...this.params))}};var pt=R(require("express"),1),Lr=R(require("http"),1),jr=R(require("https"),1);var pe=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 pe(t,r)}catch{}throw new re(e.map(({moduleName:t})=>t))};var Zt=R(require("assert/strict"),1);var de=({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 c=`${o||""}${a?`/${a}`:""}`;if(p instanceof se){let l=p.getMethods().slice();i&&l.push("options");for(let m of l)t(p,c,m)}else if(p instanceof Oe)r&&p.apply(c,r);else if(p instanceof Se){for(let[l,m]of p.pairs)(0,Zt.default)(m.getMethods().includes(l),new ee(`Endpoint assigned to ${l} method of ${c} must support ${l} method.`)),t(m,c,l);i&&p.firstEndpoint&&t(p.firstEndpoint,c,"options",p.siblingMethods)}else de({onEndpoint:t,onStatic:r,hasCors:i,routing:p,parentPath:c})}};var Nt=({app:e,rootLogger:t,config:r,routing:o,parsers:i})=>de({routing:o,hasCors:!!r.cors,onEndpoint:(s,a,p,c)=>{e[p](a,...i?.[s.getRequestType()]||[],async(l,m)=>s.execute({request:l,response:m,logger:m.locals[g]?.logger||t,config:r,siblingMethods:c}))},onStatic:(s,a)=>{e.use(s,a)}});var Ue=R(require("http-errors"),1);var Er=({errorHandler:e,rootLogger:t})=>async(r,o,i,s)=>{if(!r)return s();e.handler({error:(0,Ue.isHttpError)(r)?r:(0,Ue.default)(400,ye(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,Ue.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){et({response:o,logger:s,error:new te(ye(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 pe("express-fileupload"),{limitError:o,beforeUpload:i,...s}={...typeof t.server.upload=="object"&&t.server.upload},a=[];return a.push(async(p,c,l)=>{let m=c.locals[g]?.logger||e;try{await i?.({request:p,logger:m})}catch(y){return l(y)}r({debug:!0,...s,abortOnLimit:!1,parseNested:!0,logger:Uo(m)})(p,c,l)}),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
|
|
@@ -16,9 +16,9 @@ Original error: ${e.originalError.message}.`:""))};var br=require("ramda");var i
|
|
|
16
16
|
${o}888${t}
|
|
17
17
|
${r}
|
|
18
18
|
`.split(`
|
|
19
|
-
`).map((
|
|
20
|
-
`)};var Dr=e=>{e.startupLogo!==!1&&console.log(vr());let t=e.errorHandler||xe,r=Cr(e.logger)?e.logger:at(e.logger);r.debug("Running","v19.1.2 (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}=Dr(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}=Dr(e),a=(0,pt.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||pt.default.json()],raw:[e.server.rawParser||pt.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(jr.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 dt=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(dt)).brand(Ue);var Fr=require("zod");var Fe=Symbol("DateOut"),Kr=()=>Fr.z.date().refine(dt).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=ct(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=ct(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:ct(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:ct(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},ct=({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&&Rt(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:jt,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},jt=(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} ${At(i)} response ${c?m:""}`.trim()})=>{let x=Xr(de(r,{rules:{...y,...vt},onEach:Lt,onMissing:jt,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))},lt=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?lt(wt(e)):lt({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:jt,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}),Dt=e=>e.length<=Br?e:e.slice(0,Br-1)+"\u2026";var mt=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?Dt(C):d&&b?Dt(b):void 0,$=u.getTags(),W=r.inputSources?.[T]||Tt[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 bt=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=lt(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:bt,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 D=R(require("typescript"),1),Pe=require("ramda"),n=D.default.factory,Q=[n.createModifier(D.default.SyntaxKind.ExportKeyword)],Mn=[n.createModifier(D.default.SyntaxKind.AsyncKeyword)],vn=[n.createModifier(D.default.SyntaxKind.PublicKeyword),n.createModifier(D.default.SyntaxKind.ReadonlyKeyword)],po=[n.createModifier(D.default.SyntaxKind.ProtectedKeyword),n.createModifier(D.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"]),ut=(e,t,r)=>n.createParameterDeclaration(r,void 0,e,void 0,t,void 0),ft=(e,t)=>(0,Pe.chain)(([r,o])=>[ut(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)],D.default.NodeFlags.Const),qt=(e,t)=>n.createTypeAliasDeclaration(Q,e,void 0,n.createUnionTypeNode(t.map(r=>n.createLiteralTypeNode(n.createStringLiteral(r))))),yt=(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(D.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=>ut(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,ft({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),ht=require("zod");var q=R(require("typescript"),1),{factory:gt}=q.default,Gt=(e,t)=>{q.default.addSyntheticLeadingComment(e,q.default.SyntaxKind.MultiLineCommentTrivia,`* ${t} `,!0)},Ie=(e,t,r)=>{let o=gt.createTypeAliasDeclaration(void 0,gt.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)?gt.createIdentifier(e):gt.createStringLiteral(e);var{factory:f}=h.default,jn={[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},Dn=({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 ht.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=>jn?.[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 ht.z.ZodString?r:t instanceof ht.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:Dn,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 xt=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(yt(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=yt(this.ids.providerType,n.createFunctionTypeNode(ho({M:this.ids.methodType,P:this.ids.pathType}),ft({method:n.createTypeReferenceNode("M"),path:n.createTypeReferenceNode("P"),params:n.createIndexedAccessTypeNode(n.createTypeReferenceNode(this.ids.inputInterface),Kt)}),fo(this.ids.responseInterface,Kt))),x=yt(this.ids.implementationType,n.createFunctionTypeNode(void 0,ft({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([ut(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,bt]=["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,bt]),!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(`
|
|
19
|
+
`).map((c,l)=>a[l]?a[l](c):c).join(`
|
|
20
|
+
`)};var Dr=e=>{e.startupLogo!==!1&&console.log(vr());let t=e.errorHandler||be,r=Ar(e.logger)?e.logger:new ae(e.logger);r.debug("Running","v19.2.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}=Dr(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}=Dr(e),a=(0,pt.default)().disable("x-powered-by").use(s);if(e.server.compression){let m=await pe("compression");a.use(m(typeof e.server.compression=="object"?e.server.compression:void 0))}let p={json:[e.server.jsonParser||pt.default.json()],raw:[e.server.rawParser||pt.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 c=(m,y)=>m.listen(y,()=>{r.info("Listening",y)}),l={httpServer:c(Lr.default.createServer(a),e.server.listen),httpsServer:e.https?c(jr.default.createServer(e.https.options,a),e.https.listen):void 0};return{app:a,...l,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"),d=require("ramda"),S=require("zod");var Ae=require("zod");var dt=e=>!isNaN(e.getTime());var Fe=Symbol("DateIn"),Ur=()=>Ae.z.union([Ae.z.string().date(),Ae.z.string().datetime(),Ae.z.string().datetime({local:!0})]).transform(t=>new Date(t)).pipe(Ae.z.date().refine(dt)).brand(Fe);var Fr=require("zod");var Ke=Symbol("DateOut"),Kr=()=>Fr.z.date().refine(dt).transform(e=>e.toISOString()).brand(Ke);var ce=(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:l=>ce(l,{ctx:i,onEach:t,rules:r,onMissing:o})}):o(e,i),c=t&&t(e,{prev:p,...i});return c?{...p,...c}: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,d.mergeDeepWith)((i,s)=>Array.isArray(i)&&Array.isArray(s)?(0,d.concat)(i,s):i===s?s:B.default.fail("Can not flatten properties"),t.properties||{},r.properties||{})),(t.required||r.required)&&(o.required=(0,d.union)(t.required||[],r.required||[])),(t.examples||r.examples)&&(o.examples=oe(t.examples||[],r.examples||[],([i,s])=>(0,d.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,d.toLower)((0,d.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&&je(p)?p instanceof S.z.ZodOptional:p.isOptional(),s=o.filter(p=>!i(e.shape[p])),a={type:"object"};return o.length&&(a.properties=ct(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=ct(S.z.object((0,d.fromPairs)((0,d.xprod)(o,[t]))),r),i.required=o),i}if(e instanceof S.z.ZodLiteral)return{type:"object",properties:ct(S.z.object({[e.value]:t}),r),required:[e.value]};if(e instanceof S.z.ZodUnion&&cn(e.options)){let o=(0,d.map)(s=>`${s.value}`,e.options),i=(0,d.fromPairs)((0,d.xprod)(o,[t]));return{type:"object",properties:ct(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:c,isEmoji:l,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:c,emoji:l};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"),c=t===null?e?Number.MAX_SAFE_INTEGER:Number.MAX_VALUE:t,l=p?p.inclusive:!0,m={type:e?"integer":"number",format:e?"int64":"double"};return a?m.minimum=s:m.exclusiveMinimum=s,l?m.maximum=c:m.exclusiveMaximum=c,m},ct=({shape:e},t)=>(0,d.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=_e(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,d.fromPairs)((0,d.zip)((0,d.range)(1,e.length+1).map(t=>`example${t}`),(0,d.map)((0,d.objOf)("value"),e))):void 0,Jr=(e,t,r=[])=>(0,d.pipe)(F,(0,d.map)((0,d.when)((0,d.both)(K,(0,d.complement)(Array.isArray)),(0,d.omit)(r))),Qr)({schema:e,variant:t?"parsed":"original",validate:!0}),Rn=(e,t)=>(0,d.pipe)(F,(0,d.filter)((0,d.has)(t)),(0,d.pluck)(t),Qr)({schema:e,variant:"original",validate:!0}),Pe=(e,t)=>e instanceof S.z.ZodObject?e:e instanceof S.z.ZodBranded?Pe(e.unwrap(),t):e instanceof S.z.ZodUnion||e instanceof S.z.ZodDiscriminatedUnion?e.options.map(r=>Pe(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),Pe(e._def.schema,t)):Pe(e._def.left,t).merge(Pe(e._def.right,t)),Wr=({path:e,method:t,schema:r,inputSources:o,serializer:i,getRef:s,makeRef:a,composition:p,brandHandling:c,description:l=`${t.toUpperCase()} ${e} Parameter`})=>{let{shape:m}=Pe(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&&Rt(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:Ee})=>{let $=ce(m[b],{rules:{...c,...vt},onEach:Lt,onMissing:jt,ctx:{isResponse:!1,serializer:i,getRef:s,makeRef:a,path:e,method:t}}),W=p==="components"?a(M(l,b),$):$;return{name:b,in:Ee,required:!m[b].isOptional(),description:$.description||l,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,[He]:Vo,[Ke]:sn,[Fe]: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&&je(e),p=!i&&s&&!a&&e.isNullable(),c=i?[]:F({schema:e,variant:t?"parsed":"original",validate:!0}),l={};return o&&(l.description=o),p&&(l.type=Yr(r)),c.length&&(l.examples=c.slice()),l},jt=(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,d.omit)(t,r.properties)),r.examples&&(r.examples=r.examples.map(o=>(0,d.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,d.omit)(["examples"],e),eo=({method:e,path:t,schema:r,mimeTypes:o,variant:i,serializer:s,getRef:a,makeRef:p,composition:c,hasMultipleStatusCodes:l,statusCode:m,brandHandling:y,description:u=`${e.toUpperCase()} ${t} ${At(i)} response ${l?m:""}`.trim()})=>{let x=Xr(ce(r,{rules:{...y,...vt},onEach:Lt,onMissing:jt,ctx:{isResponse:!0,serializer:s,getRef:a,makeRef:p,path:t,method:e}})),z={schema:c==="components"?p(M(u),x):x,examples:Jr(r,!0)};return{description:u,content:(0,d.fromPairs)((0,d.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,d.map)(t=>({...t,scopes:t.scopes||{}}),(0,d.reject)(d.isNil,e))}),to=(e,t)=>{let r={basic:On,bearer:An,input:Pn,header:Cn,cookie:In,openid:wn,oauth2:En};return tt(e,o=>r[o.type](o,t))},lt=e=>"or"in e?e.or.map(t=>"and"in t?(0,d.mergeAll)((0,d.map)(({name:r,scopes:o})=>(0,d.objOf)(r,o),t.and)):{[t.name]:t.scopes}):"and"in e?lt(wt(e)):lt({or:[e]}),ro=({method:e,path:t,schema:r,mimeTypes:o,serializer:i,getRef:s,makeRef:a,composition:p,brandHandling:c,paramNames:l,description:m=`${e.toUpperCase()} ${t} Request body`})=>{let y=Xr(Mt(ce(r,{rules:{...c,...vt},onEach:Lt,onMissing:jt,ctx:{isResponse:!1,serializer:i,getRef:s,makeRef:a,path:t,method:e}}),l)),u={schema:p==="components"?a(M(m),y):y,examples:Jr(r,!1,l)};return{description:m,content:(0,d.fromPairs)((0,d.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}),Dt=e=>e.length<=Br?e:e.slice(0,Br-1)+"\u2026";var mt=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:c=!0,composition:l="inline",serializer:m=Ge}){super(),this.addInfo({title:o,version:i});for(let u of typeof s=="string"?[s]:s)this.addServer({url:u});de({routing:t,onEndpoint:(u,x,z)=>{let T=z,L={path:x,method:T,endpoint:u,composition:l,serializer:m,brandHandling:p,getRef:this.getRef.bind(this),makeRef:this.makeRef.bind(this)},[C,b]=["short","long"].map(u.getDescription.bind(u)),Ee=C?Dt(C):c&&b?Dt(b):void 0,$=u.getTags(),W=r.inputSources?.[T]||Tt[T],me=this.ensureUniqOperationId(x,T,u.getOperationId(T)),ze=Wr({...L,inputSources:W,schema:u.getSchema("input"),description:a?.requestParameter?.call(null,{method:T,path:x,operationId:me})}),qe={};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)qe[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:me,statusCode:I})})}let bt=W.includes("body")?ro({...L,paramNames:(0,so.pluck)("name",ze),schema:u.getSchema("input"),mimeTypes:u.getMimeTypes("input"),description:a?.requestBody?.call(null,{method:T,path:x,operationId:me})}):void 0,$e=lt(tt(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:me,summary:Ee,description:b,tags:$.length>0?$:void 0,parameters:ze.length>0?ze:void 0,requestBody:bt,security:$e.length>0?$e:void 0,responses:qe}})}}),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}),c=Zn({fnMethod:a,responseProps:r}),l=Nn({fnMethod:a,loggerProps:i}),m={cors:!1,logger:l,...o};return await e.execute({request:p,response:c,config:m,logger:l}),{requestMock:p,responseMock:c,loggerMock:l}};var E=R(require("typescript"),1);var D=R(require("typescript"),1),Ce=require("ramda"),n=D.default.factory,Q=[n.createModifier(D.default.SyntaxKind.ExportKeyword)],Mn=[n.createModifier(D.default.SyntaxKind.AsyncKeyword)],vn=[n.createModifier(D.default.SyntaxKind.PublicKeyword),n.createModifier(D.default.SyntaxKind.ReadonlyKeyword)],po=[n.createModifier(D.default.SyntaxKind.ProtectedKeyword),n.createModifier(D.default.SyntaxKind.ReadonlyKeyword)],Ht=n.createTemplateHead(""),Ie=n.createTemplateTail(""),Ut=n.createTemplateMiddle(" "),Ft=e=>n.createTemplateLiteralType(Ht,e.map((t,r)=>n.createTemplateLiteralTypeSpan(n.createTypeReferenceNode(t),r===e.length-1?Ie:Ut))),Kt=Ft(["M","P"]),ut=(e,t,r)=>n.createParameterDeclaration(r,void 0,e,void 0,t,void 0),ft=(e,t)=>(0,Ce.chain)(([r,o])=>[ut(n.createIdentifier(r),o,t)],(0,Ce.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)],D.default.NodeFlags.Const),qt=(e,t)=>n.createTypeAliasDeclaration(Q,e,void 0,n.createUnionTypeNode(t.map(r=>n.createLiteralTypeNode(n.createStringLiteral(r))))),yt=(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(D.default.SyntaxKind.AnyKeyword)]),go=(e,t,r)=>n.createInterfaceDeclaration(Q,e,void 0,t,r),ho=e=>(0,Ce.chain)(([t,r])=>[n.createTypeParameterDeclaration([],t,n.createTypeReferenceNode(r))],(0,Ce.toPairs)(e)),$t=(e,t,r)=>n.createArrowFunction(r?Mn:void 0,void 0,e.map(o=>ut(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,ft({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),ht=require("zod");var q=R(require("typescript"),1),{factory:gt}=q.default,Gt=(e,t)=>{q.default.addSyntheticLeadingComment(e,q.default.SyntaxKind.MultiLineCommentTrivia,`* ${t} `,!0)},we=(e,t,r)=>{let o=gt.createTypeAliasDeclaration(void 0,gt.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)?gt.createIdentifier(e):gt.createStringLiteral(e);var{factory:f}=h.default,jn={[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},Dn=({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&&je(a)?a instanceof ht.z.ZodOptional:a.isOptional(),c=f.createPropertySignature(void 0,To(s),p&&o?f.createToken(h.default.SyntaxKind.QuestionToken):void 0,r(a));return a.description&&Gt(c,a.description),c});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=>jn?.[e.kind],Kn=(e,{next:t,isResponse:r})=>{let o=t(e.innerType()),i=e._def.effect;if(r&&i.type==="transform"){let s=_e(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),le=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 ht.z.ZodString?r:t instanceof ht.z.ZodUnion?i:o},oi=(e,{next:t})=>t(e.unwrap().shape.raw),ni={ZodString:le(h.default.SyntaxKind.StringKeyword),ZodNumber:le(h.default.SyntaxKind.NumberKeyword),ZodBigInt:le(h.default.SyntaxKind.BigIntKeyword),ZodBoolean:le(h.default.SyntaxKind.BooleanKeyword),ZodAny:le(h.default.SyntaxKind.AnyKeyword),[Fe]:le(h.default.SyntaxKind.StringKeyword),[Ke]:le(h.default.SyntaxKind.StringKeyword),ZodNull:ei,ZodArray:Hn,ZodTuple:Vn,ZodRecord:Gn,ZodObject:kn,ZodLiteral:Dn,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},Be=(e,{brandHandling:t,ctx:r})=>ce(e,{rules:{...t,...ni},onMissing:()=>f.createKeywordTypeNode(h.default.SyntaxKind.AnyKeyword),ctx:r});var xt=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,we(r,t)),this.getAlias(t)}constructor({routing:t,brandHandling:r,variant:o="client",serializer:i=Ge,splitResponse:s=!1,optionalPropStyle:a={withQuestionMark:!0,withUndefined:!0}}){de({routing:t,onEndpoint:(O,A,I)=>{let ue={serializer:i,getAlias:this.getAlias.bind(this),makeAlias:this.makeAlias.bind(this),optionalPropStyle:a},Ne=M(I,A,"input"),Me=Be(O.getSchema("input"),{brandHandling:r,ctx:{...ue,isResponse:!1}}),Z=s?M(I,A,"positive.response"):void 0,Yt=O.getSchema("positive"),Qt=s?Be(Yt,{brandHandling:r,ctx:{...ue,isResponse:!0}}):void 0,ve=s?M(I,A,"negative.response"):void 0,Jt=O.getSchema("negative"),Wt=s?Be(Jt,{brandHandling:r,ctx:{...ue,isResponse:!0}}):void 0,Xt=M(I,A,"response"),Oo=Z&&ve?n.createUnionTypeNode([n.createTypeReferenceNode(Z),n.createTypeReferenceNode(ve)]):Be(Yt.or(Jt),{brandHandling:r,ctx:{...ue,isResponse:!0}});this.program.push(we(Me,Ne)),Qt&&Z&&this.program.push(we(Qt,Z)),Wt&&ve&&this.program.push(we(Wt,ve)),this.program.push(we(Oo,Xt)),I!=="options"&&(this.paths.push(A),this.registry.set({method:I,path:A},{input:Ne,positive:Z,negative:ve,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(yt(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 c=[],l=[];for(let[{method:O,path:A},{isJson:I,tags:ue,...Ne}]of this.registry){let Me=xo(O,A);for(let Z of this.interfaces)Z.kind in Ne&&Z.props.push(lo(Me,Ne[Z.kind]));o!=="types"&&(I&&c.push(n.createPropertyAssignment(Me,n.createTrue())),l.push(n.createPropertyAssignment(Me,n.createArrayLiteralExpression(ue.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(c))),y=n.createVariableStatement(Q,J(this.ids.endpointTagsConst,n.createObjectLiteralExpression(l))),u=yt(this.ids.providerType,n.createFunctionTypeNode(ho({M:this.ids.methodType,P:this.ids.pathType}),ft({method:n.createTypeReferenceNode("M"),path:n.createTypeReferenceNode("P"),params:n.createIndexedAccessTypeNode(n.createTypeReferenceNode(this.ids.inputInterface),Kt)}),fo(this.ids.responseInterface,Kt))),x=yt(this.ids.implementationType,n.createFunctionTypeNode(void 0,ft({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,Ie)]),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([ut(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)),Ee=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,Ie)]),n.createObjectLiteralExpression([b,Ee,$])])))),me=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])))),ze=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]),Ie)])))),[qe,bt]=["json","text"].map(O=>n.createReturnStatement(n.createCallExpression(n.createPropertyAccessExpression(this.ids.responseConst,O),void 0,void 0))),$e=n.createIfStatement(n.createBinaryExpression(n.createTemplateExpression(Ht,[n.createTemplateSpan(this.ids.methodParameter,Ut),n.createTemplateSpan(this.ids.pathParameter,Ie)]),E.default.SyntaxKind.InKeyword,this.ids.jsonEndpointsConst),n.createBlock([qe])),k=n.createVariableStatement(Q,J(this.ids.exampleImplementationConst,$t([this.ids.methodParameter,this.ids.pathParameter,this.ids.paramsArgument],n.createBlock([me,ze,W,$e,bt]),!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
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 pe("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:Je,upload:ur,raw:lr};0&&(module.exports={AbstractEndpoint,BuiltinLogger,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});
|