@sdk-it/typescript 0.39.0 → 0.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/dist/index.js +155 -53
  2. package/dist/index.js.map +3 -3
  3. package/dist/lib/client.d.ts.map +1 -1
  4. package/dist/lib/emitters/zod.d.ts.map +1 -1
  5. package/dist/lib/generate.d.ts +3 -1
  6. package/dist/lib/generate.d.ts.map +1 -1
  7. package/dist/lib/generator.d.ts.map +1 -1
  8. package/dist/lib/options.d.ts +1 -0
  9. package/dist/lib/options.d.ts.map +1 -1
  10. package/dist/lib/sdk.d.ts +1 -1
  11. package/dist/lib/sdk.d.ts.map +1 -1
  12. package/dist/lib/server-urls.d.ts +3 -0
  13. package/dist/lib/server-urls.d.ts.map +1 -0
  14. package/dist/lib/status-map.d.ts.map +1 -1
  15. package/dist/lib/typescript-snippet.d.ts.map +1 -1
  16. package/package.json +4 -4
  17. package/dist/connect.d.ts +0 -1
  18. package/dist/connect.d.ts.map +0 -1
  19. package/dist/global.d.js +0 -1
  20. package/dist/global.d.js.map +0 -7
  21. package/dist/lib/connect.d.ts +0 -162
  22. package/dist/lib/connect.d.ts.map +0 -1
  23. package/dist/lib/readme-generator.d.ts +0 -8
  24. package/dist/lib/readme-generator.d.ts.map +0 -1
  25. package/dist/lib/statusMap.d.ts +0 -2
  26. package/dist/lib/statusMap.d.ts.map +0 -1
  27. package/dist/lib/utils.d.ts +0 -17
  28. package/dist/lib/utils.d.ts.map +0 -1
  29. package/dist/lib/watcher.d.ts +0 -2
  30. package/dist/lib/watcher.d.ts.map +0 -1
  31. package/dist/src/index.js +0 -5
  32. package/dist/src/index.js.map +0 -7
  33. package/dist/src/lib/agent/ai-sdk.js +0 -60
  34. package/dist/src/lib/agent/ai-sdk.js.map +0 -7
  35. package/dist/src/lib/agent/openai-agents.js +0 -42
  36. package/dist/src/lib/agent/openai-agents.js.map +0 -7
  37. package/dist/src/lib/client.js +0 -152
  38. package/dist/src/lib/client.js.map +0 -7
  39. package/dist/src/lib/emitters/interface.js +0 -169
  40. package/dist/src/lib/emitters/interface.js.map +0 -7
  41. package/dist/src/lib/emitters/snippet.js +0 -191
  42. package/dist/src/lib/emitters/snippet.js.map +0 -7
  43. package/dist/src/lib/emitters/zod.js +0 -271
  44. package/dist/src/lib/emitters/zod.js.map +0 -7
  45. package/dist/src/lib/generate.js +0 -382
  46. package/dist/src/lib/generate.js.map +0 -7
  47. package/dist/src/lib/generator.js +0 -268
  48. package/dist/src/lib/generator.js.map +0 -7
  49. package/dist/src/lib/import-utilities.js +0 -56
  50. package/dist/src/lib/import-utilities.js.map +0 -7
  51. package/dist/src/lib/options.js +0 -3
  52. package/dist/src/lib/options.js.map +0 -7
  53. package/dist/src/lib/readme/prop.emitter.js +0 -283
  54. package/dist/src/lib/readme/prop.emitter.js.map +0 -7
  55. package/dist/src/lib/readme/readme.js +0 -105
  56. package/dist/src/lib/readme/readme.js.map +0 -7
  57. package/dist/src/lib/sdk.js +0 -236
  58. package/dist/src/lib/sdk.js.map +0 -7
  59. package/dist/src/lib/status-map.js +0 -28
  60. package/dist/src/lib/status-map.js.map +0 -7
  61. package/dist/src/lib/style.js +0 -1
  62. package/dist/src/lib/style.js.map +0 -7
  63. package/dist/src/lib/typescript-snippet.js +0 -738
  64. package/dist/src/lib/typescript-snippet.js.map +0 -7
@@ -1,271 +0,0 @@
1
- import { followRef, isRef, parseRef, pascalcase } from "@sdk-it/core";
2
- import { isPrimitiveSchema, sanitizeTag } from "@sdk-it/spec";
3
- class ZodEmitter {
4
- #generatedRefs = /* @__PURE__ */ new Set();
5
- #spec;
6
- #onRef;
7
- constructor(spec, onRef) {
8
- this.#spec = spec;
9
- this.#onRef = onRef;
10
- }
11
- #object(schema) {
12
- const properties = schema.properties || {};
13
- const propEntries = Object.entries(properties).map(([key, propSchema]) => {
14
- const isRequired = (schema.required ?? []).includes(key);
15
- return `'${key}': ${this.handle(propSchema, isRequired)}`;
16
- });
17
- let additionalProps = "";
18
- if (schema.additionalProperties) {
19
- if (typeof schema.additionalProperties === "object") {
20
- const addPropZod = this.handle(schema.additionalProperties, true);
21
- additionalProps = `.catchall(${addPropZod})`;
22
- } else if (schema.additionalProperties === true) {
23
- additionalProps = `.catchall(z.unknown())`;
24
- }
25
- }
26
- return `z.object({${propEntries.join(", ")}})${additionalProps}`;
27
- }
28
- #array(schema, required = false) {
29
- const { items } = schema;
30
- if (!items) {
31
- return `z.array(z.unknown())${appendOptional(required)}`;
32
- }
33
- if (Array.isArray(items)) {
34
- const tupleItems = items.map((sub) => this.handle(sub, true));
35
- const base = `z.tuple([${tupleItems.join(", ")}])`;
36
- return `${base}${appendOptional(required)}`;
37
- }
38
- const itemsSchema = this.handle(items, true);
39
- return `z.array(${itemsSchema})${this.#suffixes(JSON.stringify(schema.default), required, false)}`;
40
- }
41
- #suffixes = (defaultValue, required, nullable) => {
42
- return `${nullable ? ".nullable()" : ""}${appendOptional(required)}${appendDefault(defaultValue)}`;
43
- };
44
- /**
45
- * Convert a basic type (string | number | boolean | object | array, etc.) to Zod.
46
- * We'll also handle .optional() if needed.
47
- */
48
- normal(type, schema, required = false, nullable = false) {
49
- switch (type) {
50
- case "string":
51
- return `${this.string(schema)}${this.#suffixes(JSON.stringify(schema.default), required, nullable)}`;
52
- case "number":
53
- case "integer": {
54
- const { base, defaultValue } = this.#number(schema);
55
- return `${base}${this.#suffixes(defaultValue, required, nullable)}`;
56
- }
57
- case "boolean":
58
- return `z.boolean()${this.#suffixes(schema.default, required, nullable)}`;
59
- case "object":
60
- return `${this.#object(schema)}${this.#suffixes(JSON.stringify(schema.default), required, nullable)}`;
61
- // required always
62
- case "array":
63
- return this.#array(schema, required);
64
- case "null":
65
- return `z.null()${appendOptional(required)}`;
66
- default:
67
- return `z.unknown()${appendOptional(required)}`;
68
- }
69
- }
70
- #ref($ref, required) {
71
- const schemaName = pascalcase(sanitizeTag(parseRef($ref).model));
72
- const schema = followRef(this.#spec, $ref);
73
- if (isPrimitiveSchema(schema)) {
74
- const result = this.handle(schema, required);
75
- this.#onRef?.(schemaName, result);
76
- return result;
77
- }
78
- if (this.#generatedRefs.has(schemaName)) {
79
- return schemaName;
80
- }
81
- this.#generatedRefs.add(schemaName);
82
- this.#onRef?.(schemaName, this.handle(schema, required));
83
- return schemaName;
84
- }
85
- #toIntersection(schemas) {
86
- const [left, ...right] = schemas;
87
- if (!right.length) {
88
- return left;
89
- }
90
- return `z.intersection(${left}, ${this.#toIntersection(right)})`;
91
- }
92
- allOf(schemas, required) {
93
- const allOfSchemas = schemas.map((sub) => this.handle(sub, true));
94
- if (allOfSchemas.length === 0) {
95
- return `z.unknown()`;
96
- }
97
- if (allOfSchemas.length === 1) {
98
- return `${allOfSchemas[0]}${appendOptional(required)}`;
99
- }
100
- return `${this.#toIntersection(allOfSchemas)}${appendOptional(required)}`;
101
- }
102
- anyOf(schemas, required) {
103
- const anyOfSchemas = schemas.map((sub) => this.handle(sub, true));
104
- if (anyOfSchemas.length === 1) {
105
- return `${anyOfSchemas[0]}${appendOptional(required)}`;
106
- }
107
- return `z.union([${anyOfSchemas.join(", ")}])${appendOptional(required)}`;
108
- }
109
- oneOf(schemas, required) {
110
- const oneOfSchemas = schemas.map((sub) => this.handle(sub, true));
111
- if (oneOfSchemas.length === 1) {
112
- return `${oneOfSchemas[0]}${appendOptional(required)}`;
113
- }
114
- return `z.union([${oneOfSchemas.join(", ")}])${appendOptional(required)}`;
115
- }
116
- enum(type, values) {
117
- if (values.length === 1) {
118
- return `z.literal(${values.join(", ")})`;
119
- }
120
- if (type === "integer") {
121
- return `z.union([${values.map((val) => `z.literal(${val})`).join(", ")}])`;
122
- }
123
- return `z.enum([${values.join(", ")}])`;
124
- }
125
- /**
126
- * Handle a `string` schema with possible format keywords (JSON Schema).
127
- */
128
- string(schema) {
129
- let base = "z.string()";
130
- if (schema.contentEncoding === "binary") {
131
- base = "z.instanceof(Blob)";
132
- return base;
133
- }
134
- switch (schema.format) {
135
- case "date-time":
136
- case "datetime":
137
- base = "z.string().datetime()";
138
- break;
139
- case "date":
140
- base = "z.coerce.date()";
141
- break;
142
- case "time":
143
- base = "z.string() /* optionally add .regex(...) for HH:MM:SS format */";
144
- break;
145
- case "email":
146
- base = "z.string().email()";
147
- break;
148
- case "uuid":
149
- base = "z.string().uuid()";
150
- break;
151
- case "url":
152
- case "uri":
153
- base = "z.string().url()";
154
- break;
155
- case "ipv4":
156
- base = 'z.string().ip({version: "v4"})';
157
- break;
158
- case "ipv6":
159
- base = 'z.string().ip({version: "v6"})';
160
- break;
161
- case "phone":
162
- base = "z.string() /* or add .regex(...) for phone formats */";
163
- break;
164
- case "byte":
165
- case "binary":
166
- base = "z.instanceof(Blob)";
167
- break;
168
- case "int64":
169
- base = "z.string() /* or z.bigint() if your app can handle it */";
170
- break;
171
- default:
172
- break;
173
- }
174
- return base;
175
- }
176
- /**
177
- * Handle number/integer constraints from OpenAPI/JSON Schema.
178
- * In 3.1, exclusiveMinimum/Maximum hold the actual numeric threshold,
179
- * rather than a boolean toggling `minimum`/`maximum`.
180
- */
181
- #number(schema) {
182
- let defaultValue = schema.default;
183
- let base = "z.number()";
184
- if (schema.format === "int64") {
185
- base = "z.bigint()";
186
- if (schema.default !== void 0) {
187
- defaultValue = `BigInt(${schema.default})`;
188
- }
189
- }
190
- if (schema.format === "int32") {
191
- base += ".int()";
192
- }
193
- if (typeof schema.exclusiveMinimum === "number") {
194
- base += `.gt(${schema.exclusiveMinimum})`;
195
- }
196
- if (typeof schema.exclusiveMaximum === "number") {
197
- base += `.lt(${schema.exclusiveMaximum})`;
198
- }
199
- if (typeof schema.minimum === "number") {
200
- base += schema.format === "int64" ? `.min(BigInt(${schema.minimum}))` : `.min(${schema.minimum})`;
201
- }
202
- if (typeof schema.maximum === "number") {
203
- base += schema.format === "int64" ? `.max(BigInt(${schema.maximum}))` : `.max(${schema.maximum})`;
204
- }
205
- if (typeof schema.multipleOf === "number") {
206
- base += `.refine((val) => Number.isInteger(val / ${schema.multipleOf}), "Must be a multiple of ${schema.multipleOf}")`;
207
- }
208
- return { base, defaultValue };
209
- }
210
- handle(schema, required) {
211
- if (isRef(schema)) {
212
- return `${this.#ref(schema.$ref, true)}${appendOptional(required)}`;
213
- }
214
- if (schema.allOf && Array.isArray(schema.allOf)) {
215
- return this.allOf(schema.allOf ?? [], required);
216
- }
217
- if (schema.anyOf && Array.isArray(schema.anyOf)) {
218
- return this.anyOf(schema.anyOf ?? [], required);
219
- }
220
- if (schema.oneOf && Array.isArray(schema.oneOf) && schema.oneOf.length) {
221
- return this.oneOf(schema.oneOf ?? [], required);
222
- }
223
- if (schema.enum && Array.isArray(schema.enum)) {
224
- const enumVals = schema.enum.map((val) => JSON.stringify(val));
225
- const defaultValue = enumVals.includes(JSON.stringify(schema.default)) ? JSON.stringify(schema.default) : void 0;
226
- return `${this.enum(schema.type, enumVals)}${this.#suffixes(defaultValue, required, false)}`;
227
- }
228
- const types = Array.isArray(schema.type) ? schema.type : schema.type ? [schema.type] : [];
229
- if (!types.length) {
230
- return `z.unknown()${appendOptional(required)}`;
231
- }
232
- if ("nullable" in schema && schema.nullable) {
233
- types.push("null");
234
- } else if (schema.default === null) {
235
- types.push("null");
236
- }
237
- if (types.length > 1) {
238
- const realTypes = types.filter((t) => t !== "null");
239
- if (realTypes.length === 1 && types.includes("null")) {
240
- return this.normal(realTypes[0], schema, required, true);
241
- }
242
- const subSchemas = types.map((t) => this.normal(t, schema, false));
243
- return `z.union([${subSchemas.join(", ")}])${appendOptional(required)}`;
244
- }
245
- return this.normal(types[0], schema, required, false);
246
- }
247
- }
248
- function appendOptional(isRequired) {
249
- return isRequired ? "" : ".optional()";
250
- }
251
- function appendDefault(defaultValue) {
252
- return defaultValue !== void 0 || typeof defaultValue !== "undefined" ? `.default(${defaultValue})` : "";
253
- }
254
- function toZod(schema, required) {
255
- const emitter = new ZodEmitter({});
256
- const schemaStr = emitter.handle(schema, required ?? false);
257
- if (schema["x-prefix"]) {
258
- const prefix = schema["x-prefix"];
259
- if (required === false) {
260
- return schemaStr + `.transform((val) => (val ? \`${prefix}\${val}\` : undefined))`;
261
- } else {
262
- return schemaStr + `.transform((val) => \`${prefix}\${val}\`)`;
263
- }
264
- }
265
- return schemaStr;
266
- }
267
- export {
268
- ZodEmitter,
269
- toZod
270
- };
271
- //# sourceMappingURL=zod.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/lib/emitters/zod.ts"],
4
- "sourcesContent": ["import type {\n OpenAPIObject,\n ReferenceObject,\n SchemaObject,\n} from 'openapi3-ts/oas31';\n\nimport { followRef, isRef, parseRef, pascalcase } from '@sdk-it/core';\nimport { isPrimitiveSchema, sanitizeTag } from '@sdk-it/spec';\n\ntype OnRefCallback = (ref: string, content: string) => void;\n\n/**\n * Convert an OpenAPI (JSON Schema style) object into a Zod schema string,\n */\nexport class ZodEmitter {\n #generatedRefs = new Set<string>();\n #spec: OpenAPIObject;\n #onRef?: OnRefCallback;\n\n constructor(spec: OpenAPIObject, onRef?: OnRefCallback) {\n this.#spec = spec;\n this.#onRef = onRef;\n }\n\n #object(schema: SchemaObject): string {\n const properties = schema.properties || {};\n\n // Convert each property\n const propEntries = Object.entries(properties).map(([key, propSchema]) => {\n const isRequired = (schema.required ?? []).includes(key);\n return `'${key}': ${this.handle(propSchema, isRequired)}`;\n });\n\n let additionalProps = '';\n if (schema.additionalProperties) {\n if (typeof schema.additionalProperties === 'object') {\n // e.g. z.record() if it\u2019s an object schema\n const addPropZod = this.handle(schema.additionalProperties, true);\n additionalProps = `.catchall(${addPropZod})`;\n } else if (schema.additionalProperties === true) {\n // free-form additional props\n additionalProps = `.catchall(z.unknown())`;\n }\n }\n\n return `z.object({${propEntries.join(', ')}})${additionalProps}`;\n }\n\n #array(schema: SchemaObject, required = false): string {\n const { items } = schema;\n if (!items) {\n return `z.array(z.unknown())${appendOptional(required)}`;\n }\n\n // If items is an array => tuple\n if (Array.isArray(items)) {\n // Build a Zod tuple\n const tupleItems = items.map((sub) => this.handle(sub, true));\n const base = `z.tuple([${tupleItems.join(', ')}])`;\n // // If we have additionalItems: false => that\u2019s a fixed length\n // // If additionalItems is a schema => rest(...)\n // if (schema.additionalItems) {\n // if (typeof schema.additionalItems === 'object') {\n // const restSchema = jsonSchemaToZod(spec, schema.additionalItems, true);\n // base += `.rest(${restSchema})`;\n // }\n // // If `additionalItems: false`, no rest is allowed => do nothing\n // }\n return `${base}${appendOptional(required)}`;\n }\n\n // If items is a single schema => standard z.array(...)\n const itemsSchema = this.handle(items, true);\n return `z.array(${itemsSchema})${this.#suffixes(JSON.stringify(schema.default), required, false)}`;\n }\n\n #suffixes = (defaultValue: unknown, required: boolean, nullable: boolean) => {\n return `${nullable ? '.nullable()' : ''}${appendOptional(required)}${appendDefault(defaultValue)}`;\n };\n\n /**\n * Convert a basic type (string | number | boolean | object | array, etc.) to Zod.\n * We'll also handle .optional() if needed.\n */\n normal(\n type: string,\n schema: SchemaObject,\n required = false,\n nullable = false,\n ): string {\n switch (type) {\n case 'string':\n return `${this.string(schema)}${this.#suffixes(JSON.stringify(schema.default), required, nullable)}`;\n case 'number':\n case 'integer': {\n const { base, defaultValue } = this.#number(schema);\n return `${base}${this.#suffixes(defaultValue, required, nullable)}`;\n }\n case 'boolean':\n return `z.boolean()${this.#suffixes(schema.default, required, nullable)}`;\n case 'object':\n return `${this.#object(schema)}${this.#suffixes(JSON.stringify(schema.default), required, nullable)}`;\n // required always\n case 'array':\n return this.#array(schema, required);\n case 'null':\n // If \"type\": \"null\" alone, this is basically z.null()\n return `z.null()${appendOptional(required)}`;\n default:\n // Unknown type -> fallback\n return `z.unknown()${appendOptional(required)}`;\n }\n }\n\n #ref($ref: string, required: boolean) {\n const schemaName = pascalcase(sanitizeTag(parseRef($ref).model));\n const schema = followRef(this.#spec, $ref);\n\n if (isPrimitiveSchema(schema)) {\n const result = this.handle(schema, required);\n this.#onRef?.(schemaName, result);\n return result;\n }\n\n if (this.#generatedRefs.has(schemaName)) {\n return schemaName;\n }\n this.#generatedRefs.add(schemaName);\n this.#onRef?.(schemaName, this.handle(schema, required));\n\n return schemaName;\n }\n #toIntersection(schemas: string[]): string {\n const [left, ...right] = schemas;\n if (!right.length) {\n return left;\n }\n return `z.intersection(${left}, ${this.#toIntersection(right)})`;\n }\n\n allOf(schemas: (SchemaObject | ReferenceObject)[], required: boolean) {\n const allOfSchemas = schemas.map((sub) => this.handle(sub, true));\n if (allOfSchemas.length === 0) {\n return `z.unknown()`;\n }\n if (allOfSchemas.length === 1) {\n return `${allOfSchemas[0]}${appendOptional(required)}`;\n }\n return `${this.#toIntersection(allOfSchemas)}${appendOptional(required)}`;\n }\n\n anyOf(schemas: (SchemaObject | ReferenceObject)[], required: boolean) {\n const anyOfSchemas = schemas.map((sub) => this.handle(sub, true));\n if (anyOfSchemas.length === 1) {\n return `${anyOfSchemas[0]}${appendOptional(required)}`;\n }\n return `z.union([${anyOfSchemas.join(', ')}])${appendOptional(required)}`;\n }\n\n oneOf(schemas: (SchemaObject | ReferenceObject)[], required: boolean) {\n const oneOfSchemas = schemas.map((sub) => this.handle(sub, true));\n if (oneOfSchemas.length === 1) {\n return `${oneOfSchemas[0]}${appendOptional(required)}`;\n }\n return `z.union([${oneOfSchemas.join(', ')}])${appendOptional(required)}`;\n }\n\n enum(type: string, values: any[]) {\n if (values.length === 1) {\n return `z.literal(${values.join(', ')})`;\n }\n if (type === 'integer') {\n // Zod doesn\u2019t have a direct enum for numbers, so we use union of literals\n return `z.union([${values.map((val) => `z.literal(${val})`).join(', ')}])`;\n }\n\n return `z.enum([${values.join(', ')}])`;\n }\n\n /**\n * Handle a `string` schema with possible format keywords (JSON Schema).\n */\n string(schema: SchemaObject): string {\n let base = 'z.string()';\n\n // 3.1 replaces `example` in the schema with `examples` (array).\n // We do not strictly need them for the Zod type, so they\u2019re optional\n // for validation. However, we could keep them as metadata if you want.\n\n if (schema.contentEncoding === 'binary') {\n base = 'z.instanceof(Blob)';\n return base;\n }\n\n switch (schema.format) {\n case 'date-time':\n case 'datetime':\n base = 'z.string().datetime()';\n break;\n case 'date':\n base = 'z.coerce.date()';\n break;\n case 'time':\n base =\n 'z.string() /* optionally add .regex(...) for HH:MM:SS format */';\n break;\n case 'email':\n base = 'z.string().email()';\n break;\n case 'uuid':\n base = 'z.string().uuid()';\n break;\n case 'url':\n case 'uri':\n base = 'z.string().url()';\n break;\n case 'ipv4':\n base = 'z.string().ip({version: \"v4\"})';\n break;\n case 'ipv6':\n base = 'z.string().ip({version: \"v6\"})';\n break;\n case 'phone':\n base = 'z.string() /* or add .regex(...) for phone formats */';\n break;\n case 'byte':\n case 'binary':\n base = 'z.instanceof(Blob)';\n break;\n case 'int64':\n // JS numbers can't reliably store int64, consider z.bigint() or keep as string\n base = 'z.string() /* or z.bigint() if your app can handle it */';\n break;\n default:\n // No special format\n break;\n }\n\n return base;\n }\n\n /**\n * Handle number/integer constraints from OpenAPI/JSON Schema.\n * In 3.1, exclusiveMinimum/Maximum hold the actual numeric threshold,\n * rather than a boolean toggling `minimum`/`maximum`.\n */\n #number(schema: SchemaObject) {\n let defaultValue = schema.default;\n let base = 'z.number()';\n if (schema.format === 'int64') {\n base = 'z.bigint()';\n if (schema.default !== undefined) {\n defaultValue = `BigInt(${schema.default})`;\n }\n }\n\n if (schema.format === 'int32') {\n // 32-bit integer\n base += '.int()';\n }\n\n // If we see exclusiveMinimum as a number in 3.1:\n if (typeof schema.exclusiveMinimum === 'number') {\n // Zod doesn\u2019t have a direct \"exclusiveMinimum\" method, so we can do .gt()\n // If exclusiveMinimum=7 => .gt(7)\n base += `.gt(${schema.exclusiveMinimum})`;\n }\n // Similarly for exclusiveMaximum\n if (typeof schema.exclusiveMaximum === 'number') {\n // If exclusiveMaximum=10 => .lt(10)\n base += `.lt(${schema.exclusiveMaximum})`;\n }\n\n // If standard minimum/maximum\n if (typeof schema.minimum === 'number') {\n base +=\n schema.format === 'int64'\n ? `.min(BigInt(${schema.minimum}))`\n : `.min(${schema.minimum})`;\n }\n if (typeof schema.maximum === 'number') {\n base +=\n schema.format === 'int64'\n ? `.max(BigInt(${schema.maximum}))`\n : `.max(${schema.maximum})`;\n }\n\n // multipleOf\n if (typeof schema.multipleOf === 'number') {\n // There's no direct multipleOf in Zod. Some folks do a custom refine.\n // For example:\n base += `.refine((val) => Number.isInteger(val / ${schema.multipleOf}), \"Must be a multiple of ${schema.multipleOf}\")`;\n }\n\n return { base, defaultValue };\n }\n\n handle(schema: SchemaObject | ReferenceObject, required: boolean): string {\n if (isRef(schema)) {\n return `${this.#ref(schema.$ref, true)}${appendOptional(required)}`;\n }\n\n // Handle allOf \u2192 intersection\n if (schema.allOf && Array.isArray(schema.allOf)) {\n return this.allOf(schema.allOf ?? [], required);\n }\n\n // anyOf \u2192 union\n if (schema.anyOf && Array.isArray(schema.anyOf)) {\n return this.anyOf(schema.anyOf ?? [], required);\n }\n\n // oneOf \u2192 union\n if (schema.oneOf && Array.isArray(schema.oneOf) && schema.oneOf.length) {\n return this.oneOf(schema.oneOf ?? [], required);\n }\n\n // enum\n if (schema.enum && Array.isArray(schema.enum)) {\n const enumVals = schema.enum.map((val) => JSON.stringify(val));\n const defaultValue = enumVals.includes(JSON.stringify(schema.default))\n ? JSON.stringify(schema.default)\n : undefined;\n return `${this.enum(schema.type as string, enumVals)}${this.#suffixes(defaultValue, required, false)}`;\n }\n\n // 3.1 can have type: string or type: string[] (e.g. [\"string\",\"null\"])\n // Let's parse that carefully.\n const types = Array.isArray(schema.type)\n ? schema.type\n : schema.type\n ? [schema.type]\n : [];\n\n // If no explicit \"type\", fallback to unknown\n if (!types.length) {\n return `z.unknown()${appendOptional(required)}`;\n }\n\n // If it's a union type (like [\"string\", \"null\"]), we'll build a Zod union\n // or apply .nullable() if it's just \"type + null\".\n\n // backward compatibility with openapi 3.0\n if ('nullable' in schema && schema.nullable) {\n types.push('null');\n } else if (schema.default === null) {\n types.push('null');\n }\n\n if (types.length > 1) {\n // If it\u2019s exactly one real type plus \"null\", we can do e.g. `z.string().nullable()`\n const realTypes = types.filter((t) => t !== 'null');\n if (realTypes.length === 1 && types.includes('null')) {\n // Single real type + \"null\"\n return this.normal(realTypes[0], schema, required, true);\n }\n // If multiple different types, build a union\n const subSchemas = types.map((t) => this.normal(t, schema, false));\n return `z.union([${subSchemas.join(', ')}])${appendOptional(required)}`;\n }\n return this.normal(types[0], schema, required, false);\n }\n}\n\nfunction appendOptional(isRequired?: boolean) {\n return isRequired ? '' : '.optional()';\n}\n\nfunction appendDefault(defaultValue?: any) {\n return defaultValue !== undefined || typeof defaultValue !== 'undefined'\n ? `.default(${defaultValue})`\n : '';\n}\n\nexport function toZod(schema: SchemaObject, required?: boolean): string {\n const emitter = new ZodEmitter({} as OpenAPIObject);\n const schemaStr = emitter.handle(schema, required ?? false);\n if (schema['x-prefix']) {\n const prefix = schema['x-prefix'];\n if (required === false) {\n return (\n schemaStr +\n `.transform((val) => (val ? \\`${prefix}\\${val}\\` : undefined))`\n );\n } else {\n return schemaStr + `.transform((val) => \\`${prefix}\\${val}\\`)`;\n }\n }\n return schemaStr;\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }