zenko 0.1.13 → 0.1.14

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/README.md CHANGED
@@ -67,9 +67,12 @@ The config file controls generation for multiple specs and can also configure ty
67
67
 
68
68
  ```json
69
69
  {
70
+ "$schema": "https://raw.githubusercontent.com/RawToast/zenko/refs/heads/master/packages/zenko/zenko-config.schema.json",
70
71
  "types": {
71
72
  "emit": true,
72
- "helpers": "package"
73
+ "helpers": "package",
74
+ "treeShake": true,
75
+ "optionalType": "optional"
73
76
  },
74
77
  "schemas": [
75
78
  {
@@ -84,6 +87,16 @@ The config file controls generation for multiple specs and can also configure ty
84
87
  "types": {
85
88
  "helpers": "inline"
86
89
  }
90
+ },
91
+ {
92
+ "input": "my-custom-api.yaml",
93
+ "output": "my-custom-api.gen.ts",
94
+ "operationIds": ["getUser", "createUser", "updateUser"],
95
+ "types": {
96
+ "helpers": "file",
97
+ "helpersOutput": "./shared/api-helpers.ts",
98
+ "treeShake": false
99
+ }
87
100
  }
88
101
  ]
89
102
  }
@@ -96,6 +109,110 @@ The config file controls generation for multiple specs and can also configure ty
96
109
  - `helpers: "file"` imports from a custom module (`helpersOutput` path)
97
110
  - `emit: false` disables per-operation type aliases entirely
98
111
 
112
+ #### Additional Type Configuration
113
+
114
+ - `treeShake: true` (default) - Only generates types used in operations
115
+ - `treeShake: false` - Generates all types from the schema
116
+ - `optionalType: "optional"` (default) - Fields can be undefined (`z.optional()`)
117
+ - `optionalType: "nullable"` - Fields can be null (`z.nullable()`)
118
+ - `optionalType: "nullish"` - Fields can be undefined or null (`z.nullish()`)
119
+
120
+ #### Selective Operations
121
+
122
+ Generate only specific operations using `operationIds`:
123
+
124
+ ```json
125
+ {
126
+ "$schema": "https://raw.githubusercontent.com/RawToast/zenko/refs/heads/master/packages/zenko/zenko-config.schema.json",
127
+ "schemas": [
128
+ {
129
+ "input": "api.yaml",
130
+ "output": "api.gen.ts",
131
+ "operationIds": ["getUser", "createUser", "updateUser"]
132
+ }
133
+ ]
134
+ }
135
+ ```
136
+
137
+ #### Open Enums
138
+
139
+ By default, enums are "closed" - they only accept the values defined in your OpenAPI spec. Open enums allow unknown string values to pass through, which is useful when APIs may add new enum values without breaking existing clients.
140
+
141
+ Unknown values are transformed to a prefixed string (default: `` `Unknown:${value}` ``), making them easy to identify and handle.
142
+
143
+ **Basic usage:**
144
+
145
+ ```json
146
+ {
147
+ "schemas": [
148
+ {
149
+ "input": "api.yaml",
150
+ "output": "api.gen.ts",
151
+ "openEnums": true
152
+ }
153
+ ]
154
+ }
155
+ ```
156
+
157
+ **Selective enums:**
158
+
159
+ ```json
160
+ {
161
+ "schemas": [
162
+ {
163
+ "input": "api.yaml",
164
+ "output": "api.gen.ts",
165
+ "openEnums": ["Status", "Category"]
166
+ }
167
+ ]
168
+ }
169
+ ```
170
+
171
+ **Custom prefix:**
172
+
173
+ If `"Unknown:"` conflicts with your schema values or you prefer a different convention, use the object form:
174
+
175
+ ```json
176
+ {
177
+ "schemas": [
178
+ {
179
+ "input": "api.yaml",
180
+ "output": "api.gen.ts",
181
+ "openEnums": {
182
+ "open": true,
183
+ "unknownPrefix": "unrecognized_"
184
+ }
185
+ }
186
+ ]
187
+ }
188
+ ```
189
+
190
+ Or combine selective enums with a custom prefix:
191
+
192
+ ```json
193
+ {
194
+ "openEnums": { "open": ["Status"], "unknownPrefix": "x-" }
195
+ }
196
+ ```
197
+
198
+ **Generated output:**
199
+
200
+ ```typescript
201
+ // Closed enum (default)
202
+ export const Category = z.enum(["electronics", "clothing", "books"])
203
+
204
+ // Open enum
205
+ const StatusKnown = ["active", "inactive", "pending"] as const
206
+ export const Status = z
207
+ .enum(StatusKnown)
208
+ .or(z.string().transform((v): `Unknown:${string}` => `Unknown:${v}`))
209
+
210
+ // TypeScript type includes both known and unknown values
211
+ type Status = "active" | "inactive" | "pending" | `Unknown:${string}`
212
+ ```
213
+
214
+ **Note:** When specifying enum names in `openEnums`, use the sanitized TypeScript name (e.g., `"LinksSelf"` not `"Links-Self"`). Schema names with hyphens are converted to camelCase.
215
+
99
216
  ### Programmatic Usage
100
217
 
101
218
  ```typescript
@@ -230,6 +347,9 @@ if (validation.success) {
230
347
 
231
348
  ### Building a Generic Client
232
349
 
350
+ Below is an example of a generic client that can be used to run operations.
351
+ See [examples package](../examples/README.md) for a more complete examples with tests, using undici, fetch, ts-effect.
352
+
233
353
  ```typescript
234
354
  import type { OperationDefinition } from "zenko"
235
355
 
@@ -256,7 +376,7 @@ async function runOperation<
256
376
 
257
377
  ### Dependency Resolution
258
378
 
259
- Zenko automatically resolves schema dependencies using topological sorting, ensuring that referenced types are defined before they're used. This eliminates "used before declaration" errors.
379
+ Zenko automatically resolves schema dependencies using topological sorting, ensuring that referenced types are defined before they're used. This eliminates "used before declaration" errors. Alongside excessive duplicate schema generation, as found in other generators.
260
380
 
261
381
  ### Zod Integration
262
382
 
@@ -0,0 +1,11 @@
1
+ function V(e){let n=new Set,t=new Set,r=[],s=i=>{if(n.has(i)||t.has(i))return;t.add(i);let o=e[i],p=q(o);for(let a of p)e[a]&&s(a);t.delete(i),n.add(i),r.push(i)};for(let i of Object.keys(e))s(i);return r}function q(e){let n=[],t=r=>{if(!(typeof r!="object"||r===null)){if(r.$ref&&typeof r.$ref=="string"){let s=g(r.$ref);n.push(s);return}Array.isArray(r)?r.forEach(t):Object.values(r).forEach(t)}};return t(e),[...new Set(n)]}function g(e){return e.split("/").pop()||"Unknown"}function I(e){if(!e)return!1;let n=e.at(0);return n===void 0||!/[a-zA-Z_$]/.test(n)||!/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(e)?!1:!new Set(["abstract","arguments","await","boolean","break","byte","case","catch","char","class","const","continue","debugger","default","delete","do","double","else","enum","eval","export","extends","false","final","finally","float","for","function","goto","if","implements","import","in","instanceof","int","interface","let","long","native","new","null","package","private","protected","public","return","short","static","super","switch","synchronized","this","throw","throws","transient","true","try","typeof","var","void","volatile","while","with","yield","async"]).has(e)}function l(e){return I(e)?e:`"${e}"`}function O(e){return e.replace(/-([a-zA-Z])/g,(n,t)=>t.toUpperCase()).replace(/-+$/,"")}function b(e){return e.charAt(0).toUpperCase()+e.slice(1)}function F(e){let n={usesHeaderFn:!1,usesOperationDefinition:!1,usesOperationErrors:!1};e.length>0&&(n.usesOperationDefinition=!0);for(let t of e)t.errors&&W(t.errors)&&(n.usesOperationErrors=!0);return e.length>0&&!n.usesOperationErrors&&e.some(r=>!r.errors||!W(r.errors))&&(n.usesOperationErrors=!0),n}function G(e,n,t){let r=[];if(e.usesHeaderFn&&r.push("HeaderFn"),e.usesOperationDefinition&&r.push("OperationDefinition"),e.usesOperationErrors&&r.push("OperationErrors"),r.length===0)return"";let s=n==="package"?'"zenko"':`"${t}"`;return`import type { ${r.join(", ")} } from ${s};`}function W(e){return!!(e&&Object.keys(e).length>0)}var v={"application/json":"unknown","text/csv":"string","text/plain":"string","application/octet-stream":"unknown","application/pdf":"unknown"};function N(e){let n=Object.keys(e);if(n.includes("application/json"))return"application/json";for(let t of n)if(t in v)return t;return n[0]||""}function j(e,n){if(e){if(e.$ref){let t=g(e.$ref),r=n.components?.parameters?.[t];if(!r)return;let{$ref:s,...i}=e;return{...r,...i}}return e}}function J(e,n){let t=new Set,r=new Map;for(let[,o]of Object.entries(n.paths||{}))for(let[,p]of Object.entries(o)){let a=p;a.operationId&&r.set(a.operationId,a)}for(let[,o]of Object.entries(n.webhooks||{}))for(let[,p]of Object.entries(o)){let a=p;a.operationId&&r.set(a.operationId,a)}for(let o of e){let p=r.get(o.operationId);if(!p)continue;let a=p.requestBody?.content?.["application/json"]?.schema;if(a?.$ref){let f=g(a.$ref);t.add(f)}else if(a){let f=q(a);for(let c of f)n.components?.schemas?.[c]&&t.add(c)}let y=p.responses||{};for(let[,f]of Object.entries(y)){let c=f?.content;if(!c)continue;let $=N(c),u=c[$]?.schema;if(u?.$ref){let m=g(u.$ref);t.add(m)}else if(u){let m=q(u);for(let T of m)n.components?.schemas?.[T]&&t.add(T)}}for(let f of o.queryParams){if(f.schema?.$ref){let c=g(f.schema.$ref);t.add(c)}if(f.schema?.items?.$ref){let c=g(f.schema.items.$ref);t.add(c)}}for(let f of o.requestHeaders||[]){if(f.schema?.$ref){let c=g(f.schema.$ref);t.add(c)}if(f.schema?.items?.$ref){let c=g(f.schema.items.$ref);t.add(c)}}let h=p.parameters||[];for(let f of h){let c=j(f,n);if(c?.schema?.$ref){let $=g(c.schema.$ref);t.add($)}if(c?.schema?.items?.$ref){let $=g(c.schema.items.$ref);t.add($)}}}let s=new Set,i=Array.from(t);for(;i.length>0;){let o=i.pop();if(s.has(o))continue;s.add(o);let p=n.components?.schemas?.[o];if(!p)continue;let a=q(p);for(let y of a)n.components?.schemas?.[y]&&!s.has(y)&&(t.add(y),i.push(y))}return t}function xe(e,n){return n===!0?!0:Array.isArray(n)?n.includes(e):!1}function D(e,n){switch(n){case"optional":return`${e}.optional()`;case"nullable":return`${e}.nullable()`;case"nullish":return`${e}.nullish()`}}function z(e,n,t,r,s){if(t.has(e))return"";if(t.add(e),n.enum){let i=n.enum.map(o=>`"${o}"`).join(", ");if(xe(e,r.openEnums)){let o=r.openEnumPrefix;return`const ${e}Known = [${i}] as const;
2
+ export const ${e} = z.enum(${e}Known).or(
3
+ z.string().transform((v): \`${o}\${string}\` => \`${o}\${v}\`)
4
+ );`}return`export const ${e} = z.enum([${i}]);`}if(n.allOf&&Array.isArray(n.allOf)){let i=n.allOf.map(a=>A(a,r,s));if(i.length===0)return`export const ${e} = z.object({});`;if(i.length===1)return`export const ${e} = ${i[0]};`;let o=i[0],p=i.slice(1).map(a=>`.and(${a})`).join("");return`export const ${e} = ${o}${p};`}if(n.type==="object"||n.properties)return`export const ${e} = ${K(n,r,s)};`;if(n.type==="array"){let i=n.items??{type:"unknown"},o=A(i,r,s),p=be(n,`z.array(${o})`,i,r.strictNumeric);return`export const ${e} = ${p};`}return`export const ${e} = ${A(n,r,s)};`}function A(e,n,t){if(e.$ref){let r=g(e.$ref);return t?.get(r)||r}if(e.enum)return`z.enum([${e.enum.map(s=>`"${s}"`).join(", ")}])`;if(e.allOf&&Array.isArray(e.allOf)){let r=e.allOf.map(o=>A(o,n,t));if(r.length===0)return"z.object({})";if(r.length===1)return r[0];let s=r[0],i=r.slice(1).map(o=>`.and(${o})`).join("");return`${s}${i}`}if(e.type==="object"||e.properties||e.allOf||e.oneOf||e.anyOf)return K(e,n,t);switch(e.type){case"string":return Se(e,n);case"boolean":return"z.boolean()";case"array":return`z.array(${A(e.items??{type:"unknown"},n,t)})`;case"null":return"z.null()";case"number":return Y(e,n);case"integer":return Ie(e,n);default:return"z.unknown()"}}function K(e,n,t){let r=[];for(let[s,i]of Object.entries(e.properties||{})){let o=e.required?.includes(s)??!1,p=A(i,n,t),a=D(p,n.optionalType),y=n.optionalType!=="nullable"?we(a,i):a,h=o?p:y;r.push(` ${l(s)}: ${h},`)}return r.length===0?"z.object({})":`z.object({
5
+ ${r.join(`
6
+ `)}
7
+ })`}function Se(e,n){if(e.format==="binary")return'(typeof Blob === "undefined" ? z.unknown() : z.instanceof(Blob))';if(n.strictDates)switch(e.format){case"date-time":return"z.string().datetime()";case"date":return"z.string().date()";case"time":return"z.string().time()";case"duration":return"z.string().duration()"}let t="z.string()";switch(n.strictNumeric&&(typeof e.minLength=="number"&&(t+=`.min(${e.minLength})`),typeof e.maxLength=="number"&&(t+=`.max(${e.maxLength})`),e.pattern&&(t+=`.regex(new RegExp(${JSON.stringify(e.pattern)}))`)),e.format){case"uuid":return`${t}.uuid()`;case"email":return`${t}.email()`;case"uri":case"url":return`${t}.url()`;case"ipv4":return`${t}.ip({ version: "v4" })`;case"ipv6":return`${t}.ip({ version: "v6" })`;default:return t}}function we(e,n){return!n||n.default===void 0?e:`${e}.default(${JSON.stringify(n.default)})`}function Y(e,n){let t="z.number()";return n.strictNumeric&&(t=Re(e,t),typeof e.multipleOf=="number"&&e.multipleOf!==0&&(t+=`.refine((value) => Math.abs(value / ${e.multipleOf} - Math.round(value / ${e.multipleOf})) < Number.EPSILON, { message: "Must be a multiple of ${e.multipleOf}" })`)),t}function Ie(e,n){let t=Y(e,n);return t+=".int()",t}function be(e,n,t,r){return r&&(typeof e.minItems=="number"&&(n+=`.min(${e.minItems})`),typeof e.maxItems=="number"&&(n+=`.max(${e.maxItems})`),e.uniqueItems&&Pe(t)&&(n+='.refine((items) => new Set(items).size === items.length, { message: "Items must be unique" })')),n}function Pe(e){return e?.$ref?!1:new Set(["string","number","integer","boolean"]).has(e?.type)}function Re(e,n){return typeof e.minimum=="number"?e.exclusiveMinimum===!0?n+=`.gt(${e.minimum})`:n+=`.min(${e.minimum})`:typeof e.exclusiveMinimum=="number"&&(n+=`.gt(${e.exclusiveMinimum})`),typeof e.maximum=="number"?e.exclusiveMaximum===!0?n+=`.lt(${e.maximum})`:n+=`.max(${e.maximum})`:typeof e.exclusiveMaximum=="number"&&(n+=`.lt(${e.exclusiveMaximum})`),n}var ke={400:"badRequest",401:"unauthorized",402:"paymentRequired",403:"forbidden",404:"notFound",405:"methodNotAllowed",406:"notAcceptable",407:"proxyAuthenticationRequired",408:"requestTimeout",409:"conflict",410:"gone",411:"lengthRequired",412:"preconditionFailed",413:"payloadTooLarge",414:"uriTooLong",415:"unsupportedMediaType",416:"rangeNotSatisfiable",417:"expectationFailed",418:"imATeapot",421:"misdirectedRequest",422:"unprocessableEntity",423:"locked",424:"failedDependency",425:"tooEarly",426:"upgradeRequired",428:"preconditionRequired",429:"tooManyRequests",431:"requestHeaderFieldsTooLarge",451:"unavailableForLegalReasons",500:"internalServerError",501:"notImplemented",502:"badGateway",503:"serviceUnavailable",504:"gatewayTimeout",505:"httpVersionNotSupported",506:"variantAlsoNegotiates",507:"insufficientStorage",508:"loopDetected",510:"notExtended",511:"networkAuthenticationRequired"};function X(e){if(e==="default")return"defaultError";let n=e.trim(),t=ke[n];if(t)return t;if(/^\d{3}$/.test(n))return`status${n}`;let r=n.toLowerCase().replace(/[^a-z0-9]+/g," ").trim();if(!r)return"unknownError";let s=r.split(/\s+/),[i,...o]=s,p=i+o.map(a=>a.charAt(0).toUpperCase()+a.slice(1)).join("");return p?/^[a-zA-Z_$]/.test(p)?p:`status${p.charAt(0).toUpperCase()}${p.slice(1)}`:"unknownError"}function M(e){if(e==="default")return!0;let n=Number(e);return Number.isInteger(n)?n>=400:!1}function ae(e,n){let t=[];if(e.paths)for(let[r,s]of Object.entries(e.paths))for(let[i,o]of Object.entries(s)){let p=i.toLowerCase();if(!ie(p)||!o.operationId)continue;let a=te(r),y=ne(o,n),{successResponse:h,errors:f}=re(o,o.operationId,n),c=ee(s,o,e),$=oe(c),u=se(c);t.push({operationId:o.operationId,path:r,method:p,pathParams:a,queryParams:u,requestType:y,responseType:h,requestHeaders:$,errors:f})}if(e.webhooks)for(let[r,s]of Object.entries(e.webhooks))for(let[i,o]of Object.entries(s)){let p=i.toLowerCase();if(!ie(p)||!o.operationId)continue;let a=r,y=te(a),h=ne(o,n),{successResponse:f,errors:c}=re(o,o.operationId,n),$=ee(s,o,e),u=oe($),m=se($);t.push({operationId:o.operationId,path:a,method:p,pathParams:y,queryParams:m,requestType:h,responseType:f,requestHeaders:u,errors:c})}return t}function ee(e,n,t){let r=new Map,s=i=>{if(Array.isArray(i))for(let o of i){let p=j(o,t);if(!p)continue;let a=`${p.in}:${p.name}`;r.set(a,p)}};return s(e.parameters),s(n.parameters),Array.from(r.values())}function te(e){let n=[],t=e.match(/{([^}]+)}/g);if(t)for(let r of t){let s=r.slice(1,-1);n.push({name:s,type:"string"})}return n}function ne(e,n){let t=Ae(e);if(!t)return;if(t.$ref){let s=g(t.$ref);return n?.get(s)||s}return`${b(O(e.operationId))}Request`}function Ae(e){let n=e?.requestBody?.content;if(!n||Object.keys(n).length===0)return;let t=["application/json","multipart/form-data","application/x-www-form-urlencoded"];for(let r of t){let s=n[r]?.schema;if(s)return s}}function re(e,n,t){let r=e.responses??{},s=new Map,i=[];for(let[a,y]of Object.entries(r)){let h=y?.content;if(!h||Object.keys(h).length===0){a==="204"||/^3\d\d$/.test(a)?s.set(a,"undefined"):M(a)&&i.push({code:a,schema:"undefined"});continue}let f=N(h),c=h[f]?.schema;if(!c){let $=Ee(f,a);$&&(M(a)?i.push({code:a,schema:$}):/^2\d\d$/.test(a)&&s.set(a,$));continue}if(M(a)){i.push({code:a,schema:c});continue}/^2\d\d$/.test(a)&&s.set(a,c)}let o=qe(s,n,t),p=ze(i,n,t);return{successResponse:o,errors:p}}function qe(e,n,t){if(e.size===0)return;let r=["200","201","204"];for(let i of r){let o=e.get(i);if(o)return typeof o=="string"?o:Z(o,`${b(O(n))}Response`,t)}let[,s]=e.entries().next().value??[];if(s)return typeof s=="string"?s:Z(s,`${b(O(n))}Response`,t)}function ze(e=[],n,t){if(!e.length)return;let r={};for(let{code:s,schema:i}of e){let o=X(s),p=Z(i,`${b(O(n))}${b(o)}`,t);r[o]=p}return r}function Z(e,n,t){if(typeof e=="string")return e;if(e.$ref){let r=g(e.$ref);return t?.get(r)||r}if(e.type==="array"&&e.items?.$ref){let r=g(e.items.$ref);return`z.array(${t?.get(r)||r})`}return e.allOf&&Array.isArray(e.allOf),n}function oe(e){let n=[];for(let t of e??[])t.in==="header"&&n.push({name:t.name,description:t.description,schema:t.schema,required:t.required});return n}function se(e){let n=[];for(let t of e??[])t.in==="query"&&n.push({name:t.name,description:t.description,schema:t.schema,required:t.required});return n}function ie(e){switch(e){case"get":case"put":case"post":case"delete":case"options":case"head":case"patch":case"trace":return!0;default:return!1}}function Ee(e,n){return n==="204"||/^3\d\d$/.test(n)?"undefined":e in v?v[e]:"unknown"}function pe(e,n){let t=new Map,r=new Map;for(let[,s]of Object.entries(n.paths||{}))for(let[,i]of Object.entries(s)){let o=i;o.operationId&&r.set(o.operationId,o)}for(let[,s]of Object.entries(n.webhooks||{}))for(let[,i]of Object.entries(s)){let o=i;o.operationId&&r.set(o.operationId,o)}for(let s of e){let i=r.get(s.operationId);if(!i)continue;let o=i.requestBody;if(o&&o.content){let p=o.content,a=ve(p);if(!a)continue;let y=`${b(O(s.operationId))}Request`;(!a.$ref||a.allOf||a.oneOf||a.anyOf)&&t.set(y,a)}}return t}function ve(e){let n=["application/json","multipart/form-data","application/x-www-form-urlencoded"];for(let t of n){let r=e[t]?.schema;if(r)return r}}function ue(e,n){let t=new Map,r=new Map;for(let[,s]of Object.entries(n.paths||{}))for(let[,i]of Object.entries(s)){let o=i;o.operationId&&r.set(o.operationId,o)}for(let[,s]of Object.entries(n.webhooks||{}))for(let[,i]of Object.entries(s)){let o=i;o.operationId&&r.set(o.operationId,o)}for(let s of e){let i=r.get(s.operationId);if(!i)continue;let o=i.responses||{};for(let[p,a]of Object.entries(o))if(/^2\d\d$/.test(p)&&a.content){let h=a.content["application/json"];if(h&&h.schema){let f=h.schema,c=`${b(O(s.operationId))}Response`;(!f.$ref||f.allOf||f.oneOf||f.anyOf)&&t.set(c,f)}}}return t}function ce(e,n,t,r,s){let i=pe(n,t);if(i.size>0){e.push("// Generated Request Types"),e.push("");for(let[o,p]of i){let a=z(o,p,new Set,s,r);e.push(a),e.push(""),e.push(`export type ${o} = z.infer<typeof ${o}>;`),e.push("")}}}function fe(e,n,t,r,s){let i=ue(n,t);if(i.size>0){e.push("// Generated Response Types"),e.push("");for(let[o,p]of i){let a=z(o,p,new Set,s,r);e.push(a),e.push(""),e.push(`export type ${o} = z.infer<typeof ${o}>;`),e.push("")}}}function de(){let e=[];return e.push("// Generated helper types for Zenko"),e.push("// This file provides type definitions for operation objects and path functions"),e.push(""),e.push("export type PathFn<TArgs extends unknown[] = []> = (...args: TArgs) => string"),e.push(""),e.push('export type RequestMethod = "get" | "put" | "post" | "delete" | "options" | "head" | "patch" | "trace"'),e.push(""),e.push("export type HeaderFn<TArgs extends unknown[] = [], TResult = Record<string, unknown> | Record<string, never>> = (...args: TArgs) => TResult"),e.push(""),e.push("export type AnyHeaderFn = HeaderFn<any, unknown> | (() => unknown)"),e.push(""),e.push("export type OperationErrors<TError = unknown> = TError extends Record<string, unknown> ? TError : Record<string, TError>;"),e.push(""),e.push("export type OperationDefinition<TMethod extends RequestMethod, TPath extends (...args: any[]) => string, TRequest = undefined, TResponse = undefined, THeaders extends AnyHeaderFn | undefined = undefined, TErrors extends OperationErrors | undefined = undefined> = {"),e.push(" method: TMethod"),e.push(" path: TPath"),e.push(" request?: TRequest"),e.push(" response?: TResponse"),e.push(" headers?: THeaders"),e.push(" errors?: TErrors"),e.push("}"),e.push(""),e.join(`
8
+ `)}function Ne(e){return e===void 0?{open:!1,prefix:"Unknown:"}:typeof e=="boolean"?{open:e,prefix:"Unknown:"}:Array.isArray(e)?{open:e,prefix:"Unknown:"}:{open:e.open??!1,prefix:e.unknownPrefix??"Unknown:"}}function je(e,n={}){let t=[],r=new Set,{strictDates:s=!1,strictNumeric:i=!1,operationIds:o,openEnums:p=!1}=n,a=Ce(n.types),y=Ne(p),h={strictDates:s,strictNumeric:i,optionalType:a.optionalType,openEnums:y.open,openEnumPrefix:y.prefix};t.push('import { z } from "zod";');let f=new Map;if(e.components?.schemas)for(let u of Object.keys(e.components.schemas))f.set(u,O(u));let c=ae(e,f);if(o&&o.length>0){let u=new Set(o);c=c.filter(m=>u.has(m.operationId))}if(He(t,a,c),t.push(""),e.components?.schemas){t.push("// Generated Zod Schemas"),t.push("");let u;if(o&&o.length>0){let T=J(c,e);u=Array.from(T)}else u=Object.keys(e.components.schemas);let m=V(e.components.schemas).filter(T=>u.includes(T));for(let T of m){let R=e.components.schemas[T],P=f.get(T);t.push(z(P,R,r,h,f)),t.push(""),t.push(`export type ${P} = z.infer<typeof ${P}>;`),t.push("")}}t.push("// Path Functions"),t.push("export const paths = {");for(let u of c){let T=u.pathParams.map(d=>d.name).length>0,R=u.queryParams.length>0,P=O(u.operationId);if(!T&&!R){t.push(` ${l(P)}: () => "${u.path}",`);continue}let k=d=>{if(I(d))return d;let x=O(d);return I(x)||(x=`_${x}`),x},E=[],C=[];for(let d of u.pathParams)E.push(I(d.name)?d.name:`${l(d.name)}: ${k(d.name)}`),C.push(`${l(d.name)}: string`);for(let d of u.queryParams)E.push(I(d.name)?d.name:`${l(d.name)}: ${k(d.name)}`),C.push(`${l(d.name)}${d.required?"":"?"}: ${Be(d)}`);let Te=!T&&R&&u.queryParams.every(d=>!d.required),_=`${E.length?`{ ${E.join(", ")} }`:"{}"}: { ${C.join(", ")} }${Te?" = {}":""}`,L=u.path.replace(/{([^}]+)}/g,(d,x)=>`\${${k(x)}}`);if(!R){t.push(` ${l(P)}: (${_}) => \`${L}\`,`);continue}t.push(` ${l(P)}: (${_}) => {`),t.push(" const params = new URLSearchParams()");for(let d of u.queryParams){let x=I(d.name)?d.name:k(O(d.name)),H=d.schema??{};if(H?.type==="array"){let Q=le(H.items??{},"value");d.required?(t.push(` for (const value of ${x}) {`),t.push(` params.append("${d.name}", ${Q})`),t.push(" }")):(t.push(` if (${x} !== undefined) {`),t.push(` for (const value of ${x}) {`),t.push(` params.append("${d.name}", ${Q})`),t.push(" }"),t.push(" }"));continue}let U=le(H,x);d.required?t.push(` params.set("${d.name}", ${U})`):(t.push(` if (${x} !== undefined) {`),t.push(` params.set("${d.name}", ${U})`),t.push(" }"))}t.push(" const _searchParams = params.toString()"),t.push(` return \`${L}\${_searchParams ? \`?\${_searchParams}\` : ""}\``),t.push(" },")}t.push("} as const;"),t.push(""),t.push("// Header Schemas"),t.push("export const headerSchemas = {");for(let u of c){let m=O(u.operationId);if(!u.requestHeaders||u.requestHeaders.length===0){t.push(` ${l(m)}: z.object({}),`);continue}let T=u.requestHeaders.map(R=>{let P=Ze(R),k=R.required?P:D(P,h.optionalType);return` ${l(R.name)}: ${k},`}).join(`
9
+ `);t.push(` ${l(m)}: z.object({`),t.push(T),t.push(" }),")}t.push("} as const;"),t.push(""),t.push("// Header Functions"),t.push("export const headers = {");for(let u of c){let m=O(u.operationId);if(!u.requestHeaders||u.requestHeaders.length===0){t.push(` ${l(m)}: () => ${I(m)?`headerSchemas.${m}`:`headerSchemas[${l(m)}]`}.parse({}),`);continue}t.push(` ${l(m)}: (params: z.input<${I(m)?`typeof headerSchemas.${m}`:`(typeof headerSchemas)[${l(m)}]`}>) => {`),t.push(` return ${I(m)?`headerSchemas.${m}`:`headerSchemas[${l(m)}]`}.parse(params)`),t.push(" },")}t.push("} as const;"),t.push(""),ce(t,c,e,f,h),fe(t,c,e,f,h),Fe(t,c,a),t.push("// Operation Objects");for(let u of c){let m=O(u.operationId),T=a.emit?`: ${b(m)}Operation`:"";t.push(`export const ${m}${T} = {`),t.push(` method: "${u.method}",`),t.push(` path: paths.${m},`),me(t,"request",u.requestType),me(t,"response",u.responseType),u.requestHeaders&&u.requestHeaders.length>0&&t.push(` headers: headers.${m},`),u.errors&&he(u.errors)&&Me(t,"errors",u.errors),t.push("} as const;"),t.push("")}let $={output:t.join(`
10
+ `)};return a.emit&&a.helpers==="file"&&a.helpersOutput&&($.helperFile={path:a.helpersOutput,content:de()}),$}function Mt(e,n={}){return je(e,n).output}function me(e,n,t){t&&e.push(` ${n}: ${t},`)}function Me(e,n,t){if(!(!t||Object.keys(t).length===0)){e.push(` ${n}: {`);for(let[r,s]of Object.entries(t))e.push(` ${l(r)}: ${s},`);e.push(" },")}}function he(e){return!!(e&&Object.keys(e).length>0)}function Ce(e){return{emit:e?.emit??!0,helpers:e?.helpers??"package",helpersOutput:e?.helpersOutput??"./zenko-types",treeShake:e?.treeShake??!0,optionalType:e?.optionalType??"optional"}}function He(e,n,t){if(n.emit)switch(n.helpers){case"package":if(n.treeShake){let r=F(t),s=G(r,"package");s&&e.push(s)}else e.push('import type { PathFn, HeaderFn, OperationDefinition, OperationErrors } from "zenko";');return;case"file":if(n.treeShake){let r=F(t),s=G(r,"file",n.helpersOutput);s&&e.push(s)}else e.push(`import type { PathFn, HeaderFn, OperationDefinition, OperationErrors } from "${n.helpersOutput}";`);return;case"inline":e.push("type PathFn<TArgs extends unknown[] = []> = (...args: TArgs) => string;"),e.push('type RequestMethod = "get" | "put" | "post" | "delete" | "options" | "head" | "patch" | "trace";'),e.push("type HeaderFn<TArgs extends unknown[] = [], TResult = Record<string, unknown> | Record<string, never>> = (...args: TArgs) => TResult;"),e.push("type AnyHeaderFn = HeaderFn<any, unknown> | (() => unknown);"),e.push("type OperationErrors<TError = unknown> = TError extends Record<string, unknown> ? TError : Record<string, TError>;"),e.push("type OperationDefinition<TMethod extends RequestMethod, TPath extends (...args: any[]) => string, TRequest = undefined, TResponse = undefined, THeaders extends AnyHeaderFn | undefined = undefined, TErrors extends OperationErrors | undefined = undefined> = {"),e.push(" method: TMethod"),e.push(" path: TPath"),e.push(" request?: TRequest"),e.push(" response?: TResponse"),e.push(" headers?: THeaders"),e.push(" errors?: TErrors"),e.push("}"),e.push("")}}function Fe(e,n,t){if(t.emit){e.push("// Operation Types");for(let r of n){let s=O(r.operationId),i=r.requestHeaders?.length?I(s)?`typeof headers.${s}`:`(typeof headers)[${l(s)}]`:"undefined",o=B(r.requestType),p=B(r.responseType),a=Ge(r.errors);e.push(`export type ${b(s)}Operation = OperationDefinition<`),e.push(` "${r.method}",`),e.push(` ${I(s)?`typeof paths.${s}`:`(typeof paths)[${l(s)}]`},`),e.push(` ${o},`),e.push(` ${p},`),e.push(` ${i},`),e.push(` ${a}`),e.push(">;"),e.push("")}}}function Ge(e){return!e||!he(e)?"OperationErrors":`OperationErrors<${De(e)}>`}function De(e){return!e||Object.keys(e).length===0?"unknown":`{ ${Object.entries(e).map(([r,s])=>{let i=l(r),o=$e(s);return`${i}: ${o}`}).join("; ")} }`}var ye=new Set(["any","unknown","never","void","null","undefined","string","number","boolean","bigint","symbol"]),ge=/^[A-Za-z_$][A-Za-z0-9_$]*$/;function B(e){if(!e)return"undefined";let n=e.trim();if(n==="undefined")return"undefined";if(ye.has(n)||n.startsWith("typeof "))return n;let t=n.match(/^z\.array\((.+)\)$/);return t?`z.ZodArray<${B(t[1])}>`:ge.test(n)?`typeof ${n}`:n}function $e(e){if(!e)return"unknown";let n=e.trim();if(ye.has(n)||n.startsWith("typeof "))return n;let t=n.match(/^z\.array\((.+)\)$/);return t?`z.ZodArray<${$e(t[1])}>`:ge.test(n)?`typeof ${n}`:n}function Ze(e){let n=e.schema??{};switch(n.type){case"integer":case"number":return"z.coerce.number()";case"boolean":return"z.coerce.boolean()";case"array":{let r=n.items??{type:"string"};return`z.array(${r.type==="integer"||r.type==="number"?"z.coerce.number()":r.type==="boolean"?"z.coerce.boolean()":"z.string()"})`}default:return"z.string()"}}function Be(e){return Oe(e.schema)}function Oe(e){if(!e)return"string";if(e.type==="array")return`Array<${Oe(e.items)}>`;switch(e.type){case"integer":case"number":return"number";case"boolean":return"boolean";default:return"string"}}function le(e,n){if(!e)return`String(${n})`;switch(e.type){case"integer":case"number":return`String(${n})`;case"boolean":return`${n} ? "true" : "false"`;default:return`String(${n})`}}export{je as a,Mt as b};
11
+ //# sourceMappingURL=chunk-64LDA5YF.mjs.map
@@ -0,0 +1,11 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }function Q(e){let n=new Set,t=new Set,r=[],s=i=>{if(n.has(i)||t.has(i))return;t.add(i);let o=e[i],p=A(o);for(let a of p)e[a]&&s(a);t.delete(i),n.add(i),r.push(i)};for(let i of Object.keys(e))s(i);return r}function A(e){let n=[],t=r=>{if(!(typeof r!="object"||r===null)){if(r.$ref&&typeof r.$ref=="string"){let s=g(r.$ref);n.push(s);return}Array.isArray(r)?r.forEach(t):Object.values(r).forEach(t)}};return t(e),[...new Set(n)]}function g(e){return e.split("/").pop()||"Unknown"}function w(e){if(!e)return!1;let n=e.at(0);return n===void 0||!/[a-zA-Z_$]/.test(n)||!/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(e)?!1:!new Set(["abstract","arguments","await","boolean","break","byte","case","catch","char","class","const","continue","debugger","default","delete","do","double","else","enum","eval","export","extends","false","final","finally","float","for","function","goto","if","implements","import","in","instanceof","int","interface","let","long","native","new","null","package","private","protected","public","return","short","static","super","switch","synchronized","this","throw","throws","transient","true","try","typeof","var","void","volatile","while","with","yield","async"]).has(e)}function l(e){return w(e)?e:`"${e}"`}function O(e){return e.replace(/-([a-zA-Z])/g,(n,t)=>t.toUpperCase()).replace(/-+$/,"")}function I(e){return e.charAt(0).toUpperCase()+e.slice(1)}function H(e){let n={usesHeaderFn:!1,usesOperationDefinition:!1,usesOperationErrors:!1};e.length>0&&(n.usesOperationDefinition=!0);for(let t of e)t.errors&&V(t.errors)&&(n.usesOperationErrors=!0);return e.length>0&&!n.usesOperationErrors&&e.some(r=>!r.errors||!V(r.errors))&&(n.usesOperationErrors=!0),n}function F(e,n,t){let r=[];if(e.usesHeaderFn&&r.push("HeaderFn"),e.usesOperationDefinition&&r.push("OperationDefinition"),e.usesOperationErrors&&r.push("OperationErrors"),r.length===0)return"";let s=n==="package"?'"zenko"':`"${t}"`;return`import type { ${r.join(", ")} } from ${s};`}function V(e){return!!(e&&Object.keys(e).length>0)}var E={"application/json":"unknown","text/csv":"string","text/plain":"string","application/octet-stream":"unknown","application/pdf":"unknown"};function v(e){let n=Object.keys(e);if(n.includes("application/json"))return"application/json";for(let t of n)if(t in E)return t;return n[0]||""}function N(e,n){if(e){if(e.$ref){let t=g(e.$ref),r=_optionalChain([n, 'access', _2 => _2.components, 'optionalAccess', _3 => _3.parameters, 'optionalAccess', _4 => _4[t]]);if(!r)return;let{$ref:s,...i}=e;return{...r,...i}}return e}}function W(e,n){let t=new Set,r=new Map;for(let[,o]of Object.entries(n.paths||{}))for(let[,p]of Object.entries(o)){let a=p;a.operationId&&r.set(a.operationId,a)}for(let[,o]of Object.entries(n.webhooks||{}))for(let[,p]of Object.entries(o)){let a=p;a.operationId&&r.set(a.operationId,a)}for(let o of e){let p=r.get(o.operationId);if(!p)continue;let a=_optionalChain([p, 'access', _5 => _5.requestBody, 'optionalAccess', _6 => _6.content, 'optionalAccess', _7 => _7["application/json"], 'optionalAccess', _8 => _8.schema]);if(_optionalChain([a, 'optionalAccess', _9 => _9.$ref])){let f=g(a.$ref);t.add(f)}else if(a){let f=A(a);for(let c of f)_optionalChain([n, 'access', _10 => _10.components, 'optionalAccess', _11 => _11.schemas, 'optionalAccess', _12 => _12[c]])&&t.add(c)}let y=p.responses||{};for(let[,f]of Object.entries(y)){let c=_optionalChain([f, 'optionalAccess', _13 => _13.content]);if(!c)continue;let $=v(c),u=_optionalChain([c, 'access', _14 => _14[$], 'optionalAccess', _15 => _15.schema]);if(_optionalChain([u, 'optionalAccess', _16 => _16.$ref])){let m=g(u.$ref);t.add(m)}else if(u){let m=A(u);for(let T of m)_optionalChain([n, 'access', _17 => _17.components, 'optionalAccess', _18 => _18.schemas, 'optionalAccess', _19 => _19[T]])&&t.add(T)}}for(let f of o.queryParams){if(_optionalChain([f, 'access', _20 => _20.schema, 'optionalAccess', _21 => _21.$ref])){let c=g(f.schema.$ref);t.add(c)}if(_optionalChain([f, 'access', _22 => _22.schema, 'optionalAccess', _23 => _23.items, 'optionalAccess', _24 => _24.$ref])){let c=g(f.schema.items.$ref);t.add(c)}}for(let f of o.requestHeaders||[]){if(_optionalChain([f, 'access', _25 => _25.schema, 'optionalAccess', _26 => _26.$ref])){let c=g(f.schema.$ref);t.add(c)}if(_optionalChain([f, 'access', _27 => _27.schema, 'optionalAccess', _28 => _28.items, 'optionalAccess', _29 => _29.$ref])){let c=g(f.schema.items.$ref);t.add(c)}}let h=p.parameters||[];for(let f of h){let c=N(f,n);if(_optionalChain([c, 'optionalAccess', _30 => _30.schema, 'optionalAccess', _31 => _31.$ref])){let $=g(c.schema.$ref);t.add($)}if(_optionalChain([c, 'optionalAccess', _32 => _32.schema, 'optionalAccess', _33 => _33.items, 'optionalAccess', _34 => _34.$ref])){let $=g(c.schema.items.$ref);t.add($)}}}let s=new Set,i=Array.from(t);for(;i.length>0;){let o=i.pop();if(s.has(o))continue;s.add(o);let p=_optionalChain([n, 'access', _35 => _35.components, 'optionalAccess', _36 => _36.schemas, 'optionalAccess', _37 => _37[o]]);if(!p)continue;let a=A(p);for(let y of a)_optionalChain([n, 'access', _38 => _38.components, 'optionalAccess', _39 => _39.schemas, 'optionalAccess', _40 => _40[y]])&&!s.has(y)&&(t.add(y),i.push(y))}return t}function Te(e,n){return n===!0?!0:Array.isArray(n)?n.includes(e):!1}function G(e,n){switch(n){case"optional":return`${e}.optional()`;case"nullable":return`${e}.nullable()`;case"nullish":return`${e}.nullish()`}}function q(e,n,t,r,s){if(t.has(e))return"";if(t.add(e),n.enum){let i=n.enum.map(o=>`"${o}"`).join(", ");if(Te(e,r.openEnums)){let o=r.openEnumPrefix;return`const ${e}Known = [${i}] as const;
2
+ export const ${e} = z.enum(${e}Known).or(
3
+ z.string().transform((v): \`${o}\${string}\` => \`${o}\${v}\`)
4
+ );`}return`export const ${e} = z.enum([${i}]);`}if(n.allOf&&Array.isArray(n.allOf)){let i=n.allOf.map(a=>k(a,r,s));if(i.length===0)return`export const ${e} = z.object({});`;if(i.length===1)return`export const ${e} = ${i[0]};`;let o=i[0],p=i.slice(1).map(a=>`.and(${a})`).join("");return`export const ${e} = ${o}${p};`}if(n.type==="object"||n.properties)return`export const ${e} = ${J(n,r,s)};`;if(n.type==="array"){let i=_nullishCoalesce(n.items, () => ({type:"unknown"})),o=k(i,r,s),p=Ie(n,`z.array(${o})`,i,r.strictNumeric);return`export const ${e} = ${p};`}return`export const ${e} = ${k(n,r,s)};`}function k(e,n,t){if(e.$ref){let r=g(e.$ref);return _optionalChain([t, 'optionalAccess', _41 => _41.get, 'call', _42 => _42(r)])||r}if(e.enum)return`z.enum([${e.enum.map(s=>`"${s}"`).join(", ")}])`;if(e.allOf&&Array.isArray(e.allOf)){let r=e.allOf.map(o=>k(o,n,t));if(r.length===0)return"z.object({})";if(r.length===1)return r[0];let s=r[0],i=r.slice(1).map(o=>`.and(${o})`).join("");return`${s}${i}`}if(e.type==="object"||e.properties||e.allOf||e.oneOf||e.anyOf)return J(e,n,t);switch(e.type){case"string":return xe(e,n);case"boolean":return"z.boolean()";case"array":return`z.array(${k(_nullishCoalesce(e.items, () => ({type:"unknown"})),n,t)})`;case"null":return"z.null()";case"number":return K(e,n);case"integer":return we(e,n);default:return"z.unknown()"}}function J(e,n,t){let r=[];for(let[s,i]of Object.entries(e.properties||{})){let o=_nullishCoalesce(_optionalChain([e, 'access', _43 => _43.required, 'optionalAccess', _44 => _44.includes, 'call', _45 => _45(s)]), () => (!1)),p=k(i,n,t),a=G(p,n.optionalType),y=n.optionalType!=="nullable"?Se(a,i):a,h=o?p:y;r.push(` ${l(s)}: ${h},`)}return r.length===0?"z.object({})":`z.object({
5
+ ${r.join(`
6
+ `)}
7
+ })`}function xe(e,n){if(e.format==="binary")return'(typeof Blob === "undefined" ? z.unknown() : z.instanceof(Blob))';if(n.strictDates)switch(e.format){case"date-time":return"z.string().datetime()";case"date":return"z.string().date()";case"time":return"z.string().time()";case"duration":return"z.string().duration()"}let t="z.string()";switch(n.strictNumeric&&(typeof e.minLength=="number"&&(t+=`.min(${e.minLength})`),typeof e.maxLength=="number"&&(t+=`.max(${e.maxLength})`),e.pattern&&(t+=`.regex(new RegExp(${JSON.stringify(e.pattern)}))`)),e.format){case"uuid":return`${t}.uuid()`;case"email":return`${t}.email()`;case"uri":case"url":return`${t}.url()`;case"ipv4":return`${t}.ip({ version: "v4" })`;case"ipv6":return`${t}.ip({ version: "v6" })`;default:return t}}function Se(e,n){return!n||n.default===void 0?e:`${e}.default(${JSON.stringify(n.default)})`}function K(e,n){let t="z.number()";return n.strictNumeric&&(t=Pe(e,t),typeof e.multipleOf=="number"&&e.multipleOf!==0&&(t+=`.refine((value) => Math.abs(value / ${e.multipleOf} - Math.round(value / ${e.multipleOf})) < Number.EPSILON, { message: "Must be a multiple of ${e.multipleOf}" })`)),t}function we(e,n){let t=K(e,n);return t+=".int()",t}function Ie(e,n,t,r){return r&&(typeof e.minItems=="number"&&(n+=`.min(${e.minItems})`),typeof e.maxItems=="number"&&(n+=`.max(${e.maxItems})`),e.uniqueItems&&be(t)&&(n+='.refine((items) => new Set(items).size === items.length, { message: "Items must be unique" })')),n}function be(e){return _optionalChain([e, 'optionalAccess', _46 => _46.$ref])?!1:new Set(["string","number","integer","boolean"]).has(_optionalChain([e, 'optionalAccess', _47 => _47.type]))}function Pe(e,n){return typeof e.minimum=="number"?e.exclusiveMinimum===!0?n+=`.gt(${e.minimum})`:n+=`.min(${e.minimum})`:typeof e.exclusiveMinimum=="number"&&(n+=`.gt(${e.exclusiveMinimum})`),typeof e.maximum=="number"?e.exclusiveMaximum===!0?n+=`.lt(${e.maximum})`:n+=`.max(${e.maximum})`:typeof e.exclusiveMaximum=="number"&&(n+=`.lt(${e.exclusiveMaximum})`),n}var Re={400:"badRequest",401:"unauthorized",402:"paymentRequired",403:"forbidden",404:"notFound",405:"methodNotAllowed",406:"notAcceptable",407:"proxyAuthenticationRequired",408:"requestTimeout",409:"conflict",410:"gone",411:"lengthRequired",412:"preconditionFailed",413:"payloadTooLarge",414:"uriTooLong",415:"unsupportedMediaType",416:"rangeNotSatisfiable",417:"expectationFailed",418:"imATeapot",421:"misdirectedRequest",422:"unprocessableEntity",423:"locked",424:"failedDependency",425:"tooEarly",426:"upgradeRequired",428:"preconditionRequired",429:"tooManyRequests",431:"requestHeaderFieldsTooLarge",451:"unavailableForLegalReasons",500:"internalServerError",501:"notImplemented",502:"badGateway",503:"serviceUnavailable",504:"gatewayTimeout",505:"httpVersionNotSupported",506:"variantAlsoNegotiates",507:"insufficientStorage",508:"loopDetected",510:"notExtended",511:"networkAuthenticationRequired"};function Y(e){if(e==="default")return"defaultError";let n=e.trim(),t=Re[n];if(t)return t;if(/^\d{3}$/.test(n))return`status${n}`;let r=n.toLowerCase().replace(/[^a-z0-9]+/g," ").trim();if(!r)return"unknownError";let s=r.split(/\s+/),[i,...o]=s,p=i+o.map(a=>a.charAt(0).toUpperCase()+a.slice(1)).join("");return p?/^[a-zA-Z_$]/.test(p)?p:`status${p.charAt(0).toUpperCase()}${p.slice(1)}`:"unknownError"}function j(e){if(e==="default")return!0;let n=Number(e);return Number.isInteger(n)?n>=400:!1}function ie(e,n){let t=[];if(e.paths)for(let[r,s]of Object.entries(e.paths))for(let[i,o]of Object.entries(s)){let p=i.toLowerCase();if(!se(p)||!o.operationId)continue;let a=ee(r),y=te(o,n),{successResponse:h,errors:f}=ne(o,o.operationId,n),c=X(s,o,e),$=re(c),u=oe(c);t.push({operationId:o.operationId,path:r,method:p,pathParams:a,queryParams:u,requestType:y,responseType:h,requestHeaders:$,errors:f})}if(e.webhooks)for(let[r,s]of Object.entries(e.webhooks))for(let[i,o]of Object.entries(s)){let p=i.toLowerCase();if(!se(p)||!o.operationId)continue;let a=r,y=ee(a),h=te(o,n),{successResponse:f,errors:c}=ne(o,o.operationId,n),$=X(s,o,e),u=re($),m=oe($);t.push({operationId:o.operationId,path:a,method:p,pathParams:y,queryParams:m,requestType:h,responseType:f,requestHeaders:u,errors:c})}return t}function X(e,n,t){let r=new Map,s=i=>{if(Array.isArray(i))for(let o of i){let p=N(o,t);if(!p)continue;let a=`${p.in}:${p.name}`;r.set(a,p)}};return s(e.parameters),s(n.parameters),Array.from(r.values())}function ee(e){let n=[],t=e.match(/{([^}]+)}/g);if(t)for(let r of t){let s=r.slice(1,-1);n.push({name:s,type:"string"})}return n}function te(e,n){let t=ke(e);if(!t)return;if(t.$ref){let s=g(t.$ref);return _optionalChain([n, 'optionalAccess', _48 => _48.get, 'call', _49 => _49(s)])||s}return`${I(O(e.operationId))}Request`}function ke(e){let n=_optionalChain([e, 'optionalAccess', _50 => _50.requestBody, 'optionalAccess', _51 => _51.content]);if(!n||Object.keys(n).length===0)return;let t=["application/json","multipart/form-data","application/x-www-form-urlencoded"];for(let r of t){let s=_optionalChain([n, 'access', _52 => _52[r], 'optionalAccess', _53 => _53.schema]);if(s)return s}}function ne(e,n,t){let r=_nullishCoalesce(e.responses, () => ({})),s=new Map,i=[];for(let[a,y]of Object.entries(r)){let h=_optionalChain([y, 'optionalAccess', _54 => _54.content]);if(!h||Object.keys(h).length===0){a==="204"||/^3\d\d$/.test(a)?s.set(a,"undefined"):j(a)&&i.push({code:a,schema:"undefined"});continue}let f=v(h),c=_optionalChain([h, 'access', _55 => _55[f], 'optionalAccess', _56 => _56.schema]);if(!c){let $=ze(f,a);$&&(j(a)?i.push({code:a,schema:$}):/^2\d\d$/.test(a)&&s.set(a,$));continue}if(j(a)){i.push({code:a,schema:c});continue}/^2\d\d$/.test(a)&&s.set(a,c)}let o=Ae(s,n,t),p=qe(i,n,t);return{successResponse:o,errors:p}}function Ae(e,n,t){if(e.size===0)return;let r=["200","201","204"];for(let i of r){let o=e.get(i);if(o)return typeof o=="string"?o:D(o,`${I(O(n))}Response`,t)}let[,s]=_nullishCoalesce(e.entries().next().value, () => ([]));if(s)return typeof s=="string"?s:D(s,`${I(O(n))}Response`,t)}function qe(e=[],n,t){if(!e.length)return;let r={};for(let{code:s,schema:i}of e){let o=Y(s),p=D(i,`${I(O(n))}${I(o)}`,t);r[o]=p}return r}function D(e,n,t){if(typeof e=="string")return e;if(e.$ref){let r=g(e.$ref);return _optionalChain([t, 'optionalAccess', _57 => _57.get, 'call', _58 => _58(r)])||r}if(e.type==="array"&&_optionalChain([e, 'access', _59 => _59.items, 'optionalAccess', _60 => _60.$ref])){let r=g(e.items.$ref);return`z.array(${_optionalChain([t, 'optionalAccess', _61 => _61.get, 'call', _62 => _62(r)])||r})`}return e.allOf&&Array.isArray(e.allOf),n}function re(e){let n=[];for(let t of _nullishCoalesce(e, () => ([])))t.in==="header"&&n.push({name:t.name,description:t.description,schema:t.schema,required:t.required});return n}function oe(e){let n=[];for(let t of _nullishCoalesce(e, () => ([])))t.in==="query"&&n.push({name:t.name,description:t.description,schema:t.schema,required:t.required});return n}function se(e){switch(e){case"get":case"put":case"post":case"delete":case"options":case"head":case"patch":case"trace":return!0;default:return!1}}function ze(e,n){return n==="204"||/^3\d\d$/.test(n)?"undefined":e in E?E[e]:"unknown"}function ae(e,n){let t=new Map,r=new Map;for(let[,s]of Object.entries(n.paths||{}))for(let[,i]of Object.entries(s)){let o=i;o.operationId&&r.set(o.operationId,o)}for(let[,s]of Object.entries(n.webhooks||{}))for(let[,i]of Object.entries(s)){let o=i;o.operationId&&r.set(o.operationId,o)}for(let s of e){let i=r.get(s.operationId);if(!i)continue;let o=i.requestBody;if(o&&o.content){let p=o.content,a=Ee(p);if(!a)continue;let y=`${I(O(s.operationId))}Request`;(!a.$ref||a.allOf||a.oneOf||a.anyOf)&&t.set(y,a)}}return t}function Ee(e){let n=["application/json","multipart/form-data","application/x-www-form-urlencoded"];for(let t of n){let r=_optionalChain([e, 'access', _63 => _63[t], 'optionalAccess', _64 => _64.schema]);if(r)return r}}function pe(e,n){let t=new Map,r=new Map;for(let[,s]of Object.entries(n.paths||{}))for(let[,i]of Object.entries(s)){let o=i;o.operationId&&r.set(o.operationId,o)}for(let[,s]of Object.entries(n.webhooks||{}))for(let[,i]of Object.entries(s)){let o=i;o.operationId&&r.set(o.operationId,o)}for(let s of e){let i=r.get(s.operationId);if(!i)continue;let o=i.responses||{};for(let[p,a]of Object.entries(o))if(/^2\d\d$/.test(p)&&a.content){let h=a.content["application/json"];if(h&&h.schema){let f=h.schema,c=`${I(O(s.operationId))}Response`;(!f.$ref||f.allOf||f.oneOf||f.anyOf)&&t.set(c,f)}}}return t}function ue(e,n,t,r,s){let i=ae(n,t);if(i.size>0){e.push("// Generated Request Types"),e.push("");for(let[o,p]of i){let a=q(o,p,new Set,s,r);e.push(a),e.push(""),e.push(`export type ${o} = z.infer<typeof ${o}>;`),e.push("")}}}function ce(e,n,t,r,s){let i=pe(n,t);if(i.size>0){e.push("// Generated Response Types"),e.push("");for(let[o,p]of i){let a=q(o,p,new Set,s,r);e.push(a),e.push(""),e.push(`export type ${o} = z.infer<typeof ${o}>;`),e.push("")}}}function fe(){let e=[];return e.push("// Generated helper types for Zenko"),e.push("// This file provides type definitions for operation objects and path functions"),e.push(""),e.push("export type PathFn<TArgs extends unknown[] = []> = (...args: TArgs) => string"),e.push(""),e.push('export type RequestMethod = "get" | "put" | "post" | "delete" | "options" | "head" | "patch" | "trace"'),e.push(""),e.push("export type HeaderFn<TArgs extends unknown[] = [], TResult = Record<string, unknown> | Record<string, never>> = (...args: TArgs) => TResult"),e.push(""),e.push("export type AnyHeaderFn = HeaderFn<any, unknown> | (() => unknown)"),e.push(""),e.push("export type OperationErrors<TError = unknown> = TError extends Record<string, unknown> ? TError : Record<string, TError>;"),e.push(""),e.push("export type OperationDefinition<TMethod extends RequestMethod, TPath extends (...args: any[]) => string, TRequest = undefined, TResponse = undefined, THeaders extends AnyHeaderFn | undefined = undefined, TErrors extends OperationErrors | undefined = undefined> = {"),e.push(" method: TMethod"),e.push(" path: TPath"),e.push(" request?: TRequest"),e.push(" response?: TResponse"),e.push(" headers?: THeaders"),e.push(" errors?: TErrors"),e.push("}"),e.push(""),e.join(`
8
+ `)}function ve(e){return e===void 0?{open:!1,prefix:"Unknown:"}:typeof e=="boolean"?{open:e,prefix:"Unknown:"}:Array.isArray(e)?{open:e,prefix:"Unknown:"}:{open:_nullishCoalesce(e.open, () => (!1)),prefix:_nullishCoalesce(e.unknownPrefix, () => ("Unknown:"))}}function Ne(e,n={}){let t=[],r=new Set,{strictDates:s=!1,strictNumeric:i=!1,operationIds:o,openEnums:p=!1}=n,a=Me(n.types),y=ve(p),h={strictDates:s,strictNumeric:i,optionalType:a.optionalType,openEnums:y.open,openEnumPrefix:y.prefix};t.push('import { z } from "zod";');let f=new Map;if(_optionalChain([e, 'access', _65 => _65.components, 'optionalAccess', _66 => _66.schemas]))for(let u of Object.keys(e.components.schemas))f.set(u,O(u));let c=ie(e,f);if(o&&o.length>0){let u=new Set(o);c=c.filter(m=>u.has(m.operationId))}if(Ce(t,a,c),t.push(""),_optionalChain([e, 'access', _67 => _67.components, 'optionalAccess', _68 => _68.schemas])){t.push("// Generated Zod Schemas"),t.push("");let u;if(o&&o.length>0){let T=W(c,e);u=Array.from(T)}else u=Object.keys(e.components.schemas);let m=Q(e.components.schemas).filter(T=>u.includes(T));for(let T of m){let P=e.components.schemas[T],b=f.get(T);t.push(q(b,P,r,h,f)),t.push(""),t.push(`export type ${b} = z.infer<typeof ${b}>;`),t.push("")}}t.push("// Path Functions"),t.push("export const paths = {");for(let u of c){let T=u.pathParams.map(d=>d.name).length>0,P=u.queryParams.length>0,b=O(u.operationId);if(!T&&!P){t.push(` ${l(b)}: () => "${u.path}",`);continue}let R=d=>{if(w(d))return d;let x=O(d);return w(x)||(x=`_${x}`),x},z=[],M=[];for(let d of u.pathParams)z.push(w(d.name)?d.name:`${l(d.name)}: ${R(d.name)}`),M.push(`${l(d.name)}: string`);for(let d of u.queryParams)z.push(w(d.name)?d.name:`${l(d.name)}: ${R(d.name)}`),M.push(`${l(d.name)}${d.required?"":"?"}: ${Ze(d)}`);let Oe=!T&&P&&u.queryParams.every(d=>!d.required),B=`${z.length?`{ ${z.join(", ")} }`:"{}"}: { ${M.join(", ")} }${Oe?" = {}":""}`,_=u.path.replace(/{([^}]+)}/g,(d,x)=>`\${${R(x)}}`);if(!P){t.push(` ${l(b)}: (${B}) => \`${_}\`,`);continue}t.push(` ${l(b)}: (${B}) => {`),t.push(" const params = new URLSearchParams()");for(let d of u.queryParams){let x=w(d.name)?d.name:R(O(d.name)),C=_nullishCoalesce(d.schema, () => ({}));if(_optionalChain([C, 'optionalAccess', _69 => _69.type])==="array"){let U=me(_nullishCoalesce(C.items, () => ({})),"value");d.required?(t.push(` for (const value of ${x}) {`),t.push(` params.append("${d.name}", ${U})`),t.push(" }")):(t.push(` if (${x} !== undefined) {`),t.push(` for (const value of ${x}) {`),t.push(` params.append("${d.name}", ${U})`),t.push(" }"),t.push(" }"));continue}let L=me(C,x);d.required?t.push(` params.set("${d.name}", ${L})`):(t.push(` if (${x} !== undefined) {`),t.push(` params.set("${d.name}", ${L})`),t.push(" }"))}t.push(" const _searchParams = params.toString()"),t.push(` return \`${_}\${_searchParams ? \`?\${_searchParams}\` : ""}\``),t.push(" },")}t.push("} as const;"),t.push(""),t.push("// Header Schemas"),t.push("export const headerSchemas = {");for(let u of c){let m=O(u.operationId);if(!u.requestHeaders||u.requestHeaders.length===0){t.push(` ${l(m)}: z.object({}),`);continue}let T=u.requestHeaders.map(P=>{let b=De(P),R=P.required?b:G(b,h.optionalType);return` ${l(P.name)}: ${R},`}).join(`
9
+ `);t.push(` ${l(m)}: z.object({`),t.push(T),t.push(" }),")}t.push("} as const;"),t.push(""),t.push("// Header Functions"),t.push("export const headers = {");for(let u of c){let m=O(u.operationId);if(!u.requestHeaders||u.requestHeaders.length===0){t.push(` ${l(m)}: () => ${w(m)?`headerSchemas.${m}`:`headerSchemas[${l(m)}]`}.parse({}),`);continue}t.push(` ${l(m)}: (params: z.input<${w(m)?`typeof headerSchemas.${m}`:`(typeof headerSchemas)[${l(m)}]`}>) => {`),t.push(` return ${w(m)?`headerSchemas.${m}`:`headerSchemas[${l(m)}]`}.parse(params)`),t.push(" },")}t.push("} as const;"),t.push(""),ue(t,c,e,f,h),ce(t,c,e,f,h),He(t,c,a),t.push("// Operation Objects");for(let u of c){let m=O(u.operationId),T=a.emit?`: ${I(m)}Operation`:"";t.push(`export const ${m}${T} = {`),t.push(` method: "${u.method}",`),t.push(` path: paths.${m},`),de(t,"request",u.requestType),de(t,"response",u.responseType),u.requestHeaders&&u.requestHeaders.length>0&&t.push(` headers: headers.${m},`),u.errors&&le(u.errors)&&je(t,"errors",u.errors),t.push("} as const;"),t.push("")}let $={output:t.join(`
10
+ `)};return a.emit&&a.helpers==="file"&&a.helpersOutput&&($.helperFile={path:a.helpersOutput,content:fe()}),$}function jt(e,n={}){return Ne(e,n).output}function de(e,n,t){t&&e.push(` ${n}: ${t},`)}function je(e,n,t){if(!(!t||Object.keys(t).length===0)){e.push(` ${n}: {`);for(let[r,s]of Object.entries(t))e.push(` ${l(r)}: ${s},`);e.push(" },")}}function le(e){return!!(e&&Object.keys(e).length>0)}function Me(e){return{emit:_nullishCoalesce(_optionalChain([e, 'optionalAccess', _70 => _70.emit]), () => (!0)),helpers:_nullishCoalesce(_optionalChain([e, 'optionalAccess', _71 => _71.helpers]), () => ("package")),helpersOutput:_nullishCoalesce(_optionalChain([e, 'optionalAccess', _72 => _72.helpersOutput]), () => ("./zenko-types")),treeShake:_nullishCoalesce(_optionalChain([e, 'optionalAccess', _73 => _73.treeShake]), () => (!0)),optionalType:_nullishCoalesce(_optionalChain([e, 'optionalAccess', _74 => _74.optionalType]), () => ("optional"))}}function Ce(e,n,t){if(n.emit)switch(n.helpers){case"package":if(n.treeShake){let r=H(t),s=F(r,"package");s&&e.push(s)}else e.push('import type { PathFn, HeaderFn, OperationDefinition, OperationErrors } from "zenko";');return;case"file":if(n.treeShake){let r=H(t),s=F(r,"file",n.helpersOutput);s&&e.push(s)}else e.push(`import type { PathFn, HeaderFn, OperationDefinition, OperationErrors } from "${n.helpersOutput}";`);return;case"inline":e.push("type PathFn<TArgs extends unknown[] = []> = (...args: TArgs) => string;"),e.push('type RequestMethod = "get" | "put" | "post" | "delete" | "options" | "head" | "patch" | "trace";'),e.push("type HeaderFn<TArgs extends unknown[] = [], TResult = Record<string, unknown> | Record<string, never>> = (...args: TArgs) => TResult;"),e.push("type AnyHeaderFn = HeaderFn<any, unknown> | (() => unknown);"),e.push("type OperationErrors<TError = unknown> = TError extends Record<string, unknown> ? TError : Record<string, TError>;"),e.push("type OperationDefinition<TMethod extends RequestMethod, TPath extends (...args: any[]) => string, TRequest = undefined, TResponse = undefined, THeaders extends AnyHeaderFn | undefined = undefined, TErrors extends OperationErrors | undefined = undefined> = {"),e.push(" method: TMethod"),e.push(" path: TPath"),e.push(" request?: TRequest"),e.push(" response?: TResponse"),e.push(" headers?: THeaders"),e.push(" errors?: TErrors"),e.push("}"),e.push("")}}function He(e,n,t){if(t.emit){e.push("// Operation Types");for(let r of n){let s=O(r.operationId),i=_optionalChain([r, 'access', _75 => _75.requestHeaders, 'optionalAccess', _76 => _76.length])?w(s)?`typeof headers.${s}`:`(typeof headers)[${l(s)}]`:"undefined",o=Z(r.requestType),p=Z(r.responseType),a=Fe(r.errors);e.push(`export type ${I(s)}Operation = OperationDefinition<`),e.push(` "${r.method}",`),e.push(` ${w(s)?`typeof paths.${s}`:`(typeof paths)[${l(s)}]`},`),e.push(` ${o},`),e.push(` ${p},`),e.push(` ${i},`),e.push(` ${a}`),e.push(">;"),e.push("")}}}function Fe(e){return!e||!le(e)?"OperationErrors":`OperationErrors<${Ge(e)}>`}function Ge(e){return!e||Object.keys(e).length===0?"unknown":`{ ${Object.entries(e).map(([r,s])=>{let i=l(r),o=ge(s);return`${i}: ${o}`}).join("; ")} }`}var he=new Set(["any","unknown","never","void","null","undefined","string","number","boolean","bigint","symbol"]),ye=/^[A-Za-z_$][A-Za-z0-9_$]*$/;function Z(e){if(!e)return"undefined";let n=e.trim();if(n==="undefined")return"undefined";if(he.has(n)||n.startsWith("typeof "))return n;let t=n.match(/^z\.array\((.+)\)$/);return t?`z.ZodArray<${Z(t[1])}>`:ye.test(n)?`typeof ${n}`:n}function ge(e){if(!e)return"unknown";let n=e.trim();if(he.has(n)||n.startsWith("typeof "))return n;let t=n.match(/^z\.array\((.+)\)$/);return t?`z.ZodArray<${ge(t[1])}>`:ye.test(n)?`typeof ${n}`:n}function De(e){let n=_nullishCoalesce(e.schema, () => ({}));switch(n.type){case"integer":case"number":return"z.coerce.number()";case"boolean":return"z.coerce.boolean()";case"array":{let r=_nullishCoalesce(n.items, () => ({type:"string"}));return`z.array(${r.type==="integer"||r.type==="number"?"z.coerce.number()":r.type==="boolean"?"z.coerce.boolean()":"z.string()"})`}default:return"z.string()"}}function Ze(e){return $e(e.schema)}function $e(e){if(!e)return"string";if(e.type==="array")return`Array<${$e(e.items)}>`;switch(e.type){case"integer":case"number":return"number";case"boolean":return"boolean";default:return"string"}}function me(e,n){if(!e)return`String(${n})`;switch(e.type){case"integer":case"number":return`String(${n})`;case"boolean":return`${n} ? "true" : "false"`;default:return`String(${n})`}}exports.a = Ne; exports.b = jt;
11
+ //# sourceMappingURL=chunk-XXHDWDVY.cjs.map
package/dist/cli.cjs CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- "use strict"; function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }var _chunk7VP5JZCLcjs = require('./chunk-7VP5JZCL.cjs');var _fs = require('fs'); var i = _interopRequireWildcard(_fs);var _path = require('path'); var n = _interopRequireWildcard(_path);var _url = require('url');async function F(){let t=process.argv.slice(2),e=S(t);if(e.showHelp||!e.configPath&&e.positional.length===0){h(),process.exit(e.showHelp?0:1);return}try{if(e.configPath)await v(e);else{if(e.positional.length!==2){h(),process.exit(1);return}let[s,o]=e.positional;if(!s||!o){h(),process.exit(1);return}await w({inputFile:s,outputFile:o,strictDates:e.strictDates,strictNumeric:e.strictNumeric})}}catch(s){console.error("\u274C Error:",s),process.exit(1)}}function S(t){let e={showHelp:!1,strictDates:!1,strictNumeric:!1,positional:[]};for(let s=0;s<t.length;s+=1){let o=t[s];if(o==="-h"||o==="--help"){e.showHelp=!0;continue}if(o==="--strict-dates"){e.strictDates=!0;continue}if(o==="--strict-numeric"){e.strictNumeric=!0;continue}if(o==="--config"||o==="-c"){let r=t[s+1];if(!r)throw new Error("--config flag requires a file path");e.configPath=r,s+=1;continue}e.positional.push(o)}return e}function h(){console.log("Usage:"),console.log(" zenko <input-file> <output-file> [options]"),console.log(" zenko --config <config-file> [options]"),console.log(""),console.log("Options:"),console.log(" -h, --help Show this help message"),console.log(" --strict-dates Use ISO datetime parsing (can be set per config entry)"),console.log(" --strict-numeric Preserve numeric min/max bounds (can be set per config entry)"),console.log(" -c, --config Path to config file (JSON, YAML, or JS module)"),console.log(""),console.log("Config file format:"),console.log(' {"types"?: { emit?, helpers?, helpersOutput?, optionalType?, treeShake? }, "schemas": [{ input, output, strictDates?, strictNumeric?, types? }] }')}async function v(t){let e=t.configPath,s=n.resolve(e),o=await A(s);N(o);let r=n.dirname(s),f=o.types;for(let c of o.schemas){let g=d(c.input,r),a=d(c.output,r),p=O(f,c.types);await w({inputFile:g,outputFile:a,strictDates:_nullishCoalesce(c.strictDates, () => (t.strictDates)),strictNumeric:_nullishCoalesce(c.strictNumeric, () => (t.strictNumeric)),typesConfig:p,operationIds:c.operationIds})}}async function A(t){let e=n.extname(t).toLowerCase();if(e===".json"){let r=i.readFileSync(t,"utf8");return JSON.parse(r)}if(e===".yaml"||e===".yml"){let r=i.readFileSync(t,"utf8");return Bun.YAML.parse(r)}let o=await Promise.resolve().then(() => _interopRequireWildcard(require(_url.pathToFileURL.call(void 0, t).href)));return _nullishCoalesce(_nullishCoalesce(o.default, () => (o.config)), () => (o))}function N(t){if(!t||typeof t!="object")throw new Error("Config file must export an object");if(!Array.isArray(t.schemas))throw new Error("Config file must contain a 'schemas' array");for(let e of t.schemas){if(!e||typeof e!="object")throw new Error("Each schema entry must be an object");if(typeof e.input!="string"||typeof e.output!="string")throw new Error("Each schema entry requires 'input' and 'output' paths")}}function d(t,e){return n.isAbsolute(t)?t:n.join(e,t)}function O(t,e){if(!(!t&&!e))return{...t,...e}}async function w(t){let{inputFile:e,outputFile:s,strictDates:o,strictNumeric:r,typesConfig:f,operationIds:c}=t,g=n.resolve(e),a=n.resolve(s),p=P(g),l=_chunk7VP5JZCLcjs.a.call(void 0, p,{strictDates:o,strictNumeric:r,types:f,operationIds:c});if(i.mkdirSync(n.dirname(a),{recursive:!0}),i.writeFileSync(a,l.output),console.log(`\u2705 Generated TypeScript types in ${a}`),console.log(`\u{1F4C4} Processed ${Object.keys(p.paths||{}).length} paths`),p.webhooks&&console.log(`\u{1FA9D} Processed ${Object.keys(p.webhooks).length} webhooks`),l.helperFile){let u=n.isAbsolute(l.helperFile.path)?l.helperFile.path:n.resolve(n.dirname(a),l.helperFile.path),y=n.resolve(a),C=n.resolve(u);if(y===C){console.warn(`\u26A0\uFE0F Skipping helper file generation: would overwrite main output at ${y}`);return}i.mkdirSync(n.dirname(u),{recursive:!0}),i.writeFileSync(u,l.helperFile.content,{encoding:"utf8"}),console.log(`\u{1F4E6} Generated helper types in ${u}`)}}function P(t){if(!i.existsSync(t))throw new Error(`Input file not found: ${t}`);let e=i.readFileSync(t,"utf8");return t.endsWith(".yaml")||t.endsWith(".yml")?Bun.YAML.parse(e):JSON.parse(e)}F().catch(t=>{console.error("\u274C Error:",t),process.exit(1)});
2
+ "use strict"; function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }var _chunkXXHDWDVYcjs = require('./chunk-XXHDWDVY.cjs');var _fs = require('fs'); var i = _interopRequireWildcard(_fs);var _path = require('path'); var n = _interopRequireWildcard(_path);var _url = require('url');async function S(){let t=process.argv.slice(2),e=E(t);if(e.showHelp||!e.configPath&&e.positional.length===0){m(),process.exit(e.showHelp?0:1);return}try{if(e.configPath)await v(e);else{if(e.positional.length!==2){m(),process.exit(1);return}let[s,o]=e.positional;if(!s||!o){m(),process.exit(1);return}await C({inputFile:s,outputFile:o,strictDates:e.strictDates,strictNumeric:e.strictNumeric})}}catch(s){console.error("\u274C Error:",s),process.exit(1)}}function E(t){let e={showHelp:!1,strictDates:!1,strictNumeric:!1,positional:[]};for(let s=0;s<t.length;s+=1){let o=t[s];if(o==="-h"||o==="--help"){e.showHelp=!0;continue}if(o==="--strict-dates"){e.strictDates=!0;continue}if(o==="--strict-numeric"){e.strictNumeric=!0;continue}if(o==="--config"||o==="-c"){let r=t[s+1];if(!r)throw new Error("--config flag requires a file path");e.configPath=r,s+=1;continue}e.positional.push(o)}return e}function m(){console.log("Usage:"),console.log(" zenko <input-file> <output-file> [options]"),console.log(" zenko --config <config-file> [options]"),console.log(""),console.log("Options:"),console.log(" -h, --help Show this help message"),console.log(" --strict-dates Use ISO datetime parsing (can be set per config entry)"),console.log(" --strict-numeric Preserve numeric min/max bounds (can be set per config entry)"),console.log(" -c, --config Path to config file (JSON, YAML, or JS module)"),console.log(""),console.log("Config file format:"),console.log(' {"types"?: { emit?, helpers?, helpersOutput?, optionalType?, treeShake? }, "schemas": [{ input, output, strictDates?, strictNumeric?, types? }] }')}async function v(t){let e=t.configPath,s=n.resolve(e),o=await A(s);N(o);let r=n.dirname(s),f=o.types;for(let c of o.schemas){let g=w(c.input,r),h=w(c.output,r),p=O(f,c.types);await C({inputFile:g,outputFile:h,strictDates:_nullishCoalesce(c.strictDates, () => (t.strictDates)),strictNumeric:_nullishCoalesce(c.strictNumeric, () => (t.strictNumeric)),typesConfig:p,operationIds:c.operationIds,openEnums:c.openEnums})}}async function A(t){let e=n.extname(t).toLowerCase();if(e===".json"){let r=i.readFileSync(t,"utf8");return JSON.parse(r)}if(e===".yaml"||e===".yml"){let r=i.readFileSync(t,"utf8");return Bun.YAML.parse(r)}let o=await Promise.resolve().then(() => _interopRequireWildcard(require(_url.pathToFileURL.call(void 0, t).href)));return _nullishCoalesce(_nullishCoalesce(o.default, () => (o.config)), () => (o))}function N(t){if(!t||typeof t!="object")throw new Error("Config file must export an object");if(!Array.isArray(t.schemas))throw new Error("Config file must contain a 'schemas' array");for(let e of t.schemas){if(!e||typeof e!="object")throw new Error("Each schema entry must be an object");if(typeof e.input!="string"||typeof e.output!="string")throw new Error("Each schema entry requires 'input' and 'output' paths")}}function w(t,e){return n.isAbsolute(t)?t:n.join(e,t)}function O(t,e){if(!(!t&&!e))return{...t,...e}}async function C(t){let{inputFile:e,outputFile:s,strictDates:o,strictNumeric:r,typesConfig:f,operationIds:c,openEnums:g}=t,h=n.resolve(e),p=n.resolve(s),l=P(h),a=_chunkXXHDWDVYcjs.a.call(void 0, l,{strictDates:o,strictNumeric:r,types:f,operationIds:c,openEnums:g});if(i.mkdirSync(n.dirname(p),{recursive:!0}),i.writeFileSync(p,a.output),console.log(`\u2705 Generated TypeScript types in ${p}`),console.log(`\u{1F4C4} Processed ${Object.keys(l.paths||{}).length} paths`),l.webhooks&&console.log(`\u{1FA9D} Processed ${Object.keys(l.webhooks).length} webhooks`),a.helperFile){let u=n.isAbsolute(a.helperFile.path)?a.helperFile.path:n.resolve(n.dirname(p),a.helperFile.path),y=n.resolve(p),b=n.resolve(u);if(y===b){console.warn(`\u26A0\uFE0F Skipping helper file generation: would overwrite main output at ${y}`);return}i.mkdirSync(n.dirname(u),{recursive:!0}),i.writeFileSync(u,a.helperFile.content,{encoding:"utf8"}),console.log(`\u{1F4E6} Generated helper types in ${u}`)}}function P(t){if(!i.existsSync(t))throw new Error(`Input file not found: ${t}`);let e=i.readFileSync(t,"utf8");return t.endsWith(".yaml")||t.endsWith(".yml")?Bun.YAML.parse(e):JSON.parse(e)}S().catch(t=>{console.error("\u274C Error:",t),process.exit(1)});
3
3
  //# sourceMappingURL=cli.cjs.map
package/dist/cli.mjs CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- import{a as m}from"./chunk-NZMYX32P.mjs";import*as i from"fs";import*as n from"path";import{pathToFileURL as b}from"url";async function F(){let t=process.argv.slice(2),e=S(t);if(e.showHelp||!e.configPath&&e.positional.length===0){h(),process.exit(e.showHelp?0:1);return}try{if(e.configPath)await v(e);else{if(e.positional.length!==2){h(),process.exit(1);return}let[s,o]=e.positional;if(!s||!o){h(),process.exit(1);return}await w({inputFile:s,outputFile:o,strictDates:e.strictDates,strictNumeric:e.strictNumeric})}}catch(s){console.error("\u274C Error:",s),process.exit(1)}}function S(t){let e={showHelp:!1,strictDates:!1,strictNumeric:!1,positional:[]};for(let s=0;s<t.length;s+=1){let o=t[s];if(o==="-h"||o==="--help"){e.showHelp=!0;continue}if(o==="--strict-dates"){e.strictDates=!0;continue}if(o==="--strict-numeric"){e.strictNumeric=!0;continue}if(o==="--config"||o==="-c"){let r=t[s+1];if(!r)throw new Error("--config flag requires a file path");e.configPath=r,s+=1;continue}e.positional.push(o)}return e}function h(){console.log("Usage:"),console.log(" zenko <input-file> <output-file> [options]"),console.log(" zenko --config <config-file> [options]"),console.log(""),console.log("Options:"),console.log(" -h, --help Show this help message"),console.log(" --strict-dates Use ISO datetime parsing (can be set per config entry)"),console.log(" --strict-numeric Preserve numeric min/max bounds (can be set per config entry)"),console.log(" -c, --config Path to config file (JSON, YAML, or JS module)"),console.log(""),console.log("Config file format:"),console.log(' {"types"?: { emit?, helpers?, helpersOutput?, optionalType?, treeShake? }, "schemas": [{ input, output, strictDates?, strictNumeric?, types? }] }')}async function v(t){let e=t.configPath,s=n.resolve(e),o=await A(s);N(o);let r=n.dirname(s),f=o.types;for(let c of o.schemas){let g=d(c.input,r),a=d(c.output,r),p=O(f,c.types);await w({inputFile:g,outputFile:a,strictDates:c.strictDates??t.strictDates,strictNumeric:c.strictNumeric??t.strictNumeric,typesConfig:p,operationIds:c.operationIds})}}async function A(t){let e=n.extname(t).toLowerCase();if(e===".json"){let r=i.readFileSync(t,"utf8");return JSON.parse(r)}if(e===".yaml"||e===".yml"){let r=i.readFileSync(t,"utf8");return Bun.YAML.parse(r)}let o=await import(b(t).href);return o.default??o.config??o}function N(t){if(!t||typeof t!="object")throw new Error("Config file must export an object");if(!Array.isArray(t.schemas))throw new Error("Config file must contain a 'schemas' array");for(let e of t.schemas){if(!e||typeof e!="object")throw new Error("Each schema entry must be an object");if(typeof e.input!="string"||typeof e.output!="string")throw new Error("Each schema entry requires 'input' and 'output' paths")}}function d(t,e){return n.isAbsolute(t)?t:n.join(e,t)}function O(t,e){if(!(!t&&!e))return{...t,...e}}async function w(t){let{inputFile:e,outputFile:s,strictDates:o,strictNumeric:r,typesConfig:f,operationIds:c}=t,g=n.resolve(e),a=n.resolve(s),p=P(g),l=m(p,{strictDates:o,strictNumeric:r,types:f,operationIds:c});if(i.mkdirSync(n.dirname(a),{recursive:!0}),i.writeFileSync(a,l.output),console.log(`\u2705 Generated TypeScript types in ${a}`),console.log(`\u{1F4C4} Processed ${Object.keys(p.paths||{}).length} paths`),p.webhooks&&console.log(`\u{1FA9D} Processed ${Object.keys(p.webhooks).length} webhooks`),l.helperFile){let u=n.isAbsolute(l.helperFile.path)?l.helperFile.path:n.resolve(n.dirname(a),l.helperFile.path),y=n.resolve(a),C=n.resolve(u);if(y===C){console.warn(`\u26A0\uFE0F Skipping helper file generation: would overwrite main output at ${y}`);return}i.mkdirSync(n.dirname(u),{recursive:!0}),i.writeFileSync(u,l.helperFile.content,{encoding:"utf8"}),console.log(`\u{1F4E6} Generated helper types in ${u}`)}}function P(t){if(!i.existsSync(t))throw new Error(`Input file not found: ${t}`);let e=i.readFileSync(t,"utf8");return t.endsWith(".yaml")||t.endsWith(".yml")?Bun.YAML.parse(e):JSON.parse(e)}F().catch(t=>{console.error("\u274C Error:",t),process.exit(1)});
2
+ import{a as d}from"./chunk-64LDA5YF.mjs";import*as i from"fs";import*as n from"path";import{pathToFileURL as F}from"url";async function S(){let t=process.argv.slice(2),e=E(t);if(e.showHelp||!e.configPath&&e.positional.length===0){m(),process.exit(e.showHelp?0:1);return}try{if(e.configPath)await v(e);else{if(e.positional.length!==2){m(),process.exit(1);return}let[s,o]=e.positional;if(!s||!o){m(),process.exit(1);return}await C({inputFile:s,outputFile:o,strictDates:e.strictDates,strictNumeric:e.strictNumeric})}}catch(s){console.error("\u274C Error:",s),process.exit(1)}}function E(t){let e={showHelp:!1,strictDates:!1,strictNumeric:!1,positional:[]};for(let s=0;s<t.length;s+=1){let o=t[s];if(o==="-h"||o==="--help"){e.showHelp=!0;continue}if(o==="--strict-dates"){e.strictDates=!0;continue}if(o==="--strict-numeric"){e.strictNumeric=!0;continue}if(o==="--config"||o==="-c"){let r=t[s+1];if(!r)throw new Error("--config flag requires a file path");e.configPath=r,s+=1;continue}e.positional.push(o)}return e}function m(){console.log("Usage:"),console.log(" zenko <input-file> <output-file> [options]"),console.log(" zenko --config <config-file> [options]"),console.log(""),console.log("Options:"),console.log(" -h, --help Show this help message"),console.log(" --strict-dates Use ISO datetime parsing (can be set per config entry)"),console.log(" --strict-numeric Preserve numeric min/max bounds (can be set per config entry)"),console.log(" -c, --config Path to config file (JSON, YAML, or JS module)"),console.log(""),console.log("Config file format:"),console.log(' {"types"?: { emit?, helpers?, helpersOutput?, optionalType?, treeShake? }, "schemas": [{ input, output, strictDates?, strictNumeric?, types? }] }')}async function v(t){let e=t.configPath,s=n.resolve(e),o=await A(s);N(o);let r=n.dirname(s),f=o.types;for(let c of o.schemas){let g=w(c.input,r),h=w(c.output,r),p=O(f,c.types);await C({inputFile:g,outputFile:h,strictDates:c.strictDates??t.strictDates,strictNumeric:c.strictNumeric??t.strictNumeric,typesConfig:p,operationIds:c.operationIds,openEnums:c.openEnums})}}async function A(t){let e=n.extname(t).toLowerCase();if(e===".json"){let r=i.readFileSync(t,"utf8");return JSON.parse(r)}if(e===".yaml"||e===".yml"){let r=i.readFileSync(t,"utf8");return Bun.YAML.parse(r)}let o=await import(F(t).href);return o.default??o.config??o}function N(t){if(!t||typeof t!="object")throw new Error("Config file must export an object");if(!Array.isArray(t.schemas))throw new Error("Config file must contain a 'schemas' array");for(let e of t.schemas){if(!e||typeof e!="object")throw new Error("Each schema entry must be an object");if(typeof e.input!="string"||typeof e.output!="string")throw new Error("Each schema entry requires 'input' and 'output' paths")}}function w(t,e){return n.isAbsolute(t)?t:n.join(e,t)}function O(t,e){if(!(!t&&!e))return{...t,...e}}async function C(t){let{inputFile:e,outputFile:s,strictDates:o,strictNumeric:r,typesConfig:f,operationIds:c,openEnums:g}=t,h=n.resolve(e),p=n.resolve(s),l=P(h),a=d(l,{strictDates:o,strictNumeric:r,types:f,operationIds:c,openEnums:g});if(i.mkdirSync(n.dirname(p),{recursive:!0}),i.writeFileSync(p,a.output),console.log(`\u2705 Generated TypeScript types in ${p}`),console.log(`\u{1F4C4} Processed ${Object.keys(l.paths||{}).length} paths`),l.webhooks&&console.log(`\u{1FA9D} Processed ${Object.keys(l.webhooks).length} webhooks`),a.helperFile){let u=n.isAbsolute(a.helperFile.path)?a.helperFile.path:n.resolve(n.dirname(p),a.helperFile.path),y=n.resolve(p),b=n.resolve(u);if(y===b){console.warn(`\u26A0\uFE0F Skipping helper file generation: would overwrite main output at ${y}`);return}i.mkdirSync(n.dirname(u),{recursive:!0}),i.writeFileSync(u,a.helperFile.content,{encoding:"utf8"}),console.log(`\u{1F4E6} Generated helper types in ${u}`)}}function P(t){if(!i.existsSync(t))throw new Error(`Input file not found: ${t}`);let e=i.readFileSync(t,"utf8");return t.endsWith(".yaml")||t.endsWith(".yml")?Bun.YAML.parse(e):JSON.parse(e)}S().catch(t=>{console.error("\u274C Error:",t),process.exit(1)});
3
3
  //# sourceMappingURL=cli.mjs.map
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunk7VP5JZCLcjs = require('./chunk-7VP5JZCL.cjs');exports.generate = _chunk7VP5JZCLcjs.b;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkXXHDWDVYcjs = require('./chunk-XXHDWDVY.cjs');exports.generate = _chunkXXHDWDVYcjs.b;
2
2
  //# sourceMappingURL=index.cjs.map
package/dist/index.d.cts CHANGED
@@ -16,11 +16,16 @@ type TypesConfig = {
16
16
  treeShake?: boolean;
17
17
  optionalType?: "optional" | "nullable" | "nullish";
18
18
  };
19
+ type EnumConfig = {
20
+ open?: boolean | string[];
21
+ unknownPrefix?: string;
22
+ };
19
23
  type GenerateOptions = {
20
24
  strictDates?: boolean;
21
25
  strictNumeric?: boolean;
22
26
  types?: TypesConfig;
23
27
  operationIds?: string[];
28
+ openEnums?: boolean | string[] | EnumConfig;
24
29
  };
25
30
  /**
26
31
  * Generates TypeScript client code from an OpenAPI specification.
package/dist/index.d.ts CHANGED
@@ -16,11 +16,16 @@ type TypesConfig = {
16
16
  treeShake?: boolean;
17
17
  optionalType?: "optional" | "nullable" | "nullish";
18
18
  };
19
+ type EnumConfig = {
20
+ open?: boolean | string[];
21
+ unknownPrefix?: string;
22
+ };
19
23
  type GenerateOptions = {
20
24
  strictDates?: boolean;
21
25
  strictNumeric?: boolean;
22
26
  types?: TypesConfig;
23
27
  operationIds?: string[];
28
+ openEnums?: boolean | string[] | EnumConfig;
24
29
  };
25
30
  /**
26
31
  * Generates TypeScript client code from an OpenAPI specification.
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import{b as e}from"./chunk-NZMYX32P.mjs";export{e as generate};
1
+ import{b as e}from"./chunk-64LDA5YF.mjs";export{e as generate};
2
2
  //# sourceMappingURL=index.mjs.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zenko",
3
- "version": "0.1.13",
3
+ "version": "0.1.14",
4
4
  "description": "Generate TypeScript types and path functions from OpenAPI specs",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.mjs",
@@ -1,8 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }function L(e){let n=new Set,t=new Set,r=[],o=i=>{if(n.has(i)||t.has(i))return;t.add(i);let s=e[i],u=P(s);for(let a of u)e[a]&&o(a);t.delete(i),n.add(i),r.push(i)};for(let i of Object.keys(e))o(i);return r}function P(e){let n=[],t=r=>{if(!(typeof r!="object"||r===null)){if(r.$ref&&typeof r.$ref=="string"){let o=g(r.$ref);n.push(o);return}Array.isArray(r)?r.forEach(t):Object.values(r).forEach(t)}};return t(e),[...new Set(n)]}function g(e){return e.split("/").pop()||"Unknown"}function I(e){if(!e)return!1;let n=e.at(0);return n===void 0||!/[a-zA-Z_$]/.test(n)||!/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(e)?!1:!new Set(["abstract","arguments","await","boolean","break","byte","case","catch","char","class","const","continue","debugger","default","delete","do","double","else","enum","eval","export","extends","false","final","finally","float","for","function","goto","if","implements","import","in","instanceof","int","interface","let","long","native","new","null","package","private","protected","public","return","short","static","super","switch","synchronized","this","throw","throws","transient","true","try","typeof","var","void","volatile","while","with","yield","async"]).has(e)}function y(e){return I(e)?e:`"${e}"`}function $(e){return e.replace(/-([a-zA-Z])/g,(n,t)=>t.toUpperCase()).replace(/-+$/,"")}function w(e){return e.charAt(0).toUpperCase()+e.slice(1)}function M(e){let n={usesHeaderFn:!1,usesOperationDefinition:!1,usesOperationErrors:!1};e.length>0&&(n.usesOperationDefinition=!0);for(let t of e)t.errors&&U(t.errors)&&(n.usesOperationErrors=!0);return e.length>0&&!n.usesOperationErrors&&e.some(r=>!r.errors||!U(r.errors))&&(n.usesOperationErrors=!0),n}function H(e,n,t){let r=[];if(e.usesHeaderFn&&r.push("HeaderFn"),e.usesOperationDefinition&&r.push("OperationDefinition"),e.usesOperationErrors&&r.push("OperationErrors"),r.length===0)return"";let o=n==="package"?'"zenko"':`"${t}"`;return`import type { ${r.join(", ")} } from ${o};`}function U(e){return!!(e&&Object.keys(e).length>0)}var q={"application/json":"unknown","text/csv":"string","text/plain":"string","application/octet-stream":"unknown","application/pdf":"unknown"};function z(e){let n=Object.keys(e);if(n.includes("application/json"))return"application/json";for(let t of n)if(t in q)return t;return n[0]||""}function E(e,n){if(e){if(e.$ref){let t=g(e.$ref),r=_optionalChain([n, 'access', _2 => _2.components, 'optionalAccess', _3 => _3.parameters, 'optionalAccess', _4 => _4[t]]);if(!r)return;let{$ref:o,...i}=e;return{...r,...i}}return e}}function Q(e,n){let t=new Set,r=new Map;for(let[,s]of Object.entries(n.paths||{}))for(let[,u]of Object.entries(s)){let a=u;a.operationId&&r.set(a.operationId,a)}for(let[,s]of Object.entries(n.webhooks||{}))for(let[,u]of Object.entries(s)){let a=u;a.operationId&&r.set(a.operationId,a)}for(let s of e){let u=r.get(s.operationId);if(!u)continue;let a=_optionalChain([u, 'access', _5 => _5.requestBody, 'optionalAccess', _6 => _6.content, 'optionalAccess', _7 => _7["application/json"], 'optionalAccess', _8 => _8.schema]);if(_optionalChain([a, 'optionalAccess', _9 => _9.$ref])){let f=g(a.$ref);t.add(f)}else if(a){let f=P(a);for(let p of f)_optionalChain([n, 'access', _10 => _10.components, 'optionalAccess', _11 => _11.schemas, 'optionalAccess', _12 => _12[p]])&&t.add(p)}let l=u.responses||{};for(let[,f]of Object.entries(l)){let p=_optionalChain([f, 'optionalAccess', _13 => _13.content]);if(!p)continue;let c=z(p),h=_optionalChain([p, 'access', _14 => _14[c], 'optionalAccess', _15 => _15.schema]);if(_optionalChain([h, 'optionalAccess', _16 => _16.$ref])){let O=g(h.$ref);t.add(O)}else if(h){let O=P(h);for(let T of O)_optionalChain([n, 'access', _17 => _17.components, 'optionalAccess', _18 => _18.schemas, 'optionalAccess', _19 => _19[T]])&&t.add(T)}}for(let f of s.queryParams){if(_optionalChain([f, 'access', _20 => _20.schema, 'optionalAccess', _21 => _21.$ref])){let p=g(f.schema.$ref);t.add(p)}if(_optionalChain([f, 'access', _22 => _22.schema, 'optionalAccess', _23 => _23.items, 'optionalAccess', _24 => _24.$ref])){let p=g(f.schema.items.$ref);t.add(p)}}for(let f of s.requestHeaders||[]){if(_optionalChain([f, 'access', _25 => _25.schema, 'optionalAccess', _26 => _26.$ref])){let p=g(f.schema.$ref);t.add(p)}if(_optionalChain([f, 'access', _27 => _27.schema, 'optionalAccess', _28 => _28.items, 'optionalAccess', _29 => _29.$ref])){let p=g(f.schema.items.$ref);t.add(p)}}let m=u.parameters||[];for(let f of m){let p=E(f,n);if(_optionalChain([p, 'optionalAccess', _30 => _30.schema, 'optionalAccess', _31 => _31.$ref])){let c=g(p.schema.$ref);t.add(c)}if(_optionalChain([p, 'optionalAccess', _32 => _32.schema, 'optionalAccess', _33 => _33.items, 'optionalAccess', _34 => _34.$ref])){let c=g(p.schema.items.$ref);t.add(c)}}}let o=new Set,i=Array.from(t);for(;i.length>0;){let s=i.pop();if(o.has(s))continue;o.add(s);let u=_optionalChain([n, 'access', _35 => _35.components, 'optionalAccess', _36 => _36.schemas, 'optionalAccess', _37 => _37[s]]);if(!u)continue;let a=P(u);for(let l of a)_optionalChain([n, 'access', _38 => _38.components, 'optionalAccess', _39 => _39.schemas, 'optionalAccess', _40 => _40[l]])&&!o.has(l)&&(t.add(l),i.push(l))}return t}function C(e,n){switch(n){case"optional":return`${e}.optional()`;case"nullable":return`${e}.nullable()`;case"nullish":return`${e}.nullish()`}}function k(e,n,t,r,o){if(t.has(e))return"";if(t.add(e),n.enum){let i=n.enum.map(s=>`"${s}"`).join(", ");return`export const ${e} = z.enum([${i}]);`}if(n.allOf&&Array.isArray(n.allOf)){let i=n.allOf.map(a=>R(a,r,o));if(i.length===0)return`export const ${e} = z.object({});`;if(i.length===1)return`export const ${e} = ${i[0]};`;let s=i[0],u=i.slice(1).map(a=>`.and(${a})`).join("");return`export const ${e} = ${s}${u};`}if(n.type==="object"||n.properties)return`export const ${e} = ${V(n,r,o)};`;if(n.type==="array"){let i=_nullishCoalesce(n.items, () => ({type:"unknown"})),s=R(i,r,o),u=Se(n,`z.array(${s})`,i,r.strictNumeric);return`export const ${e} = ${u};`}return`export const ${e} = ${R(n,r,o)};`}function R(e,n,t){if(e.$ref){let r=g(e.$ref);return _optionalChain([t, 'optionalAccess', _41 => _41.get, 'call', _42 => _42(r)])||r}if(e.enum)return`z.enum([${e.enum.map(o=>`"${o}"`).join(", ")}])`;if(e.allOf&&Array.isArray(e.allOf)){let r=e.allOf.map(s=>R(s,n,t));if(r.length===0)return"z.object({})";if(r.length===1)return r[0];let o=r[0],i=r.slice(1).map(s=>`.and(${s})`).join("");return`${o}${i}`}if(e.type==="object"||e.properties||e.allOf||e.oneOf||e.anyOf)return V(e,n,t);switch(e.type){case"string":return $e(e,n);case"boolean":return"z.boolean()";case"array":return`z.array(${R(_nullishCoalesce(e.items, () => ({type:"unknown"})),n,t)})`;case"null":return"z.null()";case"number":return W(e,n);case"integer":return Te(e,n);default:return"z.unknown()"}}function V(e,n,t){let r=[];for(let[o,i]of Object.entries(e.properties||{})){let s=_nullishCoalesce(_optionalChain([e, 'access', _43 => _43.required, 'optionalAccess', _44 => _44.includes, 'call', _45 => _45(o)]), () => (!1)),u=R(i,n,t),a=C(u,n.optionalType),l=n.optionalType!=="nullable"?Oe(a,i):a,m=s?u:l;r.push(` ${y(o)}: ${m},`)}return r.length===0?"z.object({})":`z.object({
2
- ${r.join(`
3
- `)}
4
- })`}function $e(e,n){if(e.format==="binary")return'(typeof Blob === "undefined" ? z.unknown() : z.instanceof(Blob))';if(n.strictDates)switch(e.format){case"date-time":return"z.string().datetime()";case"date":return"z.string().date()";case"time":return"z.string().time()";case"duration":return"z.string().duration()"}let t="z.string()";switch(n.strictNumeric&&(typeof e.minLength=="number"&&(t+=`.min(${e.minLength})`),typeof e.maxLength=="number"&&(t+=`.max(${e.maxLength})`),e.pattern&&(t+=`.regex(new RegExp(${JSON.stringify(e.pattern)}))`)),e.format){case"uuid":return`${t}.uuid()`;case"email":return`${t}.email()`;case"uri":case"url":return`${t}.url()`;case"ipv4":return`${t}.ip({ version: "v4" })`;case"ipv6":return`${t}.ip({ version: "v6" })`;default:return t}}function Oe(e,n){return!n||n.default===void 0?e:`${e}.default(${JSON.stringify(n.default)})`}function W(e,n){let t="z.number()";return n.strictNumeric&&(t=Ie(e,t),typeof e.multipleOf=="number"&&e.multipleOf!==0&&(t+=`.refine((value) => Math.abs(value / ${e.multipleOf} - Math.round(value / ${e.multipleOf})) < Number.EPSILON, { message: "Must be a multiple of ${e.multipleOf}" })`)),t}function Te(e,n){let t=W(e,n);return t+=".int()",t}function Se(e,n,t,r){return r&&(typeof e.minItems=="number"&&(n+=`.min(${e.minItems})`),typeof e.maxItems=="number"&&(n+=`.max(${e.maxItems})`),e.uniqueItems&&xe(t)&&(n+='.refine((items) => new Set(items).size === items.length, { message: "Items must be unique" })')),n}function xe(e){return _optionalChain([e, 'optionalAccess', _46 => _46.$ref])?!1:new Set(["string","number","integer","boolean"]).has(_optionalChain([e, 'optionalAccess', _47 => _47.type]))}function Ie(e,n){return typeof e.minimum=="number"?e.exclusiveMinimum===!0?n+=`.gt(${e.minimum})`:n+=`.min(${e.minimum})`:typeof e.exclusiveMinimum=="number"&&(n+=`.gt(${e.exclusiveMinimum})`),typeof e.maximum=="number"?e.exclusiveMaximum===!0?n+=`.lt(${e.maximum})`:n+=`.max(${e.maximum})`:typeof e.exclusiveMaximum=="number"&&(n+=`.lt(${e.exclusiveMaximum})`),n}var we={400:"badRequest",401:"unauthorized",402:"paymentRequired",403:"forbidden",404:"notFound",405:"methodNotAllowed",406:"notAcceptable",407:"proxyAuthenticationRequired",408:"requestTimeout",409:"conflict",410:"gone",411:"lengthRequired",412:"preconditionFailed",413:"payloadTooLarge",414:"uriTooLong",415:"unsupportedMediaType",416:"rangeNotSatisfiable",417:"expectationFailed",418:"imATeapot",421:"misdirectedRequest",422:"unprocessableEntity",423:"locked",424:"failedDependency",425:"tooEarly",426:"upgradeRequired",428:"preconditionRequired",429:"tooManyRequests",431:"requestHeaderFieldsTooLarge",451:"unavailableForLegalReasons",500:"internalServerError",501:"notImplemented",502:"badGateway",503:"serviceUnavailable",504:"gatewayTimeout",505:"httpVersionNotSupported",506:"variantAlsoNegotiates",507:"insufficientStorage",508:"loopDetected",510:"notExtended",511:"networkAuthenticationRequired"};function J(e){if(e==="default")return"defaultError";let n=e.trim(),t=we[n];if(t)return t;if(/^\d{3}$/.test(n))return`status${n}`;let r=n.toLowerCase().replace(/[^a-z0-9]+/g," ").trim();if(!r)return"unknownError";let o=r.split(/\s+/),[i,...s]=o,u=i+s.map(a=>a.charAt(0).toUpperCase()+a.slice(1)).join("");return u?/^[a-zA-Z_$]/.test(u)?u:`status${u.charAt(0).toUpperCase()}${u.slice(1)}`:"unknownError"}function v(e){if(e==="default")return!0;let n=Number(e);return Number.isInteger(n)?n>=400:!1}function oe(e,n){let t=[];if(e.paths)for(let[r,o]of Object.entries(e.paths))for(let[i,s]of Object.entries(o)){let u=i.toLowerCase();if(!re(u)||!s.operationId)continue;let a=K(r),l=X(s,n),{successResponse:m,errors:f}=ee(s,s.operationId,n),p=Y(o,s,e),c=te(p),h=ne(p);t.push({operationId:s.operationId,path:r,method:u,pathParams:a,queryParams:h,requestType:l,responseType:m,requestHeaders:c,errors:f})}if(e.webhooks)for(let[r,o]of Object.entries(e.webhooks))for(let[i,s]of Object.entries(o)){let u=i.toLowerCase();if(!re(u)||!s.operationId)continue;let a=r,l=K(a),m=X(s,n),{successResponse:f,errors:p}=ee(s,s.operationId,n),c=Y(o,s,e),h=te(c),O=ne(c);t.push({operationId:s.operationId,path:a,method:u,pathParams:l,queryParams:O,requestType:m,responseType:f,requestHeaders:h,errors:p})}return t}function Y(e,n,t){let r=new Map,o=i=>{if(Array.isArray(i))for(let s of i){let u=E(s,t);if(!u)continue;let a=`${u.in}:${u.name}`;r.set(a,u)}};return o(e.parameters),o(n.parameters),Array.from(r.values())}function K(e){let n=[],t=e.match(/{([^}]+)}/g);if(t)for(let r of t){let o=r.slice(1,-1);n.push({name:o,type:"string"})}return n}function X(e,n){let t=be(e);if(!t)return;if(t.$ref){let o=g(t.$ref);return _optionalChain([n, 'optionalAccess', _48 => _48.get, 'call', _49 => _49(o)])||o}return`${w($(e.operationId))}Request`}function be(e){let n=_optionalChain([e, 'optionalAccess', _50 => _50.requestBody, 'optionalAccess', _51 => _51.content]);if(!n||Object.keys(n).length===0)return;let t=["application/json","multipart/form-data","application/x-www-form-urlencoded"];for(let r of t){let o=_optionalChain([n, 'access', _52 => _52[r], 'optionalAccess', _53 => _53.schema]);if(o)return o}}function ee(e,n,t){let r=_nullishCoalesce(e.responses, () => ({})),o=new Map,i=[];for(let[a,l]of Object.entries(r)){let m=_optionalChain([l, 'optionalAccess', _54 => _54.content]);if(!m||Object.keys(m).length===0){a==="204"||/^3\d\d$/.test(a)?o.set(a,"undefined"):v(a)&&i.push({code:a,schema:"undefined"});continue}let f=z(m),p=_optionalChain([m, 'access', _55 => _55[f], 'optionalAccess', _56 => _56.schema]);if(!p){let c=ke(f,a);c&&(v(a)?i.push({code:a,schema:c}):/^2\d\d$/.test(a)&&o.set(a,c));continue}if(v(a)){i.push({code:a,schema:p});continue}/^2\d\d$/.test(a)&&o.set(a,p)}let s=Re(o,n,t),u=Pe(i,n,t);return{successResponse:s,errors:u}}function Re(e,n,t){if(e.size===0)return;let r=["200","201","204"];for(let i of r){let s=e.get(i);if(s)return typeof s=="string"?s:F(s,`${w($(n))}Response`,t)}let[,o]=_nullishCoalesce(e.entries().next().value, () => ([]));if(o)return typeof o=="string"?o:F(o,`${w($(n))}Response`,t)}function Pe(e=[],n,t){if(!e.length)return;let r={};for(let{code:o,schema:i}of e){let s=J(o),u=F(i,`${w($(n))}${w(s)}`,t);r[s]=u}return r}function F(e,n,t){if(typeof e=="string")return e;if(e.$ref){let r=g(e.$ref);return _optionalChain([t, 'optionalAccess', _57 => _57.get, 'call', _58 => _58(r)])||r}if(e.type==="array"&&_optionalChain([e, 'access', _59 => _59.items, 'optionalAccess', _60 => _60.$ref])){let r=g(e.items.$ref);return`z.array(${_optionalChain([t, 'optionalAccess', _61 => _61.get, 'call', _62 => _62(r)])||r})`}return e.allOf&&Array.isArray(e.allOf),n}function te(e){let n=[];for(let t of _nullishCoalesce(e, () => ([])))t.in==="header"&&n.push({name:t.name,description:t.description,schema:t.schema,required:t.required});return n}function ne(e){let n=[];for(let t of _nullishCoalesce(e, () => ([])))t.in==="query"&&n.push({name:t.name,description:t.description,schema:t.schema,required:t.required});return n}function re(e){switch(e){case"get":case"put":case"post":case"delete":case"options":case"head":case"patch":case"trace":return!0;default:return!1}}function ke(e,n){return n==="204"||/^3\d\d$/.test(n)?"undefined":e in q?q[e]:"unknown"}function se(e,n){let t=new Map,r=new Map;for(let[,o]of Object.entries(n.paths||{}))for(let[,i]of Object.entries(o)){let s=i;s.operationId&&r.set(s.operationId,s)}for(let[,o]of Object.entries(n.webhooks||{}))for(let[,i]of Object.entries(o)){let s=i;s.operationId&&r.set(s.operationId,s)}for(let o of e){let i=r.get(o.operationId);if(!i)continue;let s=i.requestBody;if(s&&s.content){let u=s.content,a=Ae(u);if(!a)continue;let l=`${w($(o.operationId))}Request`;(!a.$ref||a.allOf||a.oneOf||a.anyOf)&&t.set(l,a)}}return t}function Ae(e){let n=["application/json","multipart/form-data","application/x-www-form-urlencoded"];for(let t of n){let r=_optionalChain([e, 'access', _63 => _63[t], 'optionalAccess', _64 => _64.schema]);if(r)return r}}function ie(e,n){let t=new Map,r=new Map;for(let[,o]of Object.entries(n.paths||{}))for(let[,i]of Object.entries(o)){let s=i;s.operationId&&r.set(s.operationId,s)}for(let[,o]of Object.entries(n.webhooks||{}))for(let[,i]of Object.entries(o)){let s=i;s.operationId&&r.set(s.operationId,s)}for(let o of e){let i=r.get(o.operationId);if(!i)continue;let s=i.responses||{};for(let[u,a]of Object.entries(s))if(/^2\d\d$/.test(u)&&a.content){let m=a.content["application/json"];if(m&&m.schema){let f=m.schema,p=`${w($(o.operationId))}Response`;(!f.$ref||f.allOf||f.oneOf||f.anyOf)&&t.set(p,f)}}}return t}function ae(e,n,t,r,o){let i=se(n,t);if(i.size>0){e.push("// Generated Request Types"),e.push("");for(let[s,u]of i){let a=k(s,u,new Set,o,r);e.push(a),e.push(""),e.push(`export type ${s} = z.infer<typeof ${s}>;`),e.push("")}}}function pe(e,n,t,r,o){let i=ie(n,t);if(i.size>0){e.push("// Generated Response Types"),e.push("");for(let[s,u]of i){let a=k(s,u,new Set,o,r);e.push(a),e.push(""),e.push(`export type ${s} = z.infer<typeof ${s}>;`),e.push("")}}}function ue(){let e=[];return e.push("// Generated helper types for Zenko"),e.push("// This file provides type definitions for operation objects and path functions"),e.push(""),e.push("export type PathFn<TArgs extends unknown[] = []> = (...args: TArgs) => string"),e.push(""),e.push('export type RequestMethod = "get" | "put" | "post" | "delete" | "options" | "head" | "patch" | "trace"'),e.push(""),e.push("export type HeaderFn<TArgs extends unknown[] = [], TResult = Record<string, unknown> | Record<string, never>> = (...args: TArgs) => TResult"),e.push(""),e.push("export type AnyHeaderFn = HeaderFn<any, unknown> | (() => unknown)"),e.push(""),e.push("export type OperationErrors<TError = unknown> = TError extends Record<string, unknown> ? TError : Record<string, TError>;"),e.push(""),e.push("export type OperationDefinition<TMethod extends RequestMethod, TPath extends (...args: any[]) => string, TRequest = undefined, TResponse = undefined, THeaders extends AnyHeaderFn | undefined = undefined, TErrors extends OperationErrors | undefined = undefined> = {"),e.push(" method: TMethod"),e.push(" path: TPath"),e.push(" request?: TRequest"),e.push(" response?: TResponse"),e.push(" headers?: THeaders"),e.push(" errors?: TErrors"),e.push("}"),e.push(""),e.join(`
5
- `)}function qe(e,n={}){let t=[],r=new Set,{strictDates:o=!1,strictNumeric:i=!1,operationIds:s}=n,u=Ee(n.types),a={strictDates:o,strictNumeric:i,optionalType:u.optionalType};t.push('import { z } from "zod";');let l=new Map;if(_optionalChain([e, 'access', _65 => _65.components, 'optionalAccess', _66 => _66.schemas]))for(let p of Object.keys(e.components.schemas))l.set(p,$(p));let m=oe(e,l);if(s&&s.length>0){let p=new Set(s);m=m.filter(c=>p.has(c.operationId))}if(ve(t,u,m),t.push(""),_optionalChain([e, 'access', _67 => _67.components, 'optionalAccess', _68 => _68.schemas])){t.push("// Generated Zod Schemas"),t.push("");let p;if(s&&s.length>0){let h=Q(m,e);p=Array.from(h)}else p=Object.keys(e.components.schemas);let c=L(e.components.schemas).filter(h=>p.includes(h));for(let h of c){let O=e.components.schemas[h],T=l.get(h);t.push(k(T,O,r,a,l)),t.push(""),t.push(`export type ${T} = z.infer<typeof ${T}>;`),t.push("")}}t.push("// Path Functions"),t.push("export const paths = {");for(let p of m){let h=p.pathParams.map(d=>d.name).length>0,O=p.queryParams.length>0,T=$(p.operationId);if(!h&&!O){t.push(` ${y(T)}: () => "${p.path}",`);continue}let b=d=>{if(I(d))return d;let S=$(d);return I(S)||(S=`_${S}`),S},A=[],N=[];for(let d of p.pathParams)A.push(I(d.name)?d.name:`${y(d.name)}: ${b(d.name)}`),N.push(`${y(d.name)}: string`);for(let d of p.queryParams)A.push(I(d.name)?d.name:`${y(d.name)}: ${b(d.name)}`),N.push(`${y(d.name)}${d.required?"":"?"}: ${Ce(d)}`);let ge=!h&&O&&p.queryParams.every(d=>!d.required),D=`${A.length?`{ ${A.join(", ")} }`:"{}"}: { ${N.join(", ")} }${ge?" = {}":""}`,Z=p.path.replace(/{([^}]+)}/g,(d,S)=>`\${${b(S)}}`);if(!O){t.push(` ${y(T)}: (${D}) => \`${Z}\`,`);continue}t.push(` ${y(T)}: (${D}) => {`),t.push(" const params = new URLSearchParams()");for(let d of p.queryParams){let S=I(d.name)?d.name:b($(d.name)),j=_nullishCoalesce(d.schema, () => ({}));if(_optionalChain([j, 'optionalAccess', _69 => _69.type])==="array"){let _=fe(_nullishCoalesce(j.items, () => ({})),"value");d.required?(t.push(` for (const value of ${S}) {`),t.push(` params.append("${d.name}", ${_})`),t.push(" }")):(t.push(` if (${S} !== undefined) {`),t.push(` for (const value of ${S}) {`),t.push(` params.append("${d.name}", ${_})`),t.push(" }"),t.push(" }"));continue}let B=fe(j,S);d.required?t.push(` params.set("${d.name}", ${B})`):(t.push(` if (${S} !== undefined) {`),t.push(` params.set("${d.name}", ${B})`),t.push(" }"))}t.push(" const _searchParams = params.toString()"),t.push(` return \`${Z}\${_searchParams ? \`?\${_searchParams}\` : ""}\``),t.push(" },")}t.push("} as const;"),t.push(""),t.push("// Header Schemas"),t.push("export const headerSchemas = {");for(let p of m){let c=$(p.operationId);if(!p.requestHeaders||p.requestHeaders.length===0){t.push(` ${y(c)}: z.object({}),`);continue}let h=p.requestHeaders.map(O=>{let T=He(O),b=O.required?T:C(T,a.optionalType);return` ${y(O.name)}: ${b},`}).join(`
6
- `);t.push(` ${y(c)}: z.object({`),t.push(h),t.push(" }),")}t.push("} as const;"),t.push(""),t.push("// Header Functions"),t.push("export const headers = {");for(let p of m){let c=$(p.operationId);if(!p.requestHeaders||p.requestHeaders.length===0){t.push(` ${y(c)}: () => ${I(c)?`headerSchemas.${c}`:`headerSchemas[${y(c)}]`}.parse({}),`);continue}t.push(` ${y(c)}: (params: z.input<${I(c)?`typeof headerSchemas.${c}`:`(typeof headerSchemas)[${y(c)}]`}>) => {`),t.push(` return ${I(c)?`headerSchemas.${c}`:`headerSchemas[${y(c)}]`}.parse(params)`),t.push(" },")}t.push("} as const;"),t.push(""),ae(t,m,e,l,a),pe(t,m,e,l,a),Ne(t,m,u),t.push("// Operation Objects");for(let p of m){let c=$(p.operationId),h=u.emit?`: ${w(c)}Operation`:"";t.push(`export const ${c}${h} = {`),t.push(` method: "${p.method}",`),t.push(` path: paths.${c},`),ce(t,"request",p.requestType),ce(t,"response",p.responseType),p.requestHeaders&&p.requestHeaders.length>0&&t.push(` headers: headers.${c},`),p.errors&&de(p.errors)&&ze(t,"errors",p.errors),t.push("} as const;"),t.push("")}let f={output:t.join(`
7
- `)};return u.emit&&u.helpers==="file"&&u.helpersOutput&&(f.helperFile={path:u.helpersOutput,content:ue()}),f}function zt(e,n={}){return qe(e,n).output}function ce(e,n,t){t&&e.push(` ${n}: ${t},`)}function ze(e,n,t){if(!(!t||Object.keys(t).length===0)){e.push(` ${n}: {`);for(let[r,o]of Object.entries(t))e.push(` ${y(r)}: ${o},`);e.push(" },")}}function de(e){return!!(e&&Object.keys(e).length>0)}function Ee(e){return{emit:_nullishCoalesce(_optionalChain([e, 'optionalAccess', _70 => _70.emit]), () => (!0)),helpers:_nullishCoalesce(_optionalChain([e, 'optionalAccess', _71 => _71.helpers]), () => ("package")),helpersOutput:_nullishCoalesce(_optionalChain([e, 'optionalAccess', _72 => _72.helpersOutput]), () => ("./zenko-types")),treeShake:_nullishCoalesce(_optionalChain([e, 'optionalAccess', _73 => _73.treeShake]), () => (!0)),optionalType:_nullishCoalesce(_optionalChain([e, 'optionalAccess', _74 => _74.optionalType]), () => ("optional"))}}function ve(e,n,t){if(n.emit)switch(n.helpers){case"package":if(n.treeShake){let r=M(t),o=H(r,"package");o&&e.push(o)}else e.push('import type { PathFn, HeaderFn, OperationDefinition, OperationErrors } from "zenko";');return;case"file":if(n.treeShake){let r=M(t),o=H(r,"file",n.helpersOutput);o&&e.push(o)}else e.push(`import type { PathFn, HeaderFn, OperationDefinition, OperationErrors } from "${n.helpersOutput}";`);return;case"inline":e.push("type PathFn<TArgs extends unknown[] = []> = (...args: TArgs) => string;"),e.push('type RequestMethod = "get" | "put" | "post" | "delete" | "options" | "head" | "patch" | "trace";'),e.push("type HeaderFn<TArgs extends unknown[] = [], TResult = Record<string, unknown> | Record<string, never>> = (...args: TArgs) => TResult;"),e.push("type AnyHeaderFn = HeaderFn<any, unknown> | (() => unknown);"),e.push("type OperationErrors<TError = unknown> = TError extends Record<string, unknown> ? TError : Record<string, TError>;"),e.push("type OperationDefinition<TMethod extends RequestMethod, TPath extends (...args: any[]) => string, TRequest = undefined, TResponse = undefined, THeaders extends AnyHeaderFn | undefined = undefined, TErrors extends OperationErrors | undefined = undefined> = {"),e.push(" method: TMethod"),e.push(" path: TPath"),e.push(" request?: TRequest"),e.push(" response?: TResponse"),e.push(" headers?: THeaders"),e.push(" errors?: TErrors"),e.push("}"),e.push("")}}function Ne(e,n,t){if(t.emit){e.push("// Operation Types");for(let r of n){let o=$(r.operationId),i=_optionalChain([r, 'access', _75 => _75.requestHeaders, 'optionalAccess', _76 => _76.length])?I(o)?`typeof headers.${o}`:`(typeof headers)[${y(o)}]`:"undefined",s=G(r.requestType),u=G(r.responseType),a=je(r.errors);e.push(`export type ${w(o)}Operation = OperationDefinition<`),e.push(` "${r.method}",`),e.push(` ${I(o)?`typeof paths.${o}`:`(typeof paths)[${y(o)}]`},`),e.push(` ${s},`),e.push(` ${u},`),e.push(` ${i},`),e.push(` ${a}`),e.push(">;"),e.push("")}}}function je(e){return!e||!de(e)?"OperationErrors":`OperationErrors<${Me(e)}>`}function Me(e){return!e||Object.keys(e).length===0?"unknown":`{ ${Object.entries(e).map(([r,o])=>{let i=y(r),s=he(o);return`${i}: ${s}`}).join("; ")} }`}var me=new Set(["any","unknown","never","void","null","undefined","string","number","boolean","bigint","symbol"]),le=/^[A-Za-z_$][A-Za-z0-9_$]*$/;function G(e){if(!e)return"undefined";let n=e.trim();if(n==="undefined")return"undefined";if(me.has(n)||n.startsWith("typeof "))return n;let t=n.match(/^z\.array\((.+)\)$/);return t?`z.ZodArray<${G(t[1])}>`:le.test(n)?`typeof ${n}`:n}function he(e){if(!e)return"unknown";let n=e.trim();if(me.has(n)||n.startsWith("typeof "))return n;let t=n.match(/^z\.array\((.+)\)$/);return t?`z.ZodArray<${he(t[1])}>`:le.test(n)?`typeof ${n}`:n}function He(e){let n=_nullishCoalesce(e.schema, () => ({}));switch(n.type){case"integer":case"number":return"z.coerce.number()";case"boolean":return"z.coerce.boolean()";case"array":{let r=_nullishCoalesce(n.items, () => ({type:"string"}));return`z.array(${r.type==="integer"||r.type==="number"?"z.coerce.number()":r.type==="boolean"?"z.coerce.boolean()":"z.string()"})`}default:return"z.string()"}}function Ce(e){return ye(e.schema)}function ye(e){if(!e)return"string";if(e.type==="array")return`Array<${ye(e.items)}>`;switch(e.type){case"integer":case"number":return"number";case"boolean":return"boolean";default:return"string"}}function fe(e,n){if(!e)return`String(${n})`;switch(e.type){case"integer":case"number":return`String(${n})`;case"boolean":return`${n} ? "true" : "false"`;default:return`String(${n})`}}exports.a = qe; exports.b = zt;
8
- //# sourceMappingURL=chunk-7VP5JZCL.cjs.map
@@ -1,8 +0,0 @@
1
- function U(e){let n=new Set,t=new Set,r=[],o=i=>{if(n.has(i)||t.has(i))return;t.add(i);let s=e[i],u=k(s);for(let a of u)e[a]&&o(a);t.delete(i),n.add(i),r.push(i)};for(let i of Object.keys(e))o(i);return r}function k(e){let n=[],t=r=>{if(!(typeof r!="object"||r===null)){if(r.$ref&&typeof r.$ref=="string"){let o=g(r.$ref);n.push(o);return}Array.isArray(r)?r.forEach(t):Object.values(r).forEach(t)}};return t(e),[...new Set(n)]}function g(e){return e.split("/").pop()||"Unknown"}function w(e){if(!e)return!1;let n=e.at(0);return n===void 0||!/[a-zA-Z_$]/.test(n)||!/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(e)?!1:!new Set(["abstract","arguments","await","boolean","break","byte","case","catch","char","class","const","continue","debugger","default","delete","do","double","else","enum","eval","export","extends","false","final","finally","float","for","function","goto","if","implements","import","in","instanceof","int","interface","let","long","native","new","null","package","private","protected","public","return","short","static","super","switch","synchronized","this","throw","throws","transient","true","try","typeof","var","void","volatile","while","with","yield","async"]).has(e)}function y(e){return w(e)?e:`"${e}"`}function $(e){return e.replace(/-([a-zA-Z])/g,(n,t)=>t.toUpperCase()).replace(/-+$/,"")}function b(e){return e.charAt(0).toUpperCase()+e.slice(1)}function H(e){let n={usesHeaderFn:!1,usesOperationDefinition:!1,usesOperationErrors:!1};e.length>0&&(n.usesOperationDefinition=!0);for(let t of e)t.errors&&Q(t.errors)&&(n.usesOperationErrors=!0);return e.length>0&&!n.usesOperationErrors&&e.some(r=>!r.errors||!Q(r.errors))&&(n.usesOperationErrors=!0),n}function C(e,n,t){let r=[];if(e.usesHeaderFn&&r.push("HeaderFn"),e.usesOperationDefinition&&r.push("OperationDefinition"),e.usesOperationErrors&&r.push("OperationErrors"),r.length===0)return"";let o=n==="package"?'"zenko"':`"${t}"`;return`import type { ${r.join(", ")} } from ${o};`}function Q(e){return!!(e&&Object.keys(e).length>0)}var z={"application/json":"unknown","text/csv":"string","text/plain":"string","application/octet-stream":"unknown","application/pdf":"unknown"};function E(e){let n=Object.keys(e);if(n.includes("application/json"))return"application/json";for(let t of n)if(t in z)return t;return n[0]||""}function v(e,n){if(e){if(e.$ref){let t=g(e.$ref),r=n.components?.parameters?.[t];if(!r)return;let{$ref:o,...i}=e;return{...r,...i}}return e}}function V(e,n){let t=new Set,r=new Map;for(let[,s]of Object.entries(n.paths||{}))for(let[,u]of Object.entries(s)){let a=u;a.operationId&&r.set(a.operationId,a)}for(let[,s]of Object.entries(n.webhooks||{}))for(let[,u]of Object.entries(s)){let a=u;a.operationId&&r.set(a.operationId,a)}for(let s of e){let u=r.get(s.operationId);if(!u)continue;let a=u.requestBody?.content?.["application/json"]?.schema;if(a?.$ref){let f=g(a.$ref);t.add(f)}else if(a){let f=k(a);for(let p of f)n.components?.schemas?.[p]&&t.add(p)}let l=u.responses||{};for(let[,f]of Object.entries(l)){let p=f?.content;if(!p)continue;let c=E(p),h=p[c]?.schema;if(h?.$ref){let O=g(h.$ref);t.add(O)}else if(h){let O=k(h);for(let T of O)n.components?.schemas?.[T]&&t.add(T)}}for(let f of s.queryParams){if(f.schema?.$ref){let p=g(f.schema.$ref);t.add(p)}if(f.schema?.items?.$ref){let p=g(f.schema.items.$ref);t.add(p)}}for(let f of s.requestHeaders||[]){if(f.schema?.$ref){let p=g(f.schema.$ref);t.add(p)}if(f.schema?.items?.$ref){let p=g(f.schema.items.$ref);t.add(p)}}let m=u.parameters||[];for(let f of m){let p=v(f,n);if(p?.schema?.$ref){let c=g(p.schema.$ref);t.add(c)}if(p?.schema?.items?.$ref){let c=g(p.schema.items.$ref);t.add(c)}}}let o=new Set,i=Array.from(t);for(;i.length>0;){let s=i.pop();if(o.has(s))continue;o.add(s);let u=n.components?.schemas?.[s];if(!u)continue;let a=k(u);for(let l of a)n.components?.schemas?.[l]&&!o.has(l)&&(t.add(l),i.push(l))}return t}function F(e,n){switch(n){case"optional":return`${e}.optional()`;case"nullable":return`${e}.nullable()`;case"nullish":return`${e}.nullish()`}}function A(e,n,t,r,o){if(t.has(e))return"";if(t.add(e),n.enum){let i=n.enum.map(s=>`"${s}"`).join(", ");return`export const ${e} = z.enum([${i}]);`}if(n.allOf&&Array.isArray(n.allOf)){let i=n.allOf.map(a=>P(a,r,o));if(i.length===0)return`export const ${e} = z.object({});`;if(i.length===1)return`export const ${e} = ${i[0]};`;let s=i[0],u=i.slice(1).map(a=>`.and(${a})`).join("");return`export const ${e} = ${s}${u};`}if(n.type==="object"||n.properties)return`export const ${e} = ${W(n,r,o)};`;if(n.type==="array"){let i=n.items??{type:"unknown"},s=P(i,r,o),u=xe(n,`z.array(${s})`,i,r.strictNumeric);return`export const ${e} = ${u};`}return`export const ${e} = ${P(n,r,o)};`}function P(e,n,t){if(e.$ref){let r=g(e.$ref);return t?.get(r)||r}if(e.enum)return`z.enum([${e.enum.map(o=>`"${o}"`).join(", ")}])`;if(e.allOf&&Array.isArray(e.allOf)){let r=e.allOf.map(s=>P(s,n,t));if(r.length===0)return"z.object({})";if(r.length===1)return r[0];let o=r[0],i=r.slice(1).map(s=>`.and(${s})`).join("");return`${o}${i}`}if(e.type==="object"||e.properties||e.allOf||e.oneOf||e.anyOf)return W(e,n,t);switch(e.type){case"string":return Oe(e,n);case"boolean":return"z.boolean()";case"array":return`z.array(${P(e.items??{type:"unknown"},n,t)})`;case"null":return"z.null()";case"number":return J(e,n);case"integer":return Se(e,n);default:return"z.unknown()"}}function W(e,n,t){let r=[];for(let[o,i]of Object.entries(e.properties||{})){let s=e.required?.includes(o)??!1,u=P(i,n,t),a=F(u,n.optionalType),l=n.optionalType!=="nullable"?Te(a,i):a,m=s?u:l;r.push(` ${y(o)}: ${m},`)}return r.length===0?"z.object({})":`z.object({
2
- ${r.join(`
3
- `)}
4
- })`}function Oe(e,n){if(e.format==="binary")return'(typeof Blob === "undefined" ? z.unknown() : z.instanceof(Blob))';if(n.strictDates)switch(e.format){case"date-time":return"z.string().datetime()";case"date":return"z.string().date()";case"time":return"z.string().time()";case"duration":return"z.string().duration()"}let t="z.string()";switch(n.strictNumeric&&(typeof e.minLength=="number"&&(t+=`.min(${e.minLength})`),typeof e.maxLength=="number"&&(t+=`.max(${e.maxLength})`),e.pattern&&(t+=`.regex(new RegExp(${JSON.stringify(e.pattern)}))`)),e.format){case"uuid":return`${t}.uuid()`;case"email":return`${t}.email()`;case"uri":case"url":return`${t}.url()`;case"ipv4":return`${t}.ip({ version: "v4" })`;case"ipv6":return`${t}.ip({ version: "v6" })`;default:return t}}function Te(e,n){return!n||n.default===void 0?e:`${e}.default(${JSON.stringify(n.default)})`}function J(e,n){let t="z.number()";return n.strictNumeric&&(t=we(e,t),typeof e.multipleOf=="number"&&e.multipleOf!==0&&(t+=`.refine((value) => Math.abs(value / ${e.multipleOf} - Math.round(value / ${e.multipleOf})) < Number.EPSILON, { message: "Must be a multiple of ${e.multipleOf}" })`)),t}function Se(e,n){let t=J(e,n);return t+=".int()",t}function xe(e,n,t,r){return r&&(typeof e.minItems=="number"&&(n+=`.min(${e.minItems})`),typeof e.maxItems=="number"&&(n+=`.max(${e.maxItems})`),e.uniqueItems&&Ie(t)&&(n+='.refine((items) => new Set(items).size === items.length, { message: "Items must be unique" })')),n}function Ie(e){return e?.$ref?!1:new Set(["string","number","integer","boolean"]).has(e?.type)}function we(e,n){return typeof e.minimum=="number"?e.exclusiveMinimum===!0?n+=`.gt(${e.minimum})`:n+=`.min(${e.minimum})`:typeof e.exclusiveMinimum=="number"&&(n+=`.gt(${e.exclusiveMinimum})`),typeof e.maximum=="number"?e.exclusiveMaximum===!0?n+=`.lt(${e.maximum})`:n+=`.max(${e.maximum})`:typeof e.exclusiveMaximum=="number"&&(n+=`.lt(${e.exclusiveMaximum})`),n}var be={400:"badRequest",401:"unauthorized",402:"paymentRequired",403:"forbidden",404:"notFound",405:"methodNotAllowed",406:"notAcceptable",407:"proxyAuthenticationRequired",408:"requestTimeout",409:"conflict",410:"gone",411:"lengthRequired",412:"preconditionFailed",413:"payloadTooLarge",414:"uriTooLong",415:"unsupportedMediaType",416:"rangeNotSatisfiable",417:"expectationFailed",418:"imATeapot",421:"misdirectedRequest",422:"unprocessableEntity",423:"locked",424:"failedDependency",425:"tooEarly",426:"upgradeRequired",428:"preconditionRequired",429:"tooManyRequests",431:"requestHeaderFieldsTooLarge",451:"unavailableForLegalReasons",500:"internalServerError",501:"notImplemented",502:"badGateway",503:"serviceUnavailable",504:"gatewayTimeout",505:"httpVersionNotSupported",506:"variantAlsoNegotiates",507:"insufficientStorage",508:"loopDetected",510:"notExtended",511:"networkAuthenticationRequired"};function Y(e){if(e==="default")return"defaultError";let n=e.trim(),t=be[n];if(t)return t;if(/^\d{3}$/.test(n))return`status${n}`;let r=n.toLowerCase().replace(/[^a-z0-9]+/g," ").trim();if(!r)return"unknownError";let o=r.split(/\s+/),[i,...s]=o,u=i+s.map(a=>a.charAt(0).toUpperCase()+a.slice(1)).join("");return u?/^[a-zA-Z_$]/.test(u)?u:`status${u.charAt(0).toUpperCase()}${u.slice(1)}`:"unknownError"}function N(e){if(e==="default")return!0;let n=Number(e);return Number.isInteger(n)?n>=400:!1}function se(e,n){let t=[];if(e.paths)for(let[r,o]of Object.entries(e.paths))for(let[i,s]of Object.entries(o)){let u=i.toLowerCase();if(!oe(u)||!s.operationId)continue;let a=X(r),l=ee(s,n),{successResponse:m,errors:f}=te(s,s.operationId,n),p=K(o,s,e),c=ne(p),h=re(p);t.push({operationId:s.operationId,path:r,method:u,pathParams:a,queryParams:h,requestType:l,responseType:m,requestHeaders:c,errors:f})}if(e.webhooks)for(let[r,o]of Object.entries(e.webhooks))for(let[i,s]of Object.entries(o)){let u=i.toLowerCase();if(!oe(u)||!s.operationId)continue;let a=r,l=X(a),m=ee(s,n),{successResponse:f,errors:p}=te(s,s.operationId,n),c=K(o,s,e),h=ne(c),O=re(c);t.push({operationId:s.operationId,path:a,method:u,pathParams:l,queryParams:O,requestType:m,responseType:f,requestHeaders:h,errors:p})}return t}function K(e,n,t){let r=new Map,o=i=>{if(Array.isArray(i))for(let s of i){let u=v(s,t);if(!u)continue;let a=`${u.in}:${u.name}`;r.set(a,u)}};return o(e.parameters),o(n.parameters),Array.from(r.values())}function X(e){let n=[],t=e.match(/{([^}]+)}/g);if(t)for(let r of t){let o=r.slice(1,-1);n.push({name:o,type:"string"})}return n}function ee(e,n){let t=Re(e);if(!t)return;if(t.$ref){let o=g(t.$ref);return n?.get(o)||o}return`${b($(e.operationId))}Request`}function Re(e){let n=e?.requestBody?.content;if(!n||Object.keys(n).length===0)return;let t=["application/json","multipart/form-data","application/x-www-form-urlencoded"];for(let r of t){let o=n[r]?.schema;if(o)return o}}function te(e,n,t){let r=e.responses??{},o=new Map,i=[];for(let[a,l]of Object.entries(r)){let m=l?.content;if(!m||Object.keys(m).length===0){a==="204"||/^3\d\d$/.test(a)?o.set(a,"undefined"):N(a)&&i.push({code:a,schema:"undefined"});continue}let f=E(m),p=m[f]?.schema;if(!p){let c=Ae(f,a);c&&(N(a)?i.push({code:a,schema:c}):/^2\d\d$/.test(a)&&o.set(a,c));continue}if(N(a)){i.push({code:a,schema:p});continue}/^2\d\d$/.test(a)&&o.set(a,p)}let s=Pe(o,n,t),u=ke(i,n,t);return{successResponse:s,errors:u}}function Pe(e,n,t){if(e.size===0)return;let r=["200","201","204"];for(let i of r){let s=e.get(i);if(s)return typeof s=="string"?s:G(s,`${b($(n))}Response`,t)}let[,o]=e.entries().next().value??[];if(o)return typeof o=="string"?o:G(o,`${b($(n))}Response`,t)}function ke(e=[],n,t){if(!e.length)return;let r={};for(let{code:o,schema:i}of e){let s=Y(o),u=G(i,`${b($(n))}${b(s)}`,t);r[s]=u}return r}function G(e,n,t){if(typeof e=="string")return e;if(e.$ref){let r=g(e.$ref);return t?.get(r)||r}if(e.type==="array"&&e.items?.$ref){let r=g(e.items.$ref);return`z.array(${t?.get(r)||r})`}return e.allOf&&Array.isArray(e.allOf),n}function ne(e){let n=[];for(let t of e??[])t.in==="header"&&n.push({name:t.name,description:t.description,schema:t.schema,required:t.required});return n}function re(e){let n=[];for(let t of e??[])t.in==="query"&&n.push({name:t.name,description:t.description,schema:t.schema,required:t.required});return n}function oe(e){switch(e){case"get":case"put":case"post":case"delete":case"options":case"head":case"patch":case"trace":return!0;default:return!1}}function Ae(e,n){return n==="204"||/^3\d\d$/.test(n)?"undefined":e in z?z[e]:"unknown"}function ie(e,n){let t=new Map,r=new Map;for(let[,o]of Object.entries(n.paths||{}))for(let[,i]of Object.entries(o)){let s=i;s.operationId&&r.set(s.operationId,s)}for(let[,o]of Object.entries(n.webhooks||{}))for(let[,i]of Object.entries(o)){let s=i;s.operationId&&r.set(s.operationId,s)}for(let o of e){let i=r.get(o.operationId);if(!i)continue;let s=i.requestBody;if(s&&s.content){let u=s.content,a=qe(u);if(!a)continue;let l=`${b($(o.operationId))}Request`;(!a.$ref||a.allOf||a.oneOf||a.anyOf)&&t.set(l,a)}}return t}function qe(e){let n=["application/json","multipart/form-data","application/x-www-form-urlencoded"];for(let t of n){let r=e[t]?.schema;if(r)return r}}function ae(e,n){let t=new Map,r=new Map;for(let[,o]of Object.entries(n.paths||{}))for(let[,i]of Object.entries(o)){let s=i;s.operationId&&r.set(s.operationId,s)}for(let[,o]of Object.entries(n.webhooks||{}))for(let[,i]of Object.entries(o)){let s=i;s.operationId&&r.set(s.operationId,s)}for(let o of e){let i=r.get(o.operationId);if(!i)continue;let s=i.responses||{};for(let[u,a]of Object.entries(s))if(/^2\d\d$/.test(u)&&a.content){let m=a.content["application/json"];if(m&&m.schema){let f=m.schema,p=`${b($(o.operationId))}Response`;(!f.$ref||f.allOf||f.oneOf||f.anyOf)&&t.set(p,f)}}}return t}function pe(e,n,t,r,o){let i=ie(n,t);if(i.size>0){e.push("// Generated Request Types"),e.push("");for(let[s,u]of i){let a=A(s,u,new Set,o,r);e.push(a),e.push(""),e.push(`export type ${s} = z.infer<typeof ${s}>;`),e.push("")}}}function ue(e,n,t,r,o){let i=ae(n,t);if(i.size>0){e.push("// Generated Response Types"),e.push("");for(let[s,u]of i){let a=A(s,u,new Set,o,r);e.push(a),e.push(""),e.push(`export type ${s} = z.infer<typeof ${s}>;`),e.push("")}}}function ce(){let e=[];return e.push("// Generated helper types for Zenko"),e.push("// This file provides type definitions for operation objects and path functions"),e.push(""),e.push("export type PathFn<TArgs extends unknown[] = []> = (...args: TArgs) => string"),e.push(""),e.push('export type RequestMethod = "get" | "put" | "post" | "delete" | "options" | "head" | "patch" | "trace"'),e.push(""),e.push("export type HeaderFn<TArgs extends unknown[] = [], TResult = Record<string, unknown> | Record<string, never>> = (...args: TArgs) => TResult"),e.push(""),e.push("export type AnyHeaderFn = HeaderFn<any, unknown> | (() => unknown)"),e.push(""),e.push("export type OperationErrors<TError = unknown> = TError extends Record<string, unknown> ? TError : Record<string, TError>;"),e.push(""),e.push("export type OperationDefinition<TMethod extends RequestMethod, TPath extends (...args: any[]) => string, TRequest = undefined, TResponse = undefined, THeaders extends AnyHeaderFn | undefined = undefined, TErrors extends OperationErrors | undefined = undefined> = {"),e.push(" method: TMethod"),e.push(" path: TPath"),e.push(" request?: TRequest"),e.push(" response?: TResponse"),e.push(" headers?: THeaders"),e.push(" errors?: TErrors"),e.push("}"),e.push(""),e.join(`
5
- `)}function ze(e,n={}){let t=[],r=new Set,{strictDates:o=!1,strictNumeric:i=!1,operationIds:s}=n,u=ve(n.types),a={strictDates:o,strictNumeric:i,optionalType:u.optionalType};t.push('import { z } from "zod";');let l=new Map;if(e.components?.schemas)for(let p of Object.keys(e.components.schemas))l.set(p,$(p));let m=se(e,l);if(s&&s.length>0){let p=new Set(s);m=m.filter(c=>p.has(c.operationId))}if(Ne(t,u,m),t.push(""),e.components?.schemas){t.push("// Generated Zod Schemas"),t.push("");let p;if(s&&s.length>0){let h=V(m,e);p=Array.from(h)}else p=Object.keys(e.components.schemas);let c=U(e.components.schemas).filter(h=>p.includes(h));for(let h of c){let O=e.components.schemas[h],T=l.get(h);t.push(A(T,O,r,a,l)),t.push(""),t.push(`export type ${T} = z.infer<typeof ${T}>;`),t.push("")}}t.push("// Path Functions"),t.push("export const paths = {");for(let p of m){let h=p.pathParams.map(d=>d.name).length>0,O=p.queryParams.length>0,T=$(p.operationId);if(!h&&!O){t.push(` ${y(T)}: () => "${p.path}",`);continue}let R=d=>{if(w(d))return d;let S=$(d);return w(S)||(S=`_${S}`),S},q=[],j=[];for(let d of p.pathParams)q.push(w(d.name)?d.name:`${y(d.name)}: ${R(d.name)}`),j.push(`${y(d.name)}: string`);for(let d of p.queryParams)q.push(w(d.name)?d.name:`${y(d.name)}: ${R(d.name)}`),j.push(`${y(d.name)}${d.required?"":"?"}: ${Fe(d)}`);let $e=!h&&O&&p.queryParams.every(d=>!d.required),Z=`${q.length?`{ ${q.join(", ")} }`:"{}"}: { ${j.join(", ")} }${$e?" = {}":""}`,B=p.path.replace(/{([^}]+)}/g,(d,S)=>`\${${R(S)}}`);if(!O){t.push(` ${y(T)}: (${Z}) => \`${B}\`,`);continue}t.push(` ${y(T)}: (${Z}) => {`),t.push(" const params = new URLSearchParams()");for(let d of p.queryParams){let S=w(d.name)?d.name:R($(d.name)),M=d.schema??{};if(M?.type==="array"){let L=de(M.items??{},"value");d.required?(t.push(` for (const value of ${S}) {`),t.push(` params.append("${d.name}", ${L})`),t.push(" }")):(t.push(` if (${S} !== undefined) {`),t.push(` for (const value of ${S}) {`),t.push(` params.append("${d.name}", ${L})`),t.push(" }"),t.push(" }"));continue}let _=de(M,S);d.required?t.push(` params.set("${d.name}", ${_})`):(t.push(` if (${S} !== undefined) {`),t.push(` params.set("${d.name}", ${_})`),t.push(" }"))}t.push(" const _searchParams = params.toString()"),t.push(` return \`${B}\${_searchParams ? \`?\${_searchParams}\` : ""}\``),t.push(" },")}t.push("} as const;"),t.push(""),t.push("// Header Schemas"),t.push("export const headerSchemas = {");for(let p of m){let c=$(p.operationId);if(!p.requestHeaders||p.requestHeaders.length===0){t.push(` ${y(c)}: z.object({}),`);continue}let h=p.requestHeaders.map(O=>{let T=Ce(O),R=O.required?T:F(T,a.optionalType);return` ${y(O.name)}: ${R},`}).join(`
6
- `);t.push(` ${y(c)}: z.object({`),t.push(h),t.push(" }),")}t.push("} as const;"),t.push(""),t.push("// Header Functions"),t.push("export const headers = {");for(let p of m){let c=$(p.operationId);if(!p.requestHeaders||p.requestHeaders.length===0){t.push(` ${y(c)}: () => ${w(c)?`headerSchemas.${c}`:`headerSchemas[${y(c)}]`}.parse({}),`);continue}t.push(` ${y(c)}: (params: z.input<${w(c)?`typeof headerSchemas.${c}`:`(typeof headerSchemas)[${y(c)}]`}>) => {`),t.push(` return ${w(c)?`headerSchemas.${c}`:`headerSchemas[${y(c)}]`}.parse(params)`),t.push(" },")}t.push("} as const;"),t.push(""),pe(t,m,e,l,a),ue(t,m,e,l,a),je(t,m,u),t.push("// Operation Objects");for(let p of m){let c=$(p.operationId),h=u.emit?`: ${b(c)}Operation`:"";t.push(`export const ${c}${h} = {`),t.push(` method: "${p.method}",`),t.push(` path: paths.${c},`),fe(t,"request",p.requestType),fe(t,"response",p.responseType),p.requestHeaders&&p.requestHeaders.length>0&&t.push(` headers: headers.${c},`),p.errors&&me(p.errors)&&Ee(t,"errors",p.errors),t.push("} as const;"),t.push("")}let f={output:t.join(`
7
- `)};return u.emit&&u.helpers==="file"&&u.helpersOutput&&(f.helperFile={path:u.helpersOutput,content:ce()}),f}function Et(e,n={}){return ze(e,n).output}function fe(e,n,t){t&&e.push(` ${n}: ${t},`)}function Ee(e,n,t){if(!(!t||Object.keys(t).length===0)){e.push(` ${n}: {`);for(let[r,o]of Object.entries(t))e.push(` ${y(r)}: ${o},`);e.push(" },")}}function me(e){return!!(e&&Object.keys(e).length>0)}function ve(e){return{emit:e?.emit??!0,helpers:e?.helpers??"package",helpersOutput:e?.helpersOutput??"./zenko-types",treeShake:e?.treeShake??!0,optionalType:e?.optionalType??"optional"}}function Ne(e,n,t){if(n.emit)switch(n.helpers){case"package":if(n.treeShake){let r=H(t),o=C(r,"package");o&&e.push(o)}else e.push('import type { PathFn, HeaderFn, OperationDefinition, OperationErrors } from "zenko";');return;case"file":if(n.treeShake){let r=H(t),o=C(r,"file",n.helpersOutput);o&&e.push(o)}else e.push(`import type { PathFn, HeaderFn, OperationDefinition, OperationErrors } from "${n.helpersOutput}";`);return;case"inline":e.push("type PathFn<TArgs extends unknown[] = []> = (...args: TArgs) => string;"),e.push('type RequestMethod = "get" | "put" | "post" | "delete" | "options" | "head" | "patch" | "trace";'),e.push("type HeaderFn<TArgs extends unknown[] = [], TResult = Record<string, unknown> | Record<string, never>> = (...args: TArgs) => TResult;"),e.push("type AnyHeaderFn = HeaderFn<any, unknown> | (() => unknown);"),e.push("type OperationErrors<TError = unknown> = TError extends Record<string, unknown> ? TError : Record<string, TError>;"),e.push("type OperationDefinition<TMethod extends RequestMethod, TPath extends (...args: any[]) => string, TRequest = undefined, TResponse = undefined, THeaders extends AnyHeaderFn | undefined = undefined, TErrors extends OperationErrors | undefined = undefined> = {"),e.push(" method: TMethod"),e.push(" path: TPath"),e.push(" request?: TRequest"),e.push(" response?: TResponse"),e.push(" headers?: THeaders"),e.push(" errors?: TErrors"),e.push("}"),e.push("")}}function je(e,n,t){if(t.emit){e.push("// Operation Types");for(let r of n){let o=$(r.operationId),i=r.requestHeaders?.length?w(o)?`typeof headers.${o}`:`(typeof headers)[${y(o)}]`:"undefined",s=D(r.requestType),u=D(r.responseType),a=Me(r.errors);e.push(`export type ${b(o)}Operation = OperationDefinition<`),e.push(` "${r.method}",`),e.push(` ${w(o)?`typeof paths.${o}`:`(typeof paths)[${y(o)}]`},`),e.push(` ${s},`),e.push(` ${u},`),e.push(` ${i},`),e.push(` ${a}`),e.push(">;"),e.push("")}}}function Me(e){return!e||!me(e)?"OperationErrors":`OperationErrors<${He(e)}>`}function He(e){return!e||Object.keys(e).length===0?"unknown":`{ ${Object.entries(e).map(([r,o])=>{let i=y(r),s=ye(o);return`${i}: ${s}`}).join("; ")} }`}var le=new Set(["any","unknown","never","void","null","undefined","string","number","boolean","bigint","symbol"]),he=/^[A-Za-z_$][A-Za-z0-9_$]*$/;function D(e){if(!e)return"undefined";let n=e.trim();if(n==="undefined")return"undefined";if(le.has(n)||n.startsWith("typeof "))return n;let t=n.match(/^z\.array\((.+)\)$/);return t?`z.ZodArray<${D(t[1])}>`:he.test(n)?`typeof ${n}`:n}function ye(e){if(!e)return"unknown";let n=e.trim();if(le.has(n)||n.startsWith("typeof "))return n;let t=n.match(/^z\.array\((.+)\)$/);return t?`z.ZodArray<${ye(t[1])}>`:he.test(n)?`typeof ${n}`:n}function Ce(e){let n=e.schema??{};switch(n.type){case"integer":case"number":return"z.coerce.number()";case"boolean":return"z.coerce.boolean()";case"array":{let r=n.items??{type:"string"};return`z.array(${r.type==="integer"||r.type==="number"?"z.coerce.number()":r.type==="boolean"?"z.coerce.boolean()":"z.string()"})`}default:return"z.string()"}}function Fe(e){return ge(e.schema)}function ge(e){if(!e)return"string";if(e.type==="array")return`Array<${ge(e.items)}>`;switch(e.type){case"integer":case"number":return"number";case"boolean":return"boolean";default:return"string"}}function de(e,n){if(!e)return`String(${n})`;switch(e.type){case"integer":case"number":return`String(${n})`;case"boolean":return`${n} ? "true" : "false"`;default:return`String(${n})`}}export{ze as a,Et as b};
8
- //# sourceMappingURL=chunk-NZMYX32P.mjs.map