@kubb/plugin-zod 4.12.13 → 4.12.15

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.
@@ -682,12 +682,12 @@ function Zod({ name, typeName, tree, schema, inferTypeName, mapper, coercion, ke
682
682
  return true;
683
683
  });
684
684
  const baseSchemas = mini ? filterMiniModifiers(schemas) : schemas;
685
- const output = baseSchemas.map((schema$1, index) => {
685
+ const output = baseSchemas.map((schemaKeyword, index) => {
686
686
  const siblings = baseSchemas.filter((_, i) => i !== index);
687
687
  return parse({
688
- schema: schema$1,
688
+ schema,
689
689
  parent: void 0,
690
- current: schema$1,
690
+ current: schemaKeyword,
691
691
  siblings,
692
692
  name
693
693
  }, {
@@ -756,4 +756,4 @@ function Zod({ name, typeName, tree, schema, inferTypeName, mapper, coercion, ke
756
756
 
757
757
  //#endregion
758
758
  export { Operations as n, Zod as t };
759
- //# sourceMappingURL=components-me856BK6.js.map
759
+ //# sourceMappingURL=components-By0pxFjL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components-By0pxFjL.js","names":["checks: string[]","order: string[]","schema","parserZod.sort","parserZod.filterMiniModifiers","parserZod.parse","parserZod.wrapWithMiniModifiers","parserZod.extractMiniModifiers"],"sources":["../src/components/Operations.tsx","../src/parser.ts","../src/components/Zod.tsx"],"sourcesContent":["import transformers from '@kubb/core/transformers'\nimport type { HttpMethod, Operation } from '@kubb/oas'\nimport type { SchemaNames } from '@kubb/plugin-oas/hooks'\nimport { Const, File, Type } from '@kubb/react-fabric'\nimport type { KubbNode } from '@kubb/react-fabric/types'\n\ntype Props = {\n name: string\n operations: Array<{ operation: Operation; data: SchemaNames }>\n}\n\nexport function Operations({ name, operations }: Props): KubbNode {\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=\"OperationSchema\" isExportable isIndexable>\n <Type name=\"OperationSchema\" export>{`{\n readonly request: z.ZodTypeAny | undefined;\n readonly parameters: {\n readonly path: z.ZodTypeAny | undefined;\n readonly query: z.ZodTypeAny | undefined;\n readonly header: z.ZodTypeAny | undefined;\n };\n readonly responses: {\n readonly [status: number]: z.ZodTypeAny;\n readonly default: z.ZodTypeAny;\n };\n readonly errors: {\n readonly [status: number]: z.ZodTypeAny;\n };\n}`}</Type>\n </File.Source>\n <File.Source name=\"OperationsMap\" isExportable isIndexable>\n <Type name=\"OperationsMap\" export>\n {'Record<string, OperationSchema>'}\n </Type>\n </File.Source>\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'\n\nimport type { Schema, SchemaMapper } from '@kubb/plugin-oas'\nimport { createParser, findSchemaKeyword, isKeyword, SchemaGenerator, type SchemaKeywordMapper, schemaKeywords } from '@kubb/plugin-oas'\n\n//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)\n// also include shouldCoerce\n\n/**\n * Helper to build string/array length constraint checks for Zod Mini mode\n */\nfunction buildLengthChecks(min?: number, max?: number): string[] {\n const checks: string[] = []\n if (min !== undefined) checks.push(`z.minLength(${min})`)\n if (max !== undefined) checks.push(`z.maxLength(${max})`)\n return checks\n}\n\nconst zodKeywordMapper = {\n any: () => 'z.any()',\n unknown: () => 'z.unknown()',\n void: () => 'z.void()',\n number: (coercion?: boolean, min?: number, max?: number, exclusiveMinimum?: number, exclusiveMaximum?: number, mini?: boolean) => {\n if (mini) {\n const checks: string[] = []\n if (min !== undefined) checks.push(`z.minimum(${min})`)\n if (max !== undefined) checks.push(`z.maximum(${max})`)\n if (exclusiveMinimum !== undefined) checks.push(`z.minimum(${exclusiveMinimum}, { exclusive: true })`)\n if (exclusiveMaximum !== undefined) checks.push(`z.maximum(${exclusiveMaximum}, { exclusive: true })`)\n if (checks.length > 0) {\n return `z.number().check(${checks.join(', ')})`\n }\n return 'z.number()'\n }\n return [\n coercion ? 'z.coerce.number()' : 'z.number()',\n min !== undefined ? `.min(${min})` : undefined,\n max !== undefined ? `.max(${max})` : undefined,\n exclusiveMinimum !== undefined ? `.gt(${exclusiveMinimum})` : undefined,\n exclusiveMaximum !== undefined ? `.lt(${exclusiveMaximum})` : undefined,\n ]\n .filter(Boolean)\n .join('')\n },\n integer: (coercion?: boolean, min?: number, max?: number, version: '3' | '4' = '3', exclusiveMinimum?: number, exclusiveMaximum?: number, mini?: boolean) => {\n if (mini) {\n const checks: string[] = []\n if (min !== undefined) checks.push(`z.minimum(${min})`)\n if (max !== undefined) checks.push(`z.maximum(${max})`)\n if (exclusiveMinimum !== undefined) checks.push(`z.minimum(${exclusiveMinimum}, { exclusive: true })`)\n if (exclusiveMaximum !== undefined) checks.push(`z.maximum(${exclusiveMaximum}, { exclusive: true })`)\n if (checks.length > 0) {\n return `z.int().check(${checks.join(', ')})`\n }\n return 'z.int()'\n }\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 exclusiveMinimum !== undefined ? `.gt(${exclusiveMinimum})` : undefined,\n exclusiveMaximum !== undefined ? `.lt(${exclusiveMaximum})` : 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, mini?: boolean) => {\n if (mini) {\n const checks = buildLengthChecks(min, max)\n if (checks.length > 0) {\n return `z.string().check(${checks.join(', ')})`\n }\n return 'z.string()'\n }\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: (value?: string) => {\n if (value) {\n return `z.nullable(${value})`\n }\n return '.nullable()'\n },\n null: () => 'z.null()',\n nullish: (value?: string) => {\n if (value) {\n return `z.nullish(${value})`\n }\n return '.nullish()'\n },\n array: (items: string[] = [], min?: number, max?: number, unique?: boolean, mini?: boolean) => {\n if (mini) {\n const checks = buildLengthChecks(min, max)\n if (unique) checks.push(`z.refine(items => new Set(items).size === items.length, { message: \"Array entries must be unique\" })`)\n if (checks.length > 0) {\n return `z.array(${items?.join('')}).check(${checks.join(', ')})`\n }\n return `z.array(${items?.join('')})`\n }\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', mini?: boolean) => {\n // Zod Mini doesn't support .datetime() method, use plain string\n if (mini) {\n return 'z.string()'\n }\n\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', min?: number, max?: number, mini?: boolean) => {\n if (mini) {\n const checks = buildLengthChecks(min, max)\n if (checks.length > 0) {\n return `z.uuid().check(${checks.join(', ')})`\n }\n return 'z.uuid()'\n }\n return [\n coercion ? (version === '4' ? 'z.uuid()' : 'z.coerce.string().uuid()') : version === '4' ? 'z.uuid()' : 'z.string().uuid()',\n min !== undefined ? `.min(${min})` : undefined,\n max !== undefined ? `.max(${max})` : undefined,\n ]\n .filter(Boolean)\n .join('')\n },\n url: (coercion?: boolean, version: '3' | '4' = '3', min?: number, max?: number, mini?: boolean) => {\n if (mini) {\n const checks = buildLengthChecks(min, max)\n if (checks.length > 0) {\n return `z.url().check(${checks.join(', ')})`\n }\n return 'z.url()'\n }\n return [\n coercion ? (version === '4' ? 'z.url()' : 'z.coerce.string().url()') : version === '4' ? 'z.url()' : 'z.string().url()',\n min !== undefined ? `.min(${min})` : undefined,\n max !== undefined ? `.max(${max})` : undefined,\n ]\n .filter(Boolean)\n .join('')\n },\n default: (value?: string | number | boolean | object, innerSchema?: string, mini?: boolean) => {\n if (mini && innerSchema) {\n const defaultValue = typeof value === 'object' ? '{}' : (value ?? '')\n return `z._default(${innerSchema}, ${defaultValue})`\n }\n\n if (typeof value === 'object') {\n return '.default({})'\n }\n\n if (value === undefined) {\n return '.default()'\n }\n\n if (typeof value === 'string' && !value) {\n return `.default('')`\n }\n\n return `.default(${value ?? ''})`\n },\n and: (items: string[] = [], mini?: boolean) => {\n // zod/mini doesn't support .and() method, so we can't use intersection types\n // In mini mode, we try to extract and append .check() calls instead\n if (mini && items.length > 0) {\n // Try to extract check calls from additional items\n const checks: string[] = []\n for (const item of items) {\n // Extract .check(...) from patterns like \"z.string().check(...)\"\n // Need to handle nested parentheses properly\n const checkStart = item.indexOf('.check(')\n if (checkStart !== -1) {\n // Find the matching closing parenthesis\n let depth = 0\n let i = checkStart + 7 // length of '.check('\n let checkContent = ''\n while (i < item.length) {\n const char = item[i]\n if (char === '(') depth++\n else if (char === ')') {\n if (depth === 0) break\n depth--\n }\n checkContent += char\n i++\n }\n if (checkContent) {\n checks.push(checkContent)\n }\n }\n }\n\n if (checks.length > 0) {\n // Append checks to the base schema\n return `.check(${checks.join(', ')})`\n }\n\n // If we can't extract checks, just use the first schema (limitation)\n return ''\n }\n return items?.map((item) => `.and(${item})`).join('')\n },\n describe: (value = '', innerSchema?: string, mini?: boolean) => {\n if (mini) {\n return undefined\n }\n\n if (innerSchema) {\n return `z.describe(${innerSchema}, ${value})`\n }\n return `.describe(${value})`\n },\n max: undefined,\n min: undefined,\n optional: (value?: string) => {\n if (value) {\n return `z.optional(${value})`\n }\n return '.optional()'\n },\n matches: (value = '', coercion?: boolean, mini?: boolean, min?: number, max?: number) => {\n if (mini) {\n const checks = buildLengthChecks(min, max)\n checks.push(`z.regex(${value})`)\n return `z.string().check(${checks.join(', ')})`\n }\n return [\n coercion ? 'z.coerce.string()' : 'z.string()',\n min !== undefined ? `.min(${min})` : undefined,\n max !== undefined ? `.max(${max})` : undefined,\n `.regex(${value})`,\n ]\n .filter(Boolean)\n .join('')\n },\n email: (coercion?: boolean, version: '3' | '4' = '3', min?: number, max?: number, mini?: boolean) => {\n if (mini) {\n const checks = buildLengthChecks(min, max)\n if (checks.length > 0) {\n return `z.email().check(${checks.join(', ')})`\n }\n return 'z.email()'\n }\n return [\n coercion ? (version === '4' ? 'z.email()' : 'z.coerce.string().email()') : version === '4' ? 'z.email()' : 'z.string().email()',\n min !== undefined ? `.min(${min})` : undefined,\n max !== undefined ? `.max(${max})` : undefined,\n ]\n .filter(Boolean)\n .join('')\n },\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 `z.lazy(() => ${value})`\n },\n blob: () => 'z.instanceof(File)',\n deprecated: undefined,\n example: undefined,\n schema: undefined,\n catchall: (value?: string, mini?: boolean) => {\n // Zod Mini doesn't support .catchall() method\n if (mini) {\n return undefined\n }\n return value ? `.catchall(${value})` : undefined\n },\n name: undefined,\n exclusiveMinimum: undefined,\n exclusiveMaximum: 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\ntype MiniModifiers = {\n hasOptional?: boolean\n hasNullable?: boolean\n hasNullish?: boolean\n defaultValue?: string | number | true | object\n}\n\n/**\n * Keywords that represent modifiers for mini mode\n * These are separated from the base schema and wrapped around it\n * Note: describe is included to filter it out, but won't be wrapped (Zod Mini doesn't support describe)\n */\nexport const miniModifierKeywords = [schemaKeywords.optional, schemaKeywords.nullable, schemaKeywords.nullish, schemaKeywords.default, schemaKeywords.describe]\n\n/**\n * Extracts mini mode modifiers from a schemas array\n * This can be reused by other parsers (e.g., valibot) that need similar functionality\n * Note: describe is not included as Zod Mini doesn't support it\n */\nexport function extractMiniModifiers(schemas: Schema[]): MiniModifiers {\n const defaultSchema = schemas.find((item) => isKeyword(item, schemaKeywords.default)) as { keyword: string; args: unknown } | undefined\n\n return {\n hasOptional: schemas.some((item) => isKeyword(item, schemaKeywords.optional)),\n hasNullable: schemas.some((item) => isKeyword(item, schemaKeywords.nullable)),\n hasNullish: schemas.some((item) => isKeyword(item, schemaKeywords.nullish)),\n defaultValue: defaultSchema?.args as string | number | true | object | undefined,\n }\n}\n\n/**\n * Filters out modifier keywords from schemas for mini mode base schema parsing\n * This can be reused by other parsers (e.g., valibot) that need similar functionality\n */\nexport function filterMiniModifiers(schemas: Schema[]): Schema[] {\n return schemas.filter((item) => !miniModifierKeywords.some((keyword) => isKeyword(item, keyword)))\n}\n\n/**\n * Wraps an output string with Zod Mini functional modifiers\n * Order: default (innermost) -> nullable -> optional (outermost)\n * OR: default -> nullish\n * Note: describe is not supported in Zod Mini and is skipped\n */\nexport function wrapWithMiniModifiers(output: string, modifiers: MiniModifiers): string {\n let result = output\n\n // Apply default first (innermost wrapper)\n if (modifiers.defaultValue !== undefined) {\n result = zodKeywordMapper.default(modifiers.defaultValue, result, true)!\n }\n\n // Apply nullish, nullable, or optional (outer wrappers for optionality)\n if (modifiers.hasNullish) {\n result = zodKeywordMapper.nullish(result)!\n } else {\n if (modifiers.hasNullable) {\n result = zodKeywordMapper.nullable(result)!\n }\n if (modifiers.hasOptional) {\n result = zodKeywordMapper.optional(result)!\n }\n }\n\n return result\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 mapper?: Record<string, string>\n coercion?: boolean | { dates?: boolean; strings?: boolean; numbers?: boolean }\n wrapOutput?: (opts: { output: string; schema: any }) => string | undefined\n version: '3' | '4'\n skipLazyForRefs?: boolean\n mini?: boolean\n}\n\n// Create the parser using createParser\nexport const parse = createParser<string, ParserOptions>({\n mapper: zodKeywordMapper,\n handlers: {\n union(tree, options) {\n const { current, schema, parent, name, siblings } = tree\n if (!isKeyword(current, schemaKeywords.union)) return undefined\n\n // zod union type needs at least 2 items\n if (Array.isArray(current.args) && current.args.length === 1) {\n return this.parse({ schema, parent, 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((it, _index, siblings) => this.parse({ schema, parent: current, name, current: it, siblings }, options))\n .filter(Boolean),\n )\n },\n and(tree, options) {\n const { current, schema, name } = tree\n if (!isKeyword(current, schemaKeywords.and)) return undefined\n\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((it: Schema, _index, siblings) => this.parse({ schema, parent: current, name, current: it, siblings }, options))\n .filter(Boolean)\n\n return `${items.slice(0, 1)}${zodKeywordMapper.and(items.slice(1), options.mini)}`\n },\n array(tree, options) {\n const { current, schema, name } = tree\n if (!isKeyword(current, schemaKeywords.array)) return undefined\n\n return zodKeywordMapper.array(\n sort(current.args.items)\n .map((it, _index, siblings) => {\n return this.parse({ schema, parent: current, name, current: it, siblings }, options)\n })\n .filter(Boolean),\n current.args.min,\n current.args.max,\n current.args.unique,\n options.mini,\n )\n },\n enum(tree, options) {\n const { current, schema, name } = tree\n if (!isKeyword(current, schemaKeywords.enum)) return undefined\n\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 this.parse({ schema, parent: current, 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((it, _index, siblings) => {\n return this.parse({ schema, parent: current, name, current: it, 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 ref(tree, options) {\n const { current } = tree\n if (!isKeyword(current, schemaKeywords.ref)) return undefined\n\n // Skip z.lazy wrapper if skipLazyForRefs is true (e.g., inside v4 getters)\n if (options.skipLazyForRefs) {\n return current.args?.name\n }\n return zodKeywordMapper.ref(current.args?.name)\n },\n object(tree, options) {\n const { current, schema, name } = tree\n if (!isKeyword(current, schemaKeywords.object)) return undefined\n\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(([propertyName, schemas]) => {\n const nameSchema = schemas.find((it) => it.keyword === schemaKeywords.name) as SchemaKeywordMapper['name']\n const isNullable = schemas.some((it) => isKeyword(it, schemaKeywords.nullable))\n const isNullish = schemas.some((it) => isKeyword(it, schemaKeywords.nullish))\n const isOptional = schemas.some((it) => isKeyword(it, schemaKeywords.optional))\n const hasRef = !!SchemaGenerator.find(schemas, schemaKeywords.ref)\n\n const mappedName = nameSchema?.args || propertyName\n\n // custom mapper(pluginOptions)\n if (options.mapper?.[mappedName]) {\n return `\"${propertyName}\": ${options.mapper?.[mappedName]}`\n }\n\n const baseSchemaOutput = sort(schemas)\n .filter((schema) => {\n return !isKeyword(schema, schemaKeywords.optional) && !isKeyword(schema, schemaKeywords.nullable) && !isKeyword(schema, schemaKeywords.nullish)\n })\n .map((it) => {\n // For v4 with refs, skip z.lazy wrapper since the getter provides lazy evaluation\n const skipLazyForRefs = options.version === '4' && hasRef\n return this.parse({ schema, parent: current, name, current: it, siblings: schemas }, { ...options, skipLazyForRefs })\n })\n .filter(Boolean)\n .join('')\n\n const objectValue = options.wrapOutput\n ? options.wrapOutput({ output: baseSchemaOutput, schema: schema?.properties?.[propertyName] }) || baseSchemaOutput\n : baseSchemaOutput\n\n if (options.version === '4' && hasRef) {\n // In mini mode, use functional wrappers instead of chainable methods\n if (options.mini) {\n // both optional and nullable\n if (isNullish) {\n return `get \"${propertyName}\"(){\n return ${zodKeywordMapper.nullish(objectValue)}\n }`\n }\n\n // undefined\n if (isOptional) {\n return `get \"${propertyName}\"(){\n return ${zodKeywordMapper.optional(objectValue)}\n }`\n }\n\n // null\n if (isNullable) {\n return `get \"${propertyName}\"(){\n return ${zodKeywordMapper.nullable(objectValue)}\n }`\n }\n\n return `get \"${propertyName}\"(){\n return ${objectValue}\n }`\n }\n\n // Non-mini mode uses chainable methods\n // both optional and nullable\n if (isNullish) {\n return `get \"${propertyName}\"(){\n return ${objectValue}${zodKeywordMapper.nullish()}\n }`\n }\n\n // undefined\n if (isOptional) {\n return `get \"${propertyName}\"(){\n return ${objectValue}${zodKeywordMapper.optional()}\n }`\n }\n\n // null\n if (isNullable) {\n return `get \"${propertyName}\"(){\n return ${objectValue}${zodKeywordMapper.nullable()}\n }`\n }\n\n return `get \"${propertyName}\"(){\n return ${objectValue}\n }`\n }\n\n // both optional and nullable\n if (isNullish) {\n return `\"${propertyName}\": ${objectValue}${zodKeywordMapper.nullish()}`\n }\n\n // undefined\n if (isOptional) {\n return `\"${propertyName}\": ${zodKeywordMapper.optional(objectValue)}`\n }\n\n // null\n if (isNullable) {\n return `\"${propertyName}\": ${zodKeywordMapper.nullable(objectValue)}`\n }\n\n return `\"${propertyName}\": ${objectValue}`\n })\n .join(',\\n')\n\n const additionalProperties = current.args?.additionalProperties?.length\n ? current.args.additionalProperties\n .map((it, _index, siblings) => this.parse({ schema, parent: current, name, current: it, 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, options.mini) : undefined,\n ].filter(Boolean)\n\n return text.join('')\n },\n tuple(tree, options) {\n const { current, schema, name } = tree\n if (!isKeyword(current, schemaKeywords.tuple)) return undefined\n\n return zodKeywordMapper.tuple(\n current.args.items.map((it, _index, siblings) => this.parse({ schema, parent: current, name, current: it, siblings }, options)).filter(Boolean),\n )\n },\n const(tree, _options) {\n const { current } = tree\n if (!isKeyword(current, schemaKeywords.const)) return undefined\n\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(typeof current.args.value === 'boolean' ? current.args.value : undefined)\n }\n return zodKeywordMapper.const(transformers.stringify(current.args.value))\n },\n matches(tree, options) {\n const { current, siblings } = tree\n if (!isKeyword(current, schemaKeywords.matches)) return undefined\n\n // Early exit: if siblings contain both matches and ref → skip matches entirely\n const hasRef = siblings.some((it) => isKeyword(it, schemaKeywords.ref))\n if (hasRef) {\n return undefined // strip matches\n }\n\n const minSchema = findSchemaKeyword(siblings, 'min')\n const maxSchema = findSchemaKeyword(siblings, 'max')\n\n if (current.args) {\n return zodKeywordMapper.matches(\n transformers.toRegExpString(current.args, null),\n shouldCoerce(options.coercion, 'strings'),\n options.mini,\n minSchema?.args,\n maxSchema?.args,\n )\n }\n return undefined\n },\n default(tree, options) {\n const { current } = tree\n if (!isKeyword(current, schemaKeywords.default)) return undefined\n\n // In mini mode, default is handled by wrapWithMiniModifiers\n if (options.mini) {\n return undefined\n }\n if (current.args !== undefined) {\n return zodKeywordMapper.default(current.args)\n }\n // When args is undefined, call the mapper without arguments\n return zodKeywordMapper.default()\n },\n describe(tree, options) {\n const { current } = tree\n if (!isKeyword(current, schemaKeywords.describe)) return undefined\n\n if (current.args) {\n return zodKeywordMapper.describe(transformers.stringify(current.args.toString()), undefined, options.mini)\n }\n return undefined\n },\n string(tree, options) {\n const { current, siblings } = tree\n if (!isKeyword(current, schemaKeywords.string)) return undefined\n\n const minSchema = findSchemaKeyword(siblings, 'min')\n const maxSchema = findSchemaKeyword(siblings, 'max')\n\n return zodKeywordMapper.string(shouldCoerce(options.coercion, 'strings'), minSchema?.args, maxSchema?.args, options.mini)\n },\n uuid(tree, options) {\n const { current, siblings } = tree\n if (!isKeyword(current, schemaKeywords.uuid)) return undefined\n\n const minSchema = findSchemaKeyword(siblings, 'min')\n const maxSchema = findSchemaKeyword(siblings, 'max')\n\n return zodKeywordMapper.uuid(shouldCoerce(options.coercion, 'strings'), options.version, minSchema?.args, maxSchema?.args, options.mini)\n },\n email(tree, options) {\n const { current, siblings } = tree\n if (!isKeyword(current, schemaKeywords.email)) return undefined\n\n const minSchema = findSchemaKeyword(siblings, 'min')\n const maxSchema = findSchemaKeyword(siblings, 'max')\n\n return zodKeywordMapper.email(shouldCoerce(options.coercion, 'strings'), options.version, minSchema?.args, maxSchema?.args, options.mini)\n },\n url(tree, options) {\n const { current, siblings } = tree\n if (!isKeyword(current, schemaKeywords.url)) return undefined\n\n const minSchema = findSchemaKeyword(siblings, 'min')\n const maxSchema = findSchemaKeyword(siblings, 'max')\n\n return zodKeywordMapper.url(shouldCoerce(options.coercion, 'strings'), options.version, minSchema?.args, maxSchema?.args, options.mini)\n },\n number(tree, options) {\n const { current, siblings } = tree\n if (!isKeyword(current, schemaKeywords.number)) return undefined\n\n const minSchema = findSchemaKeyword(siblings, 'min')\n const maxSchema = findSchemaKeyword(siblings, 'max')\n const exclusiveMinimumSchema = findSchemaKeyword(siblings, 'exclusiveMinimum')\n const exclusiveMaximumSchema = findSchemaKeyword(siblings, 'exclusiveMaximum')\n\n return zodKeywordMapper.number(\n shouldCoerce(options.coercion, 'numbers'),\n minSchema?.args,\n maxSchema?.args,\n exclusiveMinimumSchema?.args,\n exclusiveMaximumSchema?.args,\n options.mini,\n )\n },\n integer(tree, options) {\n const { current, siblings } = tree\n if (!isKeyword(current, schemaKeywords.integer)) return undefined\n\n const minSchema = findSchemaKeyword(siblings, 'min')\n const maxSchema = findSchemaKeyword(siblings, 'max')\n const exclusiveMinimumSchema = findSchemaKeyword(siblings, 'exclusiveMinimum')\n const exclusiveMaximumSchema = findSchemaKeyword(siblings, 'exclusiveMaximum')\n\n return zodKeywordMapper.integer(\n shouldCoerce(options.coercion, 'numbers'),\n minSchema?.args,\n maxSchema?.args,\n options.version,\n exclusiveMinimumSchema?.args,\n exclusiveMaximumSchema?.args,\n options.mini,\n )\n },\n datetime(tree, options) {\n const { current } = tree\n if (!isKeyword(current, schemaKeywords.datetime)) return undefined\n\n return zodKeywordMapper.datetime(current.args.offset, current.args.local, options.version, options.mini)\n },\n date(tree, options) {\n const { current } = tree\n if (!isKeyword(current, schemaKeywords.date)) return undefined\n\n return zodKeywordMapper.date(current.args.type, shouldCoerce(options.coercion, 'dates'), options.version)\n },\n time(tree, options) {\n const { current } = tree\n if (!isKeyword(current, schemaKeywords.time)) return undefined\n\n return zodKeywordMapper.time(current.args.type, shouldCoerce(options.coercion, 'dates'), options.version)\n },\n },\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-fabric'\nimport type { KubbNode } from '@kubb/react-fabric/types'\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 schema: 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 mini?: boolean\n}\n\nexport function Zod({\n name,\n typeName,\n tree,\n schema,\n inferTypeName,\n mapper,\n coercion,\n keysToOmit,\n description,\n wrapOutput,\n version,\n emptySchemaType,\n mini = false,\n}: Props): KubbNode {\n const hasTuple = !!SchemaGenerator.find(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 // In mini mode, filter out modifiers from the main schema parsing\n const baseSchemas = mini ? parserZod.filterMiniModifiers(schemas) : schemas\n\n const output = baseSchemas\n .map((schemaKeyword, index) => {\n const siblings = baseSchemas.filter((_, i) => i !== index)\n\n return parserZod.parse({ schema, parent: undefined, current: schemaKeyword, siblings, name }, { mapper, coercion, wrapOutput, version, mini })\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 (!mini && 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 if (!mini) {\n if (firstSchema && isKeyword(firstSchema, schemaKeywords.ref)) {\n if (version === '3') {\n suffix = '.schema'\n } else {\n suffix = '.unwrap()'\n }\n }\n }\n\n const emptyValue = parserZod.parse(\n {\n schema,\n parent: undefined,\n current: {\n keyword: schemaKeywords[emptySchemaType],\n },\n siblings: [],\n },\n { mapper, coercion, wrapOutput, version, mini },\n )\n\n let baseSchemaOutput =\n [output, keysToOmit?.length ? `${suffix}.omit({ ${keysToOmit.map((key) => `'${key}': true`).join(',')} })` : undefined].filter(Boolean).join('') ||\n emptyValue ||\n ''\n\n // For mini mode, wrap the output with modifiers using the parser function\n if (mini) {\n baseSchemaOutput = parserZod.wrapWithMiniModifiers(baseSchemaOutput, parserZod.extractMiniModifiers(schemas))\n }\n\n const wrappedSchemaOutput = wrapOutput ? wrapOutput({ output: baseSchemaOutput, schema }) || baseSchemaOutput : baseSchemaOutput\n const finalOutput = typeName ? `${wrappedSchemaOutput} as unknown as ${version === '4' ? 'z.ZodType' : '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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"}
@@ -710,12 +710,12 @@ function Zod({ name, typeName, tree, schema, inferTypeName, mapper, coercion, ke
710
710
  return true;
711
711
  });
712
712
  const baseSchemas = mini ? filterMiniModifiers(schemas) : schemas;
713
- const output = baseSchemas.map((schema$1, index) => {
713
+ const output = baseSchemas.map((schemaKeyword, index) => {
714
714
  const siblings = baseSchemas.filter((_, i) => i !== index);
715
715
  return parse({
716
- schema: schema$1,
716
+ schema,
717
717
  parent: void 0,
718
- current: schema$1,
718
+ current: schemaKeyword,
719
719
  siblings,
720
720
  name
721
721
  }, {
@@ -801,4 +801,4 @@ Object.defineProperty(exports, '__toESM', {
801
801
  return __toESM;
802
802
  }
803
803
  });
804
- //# sourceMappingURL=components-CtNn0D8u.cjs.map
804
+ //# sourceMappingURL=components-tTIAJBE2.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components-tTIAJBE2.cjs","names":["File","Type","Const","transformers","checks: string[]","order: string[]","schemaKeywords","transformers","schema","SchemaGenerator","SchemaGenerator","schemaKeywords","parserZod.sort","parserZod.filterMiniModifiers","parserZod.parse","parserZod.wrapWithMiniModifiers","parserZod.extractMiniModifiers","File","Const","transformers","Type"],"sources":["../src/components/Operations.tsx","../src/parser.ts","../src/components/Zod.tsx"],"sourcesContent":["import transformers from '@kubb/core/transformers'\nimport type { HttpMethod, Operation } from '@kubb/oas'\nimport type { SchemaNames } from '@kubb/plugin-oas/hooks'\nimport { Const, File, Type } from '@kubb/react-fabric'\nimport type { KubbNode } from '@kubb/react-fabric/types'\n\ntype Props = {\n name: string\n operations: Array<{ operation: Operation; data: SchemaNames }>\n}\n\nexport function Operations({ name, operations }: Props): KubbNode {\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=\"OperationSchema\" isExportable isIndexable>\n <Type name=\"OperationSchema\" export>{`{\n readonly request: z.ZodTypeAny | undefined;\n readonly parameters: {\n readonly path: z.ZodTypeAny | undefined;\n readonly query: z.ZodTypeAny | undefined;\n readonly header: z.ZodTypeAny | undefined;\n };\n readonly responses: {\n readonly [status: number]: z.ZodTypeAny;\n readonly default: z.ZodTypeAny;\n };\n readonly errors: {\n readonly [status: number]: z.ZodTypeAny;\n };\n}`}</Type>\n </File.Source>\n <File.Source name=\"OperationsMap\" isExportable isIndexable>\n <Type name=\"OperationsMap\" export>\n {'Record<string, OperationSchema>'}\n </Type>\n </File.Source>\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'\n\nimport type { Schema, SchemaMapper } from '@kubb/plugin-oas'\nimport { createParser, findSchemaKeyword, isKeyword, SchemaGenerator, type SchemaKeywordMapper, schemaKeywords } from '@kubb/plugin-oas'\n\n//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)\n// also include shouldCoerce\n\n/**\n * Helper to build string/array length constraint checks for Zod Mini mode\n */\nfunction buildLengthChecks(min?: number, max?: number): string[] {\n const checks: string[] = []\n if (min !== undefined) checks.push(`z.minLength(${min})`)\n if (max !== undefined) checks.push(`z.maxLength(${max})`)\n return checks\n}\n\nconst zodKeywordMapper = {\n any: () => 'z.any()',\n unknown: () => 'z.unknown()',\n void: () => 'z.void()',\n number: (coercion?: boolean, min?: number, max?: number, exclusiveMinimum?: number, exclusiveMaximum?: number, mini?: boolean) => {\n if (mini) {\n const checks: string[] = []\n if (min !== undefined) checks.push(`z.minimum(${min})`)\n if (max !== undefined) checks.push(`z.maximum(${max})`)\n if (exclusiveMinimum !== undefined) checks.push(`z.minimum(${exclusiveMinimum}, { exclusive: true })`)\n if (exclusiveMaximum !== undefined) checks.push(`z.maximum(${exclusiveMaximum}, { exclusive: true })`)\n if (checks.length > 0) {\n return `z.number().check(${checks.join(', ')})`\n }\n return 'z.number()'\n }\n return [\n coercion ? 'z.coerce.number()' : 'z.number()',\n min !== undefined ? `.min(${min})` : undefined,\n max !== undefined ? `.max(${max})` : undefined,\n exclusiveMinimum !== undefined ? `.gt(${exclusiveMinimum})` : undefined,\n exclusiveMaximum !== undefined ? `.lt(${exclusiveMaximum})` : undefined,\n ]\n .filter(Boolean)\n .join('')\n },\n integer: (coercion?: boolean, min?: number, max?: number, version: '3' | '4' = '3', exclusiveMinimum?: number, exclusiveMaximum?: number, mini?: boolean) => {\n if (mini) {\n const checks: string[] = []\n if (min !== undefined) checks.push(`z.minimum(${min})`)\n if (max !== undefined) checks.push(`z.maximum(${max})`)\n if (exclusiveMinimum !== undefined) checks.push(`z.minimum(${exclusiveMinimum}, { exclusive: true })`)\n if (exclusiveMaximum !== undefined) checks.push(`z.maximum(${exclusiveMaximum}, { exclusive: true })`)\n if (checks.length > 0) {\n return `z.int().check(${checks.join(', ')})`\n }\n return 'z.int()'\n }\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 exclusiveMinimum !== undefined ? `.gt(${exclusiveMinimum})` : undefined,\n exclusiveMaximum !== undefined ? `.lt(${exclusiveMaximum})` : 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, mini?: boolean) => {\n if (mini) {\n const checks = buildLengthChecks(min, max)\n if (checks.length > 0) {\n return `z.string().check(${checks.join(', ')})`\n }\n return 'z.string()'\n }\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: (value?: string) => {\n if (value) {\n return `z.nullable(${value})`\n }\n return '.nullable()'\n },\n null: () => 'z.null()',\n nullish: (value?: string) => {\n if (value) {\n return `z.nullish(${value})`\n }\n return '.nullish()'\n },\n array: (items: string[] = [], min?: number, max?: number, unique?: boolean, mini?: boolean) => {\n if (mini) {\n const checks = buildLengthChecks(min, max)\n if (unique) checks.push(`z.refine(items => new Set(items).size === items.length, { message: \"Array entries must be unique\" })`)\n if (checks.length > 0) {\n return `z.array(${items?.join('')}).check(${checks.join(', ')})`\n }\n return `z.array(${items?.join('')})`\n }\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', mini?: boolean) => {\n // Zod Mini doesn't support .datetime() method, use plain string\n if (mini) {\n return 'z.string()'\n }\n\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', min?: number, max?: number, mini?: boolean) => {\n if (mini) {\n const checks = buildLengthChecks(min, max)\n if (checks.length > 0) {\n return `z.uuid().check(${checks.join(', ')})`\n }\n return 'z.uuid()'\n }\n return [\n coercion ? (version === '4' ? 'z.uuid()' : 'z.coerce.string().uuid()') : version === '4' ? 'z.uuid()' : 'z.string().uuid()',\n min !== undefined ? `.min(${min})` : undefined,\n max !== undefined ? `.max(${max})` : undefined,\n ]\n .filter(Boolean)\n .join('')\n },\n url: (coercion?: boolean, version: '3' | '4' = '3', min?: number, max?: number, mini?: boolean) => {\n if (mini) {\n const checks = buildLengthChecks(min, max)\n if (checks.length > 0) {\n return `z.url().check(${checks.join(', ')})`\n }\n return 'z.url()'\n }\n return [\n coercion ? (version === '4' ? 'z.url()' : 'z.coerce.string().url()') : version === '4' ? 'z.url()' : 'z.string().url()',\n min !== undefined ? `.min(${min})` : undefined,\n max !== undefined ? `.max(${max})` : undefined,\n ]\n .filter(Boolean)\n .join('')\n },\n default: (value?: string | number | boolean | object, innerSchema?: string, mini?: boolean) => {\n if (mini && innerSchema) {\n const defaultValue = typeof value === 'object' ? '{}' : (value ?? '')\n return `z._default(${innerSchema}, ${defaultValue})`\n }\n\n if (typeof value === 'object') {\n return '.default({})'\n }\n\n if (value === undefined) {\n return '.default()'\n }\n\n if (typeof value === 'string' && !value) {\n return `.default('')`\n }\n\n return `.default(${value ?? ''})`\n },\n and: (items: string[] = [], mini?: boolean) => {\n // zod/mini doesn't support .and() method, so we can't use intersection types\n // In mini mode, we try to extract and append .check() calls instead\n if (mini && items.length > 0) {\n // Try to extract check calls from additional items\n const checks: string[] = []\n for (const item of items) {\n // Extract .check(...) from patterns like \"z.string().check(...)\"\n // Need to handle nested parentheses properly\n const checkStart = item.indexOf('.check(')\n if (checkStart !== -1) {\n // Find the matching closing parenthesis\n let depth = 0\n let i = checkStart + 7 // length of '.check('\n let checkContent = ''\n while (i < item.length) {\n const char = item[i]\n if (char === '(') depth++\n else if (char === ')') {\n if (depth === 0) break\n depth--\n }\n checkContent += char\n i++\n }\n if (checkContent) {\n checks.push(checkContent)\n }\n }\n }\n\n if (checks.length > 0) {\n // Append checks to the base schema\n return `.check(${checks.join(', ')})`\n }\n\n // If we can't extract checks, just use the first schema (limitation)\n return ''\n }\n return items?.map((item) => `.and(${item})`).join('')\n },\n describe: (value = '', innerSchema?: string, mini?: boolean) => {\n if (mini) {\n return undefined\n }\n\n if (innerSchema) {\n return `z.describe(${innerSchema}, ${value})`\n }\n return `.describe(${value})`\n },\n max: undefined,\n min: undefined,\n optional: (value?: string) => {\n if (value) {\n return `z.optional(${value})`\n }\n return '.optional()'\n },\n matches: (value = '', coercion?: boolean, mini?: boolean, min?: number, max?: number) => {\n if (mini) {\n const checks = buildLengthChecks(min, max)\n checks.push(`z.regex(${value})`)\n return `z.string().check(${checks.join(', ')})`\n }\n return [\n coercion ? 'z.coerce.string()' : 'z.string()',\n min !== undefined ? `.min(${min})` : undefined,\n max !== undefined ? `.max(${max})` : undefined,\n `.regex(${value})`,\n ]\n .filter(Boolean)\n .join('')\n },\n email: (coercion?: boolean, version: '3' | '4' = '3', min?: number, max?: number, mini?: boolean) => {\n if (mini) {\n const checks = buildLengthChecks(min, max)\n if (checks.length > 0) {\n return `z.email().check(${checks.join(', ')})`\n }\n return 'z.email()'\n }\n return [\n coercion ? (version === '4' ? 'z.email()' : 'z.coerce.string().email()') : version === '4' ? 'z.email()' : 'z.string().email()',\n min !== undefined ? `.min(${min})` : undefined,\n max !== undefined ? `.max(${max})` : undefined,\n ]\n .filter(Boolean)\n .join('')\n },\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 `z.lazy(() => ${value})`\n },\n blob: () => 'z.instanceof(File)',\n deprecated: undefined,\n example: undefined,\n schema: undefined,\n catchall: (value?: string, mini?: boolean) => {\n // Zod Mini doesn't support .catchall() method\n if (mini) {\n return undefined\n }\n return value ? `.catchall(${value})` : undefined\n },\n name: undefined,\n exclusiveMinimum: undefined,\n exclusiveMaximum: 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\ntype MiniModifiers = {\n hasOptional?: boolean\n hasNullable?: boolean\n hasNullish?: boolean\n defaultValue?: string | number | true | object\n}\n\n/**\n * Keywords that represent modifiers for mini mode\n * These are separated from the base schema and wrapped around it\n * Note: describe is included to filter it out, but won't be wrapped (Zod Mini doesn't support describe)\n */\nexport const miniModifierKeywords = [schemaKeywords.optional, schemaKeywords.nullable, schemaKeywords.nullish, schemaKeywords.default, schemaKeywords.describe]\n\n/**\n * Extracts mini mode modifiers from a schemas array\n * This can be reused by other parsers (e.g., valibot) that need similar functionality\n * Note: describe is not included as Zod Mini doesn't support it\n */\nexport function extractMiniModifiers(schemas: Schema[]): MiniModifiers {\n const defaultSchema = schemas.find((item) => isKeyword(item, schemaKeywords.default)) as { keyword: string; args: unknown } | undefined\n\n return {\n hasOptional: schemas.some((item) => isKeyword(item, schemaKeywords.optional)),\n hasNullable: schemas.some((item) => isKeyword(item, schemaKeywords.nullable)),\n hasNullish: schemas.some((item) => isKeyword(item, schemaKeywords.nullish)),\n defaultValue: defaultSchema?.args as string | number | true | object | undefined,\n }\n}\n\n/**\n * Filters out modifier keywords from schemas for mini mode base schema parsing\n * This can be reused by other parsers (e.g., valibot) that need similar functionality\n */\nexport function filterMiniModifiers(schemas: Schema[]): Schema[] {\n return schemas.filter((item) => !miniModifierKeywords.some((keyword) => isKeyword(item, keyword)))\n}\n\n/**\n * Wraps an output string with Zod Mini functional modifiers\n * Order: default (innermost) -> nullable -> optional (outermost)\n * OR: default -> nullish\n * Note: describe is not supported in Zod Mini and is skipped\n */\nexport function wrapWithMiniModifiers(output: string, modifiers: MiniModifiers): string {\n let result = output\n\n // Apply default first (innermost wrapper)\n if (modifiers.defaultValue !== undefined) {\n result = zodKeywordMapper.default(modifiers.defaultValue, result, true)!\n }\n\n // Apply nullish, nullable, or optional (outer wrappers for optionality)\n if (modifiers.hasNullish) {\n result = zodKeywordMapper.nullish(result)!\n } else {\n if (modifiers.hasNullable) {\n result = zodKeywordMapper.nullable(result)!\n }\n if (modifiers.hasOptional) {\n result = zodKeywordMapper.optional(result)!\n }\n }\n\n return result\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 mapper?: Record<string, string>\n coercion?: boolean | { dates?: boolean; strings?: boolean; numbers?: boolean }\n wrapOutput?: (opts: { output: string; schema: any }) => string | undefined\n version: '3' | '4'\n skipLazyForRefs?: boolean\n mini?: boolean\n}\n\n// Create the parser using createParser\nexport const parse = createParser<string, ParserOptions>({\n mapper: zodKeywordMapper,\n handlers: {\n union(tree, options) {\n const { current, schema, parent, name, siblings } = tree\n if (!isKeyword(current, schemaKeywords.union)) return undefined\n\n // zod union type needs at least 2 items\n if (Array.isArray(current.args) && current.args.length === 1) {\n return this.parse({ schema, parent, 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((it, _index, siblings) => this.parse({ schema, parent: current, name, current: it, siblings }, options))\n .filter(Boolean),\n )\n },\n and(tree, options) {\n const { current, schema, name } = tree\n if (!isKeyword(current, schemaKeywords.and)) return undefined\n\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((it: Schema, _index, siblings) => this.parse({ schema, parent: current, name, current: it, siblings }, options))\n .filter(Boolean)\n\n return `${items.slice(0, 1)}${zodKeywordMapper.and(items.slice(1), options.mini)}`\n },\n array(tree, options) {\n const { current, schema, name } = tree\n if (!isKeyword(current, schemaKeywords.array)) return undefined\n\n return zodKeywordMapper.array(\n sort(current.args.items)\n .map((it, _index, siblings) => {\n return this.parse({ schema, parent: current, name, current: it, siblings }, options)\n })\n .filter(Boolean),\n current.args.min,\n current.args.max,\n current.args.unique,\n options.mini,\n )\n },\n enum(tree, options) {\n const { current, schema, name } = tree\n if (!isKeyword(current, schemaKeywords.enum)) return undefined\n\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 this.parse({ schema, parent: current, 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((it, _index, siblings) => {\n return this.parse({ schema, parent: current, name, current: it, 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 ref(tree, options) {\n const { current } = tree\n if (!isKeyword(current, schemaKeywords.ref)) return undefined\n\n // Skip z.lazy wrapper if skipLazyForRefs is true (e.g., inside v4 getters)\n if (options.skipLazyForRefs) {\n return current.args?.name\n }\n return zodKeywordMapper.ref(current.args?.name)\n },\n object(tree, options) {\n const { current, schema, name } = tree\n if (!isKeyword(current, schemaKeywords.object)) return undefined\n\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(([propertyName, schemas]) => {\n const nameSchema = schemas.find((it) => it.keyword === schemaKeywords.name) as SchemaKeywordMapper['name']\n const isNullable = schemas.some((it) => isKeyword(it, schemaKeywords.nullable))\n const isNullish = schemas.some((it) => isKeyword(it, schemaKeywords.nullish))\n const isOptional = schemas.some((it) => isKeyword(it, schemaKeywords.optional))\n const hasRef = !!SchemaGenerator.find(schemas, schemaKeywords.ref)\n\n const mappedName = nameSchema?.args || propertyName\n\n // custom mapper(pluginOptions)\n if (options.mapper?.[mappedName]) {\n return `\"${propertyName}\": ${options.mapper?.[mappedName]}`\n }\n\n const baseSchemaOutput = sort(schemas)\n .filter((schema) => {\n return !isKeyword(schema, schemaKeywords.optional) && !isKeyword(schema, schemaKeywords.nullable) && !isKeyword(schema, schemaKeywords.nullish)\n })\n .map((it) => {\n // For v4 with refs, skip z.lazy wrapper since the getter provides lazy evaluation\n const skipLazyForRefs = options.version === '4' && hasRef\n return this.parse({ schema, parent: current, name, current: it, siblings: schemas }, { ...options, skipLazyForRefs })\n })\n .filter(Boolean)\n .join('')\n\n const objectValue = options.wrapOutput\n ? options.wrapOutput({ output: baseSchemaOutput, schema: schema?.properties?.[propertyName] }) || baseSchemaOutput\n : baseSchemaOutput\n\n if (options.version === '4' && hasRef) {\n // In mini mode, use functional wrappers instead of chainable methods\n if (options.mini) {\n // both optional and nullable\n if (isNullish) {\n return `get \"${propertyName}\"(){\n return ${zodKeywordMapper.nullish(objectValue)}\n }`\n }\n\n // undefined\n if (isOptional) {\n return `get \"${propertyName}\"(){\n return ${zodKeywordMapper.optional(objectValue)}\n }`\n }\n\n // null\n if (isNullable) {\n return `get \"${propertyName}\"(){\n return ${zodKeywordMapper.nullable(objectValue)}\n }`\n }\n\n return `get \"${propertyName}\"(){\n return ${objectValue}\n }`\n }\n\n // Non-mini mode uses chainable methods\n // both optional and nullable\n if (isNullish) {\n return `get \"${propertyName}\"(){\n return ${objectValue}${zodKeywordMapper.nullish()}\n }`\n }\n\n // undefined\n if (isOptional) {\n return `get \"${propertyName}\"(){\n return ${objectValue}${zodKeywordMapper.optional()}\n }`\n }\n\n // null\n if (isNullable) {\n return `get \"${propertyName}\"(){\n return ${objectValue}${zodKeywordMapper.nullable()}\n }`\n }\n\n return `get \"${propertyName}\"(){\n return ${objectValue}\n }`\n }\n\n // both optional and nullable\n if (isNullish) {\n return `\"${propertyName}\": ${objectValue}${zodKeywordMapper.nullish()}`\n }\n\n // undefined\n if (isOptional) {\n return `\"${propertyName}\": ${zodKeywordMapper.optional(objectValue)}`\n }\n\n // null\n if (isNullable) {\n return `\"${propertyName}\": ${zodKeywordMapper.nullable(objectValue)}`\n }\n\n return `\"${propertyName}\": ${objectValue}`\n })\n .join(',\\n')\n\n const additionalProperties = current.args?.additionalProperties?.length\n ? current.args.additionalProperties\n .map((it, _index, siblings) => this.parse({ schema, parent: current, name, current: it, 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, options.mini) : undefined,\n ].filter(Boolean)\n\n return text.join('')\n },\n tuple(tree, options) {\n const { current, schema, name } = tree\n if (!isKeyword(current, schemaKeywords.tuple)) return undefined\n\n return zodKeywordMapper.tuple(\n current.args.items.map((it, _index, siblings) => this.parse({ schema, parent: current, name, current: it, siblings }, options)).filter(Boolean),\n )\n },\n const(tree, _options) {\n const { current } = tree\n if (!isKeyword(current, schemaKeywords.const)) return undefined\n\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(typeof current.args.value === 'boolean' ? current.args.value : undefined)\n }\n return zodKeywordMapper.const(transformers.stringify(current.args.value))\n },\n matches(tree, options) {\n const { current, siblings } = tree\n if (!isKeyword(current, schemaKeywords.matches)) return undefined\n\n // Early exit: if siblings contain both matches and ref → skip matches entirely\n const hasRef = siblings.some((it) => isKeyword(it, schemaKeywords.ref))\n if (hasRef) {\n return undefined // strip matches\n }\n\n const minSchema = findSchemaKeyword(siblings, 'min')\n const maxSchema = findSchemaKeyword(siblings, 'max')\n\n if (current.args) {\n return zodKeywordMapper.matches(\n transformers.toRegExpString(current.args, null),\n shouldCoerce(options.coercion, 'strings'),\n options.mini,\n minSchema?.args,\n maxSchema?.args,\n )\n }\n return undefined\n },\n default(tree, options) {\n const { current } = tree\n if (!isKeyword(current, schemaKeywords.default)) return undefined\n\n // In mini mode, default is handled by wrapWithMiniModifiers\n if (options.mini) {\n return undefined\n }\n if (current.args !== undefined) {\n return zodKeywordMapper.default(current.args)\n }\n // When args is undefined, call the mapper without arguments\n return zodKeywordMapper.default()\n },\n describe(tree, options) {\n const { current } = tree\n if (!isKeyword(current, schemaKeywords.describe)) return undefined\n\n if (current.args) {\n return zodKeywordMapper.describe(transformers.stringify(current.args.toString()), undefined, options.mini)\n }\n return undefined\n },\n string(tree, options) {\n const { current, siblings } = tree\n if (!isKeyword(current, schemaKeywords.string)) return undefined\n\n const minSchema = findSchemaKeyword(siblings, 'min')\n const maxSchema = findSchemaKeyword(siblings, 'max')\n\n return zodKeywordMapper.string(shouldCoerce(options.coercion, 'strings'), minSchema?.args, maxSchema?.args, options.mini)\n },\n uuid(tree, options) {\n const { current, siblings } = tree\n if (!isKeyword(current, schemaKeywords.uuid)) return undefined\n\n const minSchema = findSchemaKeyword(siblings, 'min')\n const maxSchema = findSchemaKeyword(siblings, 'max')\n\n return zodKeywordMapper.uuid(shouldCoerce(options.coercion, 'strings'), options.version, minSchema?.args, maxSchema?.args, options.mini)\n },\n email(tree, options) {\n const { current, siblings } = tree\n if (!isKeyword(current, schemaKeywords.email)) return undefined\n\n const minSchema = findSchemaKeyword(siblings, 'min')\n const maxSchema = findSchemaKeyword(siblings, 'max')\n\n return zodKeywordMapper.email(shouldCoerce(options.coercion, 'strings'), options.version, minSchema?.args, maxSchema?.args, options.mini)\n },\n url(tree, options) {\n const { current, siblings } = tree\n if (!isKeyword(current, schemaKeywords.url)) return undefined\n\n const minSchema = findSchemaKeyword(siblings, 'min')\n const maxSchema = findSchemaKeyword(siblings, 'max')\n\n return zodKeywordMapper.url(shouldCoerce(options.coercion, 'strings'), options.version, minSchema?.args, maxSchema?.args, options.mini)\n },\n number(tree, options) {\n const { current, siblings } = tree\n if (!isKeyword(current, schemaKeywords.number)) return undefined\n\n const minSchema = findSchemaKeyword(siblings, 'min')\n const maxSchema = findSchemaKeyword(siblings, 'max')\n const exclusiveMinimumSchema = findSchemaKeyword(siblings, 'exclusiveMinimum')\n const exclusiveMaximumSchema = findSchemaKeyword(siblings, 'exclusiveMaximum')\n\n return zodKeywordMapper.number(\n shouldCoerce(options.coercion, 'numbers'),\n minSchema?.args,\n maxSchema?.args,\n exclusiveMinimumSchema?.args,\n exclusiveMaximumSchema?.args,\n options.mini,\n )\n },\n integer(tree, options) {\n const { current, siblings } = tree\n if (!isKeyword(current, schemaKeywords.integer)) return undefined\n\n const minSchema = findSchemaKeyword(siblings, 'min')\n const maxSchema = findSchemaKeyword(siblings, 'max')\n const exclusiveMinimumSchema = findSchemaKeyword(siblings, 'exclusiveMinimum')\n const exclusiveMaximumSchema = findSchemaKeyword(siblings, 'exclusiveMaximum')\n\n return zodKeywordMapper.integer(\n shouldCoerce(options.coercion, 'numbers'),\n minSchema?.args,\n maxSchema?.args,\n options.version,\n exclusiveMinimumSchema?.args,\n exclusiveMaximumSchema?.args,\n options.mini,\n )\n },\n datetime(tree, options) {\n const { current } = tree\n if (!isKeyword(current, schemaKeywords.datetime)) return undefined\n\n return zodKeywordMapper.datetime(current.args.offset, current.args.local, options.version, options.mini)\n },\n date(tree, options) {\n const { current } = tree\n if (!isKeyword(current, schemaKeywords.date)) return undefined\n\n return zodKeywordMapper.date(current.args.type, shouldCoerce(options.coercion, 'dates'), options.version)\n },\n time(tree, options) {\n const { current } = tree\n if (!isKeyword(current, schemaKeywords.time)) return undefined\n\n return zodKeywordMapper.time(current.args.type, shouldCoerce(options.coercion, 'dates'), options.version)\n },\n },\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-fabric'\nimport type { KubbNode } from '@kubb/react-fabric/types'\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 schema: 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 mini?: boolean\n}\n\nexport function Zod({\n name,\n typeName,\n tree,\n schema,\n inferTypeName,\n mapper,\n coercion,\n keysToOmit,\n description,\n wrapOutput,\n version,\n emptySchemaType,\n mini = false,\n}: Props): KubbNode {\n const hasTuple = !!SchemaGenerator.find(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 // In mini mode, filter out modifiers from the main schema parsing\n const baseSchemas = mini ? parserZod.filterMiniModifiers(schemas) : schemas\n\n const output = baseSchemas\n .map((schemaKeyword, index) => {\n const siblings = baseSchemas.filter((_, i) => i !== index)\n\n return parserZod.parse({ schema, parent: undefined, current: schemaKeyword, siblings, name }, { mapper, coercion, wrapOutput, version, mini })\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 (!mini && 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 if (!mini) {\n if (firstSchema && isKeyword(firstSchema, schemaKeywords.ref)) {\n if (version === '3') {\n suffix = '.schema'\n } else {\n suffix = '.unwrap()'\n }\n }\n }\n\n const emptyValue = parserZod.parse(\n {\n schema,\n parent: undefined,\n current: {\n keyword: schemaKeywords[emptySchemaType],\n },\n siblings: [],\n },\n { mapper, coercion, wrapOutput, version, mini },\n )\n\n let baseSchemaOutput =\n [output, keysToOmit?.length ? `${suffix}.omit({ ${keysToOmit.map((key) => `'${key}': true`).join(',')} })` : undefined].filter(Boolean).join('') ||\n emptyValue ||\n ''\n\n // For mini mode, wrap the output with modifiers using the parser function\n if (mini) {\n baseSchemaOutput = parserZod.wrapWithMiniModifiers(baseSchemaOutput, parserZod.extractMiniModifiers(schemas))\n }\n\n const wrappedSchemaOutput = wrapOutput ? wrapOutput({ output: baseSchemaOutput, schema }) || baseSchemaOutput : baseSchemaOutput\n const finalOutput = typeName ? `${wrappedSchemaOutput} as unknown as ${version === '4' ? 'z.ZodType' : '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,4 +1,4 @@
1
- const require_components = require('./components-CtNn0D8u.cjs');
1
+ const require_components = require('./components-tTIAJBE2.cjs');
2
2
 
3
3
  exports.Operations = require_components.Operations;
4
4
  exports.Zod = require_components.Zod;
@@ -1,3 +1,3 @@
1
- import { n as Operations, t as Zod } from "./components-me856BK6.js";
1
+ import { n as Operations, t as Zod } from "./components-By0pxFjL.js";
2
2
 
3
3
  export { Operations, Zod };
@@ -1,4 +1,4 @@
1
- import { n as Operations, t as Zod } from "./components-me856BK6.js";
1
+ import { n as Operations, t as Zod } from "./components-By0pxFjL.js";
2
2
  import path from "node:path";
3
3
  import { SchemaGenerator, schemaKeywords } from "@kubb/plugin-oas";
4
4
  import { pluginTsName } from "@kubb/plugin-ts";
@@ -264,4 +264,4 @@ const zodGenerator = createReactGenerator({
264
264
 
265
265
  //#endregion
266
266
  export { operationsGenerator as n, zodGenerator as t };
267
- //# sourceMappingURL=generators-BMy4WNwE.js.map
267
+ //# sourceMappingURL=generators-C3urwQCK.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generators-BMy4WNwE.js","names":["options"],"sources":["../src/generators/operationsGenerator.tsx","../src/generators/zodGenerator.tsx"],"sourcesContent":["import { usePluginManager } from '@kubb/core/hooks'\nimport { createReactGenerator } from '@kubb/plugin-oas/generators'\nimport { useOas, useOperationManager } from '@kubb/plugin-oas/hooks'\nimport { getBanner, getFooter } from '@kubb/plugin-oas/utils'\nimport { File } from '@kubb/react-fabric'\nimport { Operations } from '../components/Operations.tsx'\nimport type { PluginZod } from '../types'\n\nexport const operationsGenerator = createReactGenerator<PluginZod>({\n name: 'operations',\n Operations({ operations, generator, plugin }) {\n const {\n key: pluginKey,\n options: { output, importPath },\n } = plugin\n const pluginManager = usePluginManager()\n\n const oas = useOas()\n const { getFile, groupSchemasByName } = useOperationManager(generator)\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 <File.Import isTypeOnly name={['z']} path={importPath} />\n {imports}\n <Operations name={name} operations={transformedOperations} />\n </File>\n )\n },\n})\n","import path from 'node:path'\nimport { useMode, usePluginManager } from '@kubb/core/hooks'\nimport { type OperationSchema as OperationSchemaType, SchemaGenerator, schemaKeywords } from '@kubb/plugin-oas'\nimport { createReactGenerator } from '@kubb/plugin-oas/generators'\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, Fragment } from '@kubb/react-fabric'\nimport { Zod } from '../components'\nimport type { PluginZod } from '../types'\n\nexport const zodGenerator = createReactGenerator<PluginZod>({\n name: 'zod',\n Operation({ config, operation, generator, plugin }) {\n const {\n options,\n options: { coercion: globalCoercion, inferred, typed, mapper, wrapOutput, version, mini },\n } = plugin\n\n const mode = useMode()\n const pluginManager = usePluginManager()\n\n const oas = useOas()\n const { getSchemas, getFile, getGroup } = useOperationManager(generator)\n const schemaManager = useSchemaManager()\n\n const file = getFile(operation)\n const schemas = getSchemas(operation)\n const schemaGenerator = new SchemaGenerator(options, {\n fabric: generator.context.fabric,\n oas,\n plugin,\n pluginManager,\n events: generator.context.events,\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) => {\n const hasProperties = Object.keys(schemaObject || {}).length > 0\n const hasDefaults = Object.values(schemaObject.properties || {}).some((prop) => prop && Object.hasOwn(prop, 'default'))\n\n const required = Array.isArray(schemaObject?.required) ? schemaObject.required.length > 0 : !!schemaObject?.required\n const optional = !required && !hasDefaults && hasProperties && name.includes('Params')\n\n if (!optional && Array.isArray(schemaObject.required) && !schemaObject.required.length) {\n schemaObject.required = Object.entries(schemaObject.properties || {})\n .filter(([_key, value]) => value && Object.hasOwn(value, 'default'))\n .map(([key]) => key)\n }\n\n const tree = [\n ...schemaGenerator.parse({ schema: schemaObject, name, parentName: null }),\n optional ? { keyword: schemaKeywords.optional } : undefined,\n ].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 <Fragment>\n {typed && <File.Import isTypeOnly root={file.path} path={type.file.path} name={[type.name]} />}\n {typed && version === '3' && <File.Import name={['ToZod']} root={file.path} path={path.resolve(config.root, config.output.path, '.kubb/ToZod.ts')} />}\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 schema={schemaObject}\n mapper={mapper}\n coercion={coercion}\n keysToOmit={keysToOmit}\n wrapOutput={wrapOutput}\n version={plugin.options.version}\n emptySchemaType={plugin.options.emptySchemaType}\n mini={mini}\n />\n </Fragment>\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({ config, schema, plugin }) {\n const { getName, getFile, getImports } = useSchemaManager()\n const {\n options: { output, emptySchemaType, coercion, inferred, typed, mapper, importPath, wrapOutput, version, mini },\n } = plugin\n const pluginManager = usePluginManager()\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 && version === '3' && (\n <File.Import name={['ToZod']} root={zod.file.path} path={path.resolve(config.root, config.output.path, '.kubb/ToZod.ts')} />\n )}\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 schema={schema.value}\n mapper={mapper}\n coercion={coercion}\n wrapOutput={wrapOutput}\n version={version}\n emptySchemaType={emptySchemaType}\n mini={mini}\n />\n </File>\n )\n },\n})\n"],"mappings":"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"}
1
+ {"version":3,"file":"generators-C3urwQCK.js","names":["options"],"sources":["../src/generators/operationsGenerator.tsx","../src/generators/zodGenerator.tsx"],"sourcesContent":["import { usePluginManager } from '@kubb/core/hooks'\nimport { createReactGenerator } from '@kubb/plugin-oas/generators'\nimport { useOas, useOperationManager } from '@kubb/plugin-oas/hooks'\nimport { getBanner, getFooter } from '@kubb/plugin-oas/utils'\nimport { File } from '@kubb/react-fabric'\nimport { Operations } from '../components/Operations.tsx'\nimport type { PluginZod } from '../types'\n\nexport const operationsGenerator = createReactGenerator<PluginZod>({\n name: 'operations',\n Operations({ operations, generator, plugin }) {\n const {\n key: pluginKey,\n options: { output, importPath },\n } = plugin\n const pluginManager = usePluginManager()\n\n const oas = useOas()\n const { getFile, groupSchemasByName } = useOperationManager(generator)\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 <File.Import isTypeOnly name={['z']} path={importPath} />\n {imports}\n <Operations name={name} operations={transformedOperations} />\n </File>\n )\n },\n})\n","import path from 'node:path'\nimport { useMode, usePluginManager } from '@kubb/core/hooks'\nimport { type OperationSchema as OperationSchemaType, SchemaGenerator, schemaKeywords } from '@kubb/plugin-oas'\nimport { createReactGenerator } from '@kubb/plugin-oas/generators'\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, Fragment } from '@kubb/react-fabric'\nimport { Zod } from '../components'\nimport type { PluginZod } from '../types'\n\nexport const zodGenerator = createReactGenerator<PluginZod>({\n name: 'zod',\n Operation({ config, operation, generator, plugin }) {\n const {\n options,\n options: { coercion: globalCoercion, inferred, typed, mapper, wrapOutput, version, mini },\n } = plugin\n\n const mode = useMode()\n const pluginManager = usePluginManager()\n\n const oas = useOas()\n const { getSchemas, getFile, getGroup } = useOperationManager(generator)\n const schemaManager = useSchemaManager()\n\n const file = getFile(operation)\n const schemas = getSchemas(operation)\n const schemaGenerator = new SchemaGenerator(options, {\n fabric: generator.context.fabric,\n oas,\n plugin,\n pluginManager,\n events: generator.context.events,\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) => {\n const hasProperties = Object.keys(schemaObject || {}).length > 0\n const hasDefaults = Object.values(schemaObject.properties || {}).some((prop) => prop && Object.hasOwn(prop, 'default'))\n\n const required = Array.isArray(schemaObject?.required) ? schemaObject.required.length > 0 : !!schemaObject?.required\n const optional = !required && !hasDefaults && hasProperties && name.includes('Params')\n\n if (!optional && Array.isArray(schemaObject.required) && !schemaObject.required.length) {\n schemaObject.required = Object.entries(schemaObject.properties || {})\n .filter(([_key, value]) => value && Object.hasOwn(value, 'default'))\n .map(([key]) => key)\n }\n\n const tree = [\n ...schemaGenerator.parse({ schema: schemaObject, name, parentName: null }),\n optional ? { keyword: schemaKeywords.optional } : undefined,\n ].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 <Fragment>\n {typed && <File.Import isTypeOnly root={file.path} path={type.file.path} name={[type.name]} />}\n {typed && version === '3' && <File.Import name={['ToZod']} root={file.path} path={path.resolve(config.root, config.output.path, '.kubb/ToZod.ts')} />}\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 schema={schemaObject}\n mapper={mapper}\n coercion={coercion}\n keysToOmit={keysToOmit}\n wrapOutput={wrapOutput}\n version={plugin.options.version}\n emptySchemaType={plugin.options.emptySchemaType}\n mini={mini}\n />\n </Fragment>\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({ config, schema, plugin }) {\n const { getName, getFile, getImports } = useSchemaManager()\n const {\n options: { output, emptySchemaType, coercion, inferred, typed, mapper, importPath, wrapOutput, version, mini },\n } = plugin\n const pluginManager = usePluginManager()\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 && version === '3' && (\n <File.Import name={['ToZod']} root={zod.file.path} path={path.resolve(config.root, config.output.path, '.kubb/ToZod.ts')} />\n )}\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 schema={schema.value}\n mapper={mapper}\n coercion={coercion}\n wrapOutput={wrapOutput}\n version={version}\n emptySchemaType={emptySchemaType}\n mini={mini}\n />\n </File>\n )\n },\n})\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- const require_components = require('./components-CtNn0D8u.cjs');
1
+ const require_components = require('./components-tTIAJBE2.cjs');
2
2
  let node_path = require("node:path");
3
3
  node_path = require_components.__toESM(node_path);
4
4
  let _kubb_plugin_oas = require("@kubb/plugin-oas");
@@ -276,4 +276,4 @@ Object.defineProperty(exports, 'zodGenerator', {
276
276
  return zodGenerator;
277
277
  }
278
278
  });
279
- //# sourceMappingURL=generators-ETnOgamg.cjs.map
279
+ //# sourceMappingURL=generators-CV7dvZaD.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"generators-ETnOgamg.cjs","names":["File","Operations","SchemaGenerator","options","schemaKeywords","pluginTsName","Fragment","File","path","Zod"],"sources":["../src/generators/operationsGenerator.tsx","../src/generators/zodGenerator.tsx"],"sourcesContent":["import { usePluginManager } from '@kubb/core/hooks'\nimport { createReactGenerator } from '@kubb/plugin-oas/generators'\nimport { useOas, useOperationManager } from '@kubb/plugin-oas/hooks'\nimport { getBanner, getFooter } from '@kubb/plugin-oas/utils'\nimport { File } from '@kubb/react-fabric'\nimport { Operations } from '../components/Operations.tsx'\nimport type { PluginZod } from '../types'\n\nexport const operationsGenerator = createReactGenerator<PluginZod>({\n name: 'operations',\n Operations({ operations, generator, plugin }) {\n const {\n key: pluginKey,\n options: { output, importPath },\n } = plugin\n const pluginManager = usePluginManager()\n\n const oas = useOas()\n const { getFile, groupSchemasByName } = useOperationManager(generator)\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 <File.Import isTypeOnly name={['z']} path={importPath} />\n {imports}\n <Operations name={name} operations={transformedOperations} />\n </File>\n )\n },\n})\n","import path from 'node:path'\nimport { useMode, usePluginManager } from '@kubb/core/hooks'\nimport { type OperationSchema as OperationSchemaType, SchemaGenerator, schemaKeywords } from '@kubb/plugin-oas'\nimport { createReactGenerator } from '@kubb/plugin-oas/generators'\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, Fragment } from '@kubb/react-fabric'\nimport { Zod } from '../components'\nimport type { PluginZod } from '../types'\n\nexport const zodGenerator = createReactGenerator<PluginZod>({\n name: 'zod',\n Operation({ config, operation, generator, plugin }) {\n const {\n options,\n options: { coercion: globalCoercion, inferred, typed, mapper, wrapOutput, version, mini },\n } = plugin\n\n const mode = useMode()\n const pluginManager = usePluginManager()\n\n const oas = useOas()\n const { getSchemas, getFile, getGroup } = useOperationManager(generator)\n const schemaManager = useSchemaManager()\n\n const file = getFile(operation)\n const schemas = getSchemas(operation)\n const schemaGenerator = new SchemaGenerator(options, {\n fabric: generator.context.fabric,\n oas,\n plugin,\n pluginManager,\n events: generator.context.events,\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) => {\n const hasProperties = Object.keys(schemaObject || {}).length > 0\n const hasDefaults = Object.values(schemaObject.properties || {}).some((prop) => prop && Object.hasOwn(prop, 'default'))\n\n const required = Array.isArray(schemaObject?.required) ? schemaObject.required.length > 0 : !!schemaObject?.required\n const optional = !required && !hasDefaults && hasProperties && name.includes('Params')\n\n if (!optional && Array.isArray(schemaObject.required) && !schemaObject.required.length) {\n schemaObject.required = Object.entries(schemaObject.properties || {})\n .filter(([_key, value]) => value && Object.hasOwn(value, 'default'))\n .map(([key]) => key)\n }\n\n const tree = [\n ...schemaGenerator.parse({ schema: schemaObject, name, parentName: null }),\n optional ? { keyword: schemaKeywords.optional } : undefined,\n ].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 <Fragment>\n {typed && <File.Import isTypeOnly root={file.path} path={type.file.path} name={[type.name]} />}\n {typed && version === '3' && <File.Import name={['ToZod']} root={file.path} path={path.resolve(config.root, config.output.path, '.kubb/ToZod.ts')} />}\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 schema={schemaObject}\n mapper={mapper}\n coercion={coercion}\n keysToOmit={keysToOmit}\n wrapOutput={wrapOutput}\n version={plugin.options.version}\n emptySchemaType={plugin.options.emptySchemaType}\n mini={mini}\n />\n </Fragment>\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({ config, schema, plugin }) {\n const { getName, getFile, getImports } = useSchemaManager()\n const {\n options: { output, emptySchemaType, coercion, inferred, typed, mapper, importPath, wrapOutput, version, mini },\n } = plugin\n const pluginManager = usePluginManager()\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 && version === '3' && (\n <File.Import name={['ToZod']} root={zod.file.path} path={path.resolve(config.root, config.output.path, '.kubb/ToZod.ts')} />\n )}\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 schema={schema.value}\n mapper={mapper}\n coercion={coercion}\n wrapOutput={wrapOutput}\n version={version}\n emptySchemaType={emptySchemaType}\n mini={mini}\n />\n </File>\n )\n },\n})\n"],"mappings":"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"}
1
+ {"version":3,"file":"generators-CV7dvZaD.cjs","names":["File","Operations","SchemaGenerator","options","schemaKeywords","pluginTsName","Fragment","File","path","Zod"],"sources":["../src/generators/operationsGenerator.tsx","../src/generators/zodGenerator.tsx"],"sourcesContent":["import { usePluginManager } from '@kubb/core/hooks'\nimport { createReactGenerator } from '@kubb/plugin-oas/generators'\nimport { useOas, useOperationManager } from '@kubb/plugin-oas/hooks'\nimport { getBanner, getFooter } from '@kubb/plugin-oas/utils'\nimport { File } from '@kubb/react-fabric'\nimport { Operations } from '../components/Operations.tsx'\nimport type { PluginZod } from '../types'\n\nexport const operationsGenerator = createReactGenerator<PluginZod>({\n name: 'operations',\n Operations({ operations, generator, plugin }) {\n const {\n key: pluginKey,\n options: { output, importPath },\n } = plugin\n const pluginManager = usePluginManager()\n\n const oas = useOas()\n const { getFile, groupSchemasByName } = useOperationManager(generator)\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 <File.Import isTypeOnly name={['z']} path={importPath} />\n {imports}\n <Operations name={name} operations={transformedOperations} />\n </File>\n )\n },\n})\n","import path from 'node:path'\nimport { useMode, usePluginManager } from '@kubb/core/hooks'\nimport { type OperationSchema as OperationSchemaType, SchemaGenerator, schemaKeywords } from '@kubb/plugin-oas'\nimport { createReactGenerator } from '@kubb/plugin-oas/generators'\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, Fragment } from '@kubb/react-fabric'\nimport { Zod } from '../components'\nimport type { PluginZod } from '../types'\n\nexport const zodGenerator = createReactGenerator<PluginZod>({\n name: 'zod',\n Operation({ config, operation, generator, plugin }) {\n const {\n options,\n options: { coercion: globalCoercion, inferred, typed, mapper, wrapOutput, version, mini },\n } = plugin\n\n const mode = useMode()\n const pluginManager = usePluginManager()\n\n const oas = useOas()\n const { getSchemas, getFile, getGroup } = useOperationManager(generator)\n const schemaManager = useSchemaManager()\n\n const file = getFile(operation)\n const schemas = getSchemas(operation)\n const schemaGenerator = new SchemaGenerator(options, {\n fabric: generator.context.fabric,\n oas,\n plugin,\n pluginManager,\n events: generator.context.events,\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) => {\n const hasProperties = Object.keys(schemaObject || {}).length > 0\n const hasDefaults = Object.values(schemaObject.properties || {}).some((prop) => prop && Object.hasOwn(prop, 'default'))\n\n const required = Array.isArray(schemaObject?.required) ? schemaObject.required.length > 0 : !!schemaObject?.required\n const optional = !required && !hasDefaults && hasProperties && name.includes('Params')\n\n if (!optional && Array.isArray(schemaObject.required) && !schemaObject.required.length) {\n schemaObject.required = Object.entries(schemaObject.properties || {})\n .filter(([_key, value]) => value && Object.hasOwn(value, 'default'))\n .map(([key]) => key)\n }\n\n const tree = [\n ...schemaGenerator.parse({ schema: schemaObject, name, parentName: null }),\n optional ? { keyword: schemaKeywords.optional } : undefined,\n ].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 <Fragment>\n {typed && <File.Import isTypeOnly root={file.path} path={type.file.path} name={[type.name]} />}\n {typed && version === '3' && <File.Import name={['ToZod']} root={file.path} path={path.resolve(config.root, config.output.path, '.kubb/ToZod.ts')} />}\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 schema={schemaObject}\n mapper={mapper}\n coercion={coercion}\n keysToOmit={keysToOmit}\n wrapOutput={wrapOutput}\n version={plugin.options.version}\n emptySchemaType={plugin.options.emptySchemaType}\n mini={mini}\n />\n </Fragment>\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({ config, schema, plugin }) {\n const { getName, getFile, getImports } = useSchemaManager()\n const {\n options: { output, emptySchemaType, coercion, inferred, typed, mapper, importPath, wrapOutput, version, mini },\n } = plugin\n const pluginManager = usePluginManager()\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 && version === '3' && (\n <File.Import name={['ToZod']} root={zod.file.path} path={path.resolve(config.root, config.output.path, '.kubb/ToZod.ts')} />\n )}\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 schema={schema.value}\n mapper={mapper}\n coercion={coercion}\n wrapOutput={wrapOutput}\n version={version}\n emptySchemaType={emptySchemaType}\n mini={mini}\n />\n </File>\n )\n },\n})\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- const require_generators = require('./generators-ETnOgamg.cjs');
1
+ const require_generators = require('./generators-CV7dvZaD.cjs');
2
2
 
3
3
  exports.operationsGenerator = require_generators.operationsGenerator;
4
4
  exports.zodGenerator = require_generators.zodGenerator;
@@ -1,3 +1,3 @@
1
- import { n as operationsGenerator, t as zodGenerator } from "./generators-BMy4WNwE.js";
1
+ import { n as operationsGenerator, t as zodGenerator } from "./generators-C3urwQCK.js";
2
2
 
3
3
  export { operationsGenerator, zodGenerator };
package/dist/index.cjs CHANGED
@@ -1,5 +1,5 @@
1
- const require_components = require('./components-CtNn0D8u.cjs');
2
- const require_generators = require('./generators-ETnOgamg.cjs');
1
+ const require_components = require('./components-tTIAJBE2.cjs');
2
+ const require_generators = require('./generators-CV7dvZaD.cjs');
3
3
  let node_path = require("node:path");
4
4
  node_path = require_components.__toESM(node_path);
5
5
  let _kubb_core = require("@kubb/core");
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { n as operationsGenerator, t as zodGenerator } from "./generators-BMy4WNwE.js";
1
+ import { n as operationsGenerator, t as zodGenerator } from "./generators-C3urwQCK.js";
2
2
  import path from "node:path";
3
3
  import { PackageManager, definePlugin, getBarrelFiles, getMode } from "@kubb/core";
4
4
  import { camelCase, pascalCase } from "@kubb/core/transformers";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kubb/plugin-zod",
3
- "version": "4.12.13",
3
+ "version": "4.12.15",
4
4
  "description": "Zod schema generator plugin for Kubb, creating type-safe validation schemas from OpenAPI specifications for runtime data validation.",
5
5
  "keywords": [
6
6
  "zod",
@@ -68,11 +68,11 @@
68
68
  }
69
69
  ],
70
70
  "dependencies": {
71
- "@kubb/react-fabric": "0.7.4",
72
- "@kubb/core": "4.12.13",
73
- "@kubb/oas": "4.12.13",
74
- "@kubb/plugin-oas": "4.12.13",
75
- "@kubb/plugin-ts": "4.12.13"
71
+ "@kubb/react-fabric": "0.8.0",
72
+ "@kubb/core": "4.12.15",
73
+ "@kubb/oas": "4.12.15",
74
+ "@kubb/plugin-oas": "4.12.15",
75
+ "@kubb/plugin-ts": "4.12.15"
76
76
  },
77
77
  "devDependencies": {
78
78
  "@asteasolutions/zod-to-openapi": "^8.2.0",
@@ -51,10 +51,10 @@ export function Zod({
51
51
  const baseSchemas = mini ? parserZod.filterMiniModifiers(schemas) : schemas
52
52
 
53
53
  const output = baseSchemas
54
- .map((schema, index) => {
54
+ .map((schemaKeyword, index) => {
55
55
  const siblings = baseSchemas.filter((_, i) => i !== index)
56
56
 
57
- return parserZod.parse({ schema, parent: undefined, current: schema, siblings, name }, { mapper, coercion, wrapOutput, version, mini })
57
+ return parserZod.parse({ schema, parent: undefined, current: schemaKeyword, siblings, name }, { mapper, coercion, wrapOutput, version, mini })
58
58
  })
59
59
  .filter(Boolean)
60
60
  .join('')
@@ -22,7 +22,7 @@ export const createPetsError = z
22
22
  })
23
23
 
24
24
  export const createPetsMutationRequest = z.object({
25
- name: z.string(),
25
+ name: z.string().openapi({ example: 'Baxter' }),
26
26
  tag: z.string(),
27
27
  })
28
28
 
@@ -12,16 +12,19 @@ export const createPets201 = z.unknown()
12
12
  /**
13
13
  * @description unexpected error
14
14
  */
15
- export const createPetsError = extendApi(error, {
16
- examples: [
17
- { sample: { summary: 'A sample error', value: { code: 1, message: 'A sample error message' } } },
18
- { other_example: { summary: 'Another sample error', value: { code: 2, message: 'A totally specific message' } } },
19
- ],
20
- })
15
+ export const createPetsError = extendApi(
16
+ z.lazy(() => error),
17
+ {
18
+ examples: [
19
+ { sample: { summary: 'A sample error', value: { code: 1, message: 'A sample error message' } } },
20
+ { other_example: { summary: 'Another sample error', value: { code: 2, message: 'A totally specific message' } } },
21
+ ],
22
+ },
23
+ )
21
24
 
22
25
  export const createPetsMutationRequest = z.object({
23
26
  name: extendApi(z.string(), { example: 'Baxter' }),
24
27
  tag: z.string(),
25
28
  })
26
29
 
27
- export const createPetsMutationResponse = createPets201
30
+ export const createPetsMutationResponse = z.lazy(() => createPets201)
@@ -22,7 +22,7 @@ export const createPetsError = z
22
22
  })
23
23
 
24
24
  export const createPetsMutationRequest = z.object({
25
- name: z.string(),
25
+ name: z.string().openapi({ example: 'Baxter' }),
26
26
  tag: z.string(),
27
27
  })
28
28
 
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Generated by Kubb (https://kubb.dev/).
3
+ * Do not edit manually.
4
+ */
5
+ import { z } from 'zod'
6
+
7
+ export const showPetByIdPathParams = z
8
+ .object({
9
+ petId: z
10
+ .string()
11
+ .describe('The id of the pet to retrieve')
12
+ .openapi({ examples: [{ description: 'The id of the pet to retrieve', type: 'string' }] }),
13
+ testId: z
14
+ .string()
15
+ .describe('The id of the pet to retrieve')
16
+ .openapi({ examples: [{ description: 'The id of the pet to retrieve', type: 'string' }] }),
17
+ })
18
+ .openapi({
19
+ examples: [
20
+ {
21
+ type: 'object',
22
+ required: ['petId', 'testId'],
23
+ properties: {
24
+ petId: { description: 'The id of the pet to retrieve', type: 'string' },
25
+ testId: { description: 'The id of the pet to retrieve', type: 'string' },
26
+ },
27
+ },
28
+ ],
29
+ })
30
+
31
+ export const showPetByIdQueryParams = z
32
+ .object({
33
+ queryFilter: z.optional(
34
+ z
35
+ .string()
36
+ .optional()
37
+ .transform((val) => (val ? val.split(',') : undefined))
38
+ .pipe(z.array(z.enum(['DOGS', 'CATS', 'RABBITS'])).describe('A string array query parameter example')),
39
+ ),
40
+ })
41
+ .optional()
42
+ .openapi({
43
+ examples: [
44
+ {
45
+ type: 'object',
46
+ required: [],
47
+ properties: {
48
+ queryFilter: { description: 'A string array query parameter example', type: 'array', items: { type: 'string', enum: ['DOGS', 'CATS', 'RABBITS'] } },
49
+ },
50
+ },
51
+ ],
52
+ })
53
+
54
+ /**
55
+ * @description Expected response to a valid request
56
+ */
57
+ export const showPetById200 = z
58
+ .lazy(() => pet)
59
+ .openapi({
60
+ examples: [
61
+ {
62
+ $ref: '#/components/schemas/Pet',
63
+ type: 'object',
64
+ required: ['id', 'name'],
65
+ properties: { id: { type: 'integer', format: 'int64' }, name: { type: 'string' }, tag: { type: 'string' } },
66
+ },
67
+ ],
68
+ })
69
+
70
+ /**
71
+ * @description unexpected error
72
+ */
73
+ export const showPetByIdError = z
74
+ .lazy(() => error)
75
+ .openapi({
76
+ examples: [
77
+ {
78
+ $ref: '#/components/schemas/Error',
79
+ type: 'object',
80
+ required: ['code', 'message'],
81
+ properties: { code: { type: 'integer', format: 'int32' }, message: { type: 'string' } },
82
+ },
83
+ ],
84
+ })
85
+
86
+ export const showPetByIdQueryResponse = z
87
+ .lazy(() => showPetById200)
88
+ .openapi({
89
+ examples: [
90
+ {
91
+ oneOf: [
92
+ {
93
+ $ref: 'showPetById200',
94
+ type: 'object',
95
+ required: ['id', 'name'],
96
+ properties: { id: { type: 'integer', format: 'int64' }, name: { type: 'string' }, tag: { type: 'string' } },
97
+ },
98
+ ],
99
+ },
100
+ ],
101
+ })
@@ -1 +0,0 @@
1
- {"version":3,"file":"components-CtNn0D8u.cjs","names":["File","Type","Const","transformers","checks: string[]","order: string[]","schemaKeywords","transformers","schema","SchemaGenerator","SchemaGenerator","schemaKeywords","parserZod.sort","parserZod.filterMiniModifiers","parserZod.parse","schema","parserZod.wrapWithMiniModifiers","parserZod.extractMiniModifiers","File","Const","transformers","Type"],"sources":["../src/components/Operations.tsx","../src/parser.ts","../src/components/Zod.tsx"],"sourcesContent":["import transformers from '@kubb/core/transformers'\nimport type { HttpMethod, Operation } from '@kubb/oas'\nimport type { SchemaNames } from '@kubb/plugin-oas/hooks'\nimport { Const, File, Type } from '@kubb/react-fabric'\nimport type { KubbNode } from '@kubb/react-fabric/types'\n\ntype Props = {\n name: string\n operations: Array<{ operation: Operation; data: SchemaNames }>\n}\n\nexport function Operations({ name, operations }: Props): KubbNode {\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=\"OperationSchema\" isExportable isIndexable>\n <Type name=\"OperationSchema\" export>{`{\n readonly request: z.ZodTypeAny | undefined;\n readonly parameters: {\n readonly path: z.ZodTypeAny | undefined;\n readonly query: z.ZodTypeAny | undefined;\n readonly header: z.ZodTypeAny | undefined;\n };\n readonly responses: {\n readonly [status: number]: z.ZodTypeAny;\n readonly default: z.ZodTypeAny;\n };\n readonly errors: {\n readonly [status: number]: z.ZodTypeAny;\n };\n}`}</Type>\n </File.Source>\n <File.Source name=\"OperationsMap\" isExportable isIndexable>\n <Type name=\"OperationsMap\" export>\n {'Record<string, OperationSchema>'}\n </Type>\n </File.Source>\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'\n\nimport type { Schema, SchemaMapper } from '@kubb/plugin-oas'\nimport { createParser, findSchemaKeyword, isKeyword, SchemaGenerator, type SchemaKeywordMapper, schemaKeywords } from '@kubb/plugin-oas'\n\n//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)\n// also include shouldCoerce\n\n/**\n * Helper to build string/array length constraint checks for Zod Mini mode\n */\nfunction buildLengthChecks(min?: number, max?: number): string[] {\n const checks: string[] = []\n if (min !== undefined) checks.push(`z.minLength(${min})`)\n if (max !== undefined) checks.push(`z.maxLength(${max})`)\n return checks\n}\n\nconst zodKeywordMapper = {\n any: () => 'z.any()',\n unknown: () => 'z.unknown()',\n void: () => 'z.void()',\n number: (coercion?: boolean, min?: number, max?: number, exclusiveMinimum?: number, exclusiveMaximum?: number, mini?: boolean) => {\n if (mini) {\n const checks: string[] = []\n if (min !== undefined) checks.push(`z.minimum(${min})`)\n if (max !== undefined) checks.push(`z.maximum(${max})`)\n if (exclusiveMinimum !== undefined) checks.push(`z.minimum(${exclusiveMinimum}, { exclusive: true })`)\n if (exclusiveMaximum !== undefined) checks.push(`z.maximum(${exclusiveMaximum}, { exclusive: true })`)\n if (checks.length > 0) {\n return `z.number().check(${checks.join(', ')})`\n }\n return 'z.number()'\n }\n return [\n coercion ? 'z.coerce.number()' : 'z.number()',\n min !== undefined ? `.min(${min})` : undefined,\n max !== undefined ? `.max(${max})` : undefined,\n exclusiveMinimum !== undefined ? `.gt(${exclusiveMinimum})` : undefined,\n exclusiveMaximum !== undefined ? `.lt(${exclusiveMaximum})` : undefined,\n ]\n .filter(Boolean)\n .join('')\n },\n integer: (coercion?: boolean, min?: number, max?: number, version: '3' | '4' = '3', exclusiveMinimum?: number, exclusiveMaximum?: number, mini?: boolean) => {\n if (mini) {\n const checks: string[] = []\n if (min !== undefined) checks.push(`z.minimum(${min})`)\n if (max !== undefined) checks.push(`z.maximum(${max})`)\n if (exclusiveMinimum !== undefined) checks.push(`z.minimum(${exclusiveMinimum}, { exclusive: true })`)\n if (exclusiveMaximum !== undefined) checks.push(`z.maximum(${exclusiveMaximum}, { exclusive: true })`)\n if (checks.length > 0) {\n return `z.int().check(${checks.join(', ')})`\n }\n return 'z.int()'\n }\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 exclusiveMinimum !== undefined ? `.gt(${exclusiveMinimum})` : undefined,\n exclusiveMaximum !== undefined ? `.lt(${exclusiveMaximum})` : 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, mini?: boolean) => {\n if (mini) {\n const checks = buildLengthChecks(min, max)\n if (checks.length > 0) {\n return `z.string().check(${checks.join(', ')})`\n }\n return 'z.string()'\n }\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: (value?: string) => {\n if (value) {\n return `z.nullable(${value})`\n }\n return '.nullable()'\n },\n null: () => 'z.null()',\n nullish: (value?: string) => {\n if (value) {\n return `z.nullish(${value})`\n }\n return '.nullish()'\n },\n array: (items: string[] = [], min?: number, max?: number, unique?: boolean, mini?: boolean) => {\n if (mini) {\n const checks = buildLengthChecks(min, max)\n if (unique) checks.push(`z.refine(items => new Set(items).size === items.length, { message: \"Array entries must be unique\" })`)\n if (checks.length > 0) {\n return `z.array(${items?.join('')}).check(${checks.join(', ')})`\n }\n return `z.array(${items?.join('')})`\n }\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', mini?: boolean) => {\n // Zod Mini doesn't support .datetime() method, use plain string\n if (mini) {\n return 'z.string()'\n }\n\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', min?: number, max?: number, mini?: boolean) => {\n if (mini) {\n const checks = buildLengthChecks(min, max)\n if (checks.length > 0) {\n return `z.uuid().check(${checks.join(', ')})`\n }\n return 'z.uuid()'\n }\n return [\n coercion ? (version === '4' ? 'z.uuid()' : 'z.coerce.string().uuid()') : version === '4' ? 'z.uuid()' : 'z.string().uuid()',\n min !== undefined ? `.min(${min})` : undefined,\n max !== undefined ? `.max(${max})` : undefined,\n ]\n .filter(Boolean)\n .join('')\n },\n url: (coercion?: boolean, version: '3' | '4' = '3', min?: number, max?: number, mini?: boolean) => {\n if (mini) {\n const checks = buildLengthChecks(min, max)\n if (checks.length > 0) {\n return `z.url().check(${checks.join(', ')})`\n }\n return 'z.url()'\n }\n return [\n coercion ? (version === '4' ? 'z.url()' : 'z.coerce.string().url()') : version === '4' ? 'z.url()' : 'z.string().url()',\n min !== undefined ? `.min(${min})` : undefined,\n max !== undefined ? `.max(${max})` : undefined,\n ]\n .filter(Boolean)\n .join('')\n },\n default: (value?: string | number | boolean | object, innerSchema?: string, mini?: boolean) => {\n if (mini && innerSchema) {\n const defaultValue = typeof value === 'object' ? '{}' : (value ?? '')\n return `z._default(${innerSchema}, ${defaultValue})`\n }\n\n if (typeof value === 'object') {\n return '.default({})'\n }\n\n if (value === undefined) {\n return '.default()'\n }\n\n if (typeof value === 'string' && !value) {\n return `.default('')`\n }\n\n return `.default(${value ?? ''})`\n },\n and: (items: string[] = [], mini?: boolean) => {\n // zod/mini doesn't support .and() method, so we can't use intersection types\n // In mini mode, we try to extract and append .check() calls instead\n if (mini && items.length > 0) {\n // Try to extract check calls from additional items\n const checks: string[] = []\n for (const item of items) {\n // Extract .check(...) from patterns like \"z.string().check(...)\"\n // Need to handle nested parentheses properly\n const checkStart = item.indexOf('.check(')\n if (checkStart !== -1) {\n // Find the matching closing parenthesis\n let depth = 0\n let i = checkStart + 7 // length of '.check('\n let checkContent = ''\n while (i < item.length) {\n const char = item[i]\n if (char === '(') depth++\n else if (char === ')') {\n if (depth === 0) break\n depth--\n }\n checkContent += char\n i++\n }\n if (checkContent) {\n checks.push(checkContent)\n }\n }\n }\n\n if (checks.length > 0) {\n // Append checks to the base schema\n return `.check(${checks.join(', ')})`\n }\n\n // If we can't extract checks, just use the first schema (limitation)\n return ''\n }\n return items?.map((item) => `.and(${item})`).join('')\n },\n describe: (value = '', innerSchema?: string, mini?: boolean) => {\n if (mini) {\n return undefined\n }\n\n if (innerSchema) {\n return `z.describe(${innerSchema}, ${value})`\n }\n return `.describe(${value})`\n },\n max: undefined,\n min: undefined,\n optional: (value?: string) => {\n if (value) {\n return `z.optional(${value})`\n }\n return '.optional()'\n },\n matches: (value = '', coercion?: boolean, mini?: boolean, min?: number, max?: number) => {\n if (mini) {\n const checks = buildLengthChecks(min, max)\n checks.push(`z.regex(${value})`)\n return `z.string().check(${checks.join(', ')})`\n }\n return [\n coercion ? 'z.coerce.string()' : 'z.string()',\n min !== undefined ? `.min(${min})` : undefined,\n max !== undefined ? `.max(${max})` : undefined,\n `.regex(${value})`,\n ]\n .filter(Boolean)\n .join('')\n },\n email: (coercion?: boolean, version: '3' | '4' = '3', min?: number, max?: number, mini?: boolean) => {\n if (mini) {\n const checks = buildLengthChecks(min, max)\n if (checks.length > 0) {\n return `z.email().check(${checks.join(', ')})`\n }\n return 'z.email()'\n }\n return [\n coercion ? (version === '4' ? 'z.email()' : 'z.coerce.string().email()') : version === '4' ? 'z.email()' : 'z.string().email()',\n min !== undefined ? `.min(${min})` : undefined,\n max !== undefined ? `.max(${max})` : undefined,\n ]\n .filter(Boolean)\n .join('')\n },\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 `z.lazy(() => ${value})`\n },\n blob: () => 'z.instanceof(File)',\n deprecated: undefined,\n example: undefined,\n schema: undefined,\n catchall: (value?: string, mini?: boolean) => {\n // Zod Mini doesn't support .catchall() method\n if (mini) {\n return undefined\n }\n return value ? `.catchall(${value})` : undefined\n },\n name: undefined,\n exclusiveMinimum: undefined,\n exclusiveMaximum: 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\ntype MiniModifiers = {\n hasOptional?: boolean\n hasNullable?: boolean\n hasNullish?: boolean\n defaultValue?: string | number | true | object\n}\n\n/**\n * Keywords that represent modifiers for mini mode\n * These are separated from the base schema and wrapped around it\n * Note: describe is included to filter it out, but won't be wrapped (Zod Mini doesn't support describe)\n */\nexport const miniModifierKeywords = [schemaKeywords.optional, schemaKeywords.nullable, schemaKeywords.nullish, schemaKeywords.default, schemaKeywords.describe]\n\n/**\n * Extracts mini mode modifiers from a schemas array\n * This can be reused by other parsers (e.g., valibot) that need similar functionality\n * Note: describe is not included as Zod Mini doesn't support it\n */\nexport function extractMiniModifiers(schemas: Schema[]): MiniModifiers {\n const defaultSchema = schemas.find((item) => isKeyword(item, schemaKeywords.default)) as { keyword: string; args: unknown } | undefined\n\n return {\n hasOptional: schemas.some((item) => isKeyword(item, schemaKeywords.optional)),\n hasNullable: schemas.some((item) => isKeyword(item, schemaKeywords.nullable)),\n hasNullish: schemas.some((item) => isKeyword(item, schemaKeywords.nullish)),\n defaultValue: defaultSchema?.args as string | number | true | object | undefined,\n }\n}\n\n/**\n * Filters out modifier keywords from schemas for mini mode base schema parsing\n * This can be reused by other parsers (e.g., valibot) that need similar functionality\n */\nexport function filterMiniModifiers(schemas: Schema[]): Schema[] {\n return schemas.filter((item) => !miniModifierKeywords.some((keyword) => isKeyword(item, keyword)))\n}\n\n/**\n * Wraps an output string with Zod Mini functional modifiers\n * Order: default (innermost) -> nullable -> optional (outermost)\n * OR: default -> nullish\n * Note: describe is not supported in Zod Mini and is skipped\n */\nexport function wrapWithMiniModifiers(output: string, modifiers: MiniModifiers): string {\n let result = output\n\n // Apply default first (innermost wrapper)\n if (modifiers.defaultValue !== undefined) {\n result = zodKeywordMapper.default(modifiers.defaultValue, result, true)!\n }\n\n // Apply nullish, nullable, or optional (outer wrappers for optionality)\n if (modifiers.hasNullish) {\n result = zodKeywordMapper.nullish(result)!\n } else {\n if (modifiers.hasNullable) {\n result = zodKeywordMapper.nullable(result)!\n }\n if (modifiers.hasOptional) {\n result = zodKeywordMapper.optional(result)!\n }\n }\n\n return result\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 mapper?: Record<string, string>\n coercion?: boolean | { dates?: boolean; strings?: boolean; numbers?: boolean }\n wrapOutput?: (opts: { output: string; schema: any }) => string | undefined\n version: '3' | '4'\n skipLazyForRefs?: boolean\n mini?: boolean\n}\n\n// Create the parser using createParser\nexport const parse = createParser<string, ParserOptions>({\n mapper: zodKeywordMapper,\n handlers: {\n union(tree, options) {\n const { current, schema, parent, name, siblings } = tree\n if (!isKeyword(current, schemaKeywords.union)) return undefined\n\n // zod union type needs at least 2 items\n if (Array.isArray(current.args) && current.args.length === 1) {\n return this.parse({ schema, parent, 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((it, _index, siblings) => this.parse({ schema, parent: current, name, current: it, siblings }, options))\n .filter(Boolean),\n )\n },\n and(tree, options) {\n const { current, schema, name } = tree\n if (!isKeyword(current, schemaKeywords.and)) return undefined\n\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((it: Schema, _index, siblings) => this.parse({ schema, parent: current, name, current: it, siblings }, options))\n .filter(Boolean)\n\n return `${items.slice(0, 1)}${zodKeywordMapper.and(items.slice(1), options.mini)}`\n },\n array(tree, options) {\n const { current, schema, name } = tree\n if (!isKeyword(current, schemaKeywords.array)) return undefined\n\n return zodKeywordMapper.array(\n sort(current.args.items)\n .map((it, _index, siblings) => {\n return this.parse({ schema, parent: current, name, current: it, siblings }, options)\n })\n .filter(Boolean),\n current.args.min,\n current.args.max,\n current.args.unique,\n options.mini,\n )\n },\n enum(tree, options) {\n const { current, schema, name } = tree\n if (!isKeyword(current, schemaKeywords.enum)) return undefined\n\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 this.parse({ schema, parent: current, 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((it, _index, siblings) => {\n return this.parse({ schema, parent: current, name, current: it, 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 ref(tree, options) {\n const { current } = tree\n if (!isKeyword(current, schemaKeywords.ref)) return undefined\n\n // Skip z.lazy wrapper if skipLazyForRefs is true (e.g., inside v4 getters)\n if (options.skipLazyForRefs) {\n return current.args?.name\n }\n return zodKeywordMapper.ref(current.args?.name)\n },\n object(tree, options) {\n const { current, schema, name } = tree\n if (!isKeyword(current, schemaKeywords.object)) return undefined\n\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(([propertyName, schemas]) => {\n const nameSchema = schemas.find((it) => it.keyword === schemaKeywords.name) as SchemaKeywordMapper['name']\n const isNullable = schemas.some((it) => isKeyword(it, schemaKeywords.nullable))\n const isNullish = schemas.some((it) => isKeyword(it, schemaKeywords.nullish))\n const isOptional = schemas.some((it) => isKeyword(it, schemaKeywords.optional))\n const hasRef = !!SchemaGenerator.find(schemas, schemaKeywords.ref)\n\n const mappedName = nameSchema?.args || propertyName\n\n // custom mapper(pluginOptions)\n if (options.mapper?.[mappedName]) {\n return `\"${propertyName}\": ${options.mapper?.[mappedName]}`\n }\n\n const baseSchemaOutput = sort(schemas)\n .filter((schema) => {\n return !isKeyword(schema, schemaKeywords.optional) && !isKeyword(schema, schemaKeywords.nullable) && !isKeyword(schema, schemaKeywords.nullish)\n })\n .map((it) => {\n // For v4 with refs, skip z.lazy wrapper since the getter provides lazy evaluation\n const skipLazyForRefs = options.version === '4' && hasRef\n return this.parse({ schema, parent: current, name, current: it, siblings: schemas }, { ...options, skipLazyForRefs })\n })\n .filter(Boolean)\n .join('')\n\n const objectValue = options.wrapOutput\n ? options.wrapOutput({ output: baseSchemaOutput, schema: schema?.properties?.[propertyName] }) || baseSchemaOutput\n : baseSchemaOutput\n\n if (options.version === '4' && hasRef) {\n // In mini mode, use functional wrappers instead of chainable methods\n if (options.mini) {\n // both optional and nullable\n if (isNullish) {\n return `get \"${propertyName}\"(){\n return ${zodKeywordMapper.nullish(objectValue)}\n }`\n }\n\n // undefined\n if (isOptional) {\n return `get \"${propertyName}\"(){\n return ${zodKeywordMapper.optional(objectValue)}\n }`\n }\n\n // null\n if (isNullable) {\n return `get \"${propertyName}\"(){\n return ${zodKeywordMapper.nullable(objectValue)}\n }`\n }\n\n return `get \"${propertyName}\"(){\n return ${objectValue}\n }`\n }\n\n // Non-mini mode uses chainable methods\n // both optional and nullable\n if (isNullish) {\n return `get \"${propertyName}\"(){\n return ${objectValue}${zodKeywordMapper.nullish()}\n }`\n }\n\n // undefined\n if (isOptional) {\n return `get \"${propertyName}\"(){\n return ${objectValue}${zodKeywordMapper.optional()}\n }`\n }\n\n // null\n if (isNullable) {\n return `get \"${propertyName}\"(){\n return ${objectValue}${zodKeywordMapper.nullable()}\n }`\n }\n\n return `get \"${propertyName}\"(){\n return ${objectValue}\n }`\n }\n\n // both optional and nullable\n if (isNullish) {\n return `\"${propertyName}\": ${objectValue}${zodKeywordMapper.nullish()}`\n }\n\n // undefined\n if (isOptional) {\n return `\"${propertyName}\": ${zodKeywordMapper.optional(objectValue)}`\n }\n\n // null\n if (isNullable) {\n return `\"${propertyName}\": ${zodKeywordMapper.nullable(objectValue)}`\n }\n\n return `\"${propertyName}\": ${objectValue}`\n })\n .join(',\\n')\n\n const additionalProperties = current.args?.additionalProperties?.length\n ? current.args.additionalProperties\n .map((it, _index, siblings) => this.parse({ schema, parent: current, name, current: it, 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, options.mini) : undefined,\n ].filter(Boolean)\n\n return text.join('')\n },\n tuple(tree, options) {\n const { current, schema, name } = tree\n if (!isKeyword(current, schemaKeywords.tuple)) return undefined\n\n return zodKeywordMapper.tuple(\n current.args.items.map((it, _index, siblings) => this.parse({ schema, parent: current, name, current: it, siblings }, options)).filter(Boolean),\n )\n },\n const(tree, _options) {\n const { current } = tree\n if (!isKeyword(current, schemaKeywords.const)) return undefined\n\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(typeof current.args.value === 'boolean' ? current.args.value : undefined)\n }\n return zodKeywordMapper.const(transformers.stringify(current.args.value))\n },\n matches(tree, options) {\n const { current, siblings } = tree\n if (!isKeyword(current, schemaKeywords.matches)) return undefined\n\n // Early exit: if siblings contain both matches and ref → skip matches entirely\n const hasRef = siblings.some((it) => isKeyword(it, schemaKeywords.ref))\n if (hasRef) {\n return undefined // strip matches\n }\n\n const minSchema = findSchemaKeyword(siblings, 'min')\n const maxSchema = findSchemaKeyword(siblings, 'max')\n\n if (current.args) {\n return zodKeywordMapper.matches(\n transformers.toRegExpString(current.args, null),\n shouldCoerce(options.coercion, 'strings'),\n options.mini,\n minSchema?.args,\n maxSchema?.args,\n )\n }\n return undefined\n },\n default(tree, options) {\n const { current } = tree\n if (!isKeyword(current, schemaKeywords.default)) return undefined\n\n // In mini mode, default is handled by wrapWithMiniModifiers\n if (options.mini) {\n return undefined\n }\n if (current.args !== undefined) {\n return zodKeywordMapper.default(current.args)\n }\n // When args is undefined, call the mapper without arguments\n return zodKeywordMapper.default()\n },\n describe(tree, options) {\n const { current } = tree\n if (!isKeyword(current, schemaKeywords.describe)) return undefined\n\n if (current.args) {\n return zodKeywordMapper.describe(transformers.stringify(current.args.toString()), undefined, options.mini)\n }\n return undefined\n },\n string(tree, options) {\n const { current, siblings } = tree\n if (!isKeyword(current, schemaKeywords.string)) return undefined\n\n const minSchema = findSchemaKeyword(siblings, 'min')\n const maxSchema = findSchemaKeyword(siblings, 'max')\n\n return zodKeywordMapper.string(shouldCoerce(options.coercion, 'strings'), minSchema?.args, maxSchema?.args, options.mini)\n },\n uuid(tree, options) {\n const { current, siblings } = tree\n if (!isKeyword(current, schemaKeywords.uuid)) return undefined\n\n const minSchema = findSchemaKeyword(siblings, 'min')\n const maxSchema = findSchemaKeyword(siblings, 'max')\n\n return zodKeywordMapper.uuid(shouldCoerce(options.coercion, 'strings'), options.version, minSchema?.args, maxSchema?.args, options.mini)\n },\n email(tree, options) {\n const { current, siblings } = tree\n if (!isKeyword(current, schemaKeywords.email)) return undefined\n\n const minSchema = findSchemaKeyword(siblings, 'min')\n const maxSchema = findSchemaKeyword(siblings, 'max')\n\n return zodKeywordMapper.email(shouldCoerce(options.coercion, 'strings'), options.version, minSchema?.args, maxSchema?.args, options.mini)\n },\n url(tree, options) {\n const { current, siblings } = tree\n if (!isKeyword(current, schemaKeywords.url)) return undefined\n\n const minSchema = findSchemaKeyword(siblings, 'min')\n const maxSchema = findSchemaKeyword(siblings, 'max')\n\n return zodKeywordMapper.url(shouldCoerce(options.coercion, 'strings'), options.version, minSchema?.args, maxSchema?.args, options.mini)\n },\n number(tree, options) {\n const { current, siblings } = tree\n if (!isKeyword(current, schemaKeywords.number)) return undefined\n\n const minSchema = findSchemaKeyword(siblings, 'min')\n const maxSchema = findSchemaKeyword(siblings, 'max')\n const exclusiveMinimumSchema = findSchemaKeyword(siblings, 'exclusiveMinimum')\n const exclusiveMaximumSchema = findSchemaKeyword(siblings, 'exclusiveMaximum')\n\n return zodKeywordMapper.number(\n shouldCoerce(options.coercion, 'numbers'),\n minSchema?.args,\n maxSchema?.args,\n exclusiveMinimumSchema?.args,\n exclusiveMaximumSchema?.args,\n options.mini,\n )\n },\n integer(tree, options) {\n const { current, siblings } = tree\n if (!isKeyword(current, schemaKeywords.integer)) return undefined\n\n const minSchema = findSchemaKeyword(siblings, 'min')\n const maxSchema = findSchemaKeyword(siblings, 'max')\n const exclusiveMinimumSchema = findSchemaKeyword(siblings, 'exclusiveMinimum')\n const exclusiveMaximumSchema = findSchemaKeyword(siblings, 'exclusiveMaximum')\n\n return zodKeywordMapper.integer(\n shouldCoerce(options.coercion, 'numbers'),\n minSchema?.args,\n maxSchema?.args,\n options.version,\n exclusiveMinimumSchema?.args,\n exclusiveMaximumSchema?.args,\n options.mini,\n )\n },\n datetime(tree, options) {\n const { current } = tree\n if (!isKeyword(current, schemaKeywords.datetime)) return undefined\n\n return zodKeywordMapper.datetime(current.args.offset, current.args.local, options.version, options.mini)\n },\n date(tree, options) {\n const { current } = tree\n if (!isKeyword(current, schemaKeywords.date)) return undefined\n\n return zodKeywordMapper.date(current.args.type, shouldCoerce(options.coercion, 'dates'), options.version)\n },\n time(tree, options) {\n const { current } = tree\n if (!isKeyword(current, schemaKeywords.time)) return undefined\n\n return zodKeywordMapper.time(current.args.type, shouldCoerce(options.coercion, 'dates'), options.version)\n },\n },\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-fabric'\nimport type { KubbNode } from '@kubb/react-fabric/types'\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 schema: 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 mini?: boolean\n}\n\nexport function Zod({\n name,\n typeName,\n tree,\n schema,\n inferTypeName,\n mapper,\n coercion,\n keysToOmit,\n description,\n wrapOutput,\n version,\n emptySchemaType,\n mini = false,\n}: Props): KubbNode {\n const hasTuple = !!SchemaGenerator.find(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 // In mini mode, filter out modifiers from the main schema parsing\n const baseSchemas = mini ? parserZod.filterMiniModifiers(schemas) : schemas\n\n const output = baseSchemas\n .map((schema, index) => {\n const siblings = baseSchemas.filter((_, i) => i !== index)\n\n return parserZod.parse({ schema, parent: undefined, current: schema, siblings, name }, { mapper, coercion, wrapOutput, version, mini })\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 (!mini && 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 if (!mini) {\n if (firstSchema && isKeyword(firstSchema, schemaKeywords.ref)) {\n if (version === '3') {\n suffix = '.schema'\n } else {\n suffix = '.unwrap()'\n }\n }\n }\n\n const emptyValue = parserZod.parse(\n {\n schema,\n parent: undefined,\n current: {\n keyword: schemaKeywords[emptySchemaType],\n },\n siblings: [],\n },\n { mapper, coercion, wrapOutput, version, mini },\n )\n\n let baseSchemaOutput =\n [output, keysToOmit?.length ? `${suffix}.omit({ ${keysToOmit.map((key) => `'${key}': true`).join(',')} })` : undefined].filter(Boolean).join('') ||\n emptyValue ||\n ''\n\n // For mini mode, wrap the output with modifiers using the parser function\n if (mini) {\n baseSchemaOutput = parserZod.wrapWithMiniModifiers(baseSchemaOutput, parserZod.extractMiniModifiers(schemas))\n }\n\n const wrappedSchemaOutput = wrapOutput ? wrapOutput({ output: baseSchemaOutput, schema }) || baseSchemaOutput : baseSchemaOutput\n const finalOutput = typeName ? `${wrappedSchemaOutput} as unknown as ${version === '4' ? 'z.ZodType' : '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-me856BK6.js","names":["checks: string[]","order: string[]","schema","parserZod.sort","parserZod.filterMiniModifiers","parserZod.parse","schema","parserZod.wrapWithMiniModifiers","parserZod.extractMiniModifiers"],"sources":["../src/components/Operations.tsx","../src/parser.ts","../src/components/Zod.tsx"],"sourcesContent":["import transformers from '@kubb/core/transformers'\nimport type { HttpMethod, Operation } from '@kubb/oas'\nimport type { SchemaNames } from '@kubb/plugin-oas/hooks'\nimport { Const, File, Type } from '@kubb/react-fabric'\nimport type { KubbNode } from '@kubb/react-fabric/types'\n\ntype Props = {\n name: string\n operations: Array<{ operation: Operation; data: SchemaNames }>\n}\n\nexport function Operations({ name, operations }: Props): KubbNode {\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=\"OperationSchema\" isExportable isIndexable>\n <Type name=\"OperationSchema\" export>{`{\n readonly request: z.ZodTypeAny | undefined;\n readonly parameters: {\n readonly path: z.ZodTypeAny | undefined;\n readonly query: z.ZodTypeAny | undefined;\n readonly header: z.ZodTypeAny | undefined;\n };\n readonly responses: {\n readonly [status: number]: z.ZodTypeAny;\n readonly default: z.ZodTypeAny;\n };\n readonly errors: {\n readonly [status: number]: z.ZodTypeAny;\n };\n}`}</Type>\n </File.Source>\n <File.Source name=\"OperationsMap\" isExportable isIndexable>\n <Type name=\"OperationsMap\" export>\n {'Record<string, OperationSchema>'}\n </Type>\n </File.Source>\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'\n\nimport type { Schema, SchemaMapper } from '@kubb/plugin-oas'\nimport { createParser, findSchemaKeyword, isKeyword, SchemaGenerator, type SchemaKeywordMapper, schemaKeywords } from '@kubb/plugin-oas'\n\n//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)\n// also include shouldCoerce\n\n/**\n * Helper to build string/array length constraint checks for Zod Mini mode\n */\nfunction buildLengthChecks(min?: number, max?: number): string[] {\n const checks: string[] = []\n if (min !== undefined) checks.push(`z.minLength(${min})`)\n if (max !== undefined) checks.push(`z.maxLength(${max})`)\n return checks\n}\n\nconst zodKeywordMapper = {\n any: () => 'z.any()',\n unknown: () => 'z.unknown()',\n void: () => 'z.void()',\n number: (coercion?: boolean, min?: number, max?: number, exclusiveMinimum?: number, exclusiveMaximum?: number, mini?: boolean) => {\n if (mini) {\n const checks: string[] = []\n if (min !== undefined) checks.push(`z.minimum(${min})`)\n if (max !== undefined) checks.push(`z.maximum(${max})`)\n if (exclusiveMinimum !== undefined) checks.push(`z.minimum(${exclusiveMinimum}, { exclusive: true })`)\n if (exclusiveMaximum !== undefined) checks.push(`z.maximum(${exclusiveMaximum}, { exclusive: true })`)\n if (checks.length > 0) {\n return `z.number().check(${checks.join(', ')})`\n }\n return 'z.number()'\n }\n return [\n coercion ? 'z.coerce.number()' : 'z.number()',\n min !== undefined ? `.min(${min})` : undefined,\n max !== undefined ? `.max(${max})` : undefined,\n exclusiveMinimum !== undefined ? `.gt(${exclusiveMinimum})` : undefined,\n exclusiveMaximum !== undefined ? `.lt(${exclusiveMaximum})` : undefined,\n ]\n .filter(Boolean)\n .join('')\n },\n integer: (coercion?: boolean, min?: number, max?: number, version: '3' | '4' = '3', exclusiveMinimum?: number, exclusiveMaximum?: number, mini?: boolean) => {\n if (mini) {\n const checks: string[] = []\n if (min !== undefined) checks.push(`z.minimum(${min})`)\n if (max !== undefined) checks.push(`z.maximum(${max})`)\n if (exclusiveMinimum !== undefined) checks.push(`z.minimum(${exclusiveMinimum}, { exclusive: true })`)\n if (exclusiveMaximum !== undefined) checks.push(`z.maximum(${exclusiveMaximum}, { exclusive: true })`)\n if (checks.length > 0) {\n return `z.int().check(${checks.join(', ')})`\n }\n return 'z.int()'\n }\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 exclusiveMinimum !== undefined ? `.gt(${exclusiveMinimum})` : undefined,\n exclusiveMaximum !== undefined ? `.lt(${exclusiveMaximum})` : 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, mini?: boolean) => {\n if (mini) {\n const checks = buildLengthChecks(min, max)\n if (checks.length > 0) {\n return `z.string().check(${checks.join(', ')})`\n }\n return 'z.string()'\n }\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: (value?: string) => {\n if (value) {\n return `z.nullable(${value})`\n }\n return '.nullable()'\n },\n null: () => 'z.null()',\n nullish: (value?: string) => {\n if (value) {\n return `z.nullish(${value})`\n }\n return '.nullish()'\n },\n array: (items: string[] = [], min?: number, max?: number, unique?: boolean, mini?: boolean) => {\n if (mini) {\n const checks = buildLengthChecks(min, max)\n if (unique) checks.push(`z.refine(items => new Set(items).size === items.length, { message: \"Array entries must be unique\" })`)\n if (checks.length > 0) {\n return `z.array(${items?.join('')}).check(${checks.join(', ')})`\n }\n return `z.array(${items?.join('')})`\n }\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', mini?: boolean) => {\n // Zod Mini doesn't support .datetime() method, use plain string\n if (mini) {\n return 'z.string()'\n }\n\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', min?: number, max?: number, mini?: boolean) => {\n if (mini) {\n const checks = buildLengthChecks(min, max)\n if (checks.length > 0) {\n return `z.uuid().check(${checks.join(', ')})`\n }\n return 'z.uuid()'\n }\n return [\n coercion ? (version === '4' ? 'z.uuid()' : 'z.coerce.string().uuid()') : version === '4' ? 'z.uuid()' : 'z.string().uuid()',\n min !== undefined ? `.min(${min})` : undefined,\n max !== undefined ? `.max(${max})` : undefined,\n ]\n .filter(Boolean)\n .join('')\n },\n url: (coercion?: boolean, version: '3' | '4' = '3', min?: number, max?: number, mini?: boolean) => {\n if (mini) {\n const checks = buildLengthChecks(min, max)\n if (checks.length > 0) {\n return `z.url().check(${checks.join(', ')})`\n }\n return 'z.url()'\n }\n return [\n coercion ? (version === '4' ? 'z.url()' : 'z.coerce.string().url()') : version === '4' ? 'z.url()' : 'z.string().url()',\n min !== undefined ? `.min(${min})` : undefined,\n max !== undefined ? `.max(${max})` : undefined,\n ]\n .filter(Boolean)\n .join('')\n },\n default: (value?: string | number | boolean | object, innerSchema?: string, mini?: boolean) => {\n if (mini && innerSchema) {\n const defaultValue = typeof value === 'object' ? '{}' : (value ?? '')\n return `z._default(${innerSchema}, ${defaultValue})`\n }\n\n if (typeof value === 'object') {\n return '.default({})'\n }\n\n if (value === undefined) {\n return '.default()'\n }\n\n if (typeof value === 'string' && !value) {\n return `.default('')`\n }\n\n return `.default(${value ?? ''})`\n },\n and: (items: string[] = [], mini?: boolean) => {\n // zod/mini doesn't support .and() method, so we can't use intersection types\n // In mini mode, we try to extract and append .check() calls instead\n if (mini && items.length > 0) {\n // Try to extract check calls from additional items\n const checks: string[] = []\n for (const item of items) {\n // Extract .check(...) from patterns like \"z.string().check(...)\"\n // Need to handle nested parentheses properly\n const checkStart = item.indexOf('.check(')\n if (checkStart !== -1) {\n // Find the matching closing parenthesis\n let depth = 0\n let i = checkStart + 7 // length of '.check('\n let checkContent = ''\n while (i < item.length) {\n const char = item[i]\n if (char === '(') depth++\n else if (char === ')') {\n if (depth === 0) break\n depth--\n }\n checkContent += char\n i++\n }\n if (checkContent) {\n checks.push(checkContent)\n }\n }\n }\n\n if (checks.length > 0) {\n // Append checks to the base schema\n return `.check(${checks.join(', ')})`\n }\n\n // If we can't extract checks, just use the first schema (limitation)\n return ''\n }\n return items?.map((item) => `.and(${item})`).join('')\n },\n describe: (value = '', innerSchema?: string, mini?: boolean) => {\n if (mini) {\n return undefined\n }\n\n if (innerSchema) {\n return `z.describe(${innerSchema}, ${value})`\n }\n return `.describe(${value})`\n },\n max: undefined,\n min: undefined,\n optional: (value?: string) => {\n if (value) {\n return `z.optional(${value})`\n }\n return '.optional()'\n },\n matches: (value = '', coercion?: boolean, mini?: boolean, min?: number, max?: number) => {\n if (mini) {\n const checks = buildLengthChecks(min, max)\n checks.push(`z.regex(${value})`)\n return `z.string().check(${checks.join(', ')})`\n }\n return [\n coercion ? 'z.coerce.string()' : 'z.string()',\n min !== undefined ? `.min(${min})` : undefined,\n max !== undefined ? `.max(${max})` : undefined,\n `.regex(${value})`,\n ]\n .filter(Boolean)\n .join('')\n },\n email: (coercion?: boolean, version: '3' | '4' = '3', min?: number, max?: number, mini?: boolean) => {\n if (mini) {\n const checks = buildLengthChecks(min, max)\n if (checks.length > 0) {\n return `z.email().check(${checks.join(', ')})`\n }\n return 'z.email()'\n }\n return [\n coercion ? (version === '4' ? 'z.email()' : 'z.coerce.string().email()') : version === '4' ? 'z.email()' : 'z.string().email()',\n min !== undefined ? `.min(${min})` : undefined,\n max !== undefined ? `.max(${max})` : undefined,\n ]\n .filter(Boolean)\n .join('')\n },\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 `z.lazy(() => ${value})`\n },\n blob: () => 'z.instanceof(File)',\n deprecated: undefined,\n example: undefined,\n schema: undefined,\n catchall: (value?: string, mini?: boolean) => {\n // Zod Mini doesn't support .catchall() method\n if (mini) {\n return undefined\n }\n return value ? `.catchall(${value})` : undefined\n },\n name: undefined,\n exclusiveMinimum: undefined,\n exclusiveMaximum: 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\ntype MiniModifiers = {\n hasOptional?: boolean\n hasNullable?: boolean\n hasNullish?: boolean\n defaultValue?: string | number | true | object\n}\n\n/**\n * Keywords that represent modifiers for mini mode\n * These are separated from the base schema and wrapped around it\n * Note: describe is included to filter it out, but won't be wrapped (Zod Mini doesn't support describe)\n */\nexport const miniModifierKeywords = [schemaKeywords.optional, schemaKeywords.nullable, schemaKeywords.nullish, schemaKeywords.default, schemaKeywords.describe]\n\n/**\n * Extracts mini mode modifiers from a schemas array\n * This can be reused by other parsers (e.g., valibot) that need similar functionality\n * Note: describe is not included as Zod Mini doesn't support it\n */\nexport function extractMiniModifiers(schemas: Schema[]): MiniModifiers {\n const defaultSchema = schemas.find((item) => isKeyword(item, schemaKeywords.default)) as { keyword: string; args: unknown } | undefined\n\n return {\n hasOptional: schemas.some((item) => isKeyword(item, schemaKeywords.optional)),\n hasNullable: schemas.some((item) => isKeyword(item, schemaKeywords.nullable)),\n hasNullish: schemas.some((item) => isKeyword(item, schemaKeywords.nullish)),\n defaultValue: defaultSchema?.args as string | number | true | object | undefined,\n }\n}\n\n/**\n * Filters out modifier keywords from schemas for mini mode base schema parsing\n * This can be reused by other parsers (e.g., valibot) that need similar functionality\n */\nexport function filterMiniModifiers(schemas: Schema[]): Schema[] {\n return schemas.filter((item) => !miniModifierKeywords.some((keyword) => isKeyword(item, keyword)))\n}\n\n/**\n * Wraps an output string with Zod Mini functional modifiers\n * Order: default (innermost) -> nullable -> optional (outermost)\n * OR: default -> nullish\n * Note: describe is not supported in Zod Mini and is skipped\n */\nexport function wrapWithMiniModifiers(output: string, modifiers: MiniModifiers): string {\n let result = output\n\n // Apply default first (innermost wrapper)\n if (modifiers.defaultValue !== undefined) {\n result = zodKeywordMapper.default(modifiers.defaultValue, result, true)!\n }\n\n // Apply nullish, nullable, or optional (outer wrappers for optionality)\n if (modifiers.hasNullish) {\n result = zodKeywordMapper.nullish(result)!\n } else {\n if (modifiers.hasNullable) {\n result = zodKeywordMapper.nullable(result)!\n }\n if (modifiers.hasOptional) {\n result = zodKeywordMapper.optional(result)!\n }\n }\n\n return result\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 mapper?: Record<string, string>\n coercion?: boolean | { dates?: boolean; strings?: boolean; numbers?: boolean }\n wrapOutput?: (opts: { output: string; schema: any }) => string | undefined\n version: '3' | '4'\n skipLazyForRefs?: boolean\n mini?: boolean\n}\n\n// Create the parser using createParser\nexport const parse = createParser<string, ParserOptions>({\n mapper: zodKeywordMapper,\n handlers: {\n union(tree, options) {\n const { current, schema, parent, name, siblings } = tree\n if (!isKeyword(current, schemaKeywords.union)) return undefined\n\n // zod union type needs at least 2 items\n if (Array.isArray(current.args) && current.args.length === 1) {\n return this.parse({ schema, parent, 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((it, _index, siblings) => this.parse({ schema, parent: current, name, current: it, siblings }, options))\n .filter(Boolean),\n )\n },\n and(tree, options) {\n const { current, schema, name } = tree\n if (!isKeyword(current, schemaKeywords.and)) return undefined\n\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((it: Schema, _index, siblings) => this.parse({ schema, parent: current, name, current: it, siblings }, options))\n .filter(Boolean)\n\n return `${items.slice(0, 1)}${zodKeywordMapper.and(items.slice(1), options.mini)}`\n },\n array(tree, options) {\n const { current, schema, name } = tree\n if (!isKeyword(current, schemaKeywords.array)) return undefined\n\n return zodKeywordMapper.array(\n sort(current.args.items)\n .map((it, _index, siblings) => {\n return this.parse({ schema, parent: current, name, current: it, siblings }, options)\n })\n .filter(Boolean),\n current.args.min,\n current.args.max,\n current.args.unique,\n options.mini,\n )\n },\n enum(tree, options) {\n const { current, schema, name } = tree\n if (!isKeyword(current, schemaKeywords.enum)) return undefined\n\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 this.parse({ schema, parent: current, 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((it, _index, siblings) => {\n return this.parse({ schema, parent: current, name, current: it, 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 ref(tree, options) {\n const { current } = tree\n if (!isKeyword(current, schemaKeywords.ref)) return undefined\n\n // Skip z.lazy wrapper if skipLazyForRefs is true (e.g., inside v4 getters)\n if (options.skipLazyForRefs) {\n return current.args?.name\n }\n return zodKeywordMapper.ref(current.args?.name)\n },\n object(tree, options) {\n const { current, schema, name } = tree\n if (!isKeyword(current, schemaKeywords.object)) return undefined\n\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(([propertyName, schemas]) => {\n const nameSchema = schemas.find((it) => it.keyword === schemaKeywords.name) as SchemaKeywordMapper['name']\n const isNullable = schemas.some((it) => isKeyword(it, schemaKeywords.nullable))\n const isNullish = schemas.some((it) => isKeyword(it, schemaKeywords.nullish))\n const isOptional = schemas.some((it) => isKeyword(it, schemaKeywords.optional))\n const hasRef = !!SchemaGenerator.find(schemas, schemaKeywords.ref)\n\n const mappedName = nameSchema?.args || propertyName\n\n // custom mapper(pluginOptions)\n if (options.mapper?.[mappedName]) {\n return `\"${propertyName}\": ${options.mapper?.[mappedName]}`\n }\n\n const baseSchemaOutput = sort(schemas)\n .filter((schema) => {\n return !isKeyword(schema, schemaKeywords.optional) && !isKeyword(schema, schemaKeywords.nullable) && !isKeyword(schema, schemaKeywords.nullish)\n })\n .map((it) => {\n // For v4 with refs, skip z.lazy wrapper since the getter provides lazy evaluation\n const skipLazyForRefs = options.version === '4' && hasRef\n return this.parse({ schema, parent: current, name, current: it, siblings: schemas }, { ...options, skipLazyForRefs })\n })\n .filter(Boolean)\n .join('')\n\n const objectValue = options.wrapOutput\n ? options.wrapOutput({ output: baseSchemaOutput, schema: schema?.properties?.[propertyName] }) || baseSchemaOutput\n : baseSchemaOutput\n\n if (options.version === '4' && hasRef) {\n // In mini mode, use functional wrappers instead of chainable methods\n if (options.mini) {\n // both optional and nullable\n if (isNullish) {\n return `get \"${propertyName}\"(){\n return ${zodKeywordMapper.nullish(objectValue)}\n }`\n }\n\n // undefined\n if (isOptional) {\n return `get \"${propertyName}\"(){\n return ${zodKeywordMapper.optional(objectValue)}\n }`\n }\n\n // null\n if (isNullable) {\n return `get \"${propertyName}\"(){\n return ${zodKeywordMapper.nullable(objectValue)}\n }`\n }\n\n return `get \"${propertyName}\"(){\n return ${objectValue}\n }`\n }\n\n // Non-mini mode uses chainable methods\n // both optional and nullable\n if (isNullish) {\n return `get \"${propertyName}\"(){\n return ${objectValue}${zodKeywordMapper.nullish()}\n }`\n }\n\n // undefined\n if (isOptional) {\n return `get \"${propertyName}\"(){\n return ${objectValue}${zodKeywordMapper.optional()}\n }`\n }\n\n // null\n if (isNullable) {\n return `get \"${propertyName}\"(){\n return ${objectValue}${zodKeywordMapper.nullable()}\n }`\n }\n\n return `get \"${propertyName}\"(){\n return ${objectValue}\n }`\n }\n\n // both optional and nullable\n if (isNullish) {\n return `\"${propertyName}\": ${objectValue}${zodKeywordMapper.nullish()}`\n }\n\n // undefined\n if (isOptional) {\n return `\"${propertyName}\": ${zodKeywordMapper.optional(objectValue)}`\n }\n\n // null\n if (isNullable) {\n return `\"${propertyName}\": ${zodKeywordMapper.nullable(objectValue)}`\n }\n\n return `\"${propertyName}\": ${objectValue}`\n })\n .join(',\\n')\n\n const additionalProperties = current.args?.additionalProperties?.length\n ? current.args.additionalProperties\n .map((it, _index, siblings) => this.parse({ schema, parent: current, name, current: it, 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, options.mini) : undefined,\n ].filter(Boolean)\n\n return text.join('')\n },\n tuple(tree, options) {\n const { current, schema, name } = tree\n if (!isKeyword(current, schemaKeywords.tuple)) return undefined\n\n return zodKeywordMapper.tuple(\n current.args.items.map((it, _index, siblings) => this.parse({ schema, parent: current, name, current: it, siblings }, options)).filter(Boolean),\n )\n },\n const(tree, _options) {\n const { current } = tree\n if (!isKeyword(current, schemaKeywords.const)) return undefined\n\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(typeof current.args.value === 'boolean' ? current.args.value : undefined)\n }\n return zodKeywordMapper.const(transformers.stringify(current.args.value))\n },\n matches(tree, options) {\n const { current, siblings } = tree\n if (!isKeyword(current, schemaKeywords.matches)) return undefined\n\n // Early exit: if siblings contain both matches and ref → skip matches entirely\n const hasRef = siblings.some((it) => isKeyword(it, schemaKeywords.ref))\n if (hasRef) {\n return undefined // strip matches\n }\n\n const minSchema = findSchemaKeyword(siblings, 'min')\n const maxSchema = findSchemaKeyword(siblings, 'max')\n\n if (current.args) {\n return zodKeywordMapper.matches(\n transformers.toRegExpString(current.args, null),\n shouldCoerce(options.coercion, 'strings'),\n options.mini,\n minSchema?.args,\n maxSchema?.args,\n )\n }\n return undefined\n },\n default(tree, options) {\n const { current } = tree\n if (!isKeyword(current, schemaKeywords.default)) return undefined\n\n // In mini mode, default is handled by wrapWithMiniModifiers\n if (options.mini) {\n return undefined\n }\n if (current.args !== undefined) {\n return zodKeywordMapper.default(current.args)\n }\n // When args is undefined, call the mapper without arguments\n return zodKeywordMapper.default()\n },\n describe(tree, options) {\n const { current } = tree\n if (!isKeyword(current, schemaKeywords.describe)) return undefined\n\n if (current.args) {\n return zodKeywordMapper.describe(transformers.stringify(current.args.toString()), undefined, options.mini)\n }\n return undefined\n },\n string(tree, options) {\n const { current, siblings } = tree\n if (!isKeyword(current, schemaKeywords.string)) return undefined\n\n const minSchema = findSchemaKeyword(siblings, 'min')\n const maxSchema = findSchemaKeyword(siblings, 'max')\n\n return zodKeywordMapper.string(shouldCoerce(options.coercion, 'strings'), minSchema?.args, maxSchema?.args, options.mini)\n },\n uuid(tree, options) {\n const { current, siblings } = tree\n if (!isKeyword(current, schemaKeywords.uuid)) return undefined\n\n const minSchema = findSchemaKeyword(siblings, 'min')\n const maxSchema = findSchemaKeyword(siblings, 'max')\n\n return zodKeywordMapper.uuid(shouldCoerce(options.coercion, 'strings'), options.version, minSchema?.args, maxSchema?.args, options.mini)\n },\n email(tree, options) {\n const { current, siblings } = tree\n if (!isKeyword(current, schemaKeywords.email)) return undefined\n\n const minSchema = findSchemaKeyword(siblings, 'min')\n const maxSchema = findSchemaKeyword(siblings, 'max')\n\n return zodKeywordMapper.email(shouldCoerce(options.coercion, 'strings'), options.version, minSchema?.args, maxSchema?.args, options.mini)\n },\n url(tree, options) {\n const { current, siblings } = tree\n if (!isKeyword(current, schemaKeywords.url)) return undefined\n\n const minSchema = findSchemaKeyword(siblings, 'min')\n const maxSchema = findSchemaKeyword(siblings, 'max')\n\n return zodKeywordMapper.url(shouldCoerce(options.coercion, 'strings'), options.version, minSchema?.args, maxSchema?.args, options.mini)\n },\n number(tree, options) {\n const { current, siblings } = tree\n if (!isKeyword(current, schemaKeywords.number)) return undefined\n\n const minSchema = findSchemaKeyword(siblings, 'min')\n const maxSchema = findSchemaKeyword(siblings, 'max')\n const exclusiveMinimumSchema = findSchemaKeyword(siblings, 'exclusiveMinimum')\n const exclusiveMaximumSchema = findSchemaKeyword(siblings, 'exclusiveMaximum')\n\n return zodKeywordMapper.number(\n shouldCoerce(options.coercion, 'numbers'),\n minSchema?.args,\n maxSchema?.args,\n exclusiveMinimumSchema?.args,\n exclusiveMaximumSchema?.args,\n options.mini,\n )\n },\n integer(tree, options) {\n const { current, siblings } = tree\n if (!isKeyword(current, schemaKeywords.integer)) return undefined\n\n const minSchema = findSchemaKeyword(siblings, 'min')\n const maxSchema = findSchemaKeyword(siblings, 'max')\n const exclusiveMinimumSchema = findSchemaKeyword(siblings, 'exclusiveMinimum')\n const exclusiveMaximumSchema = findSchemaKeyword(siblings, 'exclusiveMaximum')\n\n return zodKeywordMapper.integer(\n shouldCoerce(options.coercion, 'numbers'),\n minSchema?.args,\n maxSchema?.args,\n options.version,\n exclusiveMinimumSchema?.args,\n exclusiveMaximumSchema?.args,\n options.mini,\n )\n },\n datetime(tree, options) {\n const { current } = tree\n if (!isKeyword(current, schemaKeywords.datetime)) return undefined\n\n return zodKeywordMapper.datetime(current.args.offset, current.args.local, options.version, options.mini)\n },\n date(tree, options) {\n const { current } = tree\n if (!isKeyword(current, schemaKeywords.date)) return undefined\n\n return zodKeywordMapper.date(current.args.type, shouldCoerce(options.coercion, 'dates'), options.version)\n },\n time(tree, options) {\n const { current } = tree\n if (!isKeyword(current, schemaKeywords.time)) return undefined\n\n return zodKeywordMapper.time(current.args.type, shouldCoerce(options.coercion, 'dates'), options.version)\n },\n },\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-fabric'\nimport type { KubbNode } from '@kubb/react-fabric/types'\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 schema: 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 mini?: boolean\n}\n\nexport function Zod({\n name,\n typeName,\n tree,\n schema,\n inferTypeName,\n mapper,\n coercion,\n keysToOmit,\n description,\n wrapOutput,\n version,\n emptySchemaType,\n mini = false,\n}: Props): KubbNode {\n const hasTuple = !!SchemaGenerator.find(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 // In mini mode, filter out modifiers from the main schema parsing\n const baseSchemas = mini ? parserZod.filterMiniModifiers(schemas) : schemas\n\n const output = baseSchemas\n .map((schema, index) => {\n const siblings = baseSchemas.filter((_, i) => i !== index)\n\n return parserZod.parse({ schema, parent: undefined, current: schema, siblings, name }, { mapper, coercion, wrapOutput, version, mini })\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 (!mini && 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 if (!mini) {\n if (firstSchema && isKeyword(firstSchema, schemaKeywords.ref)) {\n if (version === '3') {\n suffix = '.schema'\n } else {\n suffix = '.unwrap()'\n }\n }\n }\n\n const emptyValue = parserZod.parse(\n {\n schema,\n parent: undefined,\n current: {\n keyword: schemaKeywords[emptySchemaType],\n },\n siblings: [],\n },\n { mapper, coercion, wrapOutput, version, mini },\n )\n\n let baseSchemaOutput =\n [output, keysToOmit?.length ? `${suffix}.omit({ ${keysToOmit.map((key) => `'${key}': true`).join(',')} })` : undefined].filter(Boolean).join('') ||\n emptyValue ||\n ''\n\n // For mini mode, wrap the output with modifiers using the parser function\n if (mini) {\n baseSchemaOutput = parserZod.wrapWithMiniModifiers(baseSchemaOutput, parserZod.extractMiniModifiers(schemas))\n }\n\n const wrappedSchemaOutput = wrapOutput ? wrapOutput({ output: baseSchemaOutput, schema }) || baseSchemaOutput : baseSchemaOutput\n const finalOutput = typeName ? `${wrappedSchemaOutput} as unknown as ${version === '4' ? 'z.ZodType' : '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,cAA+B;CAChE,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;EACE,oBAAC,KAAK;GAAO,MAAK;GAAkB;GAAa;aAC/C,oBAAC;IAAK,MAAK;IAAkB;cAAQ;;;;;;;;;;;;;;;KAcnC;IACU;EACd,oBAAC,KAAK;GAAO,MAAK;GAAgB;GAAa;aAC7C,oBAAC;IAAK,MAAK;IAAgB;cACxB;KACI;IACK;EACd,oBAAC,KAAK;GAAa;GAAM;GAAa;aACpC,oBAAC;IAAM;IAAa;IAAM;cACvB,IAAI,aAAa,gBAAgB,eAAe,CAAC;KAC5C;IACI;EACd,oBAAC,KAAK;GAAO,MAAM;GAAS;GAAa;aACvC,oBAAC;IAAM;IAAO,MAAM;IAAS;cAC1B,IAAI,aAAa,gBAAgB,UAAU,CAAC;KACvC;IACI;KACb;;;;;;;;ACxDP,SAAS,kBAAkB,KAAc,KAAwB;CAC/D,MAAMA,SAAmB,EAAE;AAC3B,KAAI,QAAQ,OAAW,QAAO,KAAK,eAAe,IAAI,GAAG;AACzD,KAAI,QAAQ,OAAW,QAAO,KAAK,eAAe,IAAI,GAAG;AACzD,QAAO;;AAGT,MAAM,mBAAmB;CACvB,WAAW;CACX,eAAe;CACf,YAAY;CACZ,SAAS,UAAoB,KAAc,KAAc,kBAA2B,kBAA2B,SAAmB;AAChI,MAAI,MAAM;GACR,MAAMA,SAAmB,EAAE;AAC3B,OAAI,QAAQ,OAAW,QAAO,KAAK,aAAa,IAAI,GAAG;AACvD,OAAI,QAAQ,OAAW,QAAO,KAAK,aAAa,IAAI,GAAG;AACvD,OAAI,qBAAqB,OAAW,QAAO,KAAK,aAAa,iBAAiB,wBAAwB;AACtG,OAAI,qBAAqB,OAAW,QAAO,KAAK,aAAa,iBAAiB,wBAAwB;AACtG,OAAI,OAAO,SAAS,EAClB,QAAO,oBAAoB,OAAO,KAAK,KAAK,CAAC;AAE/C,UAAO;;AAET,SAAO;GACL,WAAW,sBAAsB;GACjC,QAAQ,SAAY,QAAQ,IAAI,KAAK;GACrC,QAAQ,SAAY,QAAQ,IAAI,KAAK;GACrC,qBAAqB,SAAY,OAAO,iBAAiB,KAAK;GAC9D,qBAAqB,SAAY,OAAO,iBAAiB,KAAK;GAC/D,CACE,OAAO,QAAQ,CACf,KAAK,GAAG;;CAEb,UAAU,UAAoB,KAAc,KAAc,UAAqB,KAAK,kBAA2B,kBAA2B,SAAmB;AAC3J,MAAI,MAAM;GACR,MAAMA,SAAmB,EAAE;AAC3B,OAAI,QAAQ,OAAW,QAAO,KAAK,aAAa,IAAI,GAAG;AACvD,OAAI,QAAQ,OAAW,QAAO,KAAK,aAAa,IAAI,GAAG;AACvD,OAAI,qBAAqB,OAAW,QAAO,KAAK,aAAa,iBAAiB,wBAAwB;AACtG,OAAI,qBAAqB,OAAW,QAAO,KAAK,aAAa,iBAAiB,wBAAwB;AACtG,OAAI,OAAO,SAAS,EAClB,QAAO,iBAAiB,OAAO,KAAK,KAAK,CAAC;AAE5C,UAAO;;AAET,SAAO;GACL,WAAW,4BAA4B,YAAY,MAAM,YAAY;GACrE,QAAQ,SAAY,QAAQ,IAAI,KAAK;GACrC,QAAQ,SAAY,QAAQ,IAAI,KAAK;GACrC,qBAAqB,SAAY,OAAO,iBAAiB,KAAK;GAC9D,qBAAqB,SAAY,OAAO,iBAAiB,KAAK;GAC/D,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,KAAc,SAAmB;AAC1E,MAAI,MAAM;GACR,MAAM,SAAS,kBAAkB,KAAK,IAAI;AAC1C,OAAI,OAAO,SAAS,EAClB,QAAO,oBAAoB,OAAO,KAAK,KAAK,CAAC;AAE/C,UAAO;;AAET,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,WAAW,UAAmB;AAC5B,MAAI,MACF,QAAO,cAAc,MAAM;AAE7B,SAAO;;CAET,YAAY;CACZ,UAAU,UAAmB;AAC3B,MAAI,MACF,QAAO,aAAa,MAAM;AAE5B,SAAO;;CAET,QAAQ,QAAkB,EAAE,EAAE,KAAc,KAAc,QAAkB,SAAmB;AAC7F,MAAI,MAAM;GACR,MAAM,SAAS,kBAAkB,KAAK,IAAI;AAC1C,OAAI,OAAQ,QAAO,KAAK,uGAAuG;AAC/H,OAAI,OAAO,SAAS,EAClB,QAAO,WAAW,OAAO,KAAK,GAAG,CAAC,UAAU,OAAO,KAAK,KAAK,CAAC;AAEhE,UAAO,WAAW,OAAO,KAAK,GAAG,CAAC;;AAEpC,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,KAAK,SAAmB;AAErF,MAAI,KACF,QAAO;AAGT,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,KAAK,KAAc,KAAc,SAAmB;AAClG,MAAI,MAAM;GACR,MAAM,SAAS,kBAAkB,KAAK,IAAI;AAC1C,OAAI,OAAO,SAAS,EAClB,QAAO,kBAAkB,OAAO,KAAK,KAAK,CAAC;AAE7C,UAAO;;AAET,SAAO;GACL,WAAY,YAAY,MAAM,aAAa,6BAA8B,YAAY,MAAM,aAAa;GACxG,QAAQ,SAAY,QAAQ,IAAI,KAAK;GACrC,QAAQ,SAAY,QAAQ,IAAI,KAAK;GACtC,CACE,OAAO,QAAQ,CACf,KAAK,GAAG;;CAEb,MAAM,UAAoB,UAAqB,KAAK,KAAc,KAAc,SAAmB;AACjG,MAAI,MAAM;GACR,MAAM,SAAS,kBAAkB,KAAK,IAAI;AAC1C,OAAI,OAAO,SAAS,EAClB,QAAO,iBAAiB,OAAO,KAAK,KAAK,CAAC;AAE5C,UAAO;;AAET,SAAO;GACL,WAAY,YAAY,MAAM,YAAY,4BAA6B,YAAY,MAAM,YAAY;GACrG,QAAQ,SAAY,QAAQ,IAAI,KAAK;GACrC,QAAQ,SAAY,QAAQ,IAAI,KAAK;GACtC,CACE,OAAO,QAAQ,CACf,KAAK,GAAG;;CAEb,UAAU,OAA4C,aAAsB,SAAmB;AAC7F,MAAI,QAAQ,YAEV,QAAO,cAAc,YAAY,IADZ,OAAO,UAAU,WAAW,OAAQ,SAAS,GAChB;AAGpD,MAAI,OAAO,UAAU,SACnB,QAAO;AAGT,MAAI,UAAU,OACZ,QAAO;AAGT,MAAI,OAAO,UAAU,YAAY,CAAC,MAChC,QAAO;AAGT,SAAO,YAAY,SAAS,GAAG;;CAEjC,MAAM,QAAkB,EAAE,EAAE,SAAmB;AAG7C,MAAI,QAAQ,MAAM,SAAS,GAAG;GAE5B,MAAMA,SAAmB,EAAE;AAC3B,QAAK,MAAM,QAAQ,OAAO;IAGxB,MAAM,aAAa,KAAK,QAAQ,UAAU;AAC1C,QAAI,eAAe,IAAI;KAErB,IAAI,QAAQ;KACZ,IAAI,IAAI,aAAa;KACrB,IAAI,eAAe;AACnB,YAAO,IAAI,KAAK,QAAQ;MACtB,MAAM,OAAO,KAAK;AAClB,UAAI,SAAS,IAAK;eACT,SAAS,KAAK;AACrB,WAAI,UAAU,EAAG;AACjB;;AAEF,sBAAgB;AAChB;;AAEF,SAAI,aACF,QAAO,KAAK,aAAa;;;AAK/B,OAAI,OAAO,SAAS,EAElB,QAAO,UAAU,OAAO,KAAK,KAAK,CAAC;AAIrC,UAAO;;AAET,SAAO,OAAO,KAAK,SAAS,QAAQ,KAAK,GAAG,CAAC,KAAK,GAAG;;CAEvD,WAAW,QAAQ,IAAI,aAAsB,SAAmB;AAC9D,MAAI,KACF;AAGF,MAAI,YACF,QAAO,cAAc,YAAY,IAAI,MAAM;AAE7C,SAAO,aAAa,MAAM;;CAE5B,KAAK;CACL,KAAK;CACL,WAAW,UAAmB;AAC5B,MAAI,MACF,QAAO,cAAc,MAAM;AAE7B,SAAO;;CAET,UAAU,QAAQ,IAAI,UAAoB,MAAgB,KAAc,QAAiB;AACvF,MAAI,MAAM;GACR,MAAM,SAAS,kBAAkB,KAAK,IAAI;AAC1C,UAAO,KAAK,WAAW,MAAM,GAAG;AAChC,UAAO,oBAAoB,OAAO,KAAK,KAAK,CAAC;;AAE/C,SAAO;GACL,WAAW,sBAAsB;GACjC,QAAQ,SAAY,QAAQ,IAAI,KAAK;GACrC,QAAQ,SAAY,QAAQ,IAAI,KAAK;GACrC,UAAU,MAAM;GACjB,CACE,OAAO,QAAQ,CACf,KAAK,GAAG;;CAEb,QAAQ,UAAoB,UAAqB,KAAK,KAAc,KAAc,SAAmB;AACnG,MAAI,MAAM;GACR,MAAM,SAAS,kBAAkB,KAAK,IAAI;AAC1C,OAAI,OAAO,SAAS,EAClB,QAAO,mBAAmB,OAAO,KAAK,KAAK,CAAC;AAE9C,UAAO;;AAET,SAAO;GACL,WAAY,YAAY,MAAM,cAAc,8BAA+B,YAAY,MAAM,cAAc;GAC3G,QAAQ,SAAY,QAAQ,IAAI,KAAK;GACrC,QAAQ,SAAY,QAAQ,IAAI,KAAK;GACtC,CACE,OAAO,QAAQ,CACf,KAAK,GAAG;;CAEb,WAAW;CACX,UAAU;CACV,UAAU;CACV,OAAO;CACP,UAAU;CACV,WAAW;CACX,MAAM,UAAmB;AACvB,MAAI,CAAC,MACH;AAGF,SAAO,gBAAgB,MAAM;;CAE/B,YAAY;CACZ,YAAY;CACZ,SAAS;CACT,QAAQ;CACR,WAAW,OAAgB,SAAmB;AAE5C,MAAI,KACF;AAEF,SAAO,QAAQ,aAAa,MAAM,KAAK;;CAEzC,MAAM;CACN,kBAAkB;CAClB,kBAAkB;CACnB;;;;AAMD,SAAgB,KAAK,OAA4B;CAC/C,MAAMC,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;;;;;;;AAehF,MAAa,uBAAuB;CAAC,eAAe;CAAU,eAAe;CAAU,eAAe;CAAS,eAAe;CAAS,eAAe;CAAS;;;;;;AAO/J,SAAgB,qBAAqB,SAAkC;CACrE,MAAM,gBAAgB,QAAQ,MAAM,SAAS,UAAU,MAAM,eAAe,QAAQ,CAAC;AAErF,QAAO;EACL,aAAa,QAAQ,MAAM,SAAS,UAAU,MAAM,eAAe,SAAS,CAAC;EAC7E,aAAa,QAAQ,MAAM,SAAS,UAAU,MAAM,eAAe,SAAS,CAAC;EAC7E,YAAY,QAAQ,MAAM,SAAS,UAAU,MAAM,eAAe,QAAQ,CAAC;EAC3E,cAAc,eAAe;EAC9B;;;;;;AAOH,SAAgB,oBAAoB,SAA6B;AAC/D,QAAO,QAAQ,QAAQ,SAAS,CAAC,qBAAqB,MAAM,YAAY,UAAU,MAAM,QAAQ,CAAC,CAAC;;;;;;;;AASpG,SAAgB,sBAAsB,QAAgB,WAAkC;CACtF,IAAI,SAAS;AAGb,KAAI,UAAU,iBAAiB,OAC7B,UAAS,iBAAiB,QAAQ,UAAU,cAAc,QAAQ,KAAK;AAIzE,KAAI,UAAU,WACZ,UAAS,iBAAiB,QAAQ,OAAO;MACpC;AACL,MAAI,UAAU,YACZ,UAAS,iBAAiB,SAAS,OAAO;AAE5C,MAAI,UAAU,YACZ,UAAS,iBAAiB,SAAS,OAAO;;AAI9C,QAAO;;AAGT,MAAM,gBAAgB,UAAiD,SAAmD;AACxH,KAAI,aAAa,OACf,QAAO;AAET,KAAI,OAAO,aAAa,UACtB,QAAO;AAGT,QAAO,CAAC,CAAC,SAAS;;AAapB,MAAa,QAAQ,aAAoC;CACvD,QAAQ;CACR,UAAU;EACR,MAAM,MAAM,SAAS;GACnB,MAAM,EAAE,SAAS,QAAQ,QAAQ,MAAM,aAAa;AACpD,OAAI,CAAC,UAAU,SAAS,eAAe,MAAM,CAAE,QAAO;AAGtD,OAAI,MAAM,QAAQ,QAAQ,KAAK,IAAI,QAAQ,KAAK,WAAW,EACzD,QAAO,KAAK,MAAM;IAAE;IAAQ;IAAQ;IAAM,SAAS,QAAQ,KAAK;IAAc;IAAU,EAAE,QAAQ;AAEpG,OAAI,MAAM,QAAQ,QAAQ,KAAK,IAAI,CAAC,QAAQ,KAAK,OAC/C,QAAO;AAGT,UAAO,iBAAiB,MACtB,KAAK,QAAQ,KAAK,CACf,KAAK,IAAI,QAAQ,eAAa,KAAK,MAAM;IAAE;IAAQ,QAAQ;IAAS;IAAM,SAAS;IAAI;IAAU,EAAE,QAAQ,CAAC,CAC5G,OAAO,QAAQ,CACnB;;EAEH,IAAI,MAAM,SAAS;GACjB,MAAM,EAAE,SAAS,QAAQ,SAAS;AAClC,OAAI,CAAC,UAAU,SAAS,eAAe,IAAI,CAAE,QAAO;GAEpD,MAAM,QAAQ,KAAK,QAAQ,KAAK,CAC7B,QAAQ,aAAmB;AAC1B,WAAO,CAAC,CAAC,eAAe,UAAU,eAAe,SAAS,CAAC,SAASC,SAAO,QAA0C;KACrH,CACD,KAAK,IAAY,QAAQ,aAAa,KAAK,MAAM;IAAE;IAAQ,QAAQ;IAAS;IAAM,SAAS;IAAI;IAAU,EAAE,QAAQ,CAAC,CACpH,OAAO,QAAQ;AAElB,UAAO,GAAG,MAAM,MAAM,GAAG,EAAE,GAAG,iBAAiB,IAAI,MAAM,MAAM,EAAE,EAAE,QAAQ,KAAK;;EAElF,MAAM,MAAM,SAAS;GACnB,MAAM,EAAE,SAAS,QAAQ,SAAS;AAClC,OAAI,CAAC,UAAU,SAAS,eAAe,MAAM,CAAE,QAAO;AAEtD,UAAO,iBAAiB,MACtB,KAAK,QAAQ,KAAK,MAAM,CACrB,KAAK,IAAI,QAAQ,aAAa;AAC7B,WAAO,KAAK,MAAM;KAAE;KAAQ,QAAQ;KAAS;KAAM,SAAS;KAAI;KAAU,EAAE,QAAQ;KACpF,CACD,OAAO,QAAQ,EAClB,QAAQ,KAAK,KACb,QAAQ,KAAK,KACb,QAAQ,KAAK,QACb,QAAQ,KACT;;EAEH,KAAK,MAAM,SAAS;GAClB,MAAM,EAAE,SAAS,QAAQ,SAAS;AAClC,OAAI,CAAC,UAAU,SAAS,eAAe,KAAK,CAAE,QAAO;AAErD,OAAI,QAAQ,KAAK,SAAS;AACxB,QAAI,QAAQ,KAAK,MAAM,WAAW,GAAG;KACnC,MAAM,QAAQ;MACZ,SAAS,eAAe;MACxB,MAAM,QAAQ,KAAK,MAAM;MAC1B;AACD,YAAO,KAAK,MAAM;MAAE;MAAQ,QAAQ;MAAS;MAAM,SAAS;MAAO,UAAU,CAAC,MAAM;MAAE,EAAE,QAAQ;;AAGlG,WAAO,iBAAiB,MACtB,QAAQ,KAAK,MACV,KAAK,cAAY;KAChB,SAAS,eAAe;KACxB,MAAMA;KACP,EAAE,CACF,KAAK,IAAI,QAAQ,aAAa;AAC7B,YAAO,KAAK,MAAM;MAAE;MAAQ,QAAQ;MAAS;MAAM,SAAS;MAAI;MAAU,EAAE,QAAQ;MACpF,CACD,OAAO,QAAQ,CACnB;;AAGH,UAAO,iBAAiB,KACtB,QAAQ,KAAK,MAAM,KAAK,aAAW;AACjC,QAAIA,SAAO,WAAW,UACpB,QAAO,aAAa,UAAUA,SAAO,MAAM;AAG7C,QAAIA,SAAO,WAAW,SACpB,QAAO,aAAa,UAAUA,SAAO,MAAM;AAE7C,WAAO,aAAa,UAAUA,SAAO,MAAM;KAC3C,CACH;;EAEH,IAAI,MAAM,SAAS;GACjB,MAAM,EAAE,YAAY;AACpB,OAAI,CAAC,UAAU,SAAS,eAAe,IAAI,CAAE,QAAO;AAGpD,OAAI,QAAQ,gBACV,QAAO,QAAQ,MAAM;AAEvB,UAAO,iBAAiB,IAAI,QAAQ,MAAM,KAAK;;EAEjD,OAAO,MAAM,SAAS;GACpB,MAAM,EAAE,SAAS,QAAQ,SAAS;AAClC,OAAI,CAAC,UAAU,SAAS,eAAe,OAAO,CAAE,QAAO;GAOvD,MAAM,aALkB,OAAO,QAAQ,QAAQ,MAAM,cAAc,EAAE,CAAC,CAAC,QAAQ,SAAS;IACtF,MAAMA,WAAS,KAAK;AACpB,WAAOA,YAAU,OAAOA,SAAO,QAAQ;KACvC,CAGC,KAAK,CAAC,cAAc,aAAa;IAChC,MAAM,aAAa,QAAQ,MAAM,OAAO,GAAG,YAAY,eAAe,KAAK;IAC3E,MAAM,aAAa,QAAQ,MAAM,OAAO,UAAU,IAAI,eAAe,SAAS,CAAC;IAC/E,MAAM,YAAY,QAAQ,MAAM,OAAO,UAAU,IAAI,eAAe,QAAQ,CAAC;IAC7E,MAAM,aAAa,QAAQ,MAAM,OAAO,UAAU,IAAI,eAAe,SAAS,CAAC;IAC/E,MAAM,SAAS,CAAC,CAAC,gBAAgB,KAAK,SAAS,eAAe,IAAI;IAElE,MAAM,aAAa,YAAY,QAAQ;AAGvC,QAAI,QAAQ,SAAS,YACnB,QAAO,IAAI,aAAa,KAAK,QAAQ,SAAS;IAGhD,MAAM,mBAAmB,KAAK,QAAQ,CACnC,QAAQ,aAAW;AAClB,YAAO,CAAC,UAAUA,UAAQ,eAAe,SAAS,IAAI,CAAC,UAAUA,UAAQ,eAAe,SAAS,IAAI,CAAC,UAAUA,UAAQ,eAAe,QAAQ;MAC/I,CACD,KAAK,OAAO;KAEX,MAAM,kBAAkB,QAAQ,YAAY,OAAO;AACnD,YAAO,KAAK,MAAM;MAAE;MAAQ,QAAQ;MAAS;MAAM,SAAS;MAAI,UAAU;MAAS,EAAE;MAAE,GAAG;MAAS;MAAiB,CAAC;MACrH,CACD,OAAO,QAAQ,CACf,KAAK,GAAG;IAEX,MAAM,cAAc,QAAQ,aACxB,QAAQ,WAAW;KAAE,QAAQ;KAAkB,QAAQ,QAAQ,aAAa;KAAe,CAAC,IAAI,mBAChG;AAEJ,QAAI,QAAQ,YAAY,OAAO,QAAQ;AAErC,SAAI,QAAQ,MAAM;AAEhB,UAAI,UACF,QAAO,QAAQ,aAAa;yBACnB,iBAAiB,QAAQ,YAAY,CAAC;;AAKjD,UAAI,WACF,QAAO,QAAQ,aAAa;yBACnB,iBAAiB,SAAS,YAAY,CAAC;;AAKlD,UAAI,WACF,QAAO,QAAQ,aAAa;yBACnB,iBAAiB,SAAS,YAAY,CAAC;;AAIlD,aAAO,QAAQ,aAAa;yBACjB,YAAY;;;AAMzB,SAAI,UACF,QAAO,QAAQ,aAAa;yBACjB,cAAc,iBAAiB,SAAS,CAAC;;AAKtD,SAAI,WACF,QAAO,QAAQ,aAAa;yBACjB,cAAc,iBAAiB,UAAU,CAAC;;AAKvD,SAAI,WACF,QAAO,QAAQ,aAAa;wBAClB,cAAc,iBAAiB,UAAU,CAAC;;AAItD,YAAO,QAAQ,aAAa;yBACf,YAAY;;;AAK3B,QAAI,UACF,QAAO,IAAI,aAAa,KAAK,cAAc,iBAAiB,SAAS;AAIvE,QAAI,WACF,QAAO,IAAI,aAAa,KAAK,iBAAiB,SAAS,YAAY;AAIrE,QAAI,WACF,QAAO,IAAI,aAAa,KAAK,iBAAiB,SAAS,YAAY;AAGrE,WAAO,IAAI,aAAa,KAAK;KAC7B,CACD,KAAK,MAAM;GAEd,MAAM,uBAAuB,QAAQ,MAAM,sBAAsB,SAC7D,QAAQ,KAAK,qBACV,KAAK,IAAI,QAAQ,aAAa,KAAK,MAAM;IAAE;IAAQ,QAAQ;IAAS;IAAM,SAAS;IAAI;IAAU,EAAE,QAAQ,CAAC,CAC5G,OAAO,QAAQ,CACf,KAAK,GAAG,GACX;AAOJ,UALa,CACX,iBAAiB,OAAO,YAAY,QAAQ,MAAM,QAAQ,QAAQ,QAAQ,EAC1E,uBAAuB,iBAAiB,SAAS,sBAAsB,QAAQ,KAAK,GAAG,OACxF,CAAC,OAAO,QAAQ,CAEL,KAAK,GAAG;;EAEtB,MAAM,MAAM,SAAS;GACnB,MAAM,EAAE,SAAS,QAAQ,SAAS;AAClC,OAAI,CAAC,UAAU,SAAS,eAAe,MAAM,CAAE,QAAO;AAEtD,UAAO,iBAAiB,MACtB,QAAQ,KAAK,MAAM,KAAK,IAAI,QAAQ,aAAa,KAAK,MAAM;IAAE;IAAQ,QAAQ;IAAS;IAAM,SAAS;IAAI;IAAU,EAAE,QAAQ,CAAC,CAAC,OAAO,QAAQ,CAChJ;;EAEH,MAAM,MAAM,UAAU;GACpB,MAAM,EAAE,YAAY;AACpB,OAAI,CAAC,UAAU,SAAS,eAAe,MAAM,CAAE,QAAO;AAEtD,OAAI,QAAQ,KAAK,WAAW,YAAY,QAAQ,KAAK,UAAU,OAC7D,QAAO,iBAAiB,MAAM,OAAO,QAAQ,KAAK,MAAM,CAAC;AAG3D,OAAI,QAAQ,KAAK,WAAW,aAAa,QAAQ,KAAK,UAAU,OAC9D,QAAO,iBAAiB,MAAM,OAAO,QAAQ,KAAK,UAAU,YAAY,QAAQ,KAAK,QAAQ,OAAU;AAEzG,UAAO,iBAAiB,MAAM,aAAa,UAAU,QAAQ,KAAK,MAAM,CAAC;;EAE3E,QAAQ,MAAM,SAAS;GACrB,MAAM,EAAE,SAAS,aAAa;AAC9B,OAAI,CAAC,UAAU,SAAS,eAAe,QAAQ,CAAE,QAAO;AAIxD,OADe,SAAS,MAAM,OAAO,UAAU,IAAI,eAAe,IAAI,CAAC,CAErE;GAGF,MAAM,YAAY,kBAAkB,UAAU,MAAM;GACpD,MAAM,YAAY,kBAAkB,UAAU,MAAM;AAEpD,OAAI,QAAQ,KACV,QAAO,iBAAiB,QACtB,aAAa,eAAe,QAAQ,MAAM,KAAK,EAC/C,aAAa,QAAQ,UAAU,UAAU,EACzC,QAAQ,MACR,WAAW,MACX,WAAW,KACZ;;EAIL,QAAQ,MAAM,SAAS;GACrB,MAAM,EAAE,YAAY;AACpB,OAAI,CAAC,UAAU,SAAS,eAAe,QAAQ,CAAE,QAAO;AAGxD,OAAI,QAAQ,KACV;AAEF,OAAI,QAAQ,SAAS,OACnB,QAAO,iBAAiB,QAAQ,QAAQ,KAAK;AAG/C,UAAO,iBAAiB,SAAS;;EAEnC,SAAS,MAAM,SAAS;GACtB,MAAM,EAAE,YAAY;AACpB,OAAI,CAAC,UAAU,SAAS,eAAe,SAAS,CAAE,QAAO;AAEzD,OAAI,QAAQ,KACV,QAAO,iBAAiB,SAAS,aAAa,UAAU,QAAQ,KAAK,UAAU,CAAC,EAAE,QAAW,QAAQ,KAAK;;EAI9G,OAAO,MAAM,SAAS;GACpB,MAAM,EAAE,SAAS,aAAa;AAC9B,OAAI,CAAC,UAAU,SAAS,eAAe,OAAO,CAAE,QAAO;GAEvD,MAAM,YAAY,kBAAkB,UAAU,MAAM;GACpD,MAAM,YAAY,kBAAkB,UAAU,MAAM;AAEpD,UAAO,iBAAiB,OAAO,aAAa,QAAQ,UAAU,UAAU,EAAE,WAAW,MAAM,WAAW,MAAM,QAAQ,KAAK;;EAE3H,KAAK,MAAM,SAAS;GAClB,MAAM,EAAE,SAAS,aAAa;AAC9B,OAAI,CAAC,UAAU,SAAS,eAAe,KAAK,CAAE,QAAO;GAErD,MAAM,YAAY,kBAAkB,UAAU,MAAM;GACpD,MAAM,YAAY,kBAAkB,UAAU,MAAM;AAEpD,UAAO,iBAAiB,KAAK,aAAa,QAAQ,UAAU,UAAU,EAAE,QAAQ,SAAS,WAAW,MAAM,WAAW,MAAM,QAAQ,KAAK;;EAE1I,MAAM,MAAM,SAAS;GACnB,MAAM,EAAE,SAAS,aAAa;AAC9B,OAAI,CAAC,UAAU,SAAS,eAAe,MAAM,CAAE,QAAO;GAEtD,MAAM,YAAY,kBAAkB,UAAU,MAAM;GACpD,MAAM,YAAY,kBAAkB,UAAU,MAAM;AAEpD,UAAO,iBAAiB,MAAM,aAAa,QAAQ,UAAU,UAAU,EAAE,QAAQ,SAAS,WAAW,MAAM,WAAW,MAAM,QAAQ,KAAK;;EAE3I,IAAI,MAAM,SAAS;GACjB,MAAM,EAAE,SAAS,aAAa;AAC9B,OAAI,CAAC,UAAU,SAAS,eAAe,IAAI,CAAE,QAAO;GAEpD,MAAM,YAAY,kBAAkB,UAAU,MAAM;GACpD,MAAM,YAAY,kBAAkB,UAAU,MAAM;AAEpD,UAAO,iBAAiB,IAAI,aAAa,QAAQ,UAAU,UAAU,EAAE,QAAQ,SAAS,WAAW,MAAM,WAAW,MAAM,QAAQ,KAAK;;EAEzI,OAAO,MAAM,SAAS;GACpB,MAAM,EAAE,SAAS,aAAa;AAC9B,OAAI,CAAC,UAAU,SAAS,eAAe,OAAO,CAAE,QAAO;GAEvD,MAAM,YAAY,kBAAkB,UAAU,MAAM;GACpD,MAAM,YAAY,kBAAkB,UAAU,MAAM;GACpD,MAAM,yBAAyB,kBAAkB,UAAU,mBAAmB;GAC9E,MAAM,yBAAyB,kBAAkB,UAAU,mBAAmB;AAE9E,UAAO,iBAAiB,OACtB,aAAa,QAAQ,UAAU,UAAU,EACzC,WAAW,MACX,WAAW,MACX,wBAAwB,MACxB,wBAAwB,MACxB,QAAQ,KACT;;EAEH,QAAQ,MAAM,SAAS;GACrB,MAAM,EAAE,SAAS,aAAa;AAC9B,OAAI,CAAC,UAAU,SAAS,eAAe,QAAQ,CAAE,QAAO;GAExD,MAAM,YAAY,kBAAkB,UAAU,MAAM;GACpD,MAAM,YAAY,kBAAkB,UAAU,MAAM;GACpD,MAAM,yBAAyB,kBAAkB,UAAU,mBAAmB;GAC9E,MAAM,yBAAyB,kBAAkB,UAAU,mBAAmB;AAE9E,UAAO,iBAAiB,QACtB,aAAa,QAAQ,UAAU,UAAU,EACzC,WAAW,MACX,WAAW,MACX,QAAQ,SACR,wBAAwB,MACxB,wBAAwB,MACxB,QAAQ,KACT;;EAEH,SAAS,MAAM,SAAS;GACtB,MAAM,EAAE,YAAY;AACpB,OAAI,CAAC,UAAU,SAAS,eAAe,SAAS,CAAE,QAAO;AAEzD,UAAO,iBAAiB,SAAS,QAAQ,KAAK,QAAQ,QAAQ,KAAK,OAAO,QAAQ,SAAS,QAAQ,KAAK;;EAE1G,KAAK,MAAM,SAAS;GAClB,MAAM,EAAE,YAAY;AACpB,OAAI,CAAC,UAAU,SAAS,eAAe,KAAK,CAAE,QAAO;AAErD,UAAO,iBAAiB,KAAK,QAAQ,KAAK,MAAM,aAAa,QAAQ,UAAU,QAAQ,EAAE,QAAQ,QAAQ;;EAE3G,KAAK,MAAM,SAAS;GAClB,MAAM,EAAE,YAAY;AACpB,OAAI,CAAC,UAAU,SAAS,eAAe,KAAK,CAAE,QAAO;AAErD,UAAO,iBAAiB,KAAK,QAAQ,KAAK,MAAM,aAAa,QAAQ,UAAU,QAAQ,EAAE,QAAQ,QAAQ;;EAE5G;CACF,CAAC;;;;ACv1BF,SAAgB,IAAI,EAClB,MACA,UACA,MACA,QACA,eACA,QACA,UACA,YACA,aACA,YACA,SACA,iBACA,OAAO,SACW;CAClB,MAAM,WAAW,CAAC,CAAC,gBAAgB,KAAK,MAAM,eAAe,MAAM;CAEnE,MAAM,UAAUC,KAAe,KAAK,CAAC,QAAQ,SAAS;AACpD,MAAI,aAAa,UAAU,MAAM,eAAe,IAAI,IAAI,UAAU,MAAM,eAAe,IAAI,EACzF,QAAO;AAGT,SAAO;GACP;CAGF,MAAM,cAAc,OAAOC,oBAA8B,QAAQ,GAAG;CAEpE,MAAM,SAAS,YACZ,KAAK,UAAQ,UAAU;EACtB,MAAM,WAAW,YAAY,QAAQ,GAAG,MAAM,MAAM,MAAM;AAE1D,SAAOC,MAAgB;GAAE;GAAQ,QAAQ;GAAW,SAASC;GAAQ;GAAU;GAAM,EAAE;GAAE;GAAQ;GAAU;GAAY;GAAS;GAAM,CAAC;GACvI,CACD,OAAO,QAAQ,CACf,KAAK,GAAG;CAEX,IAAI,SAAS;CACb,MAAM,cAAc,QAAQ,GAAG,EAAE;CACjC,MAAM,aAAa,QAAQ,GAAG,GAAG;AAEjC,KAAI,CAAC,QAAQ,cAAc,UAAU,YAAY,eAAe,SAAS,CACvE,KAAI,eAAe,UAAU,aAAa,eAAe,IAAI,CAC3D,KAAI,YAAY,IACd,UAAS;KAET,UAAS;KAGX,UAAS;UAEF,CAAC,MACV;MAAI,eAAe,UAAU,aAAa,eAAe,IAAI,CAC3D,KAAI,YAAY,IACd,UAAS;MAET,UAAS;;CAKf,MAAM,aAAaD,MACjB;EACE;EACA,QAAQ;EACR,SAAS,EACP,SAAS,eAAe,kBACzB;EACD,UAAU,EAAE;EACb,EACD;EAAE;EAAQ;EAAU;EAAY;EAAS;EAAM,CAChD;CAED,IAAI,mBACF,CAAC,QAAQ,YAAY,SAAS,GAAG,OAAO,UAAU,WAAW,KAAK,QAAQ,IAAI,IAAI,SAAS,CAAC,KAAK,IAAI,CAAC,OAAO,OAAU,CAAC,OAAO,QAAQ,CAAC,KAAK,GAAG,IAChJ,cACA;AAGF,KAAI,KACF,oBAAmBE,sBAAgC,kBAAkBC,qBAA+B,QAAQ,CAAC;CAG/G,MAAM,sBAAsB,aAAa,WAAW;EAAE,QAAQ;EAAkB;EAAQ,CAAC,IAAI,mBAAmB;CAChH,MAAM,cAAc,WAAW,GAAG,oBAAoB,iBAAiB,YAAY,MAAM,cAAc,QAAQ,GAAG,SAAS,KAAK;AAEhI,QACE,8CACE,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"}