@kubb/plugin-zod 4.0.0 → 4.1.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 (53) hide show
  1. package/dist/{components-DtKP6doO.js → components-B1-pLa6g.js} +73 -35
  2. package/dist/components-B1-pLa6g.js.map +1 -0
  3. package/dist/{components-Bv7MaVo7.cjs → components-C6PNc1ua.cjs} +73 -35
  4. package/dist/components-C6PNc1ua.cjs.map +1 -0
  5. package/dist/components.cjs +1 -1
  6. package/dist/components.js +1 -1
  7. package/dist/{generators-CrSYV5kr.cjs → generators-8iZ6rvz2.cjs} +4 -4
  8. package/dist/generators-8iZ6rvz2.cjs.map +1 -0
  9. package/dist/{generators-BY96mD4w.js → generators-B66sl9uI.js} +4 -4
  10. package/dist/generators-B66sl9uI.js.map +1 -0
  11. package/dist/generators.cjs +2 -2
  12. package/dist/generators.js +2 -2
  13. package/dist/index.cjs +2 -2
  14. package/dist/index.js +2 -2
  15. package/package.json +8 -13
  16. package/src/components/Zod.tsx +8 -6
  17. package/src/generators/__snapshots__/coercion.ts +5 -8
  18. package/src/generators/__snapshots__/coercionDates.ts +5 -8
  19. package/src/generators/__snapshots__/coercionNumbers.ts +5 -8
  20. package/src/generators/__snapshots__/coercionStrings.ts +5 -8
  21. package/src/generators/__snapshots__/deletePet.ts +1 -1
  22. package/src/generators/__snapshots__/deletePet_wrapOutput.ts +1 -1
  23. package/src/generators/__snapshots__/example.ts +1 -1
  24. package/src/generators/__snapshots__/getPets.ts +2 -2
  25. package/src/generators/__snapshots__/getPets_wrapOutput.ts +2 -2
  26. package/src/generators/__snapshots__/nullable.ts +1 -1
  27. package/src/generators/__snapshots__/oneof.ts +2 -2
  28. package/src/generators/__snapshots__/optionalPetInfer.ts +3 -3
  29. package/src/generators/__snapshots__/optionalPetTyped.ts +3 -3
  30. package/src/generators/__snapshots__/order.ts +6 -6
  31. package/src/generators/__snapshots__/orderDateTypeFalse.ts +6 -6
  32. package/src/generators/__snapshots__/orderDateTypeString.ts +6 -6
  33. package/src/generators/__snapshots__/pet.ts +5 -8
  34. package/src/generators/__snapshots__/petCoercion.ts +5 -8
  35. package/src/generators/__snapshots__/petTupleObject.ts +1 -1
  36. package/src/generators/__snapshots__/petV4.ts +5 -8
  37. package/src/generators/__snapshots__/petWithMapper.ts +5 -8
  38. package/src/generators/__snapshots__/pets.ts +1 -1
  39. package/src/generators/__snapshots__/queryAllDefaulted.ts +2 -2
  40. package/src/generators/__snapshots__/queryAllDefaulted_wrapOutput.ts +2 -2
  41. package/src/generators/__snapshots__/toy.ts +2 -2
  42. package/src/generators/zodGenerator.tsx +1 -1
  43. package/src/parser.ts +78 -21
  44. package/dist/components-Bv7MaVo7.cjs.map +0 -1
  45. package/dist/components-DtKP6doO.js.map +0 -1
  46. package/dist/generators-BY96mD4w.js.map +0 -1
  47. package/dist/generators-CrSYV5kr.cjs.map +0 -1
  48. package/dist/utils/v4.cjs +0 -0
  49. package/dist/utils/v4.d.cts +0 -38
  50. package/dist/utils/v4.d.ts +0 -38
  51. package/dist/utils/v4.js +0 -1
  52. package/src/utils/v4/ToZod.ts +0 -61
  53. package/src/utils/v4/index.ts +0 -1
package/src/parser.ts CHANGED
@@ -4,6 +4,9 @@ import type { SchemaObject } from '@kubb/oas'
4
4
  import type { Schema, SchemaKeywordBase, SchemaMapper } from '@kubb/plugin-oas'
5
5
  import { isKeyword, SchemaGenerator, type SchemaKeywordMapper, type SchemaTree, schemaKeywords } from '@kubb/plugin-oas'
6
6
 
7
+ //TODO add zodKeywordMapper as function that returns 3 versions: v3, v4 and v4 mini, this can also be used to have the custom mapping(see object type)
8
+ // also include shouldCoerce
9
+
7
10
  const zodKeywordMapper = {
8
11
  any: () => 'z.any()',
9
12
  unknown: () => 'z.unknown()',
@@ -57,9 +60,19 @@ const zodKeywordMapper = {
57
60
  //support for discriminatedUnion
58
61
  boolean: () => 'z.boolean()',
59
62
  undefined: () => 'z.undefined()',
60
- nullable: () => '.nullable()',
63
+ nullable: (value?: string) => {
64
+ if (value) {
65
+ return `z.nullable(${value})`
66
+ }
67
+ return '.nullable()'
68
+ },
61
69
  null: () => 'z.null()',
62
- nullish: () => '.nullish()',
70
+ nullish: (value?: string) => {
71
+ if (value) {
72
+ return `z.nullish(${value})`
73
+ }
74
+ return '.nullish()'
75
+ },
63
76
  array: (items: string[] = [], min?: number, max?: number, unique?: boolean) => {
64
77
  return [
65
78
  `z.array(${items?.join('')})`,
@@ -132,9 +145,14 @@ const zodKeywordMapper = {
132
145
  },
133
146
  and: (items: string[] = []) => items?.map((item) => `.and(${item})`).join(''),
134
147
  describe: (value = '') => `.describe(${value})`,
135
- min: (value?: number) => `.min(${value ?? ''})`,
136
- max: (value?: number) => `.max(${value ?? ''})`,
137
- optional: () => '.optional()',
148
+ max: undefined,
149
+ min: undefined,
150
+ optional: (value?: string) => {
151
+ if (value) {
152
+ return `z.optional(${value})`
153
+ }
154
+ return '.optional()'
155
+ },
138
156
  matches: (value = '', coercion?: boolean) => (coercion ? `z.coerce.string().regex(${value})` : `z.string().regex(${value})`),
139
157
  email: (coercion?: boolean, version: '3' | '4' = '3') =>
140
158
  version === '4' ? (coercion ? 'z.coerce.string().email()' : 'z.email()') : coercion ? 'z.coerce.string().email()' : 'z.string().email()',
@@ -322,7 +340,11 @@ export function parse({ parent, current, name, siblings }: SchemaTree, options:
322
340
 
323
341
  const properties = propertyEntries
324
342
  .map(([name, schemas]) => {
325
- const nameSchema = schemas.find((schema) => schema.keyword === schemaKeywords.name) as SchemaKeywordMapper['name']
343
+ const nameSchema = schemas.find((it) => it.keyword === schemaKeywords.name) as SchemaKeywordMapper['name']
344
+ const isNullable = schemas.some((it) => isKeyword(it, schemaKeywords.nullable))
345
+ const isNullish = schemas.some((it) => isKeyword(it, schemaKeywords.nullish))
346
+ const isOptional = schemas.some((it) => isKeyword(it, schemaKeywords.optional))
347
+
326
348
  const mappedName = nameSchema?.args || name
327
349
 
328
350
  // custom mapper(pluginOptions)
@@ -331,6 +353,9 @@ export function parse({ parent, current, name, siblings }: SchemaTree, options:
331
353
  }
332
354
 
333
355
  const baseSchemaOutput = sort(schemas)
356
+ .filter((schema) => {
357
+ return !isKeyword(schema, schemaKeywords.optional) && !isKeyword(schema, schemaKeywords.nullable) && !isKeyword(schema, schemaKeywords.nullish)
358
+ })
334
359
  .map((schema) => parse({ parent: current, name, current: schema, siblings: schemas }, options))
335
360
  .filter(Boolean)
336
361
  .join('')
@@ -340,11 +365,47 @@ export function parse({ parent, current, name, siblings }: SchemaTree, options:
340
365
  : baseSchemaOutput
341
366
 
342
367
  if (options.version === '4' && SchemaGenerator.find(schemas, schemaKeywords.ref)) {
368
+ // both optional and nullable
369
+ if (isNullish) {
370
+ return `get ${name}(){
371
+ return ${zodKeywordMapper.nullish(objectValue)}
372
+ }`
373
+ }
374
+
375
+ // undefined
376
+ if (isOptional) {
377
+ return `get ${name}(){
378
+ return ${zodKeywordMapper.optional(objectValue)}
379
+ }`
380
+ }
381
+
382
+ // null
383
+ if (isNullable) {
384
+ return `get ${name}(){
385
+ return ${zodKeywordMapper.nullable(objectValue)}
386
+ }`
387
+ }
388
+
343
389
  return `get ${name}(){
344
390
  return ${objectValue}
345
391
  }`
346
392
  }
347
393
 
394
+ // both optional and nullable
395
+ if (isNullish) {
396
+ return `"${name}": ${objectValue}${zodKeywordMapper.nullish()}`
397
+ }
398
+
399
+ // undefined
400
+ if (isOptional) {
401
+ return `"${name}": ${zodKeywordMapper.optional(objectValue)}`
402
+ }
403
+
404
+ // null
405
+ if (isNullable) {
406
+ return `"${name}": ${zodKeywordMapper.nullable(objectValue)}`
407
+ }
408
+
348
409
  return `"${name}": ${objectValue}`
349
410
  })
350
411
  .join(',\n')
@@ -400,7 +461,10 @@ export function parse({ parent, current, name, siblings }: SchemaTree, options:
400
461
  }
401
462
 
402
463
  if (isKeyword(current, schemaKeywords.string)) {
403
- return zodKeywordMapper.string(shouldCoerce(options.coercion, 'strings'))
464
+ const minSchema = SchemaGenerator.find(siblings, schemaKeywords.min)
465
+ const maxSchema = SchemaGenerator.find(siblings, schemaKeywords.max)
466
+
467
+ return zodKeywordMapper.string(shouldCoerce(options.coercion, 'strings'), minSchema?.args, maxSchema?.args)
404
468
  }
405
469
 
406
470
  if (isKeyword(current, schemaKeywords.uuid)) {
@@ -416,18 +480,17 @@ export function parse({ parent, current, name, siblings }: SchemaTree, options:
416
480
  }
417
481
 
418
482
  if (isKeyword(current, schemaKeywords.number)) {
419
- return zodKeywordMapper.number(shouldCoerce(options.coercion, 'numbers'))
483
+ const minSchema = SchemaGenerator.find(siblings, schemaKeywords.min)
484
+ const maxSchema = SchemaGenerator.find(siblings, schemaKeywords.max)
485
+
486
+ return zodKeywordMapper.number(shouldCoerce(options.coercion, 'numbers'), minSchema?.args, maxSchema?.args)
420
487
  }
421
488
 
422
489
  if (isKeyword(current, schemaKeywords.integer)) {
423
- return zodKeywordMapper.integer(shouldCoerce(options.coercion, 'numbers'), undefined, undefined, options.version)
424
- }
490
+ const minSchema = SchemaGenerator.find(siblings, schemaKeywords.min)
491
+ const maxSchema = SchemaGenerator.find(siblings, schemaKeywords.max)
425
492
 
426
- if (isKeyword(current, schemaKeywords.min)) {
427
- return zodKeywordMapper.min(current.args)
428
- }
429
- if (isKeyword(current, schemaKeywords.max)) {
430
- return zodKeywordMapper.max(current.args)
493
+ return zodKeywordMapper.integer(shouldCoerce(options.coercion, 'numbers'), minSchema?.args, maxSchema?.args, options.version)
431
494
  }
432
495
 
433
496
  if (isKeyword(current, schemaKeywords.datetime)) {
@@ -448,12 +511,6 @@ export function parse({ parent, current, name, siblings }: SchemaTree, options:
448
511
  return value((current as SchemaKeywordBase<unknown>).args as any)
449
512
  }
450
513
 
451
- if (isKeyword(current, schemaKeywords.optional)) {
452
- if (siblings.some((schema) => isKeyword(schema, schemaKeywords.default))) return ''
453
-
454
- return value()
455
- }
456
-
457
514
  if (current.keyword in zodKeywordMapper) {
458
515
  return value()
459
516
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"components-Bv7MaVo7.cjs","names":["File","Const","transformers","order: string[]","schemaKeywords","transformers","name","SchemaGenerator","value","SchemaGenerator","schemaKeywords","parserZod.sort","parserZod.parse","File","Const","transformers","Type"],"sources":["../src/components/Operations.tsx","../src/parser.ts","../src/components/Zod.tsx"],"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'\n\nimport type { Schema, SchemaKeywordBase, SchemaMapper } from '@kubb/plugin-oas'\nimport { isKeyword, SchemaGenerator, type SchemaKeywordMapper, type SchemaTree, schemaKeywords } from '@kubb/plugin-oas'\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, version: '3' | '4' = '3') => {\n return [\n coercion ? 'z.coerce.number().int()' : version === '4' ? '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, version: '3' | '4' = '3') => {\n if (version === '4' && 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, version: '3' | '4' = '3') => {\n if (offset) {\n return version === '4' ? `z.iso.datetime({ offset: ${offset} })` : `z.string().datetime({ offset: ${offset} })`\n }\n\n if (local) {\n return version === '4' ? `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, version: '3' | '4' = '3') => {\n if (type === 'string') {\n return version === '4' ? '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, version: '3' | '4' = '3') => {\n if (type === 'string') {\n return version === '4' ? '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, version: '3' | '4' = '3') =>\n version === '4' ? (coercion ? 'z.coerce.string().uuid()' : 'z.uuid()') : coercion ? 'z.coerce.string().uuid()' : 'z.string().uuid()',\n url: (coercion?: boolean, version: '3' | '4' = '3') =>\n version === '4' ? (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, version: '3' | '4' = '3') =>\n version === '4' ? (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, version: '3' | '4' = '3') => {\n if (!value) {\n return undefined\n }\n\n return version === '4' ? 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 version: '3' | '4'\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 // Early exit: if siblings contain both matches and ref → skip matches entirely\n const hasMatches = siblings.some((it) => isKeyword(it, schemaKeywords.matches))\n const hasRef = siblings.some((it) => isKeyword(it, schemaKeywords.ref))\n\n if (hasMatches && hasRef && isKeyword(current, schemaKeywords.matches)) {\n return undefined // strip matches\n }\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, options.version)\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 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 (options.version === '4' && 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 zodKeywordMapper.object(properties, current.args?.strict, options.version),\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(current.args.value))\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'), options.version)\n }\n\n if (isKeyword(current, schemaKeywords.email)) {\n return zodKeywordMapper.email(shouldCoerce(options.coercion, 'strings'), options.version)\n }\n\n if (isKeyword(current, schemaKeywords.url)) {\n return zodKeywordMapper.url(shouldCoerce(options.coercion, 'strings'), options.version)\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'), undefined, undefined, options.version)\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, options.version)\n }\n\n if (isKeyword(current, schemaKeywords.date)) {\n return zodKeywordMapper.date(current.args.type, shouldCoerce(options.coercion, 'dates'), options.version)\n }\n\n if (isKeyword(current, schemaKeywords.time)) {\n return zodKeywordMapper.time(current.args.type, shouldCoerce(options.coercion, 'dates'), options.version)\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 { SchemaObject } from '@kubb/oas'\nimport { isKeyword, type Schema, SchemaGenerator, schemaKeywords } from '@kubb/plugin-oas'\nimport { Const, File, Type } from '@kubb/react'\nimport * as parserZod from '../parser.ts'\nimport type { PluginZod } from '../types.ts'\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 version: '3' | '4'\n emptySchemaType: PluginZod['resolvedOptions']['emptySchemaType']\n}\n\nexport function Zod({\n name,\n typeName,\n tree,\n rawSchema,\n inferTypeName,\n mapper,\n coercion,\n keysToOmit,\n description,\n wrapOutput,\n version,\n emptySchemaType,\n}: Props) {\n const hasTuple = !!SchemaGenerator.deepSearch(tree, schemaKeywords.tuple)\n\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(\n { parent: undefined, current: schema, siblings },\n { name, keysToOmit, typeName, description, mapper, coercion, wrapOutput, rawSchema, version },\n ),\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 if (version === '3') {\n suffix = '.unwrap().schema.unwrap()'\n } else {\n suffix = '.unwrap().unwrap()'\n }\n } else {\n suffix = '.unwrap()'\n }\n } else {\n if (firstSchema && isKeyword(firstSchema, schemaKeywords.ref) && version === '3') {\n suffix = '.schema'\n }\n }\n\n const emptyValue = parserZod.parse(\n {\n parent: undefined,\n current: {\n keyword: schemaKeywords[emptySchemaType],\n },\n siblings: [],\n },\n { name, keysToOmit, typeName, description, mapper, coercion, wrapOutput, rawSchema, version },\n )\n\n const baseSchemaOutput =\n [output, keysToOmit?.length ? `${suffix}.omit({ ${keysToOmit.map((key) => `${key}: true`).join(',')} })` : undefined].filter(Boolean).join('') ||\n emptyValue ||\n ''\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"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"components-DtKP6doO.js","names":["order: string[]","name","value","parserZod.sort","parserZod.parse"],"sources":["../src/components/Operations.tsx","../src/parser.ts","../src/components/Zod.tsx"],"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'\n\nimport type { Schema, SchemaKeywordBase, SchemaMapper } from '@kubb/plugin-oas'\nimport { isKeyword, SchemaGenerator, type SchemaKeywordMapper, type SchemaTree, schemaKeywords } from '@kubb/plugin-oas'\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, version: '3' | '4' = '3') => {\n return [\n coercion ? 'z.coerce.number().int()' : version === '4' ? '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, version: '3' | '4' = '3') => {\n if (version === '4' && 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, version: '3' | '4' = '3') => {\n if (offset) {\n return version === '4' ? `z.iso.datetime({ offset: ${offset} })` : `z.string().datetime({ offset: ${offset} })`\n }\n\n if (local) {\n return version === '4' ? `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, version: '3' | '4' = '3') => {\n if (type === 'string') {\n return version === '4' ? '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, version: '3' | '4' = '3') => {\n if (type === 'string') {\n return version === '4' ? '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, version: '3' | '4' = '3') =>\n version === '4' ? (coercion ? 'z.coerce.string().uuid()' : 'z.uuid()') : coercion ? 'z.coerce.string().uuid()' : 'z.string().uuid()',\n url: (coercion?: boolean, version: '3' | '4' = '3') =>\n version === '4' ? (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, version: '3' | '4' = '3') =>\n version === '4' ? (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, version: '3' | '4' = '3') => {\n if (!value) {\n return undefined\n }\n\n return version === '4' ? 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 version: '3' | '4'\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 // Early exit: if siblings contain both matches and ref → skip matches entirely\n const hasMatches = siblings.some((it) => isKeyword(it, schemaKeywords.matches))\n const hasRef = siblings.some((it) => isKeyword(it, schemaKeywords.ref))\n\n if (hasMatches && hasRef && isKeyword(current, schemaKeywords.matches)) {\n return undefined // strip matches\n }\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, options.version)\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 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 (options.version === '4' && 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 zodKeywordMapper.object(properties, current.args?.strict, options.version),\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(current.args.value))\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'), options.version)\n }\n\n if (isKeyword(current, schemaKeywords.email)) {\n return zodKeywordMapper.email(shouldCoerce(options.coercion, 'strings'), options.version)\n }\n\n if (isKeyword(current, schemaKeywords.url)) {\n return zodKeywordMapper.url(shouldCoerce(options.coercion, 'strings'), options.version)\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'), undefined, undefined, options.version)\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, options.version)\n }\n\n if (isKeyword(current, schemaKeywords.date)) {\n return zodKeywordMapper.date(current.args.type, shouldCoerce(options.coercion, 'dates'), options.version)\n }\n\n if (isKeyword(current, schemaKeywords.time)) {\n return zodKeywordMapper.time(current.args.type, shouldCoerce(options.coercion, 'dates'), options.version)\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 { SchemaObject } from '@kubb/oas'\nimport { isKeyword, type Schema, SchemaGenerator, schemaKeywords } from '@kubb/plugin-oas'\nimport { Const, File, Type } from '@kubb/react'\nimport * as parserZod from '../parser.ts'\nimport type { PluginZod } from '../types.ts'\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 version: '3' | '4'\n emptySchemaType: PluginZod['resolvedOptions']['emptySchemaType']\n}\n\nexport function Zod({\n name,\n typeName,\n tree,\n rawSchema,\n inferTypeName,\n mapper,\n coercion,\n keysToOmit,\n description,\n wrapOutput,\n version,\n emptySchemaType,\n}: Props) {\n const hasTuple = !!SchemaGenerator.deepSearch(tree, schemaKeywords.tuple)\n\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(\n { parent: undefined, current: schema, siblings },\n { name, keysToOmit, typeName, description, mapper, coercion, wrapOutput, rawSchema, version },\n ),\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 if (version === '3') {\n suffix = '.unwrap().schema.unwrap()'\n } else {\n suffix = '.unwrap().unwrap()'\n }\n } else {\n suffix = '.unwrap()'\n }\n } else {\n if (firstSchema && isKeyword(firstSchema, schemaKeywords.ref) && version === '3') {\n suffix = '.schema'\n }\n }\n\n const emptyValue = parserZod.parse(\n {\n parent: undefined,\n current: {\n keyword: schemaKeywords[emptySchemaType],\n },\n siblings: [],\n },\n { name, keysToOmit, typeName, description, mapper, coercion, wrapOutput, rawSchema, version },\n )\n\n const baseSchemaOutput =\n [output, keysToOmit?.length ? `${suffix}.omit({ ${keysToOmit.map((key) => `${key}: true`).join(',')} })` : undefined].filter(Boolean).join('') ||\n emptyValue ||\n ''\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"],"mappings":";;;;;;AAWA,SAAgB,WAAW,EAAE,MAAM,cAAqB;CACtD,MAAM,iBAAiB,WAAW,QAC/B,MAAM,QAAQ;AACb,OAAK,IAAI,IAAI,UAAU,gBAAgB,CAAC,MAAM,IAAI;AAElD,SAAO;IAET,EAAE,CACH;CAED,MAAM,YAAY,WAAW,QAC1B,MAAM,QAAQ;AACb,OAAK,IAAI,IAAI,UAAU,KAAK,MAAM;GAChC,GAAI,KAAK,IAAI,IAAI,UAAU,KAAK,OAAQ,EAAE;IACzC,IAAI,UAAU,SAAS,eAAe,IAAI,UAAU,gBAAgB,CAAC;GACvE;AAED,SAAO;IAET,EAAE,CACH;AAED,QACE,4CACE,oBAAC,KAAK;EAAa;EAAM;EAAa;YACpC,oBAAC;GAAM;GAAa;GAAM;aACvB,IAAI,aAAa,gBAAgB,eAAe,CAAC;IAC5C;GACI,EACd,oBAAC,KAAK;EAAO,MAAM;EAAS;EAAa;YACvC,oBAAC;GAAM;GAAO,MAAM;GAAS;aAC1B,IAAI,aAAa,gBAAgB,UAAU,CAAC;IACvC;GACI,IACb;;;;;ACvCP,MAAM,mBAAmB;CACvB,WAAW;CACX,eAAe;CACf,YAAY;CACZ,SAAS,UAAoB,KAAc,QAAiB;AAC1D,SAAO;GAAC,WAAW,sBAAsB;GAAc,QAAQ,SAAY,QAAQ,IAAI,KAAK;GAAW,QAAQ,SAAY,QAAQ,IAAI,KAAK;GAAU,CACnJ,OAAO,QAAQ,CACf,KAAK,GAAG;;CAEb,UAAU,UAAoB,KAAc,KAAc,UAAqB,QAAQ;AACrF,SAAO;GACL,WAAW,4BAA4B,YAAY,MAAM,YAAY;GACrE,QAAQ,SAAY,QAAQ,IAAI,KAAK;GACrC,QAAQ,SAAY,QAAQ,IAAI,KAAK;GACtC,CACE,OAAO,QAAQ,CACf,KAAK,GAAG;;CAEb,YAAY,OAAgB,WAAqB;AAC/C,MAAI,OACF,QAAO;MACP,MAAM;;AAGR,SAAO;MACL,MAAM;;;CAGV,SAAS,OAAgB,QAAkB,UAAqB,QAAQ;AACtE,MAAI,YAAY,OAAO,OACrB,QAAO;MACP,MAAM;;AAIR,MAAI,OACF,QAAO;MACP,MAAM;;AAIR,SAAO;MACL,MAAM;;;CAGV,SAAS,UAAoB,KAAc,QAAiB;AAC1D,SAAO;GAAC,WAAW,sBAAsB;GAAc,QAAQ,SAAY,QAAQ,IAAI,KAAK;GAAW,QAAQ,SAAY,QAAQ,IAAI,KAAK;GAAU,CACnJ,OAAO,QAAQ,CACf,KAAK,GAAG;;CAGb,eAAe;CACf,iBAAiB;CACjB,gBAAgB;CAChB,YAAY;CACZ,eAAe;CACf,QAAQ,QAAkB,EAAE,EAAE,KAAc,KAAc,WAAqB;AAC7E,SAAO;GACL,WAAW,OAAO,KAAK,GAAG,CAAC;GAC3B,QAAQ,SAAY,QAAQ,IAAI,KAAK;GACrC,QAAQ,SAAY,QAAQ,IAAI,KAAK;GACrC,SAAS,wGAAwG;GAClH,CACE,OAAO,QAAQ,CACf,KAAK,GAAG;;CAEb,QAAQ,QAAkB,EAAE,KAAK,YAAY,OAAO,KAAK,KAAK,CAAC;CAC/D,OAAO,QAAkB,EAAE,KAAK,WAAW,OAAO,KAAK,KAAK,CAAC;CAC7D,QAAQ,QAAkB,EAAE,KAAK,YAAY,OAAO,KAAK,KAAK,CAAC;CAC/D,QAAQ,UAAsC,aAAa,SAAS,GAAG;CAIvE,WAAW,SAAS,OAAO,QAAQ,OAAO,UAAqB,QAAQ;AACrE,MAAI,OACF,QAAO,YAAY,MAAM,4BAA4B,OAAO,OAAO,iCAAiC,OAAO;AAG7G,MAAI,MACF,QAAO,YAAY,MAAM,2BAA2B,MAAM,OAAO,gCAAgC,MAAM;AAGzG,SAAO;;CAOT,OAAO,OAA0B,UAAU,UAAoB,UAAqB,QAAQ;AAC1F,MAAI,SAAS,SACX,QAAO,YAAY,MAAM,iBAAiB;AAG5C,MAAI,SACF,QAAO;AAGT,SAAO;;CAOT,OAAO,OAA0B,UAAU,UAAoB,UAAqB,QAAQ;AAC1F,MAAI,SAAS,SACX,QAAO,YAAY,MAAM,iBAAiB;AAG5C,MAAI,SACF,QAAO;AAGT,SAAO;;CAET,OAAO,UAAoB,UAAqB,QAC9C,YAAY,MAAO,WAAW,6BAA6B,aAAc,WAAW,6BAA6B;CACnH,MAAM,UAAoB,UAAqB,QAC7C,YAAY,MAAO,WAAW,4BAA4B,YAAa,WAAW,4BAA4B;CAChH,UAAU,UAA4C;AACpD,MAAI,OAAO,UAAU,SACnB,QAAO;AAET,SAAO,YAAY,SAAS,GAAG;;CAEjC,MAAM,QAAkB,EAAE,KAAK,OAAO,KAAK,SAAS,QAAQ,KAAK,GAAG,CAAC,KAAK,GAAG;CAC7E,WAAW,QAAQ,OAAO,aAAa,MAAM;CAC7C,MAAM,UAAmB,QAAQ,SAAS,GAAG;CAC7C,MAAM,UAAmB,QAAQ,SAAS,GAAG;CAC7C,gBAAgB;CAChB,UAAU,QAAQ,IAAI,aAAwB,WAAW,2BAA2B,MAAM,KAAK,oBAAoB,MAAM;CACzH,QAAQ,UAAoB,UAAqB,QAC/C,YAAY,MAAO,WAAW,8BAA8B,cAAe,WAAW,8BAA8B;CACtH,WAAW;CACX,UAAU;CACV,UAAU;CACV,OAAO;CACP,UAAU;CACV,WAAW;CACX,MAAM,OAAgB,UAAqB,QAAQ;AACjD,MAAI,CAAC,MACH;AAGF,SAAO,YAAY,MAAM,QAAQ,gBAAgB,MAAM;;CAEzD,YAAY;CACZ,YAAY;CACZ,SAAS;CACT,QAAQ;CACR,WAAW,UAAoB,QAAQ,aAAa,MAAM,KAAK;CAC/D,MAAM;CACP;;;;AAMD,SAAgB,KAAK,OAA4B;CAC/C,MAAMA,QAAkB;EACtB,eAAe;EACf,eAAe;EACf,eAAe;EACf,eAAe;EACf,eAAe;EACf,eAAe;EACf,eAAe;EACf,eAAe;EACf,eAAe;EACf,eAAe;EACf,eAAe;EACf,eAAe;EACf,eAAe;EACf,eAAe;EACf,eAAe;EACf,eAAe;EACf,eAAe;EACf,eAAe;EACf,eAAe;EACf,eAAe;EACf,eAAe;EACf,eAAe;EACf,eAAe;EAChB;AAED,KAAI,CAAC,MACH,QAAO,EAAE;AAGX,QAAO,aAAa,QAAQ,OAAO,EAAE,MAAM,MAAM,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC;;AAGhF,MAAM,gBAAgB,UAAiD,SAAmD;AACxH,KAAI,aAAa,OACf,QAAO;AAET,KAAI,OAAO,aAAa,UACtB,QAAO;AAGT,QAAO,CAAC,CAAC,SAAS;;AAepB,SAAgB,MAAM,EAAE,QAAQ,SAAS,MAAM,YAAwB,SAA4C;CACjH,MAAM,QAAQ,iBAAiB,QAAQ;CAGvC,MAAM,aAAa,SAAS,MAAM,OAAO,UAAU,IAAI,eAAe,QAAQ,CAAC;CAC/E,MAAM,SAAS,SAAS,MAAM,OAAO,UAAU,IAAI,eAAe,IAAI,CAAC;AAEvE,KAAI,cAAc,UAAU,UAAU,SAAS,eAAe,QAAQ,CACpE;AAGF,KAAI,CAAC,MACH;AAGF,KAAI,UAAU,SAAS,eAAe,MAAM,EAAE;AAE5C,MAAI,MAAM,QAAQ,QAAQ,KAAK,IAAI,QAAQ,KAAK,WAAW,EACzD,QAAO,MAAM;GAAE;GAAc;GAAM,SAAS,QAAQ,KAAK;GAAc;GAAU,EAAE,QAAQ;AAE7F,MAAI,MAAM,QAAQ,QAAQ,KAAK,IAAI,CAAC,QAAQ,KAAK,OAC/C,QAAO;AAGT,SAAO,iBAAiB,MACtB,KAAK,QAAQ,KAAK,CACf,KAAK,QAAQ,QAAQ,eAAa,MAAM;GAAE,QAAQ;GAAe;GAAM,SAAS;GAAQ;GAAU,EAAE,QAAQ,CAAC,CAC7G,OAAO,QAAQ,CACnB;;AAGH,KAAI,UAAU,SAAS,eAAe,IAAI,EAAE;EAC1C,MAAM,QAAQ,KAAK,QAAQ,KAAK,CAC7B,QAAQ,WAAmB;AAC1B,UAAO,CAAC,CAAC,eAAe,UAAU,eAAe,SAAS,CAAC,SAAS,OAAO,QAA0C;IACrH,CACD,KAAK,QAAgB,QAAQ,eAAa,MAAM;GAAE,QAAQ;GAAe;GAAM,SAAS;GAAQ;GAAU,EAAE,QAAQ,CAAC,CACrH,OAAO,QAAQ;AAElB,SAAO,GAAG,MAAM,MAAM,GAAG,EAAE,GAAG,iBAAiB,IAAI,MAAM,MAAM,EAAE,CAAC;;AAGpE,KAAI,UAAU,SAAS,eAAe,MAAM,CAC1C,QAAO,iBAAiB,MACtB,KAAK,QAAQ,KAAK,MAAM,CACrB,KAAK,SAAS,QAAQ,eAAa,MAAM;EAAE,QAAQ;EAAe;EAAM,SAAS;EAAS;EAAU,EAAE,QAAQ,CAAC,CAC/G,OAAO,QAAQ,EAClB,QAAQ,KAAK,KACb,QAAQ,KAAK,KACb,QAAQ,KAAK,OACd;AAGH,KAAI,UAAU,SAAS,eAAe,KAAK,EAAE;AAC3C,MAAI,QAAQ,KAAK,SAAS;AACxB,OAAI,QAAQ,KAAK,MAAM,WAAW,GAAG;IACnC,MAAM,QAAQ;KACZ,SAAS,eAAe;KACxB,MAAM,QAAQ,KAAK,MAAM;KAC1B;AACD,WAAO,MAAM;KAAE,QAAQ;KAAe;KAAM,SAAS;KAAO,UAAU,CAAC,MAAM;KAAE,EAAE,QAAQ;;AAG3F,UAAO,iBAAiB,MACtB,QAAQ,KAAK,MACV,KAAK,YAAY;IAChB,SAAS,eAAe;IACxB,MAAM;IACP,EAAE,CACF,KAAK,QAAQ,QAAQ,eAAa;AACjC,WAAO,MAAM;KAAE,QAAQ;KAAe;KAAM,SAAS;KAAQ;KAAU,EAAE,QAAQ;KACjF,CACD,OAAO,QAAQ,CACnB;;AAGH,SAAO,iBAAiB,KACtB,QAAQ,KAAK,MAAM,KAAK,WAAW;AACjC,OAAI,OAAO,WAAW,UACpB,QAAO,aAAa,UAAU,OAAO,MAAM;AAG7C,OAAI,OAAO,WAAW,SACpB,QAAO,aAAa,UAAU,OAAO,MAAM;AAE7C,UAAO,aAAa,UAAU,OAAO,MAAM;IAC3C,CACH;;AAGH,KAAI,UAAU,SAAS,eAAe,IAAI,CACxC,QAAO,iBAAiB,IAAI,QAAQ,MAAM,MAAM,QAAQ,QAAQ;AAGlE,KAAI,UAAU,SAAS,eAAe,OAAO,EAAE;EAM7C,MAAM,aALkB,OAAO,QAAQ,QAAQ,MAAM,cAAc,EAAE,CAAC,CAAC,QAAQ,SAAS;GACtF,MAAM,SAAS,KAAK;AACpB,UAAO,UAAU,OAAO,OAAO,QAAQ;IACvC,CAGC,KAAK,CAACC,QAAM,aAAa;GAExB,MAAM,aADa,QAAQ,MAAM,WAAW,OAAO,YAAY,eAAe,KAAK,EACpD,QAAQA;AAGvC,OAAI,QAAQ,SAAS,YACnB,QAAO,IAAIA,OAAK,KAAK,QAAQ,SAAS;GAGxC,MAAM,mBAAmB,KAAK,QAAQ,CACnC,KAAK,WAAW,MAAM;IAAE,QAAQ;IAAS;IAAM,SAAS;IAAQ,UAAU;IAAS,EAAE,QAAQ,CAAC,CAC9F,OAAO,QAAQ,CACf,KAAK,GAAG;GAEX,MAAM,cAAc,QAAQ,aACxB,QAAQ,WAAW;IAAE,QAAQ;IAAkB,QAAQ,QAAQ,WAAW,aAAaA;IAAO,CAAC,IAAI,mBACnG;AAEJ,OAAI,QAAQ,YAAY,OAAO,gBAAgB,KAAK,SAAS,eAAe,IAAI,CAC9E,QAAO,OAAOA,OAAK;yBACJ,YAAY;;AAI7B,UAAO,IAAIA,OAAK,KAAK;IACrB,CACD,KAAK,MAAM;EAEd,MAAM,uBAAuB,QAAQ,MAAM,sBAAsB,SAC7D,QAAQ,KAAK,qBACV,KAAK,QAAQ,QAAQ,eAAa,MAAM;GAAE,QAAQ;GAAe;GAAM,SAAS;GAAQ;GAAU,EAAE,QAAQ,CAAC,CAC7G,OAAO,QAAQ,CACf,KAAK,GAAG,GACX;AAOJ,SALa,CACX,iBAAiB,OAAO,YAAY,QAAQ,MAAM,QAAQ,QAAQ,QAAQ,EAC1E,uBAAuB,iBAAiB,SAAS,qBAAqB,GAAG,OAC1E,CAAC,OAAO,QAAQ,CAEL,KAAK,GAAG;;AAGtB,KAAI,UAAU,SAAS,eAAe,MAAM,CAC1C,QAAO,iBAAiB,MACtB,QAAQ,KAAK,MAAM,KAAK,QAAQ,QAAQ,eAAa,MAAM;EAAE,QAAQ;EAAe;EAAM,SAAS;EAAQ;EAAU,EAAE,QAAQ,CAAC,CAAC,OAAO,QAAQ,CACjJ;AAGH,KAAI,UAAU,SAAS,eAAe,MAAM,EAAE;AAC5C,MAAI,QAAQ,KAAK,WAAW,YAAY,QAAQ,KAAK,UAAU,OAC7D,QAAO,iBAAiB,MAAM,OAAO,QAAQ,KAAK,MAAM,CAAC;AAG3D,MAAI,QAAQ,KAAK,WAAW,aAAa,QAAQ,KAAK,UAAU,OAC9D,QAAO,iBAAiB,MAAM,QAAQ,KAAK,MAAM;AAEnD,SAAO,iBAAiB,MAAM,aAAa,UAAU,QAAQ,KAAK,MAAM,CAAC;;AAG3E,KAAI,UAAU,SAAS,eAAe,QAAQ,EAC5C;MAAI,QAAQ,KACV,QAAO,iBAAiB,QAAQ,aAAa,eAAe,QAAQ,MAAM,KAAK,EAAE,aAAa,QAAQ,UAAU,UAAU,CAAC;;AAI/H,KAAI,UAAU,SAAS,eAAe,QAAQ,EAC5C;MAAI,QAAQ,KACV,QAAO,iBAAiB,QAAQ,QAAQ,KAAK;;AAIjD,KAAI,UAAU,SAAS,eAAe,SAAS,EAC7C;MAAI,QAAQ,KACV,QAAO,iBAAiB,SAAS,aAAa,UAAU,QAAQ,KAAK,UAAU,CAAC,CAAC;;AAIrF,KAAI,UAAU,SAAS,eAAe,OAAO,CAC3C,QAAO,iBAAiB,OAAO,aAAa,QAAQ,UAAU,UAAU,CAAC;AAG3E,KAAI,UAAU,SAAS,eAAe,KAAK,CACzC,QAAO,iBAAiB,KAAK,aAAa,QAAQ,UAAU,UAAU,EAAE,QAAQ,QAAQ;AAG1F,KAAI,UAAU,SAAS,eAAe,MAAM,CAC1C,QAAO,iBAAiB,MAAM,aAAa,QAAQ,UAAU,UAAU,EAAE,QAAQ,QAAQ;AAG3F,KAAI,UAAU,SAAS,eAAe,IAAI,CACxC,QAAO,iBAAiB,IAAI,aAAa,QAAQ,UAAU,UAAU,EAAE,QAAQ,QAAQ;AAGzF,KAAI,UAAU,SAAS,eAAe,OAAO,CAC3C,QAAO,iBAAiB,OAAO,aAAa,QAAQ,UAAU,UAAU,CAAC;AAG3E,KAAI,UAAU,SAAS,eAAe,QAAQ,CAC5C,QAAO,iBAAiB,QAAQ,aAAa,QAAQ,UAAU,UAAU,EAAE,QAAW,QAAW,QAAQ,QAAQ;AAGnH,KAAI,UAAU,SAAS,eAAe,IAAI,CACxC,QAAO,iBAAiB,IAAI,QAAQ,KAAK;AAE3C,KAAI,UAAU,SAAS,eAAe,IAAI,CACxC,QAAO,iBAAiB,IAAI,QAAQ,KAAK;AAG3C,KAAI,UAAU,SAAS,eAAe,SAAS,CAC7C,QAAO,iBAAiB,SAAS,QAAQ,KAAK,QAAQ,QAAQ,KAAK,OAAO,QAAQ,QAAQ;AAG5F,KAAI,UAAU,SAAS,eAAe,KAAK,CACzC,QAAO,iBAAiB,KAAK,QAAQ,KAAK,MAAM,aAAa,QAAQ,UAAU,QAAQ,EAAE,QAAQ,QAAQ;AAG3G,KAAI,UAAU,SAAS,eAAe,KAAK,CACzC,QAAO,iBAAiB,KAAK,QAAQ,KAAK,MAAM,aAAa,QAAQ,UAAU,QAAQ,EAAE,QAAQ,QAAQ;AAG3G,KAAI,QAAQ,WAAW,oBAAoB,UAAU,SAAS;EAC5D,MAAMC,UAAQ,iBAAiB,QAAQ;AAEvC,SAAOA,QAAO,QAAuC,KAAY;;AAGnE,KAAI,UAAU,SAAS,eAAe,SAAS,EAAE;AAC/C,MAAI,SAAS,MAAM,WAAW,UAAU,QAAQ,eAAe,QAAQ,CAAC,CAAE,QAAO;AAEjF,SAAO,OAAO;;AAGhB,KAAI,QAAQ,WAAW,iBACrB,QAAO,OAAO;;;;;ACnblB,SAAgB,IAAI,EAClB,MACA,UACA,MACA,WACA,eACA,QACA,UACA,YACA,aACA,YACA,SACA,mBACQ;CACR,MAAM,WAAW,CAAC,CAAC,gBAAgB,WAAW,MAAM,eAAe,MAAM;CAEzE,MAAM,UAAUC,KAAe,KAAK,CAAC,QAAQ,SAAS;AACpD,MAAI,aAAa,UAAU,MAAM,eAAe,IAAI,IAAI,UAAU,MAAM,eAAe,IAAI,EACzF,QAAO;AAGT,SAAO;GACP;CAEF,MAAM,SAAS,QACZ,KAAK,QAAQ,QAAQ,aACpBC,MACE;EAAE,QAAQ;EAAW,SAAS;EAAQ;EAAU,EAChD;EAAE;EAAM;EAAY;EAAU;EAAa;EAAQ;EAAU;EAAY;EAAW;EAAS,CAC9F,CACF,CACA,OAAO,QAAQ,CACf,KAAK,GAAG;CAEX,IAAI,SAAS;CACb,MAAM,cAAc,QAAQ,GAAG,EAAE;CACjC,MAAM,aAAa,QAAQ,GAAG,GAAG;AAEjC,KAAI,cAAc,UAAU,YAAY,eAAe,SAAS,CAC9D,KAAI,eAAe,UAAU,aAAa,eAAe,IAAI,CAC3D,KAAI,YAAY,IACd,UAAS;KAET,UAAS;KAGX,UAAS;UAGP,eAAe,UAAU,aAAa,eAAe,IAAI,IAAI,YAAY,IAC3E,UAAS;CAIb,MAAM,aAAaA,MACjB;EACE,QAAQ;EACR,SAAS,EACP,SAAS,eAAe,kBACzB;EACD,UAAU,EAAE;EACb,EACD;EAAE;EAAM;EAAY;EAAU;EAAa;EAAQ;EAAU;EAAY;EAAW;EAAS,CAC9F;CAED,MAAM,mBACJ,CAAC,QAAQ,YAAY,SAAS,GAAG,OAAO,UAAU,WAAW,KAAK,QAAQ,GAAG,IAAI,QAAQ,CAAC,KAAK,IAAI,CAAC,OAAO,OAAU,CAAC,OAAO,QAAQ,CAAC,KAAK,GAAG,IAC9I,cACA;CACF,MAAM,sBAAsB,aAAa,WAAW;EAAE,QAAQ;EAAkB,QAAQ;EAAW,CAAC,IAAI,mBAAmB;CAC3H,MAAM,cAAc,WAAW,GAAG,oBAAoB,uBAAuB,SAAS,KAAK;AAE3F,QACE,4CACE,oBAAC,KAAK;EAAa;EAAM;EAAa;YACpC,oBAAC;GACC;GACM;GACN,OAAO,EACL,UAAU,CAAC,cAAc,gBAAgB,aAAa,eAAe,YAAY,KAAK,OAAU,CAAC,OAAO,QAAQ,EACjH;aAEA;IACK;GACI,EACb,iBACC,qBAAC,KAAK;EAAO,MAAM;EAAe;EAAa;EAAY;aACxD,YACC,oBAAC;GAAK;GAAO,MAAM;aAChB;IACI,EAER,CAAC,YACA,oBAAC;GAAK;GAAO,MAAM;aAChB,kBAAkB,KAAK;IACnB;GAEG,IAEf"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"generators-BY96mD4w.js","names":["options"],"sources":["../src/generators/zodGenerator.tsx","../src/generators/operationsGenerator.tsx"],"sourcesContent":["import { createReactGenerator, type OperationSchema as OperationSchemaType, SchemaGenerator, schemaKeywords } from '@kubb/plugin-oas'\nimport { Oas } from '@kubb/plugin-oas/components'\nimport { useOas, useOperationManager, useSchemaManager } from '@kubb/plugin-oas/hooks'\nimport { getBanner, getFooter } from '@kubb/plugin-oas/utils'\nimport { pluginTsName } from '@kubb/plugin-ts'\nimport { File, useApp } from '@kubb/react'\nimport { Zod } from '../components'\nimport type { PluginZod } from '../types'\n\nexport const zodGenerator = createReactGenerator<PluginZod>({\n name: 'zod',\n Operation({ operation, options }) {\n const { coercion: globalCoercion, inferred, typed, mapper, wrapOutput } = options\n\n const { plugin, pluginManager, mode } = useApp<PluginZod>()\n const oas = useOas()\n const { getSchemas, getFile, getGroup } = useOperationManager()\n const schemaManager = useSchemaManager()\n\n const file = getFile(operation)\n const schemas = getSchemas(operation)\n const schemaGenerator = new SchemaGenerator(options, {\n oas,\n plugin,\n pluginManager,\n mode,\n override: options.override,\n })\n\n const operationSchemas = [schemas.pathParams, schemas.queryParams, schemas.headerParams, schemas.statusCodes, schemas.request, schemas.response]\n .flat()\n .filter(Boolean)\n\n const mapOperationSchema = ({ name, schema: schemaObject, description, keysToOmit, ...options }: OperationSchemaType, i: number) => {\n // hack so Params can be optional when needed\n const required = Array.isArray(schemaObject?.required) ? !!schemaObject.required.length : !!schemaObject?.required\n const someDefaults = Object.values(schemaObject.properties || {}).some((property) => Object.hasOwn(property, 'default') && property.default !== undefined)\n const optional = !required && !someDefaults && name.includes('Params')\n\n const tree = [...schemaGenerator.parse({ schemaObject, name }), optional ? { keyword: schemaKeywords.optional } : undefined].filter(Boolean)\n const imports = schemaManager.getImports(tree)\n const group = options.operation ? getGroup(options.operation) : undefined\n\n const coercion = name.includes('Params') ? { numbers: true, strings: false, dates: true } : globalCoercion\n\n const zod = {\n name: schemaManager.getName(name, { type: 'function' }),\n inferTypeName: schemaManager.getName(name, { type: 'type' }),\n file: schemaManager.getFile(name),\n }\n\n const type = {\n name: schemaManager.getName(name, {\n type: 'type',\n pluginKey: [pluginTsName],\n }),\n file: schemaManager.getFile(options.operationName || name, {\n pluginKey: [pluginTsName],\n group,\n }),\n }\n\n return (\n <Oas.Schema key={i} name={name} schemaObject={schemaObject} tree={tree}>\n {typed && <File.Import isTypeOnly root={file.path} path={type.file.path} name={[type.name]} />}\n {typed && <File.Import isTypeOnly path={plugin.options.version === '4' ? '@kubb/plugin-zod/utils/v4' : '@kubb/plugin-zod/utils'} name={['ToZod']} />}\n {imports.map((imp) => (\n <File.Import key={[imp.path, imp.name, imp.isTypeOnly].join('-')} root={file.path} path={imp.path} name={imp.name} />\n ))}\n <Zod\n name={zod.name}\n typeName={typed ? type.name : undefined}\n inferTypeName={inferred ? zod.inferTypeName : undefined}\n description={description}\n tree={tree}\n rawSchema={schemaObject}\n mapper={mapper}\n coercion={coercion}\n keysToOmit={keysToOmit}\n wrapOutput={wrapOutput}\n version={plugin.options.version}\n emptySchemaType={plugin.options.emptySchemaType}\n />\n </Oas.Schema>\n )\n }\n\n return (\n <File\n baseName={file.baseName}\n path={file.path}\n meta={file.meta}\n banner={getBanner({ oas, output: plugin.options.output, config: pluginManager.config })}\n footer={getFooter({ oas, output: plugin.options.output })}\n >\n <File.Import name={['z']} path={plugin.options.importPath} />\n {operationSchemas.map(mapOperationSchema)}\n </File>\n )\n },\n Schema({ schema, options }) {\n const { coercion, inferred, typed, mapper, importPath, wrapOutput, version } = options\n\n const { getName, getFile, getImports } = useSchemaManager()\n const {\n pluginManager,\n plugin: {\n options: { output, emptySchemaType },\n },\n } = useApp<PluginZod>()\n const oas = useOas()\n\n const imports = getImports(schema.tree)\n\n const zod = {\n name: getName(schema.name, { type: 'function' }),\n inferTypeName: getName(schema.name, { type: 'type' }),\n file: getFile(schema.name),\n }\n\n const type = {\n name: getName(schema.name, { type: 'type', pluginKey: [pluginTsName] }),\n file: getFile(schema.name, { pluginKey: [pluginTsName] }),\n }\n\n return (\n <File\n baseName={zod.file.baseName}\n path={zod.file.path}\n meta={zod.file.meta}\n banner={getBanner({ oas, output, config: pluginManager.config })}\n footer={getFooter({ oas, output })}\n >\n <File.Import name={['z']} path={importPath} />\n {typed && <File.Import isTypeOnly root={zod.file.path} path={type.file.path} name={[type.name]} />}\n {typed && <File.Import isTypeOnly path={options.version === '4' ? '@kubb/plugin-zod/utils/v4' : '@kubb/plugin-zod/utils'} name={['ToZod']} />}\n {imports.map((imp) => (\n <File.Import key={[imp.path, imp.name, imp.isTypeOnly].join('-')} root={zod.file.path} path={imp.path} name={imp.name} />\n ))}\n\n <Zod\n name={zod.name}\n typeName={typed ? type.name : undefined}\n inferTypeName={inferred ? zod.inferTypeName : undefined}\n description={schema.value.description}\n tree={schema.tree}\n rawSchema={schema.value}\n mapper={mapper}\n coercion={coercion}\n wrapOutput={wrapOutput}\n version={version}\n emptySchemaType={emptySchemaType}\n />\n </File>\n )\n },\n})\n","import { createReactGenerator } from '@kubb/plugin-oas'\nimport { useOas, useOperationManager } from '@kubb/plugin-oas/hooks'\nimport { getBanner, getFooter } from '@kubb/plugin-oas/utils'\nimport { File, useApp } from '@kubb/react'\nimport { Operations } from '../components/Operations'\nimport type { PluginZod } from '../types'\n\nexport const operationsGenerator = createReactGenerator<PluginZod>({\n name: 'operations',\n Operations({ operations }) {\n const {\n pluginManager,\n plugin: {\n key: pluginKey,\n options: { output },\n },\n } = useApp<PluginZod>()\n const oas = useOas()\n const { getFile, groupSchemasByName } = useOperationManager()\n\n const name = 'operations'\n const file = pluginManager.getFile({ name, extname: '.ts', pluginKey })\n\n const transformedOperations = operations.map((operation) => ({ operation, data: groupSchemasByName(operation, { type: 'function' }) }))\n\n const imports = Object.entries(transformedOperations)\n .map(([key, { data, operation }]) => {\n const names = [data.request, ...Object.values(data.responses), ...Object.values(data.parameters)].filter(Boolean)\n\n return <File.Import key={key} name={names} root={file.path} path={getFile(operation).path} />\n })\n .filter(Boolean)\n\n return (\n <File\n baseName={file.baseName}\n path={file.path}\n meta={file.meta}\n banner={getBanner({ oas, output, config: pluginManager.config })}\n footer={getFooter({ oas, output })}\n >\n {imports}\n <Operations name={name} operations={transformedOperations} />\n </File>\n )\n },\n})\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"generators-CrSYV5kr.cjs","names":["SchemaGenerator","options","schemaKeywords","pluginTsName","Oas","File","Zod","File","Operations"],"sources":["../src/generators/zodGenerator.tsx","../src/generators/operationsGenerator.tsx"],"sourcesContent":["import { createReactGenerator, type OperationSchema as OperationSchemaType, SchemaGenerator, schemaKeywords } from '@kubb/plugin-oas'\nimport { Oas } from '@kubb/plugin-oas/components'\nimport { useOas, useOperationManager, useSchemaManager } from '@kubb/plugin-oas/hooks'\nimport { getBanner, getFooter } from '@kubb/plugin-oas/utils'\nimport { pluginTsName } from '@kubb/plugin-ts'\nimport { File, useApp } from '@kubb/react'\nimport { Zod } from '../components'\nimport type { PluginZod } from '../types'\n\nexport const zodGenerator = createReactGenerator<PluginZod>({\n name: 'zod',\n Operation({ operation, options }) {\n const { coercion: globalCoercion, inferred, typed, mapper, wrapOutput } = options\n\n const { plugin, pluginManager, mode } = useApp<PluginZod>()\n const oas = useOas()\n const { getSchemas, getFile, getGroup } = useOperationManager()\n const schemaManager = useSchemaManager()\n\n const file = getFile(operation)\n const schemas = getSchemas(operation)\n const schemaGenerator = new SchemaGenerator(options, {\n oas,\n plugin,\n pluginManager,\n mode,\n override: options.override,\n })\n\n const operationSchemas = [schemas.pathParams, schemas.queryParams, schemas.headerParams, schemas.statusCodes, schemas.request, schemas.response]\n .flat()\n .filter(Boolean)\n\n const mapOperationSchema = ({ name, schema: schemaObject, description, keysToOmit, ...options }: OperationSchemaType, i: number) => {\n // hack so Params can be optional when needed\n const required = Array.isArray(schemaObject?.required) ? !!schemaObject.required.length : !!schemaObject?.required\n const someDefaults = Object.values(schemaObject.properties || {}).some((property) => Object.hasOwn(property, 'default') && property.default !== undefined)\n const optional = !required && !someDefaults && name.includes('Params')\n\n const tree = [...schemaGenerator.parse({ schemaObject, name }), optional ? { keyword: schemaKeywords.optional } : undefined].filter(Boolean)\n const imports = schemaManager.getImports(tree)\n const group = options.operation ? getGroup(options.operation) : undefined\n\n const coercion = name.includes('Params') ? { numbers: true, strings: false, dates: true } : globalCoercion\n\n const zod = {\n name: schemaManager.getName(name, { type: 'function' }),\n inferTypeName: schemaManager.getName(name, { type: 'type' }),\n file: schemaManager.getFile(name),\n }\n\n const type = {\n name: schemaManager.getName(name, {\n type: 'type',\n pluginKey: [pluginTsName],\n }),\n file: schemaManager.getFile(options.operationName || name, {\n pluginKey: [pluginTsName],\n group,\n }),\n }\n\n return (\n <Oas.Schema key={i} name={name} schemaObject={schemaObject} tree={tree}>\n {typed && <File.Import isTypeOnly root={file.path} path={type.file.path} name={[type.name]} />}\n {typed && <File.Import isTypeOnly path={plugin.options.version === '4' ? '@kubb/plugin-zod/utils/v4' : '@kubb/plugin-zod/utils'} name={['ToZod']} />}\n {imports.map((imp) => (\n <File.Import key={[imp.path, imp.name, imp.isTypeOnly].join('-')} root={file.path} path={imp.path} name={imp.name} />\n ))}\n <Zod\n name={zod.name}\n typeName={typed ? type.name : undefined}\n inferTypeName={inferred ? zod.inferTypeName : undefined}\n description={description}\n tree={tree}\n rawSchema={schemaObject}\n mapper={mapper}\n coercion={coercion}\n keysToOmit={keysToOmit}\n wrapOutput={wrapOutput}\n version={plugin.options.version}\n emptySchemaType={plugin.options.emptySchemaType}\n />\n </Oas.Schema>\n )\n }\n\n return (\n <File\n baseName={file.baseName}\n path={file.path}\n meta={file.meta}\n banner={getBanner({ oas, output: plugin.options.output, config: pluginManager.config })}\n footer={getFooter({ oas, output: plugin.options.output })}\n >\n <File.Import name={['z']} path={plugin.options.importPath} />\n {operationSchemas.map(mapOperationSchema)}\n </File>\n )\n },\n Schema({ schema, options }) {\n const { coercion, inferred, typed, mapper, importPath, wrapOutput, version } = options\n\n const { getName, getFile, getImports } = useSchemaManager()\n const {\n pluginManager,\n plugin: {\n options: { output, emptySchemaType },\n },\n } = useApp<PluginZod>()\n const oas = useOas()\n\n const imports = getImports(schema.tree)\n\n const zod = {\n name: getName(schema.name, { type: 'function' }),\n inferTypeName: getName(schema.name, { type: 'type' }),\n file: getFile(schema.name),\n }\n\n const type = {\n name: getName(schema.name, { type: 'type', pluginKey: [pluginTsName] }),\n file: getFile(schema.name, { pluginKey: [pluginTsName] }),\n }\n\n return (\n <File\n baseName={zod.file.baseName}\n path={zod.file.path}\n meta={zod.file.meta}\n banner={getBanner({ oas, output, config: pluginManager.config })}\n footer={getFooter({ oas, output })}\n >\n <File.Import name={['z']} path={importPath} />\n {typed && <File.Import isTypeOnly root={zod.file.path} path={type.file.path} name={[type.name]} />}\n {typed && <File.Import isTypeOnly path={options.version === '4' ? '@kubb/plugin-zod/utils/v4' : '@kubb/plugin-zod/utils'} name={['ToZod']} />}\n {imports.map((imp) => (\n <File.Import key={[imp.path, imp.name, imp.isTypeOnly].join('-')} root={zod.file.path} path={imp.path} name={imp.name} />\n ))}\n\n <Zod\n name={zod.name}\n typeName={typed ? type.name : undefined}\n inferTypeName={inferred ? zod.inferTypeName : undefined}\n description={schema.value.description}\n tree={schema.tree}\n rawSchema={schema.value}\n mapper={mapper}\n coercion={coercion}\n wrapOutput={wrapOutput}\n version={version}\n emptySchemaType={emptySchemaType}\n />\n </File>\n )\n },\n})\n","import { createReactGenerator } from '@kubb/plugin-oas'\nimport { useOas, useOperationManager } from '@kubb/plugin-oas/hooks'\nimport { getBanner, getFooter } from '@kubb/plugin-oas/utils'\nimport { File, useApp } from '@kubb/react'\nimport { Operations } from '../components/Operations'\nimport type { PluginZod } from '../types'\n\nexport const operationsGenerator = createReactGenerator<PluginZod>({\n name: 'operations',\n Operations({ operations }) {\n const {\n pluginManager,\n plugin: {\n key: pluginKey,\n options: { output },\n },\n } = useApp<PluginZod>()\n const oas = useOas()\n const { getFile, groupSchemasByName } = useOperationManager()\n\n const name = 'operations'\n const file = pluginManager.getFile({ name, extname: '.ts', pluginKey })\n\n const transformedOperations = operations.map((operation) => ({ operation, data: groupSchemasByName(operation, { type: 'function' }) }))\n\n const imports = Object.entries(transformedOperations)\n .map(([key, { data, operation }]) => {\n const names = [data.request, ...Object.values(data.responses), ...Object.values(data.parameters)].filter(Boolean)\n\n return <File.Import key={key} name={names} root={file.path} path={getFile(operation).path} />\n })\n .filter(Boolean)\n\n return (\n <File\n baseName={file.baseName}\n path={file.path}\n meta={file.meta}\n banner={getBanner({ oas, output, config: pluginManager.config })}\n footer={getFooter({ oas, output })}\n >\n {imports}\n <Operations name={name} operations={transformedOperations} />\n </File>\n )\n },\n})\n"],"mappings":";;;;;;;;;;;;;;;;;AASA,MAAa,2DAA+C;CAC1D,MAAM;CACN,UAAU,EAAE,WAAW,WAAW;EAChC,MAAM,EAAE,UAAU,gBAAgB,UAAU,OAAO,QAAQ,eAAe;EAE1E,MAAM,EAAE,QAAQ,eAAe,mCAA4B;EAC3D,MAAM,2CAAc;EACpB,MAAM,EAAE,YAAY,SAAS,+DAAkC;EAC/D,MAAM,+DAAkC;EAExC,MAAM,OAAO,QAAQ,UAAU;EAC/B,MAAM,UAAU,WAAW,UAAU;EACrC,MAAM,kBAAkB,IAAIA,kCAAgB,SAAS;GACnD;GACA;GACA;GACA;GACA,UAAU,QAAQ;GACnB,CAAC;EAEF,MAAM,mBAAmB;GAAC,QAAQ;GAAY,QAAQ;GAAa,QAAQ;GAAc,QAAQ;GAAa,QAAQ;GAAS,QAAQ;GAAS,CAC7I,MAAM,CACN,OAAO,QAAQ;EAElB,MAAM,sBAAsB,EAAE,MAAM,QAAQ,cAAc,aAAa,WAAY,GAAGC,aAAgC,MAAc;GAElI,MAAM,WAAW,MAAM,QAAQ,cAAc,SAAS,GAAG,CAAC,CAAC,aAAa,SAAS,SAAS,CAAC,CAAC,cAAc;GAC1G,MAAM,eAAe,OAAO,OAAO,aAAa,cAAc,EAAE,CAAC,CAAC,MAAM,aAAa,OAAO,OAAO,UAAU,UAAU,IAAI,SAAS,YAAY,OAAU;GAC1J,MAAM,WAAW,CAAC,YAAY,CAAC,gBAAgB,KAAK,SAAS,SAAS;GAEtE,MAAM,OAAO,CAAC,GAAG,gBAAgB,MAAM;IAAE;IAAc;IAAM,CAAC,EAAE,WAAW,EAAE,SAASC,iCAAe,UAAU,GAAG,OAAU,CAAC,OAAO,QAAQ;GAC5I,MAAM,UAAU,cAAc,WAAW,KAAK;GAC9C,MAAM,QAAQD,UAAQ,YAAY,SAASA,UAAQ,UAAU,GAAG;GAEhE,MAAM,WAAW,KAAK,SAAS,SAAS,GAAG;IAAE,SAAS;IAAM,SAAS;IAAO,OAAO;IAAM,GAAG;GAE5F,MAAM,MAAM;IACV,MAAM,cAAc,QAAQ,MAAM,EAAE,MAAM,YAAY,CAAC;IACvD,eAAe,cAAc,QAAQ,MAAM,EAAE,MAAM,QAAQ,CAAC;IAC5D,MAAM,cAAc,QAAQ,KAAK;IAClC;GAED,MAAM,OAAO;IACX,MAAM,cAAc,QAAQ,MAAM;KAChC,MAAM;KACN,WAAW,CAACE,8BAAa;KAC1B,CAAC;IACF,MAAM,cAAc,QAAQF,UAAQ,iBAAiB,MAAM;KACzD,WAAW,CAACE,8BAAa;KACzB;KACD,CAAC;IACH;AAED,UACE,mDAACC,iCAAI;IAAqB;IAAoB;IAAoB;;KAC/D,SAAS,kDAACC,kBAAK;MAAO;MAAW,MAAM,KAAK;MAAM,MAAM,KAAK,KAAK;MAAM,MAAM,CAAC,KAAK,KAAK;OAAI;KAC7F,SAAS,kDAACA,kBAAK;MAAO;MAAW,MAAM,OAAO,QAAQ,YAAY,MAAM,8BAA8B;MAA0B,MAAM,CAAC,QAAQ;OAAI;KACnJ,QAAQ,KAAK,QACZ,kDAACA,kBAAK;MAA4D,MAAM,KAAK;MAAM,MAAM,IAAI;MAAM,MAAM,IAAI;QAA3F;MAAC,IAAI;MAAM,IAAI;MAAM,IAAI;MAAW,CAAC,KAAK,IAAI,CAAqD,CACrH;KACF,kDAACC;MACC,MAAM,IAAI;MACV,UAAU,QAAQ,KAAK,OAAO;MAC9B,eAAe,WAAW,IAAI,gBAAgB;MACjC;MACP;MACN,WAAW;MACH;MACE;MACE;MACA;MACZ,SAAS,OAAO,QAAQ;MACxB,iBAAiB,OAAO,QAAQ;OAChC;;MAnBa,EAoBJ;;AAIjB,SACE,mDAACD;GACC,UAAU,KAAK;GACf,MAAM,KAAK;GACX,MAAM,KAAK;GACX,+CAAkB;IAAE;IAAK,QAAQ,OAAO,QAAQ;IAAQ,QAAQ,cAAc;IAAQ,CAAC;GACvF,+CAAkB;IAAE;IAAK,QAAQ,OAAO,QAAQ;IAAQ,CAAC;cAEzD,kDAACA,kBAAK;IAAO,MAAM,CAAC,IAAI;IAAE,MAAM,OAAO,QAAQ;KAAc,EAC5D,iBAAiB,IAAI,mBAAmB;IACpC;;CAGX,OAAO,EAAE,QAAQ,WAAW;EAC1B,MAAM,EAAE,UAAU,UAAU,OAAO,QAAQ,YAAY,YAAY,YAAY;EAE/E,MAAM,EAAE,SAAS,SAAS,8DAAiC;EAC3D,MAAM,EACJ,eACA,QAAQ,EACN,SAAS,EAAE,QAAQ,kDAEA;EACvB,MAAM,2CAAc;EAEpB,MAAM,UAAU,WAAW,OAAO,KAAK;EAEvC,MAAM,MAAM;GACV,MAAM,QAAQ,OAAO,MAAM,EAAE,MAAM,YAAY,CAAC;GAChD,eAAe,QAAQ,OAAO,MAAM,EAAE,MAAM,QAAQ,CAAC;GACrD,MAAM,QAAQ,OAAO,KAAK;GAC3B;EAED,MAAM,OAAO;GACX,MAAM,QAAQ,OAAO,MAAM;IAAE,MAAM;IAAQ,WAAW,CAACF,8BAAa;IAAE,CAAC;GACvE,MAAM,QAAQ,OAAO,MAAM,EAAE,WAAW,CAACA,8BAAa,EAAE,CAAC;GAC1D;AAED,SACE,mDAACE;GACC,UAAU,IAAI,KAAK;GACnB,MAAM,IAAI,KAAK;GACf,MAAM,IAAI,KAAK;GACf,+CAAkB;IAAE;IAAK;IAAQ,QAAQ,cAAc;IAAQ,CAAC;GAChE,+CAAkB;IAAE;IAAK;IAAQ,CAAC;;IAElC,kDAACA,kBAAK;KAAO,MAAM,CAAC,IAAI;KAAE,MAAM;MAAc;IAC7C,SAAS,kDAACA,kBAAK;KAAO;KAAW,MAAM,IAAI,KAAK;KAAM,MAAM,KAAK,KAAK;KAAM,MAAM,CAAC,KAAK,KAAK;MAAI;IACjG,SAAS,kDAACA,kBAAK;KAAO;KAAW,MAAM,QAAQ,YAAY,MAAM,8BAA8B;KAA0B,MAAM,CAAC,QAAQ;MAAI;IAC5I,QAAQ,KAAK,QACZ,kDAACA,kBAAK;KAA4D,MAAM,IAAI,KAAK;KAAM,MAAM,IAAI;KAAM,MAAM,IAAI;OAA/F;KAAC,IAAI;KAAM,IAAI;KAAM,IAAI;KAAW,CAAC,KAAK,IAAI,CAAyD,CACzH;IAEF,kDAACC;KACC,MAAM,IAAI;KACV,UAAU,QAAQ,KAAK,OAAO;KAC9B,eAAe,WAAW,IAAI,gBAAgB;KAC9C,aAAa,OAAO,MAAM;KAC1B,MAAM,OAAO;KACb,WAAW,OAAO;KACV;KACE;KACE;KACH;KACQ;MACjB;;IACG;;CAGZ,CAAC;;;;ACrJF,MAAa,kEAAsD;CACjE,MAAM;CACN,WAAW,EAAE,cAAc;EACzB,MAAM,EACJ,eACA,QAAQ,EACN,KAAK,WACL,SAAS,EAAE,yCAEQ;EACvB,MAAM,2CAAc;EACpB,MAAM,EAAE,SAAS,yEAA4C;EAE7D,MAAM,OAAO;EACb,MAAM,OAAO,cAAc,QAAQ;GAAE;GAAM,SAAS;GAAO;GAAW,CAAC;EAEvE,MAAM,wBAAwB,WAAW,KAAK,eAAe;GAAE;GAAW,MAAM,mBAAmB,WAAW,EAAE,MAAM,YAAY,CAAC;GAAE,EAAE;EAEvI,MAAM,UAAU,OAAO,QAAQ,sBAAsB,CAClD,KAAK,CAAC,KAAK,EAAE,MAAM,iBAAiB;GACnC,MAAM,QAAQ;IAAC,KAAK;IAAS,GAAG,OAAO,OAAO,KAAK,UAAU;IAAE,GAAG,OAAO,OAAO,KAAK,WAAW;IAAC,CAAC,OAAO,QAAQ;AAEjH,UAAO,kDAACC,kBAAK;IAAiB,MAAM;IAAO,MAAM,KAAK;IAAM,MAAM,QAAQ,UAAU,CAAC;MAA5D,IAAoE;IAC7F,CACD,OAAO,QAAQ;AAElB,SACE,mDAACA;GACC,UAAU,KAAK;GACf,MAAM,KAAK;GACX,MAAM,KAAK;GACX,+CAAkB;IAAE;IAAK;IAAQ,QAAQ,cAAc;IAAQ,CAAC;GAChE,+CAAkB;IAAE;IAAK;IAAQ,CAAC;cAEjC,SACD,kDAACC;IAAiB;IAAM,YAAY;KAAyB;IACxD;;CAGZ,CAAC"}
package/dist/utils/v4.cjs DELETED
File without changes
@@ -1,38 +0,0 @@
1
- import { z } from "zod/v4";
2
-
3
- //#region src/utils/v4/ToZod.d.ts
4
-
5
- /**
6
- * See https://github.com/colinhacks/tozod/blob/master/src/index.ts
7
- * Adapted based on https://github.com/colinhacks/zod/issues/372
8
- */
9
- type isAny<T> = [any extends T ? 'true' : 'false'] extends ['true'] ? true : false;
10
- type nonoptional<T> = T extends undefined ? never : T;
11
- type nonnullable<T> = T extends null ? never : T;
12
- type equals<X, Y> = [X] extends [Y] ? ([Y] extends [X] ? true : false) : false;
13
- type zodKey<T> = isAny<T> extends true ? 'any' : equals<T, boolean> extends true ? 'boolean' : [undefined] extends [T] ? 'optional' : [null] extends [T] ? 'nullable' : T extends any[] ? 'array' : equals<T, string> extends true ? 'string' : equals<T, bigint> extends true ? 'bigint' : equals<T, number> extends true ? 'number' : equals<T, Date> extends true ? 'date' : T extends {
14
- slice: any;
15
- stream: any;
16
- text: any;
17
- } ? 'blob' : T extends {
18
- [key: string]: any;
19
- } ? 'object' : 'rest';
20
- type ToZod<T> = {
21
- any: z.ZodAny;
22
- optional: z.ZodOptional<ToZod<nonoptional<T>>>;
23
- nullable: z.ZodNullable<ToZod<nonnullable<T>>>;
24
- array: T extends Array<infer U> ? z.ZodArray<ToZod<U>> : never;
25
- string: z.ZodString;
26
- file: z.ZodFile;
27
- blob: z.ZodType<Blob, T>;
28
- bigint: z.ZodBigInt;
29
- number: z.ZodNumber;
30
- boolean: z.ZodBoolean;
31
- date: z.ZodDate;
32
- object: z.ZodObject<ZodShape<T>, 'passthrough'>;
33
- rest: z.ZodType<T>;
34
- }[zodKey<T>];
35
- type ZodShape<T> = { [key in keyof T]-?: ToZod<T[key]> };
36
- //#endregion
37
- export { type ToZod, type ZodShape };
38
- //# sourceMappingURL=v4.d.cts.map
@@ -1,38 +0,0 @@
1
- import { z } from "zod/v4";
2
-
3
- //#region src/utils/v4/ToZod.d.ts
4
-
5
- /**
6
- * See https://github.com/colinhacks/tozod/blob/master/src/index.ts
7
- * Adapted based on https://github.com/colinhacks/zod/issues/372
8
- */
9
- type isAny<T> = [any extends T ? 'true' : 'false'] extends ['true'] ? true : false;
10
- type nonoptional<T> = T extends undefined ? never : T;
11
- type nonnullable<T> = T extends null ? never : T;
12
- type equals<X, Y> = [X] extends [Y] ? ([Y] extends [X] ? true : false) : false;
13
- type zodKey<T> = isAny<T> extends true ? 'any' : equals<T, boolean> extends true ? 'boolean' : [undefined] extends [T] ? 'optional' : [null] extends [T] ? 'nullable' : T extends any[] ? 'array' : equals<T, string> extends true ? 'string' : equals<T, bigint> extends true ? 'bigint' : equals<T, number> extends true ? 'number' : equals<T, Date> extends true ? 'date' : T extends {
14
- slice: any;
15
- stream: any;
16
- text: any;
17
- } ? 'blob' : T extends {
18
- [key: string]: any;
19
- } ? 'object' : 'rest';
20
- type ToZod<T> = {
21
- any: z.ZodAny;
22
- optional: z.ZodOptional<ToZod<nonoptional<T>>>;
23
- nullable: z.ZodNullable<ToZod<nonnullable<T>>>;
24
- array: T extends Array<infer U> ? z.ZodArray<ToZod<U>> : never;
25
- string: z.ZodString;
26
- file: z.ZodFile;
27
- blob: z.ZodType<Blob, T>;
28
- bigint: z.ZodBigInt;
29
- number: z.ZodNumber;
30
- boolean: z.ZodBoolean;
31
- date: z.ZodDate;
32
- object: z.ZodObject<ZodShape<T>, 'passthrough'>;
33
- rest: z.ZodType<T>;
34
- }[zodKey<T>];
35
- type ZodShape<T> = { [key in keyof T]-?: ToZod<T[key]> };
36
- //#endregion
37
- export { type ToZod, type ZodShape };
38
- //# sourceMappingURL=v4.d.ts.map
package/dist/utils/v4.js DELETED
@@ -1 +0,0 @@
1
- export { };
@@ -1,61 +0,0 @@
1
- import type { z } from 'zod/v4'
2
-
3
- /**
4
- * See https://github.com/colinhacks/tozod/blob/master/src/index.ts
5
- * Adapted based on https://github.com/colinhacks/zod/issues/372
6
- */
7
-
8
- type isAny<T> = [any extends T ? 'true' : 'false'] extends ['true'] ? true : false
9
- type nonoptional<T> = T extends undefined ? never : T
10
- type nonnullable<T> = T extends null ? never : T
11
- type equals<X, Y> = [X] extends [Y] ? ([Y] extends [X] ? true : false) : false
12
-
13
- type zodKey<T> = isAny<T> extends true
14
- ? 'any'
15
- : equals<T, boolean> extends true
16
- ? 'boolean'
17
- : [undefined] extends [T]
18
- ? 'optional'
19
- : [null] extends [T]
20
- ? 'nullable'
21
- : T extends any[]
22
- ? 'array'
23
- : equals<T, string> extends true
24
- ? 'string'
25
- : equals<T, bigint> extends true
26
- ? 'bigint'
27
- : equals<T, number> extends true
28
- ? 'number'
29
- : equals<T, Date> extends true
30
- ? 'date'
31
- : T extends { slice: any; stream: any; text: any }
32
- ? 'blob'
33
- : T extends { [key: string]: any }
34
- ? 'object'
35
- : 'rest'
36
-
37
- type ToZod<T> = {
38
- any: z.ZodAny
39
- // @ts-expect-error Excessive stack depth comparing types
40
- optional: z.ZodOptional<ToZod<nonoptional<T>>>
41
- // @ts-expect-error Excessive stack depth comparing types
42
- nullable: z.ZodNullable<ToZod<nonnullable<T>>>
43
- // @ts-expect-error Excessive stack depth comparing types
44
- array: T extends Array<infer U> ? z.ZodArray<ToZod<U>> : never
45
- string: z.ZodString
46
- file: z.ZodFile
47
- blob: z.ZodType<Blob, T>
48
- bigint: z.ZodBigInt
49
- number: z.ZodNumber
50
- boolean: z.ZodBoolean
51
- date: z.ZodDate
52
- // @ts-expect-error Excessive stack depth comparing types
53
- object: z.ZodObject<ZodShape<T>, 'passthrough'>
54
- rest: z.ZodType<T>
55
- }[zodKey<T>]
56
-
57
- type ZodShape<T> = {
58
- [key in keyof T]-?: ToZod<T[key]>
59
- }
60
-
61
- export type { ToZod, ZodShape }
@@ -1 +0,0 @@
1
- export type { ToZod, ZodShape } from './ToZod.ts'