@kubb/plugin-zod 3.8.0 → 3.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/dist/{chunk-VPOWWZEW.js → chunk-3KBN4WTO.js} +71 -36
  2. package/dist/chunk-3KBN4WTO.js.map +1 -0
  3. package/dist/{chunk-DKAOGAVN.cjs → chunk-7GPORWCL.cjs} +70 -35
  4. package/dist/chunk-7GPORWCL.cjs.map +1 -0
  5. package/dist/{chunk-BWBRIHPY.cjs → chunk-F3XH7OGO.cjs} +50 -29
  6. package/dist/chunk-F3XH7OGO.cjs.map +1 -0
  7. package/dist/{chunk-2JCBW3TA.js → chunk-WS5LFZBH.js} +49 -28
  8. package/dist/chunk-WS5LFZBH.js.map +1 -0
  9. package/dist/components.cjs +3 -3
  10. package/dist/components.js +1 -1
  11. package/dist/generators.cjs +4 -4
  12. package/dist/generators.js +2 -2
  13. package/dist/index.cjs +3 -3
  14. package/dist/index.js +2 -2
  15. package/dist/utils.d.cts +1 -1
  16. package/dist/utils.d.ts +1 -1
  17. package/package.json +12 -12
  18. package/src/components/Zod.tsx +12 -11
  19. package/src/generators/__snapshots__/anyof.ts +4 -0
  20. package/src/generators/__snapshots__/coercion.ts +4 -0
  21. package/src/generators/__snapshots__/coercionDates.ts +4 -0
  22. package/src/generators/__snapshots__/coercionNumbers.ts +4 -0
  23. package/src/generators/__snapshots__/coercionStrings.ts +4 -0
  24. package/src/generators/__snapshots__/createPet.ts +4 -0
  25. package/src/generators/__snapshots__/createPetWithUnknownTypeUnknown.ts +4 -0
  26. package/src/generators/__snapshots__/createPetWithUnknownTypeUnknown_wrapOutput.ts +4 -0
  27. package/src/generators/__snapshots__/createPetWithUnknownTypeUnknown_wrapOutput_entire_.ts +4 -0
  28. package/src/generators/__snapshots__/createPet_wrapOutput.ts +4 -0
  29. package/src/generators/__snapshots__/deletePet.ts +4 -0
  30. package/src/generators/__snapshots__/deletePet_wrapOutput.ts +4 -0
  31. package/src/generators/__snapshots__/discriminator.ts +4 -0
  32. package/src/generators/__snapshots__/enumBooleanLiteral.ts +4 -0
  33. package/src/generators/__snapshots__/enumNamesType.ts +4 -0
  34. package/src/generators/__snapshots__/enumNullable.ts +4 -0
  35. package/src/generators/__snapshots__/enumSingleLiteral.ts +4 -0
  36. package/src/generators/__snapshots__/enumVarNamesType.ts +4 -0
  37. package/src/generators/__snapshots__/example.ts +4 -0
  38. package/src/generators/__snapshots__/getPets.ts +4 -0
  39. package/src/generators/__snapshots__/getPets_wrapOutput.ts +4 -0
  40. package/src/generators/__snapshots__/mixedValueTypeConst.ts +4 -0
  41. package/src/generators/__snapshots__/nullableString.ts +4 -0
  42. package/src/generators/__snapshots__/nullableStringUuid.ts +4 -0
  43. package/src/generators/__snapshots__/nullableStringWithAnyOf.ts +4 -0
  44. package/src/generators/__snapshots__/numberValueConst.ts +4 -0
  45. package/src/generators/__snapshots__/oneof.ts +4 -0
  46. package/src/generators/__snapshots__/operations.ts +4 -0
  47. package/src/generators/__snapshots__/optionalPetInfer.ts +4 -0
  48. package/src/generators/__snapshots__/optionalPetTyped.ts +4 -0
  49. package/src/generators/__snapshots__/order.ts +4 -0
  50. package/src/generators/__snapshots__/orderDateTypeFalse.ts +4 -0
  51. package/src/generators/__snapshots__/orderDateTypeString.ts +4 -0
  52. package/src/generators/__snapshots__/pet.ts +4 -0
  53. package/src/generators/__snapshots__/petArray.ts +4 -0
  54. package/src/generators/__snapshots__/petCoercion.ts +4 -0
  55. package/src/generators/__snapshots__/petTupleObject.ts +4 -0
  56. package/src/generators/__snapshots__/petWithMapper.ts +4 -0
  57. package/src/generators/__snapshots__/pets.ts +4 -0
  58. package/src/generators/__snapshots__/recursive.ts +4 -0
  59. package/src/generators/__snapshots__/showPetById.ts +4 -0
  60. package/src/generators/__snapshots__/showPetById_wrapOutput.ts +4 -0
  61. package/src/generators/__snapshots__/stringValueConst.ts +4 -0
  62. package/src/generators/__snapshots__/toy.ts +4 -0
  63. package/src/generators/__snapshots__/uuidSchema.ts +4 -0
  64. package/src/generators/operationsGenerator.tsx +7 -1
  65. package/src/generators/zodGenerator.tsx +9 -2
  66. package/src/parser.ts +71 -30
  67. package/src/utils/ToZod.ts +1 -2
  68. package/dist/chunk-2JCBW3TA.js.map +0 -1
  69. package/dist/chunk-BWBRIHPY.cjs.map +0 -1
  70. package/dist/chunk-DKAOGAVN.cjs.map +0 -1
  71. package/dist/chunk-VPOWWZEW.js.map +0 -1
@@ -1,7 +1,8 @@
1
1
  import { File, Const, Type } from '@kubb/react';
2
2
  import transformers2 from '@kubb/core/transformers';
3
3
  import { jsxs, Fragment, jsx } from '@kubb/react/jsx-runtime';
4
- import { isKeyword, schemaKeywords } from '@kubb/plugin-oas';
4
+ import { isKeyword, schemaKeywords, SchemaGenerator } from '@kubb/plugin-oas';
5
+ import { PackageManager } from '@kubb/core';
5
6
 
6
7
  // src/components/Operations.tsx
7
8
  function Operations({ name, operations }) {
@@ -27,6 +28,8 @@ function Operations({ name, operations }) {
27
28
  /* @__PURE__ */ jsx(File.Source, { name: "paths", isExportable: true, isIndexable: true, children: /* @__PURE__ */ jsx(Const, { export: true, name: "paths", asConst: true, children: `{${transformers2.stringifyObject(pathsJSON)}}` }) })
28
29
  ] });
29
30
  }
31
+ var packageManager = new PackageManager();
32
+ var isV4 = () => packageManager.isValidSync("zod", ">=4") || packageManager.isValidSync("zod", "next");
30
33
  var zodKeywordMapper = {
31
34
  any: () => "z.any()",
32
35
  unknown: () => "z.unknown()",
@@ -36,12 +39,32 @@ var zodKeywordMapper = {
36
39
  },
37
40
  integer: (coercion, min, max) => {
38
41
  return [
39
- coercion ? "z.coerce.number().int()" : "z.number().int()",
42
+ coercion ? "z.coerce.number().int()" : isV4() ? "z.int()" : "z.number().int()",
40
43
  min !== void 0 ? `.min(${min})` : void 0,
41
44
  max !== void 0 ? `.max(${max})` : void 0
42
45
  ].filter(Boolean).join("");
43
46
  },
44
- object: (value) => {
47
+ interface: (value, strict) => {
48
+ if (strict) {
49
+ return `z.strictInterface({
50
+ ${value}
51
+ })`;
52
+ }
53
+ return `z.interface({
54
+ ${value}
55
+ })`;
56
+ },
57
+ object: (value, strict) => {
58
+ if (isV4() && strict) {
59
+ return `z.strictObject({
60
+ ${value}
61
+ })`;
62
+ }
63
+ if (strict) {
64
+ return `z.object({
65
+ ${value}
66
+ }).strict()`;
67
+ }
45
68
  return `z.object({
46
69
  ${value}
47
70
  })`;
@@ -49,6 +72,7 @@ var zodKeywordMapper = {
49
72
  string: (coercion, min, max) => {
50
73
  return [coercion ? "z.coerce.string()" : "z.string()", min !== void 0 ? `.min(${min})` : void 0, max !== void 0 ? `.max(${max})` : void 0].filter(Boolean).join("");
51
74
  },
75
+ //support for discriminatedUnion
52
76
  boolean: () => "z.boolean()",
53
77
  undefined: () => "z.undefined()",
54
78
  nullable: () => ".nullable()",
@@ -71,10 +95,10 @@ var zodKeywordMapper = {
71
95
  */
72
96
  datetime: (offset = false, local = false) => {
73
97
  if (offset) {
74
- return `z.string().datetime({ offset: ${offset} })`;
98
+ return isV4() ? `z.iso.datetime({ offset: ${offset} })` : `z.string().datetime({ offset: ${offset} })`;
75
99
  }
76
100
  if (local) {
77
- return `z.string().datetime({ local: ${local} })`;
101
+ return isV4() ? `z.iso.datetime({ local: ${local} })` : `z.string().datetime({ local: ${local} })`;
78
102
  }
79
103
  return "z.string().datetime()";
80
104
  },
@@ -85,7 +109,7 @@ var zodKeywordMapper = {
85
109
  */
86
110
  date: (type = "string", coercion) => {
87
111
  if (type === "string") {
88
- return "z.string().date()";
112
+ return isV4() ? "z.iso.date()" : "z.string().date()";
89
113
  }
90
114
  if (coercion) {
91
115
  return "z.coerce.date()";
@@ -99,16 +123,15 @@ var zodKeywordMapper = {
99
123
  */
100
124
  time: (type = "string", coercion) => {
101
125
  if (type === "string") {
102
- return "z.string().time()";
126
+ return isV4() ? "z.iso.time()" : "z.string().time()";
103
127
  }
104
128
  if (coercion) {
105
129
  return "z.coerce.date()";
106
130
  }
107
131
  return "z.date()";
108
132
  },
109
- uuid: (coercion) => coercion ? "z.coerce.string().uuid()" : "z.string().uuid()",
110
- url: (coercion) => coercion ? "z.coerce.string().url()" : "z.string().url()",
111
- strict: () => ".strict()",
133
+ uuid: (coercion) => isV4() ? coercion ? "z.coerce.string().uuid()" : "z.uuid()" : coercion ? "z.coerce.string().uuid()" : "z.string().uuid()",
134
+ url: (coercion) => isV4() ? coercion ? "z.coerce.string().url()" : "z.url()" : coercion ? "z.coerce.string().url()" : "z.string().url()",
112
135
  default: (value) => {
113
136
  if (typeof value === "object") {
114
137
  return ".default({})";
@@ -121,7 +144,7 @@ var zodKeywordMapper = {
121
144
  max: (value) => `.max(${value ?? ""})`,
122
145
  optional: () => ".optional()",
123
146
  matches: (value = "", coercion) => coercion ? `z.coerce.string().regex(${value})` : `z.string().regex(${value})`,
124
- email: (coercion) => coercion ? "z.coerce.string().email()" : "z.string().email()",
147
+ email: (coercion) => isV4() ? coercion ? "z.coerce.string().email()" : "z.email()" : coercion ? "z.coerce.string().email()" : "z.string().email()",
125
148
  firstName: void 0,
126
149
  lastName: void 0,
127
150
  password: void 0,
@@ -132,7 +155,7 @@ var zodKeywordMapper = {
132
155
  if (!value) {
133
156
  return void 0;
134
157
  }
135
- return `z.lazy(() => ${value})`;
158
+ return isV4() ? value : `z.lazy(() => ${value})`;
136
159
  },
137
160
  blob: () => "z.instanceof(File)",
138
161
  deprecated: void 0,
@@ -181,31 +204,31 @@ var shouldCoerce = (coercion, type) => {
181
204
  }
182
205
  return !!coercion[type];
183
206
  };
184
- function parse({ parent, current, siblings }, options) {
207
+ function parse({ parent, current, name, siblings }, options) {
185
208
  const value = zodKeywordMapper[current.keyword];
186
209
  if (!value) {
187
210
  return void 0;
188
211
  }
189
212
  if (isKeyword(current, schemaKeywords.union)) {
190
213
  if (Array.isArray(current.args) && current.args.length === 1) {
191
- return parse({ parent, current: current.args[0], siblings }, options);
214
+ return parse({ parent, name, current: current.args[0], siblings }, options);
192
215
  }
193
216
  if (Array.isArray(current.args) && !current.args.length) {
194
217
  return "";
195
218
  }
196
219
  return zodKeywordMapper.union(
197
- sort(current.args).map((schema, _index, siblings2) => parse({ parent: current, current: schema, siblings: siblings2 }, options)).filter(Boolean)
220
+ sort(current.args).map((schema, _index, siblings2) => parse({ parent: current, name, current: schema, siblings: siblings2 }, options)).filter(Boolean)
198
221
  );
199
222
  }
200
223
  if (isKeyword(current, schemaKeywords.and)) {
201
224
  const items = sort(current.args).filter((schema) => {
202
225
  return ![schemaKeywords.optional, schemaKeywords.describe].includes(schema.keyword);
203
- }).map((schema, _index, siblings2) => parse({ parent: current, current: schema, siblings: siblings2 }, options)).filter(Boolean);
226
+ }).map((schema, _index, siblings2) => parse({ parent: current, name, current: schema, siblings: siblings2 }, options)).filter(Boolean);
204
227
  return `${items.slice(0, 1)}${zodKeywordMapper.and(items.slice(1))}`;
205
228
  }
206
229
  if (isKeyword(current, schemaKeywords.array)) {
207
230
  return zodKeywordMapper.array(
208
- sort(current.args.items).map((schemas, _index, siblings2) => parse({ parent: current, current: schemas, siblings: siblings2 }, options)).filter(Boolean),
231
+ sort(current.args.items).map((schemas, _index, siblings2) => parse({ parent: current, name, current: schemas, siblings: siblings2 }, options)).filter(Boolean),
209
232
  current.args.min,
210
233
  current.args.max,
211
234
  current.args.unique
@@ -218,14 +241,14 @@ function parse({ parent, current, siblings }, options) {
218
241
  keyword: schemaKeywords.const,
219
242
  args: current.args.items[0]
220
243
  };
221
- return parse({ parent: current, current: child, siblings: [child] }, options);
244
+ return parse({ parent: current, name, current: child, siblings: [child] }, options);
222
245
  }
223
246
  return zodKeywordMapper.union(
224
247
  current.args.items.map((schema) => ({
225
248
  keyword: schemaKeywords.const,
226
249
  args: schema
227
250
  })).map((schema, _index, siblings2) => {
228
- return parse({ parent: current, current: schema, siblings: siblings2 }, options);
251
+ return parse({ parent: current, name, current: schema, siblings: siblings2 }, options);
229
252
  }).filter(Boolean)
230
253
  );
231
254
  }
@@ -245,29 +268,38 @@ function parse({ parent, current, siblings }, options) {
245
268
  return zodKeywordMapper.ref(current.args?.name);
246
269
  }
247
270
  if (isKeyword(current, schemaKeywords.object)) {
248
- const properties = Object.entries(current.args?.properties || {}).filter((item) => {
271
+ const propertyEntries = Object.entries(current.args?.properties || {}).filter((item) => {
249
272
  const schema = item[1];
250
273
  return schema && typeof schema.map === "function";
251
- }).map(([name, schemas]) => {
274
+ });
275
+ const hasReferences = propertyEntries.some(([_name, schemas]) => {
276
+ return SchemaGenerator.find(schemas, schemaKeywords.ref);
277
+ });
278
+ const properties = propertyEntries.map(([name2, schemas]) => {
252
279
  const nameSchema = schemas.find((schema) => schema.keyword === schemaKeywords.name);
253
- const mappedName = nameSchema?.args || name;
280
+ const mappedName = nameSchema?.args || name2;
254
281
  if (options.mapper?.[mappedName]) {
255
- return `"${name}": ${options.mapper?.[mappedName]}`;
282
+ return `"${name2}": ${options.mapper?.[mappedName]}`;
283
+ }
284
+ const baseSchemaOutput = sort(schemas).map((schema) => parse({ parent: current, name: name2, current: schema, siblings: schemas }, options)).filter(Boolean).join("");
285
+ const objectValue = options.wrapOutput ? options.wrapOutput({ output: baseSchemaOutput, schema: options.rawSchema?.properties?.[name2] }) || baseSchemaOutput : baseSchemaOutput;
286
+ if (isV4() && SchemaGenerator.find(schemas, schemaKeywords.ref)) {
287
+ return `get ${name2}(){
288
+ return ${objectValue}
289
+ }`;
256
290
  }
257
- const baseSchemaOutput = sort(schemas).map((schema) => parse({ parent: current, current: schema, siblings: schemas }, options)).filter(Boolean).join("");
258
- return `"${name}": ${options.wrapOutput ? options.wrapOutput({ output: baseSchemaOutput, schema: options.rawSchema?.properties?.[name] }) || baseSchemaOutput : baseSchemaOutput}`;
291
+ return `"${name2}": ${objectValue}`;
259
292
  }).join(",\n");
260
- const additionalProperties = current.args?.additionalProperties?.length ? current.args.additionalProperties.map((schema, _index, siblings2) => parse({ parent: current, current: schema, siblings: siblings2 }, options)).filter(Boolean).join("") : void 0;
293
+ const additionalProperties = current.args?.additionalProperties?.length ? current.args.additionalProperties.map((schema, _index, siblings2) => parse({ parent: current, name, current: schema, siblings: siblings2 }, options)).filter(Boolean).join("") : void 0;
261
294
  const text = [
262
- zodKeywordMapper.object(properties),
263
- current.args?.strict ? zodKeywordMapper.strict() : void 0,
295
+ hasReferences && isV4() ? zodKeywordMapper.interface(properties, current.args?.strict) : zodKeywordMapper.object(properties, current.args?.strict),
264
296
  additionalProperties ? zodKeywordMapper.catchall(additionalProperties) : void 0
265
297
  ].filter(Boolean);
266
298
  return text.join("");
267
299
  }
268
300
  if (isKeyword(current, schemaKeywords.tuple)) {
269
301
  return zodKeywordMapper.tuple(
270
- current.args.items.map((schema, _index, siblings2) => parse({ parent: current, current: schema, siblings: siblings2 }, options)).filter(Boolean)
302
+ current.args.items.map((schema, _index, siblings2) => parse({ parent: current, name, current: schema, siblings: siblings2 }, options)).filter(Boolean)
271
303
  );
272
304
  }
273
305
  if (isKeyword(current, schemaKeywords.const)) {
@@ -342,23 +374,26 @@ function parse({ parent, current, siblings }, options) {
342
374
  }
343
375
  function Zod({ name, typeName, tree, rawSchema, inferTypeName, mapper, coercion, keysToOmit, description, wrapOutput }) {
344
376
  const hasTuple = tree.some((item) => isKeyword(item, schemaKeywords.tuple));
345
- const output = sort(tree).filter((item) => {
377
+ const schemas = sort(tree).filter((item) => {
346
378
  if (hasTuple && (isKeyword(item, schemaKeywords.min) || isKeyword(item, schemaKeywords.max))) {
347
379
  return false;
348
380
  }
349
381
  return true;
350
- }).map(
382
+ });
383
+ const output = schemas.map(
351
384
  (schema, _index, siblings) => parse({ parent: void 0, current: schema, siblings }, { name, keysToOmit, typeName, description, mapper, coercion, wrapOutput, rawSchema })
352
385
  ).filter(Boolean).join("");
353
386
  let suffix = "";
354
- if (output.endsWith(".nullable()")) {
355
- if (output.startsWith("z.lazy")) {
387
+ const firstSchema = schemas.at(0);
388
+ const lastSchema = schemas.at(-1);
389
+ if (lastSchema && isKeyword(lastSchema, schemaKeywords.nullable)) {
390
+ if (firstSchema && isKeyword(firstSchema, schemaKeywords.ref)) {
356
391
  suffix = ".unwrap().schema.unwrap()";
357
392
  } else {
358
393
  suffix = ".unwrap()";
359
394
  }
360
395
  } else {
361
- if (output.startsWith("z.lazy")) {
396
+ if (firstSchema && isKeyword(firstSchema, schemaKeywords.ref)) {
362
397
  suffix = ".schema";
363
398
  }
364
399
  }
@@ -385,5 +420,5 @@ function Zod({ name, typeName, tree, rawSchema, inferTypeName, mapper, coercion,
385
420
  }
386
421
 
387
422
  export { Operations, Zod };
388
- //# sourceMappingURL=chunk-VPOWWZEW.js.map
389
- //# sourceMappingURL=chunk-VPOWWZEW.js.map
423
+ //# sourceMappingURL=chunk-3KBN4WTO.js.map
424
+ //# sourceMappingURL=chunk-3KBN4WTO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Operations.tsx","../src/parser.ts","../src/components/Zod.tsx"],"names":["transformers","siblings","name","value","isKeyword","schemaKeywords","jsxs","Fragment","jsx","File","Const"],"mappings":";;;;;;;AAWO,SAAS,UAAW,CAAA,EAAE,IAAM,EAAA,UAAA,EAAqB,EAAA;AACtD,EAAA,MAAM,iBAAiB,UAAW,CAAA,MAAA;AAAA,IAChC,CAAC,MAAM,GAAQ,KAAA;AACb,MAAA,IAAA,CAAK,IAAI,GAAI,CAAA,SAAA,CAAU,gBAAgB,CAAA,CAAA,CAAG,IAAI,GAAI,CAAA,IAAA;AAElD,MAAO,OAAA,IAAA;AAAA,KACT;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,YAAY,UAAW,CAAA,MAAA;AAAA,IAC3B,CAAC,MAAM,GAAQ,KAAA;AACb,MAAA,IAAA,CAAK,CAAI,CAAA,EAAA,GAAA,CAAI,SAAU,CAAA,IAAI,GAAG,CAAI,GAAA;AAAA,QAChC,GAAI,KAAK,CAAI,CAAA,EAAA,GAAA,CAAI,UAAU,IAAI,CAAA,CAAA,CAAG,KAAM,EAAC;AAAA,QACzC,CAAC,IAAI,SAAU,CAAA,MAAM,GAAG,CAAe,YAAA,EAAA,GAAA,CAAI,SAAU,CAAA,cAAA,EAAgB,CAAA,EAAA;AAAA,OACvE;AAEA,MAAO,OAAA,IAAA;AAAA,KACT;AAAA,IACA;AAAC,GACH;AAEA,EAAA,uBAEI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,IAAA,CAAK,QAAL,EAAY,IAAA,EAAY,cAAY,IAAC,EAAA,WAAA,EAAW,MAC/C,QAAC,kBAAA,GAAA,CAAA,KAAA,EAAA,EAAM,QAAM,IAAC,EAAA,IAAA,EAAY,SAAO,IAC9B,EAAA,QAAA,EAAA,CAAA,CAAA,EAAIA,cAAa,eAAgB,CAAA,cAAc,CAAC,CAAA,CAAA,CAAA,EACnD,CACF,EAAA,CAAA;AAAA,oBACA,GAAA,CAAC,IAAK,CAAA,MAAA,EAAL,EAAY,IAAA,EAAM,SAAS,YAAY,EAAA,IAAA,EAAC,WAAW,EAAA,IAAA,EAClD,QAAC,kBAAA,GAAA,CAAA,KAAA,EAAA,EAAM,QAAM,IAAC,EAAA,IAAA,EAAM,OAAS,EAAA,OAAA,EAAO,IACjC,EAAA,QAAA,EAAA,CAAA,CAAA,EAAIA,cAAa,eAAgB,CAAA,SAAS,CAAC,CAAA,CAAA,CAAA,EAC9C,CACF,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;ACxCA,IAAM,cAAA,GAAiB,IAAI,cAAe,EAAA;AAC1C,IAAM,IAAA,GAAO,MAAM,cAAA,CAAe,WAAY,CAAA,KAAA,EAAO,KAAK,CAAK,IAAA,cAAA,CAAe,WAAY,CAAA,KAAA,EAAO,MAAM,CAAA;AAEvG,IAAM,gBAAmB,GAAA;AAAA,EACvB,KAAK,MAAM,SAAA;AAAA,EACX,SAAS,MAAM,aAAA;AAAA,EACf,MAAM,MAAM,UAAA;AAAA,EACZ,MAAQ,EAAA,CAAC,QAAoB,EAAA,GAAA,EAAc,GAAiB,KAAA;AAC1D,IAAO,OAAA,CAAC,WAAW,mBAAsB,GAAA,YAAA,EAAc,QAAQ,MAAY,GAAA,CAAA,KAAA,EAAQ,GAAG,CAAM,CAAA,CAAA,GAAA,MAAA,EAAW,QAAQ,MAAY,GAAA,CAAA,KAAA,EAAQ,GAAG,CAAM,CAAA,CAAA,GAAA,MAAS,EAClJ,MAAO,CAAA,OAAO,CACd,CAAA,IAAA,CAAK,EAAE,CAAA;AAAA,GACZ;AAAA,EACA,OAAS,EAAA,CAAC,QAAoB,EAAA,GAAA,EAAc,GAAiB,KAAA;AAC3D,IAAO,OAAA;AAAA,MACL,QAAW,GAAA,yBAAA,GAA4B,IAAK,EAAA,GAAI,SAAY,GAAA,kBAAA;AAAA,MAC5D,GAAQ,KAAA,MAAA,GAAY,CAAQ,KAAA,EAAA,GAAG,CAAM,CAAA,CAAA,GAAA,MAAA;AAAA,MACrC,GAAQ,KAAA,MAAA,GAAY,CAAQ,KAAA,EAAA,GAAG,CAAM,CAAA,CAAA,GAAA;AAAA,KAEpC,CAAA,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,EAAE,CAAA;AAAA,GACZ;AAAA,EACA,SAAA,EAAW,CAAC,KAAA,EAAgB,MAAqB,KAAA;AAC/C,IAAA,IAAI,MAAQ,EAAA;AACV,MAAO,OAAA,CAAA;AAAA,IAAA,EACP,KAAK;AAAA,MAAA,CAAA;AAAA;AAGP,IAAO,OAAA,CAAA;AAAA,IAAA,EACL,KAAK;AAAA,MAAA,CAAA;AAAA,GAET;AAAA,EACA,MAAA,EAAQ,CAAC,KAAA,EAAgB,MAAqB,KAAA;AAC5C,IAAI,IAAA,IAAA,MAAU,MAAQ,EAAA;AACpB,MAAO,OAAA,CAAA;AAAA,IAAA,EACP,KAAK;AAAA,MAAA,CAAA;AAAA;AAIP,IAAA,IAAI,MAAQ,EAAA;AACV,MAAO,OAAA,CAAA;AAAA,IAAA,EACP,KAAK;AAAA,eAAA,CAAA;AAAA;AAIP,IAAO,OAAA,CAAA;AAAA,IAAA,EACL,KAAK;AAAA,MAAA,CAAA;AAAA,GAET;AAAA,EACA,MAAQ,EAAA,CAAC,QAAoB,EAAA,GAAA,EAAc,GAAiB,KAAA;AAC1D,IAAO,OAAA,CAAC,WAAW,mBAAsB,GAAA,YAAA,EAAc,QAAQ,MAAY,GAAA,CAAA,KAAA,EAAQ,GAAG,CAAM,CAAA,CAAA,GAAA,MAAA,EAAW,QAAQ,MAAY,GAAA,CAAA,KAAA,EAAQ,GAAG,CAAM,CAAA,CAAA,GAAA,MAAS,EAClJ,MAAO,CAAA,OAAO,CACd,CAAA,IAAA,CAAK,EAAE,CAAA;AAAA,GACZ;AAAA;AAAA,EAEA,SAAS,MAAM,aAAA;AAAA,EACf,WAAW,MAAM,eAAA;AAAA,EACjB,UAAU,MAAM,aAAA;AAAA,EAChB,MAAM,MAAM,UAAA;AAAA,EACZ,SAAS,MAAM,YAAA;AAAA,EACf,OAAO,CAAC,KAAA,GAAkB,EAAI,EAAA,GAAA,EAAc,KAAc,MAAqB,KAAA;AAC7E,IAAO,OAAA;AAAA,MACL,CAAW,QAAA,EAAA,KAAA,EAAO,IAAK,CAAA,EAAE,CAAC,CAAA,CAAA,CAAA;AAAA,MAC1B,GAAQ,KAAA,MAAA,GAAY,CAAQ,KAAA,EAAA,GAAG,CAAM,CAAA,CAAA,GAAA,MAAA;AAAA,MACrC,GAAQ,KAAA,MAAA,GAAY,CAAQ,KAAA,EAAA,GAAG,CAAM,CAAA,CAAA,GAAA,MAAA;AAAA,MACrC,SAAS,CAAwG,mGAAA,CAAA,GAAA;AAAA,KAEhH,CAAA,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,EAAE,CAAA;AAAA,GACZ;AAAA,EACA,KAAA,EAAO,CAAC,KAAkB,GAAA,OAAO,CAAY,SAAA,EAAA,KAAA,EAAO,IAAK,CAAA,IAAI,CAAC,CAAA,EAAA,CAAA;AAAA,EAC9D,IAAA,EAAM,CAAC,KAAkB,GAAA,OAAO,CAAW,QAAA,EAAA,KAAA,EAAO,IAAK,CAAA,IAAI,CAAC,CAAA,EAAA,CAAA;AAAA,EAC5D,KAAA,EAAO,CAAC,KAAkB,GAAA,OAAO,CAAY,SAAA,EAAA,KAAA,EAAO,IAAK,CAAA,IAAI,CAAC,CAAA,EAAA,CAAA;AAAA,EAC9D,KAAO,EAAA,CAAC,KAAsC,KAAA,CAAA,UAAA,EAAa,SAAS,EAAE,CAAA,CAAA,CAAA;AAAA;AAAA;AAAA;AAAA,EAItE,QAAU,EAAA,CAAC,MAAS,GAAA,KAAA,EAAO,QAAQ,KAAU,KAAA;AAC3C,IAAA,IAAI,MAAQ,EAAA;AACV,MAAA,OAAO,MAAS,GAAA,CAAA,yBAAA,EAA4B,MAAM,CAAA,GAAA,CAAA,GAAQ,iCAAiC,MAAM,CAAA,GAAA,CAAA;AAAA;AAGnG,IAAA,IAAI,KAAO,EAAA;AACT,MAAA,OAAO,MAAS,GAAA,CAAA,wBAAA,EAA2B,KAAK,CAAA,GAAA,CAAA,GAAQ,gCAAgC,KAAK,CAAA,GAAA,CAAA;AAAA;AAG/F,IAAO,OAAA,uBAAA;AAAA,GACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAM,EAAA,CAAC,IAA0B,GAAA,QAAA,EAAU,QAAuB,KAAA;AAChE,IAAA,IAAI,SAAS,QAAU,EAAA;AACrB,MAAO,OAAA,IAAA,KAAS,cAAiB,GAAA,mBAAA;AAAA;AAGnC,IAAA,IAAI,QAAU,EAAA;AACZ,MAAO,OAAA,iBAAA;AAAA;AAGT,IAAO,OAAA,UAAA;AAAA,GACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAM,EAAA,CAAC,IAA0B,GAAA,QAAA,EAAU,QAAuB,KAAA;AAChE,IAAA,IAAI,SAAS,QAAU,EAAA;AACrB,MAAO,OAAA,IAAA,KAAS,cAAiB,GAAA,mBAAA;AAAA;AAGnC,IAAA,IAAI,QAAU,EAAA;AACZ,MAAO,OAAA,iBAAA;AAAA;AAGT,IAAO,OAAA,UAAA;AAAA,GACT;AAAA,EACA,IAAA,EAAM,CAAC,QAAwB,KAAA,IAAA,KAAU,QAAW,GAAA,0BAAA,GAA6B,UAAc,GAAA,QAAA,GAAW,0BAA6B,GAAA,mBAAA;AAAA,EACvI,GAAA,EAAK,CAAC,QAAwB,KAAA,IAAA,KAAU,QAAW,GAAA,yBAAA,GAA4B,SAAa,GAAA,QAAA,GAAW,yBAA4B,GAAA,kBAAA;AAAA,EACnI,OAAA,EAAS,CAAC,KAA4C,KAAA;AACpD,IAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,MAAO,OAAA,cAAA;AAAA;AAET,IAAO,OAAA,CAAA,SAAA,EAAY,SAAS,EAAE,CAAA,CAAA,CAAA;AAAA,GAChC;AAAA,EACA,GAAK,EAAA,CAAC,KAAkB,GAAA,OAAO,KAAO,EAAA,GAAA,CAAI,CAAC,IAAA,KAAS,CAAQ,KAAA,EAAA,IAAI,CAAG,CAAA,CAAA,CAAA,CAAE,KAAK,EAAE,CAAA;AAAA,EAC5E,QAAU,EAAA,CAAC,KAAQ,GAAA,EAAA,KAAO,aAAa,KAAK,CAAA,CAAA,CAAA;AAAA,EAC5C,GAAK,EAAA,CAAC,KAAmB,KAAA,CAAA,KAAA,EAAQ,SAAS,EAAE,CAAA,CAAA,CAAA;AAAA,EAC5C,GAAK,EAAA,CAAC,KAAmB,KAAA,CAAA,KAAA,EAAQ,SAAS,EAAE,CAAA,CAAA,CAAA;AAAA,EAC5C,UAAU,MAAM,aAAA;AAAA,EAChB,OAAA,EAAS,CAAC,KAAA,GAAQ,EAAI,EAAA,QAAA,KAAwB,WAAW,CAA2B,wBAAA,EAAA,KAAK,CAAM,CAAA,CAAA,GAAA,CAAA,iBAAA,EAAoB,KAAK,CAAA,CAAA,CAAA;AAAA,EACxH,KAAA,EAAO,CAAC,QACN,KAAA,IAAA,KAAU,QAAW,GAAA,2BAAA,GAA8B,WAAe,GAAA,QAAA,GAAW,2BAA8B,GAAA,oBAAA;AAAA,EAC7G,SAAW,EAAA,MAAA;AAAA,EACX,QAAU,EAAA,MAAA;AAAA,EACV,QAAU,EAAA,MAAA;AAAA,EACV,KAAO,EAAA,MAAA;AAAA,EACP,QAAU,EAAA,MAAA;AAAA,EACV,SAAW,EAAA,MAAA;AAAA,EACX,GAAA,EAAK,CAAC,KAAmB,KAAA;AACvB,IAAA,IAAI,CAAC,KAAO,EAAA;AACV,MAAO,OAAA,MAAA;AAAA;AAGT,IAAA,OAAO,IAAK,EAAA,GAAI,KAAQ,GAAA,CAAA,aAAA,EAAgB,KAAK,CAAA,CAAA,CAAA;AAAA,GAC/C;AAAA,EACA,MAAM,MAAM,oBAAA;AAAA,EACZ,UAAY,EAAA,MAAA;AAAA,EACZ,OAAS,EAAA,MAAA;AAAA,EACT,MAAQ,EAAA,MAAA;AAAA,EACR,UAAU,CAAC,KAAA,KAAoB,KAAQ,GAAA,CAAA,UAAA,EAAa,KAAK,CAAM,CAAA,CAAA,GAAA,MAAA;AAAA,EAC/D,IAAM,EAAA;AACR,CAAA;AAMO,SAAS,KAAK,KAA4B,EAAA;AAC/C,EAAA,MAAM,KAAkB,GAAA;AAAA,IACtB,cAAe,CAAA,MAAA;AAAA,IACf,cAAe,CAAA,QAAA;AAAA,IACf,cAAe,CAAA,IAAA;AAAA,IACf,cAAe,CAAA,IAAA;AAAA,IACf,cAAe,CAAA,KAAA;AAAA,IACf,cAAe,CAAA,MAAA;AAAA,IACf,cAAe,CAAA,MAAA;AAAA,IACf,cAAe,CAAA,IAAA;AAAA,IACf,cAAe,CAAA,GAAA;AAAA,IACf,cAAe,CAAA,KAAA;AAAA,IACf,cAAe,CAAA,SAAA;AAAA,IACf,cAAe,CAAA,QAAA;AAAA,IACf,cAAe,CAAA,QAAA;AAAA,IACf,cAAe,CAAA,OAAA;AAAA,IACf,cAAe,CAAA,IAAA;AAAA,IACf,cAAe,CAAA,IAAA;AAAA,IACf,cAAe,CAAA,GAAA;AAAA,IACf,cAAe,CAAA,GAAA;AAAA,IACf,cAAe,CAAA,OAAA;AAAA,IACf,cAAe,CAAA,QAAA;AAAA,IACf,cAAe,CAAA,QAAA;AAAA,IACf,cAAe,CAAA,QAAA;AAAA,IACf,cAAe,CAAA;AAAA,GACjB;AAEA,EAAA,IAAI,CAAC,KAAO,EAAA;AACV,IAAA,OAAO,EAAC;AAAA;AAGV,EAAA,OAAOA,aAAa,CAAA,OAAA,CAAQ,KAAO,EAAA,CAAC,CAAC,CAAM,KAAA,KAAA,CAAM,OAAQ,CAAA,CAAA,CAAE,OAAO,CAAC,CAAG,EAAA,CAAC,KAAK,CAAC,CAAA;AAC/E;AAEA,IAAM,YAAA,GAAe,CAAC,QAAA,EAAiD,IAAmD,KAAA;AACxH,EAAA,IAAI,aAAa,MAAW,EAAA;AAC1B,IAAO,OAAA,KAAA;AAAA;AAET,EAAI,IAAA,OAAO,aAAa,SAAW,EAAA;AACjC,IAAO,OAAA,QAAA;AAAA;AAGT,EAAO,OAAA,CAAC,CAAC,QAAA,CAAS,IAAI,CAAA;AACxB,CAAA;AAaO,SAAS,MAAM,EAAE,MAAA,EAAQ,SAAS,IAAM,EAAA,QAAA,IAAwB,OAA4C,EAAA;AACjH,EAAM,MAAA,KAAA,GAAQ,gBAAiB,CAAA,OAAA,CAAQ,OAAwC,CAAA;AAE/E,EAAA,IAAI,CAAC,KAAO,EAAA;AACV,IAAO,OAAA,MAAA;AAAA;AAGT,EAAA,IAAI,SAAU,CAAA,OAAA,EAAS,cAAe,CAAA,KAAK,CAAG,EAAA;AAE5C,IAAI,IAAA,KAAA,CAAM,QAAQ,OAAQ,CAAA,IAAI,KAAK,OAAQ,CAAA,IAAA,CAAK,WAAW,CAAG,EAAA;AAC5D,MAAO,OAAA,KAAA,CAAM,EAAE,MAAA,EAAQ,IAAY,EAAA,OAAA,EAAS,OAAQ,CAAA,IAAA,CAAK,CAAC,CAAA,EAAa,QAAS,EAAA,EAAG,OAAO,CAAA;AAAA;AAE5F,IAAI,IAAA,KAAA,CAAM,QAAQ,OAAQ,CAAA,IAAI,KAAK,CAAC,OAAA,CAAQ,KAAK,MAAQ,EAAA;AACvD,MAAO,OAAA,EAAA;AAAA;AAGT,IAAA,OAAO,gBAAiB,CAAA,KAAA;AAAA,MACtB,IAAA,CAAK,QAAQ,IAAI,CAAA,CACd,IAAI,CAAC,MAAA,EAAQ,MAAQC,EAAAA,SAAAA,KAAa,KAAM,CAAA,EAAE,QAAQ,OAAS,EAAA,IAAA,EAAY,OAAS,EAAA,MAAA,EAAQ,QAAAA,EAAAA,SAAAA,IAAY,OAAO,CAAC,CAC5G,CAAA,MAAA,CAAO,OAAO;AAAA,KACnB;AAAA;AAGF,EAAA,IAAI,SAAU,CAAA,OAAA,EAAS,cAAe,CAAA,GAAG,CAAG,EAAA;AAC1C,IAAA,MAAM,QAAQ,IAAK,CAAA,OAAA,CAAQ,IAAI,CAC5B,CAAA,MAAA,CAAO,CAAC,MAAmB,KAAA;AAC1B,MAAO,OAAA,CAAC,CAAC,cAAe,CAAA,QAAA,EAAU,eAAe,QAAQ,CAAA,CAAE,QAAS,CAAA,MAAA,CAAO,OAAyC,CAAA;AAAA,KACrH,EACA,GAAI,CAAA,CAAC,QAAgB,MAAQA,EAAAA,SAAAA,KAAa,MAAM,EAAE,MAAA,EAAQ,SAAS,IAAY,EAAA,OAAA,EAAS,QAAQ,QAAAA,EAAAA,SAAAA,IAAY,OAAO,CAAC,CACpH,CAAA,MAAA,CAAO,OAAO,CAAA;AAEjB,IAAA,OAAO,CAAG,EAAA,KAAA,CAAM,KAAM,CAAA,CAAA,EAAG,CAAC,CAAC,CAAG,EAAA,gBAAA,CAAiB,GAAI,CAAA,KAAA,CAAM,KAAM,CAAA,CAAC,CAAC,CAAC,CAAA,CAAA;AAAA;AAGpE,EAAA,IAAI,SAAU,CAAA,OAAA,EAAS,cAAe,CAAA,KAAK,CAAG,EAAA;AAC5C,IAAA,OAAO,gBAAiB,CAAA,KAAA;AAAA,MACtB,IAAA,CAAK,OAAQ,CAAA,IAAA,CAAK,KAAK,CAAA,CACpB,IAAI,CAAC,OAAA,EAAS,MAAQA,EAAAA,SAAAA,KAAa,KAAM,CAAA,EAAE,QAAQ,OAAS,EAAA,IAAA,EAAY,OAAS,EAAA,OAAA,EAAS,QAAAA,EAAAA,SAAAA,IAAY,OAAO,CAAC,CAC9G,CAAA,MAAA,CAAO,OAAO,CAAA;AAAA,MACjB,QAAQ,IAAK,CAAA,GAAA;AAAA,MACb,QAAQ,IAAK,CAAA,GAAA;AAAA,MACb,QAAQ,IAAK,CAAA;AAAA,KACf;AAAA;AAGF,EAAA,IAAI,SAAU,CAAA,OAAA,EAAS,cAAe,CAAA,IAAI,CAAG,EAAA;AAC3C,IAAI,IAAA,OAAA,CAAQ,KAAK,OAAS,EAAA;AACxB,MAAA,IAAI,OAAQ,CAAA,IAAA,CAAK,KAAM,CAAA,MAAA,KAAW,CAAG,EAAA;AACnC,QAAA,MAAM,KAAQ,GAAA;AAAA,UACZ,SAAS,cAAe,CAAA,KAAA;AAAA,UACxB,IAAM,EAAA,OAAA,CAAQ,IAAK,CAAA,KAAA,CAAM,CAAC;AAAA,SAC5B;AACA,QAAA,OAAO,KAAM,CAAA,EAAE,MAAQ,EAAA,OAAA,EAAS,IAAY,EAAA,OAAA,EAAS,KAAO,EAAA,QAAA,EAAU,CAAC,KAAK,CAAE,EAAA,EAAG,OAAO,CAAA;AAAA;AAG1F,MAAA,OAAO,gBAAiB,CAAA,KAAA;AAAA,QACtB,OAAQ,CAAA,IAAA,CAAK,KACV,CAAA,GAAA,CAAI,CAAC,MAAY,MAAA;AAAA,UAChB,SAAS,cAAe,CAAA,KAAA;AAAA,UACxB,IAAM,EAAA;AAAA,UACN,CACD,CAAA,GAAA,CAAI,CAAC,MAAA,EAAQ,QAAQA,SAAa,KAAA;AACjC,UAAO,OAAA,KAAA,CAAM,EAAE,MAAA,EAAQ,OAAS,EAAA,IAAA,EAAY,SAAS,MAAQ,EAAA,QAAA,EAAAA,SAAS,EAAA,EAAG,OAAO,CAAA;AAAA,SACjF,CACA,CAAA,MAAA,CAAO,OAAO;AAAA,OACnB;AAAA;AAGF,IAAA,OAAO,gBAAiB,CAAA,IAAA;AAAA,MACtB,OAAQ,CAAA,IAAA,CAAK,KAAM,CAAA,GAAA,CAAI,CAAC,MAAW,KAAA;AACjC,QAAI,IAAA,MAAA,CAAO,WAAW,SAAW,EAAA;AAC/B,UAAOD,OAAAA,aAAAA,CAAa,SAAU,CAAA,MAAA,CAAO,KAAK,CAAA;AAAA;AAG5C,QAAI,IAAA,MAAA,CAAO,WAAW,QAAU,EAAA;AAC9B,UAAOA,OAAAA,aAAAA,CAAa,SAAU,CAAA,MAAA,CAAO,KAAK,CAAA;AAAA;AAE5C,QAAOA,OAAAA,aAAAA,CAAa,SAAU,CAAA,MAAA,CAAO,KAAK,CAAA;AAAA,OAC3C;AAAA,KACH;AAAA;AAGF,EAAA,IAAI,SAAU,CAAA,OAAA,EAAS,cAAe,CAAA,GAAG,CAAG,EAAA;AAC1C,IAAA,OAAO,gBAAiB,CAAA,GAAA,CAAI,OAAQ,CAAA,IAAA,EAAM,IAAI,CAAA;AAAA;AAGhD,EAAA,IAAI,SAAU,CAAA,OAAA,EAAS,cAAe,CAAA,MAAM,CAAG,EAAA;AAC7C,IAAM,MAAA,eAAA,GAAkB,MAAO,CAAA,OAAA,CAAQ,OAAQ,CAAA,IAAA,EAAM,UAAc,IAAA,EAAE,CAAA,CAAE,MAAO,CAAA,CAAC,IAAS,KAAA;AACtF,MAAM,MAAA,MAAA,GAAS,KAAK,CAAC,CAAA;AACrB,MAAO,OAAA,MAAA,IAAU,OAAO,MAAA,CAAO,GAAQ,KAAA,UAAA;AAAA,KACxC,CAAA;AAED,IAAA,MAAM,gBAAgB,eAAgB,CAAA,IAAA,CAAK,CAAC,CAAC,KAAA,EAAO,OAAO,CAAM,KAAA;AAC/D,MAAA,OAAO,eAAgB,CAAA,IAAA,CAAK,OAAS,EAAA,cAAA,CAAe,GAAG,CAAA;AAAA,KACxD,CAAA;AAED,IAAA,MAAM,aAAa,eAChB,CAAA,GAAA,CAAI,CAAC,CAACE,KAAAA,EAAM,OAAO,CAAM,KAAA;AACxB,MAAM,MAAA,UAAA,GAAa,QAAQ,IAAK,CAAA,CAAC,WAAW,MAAO,CAAA,OAAA,KAAY,eAAe,IAAI,CAAA;AAClF,MAAM,MAAA,UAAA,GAAa,YAAY,IAAQA,IAAAA,KAAAA;AAGvC,MAAI,IAAA,OAAA,CAAQ,MAAS,GAAA,UAAU,CAAG,EAAA;AAChC,QAAA,OAAO,IAAIA,KAAI,CAAA,GAAA,EAAM,OAAQ,CAAA,MAAA,GAAS,UAAU,CAAC,CAAA,CAAA;AAAA;AAGnD,MAAM,MAAA,gBAAA,GAAmB,IAAK,CAAA,OAAO,CAClC,CAAA,GAAA,CAAI,CAAC,MAAW,KAAA,KAAA,CAAM,EAAE,MAAA,EAAQ,OAAS,EAAA,IAAA,EAAAA,OAAM,OAAS,EAAA,MAAA,EAAQ,QAAU,EAAA,OAAA,EAAW,EAAA,OAAO,CAAC,CAAA,CAC7F,MAAO,CAAA,OAAO,CACd,CAAA,IAAA,CAAK,EAAE,CAAA;AAEV,MAAA,MAAM,cAAc,OAAQ,CAAA,UAAA,GACxB,OAAQ,CAAA,UAAA,CAAW,EAAE,MAAQ,EAAA,gBAAA,EAAkB,MAAQ,EAAA,OAAA,CAAQ,WAAW,UAAaA,GAAAA,KAAI,CAAE,EAAC,KAAK,gBACnG,GAAA,gBAAA;AAEJ,MAAA,IAAI,MAAU,IAAA,eAAA,CAAgB,KAAK,OAAS,EAAA,cAAA,CAAe,GAAG,CAAG,EAAA;AAC/D,QAAA,OAAO,OAAOA,KAAI,CAAA;AAAA,uBAAA,EACH,WAAW;AAAA,eAAA,CAAA;AAAA;AAI5B,MAAO,OAAA,CAAA,CAAA,EAAIA,KAAI,CAAA,GAAA,EAAM,WAAW,CAAA,CAAA;AAAA,KACjC,CACA,CAAA,IAAA,CAAK,KAAK,CAAA;AAEb,IAAA,MAAM,oBAAuB,GAAA,OAAA,CAAQ,IAAM,EAAA,oBAAA,EAAsB,MAC7D,GAAA,OAAA,CAAQ,IAAK,CAAA,oBAAA,CACV,GAAI,CAAA,CAAC,MAAQ,EAAA,MAAA,EAAQD,cAAa,KAAM,CAAA,EAAE,MAAQ,EAAA,OAAA,EAAS,IAAY,EAAA,OAAA,EAAS,MAAQ,EAAA,QAAA,EAAAA,WAAY,EAAA,OAAO,CAAC,CAAA,CAC5G,MAAO,CAAA,OAAO,CACd,CAAA,IAAA,CAAK,EAAE,CACV,GAAA,MAAA;AAEJ,IAAA,MAAM,IAAO,GAAA;AAAA,MACX,aAAiB,IAAA,IAAA,EAAS,GAAA,gBAAA,CAAiB,UAAU,UAAY,EAAA,OAAA,CAAQ,IAAM,EAAA,MAAM,IAAI,gBAAiB,CAAA,MAAA,CAAO,UAAY,EAAA,OAAA,CAAQ,MAAM,MAAM,CAAA;AAAA,MACjJ,oBAAuB,GAAA,gBAAA,CAAiB,QAAS,CAAA,oBAAoB,CAAI,GAAA;AAAA,KAC3E,CAAE,OAAO,OAAO,CAAA;AAEhB,IAAO,OAAA,IAAA,CAAK,KAAK,EAAE,CAAA;AAAA;AAGrB,EAAA,IAAI,SAAU,CAAA,OAAA,EAAS,cAAe,CAAA,KAAK,CAAG,EAAA;AAC5C,IAAA,OAAO,gBAAiB,CAAA,KAAA;AAAA,MACtB,OAAA,CAAQ,KAAK,KAAM,CAAA,GAAA,CAAI,CAAC,MAAQ,EAAA,MAAA,EAAQA,SAAa,KAAA,KAAA,CAAM,EAAE,MAAA,EAAQ,SAAS,IAAY,EAAA,OAAA,EAAS,QAAQ,QAAAA,EAAAA,SAAAA,IAAY,OAAO,CAAC,CAAE,CAAA,MAAA,CAAO,OAAO;AAAA,KACjJ;AAAA;AAGF,EAAA,IAAI,SAAU,CAAA,OAAA,EAAS,cAAe,CAAA,KAAK,CAAG,EAAA;AAC5C,IAAA,IAAI,QAAQ,IAAK,CAAA,MAAA,KAAW,YAAY,OAAQ,CAAA,IAAA,CAAK,UAAU,MAAW,EAAA;AACxE,MAAO,OAAA,gBAAA,CAAiB,MAAM,MAAO,CAAA,QAAA,CAAS,QAAQ,IAAK,CAAA,KAAA,EAAO,QAAS,EAAC,CAAC,CAAA;AAAA;AAG/E,IAAA,IAAI,QAAQ,IAAK,CAAA,MAAA,KAAW,aAAa,OAAQ,CAAA,IAAA,CAAK,UAAU,MAAW,EAAA;AACzE,MAAA,OAAO,gBAAiB,CAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,KAAK,CAAA;AAAA;AAElD,IAAA,OAAO,iBAAiB,KAAMD,CAAAA,aAAAA,CAAa,UAAU,OAAQ,CAAA,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA;AAG1E,EAAA,IAAI,SAAU,CAAA,OAAA,EAAS,cAAe,CAAA,OAAO,CAAG,EAAA;AAC9C,IAAA,IAAI,QAAQ,IAAM,EAAA;AAChB,MAAA,OAAO,gBAAiB,CAAA,OAAA,CAAQA,aAAa,CAAA,cAAA,CAAe,OAAQ,CAAA,IAAA,EAAM,IAAI,CAAA,EAAG,YAAa,CAAA,OAAA,CAAQ,QAAU,EAAA,SAAS,CAAC,CAAA;AAAA;AAC5H;AAGF,EAAA,IAAI,SAAU,CAAA,OAAA,EAAS,cAAe,CAAA,OAAO,CAAG,EAAA;AAC9C,IAAA,IAAI,QAAQ,IAAM,EAAA;AAChB,MAAO,OAAA,gBAAA,CAAiB,OAAQ,CAAA,OAAA,CAAQ,IAAI,CAAA;AAAA;AAC9C;AAGF,EAAA,IAAI,SAAU,CAAA,OAAA,EAAS,cAAe,CAAA,QAAQ,CAAG,EAAA;AAC/C,IAAA,IAAI,QAAQ,IAAM,EAAA;AAChB,MAAO,OAAA,gBAAA,CAAiB,SAASA,aAAa,CAAA,SAAA,CAAU,QAAQ,IAAK,CAAA,QAAA,EAAU,CAAC,CAAA;AAAA;AAClF;AAGF,EAAA,IAAI,SAAU,CAAA,OAAA,EAAS,cAAe,CAAA,MAAM,CAAG,EAAA;AAC7C,IAAA,OAAO,iBAAiB,MAAO,CAAA,YAAA,CAAa,OAAQ,CAAA,QAAA,EAAU,SAAS,CAAC,CAAA;AAAA;AAG1E,EAAA,IAAI,SAAU,CAAA,OAAA,EAAS,cAAe,CAAA,IAAI,CAAG,EAAA;AAC3C,IAAA,OAAO,iBAAiB,IAAK,CAAA,YAAA,CAAa,OAAQ,CAAA,QAAA,EAAU,SAAS,CAAC,CAAA;AAAA;AAGxE,EAAA,IAAI,SAAU,CAAA,OAAA,EAAS,cAAe,CAAA,KAAK,CAAG,EAAA;AAC5C,IAAA,OAAO,iBAAiB,KAAM,CAAA,YAAA,CAAa,OAAQ,CAAA,QAAA,EAAU,SAAS,CAAC,CAAA;AAAA;AAGzE,EAAA,IAAI,SAAU,CAAA,OAAA,EAAS,cAAe,CAAA,GAAG,CAAG,EAAA;AAC1C,IAAA,OAAO,iBAAiB,GAAI,CAAA,YAAA,CAAa,OAAQ,CAAA,QAAA,EAAU,SAAS,CAAC,CAAA;AAAA;AAGvE,EAAA,IAAI,SAAU,CAAA,OAAA,EAAS,cAAe,CAAA,MAAM,CAAG,EAAA;AAC7C,IAAA,OAAO,iBAAiB,MAAO,CAAA,YAAA,CAAa,OAAQ,CAAA,QAAA,EAAU,SAAS,CAAC,CAAA;AAAA;AAG1E,EAAA,IAAI,SAAU,CAAA,OAAA,EAAS,cAAe,CAAA,OAAO,CAAG,EAAA;AAC9C,IAAA,OAAO,iBAAiB,OAAQ,CAAA,YAAA,CAAa,OAAQ,CAAA,QAAA,EAAU,SAAS,CAAC,CAAA;AAAA;AAG3E,EAAA,IAAI,SAAU,CAAA,OAAA,EAAS,cAAe,CAAA,GAAG,CAAG,EAAA;AAC1C,IAAO,OAAA,gBAAA,CAAiB,GAAI,CAAA,OAAA,CAAQ,IAAI,CAAA;AAAA;AAE1C,EAAA,IAAI,SAAU,CAAA,OAAA,EAAS,cAAe,CAAA,GAAG,CAAG,EAAA;AAC1C,IAAO,OAAA,gBAAA,CAAiB,GAAI,CAAA,OAAA,CAAQ,IAAI,CAAA;AAAA;AAG1C,EAAA,IAAI,SAAU,CAAA,OAAA,EAAS,cAAe,CAAA,QAAQ,CAAG,EAAA;AAC/C,IAAA,OAAO,iBAAiB,QAAS,CAAA,OAAA,CAAQ,KAAK,MAAQ,EAAA,OAAA,CAAQ,KAAK,KAAK,CAAA;AAAA;AAG1E,EAAA,IAAI,SAAU,CAAA,OAAA,EAAS,cAAe,CAAA,IAAI,CAAG,EAAA;AAC3C,IAAO,OAAA,gBAAA,CAAiB,KAAK,OAAQ,CAAA,IAAA,CAAK,MAAM,YAAa,CAAA,OAAA,CAAQ,QAAU,EAAA,OAAO,CAAC,CAAA;AAAA;AAGzF,EAAA,IAAI,SAAU,CAAA,OAAA,EAAS,cAAe,CAAA,IAAI,CAAG,EAAA;AAC3C,IAAO,OAAA,gBAAA,CAAiB,KAAK,OAAQ,CAAA,IAAA,CAAK,MAAM,YAAa,CAAA,OAAA,CAAQ,QAAU,EAAA,OAAO,CAAC,CAAA;AAAA;AAGzF,EAAA,IAAI,OAAQ,CAAA,OAAA,IAAW,gBAAoB,IAAA,MAAA,IAAU,OAAS,EAAA;AAC5D,IAAMG,MAAAA,MAAAA,GAAQ,gBAAiB,CAAA,OAAA,CAAQ,OAAwC,CAAA;AAE/E,IAAOA,OAAAA,MAAAA,CAAO,QAAuC,IAAW,CAAA;AAAA;AAGlE,EAAA,IAAI,SAAU,CAAA,OAAA,EAAS,cAAe,CAAA,QAAQ,CAAG,EAAA;AAC/C,IAAI,IAAA,QAAA,CAAS,IAAK,CAAA,CAAC,MAAW,KAAA,SAAA,CAAU,QAAQ,cAAe,CAAA,OAAO,CAAC,CAAA,EAAU,OAAA,EAAA;AAEjF,IAAA,OAAO,KAAM,EAAA;AAAA;AAGf,EAAI,IAAA,OAAA,CAAQ,WAAW,gBAAkB,EAAA;AACvC,IAAA,OAAO,KAAM,EAAA;AAAA;AAGf,EAAO,OAAA,MAAA;AACT;ACrbO,SAAS,GAAI,CAAA,EAAE,IAAM,EAAA,QAAA,EAAU,IAAM,EAAA,SAAA,EAAW,aAAe,EAAA,MAAA,EAAQ,QAAU,EAAA,UAAA,EAAY,WAAa,EAAA,UAAA,EAAqB,EAAA;AACpI,EAAM,MAAA,QAAA,GAAW,KAAK,IAAK,CAAA,CAAC,SAASC,SAAU,CAAA,IAAA,EAAMC,cAAe,CAAA,KAAK,CAAC,CAAA;AAC1E,EAAA,MAAM,UAAoB,IAAK,CAAA,IAAI,CAAE,CAAA,MAAA,CAAO,CAAC,IAAS,KAAA;AACpD,IAAI,IAAA,QAAA,KAAaD,SAAU,CAAA,IAAA,EAAMC,cAAe,CAAA,GAAG,KAAKD,SAAU,CAAA,IAAA,EAAMC,cAAe,CAAA,GAAG,CAAI,CAAA,EAAA;AAC5F,MAAO,OAAA,KAAA;AAAA;AAGT,IAAO,OAAA,IAAA;AAAA,GACR,CAAA;AAED,EAAA,MAAM,SAAS,OACZ,CAAA,GAAA;AAAA,IAAI,CAAC,QAAQ,MAAQ,EAAA,QAAA,KACV,MAAM,EAAE,MAAA,EAAQ,QAAW,OAAS,EAAA,MAAA,EAAQ,UAAY,EAAA,EAAE,MAAM,UAAY,EAAA,QAAA,EAAU,aAAa,MAAQ,EAAA,QAAA,EAAU,UAAY,EAAA,SAAA,EAAW;AAAA,GAEvJ,CAAA,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,EAAE,CAAA;AAEV,EAAA,IAAI,MAAS,GAAA,EAAA;AACb,EAAM,MAAA,WAAA,GAAc,OAAQ,CAAA,EAAA,CAAG,CAAC,CAAA;AAChC,EAAM,MAAA,UAAA,GAAa,OAAQ,CAAA,EAAA,CAAG,EAAE,CAAA;AAEhC,EAAA,IAAI,UAAcD,IAAAA,SAAAA,CAAU,UAAYC,EAAAA,cAAAA,CAAe,QAAQ,CAAG,EAAA;AAChE,IAAA,IAAI,WAAeD,IAAAA,SAAAA,CAAU,WAAaC,EAAAA,cAAAA,CAAe,GAAG,CAAG,EAAA;AAC7D,MAAS,MAAA,GAAA,2BAAA;AAAA,KACJ,MAAA;AACL,MAAS,MAAA,GAAA,WAAA;AAAA;AACX,GACK,MAAA;AACL,IAAA,IAAI,WAAeD,IAAAA,SAAAA,CAAU,WAAaC,EAAAA,cAAAA,CAAe,GAAG,CAAG,EAAA;AAC7D,MAAS,MAAA,GAAA,SAAA;AAAA;AACX;AAGF,EAAM,MAAA,gBAAA,GACJ,CAAC,MAAA,EAAQ,UAAY,EAAA,MAAA,GAAS,CAAG,EAAA,MAAM,CAAW,QAAA,EAAA,UAAA,CAAW,GAAI,CAAA,CAAC,GAAQ,KAAA,CAAA,EAAG,GAAG,CAAA,MAAA,CAAQ,CAAE,CAAA,IAAA,CAAK,GAAG,CAAC,CAAQ,GAAA,CAAA,GAAA,MAAS,CAAE,CAAA,MAAA,CAAO,OAAO,CAAA,CAAE,IAAK,CAAA,EAAE,CAC7I,IAAA,eAAA;AACF,EAAM,MAAA,mBAAA,GAAsB,UAAa,GAAA,UAAA,CAAW,EAAE,MAAA,EAAQ,kBAAkB,MAAQ,EAAA,SAAA,EAAW,CAAA,IAAK,gBAAmB,GAAA,gBAAA;AAC3H,EAAA,MAAM,cAAc,QAAW,GAAA,CAAA,EAAG,mBAAmB,CAAA,qBAAA,EAAwB,QAAQ,CAAM,CAAA,CAAA,GAAA,mBAAA;AAE3F,EACE,uBAAAC,IAAAC,CAAAA,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,GAAAA,CAACC,KAAK,MAAL,EAAA,EAAY,MAAY,YAAY,EAAA,IAAA,EAAC,WAAW,EAAA,IAAA,EAC/C,QAAAD,kBAAAA,GAAAA;AAAA,MAACE,KAAAA;AAAA,MAAA;AAAA,QACC,MAAM,EAAA,IAAA;AAAA,QACN,IAAA;AAAA,QACA,KAAO,EAAA;AAAA,UACL,QAAU,EAAA,CAAC,WAAc,GAAA,CAAA,aAAA,EAAgBV,aAAa,CAAA,cAAA,CAAe,WAAW,CAAC,CAAK,CAAA,GAAA,MAAS,CAAE,CAAA,MAAA,CAAO,OAAO;AAAA,SACjH;AAAA,QAEC,QAAA,EAAA;AAAA;AAAA,KAEL,EAAA,CAAA;AAAA,IACC,aACC,oBAAAM,IAACG,CAAAA,IAAAA,CAAK,MAAL,EAAA,EAAY,IAAM,EAAA,aAAA,EAAe,YAAY,EAAA,IAAA,EAAC,WAAW,EAAA,IAAA,EAAC,YAAU,IAClE,EAAA,QAAA,EAAA;AAAA,MAAA,QAAA,oBACCD,GAAC,CAAA,IAAA,EAAA,EAAK,QAAM,IAAC,EAAA,IAAA,EAAM,eAChB,QACH,EAAA,QAAA,EAAA,CAAA;AAAA,MAED,CAAC,QACA,oBAAAA,GAAC,CAAA,IAAA,EAAA,EAAK,MAAM,EAAA,IAAA,EAAC,IAAM,EAAA,aAAA,EAChB,QAAkB,EAAA,CAAA,eAAA,EAAA,IAAI,CACzB,CAAA,CAAA,EAAA;AAAA,KAEJ,EAAA;AAAA,GAEJ,EAAA,CAAA;AAEJ","file":"chunk-3KBN4WTO.js","sourcesContent":["import type { SchemaNames } from '@kubb/plugin-oas/hooks'\nimport { Const, File } from '@kubb/react'\n\nimport transformers from '@kubb/core/transformers'\nimport type { HttpMethod, Operation } from '@kubb/oas'\n\ntype Props = {\n name: string\n operations: Array<{ operation: Operation; data: SchemaNames }>\n}\n\nexport function Operations({ name, operations }: Props) {\n const operationsJSON = operations.reduce(\n (prev, acc) => {\n prev[`\"${acc.operation.getOperationId()}\"`] = acc.data\n\n return prev\n },\n {} as Record<string, unknown>,\n )\n\n const pathsJSON = operations.reduce(\n (prev, acc) => {\n prev[`\"${acc.operation.path}\"`] = {\n ...(prev[`\"${acc.operation.path}\"`] || ({} as Record<HttpMethod, string>)),\n [acc.operation.method]: `operations[\"${acc.operation.getOperationId()}\"]`,\n }\n\n return prev\n },\n {} as Record<string, Record<HttpMethod, string>>,\n )\n\n return (\n <>\n <File.Source name={name} isExportable isIndexable>\n <Const export name={name} asConst>\n {`{${transformers.stringifyObject(operationsJSON)}}`}\n </Const>\n </File.Source>\n <File.Source name={'paths'} isExportable isIndexable>\n <Const export name={'paths'} asConst>\n {`{${transformers.stringifyObject(pathsJSON)}}`}\n </Const>\n </File.Source>\n </>\n )\n}\n","import transformers from '@kubb/core/transformers'\nimport type { SchemaObject } from '@kubb/oas'\nimport { SchemaGenerator, type SchemaKeywordMapper, type SchemaTree, isKeyword, schemaKeywords } from '@kubb/plugin-oas'\n\nimport type { Schema, SchemaKeywordBase, SchemaMapper } from '@kubb/plugin-oas'\nimport { PackageManager } from '@kubb/core'\n\nconst packageManager = new PackageManager()\nconst isV4 = () => packageManager.isValidSync('zod', '>=4') || packageManager.isValidSync('zod', 'next')\n\nconst zodKeywordMapper = {\n any: () => 'z.any()',\n unknown: () => 'z.unknown()',\n void: () => 'z.void()',\n number: (coercion?: boolean, min?: number, max?: number) => {\n return [coercion ? 'z.coerce.number()' : 'z.number()', min !== undefined ? `.min(${min})` : undefined, max !== undefined ? `.max(${max})` : undefined]\n .filter(Boolean)\n .join('')\n },\n integer: (coercion?: boolean, min?: number, max?: number) => {\n return [\n coercion ? 'z.coerce.number().int()' : isV4() ? 'z.int()' : 'z.number().int()',\n min !== undefined ? `.min(${min})` : undefined,\n max !== undefined ? `.max(${max})` : undefined,\n ]\n .filter(Boolean)\n .join('')\n },\n interface: (value?: string, strict?: boolean) => {\n if (strict) {\n return `z.strictInterface({\n ${value}\n })`\n }\n return `z.interface({\n ${value}\n })`\n },\n object: (value?: string, strict?: boolean) => {\n if (isV4() && strict) {\n return `z.strictObject({\n ${value}\n })`\n }\n\n if (strict) {\n return `z.object({\n ${value}\n }).strict()`\n }\n\n return `z.object({\n ${value}\n })`\n },\n string: (coercion?: boolean, min?: number, max?: number) => {\n return [coercion ? 'z.coerce.string()' : 'z.string()', min !== undefined ? `.min(${min})` : undefined, max !== undefined ? `.max(${max})` : undefined]\n .filter(Boolean)\n .join('')\n },\n //support for discriminatedUnion\n boolean: () => 'z.boolean()',\n undefined: () => 'z.undefined()',\n nullable: () => '.nullable()',\n null: () => 'z.null()',\n nullish: () => '.nullish()',\n array: (items: string[] = [], min?: number, max?: number, unique?: boolean) => {\n return [\n `z.array(${items?.join('')})`,\n min !== undefined ? `.min(${min})` : undefined,\n max !== undefined ? `.max(${max})` : undefined,\n unique ? `.refine(items => new Set(items).size === items.length, { message: \"Array entries must be unique\" })` : undefined,\n ]\n .filter(Boolean)\n .join('')\n },\n tuple: (items: string[] = []) => `z.tuple([${items?.join(', ')}])`,\n enum: (items: string[] = []) => `z.enum([${items?.join(', ')}])`,\n union: (items: string[] = []) => `z.union([${items?.join(', ')}])`,\n const: (value?: string | number | boolean) => `z.literal(${value ?? ''})`,\n /**\n * ISO 8601\n */\n datetime: (offset = false, local = false) => {\n if (offset) {\n return isV4() ? `z.iso.datetime({ offset: ${offset} })` : `z.string().datetime({ offset: ${offset} })`\n }\n\n if (local) {\n return isV4() ? `z.iso.datetime({ local: ${local} })` : `z.string().datetime({ local: ${local} })`\n }\n\n return 'z.string().datetime()'\n },\n /**\n * Type `'date'` Date\n * Type `'string'` ISO date format (YYYY-MM-DD)\n * @default ISO date format (YYYY-MM-DD)\n */\n date: (type: 'date' | 'string' = 'string', coercion?: boolean) => {\n if (type === 'string') {\n return isV4() ? 'z.iso.date()' : 'z.string().date()'\n }\n\n if (coercion) {\n return 'z.coerce.date()'\n }\n\n return 'z.date()'\n },\n /**\n * Type `'date'` Date\n * Type `'string'` ISO time format (HH:mm:ss[.SSSSSS])\n * @default ISO time format (HH:mm:ss[.SSSSSS])\n */\n time: (type: 'date' | 'string' = 'string', coercion?: boolean) => {\n if (type === 'string') {\n return isV4() ? 'z.iso.time()' : 'z.string().time()'\n }\n\n if (coercion) {\n return 'z.coerce.date()'\n }\n\n return 'z.date()'\n },\n uuid: (coercion?: boolean) => (isV4() ? (coercion ? 'z.coerce.string().uuid()' : 'z.uuid()') : coercion ? 'z.coerce.string().uuid()' : 'z.string().uuid()'),\n url: (coercion?: boolean) => (isV4() ? (coercion ? 'z.coerce.string().url()' : 'z.url()') : coercion ? 'z.coerce.string().url()' : 'z.string().url()'),\n default: (value?: string | number | true | object) => {\n if (typeof value === 'object') {\n return '.default({})'\n }\n return `.default(${value ?? ''})`\n },\n and: (items: string[] = []) => items?.map((item) => `.and(${item})`).join(''),\n describe: (value = '') => `.describe(${value})`,\n min: (value?: number) => `.min(${value ?? ''})`,\n max: (value?: number) => `.max(${value ?? ''})`,\n optional: () => '.optional()',\n matches: (value = '', coercion?: boolean) => (coercion ? `z.coerce.string().regex(${value})` : `z.string().regex(${value})`),\n email: (coercion?: boolean) =>\n isV4() ? (coercion ? 'z.coerce.string().email()' : 'z.email()') : coercion ? 'z.coerce.string().email()' : 'z.string().email()',\n firstName: undefined,\n lastName: undefined,\n password: undefined,\n phone: undefined,\n readOnly: undefined,\n writeOnly: undefined,\n ref: (value?: string) => {\n if (!value) {\n return undefined\n }\n\n return isV4() ? value : `z.lazy(() => ${value})`\n },\n blob: () => 'z.instanceof(File)',\n deprecated: undefined,\n example: undefined,\n schema: undefined,\n catchall: (value?: string) => (value ? `.catchall(${value})` : undefined),\n name: undefined,\n} satisfies SchemaMapper<string | null | undefined>\n\n/**\n * @link based on https://github.com/cellular/oazapfts/blob/7ba226ebb15374e8483cc53e7532f1663179a22c/src/codegen/generate.ts#L398\n */\n\nexport function sort(items?: Schema[]): Schema[] {\n const order: string[] = [\n schemaKeywords.string,\n schemaKeywords.datetime,\n schemaKeywords.date,\n schemaKeywords.time,\n schemaKeywords.tuple,\n schemaKeywords.number,\n schemaKeywords.object,\n schemaKeywords.enum,\n schemaKeywords.url,\n schemaKeywords.email,\n schemaKeywords.firstName,\n schemaKeywords.lastName,\n schemaKeywords.password,\n schemaKeywords.matches,\n schemaKeywords.uuid,\n schemaKeywords.null,\n schemaKeywords.min,\n schemaKeywords.max,\n schemaKeywords.default,\n schemaKeywords.describe,\n schemaKeywords.optional,\n schemaKeywords.nullable,\n schemaKeywords.nullish,\n ]\n\n if (!items) {\n return []\n }\n\n return transformers.orderBy(items, [(v) => order.indexOf(v.keyword)], ['asc'])\n}\n\nconst shouldCoerce = (coercion: ParserOptions['coercion'] | undefined, type: 'dates' | 'strings' | 'numbers'): boolean => {\n if (coercion === undefined) {\n return false\n }\n if (typeof coercion === 'boolean') {\n return coercion\n }\n\n return !!coercion[type]\n}\n\ntype ParserOptions = {\n name: string\n typeName?: string\n description?: string\n keysToOmit?: string[]\n mapper?: Record<string, string>\n coercion?: boolean | { dates?: boolean; strings?: boolean; numbers?: boolean }\n wrapOutput?: (opts: { output: string; schema: any }) => string | undefined\n rawSchema: SchemaObject\n}\n\nexport function parse({ parent, current, name, siblings }: SchemaTree, options: ParserOptions): string | undefined {\n const value = zodKeywordMapper[current.keyword as keyof typeof zodKeywordMapper]\n\n if (!value) {\n return undefined\n }\n\n if (isKeyword(current, schemaKeywords.union)) {\n // zod union type needs at least 2 items\n if (Array.isArray(current.args) && current.args.length === 1) {\n return parse({ parent, name: name, current: current.args[0] as Schema, siblings }, options)\n }\n if (Array.isArray(current.args) && !current.args.length) {\n return ''\n }\n\n return zodKeywordMapper.union(\n sort(current.args)\n .map((schema, _index, siblings) => parse({ parent: current, name: name, current: schema, siblings }, options))\n .filter(Boolean),\n )\n }\n\n if (isKeyword(current, schemaKeywords.and)) {\n const items = sort(current.args)\n .filter((schema: Schema) => {\n return ![schemaKeywords.optional, schemaKeywords.describe].includes(schema.keyword as typeof schemaKeywords.describe)\n })\n .map((schema: Schema, _index, siblings) => parse({ parent: current, name: name, current: schema, siblings }, options))\n .filter(Boolean)\n\n return `${items.slice(0, 1)}${zodKeywordMapper.and(items.slice(1))}`\n }\n\n if (isKeyword(current, schemaKeywords.array)) {\n return zodKeywordMapper.array(\n sort(current.args.items)\n .map((schemas, _index, siblings) => parse({ parent: current, name: name, current: schemas, siblings }, options))\n .filter(Boolean),\n current.args.min,\n current.args.max,\n current.args.unique,\n )\n }\n\n if (isKeyword(current, schemaKeywords.enum)) {\n if (current.args.asConst) {\n if (current.args.items.length === 1) {\n const child = {\n keyword: schemaKeywords.const,\n args: current.args.items[0],\n }\n return parse({ parent: current, name: name, current: child, siblings: [child] }, options)\n }\n\n return zodKeywordMapper.union(\n current.args.items\n .map((schema) => ({\n keyword: schemaKeywords.const,\n args: schema,\n }))\n .map((schema, _index, siblings) => {\n return parse({ parent: current, name: name, current: schema, siblings }, options)\n })\n .filter(Boolean),\n )\n }\n\n return zodKeywordMapper.enum(\n current.args.items.map((schema) => {\n if (schema.format === 'boolean') {\n return transformers.stringify(schema.value)\n }\n\n if (schema.format === 'number') {\n return transformers.stringify(schema.value)\n }\n return transformers.stringify(schema.value)\n }),\n )\n }\n\n if (isKeyword(current, schemaKeywords.ref)) {\n return zodKeywordMapper.ref(current.args?.name)\n }\n\n if (isKeyword(current, schemaKeywords.object)) {\n const propertyEntries = Object.entries(current.args?.properties || {}).filter((item) => {\n const schema = item[1]\n return schema && typeof schema.map === 'function'\n })\n\n const hasReferences = propertyEntries.some(([_name, schemas]) => {\n return SchemaGenerator.find(schemas, schemaKeywords.ref)\n })\n\n const properties = propertyEntries\n .map(([name, schemas]) => {\n const nameSchema = schemas.find((schema) => schema.keyword === schemaKeywords.name) as SchemaKeywordMapper['name']\n const mappedName = nameSchema?.args || name\n\n // custom mapper(pluginOptions)\n if (options.mapper?.[mappedName]) {\n return `\"${name}\": ${options.mapper?.[mappedName]}`\n }\n\n const baseSchemaOutput = sort(schemas)\n .map((schema) => parse({ parent: current, name, current: schema, siblings: schemas }, options))\n .filter(Boolean)\n .join('')\n\n const objectValue = options.wrapOutput\n ? options.wrapOutput({ output: baseSchemaOutput, schema: options.rawSchema?.properties?.[name] }) || baseSchemaOutput\n : baseSchemaOutput\n\n if (isV4() && SchemaGenerator.find(schemas, schemaKeywords.ref)) {\n return `get ${name}(){\n return ${objectValue}\n }`\n }\n\n return `\"${name}\": ${objectValue}`\n })\n .join(',\\n')\n\n const additionalProperties = current.args?.additionalProperties?.length\n ? current.args.additionalProperties\n .map((schema, _index, siblings) => parse({ parent: current, name: name, current: schema, siblings }, options))\n .filter(Boolean)\n .join('')\n : undefined\n\n const text = [\n hasReferences && isV4() ? zodKeywordMapper.interface(properties, current.args?.strict) : zodKeywordMapper.object(properties, current.args?.strict),\n additionalProperties ? zodKeywordMapper.catchall(additionalProperties) : undefined,\n ].filter(Boolean)\n\n return text.join('')\n }\n\n if (isKeyword(current, schemaKeywords.tuple)) {\n return zodKeywordMapper.tuple(\n current.args.items.map((schema, _index, siblings) => parse({ parent: current, name: name, current: schema, siblings }, options)).filter(Boolean),\n )\n }\n\n if (isKeyword(current, schemaKeywords.const)) {\n if (current.args.format === 'number' && current.args.value !== undefined) {\n return zodKeywordMapper.const(Number.parseInt(current.args.value?.toString()))\n }\n\n if (current.args.format === 'boolean' && current.args.value !== undefined) {\n return zodKeywordMapper.const(current.args.value)\n }\n return zodKeywordMapper.const(transformers.stringify(current.args.value))\n }\n\n if (isKeyword(current, schemaKeywords.matches)) {\n if (current.args) {\n return zodKeywordMapper.matches(transformers.toRegExpString(current.args, null), shouldCoerce(options.coercion, 'strings'))\n }\n }\n\n if (isKeyword(current, schemaKeywords.default)) {\n if (current.args) {\n return zodKeywordMapper.default(current.args)\n }\n }\n\n if (isKeyword(current, schemaKeywords.describe)) {\n if (current.args) {\n return zodKeywordMapper.describe(transformers.stringify(current.args.toString()))\n }\n }\n\n if (isKeyword(current, schemaKeywords.string)) {\n return zodKeywordMapper.string(shouldCoerce(options.coercion, 'strings'))\n }\n\n if (isKeyword(current, schemaKeywords.uuid)) {\n return zodKeywordMapper.uuid(shouldCoerce(options.coercion, 'strings'))\n }\n\n if (isKeyword(current, schemaKeywords.email)) {\n return zodKeywordMapper.email(shouldCoerce(options.coercion, 'strings'))\n }\n\n if (isKeyword(current, schemaKeywords.url)) {\n return zodKeywordMapper.url(shouldCoerce(options.coercion, 'strings'))\n }\n\n if (isKeyword(current, schemaKeywords.number)) {\n return zodKeywordMapper.number(shouldCoerce(options.coercion, 'numbers'))\n }\n\n if (isKeyword(current, schemaKeywords.integer)) {\n return zodKeywordMapper.integer(shouldCoerce(options.coercion, 'numbers'))\n }\n\n if (isKeyword(current, schemaKeywords.min)) {\n return zodKeywordMapper.min(current.args)\n }\n if (isKeyword(current, schemaKeywords.max)) {\n return zodKeywordMapper.max(current.args)\n }\n\n if (isKeyword(current, schemaKeywords.datetime)) {\n return zodKeywordMapper.datetime(current.args.offset, current.args.local)\n }\n\n if (isKeyword(current, schemaKeywords.date)) {\n return zodKeywordMapper.date(current.args.type, shouldCoerce(options.coercion, 'dates'))\n }\n\n if (isKeyword(current, schemaKeywords.time)) {\n return zodKeywordMapper.time(current.args.type, shouldCoerce(options.coercion, 'dates'))\n }\n\n if (current.keyword in zodKeywordMapper && 'args' in current) {\n const value = zodKeywordMapper[current.keyword as keyof typeof zodKeywordMapper] as (typeof zodKeywordMapper)['const']\n\n return value((current as SchemaKeywordBase<unknown>).args as any)\n }\n\n if (isKeyword(current, schemaKeywords.optional)) {\n if (siblings.some((schema) => isKeyword(schema, schemaKeywords.default))) return ''\n\n return value()\n }\n\n if (current.keyword in zodKeywordMapper) {\n return value()\n }\n\n return undefined\n}\n","import transformers from '@kubb/core/transformers'\nimport { type Schema, schemaKeywords } from '@kubb/plugin-oas'\nimport { isKeyword } from '@kubb/plugin-oas'\nimport { Const, File, Type } from '@kubb/react'\nimport * as parserZod from '../parser.ts'\nimport type { PluginZod } from '../types.ts'\nimport type { SchemaObject } from '@kubb/oas'\n\ntype Props = {\n name: string\n typeName?: string\n inferTypeName?: string\n tree: Array<Schema>\n rawSchema: SchemaObject\n description?: string\n coercion: PluginZod['resolvedOptions']['coercion']\n mapper: PluginZod['resolvedOptions']['mapper']\n keysToOmit?: string[]\n wrapOutput?: PluginZod['resolvedOptions']['wrapOutput']\n}\n\nexport function Zod({ name, typeName, tree, rawSchema, inferTypeName, mapper, coercion, keysToOmit, description, wrapOutput }: Props) {\n const hasTuple = tree.some((item) => isKeyword(item, schemaKeywords.tuple))\n const schemas = parserZod.sort(tree).filter((item) => {\n if (hasTuple && (isKeyword(item, schemaKeywords.min) || isKeyword(item, schemaKeywords.max))) {\n return false\n }\n\n return true\n })\n\n const output = schemas\n .map((schema, _index, siblings) =>\n parserZod.parse({ parent: undefined, current: schema, siblings }, { name, keysToOmit, typeName, description, mapper, coercion, wrapOutput, rawSchema }),\n )\n .filter(Boolean)\n .join('')\n\n let suffix = ''\n const firstSchema = schemas.at(0)\n const lastSchema = schemas.at(-1)\n\n if (lastSchema && isKeyword(lastSchema, schemaKeywords.nullable)) {\n if (firstSchema && isKeyword(firstSchema, schemaKeywords.ref)) {\n suffix = '.unwrap().schema.unwrap()'\n } else {\n suffix = '.unwrap()'\n }\n } else {\n if (firstSchema && isKeyword(firstSchema, schemaKeywords.ref)) {\n suffix = '.schema'\n }\n }\n\n const baseSchemaOutput =\n [output, keysToOmit?.length ? `${suffix}.omit({ ${keysToOmit.map((key) => `${key}: true`).join(',')} })` : undefined].filter(Boolean).join('') ||\n 'z.undefined()'\n const wrappedSchemaOutput = wrapOutput ? wrapOutput({ output: baseSchemaOutput, schema: rawSchema }) || baseSchemaOutput : baseSchemaOutput\n const finalOutput = typeName ? `${wrappedSchemaOutput} as unknown as ToZod<${typeName}>` : wrappedSchemaOutput\n\n return (\n <>\n <File.Source name={name} isExportable isIndexable>\n <Const\n export\n name={name}\n JSDoc={{\n comments: [description ? `@description ${transformers.jsStringEscape(description)}` : undefined].filter(Boolean),\n }}\n >\n {finalOutput}\n </Const>\n </File.Source>\n {inferTypeName && (\n <File.Source name={inferTypeName} isExportable isIndexable isTypeOnly>\n {typeName && (\n <Type export name={inferTypeName}>\n {typeName}\n </Type>\n )}\n {!typeName && (\n <Type export name={inferTypeName}>\n {`z.infer<typeof ${name}>`}\n </Type>\n )}\n </File.Source>\n )}\n </>\n )\n}\n"]}
@@ -4,6 +4,7 @@ var react = require('@kubb/react');
4
4
  var transformers2 = require('@kubb/core/transformers');
5
5
  var jsxRuntime = require('@kubb/react/jsx-runtime');
6
6
  var pluginOas = require('@kubb/plugin-oas');
7
+ var core = require('@kubb/core');
7
8
 
8
9
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
9
10
 
@@ -33,6 +34,8 @@ function Operations({ name, operations }) {
33
34
  /* @__PURE__ */ jsxRuntime.jsx(react.File.Source, { name: "paths", isExportable: true, isIndexable: true, children: /* @__PURE__ */ jsxRuntime.jsx(react.Const, { export: true, name: "paths", asConst: true, children: `{${transformers2__default.default.stringifyObject(pathsJSON)}}` }) })
34
35
  ] });
35
36
  }
37
+ var packageManager = new core.PackageManager();
38
+ var isV4 = () => packageManager.isValidSync("zod", ">=4") || packageManager.isValidSync("zod", "next");
36
39
  var zodKeywordMapper = {
37
40
  any: () => "z.any()",
38
41
  unknown: () => "z.unknown()",
@@ -42,12 +45,32 @@ var zodKeywordMapper = {
42
45
  },
43
46
  integer: (coercion, min, max) => {
44
47
  return [
45
- coercion ? "z.coerce.number().int()" : "z.number().int()",
48
+ coercion ? "z.coerce.number().int()" : isV4() ? "z.int()" : "z.number().int()",
46
49
  min !== void 0 ? `.min(${min})` : void 0,
47
50
  max !== void 0 ? `.max(${max})` : void 0
48
51
  ].filter(Boolean).join("");
49
52
  },
50
- object: (value) => {
53
+ interface: (value, strict) => {
54
+ if (strict) {
55
+ return `z.strictInterface({
56
+ ${value}
57
+ })`;
58
+ }
59
+ return `z.interface({
60
+ ${value}
61
+ })`;
62
+ },
63
+ object: (value, strict) => {
64
+ if (isV4() && strict) {
65
+ return `z.strictObject({
66
+ ${value}
67
+ })`;
68
+ }
69
+ if (strict) {
70
+ return `z.object({
71
+ ${value}
72
+ }).strict()`;
73
+ }
51
74
  return `z.object({
52
75
  ${value}
53
76
  })`;
@@ -55,6 +78,7 @@ var zodKeywordMapper = {
55
78
  string: (coercion, min, max) => {
56
79
  return [coercion ? "z.coerce.string()" : "z.string()", min !== void 0 ? `.min(${min})` : void 0, max !== void 0 ? `.max(${max})` : void 0].filter(Boolean).join("");
57
80
  },
81
+ //support for discriminatedUnion
58
82
  boolean: () => "z.boolean()",
59
83
  undefined: () => "z.undefined()",
60
84
  nullable: () => ".nullable()",
@@ -77,10 +101,10 @@ var zodKeywordMapper = {
77
101
  */
78
102
  datetime: (offset = false, local = false) => {
79
103
  if (offset) {
80
- return `z.string().datetime({ offset: ${offset} })`;
104
+ return isV4() ? `z.iso.datetime({ offset: ${offset} })` : `z.string().datetime({ offset: ${offset} })`;
81
105
  }
82
106
  if (local) {
83
- return `z.string().datetime({ local: ${local} })`;
107
+ return isV4() ? `z.iso.datetime({ local: ${local} })` : `z.string().datetime({ local: ${local} })`;
84
108
  }
85
109
  return "z.string().datetime()";
86
110
  },
@@ -91,7 +115,7 @@ var zodKeywordMapper = {
91
115
  */
92
116
  date: (type = "string", coercion) => {
93
117
  if (type === "string") {
94
- return "z.string().date()";
118
+ return isV4() ? "z.iso.date()" : "z.string().date()";
95
119
  }
96
120
  if (coercion) {
97
121
  return "z.coerce.date()";
@@ -105,16 +129,15 @@ var zodKeywordMapper = {
105
129
  */
106
130
  time: (type = "string", coercion) => {
107
131
  if (type === "string") {
108
- return "z.string().time()";
132
+ return isV4() ? "z.iso.time()" : "z.string().time()";
109
133
  }
110
134
  if (coercion) {
111
135
  return "z.coerce.date()";
112
136
  }
113
137
  return "z.date()";
114
138
  },
115
- uuid: (coercion) => coercion ? "z.coerce.string().uuid()" : "z.string().uuid()",
116
- url: (coercion) => coercion ? "z.coerce.string().url()" : "z.string().url()",
117
- strict: () => ".strict()",
139
+ uuid: (coercion) => isV4() ? coercion ? "z.coerce.string().uuid()" : "z.uuid()" : coercion ? "z.coerce.string().uuid()" : "z.string().uuid()",
140
+ url: (coercion) => isV4() ? coercion ? "z.coerce.string().url()" : "z.url()" : coercion ? "z.coerce.string().url()" : "z.string().url()",
118
141
  default: (value) => {
119
142
  if (typeof value === "object") {
120
143
  return ".default({})";
@@ -127,7 +150,7 @@ var zodKeywordMapper = {
127
150
  max: (value) => `.max(${value ?? ""})`,
128
151
  optional: () => ".optional()",
129
152
  matches: (value = "", coercion) => coercion ? `z.coerce.string().regex(${value})` : `z.string().regex(${value})`,
130
- email: (coercion) => coercion ? "z.coerce.string().email()" : "z.string().email()",
153
+ email: (coercion) => isV4() ? coercion ? "z.coerce.string().email()" : "z.email()" : coercion ? "z.coerce.string().email()" : "z.string().email()",
131
154
  firstName: void 0,
132
155
  lastName: void 0,
133
156
  password: void 0,
@@ -138,7 +161,7 @@ var zodKeywordMapper = {
138
161
  if (!value) {
139
162
  return void 0;
140
163
  }
141
- return `z.lazy(() => ${value})`;
164
+ return isV4() ? value : `z.lazy(() => ${value})`;
142
165
  },
143
166
  blob: () => "z.instanceof(File)",
144
167
  deprecated: void 0,
@@ -187,31 +210,31 @@ var shouldCoerce = (coercion, type) => {
187
210
  }
188
211
  return !!coercion[type];
189
212
  };
190
- function parse({ parent, current, siblings }, options) {
213
+ function parse({ parent, current, name, siblings }, options) {
191
214
  const value = zodKeywordMapper[current.keyword];
192
215
  if (!value) {
193
216
  return void 0;
194
217
  }
195
218
  if (pluginOas.isKeyword(current, pluginOas.schemaKeywords.union)) {
196
219
  if (Array.isArray(current.args) && current.args.length === 1) {
197
- return parse({ parent, current: current.args[0], siblings }, options);
220
+ return parse({ parent, name, current: current.args[0], siblings }, options);
198
221
  }
199
222
  if (Array.isArray(current.args) && !current.args.length) {
200
223
  return "";
201
224
  }
202
225
  return zodKeywordMapper.union(
203
- sort(current.args).map((schema, _index, siblings2) => parse({ parent: current, current: schema, siblings: siblings2 }, options)).filter(Boolean)
226
+ sort(current.args).map((schema, _index, siblings2) => parse({ parent: current, name, current: schema, siblings: siblings2 }, options)).filter(Boolean)
204
227
  );
205
228
  }
206
229
  if (pluginOas.isKeyword(current, pluginOas.schemaKeywords.and)) {
207
230
  const items = sort(current.args).filter((schema) => {
208
231
  return ![pluginOas.schemaKeywords.optional, pluginOas.schemaKeywords.describe].includes(schema.keyword);
209
- }).map((schema, _index, siblings2) => parse({ parent: current, current: schema, siblings: siblings2 }, options)).filter(Boolean);
232
+ }).map((schema, _index, siblings2) => parse({ parent: current, name, current: schema, siblings: siblings2 }, options)).filter(Boolean);
210
233
  return `${items.slice(0, 1)}${zodKeywordMapper.and(items.slice(1))}`;
211
234
  }
212
235
  if (pluginOas.isKeyword(current, pluginOas.schemaKeywords.array)) {
213
236
  return zodKeywordMapper.array(
214
- sort(current.args.items).map((schemas, _index, siblings2) => parse({ parent: current, current: schemas, siblings: siblings2 }, options)).filter(Boolean),
237
+ sort(current.args.items).map((schemas, _index, siblings2) => parse({ parent: current, name, current: schemas, siblings: siblings2 }, options)).filter(Boolean),
215
238
  current.args.min,
216
239
  current.args.max,
217
240
  current.args.unique
@@ -224,14 +247,14 @@ function parse({ parent, current, siblings }, options) {
224
247
  keyword: pluginOas.schemaKeywords.const,
225
248
  args: current.args.items[0]
226
249
  };
227
- return parse({ parent: current, current: child, siblings: [child] }, options);
250
+ return parse({ parent: current, name, current: child, siblings: [child] }, options);
228
251
  }
229
252
  return zodKeywordMapper.union(
230
253
  current.args.items.map((schema) => ({
231
254
  keyword: pluginOas.schemaKeywords.const,
232
255
  args: schema
233
256
  })).map((schema, _index, siblings2) => {
234
- return parse({ parent: current, current: schema, siblings: siblings2 }, options);
257
+ return parse({ parent: current, name, current: schema, siblings: siblings2 }, options);
235
258
  }).filter(Boolean)
236
259
  );
237
260
  }
@@ -251,29 +274,38 @@ function parse({ parent, current, siblings }, options) {
251
274
  return zodKeywordMapper.ref(current.args?.name);
252
275
  }
253
276
  if (pluginOas.isKeyword(current, pluginOas.schemaKeywords.object)) {
254
- const properties = Object.entries(current.args?.properties || {}).filter((item) => {
277
+ const propertyEntries = Object.entries(current.args?.properties || {}).filter((item) => {
255
278
  const schema = item[1];
256
279
  return schema && typeof schema.map === "function";
257
- }).map(([name, schemas]) => {
280
+ });
281
+ const hasReferences = propertyEntries.some(([_name, schemas]) => {
282
+ return pluginOas.SchemaGenerator.find(schemas, pluginOas.schemaKeywords.ref);
283
+ });
284
+ const properties = propertyEntries.map(([name2, schemas]) => {
258
285
  const nameSchema = schemas.find((schema) => schema.keyword === pluginOas.schemaKeywords.name);
259
- const mappedName = nameSchema?.args || name;
286
+ const mappedName = nameSchema?.args || name2;
260
287
  if (options.mapper?.[mappedName]) {
261
- return `"${name}": ${options.mapper?.[mappedName]}`;
288
+ return `"${name2}": ${options.mapper?.[mappedName]}`;
289
+ }
290
+ const baseSchemaOutput = sort(schemas).map((schema) => parse({ parent: current, name: name2, current: schema, siblings: schemas }, options)).filter(Boolean).join("");
291
+ const objectValue = options.wrapOutput ? options.wrapOutput({ output: baseSchemaOutput, schema: options.rawSchema?.properties?.[name2] }) || baseSchemaOutput : baseSchemaOutput;
292
+ if (isV4() && pluginOas.SchemaGenerator.find(schemas, pluginOas.schemaKeywords.ref)) {
293
+ return `get ${name2}(){
294
+ return ${objectValue}
295
+ }`;
262
296
  }
263
- const baseSchemaOutput = sort(schemas).map((schema) => parse({ parent: current, current: schema, siblings: schemas }, options)).filter(Boolean).join("");
264
- return `"${name}": ${options.wrapOutput ? options.wrapOutput({ output: baseSchemaOutput, schema: options.rawSchema?.properties?.[name] }) || baseSchemaOutput : baseSchemaOutput}`;
297
+ return `"${name2}": ${objectValue}`;
265
298
  }).join(",\n");
266
- const additionalProperties = current.args?.additionalProperties?.length ? current.args.additionalProperties.map((schema, _index, siblings2) => parse({ parent: current, current: schema, siblings: siblings2 }, options)).filter(Boolean).join("") : void 0;
299
+ const additionalProperties = current.args?.additionalProperties?.length ? current.args.additionalProperties.map((schema, _index, siblings2) => parse({ parent: current, name, current: schema, siblings: siblings2 }, options)).filter(Boolean).join("") : void 0;
267
300
  const text = [
268
- zodKeywordMapper.object(properties),
269
- current.args?.strict ? zodKeywordMapper.strict() : void 0,
301
+ hasReferences && isV4() ? zodKeywordMapper.interface(properties, current.args?.strict) : zodKeywordMapper.object(properties, current.args?.strict),
270
302
  additionalProperties ? zodKeywordMapper.catchall(additionalProperties) : void 0
271
303
  ].filter(Boolean);
272
304
  return text.join("");
273
305
  }
274
306
  if (pluginOas.isKeyword(current, pluginOas.schemaKeywords.tuple)) {
275
307
  return zodKeywordMapper.tuple(
276
- current.args.items.map((schema, _index, siblings2) => parse({ parent: current, current: schema, siblings: siblings2 }, options)).filter(Boolean)
308
+ current.args.items.map((schema, _index, siblings2) => parse({ parent: current, name, current: schema, siblings: siblings2 }, options)).filter(Boolean)
277
309
  );
278
310
  }
279
311
  if (pluginOas.isKeyword(current, pluginOas.schemaKeywords.const)) {
@@ -348,23 +380,26 @@ function parse({ parent, current, siblings }, options) {
348
380
  }
349
381
  function Zod({ name, typeName, tree, rawSchema, inferTypeName, mapper, coercion, keysToOmit, description, wrapOutput }) {
350
382
  const hasTuple = tree.some((item) => pluginOas.isKeyword(item, pluginOas.schemaKeywords.tuple));
351
- const output = sort(tree).filter((item) => {
383
+ const schemas = sort(tree).filter((item) => {
352
384
  if (hasTuple && (pluginOas.isKeyword(item, pluginOas.schemaKeywords.min) || pluginOas.isKeyword(item, pluginOas.schemaKeywords.max))) {
353
385
  return false;
354
386
  }
355
387
  return true;
356
- }).map(
388
+ });
389
+ const output = schemas.map(
357
390
  (schema, _index, siblings) => parse({ parent: void 0, current: schema, siblings }, { name, keysToOmit, typeName, description, mapper, coercion, wrapOutput, rawSchema })
358
391
  ).filter(Boolean).join("");
359
392
  let suffix = "";
360
- if (output.endsWith(".nullable()")) {
361
- if (output.startsWith("z.lazy")) {
393
+ const firstSchema = schemas.at(0);
394
+ const lastSchema = schemas.at(-1);
395
+ if (lastSchema && pluginOas.isKeyword(lastSchema, pluginOas.schemaKeywords.nullable)) {
396
+ if (firstSchema && pluginOas.isKeyword(firstSchema, pluginOas.schemaKeywords.ref)) {
362
397
  suffix = ".unwrap().schema.unwrap()";
363
398
  } else {
364
399
  suffix = ".unwrap()";
365
400
  }
366
401
  } else {
367
- if (output.startsWith("z.lazy")) {
402
+ if (firstSchema && pluginOas.isKeyword(firstSchema, pluginOas.schemaKeywords.ref)) {
368
403
  suffix = ".schema";
369
404
  }
370
405
  }
@@ -392,5 +427,5 @@ function Zod({ name, typeName, tree, rawSchema, inferTypeName, mapper, coercion,
392
427
 
393
428
  exports.Operations = Operations;
394
429
  exports.Zod = Zod;
395
- //# sourceMappingURL=chunk-DKAOGAVN.cjs.map
396
- //# sourceMappingURL=chunk-DKAOGAVN.cjs.map
430
+ //# sourceMappingURL=chunk-7GPORWCL.cjs.map
431
+ //# sourceMappingURL=chunk-7GPORWCL.cjs.map