@orval/zod 8.28.0 → 8.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.mjs +40 -18
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.mjs
CHANGED
|
@@ -100,6 +100,10 @@ const renderZodExport = (block) => {
|
|
|
100
100
|
};
|
|
101
101
|
//#endregion
|
|
102
102
|
//#region src/index.ts
|
|
103
|
+
const assertSafeNumericConstraint = (value, label) => {
|
|
104
|
+
if (!isNumber(value) || !Number.isFinite(value)) throw new Error(`orval: refusing to generate code for an OpenAPI document whose "${label}" constraint is not a finite number (got ${String(value)}). This value would otherwise be emitted verbatim into generated source.`);
|
|
105
|
+
return value;
|
|
106
|
+
};
|
|
103
107
|
const getZodDependencies = (_hasGlobalMutator, _hasParamsSerializerOptions, _packageJson, _httpClient, _hasTagsMutator, override) => [{
|
|
104
108
|
exports: [{
|
|
105
109
|
default: false,
|
|
@@ -312,7 +316,7 @@ const generateZodValidationSchemaDefinition = (schema, context, name, strict, is
|
|
|
312
316
|
functions.push(["default", defaultVarName]);
|
|
313
317
|
}
|
|
314
318
|
}
|
|
315
|
-
if (typeof siblingSchema.description === "string") functions.push(["describe", `'${
|
|
319
|
+
if (typeof siblingSchema.description === "string") functions.push(["describe", `'${jsStringLiteralEscape(siblingSchema.description)}'`]);
|
|
316
320
|
};
|
|
317
321
|
if (rules?.useReusableSchemas && "$ref" in schema && typeof schema.$ref === "string" && isComponentSchemaRef(schema.$ref)) {
|
|
318
322
|
const siblings = Object.keys(schema).filter((k) => k !== "$ref");
|
|
@@ -378,7 +382,7 @@ const generateZodValidationSchemaDefinition = (schema, context, name, strict, is
|
|
|
378
382
|
if (description !== void 0) meta.description = description;
|
|
379
383
|
if (deprecated) meta.deprecated = true;
|
|
380
384
|
functions.push(["meta", meta]);
|
|
381
|
-
} else if (description !== void 0) functions.push(["describe", `'${
|
|
385
|
+
} else if (description !== void 0) functions.push(["describe", `'${jsStringLiteralEscape(description)}'`]);
|
|
382
386
|
};
|
|
383
387
|
const type = resolveZodType(schema);
|
|
384
388
|
const required = rules?.required ?? false;
|
|
@@ -388,8 +392,8 @@ const generateZodValidationSchemaDefinition = (schema, context, name, strict, is
|
|
|
388
392
|
const max = schema.maximum ?? schema.maxLength ?? schema.maxItems;
|
|
389
393
|
const exclusiveMinRaw = "exclusiveMinimum" in schema ? schema.exclusiveMinimum : void 0;
|
|
390
394
|
const exclusiveMaxRaw = "exclusiveMaximum" in schema ? schema.exclusiveMaximum : void 0;
|
|
391
|
-
const exclusiveMin = isBoolean(exclusiveMinRaw)
|
|
392
|
-
const exclusiveMax = isBoolean(exclusiveMaxRaw)
|
|
395
|
+
const exclusiveMin = isBoolean(exclusiveMinRaw) ? exclusiveMinRaw ? min : void 0 : exclusiveMinRaw;
|
|
396
|
+
const exclusiveMax = isBoolean(exclusiveMaxRaw) ? exclusiveMaxRaw ? max : void 0 : exclusiveMaxRaw;
|
|
393
397
|
const multipleOf = schema.multipleOf;
|
|
394
398
|
const matches = schema.pattern ?? void 0;
|
|
395
399
|
const hasNonArrayEnum = !!schema.enum && type !== "array";
|
|
@@ -489,6 +493,8 @@ const generateZodValidationSchemaDefinition = (schema, context, name, strict, is
|
|
|
489
493
|
if (isString(entryValue)) return `${JSON.stringify(entryValue)} as const`;
|
|
490
494
|
if (Array.isArray(entryValue)) return `[${entryValue.map((item) => {
|
|
491
495
|
if (isString(item)) return `${JSON.stringify(item)} as const`;
|
|
496
|
+
if (isNumber(item)) return `${item} as const`;
|
|
497
|
+
if (Array.isArray(item)) return formatDefaultEntryValue(item) ?? "[]";
|
|
492
498
|
if (isObject(item)) return formatDefaultEntryValue(item) ?? "null";
|
|
493
499
|
return `${JSON.stringify(item)}`;
|
|
494
500
|
}).join(", ")}]`;
|
|
@@ -499,7 +505,8 @@ const generateZodValidationSchemaDefinition = (schema, context, name, strict, is
|
|
|
499
505
|
}).filter((entry) => entry !== void 0).join(", ");
|
|
500
506
|
return nestedEntries.length === 0 ? "{}" : `{ ${nestedEntries} }`;
|
|
501
507
|
}
|
|
502
|
-
if (
|
|
508
|
+
if (isNumber(entryValue)) return `${entryValue} as const`;
|
|
509
|
+
if (entryValue === null || entryValue === void 0 || isBoolean(entryValue)) return `${entryValue}`;
|
|
503
510
|
};
|
|
504
511
|
const entries = Object.entries(schema.default).map(([key, value]) => {
|
|
505
512
|
const formatted = formatDefaultEntryValue(value);
|
|
@@ -512,6 +519,10 @@ const generateZodValidationSchemaDefinition = (schema, context, name, strict, is
|
|
|
512
519
|
defaultVarName = defaultValue;
|
|
513
520
|
defaultValue = void 0;
|
|
514
521
|
}
|
|
522
|
+
if (Array.isArray(schema.default) && (type === "array" || type === "tuple") && "prefixItems" in schema && schema.default.length > 0) {
|
|
523
|
+
defaultVarName = defaultValue;
|
|
524
|
+
defaultValue = void 0;
|
|
525
|
+
}
|
|
515
526
|
}
|
|
516
527
|
if (defaultValue) consts.push(`export const ${defaultVarName} = ${defaultValue};`);
|
|
517
528
|
}
|
|
@@ -556,7 +567,7 @@ const generateZodValidationSchemaDefinition = (schema, context, name, strict, is
|
|
|
556
567
|
const schema31 = schema;
|
|
557
568
|
const prefixItems = Array.isArray(schema31.prefixItems) ? schema31.prefixItems : [];
|
|
558
569
|
if (prefixItems.length > 0) {
|
|
559
|
-
functions.push(["tuple", prefixItems.map((item, idx) => generateZodValidationSchemaDefinition(dereference(item, context), context, camel(`${name}-${idx}-item`),
|
|
570
|
+
functions.push(["tuple", prefixItems.map((item, idx) => generateZodValidationSchemaDefinition(dereference(item, context), context, camel(`${name}-${idx}-item`), strict, isZodV4, {
|
|
560
571
|
required: true,
|
|
561
572
|
constNameRegistry,
|
|
562
573
|
useReusableSchemas,
|
|
@@ -693,27 +704,32 @@ const generateZodValidationSchemaDefinition = (schema, context, name, strict, is
|
|
|
693
704
|
}
|
|
694
705
|
}
|
|
695
706
|
if (!hasNonArrayEnum && isString(type) && minAndMaxTypes.has(type)) {
|
|
696
|
-
const shouldUseExclusiveMin =
|
|
697
|
-
const shouldUseExclusiveMax =
|
|
707
|
+
const shouldUseExclusiveMin = exclusiveMin !== void 0;
|
|
708
|
+
const shouldUseExclusiveMax = exclusiveMax !== void 0;
|
|
698
709
|
if (shouldUseExclusiveMin && exclusiveMin !== void 0) {
|
|
699
|
-
|
|
710
|
+
const safeExclusiveMin = assertSafeNumericConstraint(exclusiveMin, "exclusiveMinimum");
|
|
711
|
+
consts.push(`export const ${name}ExclusiveMin${constsCounterValue} = ${safeExclusiveMin};`);
|
|
700
712
|
functions.push(["gt", `${name}ExclusiveMin${constsCounterValue}`]);
|
|
701
713
|
} else if (min !== void 0) {
|
|
702
|
-
|
|
714
|
+
const safeMin = assertSafeNumericConstraint(min, "minimum");
|
|
715
|
+
if (safeMin === 1) functions.push(["min", `${safeMin}`]);
|
|
703
716
|
else {
|
|
704
|
-
consts.push(`export const ${name}Min${constsCounterValue} = ${
|
|
717
|
+
consts.push(`export const ${name}Min${constsCounterValue} = ${safeMin};`);
|
|
705
718
|
functions.push(["min", `${name}Min${constsCounterValue}`]);
|
|
706
719
|
}
|
|
707
720
|
}
|
|
708
721
|
if (shouldUseExclusiveMax && exclusiveMax !== void 0) {
|
|
709
|
-
|
|
722
|
+
const safeExclusiveMax = assertSafeNumericConstraint(exclusiveMax, "exclusiveMaximum");
|
|
723
|
+
consts.push(`export const ${name}ExclusiveMax${constsCounterValue} = ${safeExclusiveMax};`);
|
|
710
724
|
functions.push(["lt", `${name}ExclusiveMax${constsCounterValue}`]);
|
|
711
725
|
} else if (max !== void 0) {
|
|
712
|
-
|
|
726
|
+
const safeMax = assertSafeNumericConstraint(max, "maximum");
|
|
727
|
+
consts.push(`export const ${name}Max${constsCounterValue} = ${safeMax};`);
|
|
713
728
|
functions.push(["max", `${name}Max${constsCounterValue}`]);
|
|
714
729
|
}
|
|
715
730
|
if (multipleOf !== void 0) {
|
|
716
|
-
|
|
731
|
+
const safeMultipleOf = assertSafeNumericConstraint(multipleOf, "multipleOf");
|
|
732
|
+
consts.push(`export const ${name}MultipleOf${constsCounterValue} = ${safeMultipleOf.toString()};`);
|
|
717
733
|
functions.push(["multipleOf", `${name}MultipleOf${constsCounterValue}`]);
|
|
718
734
|
}
|
|
719
735
|
if (exclusiveMin !== void 0 || min !== void 0 || exclusiveMax !== void 0 || multipleOf !== void 0 || max !== void 0) consts.push(`\n`);
|
|
@@ -773,9 +789,9 @@ const PARAMS_MERGE_INTO_OPTIONS_VALIDATORS = /* @__PURE__ */ new Set([
|
|
|
773
789
|
]);
|
|
774
790
|
const buildMetaArgs = (args) => {
|
|
775
791
|
const parts = [];
|
|
776
|
-
if (args.id !== void 0) parts.push(`id: '${
|
|
777
|
-
if (args.title !== void 0) parts.push(`title: '${
|
|
778
|
-
if (args.description !== void 0) parts.push(`description: '${
|
|
792
|
+
if (args.id !== void 0) parts.push(`id: '${jsStringLiteralEscape(args.id)}'`);
|
|
793
|
+
if (args.title !== void 0) parts.push(`title: '${jsStringLiteralEscape(args.title)}'`);
|
|
794
|
+
if (args.description !== void 0) parts.push(`description: '${jsStringLiteralEscape(args.description)}'`);
|
|
779
795
|
if (args.deprecated) parts.push("deprecated: true");
|
|
780
796
|
return parts.length > 0 ? `{ ${parts.join(", ")} }` : void 0;
|
|
781
797
|
};
|
|
@@ -1164,9 +1180,15 @@ ${Object.entries(objectArgs).map(([key, schema]) => {
|
|
|
1164
1180
|
if (fn === "strict" && !isZodV4) return ".strict()";
|
|
1165
1181
|
if (fn === "tuple") return `zod.tuple([${args.map((x) => {
|
|
1166
1182
|
const value = x.functions.map((prop) => parseProperty(prop, fieldPath)).join("");
|
|
1183
|
+
if (Array.isArray(x.consts)) appendConstsChunk(x.consts.join("\n"));
|
|
1167
1184
|
return `${value.startsWith(".") ? "zod" : ""}${value}`;
|
|
1168
1185
|
}).join(",\n")}])`;
|
|
1169
|
-
if (fn === "rest")
|
|
1186
|
+
if (fn === "rest") {
|
|
1187
|
+
const restArgs = args;
|
|
1188
|
+
const restValue = restArgs.functions.map((prop) => parseProperty(prop, fieldPath)).join("");
|
|
1189
|
+
if (Array.isArray(restArgs.consts)) appendConstsChunk(restArgs.consts.join("\n"));
|
|
1190
|
+
return `.rest(zod${restValue})`;
|
|
1191
|
+
}
|
|
1170
1192
|
const shouldCoerceType = coerceTypes && (Array.isArray(coerceTypes) ? coerceTypes.includes(fn) : COERCIBLE_TYPES.has(fn));
|
|
1171
1193
|
const formattedArgs = formatFunctionArgs(args);
|
|
1172
1194
|
const paramsArg = buildParamsArg(fn, fieldPath);
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../src/compatible-v4.ts","../src/export-emitter.ts","../src/index.ts"],"sourcesContent":["import {\n compareVersions,\n type PackageJson,\n type ZodVariantOption,\n type ZodVersionOption,\n} from '@orval/core';\n\nconst getZodPackageVersion = (packageJson: PackageJson) => {\n return (\n packageJson.resolvedVersions?.zod ??\n packageJson.dependencies?.zod ??\n packageJson.devDependencies?.zod ??\n packageJson.peerDependencies?.zod\n );\n};\n\nexport const isZodVersionV4 = (packageJson: PackageJson) => {\n const version = getZodPackageVersion(packageJson);\n\n if (!version) {\n return false;\n }\n\n const withoutRc = version.split('-')[0];\n\n return compareVersions(withoutRc, '4.0.0');\n};\n\n/**\n * Resolves whether to emit Zod 4-style output.\n *\n * An explicit `override.zod.version` of `3` or `4` always wins; `'auto'` (the\n * default) falls back to inferring from the output project's resolved `zod`\n * version via {@link isZodVersionV4}. When no package metadata is available,\n * `'auto'` now defaults to Zod 4 so fresh or partially-installed workspaces\n * still get the modern baseline. This keeps generation deterministic when a\n * target is pinned while preserving package-detection for `'auto'`.\n */\nexport const resolveIsZodV4 = (\n version: ZodVersionOption | undefined,\n packageJson: PackageJson | undefined,\n): boolean => {\n if (version === 4) {\n return true;\n }\n\n if (version === 3) {\n return false;\n }\n\n // 'auto' (or unset) — infer from the installed/resolved zod version and\n // default to Zod 4 when the target workspace has no detectable zod version\n // yet. Treat \"no packageJson\" and \"packageJson without a detectable zod\n // version\" identically so partially-installed workspaces still get the\n // modern baseline instead of silently falling back to Zod 3.\n if (!packageJson || !getZodPackageVersion(packageJson)) {\n return true;\n }\n\n return isZodVersionV4(packageJson);\n};\n\nexport const assertZodTarget = ({\n variant,\n isZodV4,\n}: {\n variant: ZodVariantOption | undefined;\n isZodV4: boolean;\n}) => {\n if (variant === 'mini' && !isZodV4) {\n throw new Error(\n \"Zod Mini requires Zod 4 output. Use override.zod.version: 4 or install zod@^4 when override.zod.version is 'auto'.\",\n );\n }\n};\n\nexport const getZodImportSource = (variant: ZodVariantOption | undefined) =>\n variant === 'mini' ? 'zod/mini' : 'zod';\n\nexport const getZodTypeName = (variant: ZodVariantOption | undefined) =>\n variant === 'mini' ? 'ZodMiniType' : 'ZodType';\n\nexport const getZodDateFormat = (isZodV4: boolean) => {\n return isZodV4 ? 'iso.date' : 'date';\n};\n\nexport const getZodTimeFormat = (isZodV4: boolean) => {\n return isZodV4 ? 'iso.time' : 'time';\n};\n\nexport const getZodDateTimeFormat = (isZodV4: boolean) => {\n return isZodV4 ? 'iso.datetime' : 'datetime';\n};\n\ntype ParameterDefinitions = Record<string, unknown>;\ntype ParameterFunction = [string, ParameterDefinitions | undefined];\nexport const getParameterFunctions = (\n isZodV4: boolean,\n strict: boolean,\n parameters: ParameterDefinitions,\n): ParameterFunction[] => {\n if (isZodV4 && strict) {\n return [['strictObject', parameters]];\n } else {\n return strict\n ? [\n ['object', parameters],\n ['strict', undefined],\n ]\n : [['object', parameters]];\n }\n};\n\nexport const getObjectFunctionName = (isZodV4: boolean, strict: boolean) => {\n return isZodV4 && strict ? 'strictObject' : 'object';\n};\n\n/**\n * Returns the object constructor to use for open/generic objects.\n *\n * - Zod v4 supports `zod.looseObject({...})` directly.\n * - Zod v3 falls back to `zod.object({...})` and is finalized with\n * `.passthrough()` during parsing.\n */\nexport const getLooseObjectFunctionName = (isZodV4: boolean) => {\n return isZodV4 ? 'looseObject' : 'object';\n};\n","import { type ZodVariantOption } from '@orval/core';\n\nimport { getZodTypeName } from './compatible-v4';\n\n/** Marks a call as side-effect-free for bundlers' tree-shaking passes. */\nexport const PURE_COMMENT = '/*#__PURE__*/ ';\n\n/** Renders a Zod Mini functional call, e.g. `zod.minLength(1)`, with the pure-call comment. */\nexport const zodMiniCall = (fn: string, args = '') =>\n `${PURE_COMMENT}zod.${fn}(${args})`;\n\n/**\n * Descriptor for one generated Zod `export const` block. Everything on this\n * type is already resolved by the caller (a chosen export name, a rendered\n * zod expression) so this module can stay a pure string renderer: no\n * `ContextSpec`, no OpenAPI, testable with plain objects.\n *\n * What this module does NOT own, and callers must resolve first:\n * - name allocation (collision handling needs ref context)\n * - the recursive TS type body (`recursivePin.tsBody`) — produced by the\n * caller's own model generator\n * - hoisted consts (`…Default`, `…RegExp0`, …) — callers prepend these\n * themselves as pre-rendered strings\n */\nexport interface ZodExportBlock {\n /** Already-allocated export name. */\n name: string;\n /** Already-rendered zod expression, the RHS of the `export const`. */\n expression: string;\n /** 'classic' zod calls vs the Zod Mini functional API. */\n variant: ZodVariantOption;\n /**\n * Append a `.brand(...)` call to the wrapper (never to the `Item` schema).\n * `isZodV4` selects the v4 vs v3 brand call syntax and is required here so\n * a caller can't opt into branding without also saying which syntax it\n * wants — omit the whole field at call sites that never brand (e.g.\n * companion-type or recursive-pin blocks).\n */\n brand?: { isZodV4: boolean };\n /** Emit `zod.input`/`zod.output` companion type aliases. */\n companionTypes?: boolean;\n /** Split into an `<name>Item` schema plus a bounded array wrapper. */\n arrayItem?: { rules?: { min?: number; max?: number } };\n /** Pin a recursive schema to a hand-written TS type instead of inferring it. */\n recursivePin?: { tsBody: string };\n}\n\nconst renderArrayWithBounds = (\n itemName: string,\n variant: ZodVariantOption,\n rules: { min?: number; max?: number } | undefined,\n) => {\n if (variant === 'mini') {\n const checks = [\n ...(rules?.min ? [zodMiniCall('minLength', `${rules.min}`)] : []),\n ...(rules?.max ? [zodMiniCall('maxLength', `${rules.max}`)] : []),\n ];\n return `${zodMiniCall('array', itemName)}${checks\n .map((check) => `.check(${check})`)\n .join('')}`;\n }\n\n return `zod.array(${itemName})${rules?.min ? `.min(${rules.min})` : ''}${\n rules?.max ? `.max(${rules.max})` : ''\n }`;\n};\n\nconst renderBrand = (block: ZodExportBlock) => {\n if (!block.brand) return '';\n return block.brand.isZodV4\n ? `.brand(\"${block.name}\")`\n : `.brand<\"${block.name}\">()`;\n};\n\n/**\n * Renders one generated Zod export block: the `export const`, its optional\n * `Item` split, brand, and either `zod.input`/`zod.output` companion types\n * or a recursive `zod.ZodType<X>` pin. See {@link ZodExportBlock} for what\n * this deliberately leaves to the caller.\n */\nexport const renderZodExport = (block: ZodExportBlock): string => {\n if (block.recursivePin) {\n const typeName = getZodTypeName(block.variant);\n return (\n `export type ${block.name} = ${block.recursivePin.tsBody};\\n\\n` +\n `export const ${block.name}: zod.${typeName}<${block.name}> = ${block.expression};\\n\\n` +\n `export type ${block.name}Output = zod.output<typeof ${block.name}>;`\n );\n }\n\n const companionLines = (name: string) =>\n `export type ${name} = zod.input<typeof ${name}>;\\n` +\n `export type ${name}Output = zod.output<typeof ${name}>;`;\n\n if (block.arrayItem) {\n const itemName = `${block.name}Item`;\n const itemConst = `export const ${itemName} = ${block.expression}`;\n const wrapperConst = `export const ${block.name} = ${renderArrayWithBounds(\n itemName,\n block.variant,\n block.arrayItem.rules,\n )}${renderBrand(block)}`;\n\n if (!block.companionTypes) {\n return `${itemConst}\\n${wrapperConst}`;\n }\n\n // Item and wrapper are independently type-inferable `export const`s, so\n // each gets its own companion pair (matching the schema-file convention),\n // separated by a blank line the way two unrelated export blocks are.\n return (\n `${itemConst}\\n\\n${companionLines(itemName)}\\n\\n` +\n `${wrapperConst}\\n\\n${companionLines(block.name)}`\n );\n }\n\n const constLine = `export const ${block.name} = ${block.expression}${renderBrand(block)}`;\n\n if (!block.companionTypes) {\n return constLine;\n }\n\n return `${constLine}\\n\\n${companionLines(block.name)}`;\n};\n","/* eslint-disable unicorn/no-array-reduce */\n\nimport {\n buildDynamicScope,\n buildInlineDynamicScope,\n camel,\n type ClientBuilder,\n type ClientDependenciesBuilder,\n type ClientGeneratorsBuilder,\n type ContextSpec,\n generateMutator,\n type GeneratorDependency,\n type GeneratorMutator,\n type GeneratorOptions,\n type GeneratorVerbOptions,\n getDynamicAnchorName,\n getFormDataFieldFileType,\n getNumberWord,\n getRefInfo,\n getRequiredKeys,\n isBoolean,\n isDynamicReference,\n isNumber,\n isObject,\n isString,\n jsStringEscape,\n jsStringLiteralEscape,\n logVerbose,\n type OpenApiParameterObject,\n type OpenApiReferenceObject,\n type OpenApiRequestBodyObject,\n type OpenApiResponseObject,\n type OpenApiSchemaObject,\n pascal,\n resolveDynamicRef,\n resolveRef,\n stringify,\n type ZodCoerceType,\n type ZodVariantOption,\n getEnumMembers,\n hasEnumMetadata,\n getEnumValueInfo,\n getEnumImplementation,\n EnumGeneration,\n} from '@orval/core';\nimport jsesc from 'jsesc';\nimport { unique } from 'remeda';\n\nimport {\n getLooseObjectFunctionName,\n getObjectFunctionName,\n getZodImportSource,\n getParameterFunctions,\n getZodDateFormat,\n getZodDateTimeFormat,\n getZodTimeFormat,\n assertZodTarget,\n resolveIsZodV4,\n} from './compatible-v4';\nimport { PURE_COMMENT, renderZodExport, zodMiniCall } from './export-emitter';\n\nexport const getZodDependencies: ClientDependenciesBuilder = (\n _hasGlobalMutator,\n _hasParamsSerializerOptions,\n _packageJson,\n _httpClient,\n _hasTagsMutator,\n override,\n): GeneratorDependency[] => [\n {\n exports: [\n {\n default: false,\n name: 'zod',\n syntheticDefaultImport: false,\n namespaceImport: true,\n values: true,\n },\n ],\n dependency: getZodImportSource(override?.zod.variant),\n },\n];\n\n/**\n * values that may appear in \"type\". Equals SchemaObjectType\n */\nconst possibleSchemaTypes = new Set([\n 'integer',\n 'number',\n 'string',\n 'boolean',\n 'object',\n 'strictObject',\n 'null',\n 'array',\n]);\n\nexport const predefinedZodFormats = new Set([\n 'date',\n 'time',\n 'date-time',\n 'email',\n 'uri',\n 'hostname',\n 'uuid',\n]);\n\ntype ResolvedZodType =\n | string\n | {\n multiType: string[];\n };\n\nconst resolveZodType = (schema: OpenApiSchemaObject): ResolvedZodType => {\n const schemaTypeValue = schema.type as unknown;\n\n // Handle array of types (OpenAPI 3.1+)\n if (Array.isArray(schemaTypeValue)) {\n // Filter out 'null' type as it's handled separately via nullable\n const nonNullTypes = schemaTypeValue\n .filter((t): t is string => isString(t))\n .filter((t) => t !== 'null' && possibleSchemaTypes.has(t));\n\n // If multiple types, return a special marker for union handling\n if (nonNullTypes.length > 1) {\n return { multiType: nonNullTypes };\n }\n\n // Single type\n const type = nonNullTypes[0];\n\n // Handle prefixItems for tuples\n if (type === 'array' && 'prefixItems' in schema) {\n return 'tuple';\n }\n\n return type;\n }\n\n // Handle single type value\n const type = isString(schemaTypeValue) ? schemaTypeValue : undefined;\n\n // TODO: if \"prefixItems\" exists and type is \"array\", then generate a \"tuple\"\n if (schema.type === 'array' && 'prefixItems' in schema) {\n return 'tuple';\n }\n\n // Infer type from const value when type is not explicitly specified\n if (!type && 'const' in schema) {\n const constValue = schema.const;\n if (isString(constValue)) return 'string';\n if (isNumber(constValue)) return 'number';\n if (isBoolean(constValue)) return 'boolean';\n if (constValue === null) return 'null';\n }\n\n return type ?? 'unknown';\n};\n\n// https://github.com/colinhacks/zod#coercion-for-primitives\nconst COERCIBLE_TYPES = new Set([\n 'string',\n 'number',\n 'boolean',\n 'bigint',\n 'date',\n]);\n\nconst zodMiniCoerceCall = (fn: string, args = '') =>\n `${PURE_COMMENT}zod.coerce.${fn}(${args})`;\n\n// Unicode property escapes (`\\p{...}`) require the `u` flag; without it they\n// match the literal characters `p{...}`, so the generated validator silently\n// rejects valid input (#3841). Only patterns that use them get the flag,\n// leaving existing outputs unchanged.\nconst hasUnicodePropertyEscape = (pattern: string) =>\n /(^|[^\\\\])(?:\\\\\\\\)*\\\\[pP]\\{/.test(pattern);\n\nconst buildRegExpLiteral = (pattern: string) => {\n const innerPattern = pattern.slice(\n pattern.startsWith('/') ? 1 : 0,\n pattern.endsWith('/') ? -1 : undefined,\n );\n const unicodeFlag = hasUnicodePropertyEscape(innerPattern) ? \", 'u'\" : '';\n return `new RegExp('${jsStringLiteralEscape(innerPattern)}'${unicodeFlag})`;\n};\n\n/** Escapes string defaults for safe embedding in template literals. */\nfunction formatDefaultValue(value: unknown): string {\n if (isString(value)) {\n return jsesc(value, { quotes: 'backtick', wrap: true });\n }\n if (Array.isArray(value)) {\n return `[${value\n .map((item) =>\n isString(item)\n ? jsesc(item, { quotes: 'backtick', wrap: true })\n : formatDefaultValue(item),\n )\n .join(', ')}]`;\n }\n return stringify(value) ?? 'null';\n}\n\nexport interface ZodValidationSchemaDefinition {\n functions: [string, unknown][];\n consts: string[];\n}\n\nconst minAndMaxTypes = new Set(['number', 'integer', 'string', 'array']);\n\nconst removeReadOnlyProperties = (\n schema: OpenApiSchemaObject,\n): OpenApiSchemaObject => {\n if (schema.properties && isObject(schema.properties)) {\n const filteredProperties: Record<string, OpenApiSchemaObject> = {};\n\n for (const [key, value] of Object.entries(schema.properties)) {\n if (isObject(value) && 'readOnly' in value && value.readOnly) {\n continue;\n }\n filteredProperties[key] = value as OpenApiSchemaObject;\n }\n\n return {\n ...(schema as Record<string, unknown>),\n properties: filteredProperties,\n };\n }\n if (schema.items && isObject(schema.items) && 'properties' in schema.items) {\n return {\n ...(schema as Record<string, unknown>),\n items: removeReadOnlyProperties(schema.items as OpenApiSchemaObject),\n };\n }\n return schema;\n};\n\ninterface DateTimeOptions {\n offset?: boolean;\n local?: boolean;\n precision?: number;\n}\n\ninterface TimeOptions {\n precision?: -1 | 0 | 1 | 2 | 3;\n}\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call */\n\nconst COMPONENT_SCHEMAS_REF_PATTERN = /^#\\/components\\/schemas\\/[^/]+$/;\n\nconst isComponentSchemaRef = (ref: string): boolean =>\n COMPONENT_SCHEMAS_REF_PATTERN.test(ref);\n\n// --- Discriminated unions -------------------------------------------------\n//\n// A `oneOf`/`anyOf` carrying an OpenAPI `discriminator` maps naturally onto\n// `zod.discriminatedUnion(key, [...])`, which gives per-branch validation\n// errors instead of the useless \"no union member matched\" that a plain\n// `zod.union` produces. Orval shipped this once (PR #1907) but reverted it\n// (PR #2118, issue #2085) because `zod.discriminatedUnion` only accepts\n// *object* options: an inheritance branch (`allOf`) renders as a\n// `zod.object().and(...)` intersection, which zod rejects at construction and\n// crashes the generated module.\n//\n// The fix is to only emit a discriminated union when every branch can be\n// rendered as a single `ZodObject`, and fall back to a plain union otherwise.\n// The go/no-go decision is made here (against the resolved spec, where we have\n// full type information); the render side just trusts the marker and forces\n// `allOf` branches to merge into one object.\n//\n// The property name is smuggled through the definition's function name because\n// the definition tuple only carries `[name, args]` (see PR #1907, which used\n// the same approach).\nconst DISCRIMINATOR_MARK = '::discriminator::';\n\nconst encodeDiscriminatorSeparator = (base: string, property: string): string =>\n `${base}${DISCRIMINATOR_MARK}${property}`;\n\nconst decodeDiscriminatorSeparator = (\n fn: string,\n): { base: string; property: string } | null => {\n const index = fn.indexOf(DISCRIMINATOR_MARK);\n if (index === -1) return null;\n return {\n base: fn.slice(0, index),\n property: fn.slice(index + DISCRIMINATOR_MARK.length),\n };\n};\n\n// Follow a single `$ref` to its target; pass concrete schemas through as-is.\nconst resolveUnionMemberSchema = (\n member: OpenApiSchemaObject | OpenApiReferenceObject,\n context: ContextSpec,\n): OpenApiSchemaObject | undefined => {\n if (member && '$ref' in member && typeof member.$ref === 'string') {\n return tryResolveRefSchema(member.$ref, context);\n }\n return member as OpenApiSchemaObject;\n};\n\n// A schema that renders to a single `zod.object({...})` — i.e. not a union,\n// not an intersection (`allOf`), and shaped like an object.\nconst isPlainObjectSchema = (\n schema: OpenApiSchemaObject | undefined,\n): boolean => {\n if (!schema || schema.oneOf || schema.anyOf || schema.allOf) return false;\n return (\n schema.type === 'object' ||\n (isObject(schema.properties) && Object.keys(schema.properties).length > 0)\n );\n};\n\n// Keywords a member may carry while still describing no shape of its own:\n// `title` and `description` only annotate, and `not` is not translated into\n// anything by this generator today, so a branch carrying one renders as bare\n// `zod.unknown()` either way. Anything outside this set — `enum`, `const`,\n// `additionalProperties`, `nullable`, `default`, … — already renders to\n// something meaningful on its own and must be left alone.\nconst SHAPELESS_MEMBER_KEYS = new Set([\n 'required',\n 'title',\n 'description',\n 'not',\n]);\n\n// A `oneOf`/`anyOf` member that declares no shape of its own and only narrows\n// which of the sibling properties must be present — e.g. two branches that each\n// `required` a different pair of keys. JSON Schema applies every branch to the\n// same instance, so the property types live on the composing schema rather than\n// on the branch. Rendered in isolation such a member has no type to resolve and\n// falls through to `zod.unknown()`, silently dropping its `required`. (#3780)\nconst isConstraintOnlyMember = (\n member: OpenApiSchemaObject | OpenApiReferenceObject,\n): boolean => {\n if ('$ref' in member) return false;\n const schema = member as OpenApiSchemaObject;\n if (!Array.isArray(schema.required) || schema.required.length === 0) {\n return false;\n }\n return Object.keys(schema).every((key) => SHAPELESS_MEMBER_KEYS.has(key));\n};\n\n// Extracts the property names a member forbids via `not`. JSON Schema forbids a\n// key when `not` lists any subschema that `required`s it — i.e.\n// `not: { anyOf: [{ required: [X] }, { required: [Y] }] }` means X and Y must\n// be absent. Returns `undefined` when the member has no such constraint. (#3780)\nconst getForbiddenKeys = (\n member: OpenApiSchemaObject,\n): string[] | undefined => {\n if (!isObject(member.not)) return undefined;\n const not = member.not as OpenApiSchemaObject;\n\n // `not: { anyOf: [ {required:[X]}, {required:[Y]} ] }` is the form emitted by\n // common OpenAPI tooling. A bare `not: { required: [X] }` is accepted too.\n const branches = Array.isArray(not.anyOf)\n ? not.anyOf\n : Array.isArray(not.required)\n ? [not]\n : [];\n\n const forbidden = new Set<string>();\n for (const branch of branches) {\n if (isObject(branch) && Array.isArray(branch.required)) {\n for (const key of branch.required) {\n forbidden.add(key as string);\n }\n }\n }\n return forbidden.size > 0 ? [...forbidden] : undefined;\n};\n\n// The branch must declare the discriminator key as a literal value — a `const`\n// or an `enum`. Both zod v3 (>=3.20) and v4 build their branch lookup by\n// reading discrete literal values off each option, and throw at construction if\n// a discriminator resolves to a non-literal (e.g. a free `string`). Requiring a\n// literal here keeps such specs on the plain-union path instead.\nconst hasLiteralDiscriminator = (\n schema: OpenApiSchemaObject | undefined,\n property: string,\n): boolean => {\n if (!schema || !isObject(schema.properties)) return false;\n const propertySchema = schema.properties[property];\n if (!isObject(propertySchema)) return false;\n return (\n (propertySchema as { const?: unknown }).const !== undefined ||\n Array.isArray((propertySchema as { enum?: unknown }).enum)\n );\n};\n\n// Read the literal discriminator value(s) a branch declares for `property`\n// (a `const` yields one value, an `enum` yields several). Resolves `$ref` and,\n// for `allOf`, honours the render-time merge semantics where a later member\n// overrides an earlier one — so the last part that declares the property wins.\n// Returns null when no literal is found. Used to reject duplicate discriminator\n// values across branches, which `zod.discriminatedUnion` throws on at\n// construction.\nconst collectDiscriminatorValues = (\n member: OpenApiSchemaObject | OpenApiReferenceObject,\n property: string,\n context: ContextSpec,\n): unknown[] | null => {\n const readValues = (\n schema: OpenApiSchemaObject | undefined,\n ): unknown[] | null => {\n if (!schema || !isObject(schema.properties)) return null;\n const propertySchema = schema.properties[property];\n if (!isObject(propertySchema)) return null;\n const constValue = (propertySchema as { const?: unknown }).const;\n if (constValue !== undefined) return [constValue];\n const enumValues = (propertySchema as { enum?: unknown }).enum;\n if (Array.isArray(enumValues)) return enumValues;\n return null;\n };\n\n const resolved = resolveUnionMemberSchema(member, context);\n if (!resolved) return null;\n\n if (resolved.allOf) {\n const parts = (\n resolved.allOf as (OpenApiSchemaObject | OpenApiReferenceObject)[]\n ).map((part) => resolveUnionMemberSchema(part, context));\n for (let index = parts.length - 1; index >= 0; index--) {\n const values = readValues(parts[index]);\n if (values) return values;\n }\n return null;\n }\n\n return readValues(resolved);\n};\n\n// Can this union branch be rendered as a `ZodObject` carrying the discriminator\n// literal? If not, the whole union must stay a plain `zod.union`.\nconst isDiscriminatableMember = (\n member: OpenApiSchemaObject | OpenApiReferenceObject,\n property: string,\n useReusableSchemas: boolean,\n context: ContextSpec,\n): boolean => {\n const resolved = resolveUnionMemberSchema(member, context);\n if (!resolved) return false;\n\n // A nested union can't be a discriminated-union option.\n if (resolved.oneOf || resolved.anyOf) return false;\n\n if (resolved.allOf) {\n // Inheritance: representable only when we can flatten the parts into one\n // object at render time. That needs the parts inlined property-by-property.\n // With `useReusableSchemas` the parts stay `$ref` identifiers to other\n // consts (potentially intersections themselves), so we can't guarantee a\n // ZodObject — leave it as a plain union.\n if (useReusableSchemas) return false;\n const parts = (\n resolved.allOf as (OpenApiSchemaObject | OpenApiReferenceObject)[]\n ).map((part) => resolveUnionMemberSchema(part, context));\n if (!parts.every((part) => isPlainObjectSchema(part))) return false;\n return parts.some((part) => hasLiteralDiscriminator(part, property));\n }\n\n if (!isPlainObjectSchema(resolved)) return false;\n return hasLiteralDiscriminator(resolved, property);\n};\n\nexport const generateZodValidationSchemaDefinition = (\n schema: OpenApiSchemaObject | OpenApiReferenceObject | undefined,\n context: ContextSpec,\n name: string,\n strict: boolean,\n isZodV4: boolean,\n rules?: {\n required?: boolean;\n /**\n * Required keys inherited from sibling `allOf` members. Per JSON Schema /\n * OpenAPI 3.1, a `required` array in one `allOf` member applies to\n * properties contributed by ANY member, so it is collected at the `allOf`\n * level and applied here. Consumed at THIS object level only — never\n * forwarded into nested property schemas, so a deeper object sharing a key\n * name is unaffected. (#3171)\n */\n additionalRequired?: string[];\n dateTimeOptions?: DateTimeOptions;\n timeOptions?: TimeOptions;\n /**\n * Override schemas for properties at THIS level only.\n * Not passed to nested schemas. Used by form-data for file type handling.\n */\n propertyOverrides?: Record<string, ZodValidationSchemaDefinition>;\n /**\n * Internal registry to keep generated const names unique within a single\n * schema generation tree without leaking suffixes across unrelated top-level\n * schemas.\n */\n constNameRegistry?: Record<string, number>;\n /**\n * When true, plain `$ref`s into `#/components/schemas/*` emit a `namedRef`\n * placeholder instead of being inlined.\n */\n useReusableSchemas?: boolean;\n /**\n * When true, suppress File/Blob coercion for binary string fields anywhere\n * in the tree (`format: binary` / `contentMediaType: application/octet-stream`),\n * keeping them as `string`. Set for `application/x-www-form-urlencoded` bodies,\n * which serialize via URLSearchParams (string-only) — mirrors core's\n * `formDataContext.urlEncoded` handling in getScalar (#1624). Threaded into\n * every recursive call so nested/array/composed fields are covered too.\n */\n urlEncoded?: boolean;\n /**\n * When true (and `isZodV4`), the top-level (named component) schema emits a\n * `.meta({ id, description?, deprecated? })` instead of `.describe(...)`.\n * Set ONLY for top-level component-schema generation — recursive calls omit\n * it, so nested schemas keep `.describe()` and never get a duplicate `id`.\n */\n emitMeta?: boolean;\n },\n): ZodValidationSchemaDefinition => {\n if (!schema) return { functions: [], consts: [] };\n\n const CHAINABLE_SIBLINGS = new Set(['nullable', 'default', 'description']);\n const isChainable = (k: string) => CHAINABLE_SIBLINGS.has(k);\n\n const applyChainableSiblings = (\n functions: [string, unknown][],\n consts: string[],\n siblingSchema: OpenApiSchemaObject & {\n nullable?: boolean;\n default?: unknown;\n description?: string;\n },\n ): void => {\n const refRequired = rules?.required ?? false;\n const refHasDefault = siblingSchema.default !== undefined;\n\n if (!refRequired && siblingSchema.nullable) {\n functions.push(['nullish', undefined]);\n } else if (siblingSchema.nullable) {\n functions.push(['nullable', undefined]);\n } else if (!refRequired && !refHasDefault) {\n functions.push(['optional', undefined]);\n }\n\n if (refHasDefault) {\n const registry = rules?.constNameRegistry ?? {};\n const counter = isNumber(registry[name]) ? registry[name] + 1 : 0;\n registry[name] = counter;\n const suffix = counter ? pascal(getNumberWord(counter)) : '';\n const defaultVarName = `${name}Default${suffix}`;\n const defaultLiteral = stringify(siblingSchema.default);\n if (defaultLiteral !== undefined) {\n consts.push(`export const ${defaultVarName} = ${defaultLiteral};`);\n functions.push(['default', defaultVarName]);\n }\n }\n\n if (typeof siblingSchema.description === 'string') {\n // Use the same single-quoted, fully JS-escaped form as the primitive\n // description path (see `pushDescriptionOrMeta`). `escape` only escapes\n // quote chars, so a multi-line description would emit raw newlines and\n // break the generated string literal (TS1002).\n functions.push([\n 'describe',\n `'${jsStringEscape(siblingSchema.description)}'`,\n ]);\n }\n };\n\n // Ref-aware path: emit a placeholder that the orchestrator will rewrite into\n // either a direct identifier or `z.lazy(() => Name)`.\n if (\n rules?.useReusableSchemas &&\n '$ref' in schema &&\n typeof schema.$ref === 'string' &&\n isComponentSchemaRef(schema.$ref)\n ) {\n const siblings = Object.keys(schema).filter((k) => k !== '$ref');\n const allSiblingsChainable = siblings.every((k) => isChainable(k));\n\n if (allSiblingsChainable) {\n const refName = getRefInfo(schema.$ref, context).name;\n const functions: [string, unknown][] = [\n ['namedRef', { name: refName, sourceRef: schema.$ref }],\n ];\n const consts: string[] = [];\n\n applyChainableSiblings(\n functions,\n consts,\n schema as OpenApiSchemaObject & {\n $ref: string;\n nullable?: boolean;\n default?: unknown;\n description?: string;\n },\n );\n\n return { functions, consts };\n }\n\n logVerbose(\n `[orval/zod] $ref ${schema.$ref} has non-chainable siblings ` +\n `[${siblings.filter((s) => !isChainable(s)).join(', ')}]; falling back to inlining.`,\n );\n schema = dereference(\n schema as OpenApiSchemaObject | OpenApiReferenceObject,\n context,\n );\n }\n\n // Dynamic-ref-aware path: when useReusableSchemas is true, resolve the\n // anchor and emit a namedRef sentinel if the target is a concrete component\n // schema. The SCC pipeline then decides direct vs zod.lazy().\n if (rules?.useReusableSchemas && isDynamicReference(schema)) {\n const anchorName = getDynamicAnchorName(schema.$dynamicRef);\n if (anchorName) {\n const { resolvedTypeName, schemaName } = resolveDynamicRef(\n anchorName,\n context,\n );\n\n if (resolvedTypeName !== 'unknown' && schemaName) {\n const siblings = Object.keys(schema).filter((k) => k !== '$dynamicRef');\n const allSiblingsChainable = siblings.every((k) => isChainable(k));\n\n if (allSiblingsChainable) {\n const sourceRef = `${COMPONENT_SCHEMAS_PREFIX}${encodeSegment(schemaName)}`;\n const functions: [string, unknown][] = [\n ['namedRef', { name: resolvedTypeName, sourceRef }],\n ];\n const consts: string[] = [];\n\n applyChainableSiblings(\n functions,\n consts,\n schema as OpenApiSchemaObject & {\n $dynamicRef: string;\n nullable?: boolean;\n default?: unknown;\n description?: string;\n },\n );\n\n return { functions, consts };\n }\n\n logVerbose(\n `[orval/zod] $dynamicRef ${schema.$dynamicRef} has non-chainable siblings ` +\n `[${siblings.filter((s) => !isChainable(s)).join(', ')}]; falling back to inlining.`,\n );\n }\n }\n\n // Not emitted as namedRef (non-chainable siblings, unresolvable anchor,\n // or external ref) — dereference now so the main body sees a resolved\n // schema with a proper type instead of the raw $dynamicRef (which\n // resolveZodType classifies as 'unknown').\n schema = dereference(\n schema as OpenApiSchemaObject | OpenApiReferenceObject,\n context,\n );\n }\n\n const useReusableSchemas = rules?.useReusableSchemas ?? false;\n const urlEncoded = rules?.urlEncoded ?? false;\n const consts: string[] = [];\n const constNameRegistry = rules?.constNameRegistry ?? {};\n const constsCounter = isNumber(constNameRegistry[name])\n ? constNameRegistry[name] + 1\n : 0;\n\n const constsCounterValue = constsCounter\n ? pascal(getNumberWord(constsCounter))\n : '';\n\n constNameRegistry[name] = constsCounter;\n\n const functions: [string, unknown][] = [];\n\n // Emit the schema's trailing description/metadata. On zod v4 with `emitMeta`\n // (top-level component schemas only) this is a single `.meta({ id, ... })`\n // carrying the schema name as `id` plus description/deprecated when present;\n // otherwise it falls back to the plain `.describe(...)`. Called from both\n // return points (the multi-type union exit and the main exit) so every schema\n // shape is covered. `.meta()` must be the LAST modifier in the chain — zod v4\n // turns `.meta({id}).describe(...)` into a `$ref` wrapper, whereas\n // `.describe(...).meta({id})` (and a lone `.meta`) stay flat.\n const pushDescriptionOrMeta = () => {\n // Empty-string descriptions are treated as absent — preserves the prior\n // `if (schema.description)` falsy-check semantics (which skipped both `''`\n // and `undefined`), so this change never emits a no-op `.describe('')` or\n // `description: ''` in meta.\n const description =\n typeof schema.description === 'string' && schema.description.length > 0\n ? schema.description\n : undefined;\n const deprecated =\n 'deprecated' in schema && schema.deprecated === true ? true : undefined;\n\n // A `const` branch of a `oneOf` renders as `zod.literal(...)` inside an\n // array, where a JSDoc comment is not reachable by an editor, so `title`\n // and `deprecated` have nowhere to go but the registry. Only zod v4 has\n // one; v3 keeps the plain `.describe(...)` it emits today. Branches that\n // carry neither also keep `.describe(...)`, so a spec without member\n // metadata produces the same output as before. (#3835)\n const title =\n typeof schema.title === 'string' && schema.title.length > 0\n ? schema.title\n : undefined;\n const isAnnotatedConst =\n schema.const !== undefined &&\n (title !== undefined || deprecated === true);\n\n if (rules?.emitMeta && isZodV4) {\n const meta: ZodMetaArgs = { id: name };\n if (description !== undefined) meta.description = description;\n if (deprecated) meta.deprecated = true;\n functions.push(['meta', meta]);\n } else if (isZodV4 && isAnnotatedConst) {\n const meta: ZodMetaArgs = {};\n if (title !== undefined) meta.title = title;\n if (description !== undefined) meta.description = description;\n if (deprecated) meta.deprecated = true;\n functions.push(['meta', meta]);\n } else if (description !== undefined) {\n functions.push(['describe', `'${jsStringEscape(description)}'`]);\n }\n };\n\n const type = resolveZodType(schema);\n const required = rules?.required ?? false;\n const hasDefault = schema.default !== undefined;\n const nullable =\n // changing to ?? here changes behavior - so don't\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n ('nullable' in schema && schema.nullable) ||\n (Array.isArray(schema.type) && schema.type.includes('null'));\n const min = schema.minimum ?? schema.minLength ?? schema.minItems;\n const max = schema.maximum ?? schema.maxLength ?? schema.maxItems;\n\n // Handle exclusiveMinimum and exclusiveMaximum (OpenAPI 3.0 vs 3.1 compatibility)\n // OpenAPI 3.0: exclusiveMinimum/exclusiveMaximum are booleans indicating if minimum/maximum is exclusive\n // OpenAPI 3.1: exclusiveMinimum/exclusiveMaximum are numbers (the value itself)\n const exclusiveMinRaw =\n 'exclusiveMinimum' in schema ? schema.exclusiveMinimum : undefined;\n const exclusiveMaxRaw =\n 'exclusiveMaximum' in schema ? schema.exclusiveMaximum : undefined;\n\n // Convert boolean to number if using OpenAPI 3.0 format\n const exclusiveMin =\n isBoolean(exclusiveMinRaw) && exclusiveMinRaw ? min : exclusiveMinRaw;\n const exclusiveMax =\n isBoolean(exclusiveMaxRaw) && exclusiveMaxRaw ? max : exclusiveMaxRaw;\n\n const multipleOf = schema.multipleOf;\n const matches = schema.pattern ?? undefined;\n // Enum-based schemas are emitted as `zod.enum(...)` or literal unions, so\n // chaining scalar constraints onto the parent schema would generate invalid\n // Zod output. Arrays are handled separately via their item schema.\n const hasNonArrayEnum = !!schema.enum && type !== 'array';\n\n // Check for allOf/oneOf/anyOf BEFORE processing by type\n // This ensures these constraints work with any base type (string, number, object, etc.)\n let skipSwitchStatement = false;\n if (schema.allOf || schema.oneOf || schema.anyOf) {\n const separator = schema.allOf ? 'allOf' : schema.oneOf ? 'oneOf' : 'anyOf';\n\n const schemas = (schema.allOf ?? schema.oneOf ?? schema.anyOf) as (\n | OpenApiSchemaObject\n | OpenApiReferenceObject\n )[];\n\n // Emit a discriminated union only when the opt-in flag is set AND the spec\n // asks for one AND every branch can be rendered as a `ZodObject` (see the\n // notes on `isDiscriminatableMember`). Otherwise keep `separator` as-is and\n // fall back to a plain `zod.union`, which accepts any member shape.\n const discriminatorProperty = ((): string | undefined => {\n if (\n !context.output?.override?.zod?.generateDiscriminatedUnion ||\n !(schema.oneOf || schema.anyOf) ||\n !schema.discriminator?.propertyName ||\n schemas.length <= 1\n ) {\n return undefined;\n }\n\n const property = schema.discriminator.propertyName;\n if (\n !schemas.every((member) =>\n isDiscriminatableMember(\n member,\n property,\n useReusableSchemas,\n context,\n ),\n )\n ) {\n return undefined;\n }\n\n // `zod.discriminatedUnion` builds a value->branch map at construction and\n // throws if two branches share a discriminator value. Require the values\n // to be unique across all branches; otherwise fall back to a plain union.\n const seenValues = new Set<string>();\n for (const member of schemas) {\n const values = collectDiscriminatorValues(member, property, context);\n if (!values || values.length === 0) return undefined;\n for (const value of values) {\n const key = JSON.stringify(value);\n if (seenValues.has(key)) return undefined;\n seenValues.add(key);\n }\n }\n\n return property;\n })();\n const unionSeparator = discriminatorProperty\n ? encodeDiscriminatorSeparator(separator, discriminatorProperty)\n : separator;\n\n // In JSON Schema / OpenAPI 3.1 a `required` array in any `allOf` member\n // (and on the composing schema itself) applies to properties contributed by\n // any member. Collect them all so each member's own properties can be marked\n // required even when the `required` lives in a sibling member — e.g. props\n // in a `$ref` base + `required` in a constraint-only sibling. Only valid for\n // `allOf` (a conjunction); `oneOf`/`anyOf` are alternatives. (#3171)\n const allOfRequired = schema.allOf\n ? [\n ...new Set([\n ...getRequiredKeys(schema, name),\n ...schemas.flatMap((member, index) => {\n // Only the member's top-level `required` is needed. For `$ref`\n // members resolve shallowly (no deep property dereference) and\n // tolerate unresolvable refs — they simply contribute no keys.\n const isRef = '$ref' in member && typeof member.$ref === 'string';\n const resolved = isRef\n ? tryResolveRefSchema(member.$ref as string, context)\n : (member as OpenApiSchemaObject);\n if (!resolved) return [];\n // A constraint-only member never reaches the object path below,\n // so a misplaced boolean here would otherwise pass unreported.\n // Name the member, not the composing schema, or the message\n // points at the wrong place in the document.\n return getRequiredKeys(\n resolved,\n isRef ? (member.$ref as string) : `${name}.allOf[${index}]`,\n );\n }),\n ]),\n ]\n : undefined;\n\n // Constraint-only branches have to be rendered against the composing\n // schema's `properties`, otherwise their `required` is lost. Only for\n // `oneOf`/`anyOf` — an `allOf` member already gets the same effect through\n // `additionalRequired` above. (#3780)\n const withSiblingProperties = (\n member: OpenApiSchemaObject | OpenApiReferenceObject,\n ) => {\n const properties = schema.properties;\n if (\n !(schema.oneOf || schema.anyOf) ||\n !isObject(properties) ||\n Object.keys(properties).length === 0 ||\n !isConstraintOnlyMember(member)\n ) {\n return member as OpenApiSchemaObject;\n }\n\n const required = (member as OpenApiSchemaObject).required as string[];\n\n // Every key the branch requires needs a sibling schema to attach to. A key\n // with none cannot be made required in zod — both `unknown` and `any` are\n // treated as optional inside an object, so `{}` would still match — and\n // rewriting would silently drop it. Leave the whole branch as-is rather\n // than emit an object that only looks like it enforces the constraint.\n if (!required.every((key) => Object.hasOwn(properties, key))) {\n return member as OpenApiSchemaObject;\n }\n\n const forbidden = getForbiddenKeys(member as OpenApiSchemaObject);\n\n // A `not` constraint forbids keys. When the member is rendered against the\n // sibling properties, forbidden keys must be emitted as `zod.never()`\n // (optional, so absence passes and any value fails). These are injected\n // as pre-generated property overrides into the object schema below. (#3780)\n let propertyOverrides:\n | Record<string, ZodValidationSchemaDefinition>\n | undefined;\n if (forbidden) {\n propertyOverrides = {};\n for (const key of forbidden) {\n // A key that is both forbidden and required contradicts itself; emit\n // the required form (no optional) so the `never` still rejects any\n // value while the key is expected to be absent.\n const isForbiddenAndRequired = required.includes(key);\n propertyOverrides[key] = {\n functions: [\n ['never', undefined],\n ...(isForbiddenAndRequired\n ? []\n : ([['optional', undefined]] as const)),\n ],\n consts: [],\n } as ZodValidationSchemaDefinition;\n }\n }\n\n return {\n type: 'object',\n properties,\n required,\n // carried over so the branch keeps its `.describe(...)`\n description: (member as OpenApiSchemaObject).description,\n 'x-orval-property-overrides': propertyOverrides,\n } as OpenApiSchemaObject;\n };\n\n // Use index-based naming to ensure uniqueness when processing multiple schemas\n // This prevents duplicate schema names when nullable refs are used\n const baseSchemas = schemas.map((schema, index) =>\n generateZodValidationSchemaDefinition(\n withSiblingProperties(schema),\n context,\n `${camel(name)}${pascal(getNumberWord(index + 1))}`,\n strict,\n isZodV4,\n {\n required: true,\n additionalRequired: allOfRequired,\n propertyOverrides: (\n withSiblingProperties(schema) as OpenApiSchemaObject\n )['x-orval-property-overrides'] as\n | Record<string, ZodValidationSchemaDefinition>\n | undefined,\n constNameRegistry,\n useReusableSchemas,\n urlEncoded,\n },\n ),\n );\n\n // Handle allOf/oneOf/anyOf with additional properties - merge additional properties into the schema\n if ((schema.allOf || schema.oneOf || schema.anyOf) && schema.properties) {\n const additionalPropertiesSchema = {\n properties: schema.properties,\n required: schema.required,\n additionalProperties: schema.additionalProperties,\n type: schema.type,\n } as OpenApiSchemaObject;\n\n // Use index-based naming to ensure uniqueness\n const additionalIndex = baseSchemas.length + 1;\n const additionalPropertiesDefinition =\n generateZodValidationSchemaDefinition(\n additionalPropertiesSchema,\n context,\n `${camel(name)}${pascal(getNumberWord(additionalIndex))}`,\n strict,\n isZodV4,\n {\n required: true,\n additionalRequired: allOfRequired,\n constNameRegistry,\n useReusableSchemas,\n urlEncoded,\n },\n );\n\n // For oneOf/anyOf, use allOf to combine union with common properties\n // This generates: zod.union([...]).and(commonProperties)\n if (schema.oneOf || schema.anyOf) {\n functions.push([\n 'allOf',\n [\n { functions: [[unionSeparator, baseSchemas]], consts: [] },\n additionalPropertiesDefinition,\n ],\n ]);\n } else {\n // For allOf, just add to the list\n baseSchemas.push(additionalPropertiesDefinition);\n functions.push([separator, baseSchemas]);\n }\n } else {\n functions.push([unionSeparator, baseSchemas]);\n }\n skipSwitchStatement = true;\n }\n\n let defaultVarName: string | undefined;\n if (schema.default !== undefined) {\n defaultVarName = `${name}Default${constsCounterValue}`;\n let defaultValue: string | undefined;\n\n const isDateType =\n schema.type === 'string' &&\n (schema.format === 'date' || schema.format === 'date-time') &&\n context.output.override.useDates;\n\n if (isDateType) {\n // OpenApiSchemaObject defines default as 'any'\n defaultValue = `new Date(${JSON.stringify(schema.default)})`;\n } else if (isObject(schema.default)) {\n // Narrow string literals individually with `as const` so `zod.enum([...])`\n // properties accept the emitted default (#3244). Whole-object/array\n // `as const` would make nested arrays `readonly`, which zod v4's\n // `.default()` rejects against its mutable parameter type (#3399).\n // Recursively emit a default value as a TS expression. Strings get `as\n // const` so zod.enum([...]) properties accept the emitted default (#3244);\n // whole-object/array `as const` is avoided because it makes nested arrays\n // readonly, which zod v4's `.default()` rejects (#3399).\n const formatDefaultEntryValue = (\n entryValue: unknown,\n ): string | undefined => {\n if (isString(entryValue)) {\n return `${JSON.stringify(entryValue)} as const`;\n }\n\n if (Array.isArray(entryValue)) {\n const arrayItems = entryValue.map((item) => {\n if (isString(item)) {\n return `${JSON.stringify(item)} as const`;\n }\n // Object items recurse so nested string values get `as const`\n // (e.g. `{ value: 'active' as const }`), which JSON.stringify\n // alone would drop (#3982 CodeRabbit).\n if (isObject(item)) {\n const formatted = formatDefaultEntryValue(item);\n return formatted ?? 'null';\n }\n return `${JSON.stringify(item)}`;\n });\n return `[${arrayItems.join(', ')}]`;\n }\n\n // Nested objects recurse: emitting the raw value would stringify to\n // `[object Object]` (#3972) and skipping it would leave a hole in the\n // object literal `{ , , }` (#3974).\n if (isObject(entryValue)) {\n const nestedEntries = Object.entries(entryValue)\n .map(([nestedKey, nestedValue]) => {\n const formatted = formatDefaultEntryValue(nestedValue);\n return formatted === undefined\n ? undefined\n : `${JSON.stringify(nestedKey)}: ${formatted}`;\n })\n .filter((entry) => entry !== undefined)\n .join(', ');\n return nestedEntries.length === 0 ? '{}' : `{ ${nestedEntries} }`;\n }\n\n if (\n entryValue === null ||\n entryValue === undefined ||\n isNumber(entryValue) ||\n isBoolean(entryValue)\n )\n return `${entryValue}`;\n\n return undefined;\n };\n\n const entries = Object.entries(schema.default)\n .map(([key, value]) => {\n const formatted = formatDefaultEntryValue(value);\n return formatted === undefined\n ? undefined\n : `${JSON.stringify(key)}: ${formatted}`;\n })\n .filter((entry) => entry !== undefined)\n .join(', ');\n defaultValue = entries.length === 0 ? `{}` : `{ ${entries} }`;\n } else {\n // OpenApiSchemaObject defines default as 'any'\n defaultValue = formatDefaultValue(schema.default);\n\n // If the schema is an array with enum items, inject inplace to avoid issues with default values\n const isArrayWithEnumItems =\n Array.isArray(schema.default) &&\n type === 'array' &&\n schema.items &&\n 'enum' in schema.items &&\n schema.default.length > 0;\n\n if (isArrayWithEnumItems) {\n defaultVarName = defaultValue;\n defaultValue = undefined;\n }\n }\n if (defaultValue) {\n consts.push(`export const ${defaultVarName} = ${defaultValue};`);\n }\n }\n\n // Handle multi-type schemas (OpenAPI 3.1+ type arrays)\n if (isObject(type) && 'multiType' in type) {\n const types = type.multiType;\n functions.push([\n 'oneOf',\n types.map((t) =>\n generateZodValidationSchemaDefinition(\n {\n ...(schema as Record<string, unknown>),\n type: t,\n } as OpenApiSchemaObject,\n context,\n name,\n strict,\n isZodV4,\n {\n required: true,\n constNameRegistry,\n useReusableSchemas,\n urlEncoded,\n },\n ),\n ),\n ]);\n\n if (!required && nullable) {\n functions.push(['nullish', undefined]);\n } else if (nullable) {\n functions.push(['nullable', undefined]);\n } else if (!required) {\n functions.push(['optional', undefined]);\n }\n\n pushDescriptionOrMeta();\n\n return { functions, consts };\n }\n\n if (!skipSwitchStatement) {\n switch (type) {\n case 'tuple': {\n /**\n *\n * > 10.3.1.1. prefixItems\n * > The value of \"prefixItems\" MUST be a non-empty array of valid JSON Schemas.\n * >\n * > Validation succeeds if each element of the instance validates against the schema at the same position, if any.\n * > This keyword does not constrain the length of the array. If the array is longer than this keyword's value,\n * > this keyword validates only the prefix of matching length.\n * >\n * > This keyword produces an annotation value which is the largest index to which this keyword applied a subschema.\n * > The value MAY be a boolean true if a subschema was applied to every index of the instance, such as is produced by the \"items\" keyword.\n * > This annotation affects the behavior of \"items\" and \"unevaluatedItems\".\n * >\n * > Omitting this keyword has the same assertion behavior as an empty array.\n */\n if ('prefixItems' in schema) {\n const schema31 = schema as OpenApiSchemaObject;\n const prefixItems = Array.isArray(schema31.prefixItems)\n ? (schema31.prefixItems as (\n | OpenApiSchemaObject\n | OpenApiReferenceObject\n )[])\n : [];\n\n if (prefixItems.length > 0) {\n functions.push([\n 'tuple',\n prefixItems.map((item, idx) =>\n generateZodValidationSchemaDefinition(\n dereference(item, context),\n context,\n camel(`${name}-${idx}-item`),\n isZodV4,\n strict,\n {\n required: true,\n constNameRegistry,\n useReusableSchemas,\n urlEncoded,\n },\n ),\n ),\n ]);\n\n if (\n schema.items &&\n (max ?? Number.POSITIVE_INFINITY) > prefixItems.length\n ) {\n // only add zod.rest() if number of tuple elements can exceed provided prefixItems:\n functions.push([\n 'rest',\n generateZodValidationSchemaDefinition(\n schema.items as OpenApiSchemaObject | undefined,\n context,\n camel(`${name}-item`),\n strict,\n isZodV4,\n {\n required: true,\n constNameRegistry,\n useReusableSchemas,\n urlEncoded,\n },\n ),\n ]);\n }\n }\n }\n break;\n }\n case 'array': {\n functions.push([\n 'array',\n generateZodValidationSchemaDefinition(\n schema.items as OpenApiSchemaObject | undefined,\n context,\n camel(`${name}-item`),\n strict,\n isZodV4,\n {\n required: true,\n constNameRegistry,\n useReusableSchemas,\n urlEncoded,\n },\n ),\n ]);\n break;\n }\n case 'string': {\n if (schema.enum) {\n break;\n }\n\n if (\n context.output.override.useDates &&\n (schema.format === 'date' || schema.format === 'date-time')\n ) {\n functions.push(['date', undefined]);\n break;\n }\n\n // url-encoded bodies serialize via URLSearchParams (strings only), so\n // binary fields stay `string` rather than becoming `File` (#3664).\n if (!urlEncoded && schema.format === 'binary') {\n functions.push(['instanceof', 'Blob']);\n break;\n }\n\n // The @scalar/openapi-parser upgrader converts format: binary to\n // contentMediaType: application/octet-stream when upgrading\n // Swagger 2.0 / OAS 3.0 → OAS 3.1. Treat it the same as\n // format: binary so $ref-based model types generate Blob validation.\n if (\n !urlEncoded &&\n schema.contentMediaType === 'application/octet-stream' &&\n !schema.contentEncoding\n ) {\n functions.push(['instanceof', 'Blob']);\n break;\n }\n\n if (isZodV4) {\n if (!predefinedZodFormats.has(schema.format ?? '')) {\n if ('const' in schema) {\n functions.push(['literal', JSON.stringify(String(schema.const))]);\n } else if (schema.pattern && schema.format) {\n const regexp = buildRegExpLiteral(schema.pattern);\n consts.push(\n `export const ${name}RegExp${constsCounterValue} = ${regexp};\\n`,\n );\n functions.push([\n 'stringFormat',\n [\n `'${jsStringLiteralEscape(schema.format)}'`,\n `${name}RegExp${constsCounterValue}`,\n ],\n ]);\n } else {\n functions.push([type as string, undefined]);\n }\n break;\n }\n } else {\n if ('const' in schema) {\n functions.push(['literal', JSON.stringify(String(schema.const))]);\n } else {\n functions.push([type as string, undefined]);\n }\n }\n\n if (schema.format === 'date') {\n const formatAPI = getZodDateFormat(isZodV4);\n\n functions.push([formatAPI, undefined]);\n break;\n }\n\n if (schema.format === 'time') {\n const options = context.output.override.zod.timeOptions;\n const formatAPI = getZodTimeFormat(isZodV4);\n\n functions.push([formatAPI, JSON.stringify(options)]);\n break;\n }\n\n if (schema.format === 'date-time') {\n const options = context.output.override.zod.dateTimeOptions;\n const formatAPI = getZodDateTimeFormat(isZodV4);\n\n functions.push([formatAPI, JSON.stringify(options)]);\n break;\n }\n\n if (schema.format === 'email') {\n functions.push(['email', undefined]);\n break;\n }\n\n if (schema.format === 'uri') {\n functions.push(['url', undefined]);\n break;\n }\n\n if (schema.format === 'hostname') {\n if (isZodV4) {\n functions.push(['hostname', undefined]);\n } else {\n functions.push(['url', undefined]);\n }\n break;\n }\n\n if (schema.format === 'uuid') {\n functions.push(['uuid', undefined]);\n break;\n }\n\n break;\n }\n case 'never': {\n // `not`-forbidden keys render as `zod.never()`. Optional, so the key's\n // absence passes while any supplied value fails validation. (#3780)\n functions.push(['never', undefined]);\n if (required) {\n functions.push(['optional', undefined]);\n }\n break;\n }\n\n default: {\n // Handle const for number, boolean, null, and object types\n if ('const' in schema) {\n const constValue = schema.const;\n if (\n isNumber(constValue) ||\n isBoolean(constValue) ||\n constValue === null\n ) {\n functions.push(['literal', constValue]);\n break;\n }\n }\n\n const hasProperties = !!schema.properties;\n const properties = schema.properties ?? {};\n const hasDefinedProperties = Object.keys(properties).length > 0;\n const hasAdditionalPropertiesSchema =\n !!schema.additionalProperties &&\n !isBoolean(schema.additionalProperties);\n\n // A plain `type: object` without explicit properties/additionalProperties\n // represents an open dictionary-like object in OpenAPI and should not be\n // generated as a strict object.\n const shouldUseLooseObject =\n type === 'object' &&\n !hasDefinedProperties &&\n schema.additionalProperties === undefined &&\n !hasAdditionalPropertiesSchema;\n\n if (hasProperties && hasDefinedProperties) {\n const objectType = getObjectFunctionName(isZodV4, strict);\n\n // A property is required when this schema requires it OR when a\n // sibling `allOf` member requires it (propagated via additionalRequired). (#3171)\n const requiredKeys = new Set<string>([\n ...getRequiredKeys(schema, name),\n ...(rules?.additionalRequired ?? []),\n ]);\n\n functions.push([\n objectType,\n Object.keys(properties)\n .map((key) => ({\n [key]:\n rules?.propertyOverrides?.[key] ??\n generateZodValidationSchemaDefinition(\n properties[key] as OpenApiSchemaObject | undefined,\n context,\n camel(`${name}-${key}`),\n strict,\n isZodV4,\n {\n required: requiredKeys.has(key),\n constNameRegistry,\n useReusableSchemas,\n urlEncoded,\n },\n ),\n }))\n .reduce((acc, curr) => ({ ...acc, ...curr }), {}),\n ]);\n\n if (strict && !isZodV4) {\n functions.push(['strict', undefined]);\n }\n\n break;\n }\n\n if (shouldUseLooseObject) {\n const looseObjectType = getLooseObjectFunctionName(isZodV4);\n\n functions.push([looseObjectType, {}]);\n\n if (!isZodV4) {\n functions.push(['passthrough', undefined]);\n }\n\n break;\n }\n\n if (schema.additionalProperties) {\n functions.push([\n 'additionalProperties',\n generateZodValidationSchemaDefinition(\n isBoolean(schema.additionalProperties)\n ? {}\n : (schema.additionalProperties as OpenApiSchemaObject),\n context,\n name,\n strict,\n isZodV4,\n {\n required: true,\n constNameRegistry,\n useReusableSchemas,\n urlEncoded,\n },\n ),\n ]);\n\n break;\n }\n\n if (schema.enum) {\n break;\n }\n\n functions.push([type === 'integer' ? 'int' : type, undefined]);\n\n break;\n }\n }\n }\n\n if (!hasNonArrayEnum && isString(type) && minAndMaxTypes.has(type)) {\n // Handle minimum constraints: exclusiveMinimum (>.gt()) takes priority over minimum (.min())\n // Check if exclusive flag was set (boolean format in OpenAPI 3.0) or a different value (OpenAPI 3.1)\n const shouldUseExclusiveMin = exclusiveMinRaw !== undefined;\n const shouldUseExclusiveMax = exclusiveMaxRaw !== undefined;\n\n if (shouldUseExclusiveMin && exclusiveMin !== undefined) {\n consts.push(\n `export const ${name}ExclusiveMin${constsCounterValue} = ${exclusiveMin};`,\n );\n // Generate .gt() for exclusive minimum (> instead of >=)\n functions.push(['gt', `${name}ExclusiveMin${constsCounterValue}`]);\n } else if (min !== undefined) {\n if (min === 1) {\n functions.push(['min', `${min}`]);\n } else {\n consts.push(`export const ${name}Min${constsCounterValue} = ${min};`);\n functions.push(['min', `${name}Min${constsCounterValue}`]);\n }\n }\n\n // Handle maximum constraints: exclusiveMaximum (<.lt()) takes priority over maximum (.max())\n if (shouldUseExclusiveMax && exclusiveMax !== undefined) {\n consts.push(\n `export const ${name}ExclusiveMax${constsCounterValue} = ${exclusiveMax};`,\n );\n // Generate .lt() for exclusive maximum (< instead of <=)\n functions.push(['lt', `${name}ExclusiveMax${constsCounterValue}`]);\n } else if (max !== undefined) {\n consts.push(`export const ${name}Max${constsCounterValue} = ${max};`);\n functions.push(['max', `${name}Max${constsCounterValue}`]);\n }\n\n if (multipleOf !== undefined) {\n consts.push(\n `export const ${name}MultipleOf${constsCounterValue} = ${multipleOf.toString()};`,\n );\n functions.push(['multipleOf', `${name}MultipleOf${constsCounterValue}`]);\n }\n if (\n exclusiveMin !== undefined ||\n min !== undefined ||\n exclusiveMax !== undefined ||\n multipleOf !== undefined ||\n max !== undefined\n ) {\n consts.push(`\\n`);\n }\n }\n\n const stringFormatAlreadyEmitted =\n isZodV4 &&\n type === 'string' &&\n !!matches &&\n !!schema.format &&\n !predefinedZodFormats.has(schema.format ?? '');\n\n if (\n matches &&\n !hasNonArrayEnum &&\n type === 'string' &&\n !stringFormatAlreadyEmitted\n ) {\n const regexp = buildRegExpLiteral(matches);\n\n consts.push(\n `export const ${name}RegExp${constsCounterValue} = ${regexp};\\n`,\n );\n if (schema.format && !predefinedZodFormats.has(schema.format) && isZodV4) {\n functions.push([\n 'stringFormat',\n [\n `'${jsStringLiteralEscape(schema.format)}'`,\n `${name}RegExp${constsCounterValue}`,\n ],\n ]);\n } else {\n functions.push(['regex', `${name}RegExp${constsCounterValue}`]);\n }\n }\n\n // Array item enums are handled by the nested item schema. Guard parent-array\n // enum emission to avoid generating invalid trailing `.enum(...)` chains.\n\n if (schema.enum && type !== 'array') {\n const enumMembers = getEnumMembers(schema);\n const hasMetadata = hasEnumMetadata(enumMembers);\n const enumValueInfo = getEnumValueInfo(enumMembers);\n\n const enumValues = enumMembers.map((member) => member.value);\n\n const canUseEnumObject =\n enumValueInfo.isHomogeneous && !enumValueInfo.isBoolean && hasMetadata;\n\n if (canUseEnumObject) {\n // The enum object is inserted as an object-literal argument to\n // `zod.enum({ ... })` (or `zod.nativeEnum({ ... } as const)`), so only\n // CONST generation is valid here: it emits `key: value` pairs. The other\n // two modes produce output that is not valid in that position — `union`\n // emits a type union (`'A' | 'B'`), and `enum` emits assignment syntax\n // (`A = 'A'`) that only parses inside an `enum` declaration. The user's\n // `enumGenerationType` override is deliberately ignored; wiring it through\n // would make the generated code fail to parse. See docs/guides/enums.mdx\n // (Zod section).\n const enumContent = getEnumImplementation(enumMembers, {\n enumNamingConvention: context.output.override.namingConvention.enum,\n enumGenerationType: EnumGeneration.CONST,\n });\n functions.push(['enumObject', `{\\n${enumContent}}`]);\n } else if (enumValues.every((value) => isString(value))) {\n functions.push([\n 'enum',\n `[${enumValues\n .map((value) => `'${jsStringLiteralEscape(value)}'`)\n .join(', ')}]`,\n ]);\n } else {\n functions.push([\n 'oneOf',\n enumMembers.map((member) => ({\n functions: [\n [\n 'literal',\n isString(member.value)\n ? `'${jsStringLiteralEscape(member.value)}'`\n : member.value,\n ],\n ],\n consts: [],\n })),\n ]);\n }\n }\n\n if (!required && nullable) {\n functions.push(['nullish', undefined]);\n } else if (nullable) {\n functions.push(['nullable', undefined]);\n } else if (!required && !hasDefault) {\n functions.push(['optional', undefined]);\n }\n\n if (hasDefault) {\n functions.push(['default', defaultVarName]);\n }\n\n pushDescriptionOrMeta();\n\n return { functions, consts: unique(consts) };\n};\n\n/**\n * Runtime shape passed to the user-supplied `override.zod.params` function for\n * every emitted validator. Exported so consumers can type their function with\n * `import type { ZodParamsContext } from 'orval'` instead of hand-writing it.\n */\nexport interface ZodParamsContext {\n /** The OpenAPI `operationId`, or `''` for shared component schemas. */\n operationId: string;\n /** `'schema'` is used for shared component schemas with no owning operation. */\n location: 'param' | 'query' | 'header' | 'body' | 'response' | 'schema';\n /** Generated schema name, e.g. `CreateUserBody`, or the component name. */\n schemaName: string;\n /** Path to the current property within the schema. Only object property names are appended. */\n fieldPath: string[];\n /** The Zod method being emitted, e.g. `'string'`, `'min'`, `'email'`. */\n validator: string;\n}\n\nexport interface ZodParamsInjection extends Pick<\n ZodParamsContext,\n 'operationId' | 'location' | 'schemaName'\n> {\n mutator: GeneratorMutator;\n}\n\nconst PARAMS_MODIFIER_VALIDATORS = new Set([\n 'optional',\n 'nullable',\n 'nullish',\n 'default',\n 'describe',\n // Nullary / degenerate validators — either no params arg accepted in zod v3\n // (e.g. .unknown(), .any(), .never(), .null(), .undefined(), .void()) or no\n // meaningful error to attach (unknown/any accept everything).\n 'unknown',\n 'any',\n 'never',\n 'null',\n 'undefined',\n 'void',\n]);\n\n// Validators whose single argument is already a params-shaped options object\n// (e.g. `z.iso.datetime({ offset, precision })`). For these, the injected\n// params must merge into the existing object rather than be appended as a\n// second argument.\nconst PARAMS_MERGE_INTO_OPTIONS_VALIDATORS = new Set([\n 'datetime',\n 'time',\n 'iso.datetime',\n 'iso.time',\n]);\n\nexport interface ZodMetaArgs {\n id?: string;\n title?: string;\n description?: string;\n deprecated?: boolean;\n}\n\n// The object literal for a `.meta(...)` call, built explicitly rather than via\n// `stringify` so the strings are JS-escaped and the key order is stable: id,\n// title, description, deprecated. Every key is optional. A schema name (`id`)\n// is only available for top-level component schemas, while a `oneOf` const\n// branch carries member metadata and no name. Returns undefined when nothing\n// is left to emit, so the caller can skip the call entirely.\nconst buildMetaArgs = (args: ZodMetaArgs): string | undefined => {\n const parts: string[] = [];\n if (args.id !== undefined) {\n parts.push(`id: '${jsStringEscape(args.id)}'`);\n }\n if (args.title !== undefined) {\n parts.push(`title: '${jsStringEscape(args.title)}'`);\n }\n if (args.description !== undefined) {\n parts.push(`description: '${jsStringEscape(args.description)}'`);\n }\n if (args.deprecated) {\n parts.push('deprecated: true');\n }\n return parts.length > 0 ? `{ ${parts.join(', ')} }` : undefined;\n};\n\nexport const parseZodValidationSchemaDefinition = (\n input: ZodValidationSchemaDefinition,\n context: ContextSpec,\n coerceTypes: boolean | ZodCoerceType[] = false,\n strict: boolean,\n isZodV4: boolean,\n preprocess?: GeneratorMutator,\n paramsInjection?: ZodParamsInjection,\n variant: ZodVariantOption = 'classic',\n exactOptional = false,\n): { zod: string; consts: string; usedRefs: Set<string> } => {\n if (input.functions.length === 0) {\n return { zod: '', consts: '', usedRefs: new Set() };\n }\n\n let consts = '';\n const usedRefs = new Set<string>();\n\n const appendConstsChunk = (chunk: string) => {\n if (!chunk) {\n return;\n }\n\n if (\n consts.length > 0 &&\n !consts.endsWith('\\n') &&\n !chunk.startsWith('\\n')\n ) {\n consts += '\\n';\n }\n\n consts += chunk;\n };\n\n const formatFunctionArgs = (value: unknown): string => {\n if (value === undefined) return '';\n if (value === null) return 'null';\n if (isString(value)) return value;\n if (Array.isArray(value)) {\n return value.map((item) => formatFunctionArgs(item)).join(', ');\n }\n if (isObject(value)) {\n return stringify(value) ?? '';\n }\n if (isNumber(value) || isBoolean(value)) return `${value}`;\n return '';\n };\n\n const buildParamsArg = (\n fn: string,\n fieldPath: readonly string[],\n ): string | undefined => {\n if (!paramsInjection) return undefined;\n if (PARAMS_MODIFIER_VALIDATORS.has(fn)) return undefined;\n const ctx: ZodParamsContext = {\n operationId: paramsInjection.operationId,\n location: paramsInjection.location,\n schemaName: paramsInjection.schemaName,\n fieldPath: [...fieldPath],\n validator: fn,\n };\n return `${paramsInjection.mutator.name}(${JSON.stringify(ctx)})`;\n };\n\n const shouldCoerce = (fn: string) =>\n coerceTypes &&\n (Array.isArray(coerceTypes)\n ? coerceTypes.includes(fn as ZodCoerceType)\n : COERCIBLE_TYPES.has(fn));\n\n const buildCombinedArgs = (\n fn: string,\n args: unknown,\n fieldPath: readonly string[],\n ) => {\n const formattedArgs = formatFunctionArgs(args);\n const paramsArg = buildParamsArg(fn, fieldPath);\n if (\n paramsArg &&\n formattedArgs &&\n PARAMS_MERGE_INTO_OPTIONS_VALIDATORS.has(fn)\n ) {\n return `{ ...${formattedArgs}, ...${paramsArg} }`;\n }\n if (paramsArg) {\n return formattedArgs ? `${formattedArgs}, ${paramsArg}` : paramsArg;\n }\n return formattedArgs;\n };\n\n type MiniRendered = { expr: string; kind?: string };\n\n const renderMiniDefinition = (\n definition: ZodValidationSchemaDefinition,\n fieldPath: readonly string[] = [],\n ): MiniRendered => {\n let current: MiniRendered | undefined;\n\n const requireCurrent = (fn: string) => {\n if (!current) {\n throw new Error(`Cannot render zod mini ${fn} without a base schema`);\n }\n return current;\n };\n\n const renderObject = (\n objectArgs: Record<string, ZodValidationSchemaDefinition>,\n objectType: string,\n ): MiniRendered => ({\n kind: 'object',\n expr: `${zodMiniCall(\n objectType,\n `{\n${Object.entries(objectArgs)\n .map(([key, schema]) => {\n const rendered = renderMiniDefinition(schema, [...fieldPath, key]);\n appendConstsChunk(schema.consts.join('\\n'));\n const coerceArrays =\n Array.isArray(coerceTypes) &&\n coerceTypes.includes('array' as ZodCoerceType);\n if (coerceArrays && schema.functions.some(([fn]) => fn === 'array')) {\n return ` ${JSON.stringify(key)}: ${zodMiniCall('pipe', `${zodMiniCall('transform', '(value) => value === undefined || Array.isArray(value) ? value : [value]')}, ${rendered.expr}`)}`;\n }\n return ` ${JSON.stringify(key)}: ${rendered.expr}`;\n })\n .join(',\\n')}\n}`,\n )}`,\n });\n\n // Merge an `allOf` of object schemas into one set of properties, or null\n // when a part isn't a plain object. Mirrors `mergeAllOfObjectsClassic`.\n const mergeAllOfObjectsMini = (\n allOfArgs: ZodValidationSchemaDefinition[],\n ): Record<string, ZodValidationSchemaDefinition> | null => {\n const allAreObjects =\n allOfArgs.length > 0 &&\n allOfArgs.every((partSchema) => {\n if (partSchema.functions.length === 0) return false;\n const firstFn = partSchema.functions[0][0];\n return firstFn === 'object' || firstFn === 'strictObject';\n });\n if (!allAreObjects) return null;\n\n const mergedProperties: Record<string, ZodValidationSchemaDefinition> =\n {};\n for (const partSchema of allOfArgs) {\n if (partSchema.consts.length > 0) {\n appendConstsChunk(partSchema.consts.join('\\n'));\n }\n const objectFunctionIndex = partSchema.functions.findIndex(\n ([fnName]) => fnName === 'object' || fnName === 'strictObject',\n );\n if (objectFunctionIndex !== -1) {\n const objectArgs = partSchema.functions[objectFunctionIndex][1];\n if (isObject(objectArgs)) {\n Object.assign(\n mergedProperties,\n objectArgs as Record<string, ZodValidationSchemaDefinition>,\n );\n }\n }\n }\n return mergedProperties;\n };\n\n // Render a single discriminated-union branch as a `ZodObject` (see\n // `renderDiscriminatedUnionMember` for the classic-variant counterpart).\n const renderDiscriminatedUnionMemberMini = (\n member: ZodValidationSchemaDefinition,\n ): string => {\n if (member.functions[0]?.[0] === 'allOf') {\n const merged = mergeAllOfObjectsMini(\n member.functions[0][1] as ZodValidationSchemaDefinition[],\n );\n if (merged !== null) {\n return renderObject(merged, getObjectFunctionName(true, strict)).expr;\n }\n }\n appendConstsChunk(member.consts.join('\\n'));\n return renderMiniDefinition(member, fieldPath).expr;\n };\n\n for (let index = 0; index < definition.functions.length; index++) {\n const [fn, args = ''] = definition.functions[index];\n\n if (fn === 'namedRef') {\n const refArgs = args as { name: string; sourceRef: string };\n usedRefs.add(refArgs.name);\n current = { expr: `__REF_${refArgs.name}__`, kind: 'ref' };\n continue;\n }\n\n if (fn === 'fileOrString') {\n current = {\n expr: zodMiniCall(\n 'union',\n `[${zodMiniCall('instanceof', 'Blob')}, ${zodMiniCall('string')}]`,\n ),\n kind: 'union',\n };\n continue;\n }\n\n if (fn === 'enumObject') {\n // Mini's `_enum` has no `const` type parameter, so an object literal\n // would widen to `Record<string, string | number>` and the generated\n // schema would lose its member literal types. Classic v3 already\n // appends `as const` for the same reason; mirror it here.\n current = {\n expr: zodMiniCall('enum', `${String(args)} as const`),\n kind: 'enum',\n };\n continue;\n }\n\n if (fn === 'allOf') {\n const allOfArgs = args as ZodValidationSchemaDefinition[];\n const mergedProperties = strict\n ? mergeAllOfObjectsMini(allOfArgs)\n : null;\n\n if (mergedProperties !== null) {\n current = renderObject(\n mergedProperties,\n getObjectFunctionName(true, strict),\n );\n continue;\n }\n\n const rendered = allOfArgs.map((partSchema) => {\n appendConstsChunk(partSchema.consts.join('\\n'));\n return renderMiniDefinition(partSchema, fieldPath).expr;\n });\n if (rendered.length === 0) {\n current = { expr: '' };\n continue;\n }\n current = {\n expr: rendered.reduce((acc, value) =>\n acc ? zodMiniCall('intersection', `${acc}, ${value}`) : value,\n ),\n kind: 'intersection',\n };\n continue;\n }\n\n const discriminator = decodeDiscriminatorSeparator(fn);\n if (discriminator || fn === 'oneOf' || fn === 'anyOf') {\n const unionArgs = args as ZodValidationSchemaDefinition[];\n if (unionArgs.length === 1) {\n appendConstsChunk(unionArgs[0].consts.join('\\n'));\n current = renderMiniDefinition(unionArgs[0], fieldPath);\n continue;\n }\n if (discriminator) {\n current = {\n expr: zodMiniCall(\n 'discriminatedUnion',\n `'${jsStringEscape(discriminator.property)}', [${unionArgs\n .map((arg) => renderDiscriminatedUnionMemberMini(arg))\n .join(',')}]`,\n ),\n kind: 'union',\n };\n continue;\n }\n current = {\n expr: zodMiniCall(\n 'union',\n `[${unionArgs\n .map((arg) => {\n appendConstsChunk(arg.consts.join('\\n'));\n return renderMiniDefinition(arg, fieldPath).expr;\n })\n .join(',')}]`,\n ),\n kind: 'union',\n };\n continue;\n }\n\n if (fn === 'additionalProperties') {\n const additionalPropertiesArgs = args as ZodValidationSchemaDefinition;\n const rendered = renderMiniDefinition(\n additionalPropertiesArgs,\n fieldPath,\n );\n if (Array.isArray(additionalPropertiesArgs.consts)) {\n appendConstsChunk(additionalPropertiesArgs.consts.join('\\n'));\n }\n current = {\n expr: zodMiniCall(\n 'record',\n `${zodMiniCall('string')}, ${rendered.expr}`,\n ),\n kind: 'object',\n };\n continue;\n }\n\n if (fn === 'object' || fn === 'strictObject' || fn === 'looseObject') {\n const objectType =\n fn === 'looseObject'\n ? 'looseObject'\n : getObjectFunctionName(true, strict);\n current = renderObject(\n args as Record<string, ZodValidationSchemaDefinition>,\n objectType,\n );\n continue;\n }\n\n if (fn === 'passthrough' || fn === 'strict') {\n continue;\n }\n\n if (fn === 'array') {\n const arrayArgs = args as ZodValidationSchemaDefinition;\n const rendered = renderMiniDefinition(arrayArgs, fieldPath);\n if (isString(arrayArgs.consts)) {\n appendConstsChunk(arrayArgs.consts);\n } else if (Array.isArray(arrayArgs.consts)) {\n appendConstsChunk(arrayArgs.consts.join('\\n'));\n }\n current = { expr: zodMiniCall('array', rendered.expr), kind: 'array' };\n continue;\n }\n\n if (fn === 'tuple') {\n const tupleItems = (args as ZodValidationSchemaDefinition[])\n .map((x) => {\n const rendered = renderMiniDefinition(x, fieldPath);\n appendConstsChunk(x.consts.join('\\n'));\n return rendered.expr;\n })\n .join(',\\n');\n const next = definition.functions[index + 1];\n if (next?.[0] === 'rest') {\n const restDefinition = next[1] as ZodValidationSchemaDefinition;\n const rest = renderMiniDefinition(restDefinition, fieldPath).expr;\n appendConstsChunk(restDefinition.consts.join('\\n'));\n current = {\n expr: zodMiniCall('tuple', `[${tupleItems}], ${rest}`),\n kind: 'tuple',\n };\n index++;\n } else {\n current = {\n expr: zodMiniCall('tuple', `[${tupleItems}]`),\n kind: 'tuple',\n };\n }\n continue;\n }\n\n const combinedArgs = buildCombinedArgs(fn, args, fieldPath);\n\n if (fn === 'int' && shouldCoerce('number')) {\n const numberArgs = buildCombinedArgs('number', undefined, fieldPath);\n current = {\n expr: zodMiniCall(\n 'pipe',\n `${zodMiniCoerceCall('number', numberArgs)}, ${zodMiniCall('int', combinedArgs)}`,\n ),\n kind: 'number',\n };\n continue;\n }\n\n if (fn === 'optional' || fn === 'nullable' || fn === 'nullish') {\n const value = requireCurrent(fn);\n const miniFn =\n exactOptional && isZodV4 && fn === 'optional' ? 'exactOptional' : fn;\n current = { expr: zodMiniCall(miniFn, value.expr), kind: value.kind };\n continue;\n }\n\n if (fn === 'default') {\n const value = requireCurrent(fn);\n current = {\n expr: zodMiniCall('_default', `${value.expr}, ${combinedArgs}`),\n kind: value.kind,\n };\n continue;\n }\n\n // Mini has no `.meta()` method, so registry metadata rides in as a\n // check. The argument goes through the same builder as the classic path,\n // so both variants emit the same keys in the same order.\n if (fn === 'meta') {\n const value = requireCurrent(fn);\n const metaArgs = buildMetaArgs(args as ZodMetaArgs);\n if (metaArgs) {\n current = {\n expr: `${value.expr}.check(${zodMiniCall(fn, metaArgs)})`,\n kind: value.kind,\n };\n }\n continue;\n }\n\n if (fn === 'describe') {\n const value = requireCurrent(fn);\n current = {\n expr: `${value.expr}.check(${zodMiniCall(fn, combinedArgs)})`,\n kind: value.kind,\n };\n continue;\n }\n\n if (\n fn === 'min' ||\n fn === 'max' ||\n fn === 'gt' ||\n fn === 'lt' ||\n fn === 'multipleOf' ||\n fn === 'regex' ||\n fn === 'length'\n ) {\n const value = requireCurrent(fn);\n const checkName =\n fn === 'min'\n ? value.kind === 'number'\n ? 'gte'\n : 'minLength'\n : fn === 'max'\n ? value.kind === 'number'\n ? 'lte'\n : 'maxLength'\n : fn;\n current = {\n expr: `${value.expr}.check(${zodMiniCall(checkName, combinedArgs)})`,\n kind: value.kind,\n };\n continue;\n }\n\n if (\n (fn !== 'date' && shouldCoerce(fn)) ||\n (fn === 'date' && shouldCoerce(fn) && context.output.override.useDates)\n ) {\n current = {\n expr: zodMiniCoerceCall(fn, combinedArgs),\n kind: fn,\n };\n continue;\n }\n\n current = {\n expr: zodMiniCall(fn, combinedArgs),\n kind:\n fn === 'int'\n ? 'number'\n : fn === 'enum' || fn === 'literal' || fn === 'stringFormat'\n ? 'string'\n : fn.split('.')[0],\n };\n }\n\n return current ?? { expr: '' };\n };\n\n // Merge an `allOf` of object schemas into a single `zod.object({...})`.\n // Returns null when a part isn't a plain object (so the caller can fall back\n // to `.and()`). Used both for strict-mode object merging and to turn an\n // inheritance branch of a discriminated union into a valid object option.\n function mergeAllOfObjectsClassic(\n allOfArgs: ZodValidationSchemaDefinition[],\n fieldPath: readonly string[],\n ): string | null {\n const allAreObjects =\n allOfArgs.length > 0 &&\n allOfArgs.every((partSchema) => {\n if (partSchema.functions.length === 0) return false;\n const firstFn = partSchema.functions[0][0];\n // Zod v3 renders a strict object as `object(...).strict()`, so the\n // object constructor is still the first function.\n return firstFn === 'object' || firstFn === 'strictObject';\n });\n if (!allAreObjects) return null;\n\n const mergedProperties: Record<string, ZodValidationSchemaDefinition> = {};\n let allConsts = '';\n for (const partSchema of allOfArgs) {\n if (partSchema.consts.length > 0) {\n allConsts += partSchema.consts.join('\\n');\n }\n const objectFunctionIndex = partSchema.functions.findIndex(\n ([fnName]) => fnName === 'object' || fnName === 'strictObject',\n );\n if (objectFunctionIndex !== -1) {\n const objectArgs = partSchema.functions[objectFunctionIndex][1];\n if (isObject(objectArgs)) {\n // Later members override earlier ones (derived over base).\n Object.assign(\n mergedProperties,\n objectArgs as Record<string, ZodValidationSchemaDefinition>,\n );\n }\n }\n }\n\n if (allConsts.length > 0) {\n appendConstsChunk(allConsts);\n }\n\n const objectType = getObjectFunctionName(isZodV4, strict);\n const mergedObjectString = `zod.${objectType}({\n${Object.entries(mergedProperties)\n .map(([key, schema]) => {\n const value = schema.functions\n .map((prop) => parseProperty(prop, [...fieldPath, key]))\n .join('');\n appendConstsChunk(schema.consts.join('\\n'));\n return ` ${JSON.stringify(key)}: ${value.startsWith('.') ? 'zod' : ''}${value}`;\n })\n .join(',\\n')}\n})`;\n\n // Apply strict only once for Zod v3 (v4 uses strictObject above).\n if (strict && !isZodV4) {\n return `${mergedObjectString}.strict()`;\n }\n return mergedObjectString;\n }\n\n // Render a single discriminated-union branch as a `ZodObject`. `allOf`\n // (inheritance) branches are merged into one object; every other branch is a\n // plain object or a `$ref` identifier and renders as-is. Generation only\n // marks the union as discriminated when all branches satisfy this, so the\n // fallback here should not trigger in practice.\n const renderDiscriminatedUnionMember = (\n member: ZodValidationSchemaDefinition,\n fieldPath: readonly string[],\n ): string => {\n if (member.functions[0]?.[0] === 'allOf') {\n const merged = mergeAllOfObjectsClassic(\n member.functions[0][1] as ZodValidationSchemaDefinition[],\n fieldPath,\n );\n if (merged !== null) {\n return merged;\n }\n }\n appendConstsChunk(member.consts.join('\\n'));\n const value = member.functions\n .map((prop) => parseProperty(prop, fieldPath))\n .join('');\n return `${value.startsWith('.') ? 'zod' : ''}${value}`;\n };\n\n const parseProperty = (\n property: [string, unknown],\n fieldPath: readonly string[] = [],\n ): string => {\n const [fn, args = ''] = property;\n\n if (fn === 'namedRef') {\n const refArgs = args as { name: string; sourceRef: string };\n usedRefs.add(refArgs.name);\n return `__REF_${refArgs.name}__`;\n }\n\n if (fn === 'enumObject') {\n const enumObjectImplementation = args as string;\n return isZodV4\n ? `.enum(${enumObjectImplementation})`\n : `.nativeEnum(${enumObjectImplementation} as const)`;\n }\n\n // `.meta({ id?, title?, description?, deprecated? })`, registry metadata\n // for zod v4. `id` names a top-level component schema; a `oneOf` const\n // branch has no name and carries only member metadata.\n if (fn === 'meta') {\n const metaArgs = buildMetaArgs(args as ZodMetaArgs);\n return metaArgs ? `.meta(${metaArgs})` : '';\n }\n\n // File | string for text contentMediaType/encoding (user can pass string, runtime wraps in Blob)\n if (fn === 'fileOrString') {\n return 'zod.instanceof(Blob).or(zod.string())';\n }\n\n if (fn === 'allOf') {\n const allOfArgs = args as ZodValidationSchemaDefinition[];\n // In strict mode, merge object parts into a single object so the extra\n // constraint applies once (rather than to each `.and()` term).\n if (strict) {\n const merged = mergeAllOfObjectsClassic(allOfArgs, fieldPath);\n if (merged !== null) {\n return merged;\n }\n }\n\n // Fallback to original .and() approach for non-object or non-strict cases\n let acc = '';\n for (const partSchema of allOfArgs) {\n const value = partSchema.functions\n .map((prop) => parseProperty(prop, fieldPath))\n .join('');\n const valueWithZod = `${value.startsWith('.') ? 'zod' : ''}${value}`;\n\n if (partSchema.consts.length > 0) {\n appendConstsChunk(partSchema.consts.join('\\n'));\n }\n\n if (acc.length === 0) {\n acc = valueWithZod;\n } else {\n acc += `.and(${valueWithZod})`;\n }\n }\n\n return acc;\n }\n const discriminator = decodeDiscriminatorSeparator(fn);\n if (discriminator || fn === 'oneOf' || fn === 'anyOf') {\n const unionArgs = args as ZodValidationSchemaDefinition[];\n // Can't use zod.union() with a single item\n if (unionArgs.length === 1) {\n appendConstsChunk(unionArgs[0].consts.join('\\n'));\n return unionArgs[0].functions\n .map((prop: [string, unknown]) => parseProperty(prop, fieldPath))\n .join('');\n }\n\n if (discriminator) {\n const members = unionArgs.map((member) =>\n renderDiscriminatedUnionMember(member, fieldPath),\n );\n return `.discriminatedUnion('${jsStringEscape(discriminator.property)}', [${members.join(',')}])`;\n }\n\n const union = unionArgs.map(\n ({\n functions,\n consts: argConsts,\n }: {\n functions: [string, unknown][];\n consts: string[];\n }) => {\n const value = functions\n .map((prop) => parseProperty(prop, fieldPath))\n .join('');\n const valueWithZod = `${value.startsWith('.') ? 'zod' : ''}${value}`;\n // consts are missing here\n appendConstsChunk(argConsts.join('\\n'));\n return valueWithZod;\n },\n );\n\n return `.union([${union.join(',')}])`;\n }\n\n if (fn === 'additionalProperties') {\n const additionalPropertiesArgs = args as ZodValidationSchemaDefinition;\n const value = additionalPropertiesArgs.functions\n .map((prop: [string, unknown]) => parseProperty(prop, fieldPath))\n .join('');\n const valueWithZod = `${value.startsWith('.') ? 'zod' : ''}${value}`;\n if (Array.isArray(additionalPropertiesArgs.consts)) {\n appendConstsChunk(additionalPropertiesArgs.consts.join('\\n'));\n }\n return `zod.record(zod.string(), ${valueWithZod})`;\n }\n\n if (fn === 'object' || fn === 'strictObject' || fn === 'looseObject') {\n const objectArgs = args as Record<string, ZodValidationSchemaDefinition>;\n const objectType =\n fn === 'looseObject'\n ? isZodV4\n ? 'looseObject'\n : 'object'\n : getObjectFunctionName(isZodV4, strict);\n\n const parsedObject = `zod.${objectType}({\n${Object.entries(objectArgs)\n .map(([key, schema]) => {\n const value = schema.functions\n .map((prop) => parseProperty(prop, [...fieldPath, key]))\n .join('');\n appendConstsChunk(schema.consts.join('\\n'));\n const fieldZod = `${value.startsWith('.') ? 'zod' : ''}${value}`;\n // Opt-in via `coerce.<location>: ['array', ...]`: a server framework (e.g.\n // Hono) delivers a single repeated-key value as a scalar, not a 1-element\n // array, so `?t=a` would fail z.array(...). Wrap so both `?t=a` and\n // `?t=a&t=b` parse. Undefined passes through so an outer `.optional()`/\n // `.default()` still applies. Already-arrays are left untouched (no-op for\n // JSON-body arrays).\n const coerceArrays =\n Array.isArray(coerceTypes) &&\n coerceTypes.includes('array' as ZodCoerceType);\n if (coerceArrays && schema.functions.some(([fn]) => fn === 'array')) {\n return ` ${JSON.stringify(key)}: zod.preprocess((value) => value === undefined || Array.isArray(value) ? value : [value], ${fieldZod})`;\n }\n return ` ${JSON.stringify(key)}: ${fieldZod}`;\n })\n .join(',\\n')}\n})`;\n\n if (fn === 'looseObject' && !isZodV4) {\n return `${parsedObject}.passthrough()`;\n }\n\n return parsedObject;\n }\n\n if (fn === 'passthrough') {\n return '.passthrough()';\n }\n\n if (fn === 'array') {\n const arrayArgs = args as ZodValidationSchemaDefinition;\n const value = arrayArgs.functions\n .map((prop: [string, unknown]) => parseProperty(prop, fieldPath))\n .join('');\n if (isString(arrayArgs.consts)) {\n appendConstsChunk(arrayArgs.consts);\n } else if (Array.isArray(arrayArgs.consts)) {\n appendConstsChunk(arrayArgs.consts.join('\\n'));\n }\n return `.array(${value.startsWith('.') ? 'zod' : ''}${value})`;\n }\n\n if (fn === 'strict' && !isZodV4) {\n return '.strict()';\n }\n\n if (fn === 'tuple') {\n return `zod.tuple([${(args as ZodValidationSchemaDefinition[])\n .map((x) => {\n const value = x.functions\n .map((prop) => parseProperty(prop, fieldPath))\n .join('');\n return `${value.startsWith('.') ? 'zod' : ''}${value}`;\n })\n .join(',\\n')}])`;\n }\n if (fn === 'rest') {\n return `.rest(zod${(args as ZodValidationSchemaDefinition).functions\n .map((prop) => parseProperty(prop, fieldPath))\n .join('')})`;\n }\n const shouldCoerceType =\n coerceTypes &&\n (Array.isArray(coerceTypes)\n ? coerceTypes.includes(fn as ZodCoerceType)\n : COERCIBLE_TYPES.has(fn));\n\n const formattedArgs = formatFunctionArgs(args);\n const paramsArg = buildParamsArg(fn, fieldPath);\n let combinedArgs: string;\n if (\n paramsArg &&\n formattedArgs &&\n PARAMS_MERGE_INTO_OPTIONS_VALIDATORS.has(fn)\n ) {\n combinedArgs = `{ ...${formattedArgs}, ...${paramsArg} }`;\n } else if (paramsArg) {\n combinedArgs = formattedArgs\n ? `${formattedArgs}, ${paramsArg}`\n : paramsArg;\n } else {\n combinedArgs = formattedArgs;\n }\n\n if (fn === 'int') {\n const numberArgs = buildCombinedArgs('number', undefined, fieldPath);\n if (shouldCoerce('number')) {\n return `.coerce.number(${numberArgs}).int(${combinedArgs})`;\n }\n if (!isZodV4) {\n return `.number(${numberArgs}).int(${combinedArgs})`;\n }\n }\n\n if (\n (fn !== 'date' && shouldCoerceType) ||\n (fn === 'date' && shouldCoerceType && context.output.override.useDates)\n ) {\n return `.coerce.${fn}(${combinedArgs})`;\n }\n\n // `.exactOptional()` (zod v4 only) narrows an optional property to `{ x?: T }`\n // for `exactOptionalPropertyTypes` consumers. Zod v3 has no such method, so\n // the flag no-ops there and a plain `.optional()` is emitted.\n if (exactOptional && isZodV4 && fn === 'optional') {\n return '.exactOptional()';\n }\n\n return `.${fn}(${combinedArgs})`;\n };\n\n appendConstsChunk(input.consts.join('\\n'));\n\n if (variant === 'mini') {\n const rendered = renderMiniDefinition(input);\n const value = preprocess\n ? zodMiniCall(\n 'pipe',\n `${zodMiniCall('transform', preprocess.name)}, ${rendered.expr}`,\n )\n : rendered.expr;\n if (consts.includes(',export')) {\n consts = consts.replaceAll(',export', '\\nexport');\n }\n return { zod: value, consts, usedRefs };\n }\n\n const schema = input.functions.map((prop) => parseProperty(prop)).join('');\n const value = preprocess\n ? `.preprocess(${preprocess.name}, ${\n schema.startsWith('.') ? 'zod' : ''\n }${schema})`\n : schema;\n\n const zod = `${value.startsWith('.') ? 'zod' : ''}${value}`;\n // Some export consts includes `,` as prefix, adding replace to remove those\n if (consts.includes(',export')) {\n consts = consts.replaceAll(',export', '\\nexport');\n }\n return { zod, consts, usedRefs };\n};\n\nconst dereferenceScalar = (value: unknown, context: ContextSpec): unknown => {\n if (isObject(value)) {\n return dereference(\n value as OpenApiSchemaObject | OpenApiReferenceObject,\n context,\n );\n } else if (Array.isArray(value)) {\n return value.map((item) => dereferenceScalar(item, context));\n } else {\n return value;\n }\n};\n\n/**\n * Attempts to resolve a `$ref` to its target schema. Returns `undefined`\n * instead of throwing when the ref cannot be found (e.g. external refs\n * not yet bundled). Logs a verbose warning on failure to aid debugging.\n */\nfunction tryResolveRefSchema(\n $ref: string,\n context: ContextSpec,\n): OpenApiSchemaObject | undefined {\n try {\n return resolveRef({ $ref } as OpenApiReferenceObject, context)\n .schema as OpenApiSchemaObject;\n } catch (error) {\n logVerbose(\n `[orval/zod] Failed to resolve $ref \"${$ref}\":`,\n error instanceof Error ? error.message : error,\n );\n return;\n }\n}\n\nconst COMPONENT_SCHEMAS_PREFIX = '#/components/schemas/';\n\nfunction extractSchemaNameFromRef($ref: string): string | undefined {\n if (!$ref.startsWith(COMPONENT_SCHEMAS_PREFIX)) return undefined;\n const raw = $ref.slice(COMPONENT_SCHEMAS_PREFIX.length);\n return decodeURIComponent(raw.replaceAll('~1', '/').replaceAll('~0', '~'));\n}\n\n/**\n * Recursively inlines all `$ref` and `$dynamicRef` references in an OpenAPI\n * schema tree, producing a fully-resolved schema suitable for Zod code generation.\n *\n * Tracks visited `$ref` paths via `context.parents` to break circular\n * references (returning `{}` for cycles).\n *\n * `$dynamicRef` is resolved using the dynamic scope attached to `context`:\n * 1. Look up the anchor name in `context.dynamicScope`.\n * 2. If not found, fall back to scanning `components.schemas` for a schema\n * that declares `$dynamicAnchor` with the same name.\n * 3. If resolved to a concrete schema, inline it (same as `$ref`).\n * 4. If unresolved, external, or a generic parameter → return `{}`.\n */\nexport const dereference = (\n schema: OpenApiSchemaObject | OpenApiReferenceObject,\n context: ContextSpec,\n): OpenApiSchemaObject => {\n const refName = '$ref' in schema ? schema.$ref : undefined;\n if (refName && context.parents?.includes(refName)) {\n return {};\n }\n\n if (isDynamicReference(schema)) {\n return dereferenceDynamicRef(schema, context);\n }\n\n const childContext: ContextSpec = {\n ...context,\n ...(refName\n ? { parents: [...(context.parents ?? []), refName] }\n : undefined),\n };\n\n const resolvedSchema: OpenApiSchemaObject | undefined =\n '$ref' in schema\n ? (() => {\n const referencedSchema = tryResolveRefSchema(schema.$ref, context);\n\n if (!referencedSchema || !isObject(referencedSchema)) {\n return;\n }\n\n const siblingProperties = Object.fromEntries(\n Object.entries(schema as Record<string, unknown>).filter(\n ([key]) => key !== '$ref',\n ),\n );\n\n return {\n ...(referencedSchema as Record<string, unknown>),\n ...siblingProperties,\n } as OpenApiSchemaObject;\n })()\n : schema;\n\n if (!resolvedSchema) {\n return {};\n }\n\n const resolvedContext = buildScopedContext(\n childContext,\n refName,\n resolvedSchema,\n );\n\n if (isDynamicReference(resolvedSchema)) {\n return dereferenceDynamicRef(resolvedSchema, resolvedContext);\n }\n\n return dereferenceProperties(resolvedSchema, resolvedContext);\n};\n\nfunction dereferenceProperties(\n schema: OpenApiSchemaObject,\n context: ContextSpec,\n): OpenApiSchemaObject {\n return Object.entries(schema).reduce<Record<string, unknown>>(\n (acc, [key, value]) => {\n if (key === 'properties' && isObject(value)) {\n acc[key] = Object.entries(value).reduce<\n Record<string, OpenApiSchemaObject>\n >((props, [propKey, propSchema]) => {\n props[propKey] = dereference(\n propSchema as OpenApiSchemaObject | OpenApiReferenceObject,\n context,\n );\n return props;\n }, {});\n } else if (key === 'default' || key === 'example' || key === 'examples') {\n acc[key] = value;\n } else {\n acc[key] = dereferenceScalar(value, context);\n }\n\n return acc;\n },\n {},\n ) as OpenApiSchemaObject;\n}\n\nfunction buildScopedContext(\n childContext: ContextSpec,\n refName: string | undefined,\n resolvedSchema: OpenApiSchemaObject,\n): ContextSpec {\n if (refName) {\n const schemaName = extractSchemaNameFromRef(refName);\n if (!schemaName) return childContext;\n\n const schemaRecord = resolvedSchema as Record<string, unknown>;\n const hasDynamicAnchor = typeof schemaRecord.$dynamicAnchor === 'string';\n const defs = schemaRecord.$defs as Record<string, unknown> | undefined;\n const hasDefsAnchors =\n defs &&\n typeof defs === 'object' &&\n Object.values(defs).some(\n (d) => d && typeof d === 'object' && '$dynamicAnchor' in d,\n );\n\n if (!hasDynamicAnchor && !hasDefsAnchors) return childContext;\n\n return {\n ...childContext,\n dynamicScope: buildDynamicScope(schemaName, resolvedSchema, childContext),\n };\n }\n\n // Anonymous inline subschema (reached via allOf/items/nested props without a\n // $ref). Detect inline $dynamicAnchor / $defs anchors and merge them over the\n // existing scope so the inline override shadows the parent anchor while\n // non-overridden parent anchors remain reachable. See #3492.\n const inlineScope = buildInlineDynamicScope(resolvedSchema);\n if (Object.keys(inlineScope).length === 0) return childContext;\n\n return {\n ...childContext,\n dynamicScope: { ...childContext.dynamicScope, ...inlineScope },\n };\n}\n\nfunction dereferenceDynamicRef(\n schema: object & { $dynamicRef: string },\n context: ContextSpec,\n): OpenApiSchemaObject {\n const dynamicRef = schema.$dynamicRef;\n const anchorName = getDynamicAnchorName(dynamicRef);\n if (!anchorName) {\n return {};\n }\n\n const {\n resolvedTypeName,\n schema: resolvedSchema,\n schemaName,\n } = resolveDynamicRef(anchorName, context);\n\n // Cycle key. Inline overrides resolve with `schemaName: undefined`, so every\n // resolution of the same anchor collapses to `@?`. This is correct for a\n // self-referential inline override. A false positive is possible only in the\n // contrived shape where an inline override A (reached via `$dynamicRef`) itself\n // contains a *distinct* nested inline override B of the same anchor with a\n // `$dynamicRef` descendant — B's resolution inherits A's key from `parents`\n // and returns `{}` instead of B. Siblings don't leak (each `dereference` uses\n // an immutable parent context), only this nested-via-`$dynamicRef` shape.\n // Acceptable given how exotic it is. See #3492.\n const dynamicRefPath = `$dynamicRef:${dynamicRef}@${schemaName ?? '?'}`;\n if (context.parents?.includes(dynamicRefPath)) {\n return {};\n }\n\n if (resolvedTypeName === 'unknown' || !isObject(resolvedSchema)) {\n return {};\n }\n\n const childContext: ContextSpec = {\n ...context,\n parents: [...(context.parents ?? []), dynamicRefPath],\n };\n\n const scopedContext = buildScopedContext(\n childContext,\n schemaName\n ? `${COMPONENT_SCHEMAS_PREFIX}${encodeSegment(schemaName)}`\n : undefined,\n resolvedSchema,\n );\n\n const siblingProperties = Object.fromEntries(\n Object.entries(schema).filter(([key]) => key !== '$dynamicRef'),\n );\n\n const merged: OpenApiSchemaObject = {\n ...(resolvedSchema as Record<string, unknown>),\n ...siblingProperties,\n } as OpenApiSchemaObject;\n\n return dereferenceProperties(merged, scopedContext);\n}\n\nfunction encodeSegment(segment: string): string {\n return segment.replaceAll('~', '~0').replaceAll('/', '~1');\n}\n\n/**\n * Generate zod schema for form-data request body.\n * Handles file type detection for top-level properties based on encoding.contentType\n * and contentMediaType. Mirrors type gen's resolveFormDataRootObject.\n */\nexport const generateFormDataZodSchema = (\n schema: OpenApiSchemaObject,\n context: ContextSpec,\n name: string,\n strict: boolean,\n isZodV4: boolean,\n encoding?: Record<string, { contentType?: string }>,\n useReusableSchemas?: boolean,\n): ZodValidationSchemaDefinition => {\n // Precompute file type overrides for top-level properties only\n const propertyOverrides: Record<string, ZodValidationSchemaDefinition> = {};\n\n if (schema.properties) {\n for (const key of Object.keys(schema.properties)) {\n const propSchema = schema.properties[key];\n const resolvedPropSchema = propSchema\n ? dereference(\n propSchema as OpenApiSchemaObject | OpenApiReferenceObject,\n context,\n )\n : undefined;\n\n const fileType = resolvedPropSchema\n ? getFormDataFieldFileType(\n resolvedPropSchema,\n encoding?.[key]?.contentType,\n )\n : undefined;\n\n if (fileType) {\n const isRequired = schema.required?.includes(key);\n const fileFunctions: [string, unknown][] = [\n fileType === 'binary'\n ? ['instanceof', 'Blob']\n : ['fileOrString', undefined],\n ];\n if (!isRequired) {\n fileFunctions.push(['optional', undefined]);\n }\n propertyOverrides[key] = { functions: fileFunctions, consts: [] };\n }\n }\n }\n\n // Delegate to generic handler with file type overrides\n return generateZodValidationSchemaDefinition(\n schema,\n context,\n name,\n strict,\n isZodV4,\n {\n required: true,\n propertyOverrides:\n Object.keys(propertyOverrides).length > 0\n ? propertyOverrides\n : undefined,\n useReusableSchemas,\n },\n );\n};\n\n/**\n * Parse a request body or response into a zod validation schema definition.\n *\n * Selects the relevant content type — JSON (and `+json` vendor types),\n * `multipart/form-data`, or `application/x-www-form-urlencoded`, plus\n * `text/plain` for responses — and generates the matching schema, handling\n * array roots. The url-encoded string-contract rationale lives where the flag\n * is derived (see `isFormUrlEncoded` below).\n */\nconst parseBodyAndResponse = ({\n data,\n context,\n name,\n strict,\n generate,\n isZodV4,\n parseType,\n useReusableSchemas,\n}: {\n data:\n | OpenApiResponseObject\n | OpenApiRequestBodyObject\n | OpenApiReferenceObject\n | undefined;\n context: ContextSpec;\n name: string;\n strict: boolean;\n generate: boolean;\n isZodV4: boolean;\n parseType: 'body' | 'response';\n useReusableSchemas?: boolean;\n}): {\n input: ZodValidationSchemaDefinition;\n isArray: boolean;\n rules?: {\n min?: number;\n max?: number;\n };\n} => {\n if (!data || !generate) {\n return {\n input: { functions: [], consts: [] },\n isArray: false,\n };\n }\n\n const resolvedRef = resolveRef(data, context).schema as\n | OpenApiResponseObject\n | OpenApiRequestBodyObject;\n\n // Only handle JSON, form-data and form-urlencoded here; other content types\n // (e.g., application/octet-stream) are skipped - unclear if this is correct\n // behavior for root-level binary/text bodies. The one exception is text/plain\n // responses, which are handled separately below (as a plain string schema).\n const contentEntries = Object.entries(resolvedRef.content ?? {});\n\n const jsonContent = contentEntries.find(\n isMediaType(\n // application/json\n // application/geo+json\n // application/ld+json\n // application/manifest+json\n // application/vnd.api+json (and other valid vendor subtypes)\n String.raw`^application\\/([^/;]+\\+)?json$`,\n ),\n );\n const formDataContent = contentEntries.find(\n isMediaType(String.raw`^multipart\\/form-data$`),\n );\n // form-urlencoded bodies are plain objects serialized via URLSearchParams, so\n // they validate like JSON (no file fields) — emit a regular object schema.\n const formUrlEncodedContent = contentEntries.find(\n isMediaType(String.raw`^application\\/x-www-form-urlencoded$`),\n );\n const [contentType, mediaType] = jsonContent\n ? (['application/json', jsonContent[1]] as const)\n : formDataContent\n ? (['multipart/form-data', formDataContent[1]] as const)\n : formUrlEncodedContent\n ? ([\n 'application/x-www-form-urlencoded',\n formUrlEncodedContent[1],\n ] as const)\n : [undefined, undefined];\n\n // url-encoded bodies serialize via URLSearchParams (strings only); the flag is\n // threaded into the generator so binary fields stay `string` at any depth.\n const isFormUrlEncoded = contentType === 'application/x-www-form-urlencoded';\n\n const schema = mediaType?.schema;\n\n if (!schema) {\n if (parseType === 'response') {\n const textPlainContent = contentEntries.find(\n isMediaType(String.raw`^text\\/plain$`),\n );\n if (textPlainContent) {\n return {\n input: { functions: [['string', undefined]], consts: [] },\n isArray: false,\n };\n }\n }\n\n return {\n input: { functions: [], consts: [] },\n isArray: false,\n };\n }\n\n const encoding = mediaType.encoding;\n const resolvedJsonSchema = dereference(schema, context);\n\n // keep the same behaviour for array\n if (resolvedJsonSchema.items) {\n const min =\n resolvedJsonSchema.minimum ??\n resolvedJsonSchema.minLength ??\n resolvedJsonSchema.minItems;\n const max =\n resolvedJsonSchema.maximum ??\n resolvedJsonSchema.maxLength ??\n resolvedJsonSchema.maxItems;\n\n // When useReusableSchemas is on, shallow-resolve one level so that $ref\n // references inside the items schema are preserved for named-ref emission.\n // E.g. Pets = array of {$ref: Pet} → we want to emit Pet (namedRef)\n // rather than inlining Pet's full schema.\n const rawItems: OpenApiSchemaObject | OpenApiReferenceObject =\n useReusableSchemas\n ? (() => {\n const shallowArraySchema = resolveRef(schema, context)\n .schema as OpenApiSchemaObject;\n return (shallowArraySchema.items ??\n resolvedJsonSchema.items) as OpenApiSchemaObject;\n })()\n : resolvedJsonSchema.items;\n\n return {\n input: generateZodValidationSchemaDefinition(\n parseType === 'body'\n ? removeReadOnlyProperties(rawItems as OpenApiSchemaObject)\n : (rawItems as OpenApiSchemaObject),\n context,\n name,\n strict,\n isZodV4,\n {\n required: true,\n useReusableSchemas,\n urlEncoded: isFormUrlEncoded,\n },\n ),\n isArray: true,\n rules: {\n ...(min === undefined ? {} : { min }),\n ...(max === undefined ? {} : { max }),\n },\n };\n }\n\n // When useReusableSchemas is on, pass the original schema (possibly a $ref)\n // directly to generateZodValidationSchemaDefinition so that component schema\n // references are emitted as named identifiers instead of being inlined.\n const effectiveSchema: OpenApiSchemaObject | OpenApiReferenceObject =\n useReusableSchemas\n ? parseType === 'body'\n ? removeReadOnlyProperties(schema as OpenApiSchemaObject)\n : schema\n : parseType === 'body'\n ? removeReadOnlyProperties(resolvedJsonSchema)\n : resolvedJsonSchema;\n\n const isFormData = contentType === 'multipart/form-data';\n\n return {\n input: isFormData\n ? generateFormDataZodSchema(\n effectiveSchema,\n context,\n name,\n strict,\n isZodV4,\n encoding,\n useReusableSchemas,\n )\n : generateZodValidationSchemaDefinition(\n effectiveSchema,\n context,\n name,\n strict,\n isZodV4,\n { required: true, useReusableSchemas, urlEncoded: isFormUrlEncoded },\n ),\n isArray: false,\n };\n};\n\nconst isMediaType =\n (pattern: string) =>\n ([contentType]: [string, object]): boolean =>\n new RegExp(pattern).test(contentType.split(';')[0].trim().toLowerCase());\n\nconst getSingleResponse = (\n responses:\n | Record<string, OpenApiResponseObject | OpenApiReferenceObject | undefined>\n | undefined,\n) => {\n if (!responses) {\n return;\n }\n\n const otherSuccess = Object.entries(responses).find(\n ([code]) => code.startsWith('2') && code !== '204' && code !== '205',\n )?.[1];\n\n return (\n responses['200'] ??\n responses['2XX'] ??\n responses['2xx'] ??\n otherSuccess ??\n responses['204'] ??\n responses['205']\n );\n};\n\n/* eslint-enable @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call */\n\nexport const parseParameters = ({\n data,\n context,\n operationName,\n isZodV4,\n strict,\n generate,\n useReusableSchemas,\n}: {\n data: (OpenApiParameterObject | OpenApiReferenceObject)[] | undefined;\n context: ContextSpec;\n operationName: string;\n isZodV4: boolean;\n strict: {\n param: boolean;\n query: boolean;\n header: boolean;\n body: boolean;\n response: boolean;\n };\n generate: {\n param: boolean;\n query: boolean;\n header: boolean;\n body: boolean;\n response: boolean;\n };\n useReusableSchemas?: boolean;\n}): {\n headers: ZodValidationSchemaDefinition;\n queryParams: ZodValidationSchemaDefinition;\n params: ZodValidationSchemaDefinition;\n} => {\n if (!data) {\n return {\n headers: {\n functions: [],\n consts: [],\n },\n queryParams: {\n functions: [],\n consts: [],\n },\n params: {\n functions: [],\n consts: [],\n },\n };\n }\n\n const initialDefinitionsByParameters: Record<\n 'headers' | 'queryParams' | 'params',\n Record<string, { functions: [string, unknown][]; consts: string[] }>\n > = {\n headers: {},\n queryParams: {},\n params: {},\n };\n\n const constNameRegistry: Record<string, number> = {};\n\n const defintionsByParameters = data.reduce((acc, val) => {\n const { schema: parameter }: { schema: OpenApiParameterObject } =\n resolveRef(val, context);\n\n if (!parameter.schema) {\n return acc;\n }\n if (!parameter.in || !parameter.name) {\n return acc;\n }\n\n // When useReusableSchemas is on, preserve `$ref` schemas verbatim so the\n // generator can take the namedRef path. We only shallow-clone to attach\n // the parameter-level `description` without mutating the shared ref object.\n // When off, fall back to dereferencing for backward compatibility.\n const schemaForGen: OpenApiSchemaObject | OpenApiReferenceObject =\n useReusableSchemas\n ? parameter.description\n ? Object.assign({}, parameter.schema, {\n description: parameter.description,\n })\n : parameter.schema\n : (() => {\n const s = dereference(parameter.schema, context);\n s.description = parameter.description;\n return s;\n })();\n\n const mapStrict = {\n path: strict.param,\n query: strict.query,\n header: strict.header,\n };\n\n const mapGenerate = {\n path: generate.param,\n query: generate.query,\n header: generate.header,\n };\n\n if (\n parameter.in !== 'path' &&\n parameter.in !== 'query' &&\n parameter.in !== 'header'\n ) {\n return acc;\n }\n\n const definition = generateZodValidationSchemaDefinition(\n schemaForGen,\n context,\n camel(`${operationName}-${parameter.in}-${parameter.name}`),\n mapStrict[parameter.in],\n isZodV4,\n {\n required: parameter.required,\n useReusableSchemas,\n constNameRegistry,\n },\n );\n\n if (parameter.in === 'header' && mapGenerate.header) {\n return {\n ...acc,\n headers: { ...acc.headers, [parameter.name]: definition },\n };\n }\n\n if (parameter.in === 'query' && mapGenerate.query) {\n return {\n ...acc,\n queryParams: { ...acc.queryParams, [parameter.name]: definition },\n };\n }\n\n if (parameter.in === 'path' && mapGenerate.path) {\n return {\n ...acc,\n params: { ...acc.params, [parameter.name]: definition },\n };\n }\n\n return acc;\n }, initialDefinitionsByParameters);\n\n const headers: ZodValidationSchemaDefinition = {\n functions: [],\n consts: [],\n };\n\n if (Object.keys(defintionsByParameters.headers).length > 0) {\n const parameterFunctions = getParameterFunctions(\n isZodV4,\n strict.header,\n defintionsByParameters.headers,\n );\n\n headers.functions.push(...parameterFunctions);\n }\n\n const queryParams: ZodValidationSchemaDefinition = {\n functions: [],\n consts: [],\n };\n\n if (Object.keys(defintionsByParameters.queryParams).length > 0) {\n const parameterFunctions = getParameterFunctions(\n isZodV4,\n strict.query,\n defintionsByParameters.queryParams,\n );\n\n queryParams.functions.push(...parameterFunctions);\n }\n\n const params: ZodValidationSchemaDefinition = {\n functions: [],\n consts: [],\n };\n\n if (Object.keys(defintionsByParameters.params).length > 0) {\n const parameterFunctions = getParameterFunctions(\n isZodV4,\n strict.param,\n defintionsByParameters.params,\n );\n\n params.functions.push(...parameterFunctions);\n }\n\n return {\n headers,\n queryParams,\n params,\n };\n};\n\nconst generateZodRoute = async (\n {\n operationId,\n operationName,\n typeName,\n verb,\n override,\n }: GeneratorVerbOptions,\n { pathRoute, context, output }: GeneratorOptions,\n) => {\n const zodVariant = context.output.override.zod.variant;\n const isZodV4 = resolveIsZodV4(\n context.output.override.zod.version,\n context.output.packageJson,\n );\n assertZodTarget({ variant: zodVariant, isZodV4 });\n const useReusableSchemas =\n context.output.override.zod.generateReusableSchemas;\n const spec = context.spec.paths?.[pathRoute];\n\n if (spec == undefined) {\n throw new Error(`No such path ${pathRoute} in ${context.projectName}`);\n }\n\n const parameters = [\n ...(spec.parameters ?? []),\n ...(spec[verb]?.parameters ?? []),\n ];\n\n const parsedParameters = parseParameters({\n data: parameters,\n context,\n operationName,\n isZodV4,\n strict: override.zod.strict,\n generate: override.zod.generate,\n useReusableSchemas,\n });\n\n const requestBody = spec[verb]?.requestBody;\n const parsedBody = parseBodyAndResponse({\n data: requestBody,\n context,\n name: camel(`${operationName}-body`),\n strict: override.zod.strict.body,\n generate: override.zod.generate.body,\n isZodV4,\n parseType: 'body',\n useReusableSchemas,\n });\n\n const responses = (\n context.output.override.zod.generateEachHttpStatus\n ? Object.entries(spec[verb]?.responses ?? {})\n : [['', getSingleResponse(spec[verb]?.responses)]]\n ) as [string, OpenApiResponseObject | OpenApiReferenceObject][];\n const parsedResponses = responses.map(([code, response]) =>\n parseBodyAndResponse({\n data: response,\n context,\n name: camel(`${operationName}-${code}-response`),\n strict: override.zod.strict.response,\n generate: override.zod.generate.response,\n isZodV4,\n parseType: 'response',\n useReusableSchemas,\n }),\n );\n\n const preprocessParams = override.zod.preprocess?.param\n ? await generateMutator({\n output,\n mutator: override.zod.preprocess.param,\n name: `${operationName}PreprocessParams`,\n workspace: context.workspace,\n tsconfig: context.output.tsconfig,\n })\n : undefined;\n\n const paramsMutator = override.zod.params\n ? await generateMutator({\n output,\n mutator: override.zod.params,\n name: `${operationName}ZodParams`,\n workspace: context.workspace,\n tsconfig: context.output.tsconfig,\n })\n : undefined;\n\n const pascalTypeName = pascal(typeName);\n const makeParamsInjection = (\n location: ZodParamsInjection['location'],\n schemaSuffix: string,\n ): ZodParamsInjection | undefined =>\n paramsMutator\n ? {\n mutator: paramsMutator,\n operationId,\n location,\n schemaName: `${pascalTypeName}${schemaSuffix}`,\n }\n : undefined;\n\n let inputParams = parseZodValidationSchemaDefinition(\n parsedParameters.params,\n context,\n override.zod.coerce.param,\n override.zod.strict.param,\n isZodV4,\n preprocessParams,\n makeParamsInjection('param', 'Params'),\n zodVariant,\n override.zod.exactOptional,\n );\n\n const preprocessQueryParams = override.zod.preprocess?.query\n ? await generateMutator({\n output,\n mutator: override.zod.preprocess.query,\n name: `${operationName}PreprocessQueryParams`,\n workspace: context.workspace,\n tsconfig: context.output.tsconfig,\n })\n : undefined;\n\n let inputQueryParams = parseZodValidationSchemaDefinition(\n parsedParameters.queryParams,\n context,\n override.zod.coerce.query,\n override.zod.strict.query,\n isZodV4,\n preprocessQueryParams,\n makeParamsInjection('query', 'QueryParams'),\n zodVariant,\n override.zod.exactOptional,\n );\n\n const preprocessHeader = override.zod.preprocess?.header\n ? await generateMutator({\n output,\n mutator: override.zod.preprocess.header,\n name: `${operationName}PreprocessHeader`,\n workspace: context.workspace,\n tsconfig: context.output.tsconfig,\n })\n : undefined;\n\n let inputHeaders = parseZodValidationSchemaDefinition(\n parsedParameters.headers,\n context,\n override.zod.coerce.header,\n override.zod.strict.header,\n isZodV4,\n preprocessHeader,\n makeParamsInjection('header', 'Header'),\n zodVariant,\n override.zod.exactOptional,\n );\n\n const preprocessBody = override.zod.preprocess?.body\n ? await generateMutator({\n output,\n mutator: override.zod.preprocess.body,\n name: `${operationName}PreprocessBody`,\n workspace: context.workspace,\n tsconfig: context.output.tsconfig,\n })\n : undefined;\n\n let inputBody = parseZodValidationSchemaDefinition(\n parsedBody.input,\n context,\n override.zod.coerce.body,\n override.zod.strict.body,\n isZodV4,\n preprocessBody,\n makeParamsInjection('body', 'Body'),\n zodVariant,\n override.zod.exactOptional,\n );\n\n const preprocessResponse = override.zod.preprocess?.response\n ? await generateMutator({\n output,\n mutator: override.zod.preprocess.response,\n name: `${operationName}PreprocessResponse`,\n workspace: context.workspace,\n tsconfig: context.output.tsconfig,\n })\n : undefined;\n\n const inputResponses = parsedResponses.map((parsedResponse, index) =>\n parseZodValidationSchemaDefinition(\n parsedResponse.input,\n context,\n override.zod.coerce.response,\n override.zod.strict.response,\n isZodV4,\n preprocessResponse,\n makeParamsInjection(\n 'response',\n responses[index][0] ? `${responses[index][0]}Response` : 'Response',\n ),\n zodVariant,\n override.zod.exactOptional,\n ),\n );\n\n const SENTINEL_PATTERN = /__REF_([A-Za-z_$][A-Za-z0-9_$]*)__/g;\n const rewriteSentinels = (s: string): string =>\n s.replaceAll(SENTINEL_PATTERN, (_m, name: string) => name);\n\n const allUsedRefs = new Set<string>([\n ...inputParams.usedRefs,\n ...inputQueryParams.usedRefs,\n ...inputHeaders.usedRefs,\n ...inputBody.usedRefs,\n ...inputResponses.flatMap((r) => [...r.usedRefs]),\n ]);\n\n if (useReusableSchemas && allUsedRefs.size > 0) {\n inputParams = { ...inputParams, zod: rewriteSentinels(inputParams.zod) };\n inputQueryParams = {\n ...inputQueryParams,\n zod: rewriteSentinels(inputQueryParams.zod),\n };\n inputHeaders = {\n ...inputHeaders,\n zod: rewriteSentinels(inputHeaders.zod),\n };\n inputBody = { ...inputBody, zod: rewriteSentinels(inputBody.zod) };\n for (let i = 0; i < inputResponses.length; i++) {\n inputResponses[i] = {\n ...inputResponses[i],\n zod: rewriteSentinels(inputResponses[i].zod),\n };\n }\n }\n\n if (\n !inputParams.zod &&\n !inputQueryParams.zod &&\n !inputHeaders.zod &&\n !inputBody.zod &&\n responses.length === 0\n ) {\n return {\n implementation: '',\n mutators: [],\n usedRefs: new Set<string>(),\n };\n }\n\n const useBrandedTypes = override.zod.useBrandedTypes;\n const generateCompanionTypes = override.zod.generateCompanionTypes;\n const renderExport = (\n name: string,\n expression: string,\n arrayItem?: { rules?: { min?: number; max?: number } },\n ) =>\n renderZodExport({\n name,\n expression,\n variant: zodVariant,\n brand: useBrandedTypes ? { isZodV4 } : undefined,\n companionTypes: generateCompanionTypes,\n arrayItem,\n });\n\n // With `generateReusableSchemas`, operations import component schemas by\n // their PascalCase name from a sibling schemas module. When an operation's\n // own pascalized wrapper name (e.g. `ListPetsResponse` from operationId\n // `listPets`) matches an imported ref, the generated `export const` shadows\n // the import and produces a self-referential initializer that TS rejects\n // with TS7022. Detect the collision and append `Schema` (with a counter for\n // further collisions) so the import keeps its meaning. For the array case\n // both the wrapper and its `Item` companion are checked together so they\n // stay in sync. The original name is preserved when there is no collision,\n // so non-colliding operations are unaffected.\n //\n // `localTaken` seeds from the imported refs and accumulates the names this\n // call hands out, so wrappers within the same operation (`Params`, `Body`,\n // per-status `Response`, …) can't pick a name another wrapper just claimed.\n // The fixed suffixes already keep these distinct in practice, but tracking\n // allocations removes the implicit invariant — future suffix additions stay\n // safe by construction.\n const localTaken = new Set(allUsedRefs);\n const allocateExportName = (baseName: string, hasItem: boolean): string => {\n const collides = (name: string) =>\n localTaken.has(name) || (hasItem && localTaken.has(`${name}Item`));\n const reserve = (name: string) => {\n localTaken.add(name);\n if (hasItem) localTaken.add(`${name}Item`);\n };\n if (!collides(baseName)) {\n reserve(baseName);\n return baseName;\n }\n let counter = 0;\n let candidate = `${baseName}Schema`;\n while (collides(candidate)) {\n counter += 1;\n candidate = `${baseName}Schema${counter}`;\n }\n reserve(candidate);\n return candidate;\n };\n\n const paramsName = allocateExportName(`${pascalTypeName}Params`, false);\n const queryParamsName = allocateExportName(\n `${pascalTypeName}QueryParams`,\n false,\n );\n const headerName = allocateExportName(`${pascalTypeName}Header`, false);\n const bodyName = allocateExportName(\n `${pascalTypeName}Body`,\n parsedBody.isArray,\n );\n\n return {\n implementation: [\n ...(inputParams.consts ? [inputParams.consts] : []),\n ...(inputParams.zod ? [renderExport(paramsName, inputParams.zod)] : []),\n ...(inputQueryParams.consts ? [inputQueryParams.consts] : []),\n ...(inputQueryParams.zod\n ? [renderExport(queryParamsName, inputQueryParams.zod)]\n : []),\n ...(inputHeaders.consts ? [inputHeaders.consts] : []),\n ...(inputHeaders.zod ? [renderExport(headerName, inputHeaders.zod)] : []),\n ...(inputBody.consts ? [inputBody.consts] : []),\n ...(inputBody.zod\n ? [\n renderExport(\n bodyName,\n inputBody.zod,\n parsedBody.isArray ? { rules: parsedBody.rules } : undefined,\n ),\n ]\n : []),\n ...inputResponses.flatMap((inputResponse, index) => {\n const operationResponse = allocateExportName(\n pascal(`${typeName}-${responses[index][0]}-response`),\n parsedResponses[index].isArray,\n );\n\n if (!inputResponse.zod) {\n if (!override.zod.generate.response) {\n return [];\n }\n\n const noContentStatusCodes = new Set(['204', '205']);\n const statusCode = responses[index][0];\n const isEachHttpStatusMode = !!statusCode;\n\n let isNoContent: boolean;\n if (isEachHttpStatusMode) {\n isNoContent = noContentStatusCodes.has(statusCode);\n } else {\n const specResponseKeys = new Set(\n Object.keys(spec[verb]?.responses ?? {}),\n );\n const hasStandardSuccess =\n specResponseKeys.has('200') ||\n specResponseKeys.has('2XX') ||\n specResponseKeys.has('2xx');\n isNoContent = !hasStandardSuccess;\n }\n const noContentSchema = isNoContent\n ? zodVariant === 'mini'\n ? zodMiniCall('void')\n : 'zod.void()'\n : zodVariant === 'mini'\n ? zodMiniCall('unknown')\n : 'zod.unknown()';\n\n return [renderExport(operationResponse, noContentSchema)];\n }\n\n return [\n ...(inputResponse.consts ? [inputResponse.consts] : []),\n renderExport(\n operationResponse,\n inputResponse.zod,\n parsedResponses[index].isArray\n ? { rules: parsedResponses[index].rules }\n : undefined,\n ),\n ];\n }),\n ].join('\\n\\n'),\n mutators: [\n // Gate each request-side preprocess mutator on its parsed `.zod`: it is\n // computed for every operation once the target is configured, so without\n // this an operation lacking the schema would emit an unused import.\n ...(preprocessParams && inputParams.zod ? [preprocessParams] : []),\n ...(preprocessQueryParams && inputQueryParams.zod\n ? [preprocessQueryParams]\n : []),\n ...(preprocessHeader && inputHeaders.zod ? [preprocessHeader] : []),\n ...(preprocessBody && inputBody.zod ? [preprocessBody] : []),\n ...(preprocessResponse ? [preprocessResponse] : []),\n // Unconditional even when this operation's parsed schemas don't\n // reference `paramsMutator.name`: in `single` mode, inline component\n // schemas (which DO reference it) rely on this entry to emit the\n // import. The cost is one harmless `import { zodParams }` line on\n // operations whose request/response have no leaf validators to inject.\n ...(paramsMutator ? [paramsMutator] : []),\n ],\n usedRefs: useReusableSchemas ? allUsedRefs : new Set<string>(),\n };\n};\n\nexport const generateZod: ClientBuilder = async (verbOptions, options) => {\n const { implementation, mutators, usedRefs } = await generateZodRoute(\n verbOptions,\n options,\n );\n\n return {\n implementation: implementation ? `${implementation}\\n\\n` : '',\n // Zod schemas are runtime values (not type-only), so mark with values: true\n // to prevent the import writer from emitting `import type { ... }`. Sort\n // by name so import order is stable across runs.\n imports: [...usedRefs].toSorted().map((name) => ({\n name,\n schemaName: name,\n values: true,\n })),\n mutators,\n };\n};\n\nconst zodClientBuilder: ClientGeneratorsBuilder = {\n client: generateZod,\n dependencies: getZodDependencies,\n};\n\nexport const builder = () => () => zodClientBuilder;\n\nexport {\n assertZodTarget,\n getZodImportSource,\n getZodTypeName,\n isZodVersionV4,\n resolveIsZodV4,\n} from './compatible-v4';\nexport { renderZodExport, type ZodExportBlock } from './export-emitter';\n\nexport default builder;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../src/compatible-v4.ts","../src/export-emitter.ts","../src/index.ts"],"sourcesContent":["import {\n compareVersions,\n type PackageJson,\n type ZodVariantOption,\n type ZodVersionOption,\n} from '@orval/core';\n\nconst getZodPackageVersion = (packageJson: PackageJson) => {\n return (\n packageJson.resolvedVersions?.zod ??\n packageJson.dependencies?.zod ??\n packageJson.devDependencies?.zod ??\n packageJson.peerDependencies?.zod\n );\n};\n\nexport const isZodVersionV4 = (packageJson: PackageJson) => {\n const version = getZodPackageVersion(packageJson);\n\n if (!version) {\n return false;\n }\n\n const withoutRc = version.split('-')[0];\n\n return compareVersions(withoutRc, '4.0.0');\n};\n\n/**\n * Resolves whether to emit Zod 4-style output.\n *\n * An explicit `override.zod.version` of `3` or `4` always wins; `'auto'` (the\n * default) falls back to inferring from the output project's resolved `zod`\n * version via {@link isZodVersionV4}. When no package metadata is available,\n * `'auto'` now defaults to Zod 4 so fresh or partially-installed workspaces\n * still get the modern baseline. This keeps generation deterministic when a\n * target is pinned while preserving package-detection for `'auto'`.\n */\nexport const resolveIsZodV4 = (\n version: ZodVersionOption | undefined,\n packageJson: PackageJson | undefined,\n): boolean => {\n if (version === 4) {\n return true;\n }\n\n if (version === 3) {\n return false;\n }\n\n // 'auto' (or unset) — infer from the installed/resolved zod version and\n // default to Zod 4 when the target workspace has no detectable zod version\n // yet. Treat \"no packageJson\" and \"packageJson without a detectable zod\n // version\" identically so partially-installed workspaces still get the\n // modern baseline instead of silently falling back to Zod 3.\n if (!packageJson || !getZodPackageVersion(packageJson)) {\n return true;\n }\n\n return isZodVersionV4(packageJson);\n};\n\nexport const assertZodTarget = ({\n variant,\n isZodV4,\n}: {\n variant: ZodVariantOption | undefined;\n isZodV4: boolean;\n}) => {\n if (variant === 'mini' && !isZodV4) {\n throw new Error(\n \"Zod Mini requires Zod 4 output. Use override.zod.version: 4 or install zod@^4 when override.zod.version is 'auto'.\",\n );\n }\n};\n\nexport const getZodImportSource = (variant: ZodVariantOption | undefined) =>\n variant === 'mini' ? 'zod/mini' : 'zod';\n\nexport const getZodTypeName = (variant: ZodVariantOption | undefined) =>\n variant === 'mini' ? 'ZodMiniType' : 'ZodType';\n\nexport const getZodDateFormat = (isZodV4: boolean) => {\n return isZodV4 ? 'iso.date' : 'date';\n};\n\nexport const getZodTimeFormat = (isZodV4: boolean) => {\n return isZodV4 ? 'iso.time' : 'time';\n};\n\nexport const getZodDateTimeFormat = (isZodV4: boolean) => {\n return isZodV4 ? 'iso.datetime' : 'datetime';\n};\n\ntype ParameterDefinitions = Record<string, unknown>;\ntype ParameterFunction = [string, ParameterDefinitions | undefined];\nexport const getParameterFunctions = (\n isZodV4: boolean,\n strict: boolean,\n parameters: ParameterDefinitions,\n): ParameterFunction[] => {\n if (isZodV4 && strict) {\n return [['strictObject', parameters]];\n } else {\n return strict\n ? [\n ['object', parameters],\n ['strict', undefined],\n ]\n : [['object', parameters]];\n }\n};\n\nexport const getObjectFunctionName = (isZodV4: boolean, strict: boolean) => {\n return isZodV4 && strict ? 'strictObject' : 'object';\n};\n\n/**\n * Returns the object constructor to use for open/generic objects.\n *\n * - Zod v4 supports `zod.looseObject({...})` directly.\n * - Zod v3 falls back to `zod.object({...})` and is finalized with\n * `.passthrough()` during parsing.\n */\nexport const getLooseObjectFunctionName = (isZodV4: boolean) => {\n return isZodV4 ? 'looseObject' : 'object';\n};\n","import { type ZodVariantOption } from '@orval/core';\n\nimport { getZodTypeName } from './compatible-v4';\n\n/** Marks a call as side-effect-free for bundlers' tree-shaking passes. */\nexport const PURE_COMMENT = '/*#__PURE__*/ ';\n\n/** Renders a Zod Mini functional call, e.g. `zod.minLength(1)`, with the pure-call comment. */\nexport const zodMiniCall = (fn: string, args = '') =>\n `${PURE_COMMENT}zod.${fn}(${args})`;\n\n/**\n * Descriptor for one generated Zod `export const` block. Everything on this\n * type is already resolved by the caller (a chosen export name, a rendered\n * zod expression) so this module can stay a pure string renderer: no\n * `ContextSpec`, no OpenAPI, testable with plain objects.\n *\n * What this module does NOT own, and callers must resolve first:\n * - name allocation (collision handling needs ref context)\n * - the recursive TS type body (`recursivePin.tsBody`) — produced by the\n * caller's own model generator\n * - hoisted consts (`…Default`, `…RegExp0`, …) — callers prepend these\n * themselves as pre-rendered strings\n */\nexport interface ZodExportBlock {\n /** Already-allocated export name. */\n name: string;\n /** Already-rendered zod expression, the RHS of the `export const`. */\n expression: string;\n /** 'classic' zod calls vs the Zod Mini functional API. */\n variant: ZodVariantOption;\n /**\n * Append a `.brand(...)` call to the wrapper (never to the `Item` schema).\n * `isZodV4` selects the v4 vs v3 brand call syntax and is required here so\n * a caller can't opt into branding without also saying which syntax it\n * wants — omit the whole field at call sites that never brand (e.g.\n * companion-type or recursive-pin blocks).\n */\n brand?: { isZodV4: boolean };\n /** Emit `zod.input`/`zod.output` companion type aliases. */\n companionTypes?: boolean;\n /** Split into an `<name>Item` schema plus a bounded array wrapper. */\n arrayItem?: { rules?: { min?: number; max?: number } };\n /** Pin a recursive schema to a hand-written TS type instead of inferring it. */\n recursivePin?: { tsBody: string };\n}\n\nconst renderArrayWithBounds = (\n itemName: string,\n variant: ZodVariantOption,\n rules: { min?: number; max?: number } | undefined,\n) => {\n if (variant === 'mini') {\n const checks = [\n ...(rules?.min ? [zodMiniCall('minLength', `${rules.min}`)] : []),\n ...(rules?.max ? [zodMiniCall('maxLength', `${rules.max}`)] : []),\n ];\n return `${zodMiniCall('array', itemName)}${checks\n .map((check) => `.check(${check})`)\n .join('')}`;\n }\n\n return `zod.array(${itemName})${rules?.min ? `.min(${rules.min})` : ''}${\n rules?.max ? `.max(${rules.max})` : ''\n }`;\n};\n\nconst renderBrand = (block: ZodExportBlock) => {\n if (!block.brand) return '';\n return block.brand.isZodV4\n ? `.brand(\"${block.name}\")`\n : `.brand<\"${block.name}\">()`;\n};\n\n/**\n * Renders one generated Zod export block: the `export const`, its optional\n * `Item` split, brand, and either `zod.input`/`zod.output` companion types\n * or a recursive `zod.ZodType<X>` pin. See {@link ZodExportBlock} for what\n * this deliberately leaves to the caller.\n */\nexport const renderZodExport = (block: ZodExportBlock): string => {\n if (block.recursivePin) {\n const typeName = getZodTypeName(block.variant);\n return (\n `export type ${block.name} = ${block.recursivePin.tsBody};\\n\\n` +\n `export const ${block.name}: zod.${typeName}<${block.name}> = ${block.expression};\\n\\n` +\n `export type ${block.name}Output = zod.output<typeof ${block.name}>;`\n );\n }\n\n const companionLines = (name: string) =>\n `export type ${name} = zod.input<typeof ${name}>;\\n` +\n `export type ${name}Output = zod.output<typeof ${name}>;`;\n\n if (block.arrayItem) {\n const itemName = `${block.name}Item`;\n const itemConst = `export const ${itemName} = ${block.expression}`;\n const wrapperConst = `export const ${block.name} = ${renderArrayWithBounds(\n itemName,\n block.variant,\n block.arrayItem.rules,\n )}${renderBrand(block)}`;\n\n if (!block.companionTypes) {\n return `${itemConst}\\n${wrapperConst}`;\n }\n\n // Item and wrapper are independently type-inferable `export const`s, so\n // each gets its own companion pair (matching the schema-file convention),\n // separated by a blank line the way two unrelated export blocks are.\n return (\n `${itemConst}\\n\\n${companionLines(itemName)}\\n\\n` +\n `${wrapperConst}\\n\\n${companionLines(block.name)}`\n );\n }\n\n const constLine = `export const ${block.name} = ${block.expression}${renderBrand(block)}`;\n\n if (!block.companionTypes) {\n return constLine;\n }\n\n return `${constLine}\\n\\n${companionLines(block.name)}`;\n};\n","/* eslint-disable unicorn/no-array-reduce */\n\nimport {\n buildDynamicScope,\n buildInlineDynamicScope,\n camel,\n type ClientBuilder,\n type ClientDependenciesBuilder,\n type ClientGeneratorsBuilder,\n type ContextSpec,\n generateMutator,\n type GeneratorDependency,\n type GeneratorMutator,\n type GeneratorOptions,\n type GeneratorVerbOptions,\n getDynamicAnchorName,\n getFormDataFieldFileType,\n getNumberWord,\n getRefInfo,\n getRequiredKeys,\n isBoolean,\n isDynamicReference,\n isNumber,\n isObject,\n isString,\n jsStringEscape,\n jsStringLiteralEscape,\n logVerbose,\n type OpenApiParameterObject,\n type OpenApiReferenceObject,\n type OpenApiRequestBodyObject,\n type OpenApiResponseObject,\n type OpenApiSchemaObject,\n pascal,\n resolveDynamicRef,\n resolveRef,\n stringify,\n type ZodCoerceType,\n type ZodVariantOption,\n getEnumMembers,\n hasEnumMetadata,\n getEnumValueInfo,\n getEnumImplementation,\n EnumGeneration,\n} from '@orval/core';\nimport jsesc from 'jsesc';\nimport { unique } from 'remeda';\n\nimport {\n getLooseObjectFunctionName,\n getObjectFunctionName,\n getZodImportSource,\n getParameterFunctions,\n getZodDateFormat,\n getZodDateTimeFormat,\n getZodTimeFormat,\n assertZodTarget,\n resolveIsZodV4,\n} from './compatible-v4';\nimport { PURE_COMMENT, renderZodExport, zodMiniCall } from './export-emitter';\n\n// Numeric/length constraints (minimum, maximum, exclusiveMinimum,\n// exclusiveMaximum, multipleOf) are interpolated into generated source as a\n// bare, unquoted expression (e.g. `export const XMin = ${min};`), so there is\n// no syntactic escaping that can make an untrusted value safe there. Reject\n// anything that isn't actually a finite number instead of emitting it as-is.\nconst assertSafeNumericConstraint = (value: unknown, label: string): number => {\n if (!isNumber(value) || !Number.isFinite(value)) {\n throw new Error(\n `orval: refusing to generate code for an OpenAPI document whose \"${label}\" constraint is not a finite number (got ${String(value)}). This value would otherwise be emitted verbatim into generated source.`,\n );\n }\n\n return value;\n};\n\nexport const getZodDependencies: ClientDependenciesBuilder = (\n _hasGlobalMutator,\n _hasParamsSerializerOptions,\n _packageJson,\n _httpClient,\n _hasTagsMutator,\n override,\n): GeneratorDependency[] => [\n {\n exports: [\n {\n default: false,\n name: 'zod',\n syntheticDefaultImport: false,\n namespaceImport: true,\n values: true,\n },\n ],\n dependency: getZodImportSource(override?.zod.variant),\n },\n];\n\n/**\n * values that may appear in \"type\". Equals SchemaObjectType\n */\nconst possibleSchemaTypes = new Set([\n 'integer',\n 'number',\n 'string',\n 'boolean',\n 'object',\n 'strictObject',\n 'null',\n 'array',\n]);\n\nexport const predefinedZodFormats = new Set([\n 'date',\n 'time',\n 'date-time',\n 'email',\n 'uri',\n 'hostname',\n 'uuid',\n]);\n\ntype ResolvedZodType =\n | string\n | {\n multiType: string[];\n };\n\nconst resolveZodType = (schema: OpenApiSchemaObject): ResolvedZodType => {\n const schemaTypeValue = schema.type as unknown;\n\n // Handle array of types (OpenAPI 3.1+)\n if (Array.isArray(schemaTypeValue)) {\n // Filter out 'null' type as it's handled separately via nullable\n const nonNullTypes = schemaTypeValue\n .filter((t): t is string => isString(t))\n .filter((t) => t !== 'null' && possibleSchemaTypes.has(t));\n\n // If multiple types, return a special marker for union handling\n if (nonNullTypes.length > 1) {\n return { multiType: nonNullTypes };\n }\n\n // Single type\n const type = nonNullTypes[0];\n\n // Handle prefixItems for tuples\n if (type === 'array' && 'prefixItems' in schema) {\n return 'tuple';\n }\n\n return type;\n }\n\n // Handle single type value\n const type = isString(schemaTypeValue) ? schemaTypeValue : undefined;\n\n // TODO: if \"prefixItems\" exists and type is \"array\", then generate a \"tuple\"\n if (schema.type === 'array' && 'prefixItems' in schema) {\n return 'tuple';\n }\n\n // Infer type from const value when type is not explicitly specified\n if (!type && 'const' in schema) {\n const constValue = schema.const;\n if (isString(constValue)) return 'string';\n if (isNumber(constValue)) return 'number';\n if (isBoolean(constValue)) return 'boolean';\n if (constValue === null) return 'null';\n }\n\n return type ?? 'unknown';\n};\n\n// https://github.com/colinhacks/zod#coercion-for-primitives\nconst COERCIBLE_TYPES = new Set([\n 'string',\n 'number',\n 'boolean',\n 'bigint',\n 'date',\n]);\n\nconst zodMiniCoerceCall = (fn: string, args = '') =>\n `${PURE_COMMENT}zod.coerce.${fn}(${args})`;\n\n// Unicode property escapes (`\\p{...}`) require the `u` flag; without it they\n// match the literal characters `p{...}`, so the generated validator silently\n// rejects valid input (#3841). Only patterns that use them get the flag,\n// leaving existing outputs unchanged.\nconst hasUnicodePropertyEscape = (pattern: string) =>\n /(^|[^\\\\])(?:\\\\\\\\)*\\\\[pP]\\{/.test(pattern);\n\nconst buildRegExpLiteral = (pattern: string) => {\n const innerPattern = pattern.slice(\n pattern.startsWith('/') ? 1 : 0,\n pattern.endsWith('/') ? -1 : undefined,\n );\n const unicodeFlag = hasUnicodePropertyEscape(innerPattern) ? \", 'u'\" : '';\n return `new RegExp('${jsStringLiteralEscape(innerPattern)}'${unicodeFlag})`;\n};\n\n/** Escapes string defaults for safe embedding in template literals. */\nfunction formatDefaultValue(value: unknown): string {\n if (isString(value)) {\n return jsesc(value, { quotes: 'backtick', wrap: true });\n }\n if (Array.isArray(value)) {\n return `[${value\n .map((item) =>\n isString(item)\n ? jsesc(item, { quotes: 'backtick', wrap: true })\n : formatDefaultValue(item),\n )\n .join(', ')}]`;\n }\n return stringify(value) ?? 'null';\n}\n\nexport interface ZodValidationSchemaDefinition {\n functions: [string, unknown][];\n consts: string[];\n}\n\nconst minAndMaxTypes = new Set(['number', 'integer', 'string', 'array']);\n\nconst removeReadOnlyProperties = (\n schema: OpenApiSchemaObject,\n): OpenApiSchemaObject => {\n if (schema.properties && isObject(schema.properties)) {\n const filteredProperties: Record<string, OpenApiSchemaObject> = {};\n\n for (const [key, value] of Object.entries(schema.properties)) {\n if (isObject(value) && 'readOnly' in value && value.readOnly) {\n continue;\n }\n filteredProperties[key] = value as OpenApiSchemaObject;\n }\n\n return {\n ...(schema as Record<string, unknown>),\n properties: filteredProperties,\n };\n }\n if (schema.items && isObject(schema.items) && 'properties' in schema.items) {\n return {\n ...(schema as Record<string, unknown>),\n items: removeReadOnlyProperties(schema.items as OpenApiSchemaObject),\n };\n }\n return schema;\n};\n\ninterface DateTimeOptions {\n offset?: boolean;\n local?: boolean;\n precision?: number;\n}\n\ninterface TimeOptions {\n precision?: -1 | 0 | 1 | 2 | 3;\n}\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call */\n\nconst COMPONENT_SCHEMAS_REF_PATTERN = /^#\\/components\\/schemas\\/[^/]+$/;\n\nconst isComponentSchemaRef = (ref: string): boolean =>\n COMPONENT_SCHEMAS_REF_PATTERN.test(ref);\n\n// --- Discriminated unions -------------------------------------------------\n//\n// A `oneOf`/`anyOf` carrying an OpenAPI `discriminator` maps naturally onto\n// `zod.discriminatedUnion(key, [...])`, which gives per-branch validation\n// errors instead of the useless \"no union member matched\" that a plain\n// `zod.union` produces. Orval shipped this once (PR #1907) but reverted it\n// (PR #2118, issue #2085) because `zod.discriminatedUnion` only accepts\n// *object* options: an inheritance branch (`allOf`) renders as a\n// `zod.object().and(...)` intersection, which zod rejects at construction and\n// crashes the generated module.\n//\n// The fix is to only emit a discriminated union when every branch can be\n// rendered as a single `ZodObject`, and fall back to a plain union otherwise.\n// The go/no-go decision is made here (against the resolved spec, where we have\n// full type information); the render side just trusts the marker and forces\n// `allOf` branches to merge into one object.\n//\n// The property name is smuggled through the definition's function name because\n// the definition tuple only carries `[name, args]` (see PR #1907, which used\n// the same approach).\nconst DISCRIMINATOR_MARK = '::discriminator::';\n\nconst encodeDiscriminatorSeparator = (base: string, property: string): string =>\n `${base}${DISCRIMINATOR_MARK}${property}`;\n\nconst decodeDiscriminatorSeparator = (\n fn: string,\n): { base: string; property: string } | null => {\n const index = fn.indexOf(DISCRIMINATOR_MARK);\n if (index === -1) return null;\n return {\n base: fn.slice(0, index),\n property: fn.slice(index + DISCRIMINATOR_MARK.length),\n };\n};\n\n// Follow a single `$ref` to its target; pass concrete schemas through as-is.\nconst resolveUnionMemberSchema = (\n member: OpenApiSchemaObject | OpenApiReferenceObject,\n context: ContextSpec,\n): OpenApiSchemaObject | undefined => {\n if (member && '$ref' in member && typeof member.$ref === 'string') {\n return tryResolveRefSchema(member.$ref, context);\n }\n return member as OpenApiSchemaObject;\n};\n\n// A schema that renders to a single `zod.object({...})` — i.e. not a union,\n// not an intersection (`allOf`), and shaped like an object.\nconst isPlainObjectSchema = (\n schema: OpenApiSchemaObject | undefined,\n): boolean => {\n if (!schema || schema.oneOf || schema.anyOf || schema.allOf) return false;\n return (\n schema.type === 'object' ||\n (isObject(schema.properties) && Object.keys(schema.properties).length > 0)\n );\n};\n\n// Keywords a member may carry while still describing no shape of its own:\n// `title` and `description` only annotate, and `not` is not translated into\n// anything by this generator today, so a branch carrying one renders as bare\n// `zod.unknown()` either way. Anything outside this set — `enum`, `const`,\n// `additionalProperties`, `nullable`, `default`, … — already renders to\n// something meaningful on its own and must be left alone.\nconst SHAPELESS_MEMBER_KEYS = new Set([\n 'required',\n 'title',\n 'description',\n 'not',\n]);\n\n// A `oneOf`/`anyOf` member that declares no shape of its own and only narrows\n// which of the sibling properties must be present — e.g. two branches that each\n// `required` a different pair of keys. JSON Schema applies every branch to the\n// same instance, so the property types live on the composing schema rather than\n// on the branch. Rendered in isolation such a member has no type to resolve and\n// falls through to `zod.unknown()`, silently dropping its `required`. (#3780)\nconst isConstraintOnlyMember = (\n member: OpenApiSchemaObject | OpenApiReferenceObject,\n): boolean => {\n if ('$ref' in member) return false;\n const schema = member as OpenApiSchemaObject;\n if (!Array.isArray(schema.required) || schema.required.length === 0) {\n return false;\n }\n return Object.keys(schema).every((key) => SHAPELESS_MEMBER_KEYS.has(key));\n};\n\n// Extracts the property names a member forbids via `not`. JSON Schema forbids a\n// key when `not` lists any subschema that `required`s it — i.e.\n// `not: { anyOf: [{ required: [X] }, { required: [Y] }] }` means X and Y must\n// be absent. Returns `undefined` when the member has no such constraint. (#3780)\nconst getForbiddenKeys = (\n member: OpenApiSchemaObject,\n): string[] | undefined => {\n if (!isObject(member.not)) return undefined;\n const not = member.not as OpenApiSchemaObject;\n\n // `not: { anyOf: [ {required:[X]}, {required:[Y]} ] }` is the form emitted by\n // common OpenAPI tooling. A bare `not: { required: [X] }` is accepted too.\n const branches = Array.isArray(not.anyOf)\n ? not.anyOf\n : Array.isArray(not.required)\n ? [not]\n : [];\n\n const forbidden = new Set<string>();\n for (const branch of branches) {\n if (isObject(branch) && Array.isArray(branch.required)) {\n for (const key of branch.required) {\n forbidden.add(key as string);\n }\n }\n }\n return forbidden.size > 0 ? [...forbidden] : undefined;\n};\n\n// The branch must declare the discriminator key as a literal value — a `const`\n// or an `enum`. Both zod v3 (>=3.20) and v4 build their branch lookup by\n// reading discrete literal values off each option, and throw at construction if\n// a discriminator resolves to a non-literal (e.g. a free `string`). Requiring a\n// literal here keeps such specs on the plain-union path instead.\nconst hasLiteralDiscriminator = (\n schema: OpenApiSchemaObject | undefined,\n property: string,\n): boolean => {\n if (!schema || !isObject(schema.properties)) return false;\n const propertySchema = schema.properties[property];\n if (!isObject(propertySchema)) return false;\n return (\n (propertySchema as { const?: unknown }).const !== undefined ||\n Array.isArray((propertySchema as { enum?: unknown }).enum)\n );\n};\n\n// Read the literal discriminator value(s) a branch declares for `property`\n// (a `const` yields one value, an `enum` yields several). Resolves `$ref` and,\n// for `allOf`, honours the render-time merge semantics where a later member\n// overrides an earlier one — so the last part that declares the property wins.\n// Returns null when no literal is found. Used to reject duplicate discriminator\n// values across branches, which `zod.discriminatedUnion` throws on at\n// construction.\nconst collectDiscriminatorValues = (\n member: OpenApiSchemaObject | OpenApiReferenceObject,\n property: string,\n context: ContextSpec,\n): unknown[] | null => {\n const readValues = (\n schema: OpenApiSchemaObject | undefined,\n ): unknown[] | null => {\n if (!schema || !isObject(schema.properties)) return null;\n const propertySchema = schema.properties[property];\n if (!isObject(propertySchema)) return null;\n const constValue = (propertySchema as { const?: unknown }).const;\n if (constValue !== undefined) return [constValue];\n const enumValues = (propertySchema as { enum?: unknown }).enum;\n if (Array.isArray(enumValues)) return enumValues;\n return null;\n };\n\n const resolved = resolveUnionMemberSchema(member, context);\n if (!resolved) return null;\n\n if (resolved.allOf) {\n const parts = (\n resolved.allOf as (OpenApiSchemaObject | OpenApiReferenceObject)[]\n ).map((part) => resolveUnionMemberSchema(part, context));\n for (let index = parts.length - 1; index >= 0; index--) {\n const values = readValues(parts[index]);\n if (values) return values;\n }\n return null;\n }\n\n return readValues(resolved);\n};\n\n// Can this union branch be rendered as a `ZodObject` carrying the discriminator\n// literal? If not, the whole union must stay a plain `zod.union`.\nconst isDiscriminatableMember = (\n member: OpenApiSchemaObject | OpenApiReferenceObject,\n property: string,\n useReusableSchemas: boolean,\n context: ContextSpec,\n): boolean => {\n const resolved = resolveUnionMemberSchema(member, context);\n if (!resolved) return false;\n\n // A nested union can't be a discriminated-union option.\n if (resolved.oneOf || resolved.anyOf) return false;\n\n if (resolved.allOf) {\n // Inheritance: representable only when we can flatten the parts into one\n // object at render time. That needs the parts inlined property-by-property.\n // With `useReusableSchemas` the parts stay `$ref` identifiers to other\n // consts (potentially intersections themselves), so we can't guarantee a\n // ZodObject — leave it as a plain union.\n if (useReusableSchemas) return false;\n const parts = (\n resolved.allOf as (OpenApiSchemaObject | OpenApiReferenceObject)[]\n ).map((part) => resolveUnionMemberSchema(part, context));\n if (!parts.every((part) => isPlainObjectSchema(part))) return false;\n return parts.some((part) => hasLiteralDiscriminator(part, property));\n }\n\n if (!isPlainObjectSchema(resolved)) return false;\n return hasLiteralDiscriminator(resolved, property);\n};\n\nexport const generateZodValidationSchemaDefinition = (\n schema: OpenApiSchemaObject | OpenApiReferenceObject | undefined,\n context: ContextSpec,\n name: string,\n strict: boolean,\n isZodV4: boolean,\n rules?: {\n required?: boolean;\n /**\n * Required keys inherited from sibling `allOf` members. Per JSON Schema /\n * OpenAPI 3.1, a `required` array in one `allOf` member applies to\n * properties contributed by ANY member, so it is collected at the `allOf`\n * level and applied here. Consumed at THIS object level only — never\n * forwarded into nested property schemas, so a deeper object sharing a key\n * name is unaffected. (#3171)\n */\n additionalRequired?: string[];\n dateTimeOptions?: DateTimeOptions;\n timeOptions?: TimeOptions;\n /**\n * Override schemas for properties at THIS level only.\n * Not passed to nested schemas. Used by form-data for file type handling.\n */\n propertyOverrides?: Record<string, ZodValidationSchemaDefinition>;\n /**\n * Internal registry to keep generated const names unique within a single\n * schema generation tree without leaking suffixes across unrelated top-level\n * schemas.\n */\n constNameRegistry?: Record<string, number>;\n /**\n * When true, plain `$ref`s into `#/components/schemas/*` emit a `namedRef`\n * placeholder instead of being inlined.\n */\n useReusableSchemas?: boolean;\n /**\n * When true, suppress File/Blob coercion for binary string fields anywhere\n * in the tree (`format: binary` / `contentMediaType: application/octet-stream`),\n * keeping them as `string`. Set for `application/x-www-form-urlencoded` bodies,\n * which serialize via URLSearchParams (string-only) — mirrors core's\n * `formDataContext.urlEncoded` handling in getScalar (#1624). Threaded into\n * every recursive call so nested/array/composed fields are covered too.\n */\n urlEncoded?: boolean;\n /**\n * When true (and `isZodV4`), the top-level (named component) schema emits a\n * `.meta({ id, description?, deprecated? })` instead of `.describe(...)`.\n * Set ONLY for top-level component-schema generation — recursive calls omit\n * it, so nested schemas keep `.describe()` and never get a duplicate `id`.\n */\n emitMeta?: boolean;\n },\n): ZodValidationSchemaDefinition => {\n if (!schema) return { functions: [], consts: [] };\n\n const CHAINABLE_SIBLINGS = new Set(['nullable', 'default', 'description']);\n const isChainable = (k: string) => CHAINABLE_SIBLINGS.has(k);\n\n const applyChainableSiblings = (\n functions: [string, unknown][],\n consts: string[],\n siblingSchema: OpenApiSchemaObject & {\n nullable?: boolean;\n default?: unknown;\n description?: string;\n },\n ): void => {\n const refRequired = rules?.required ?? false;\n const refHasDefault = siblingSchema.default !== undefined;\n\n if (!refRequired && siblingSchema.nullable) {\n functions.push(['nullish', undefined]);\n } else if (siblingSchema.nullable) {\n functions.push(['nullable', undefined]);\n } else if (!refRequired && !refHasDefault) {\n functions.push(['optional', undefined]);\n }\n\n if (refHasDefault) {\n const registry = rules?.constNameRegistry ?? {};\n const counter = isNumber(registry[name]) ? registry[name] + 1 : 0;\n registry[name] = counter;\n const suffix = counter ? pascal(getNumberWord(counter)) : '';\n const defaultVarName = `${name}Default${suffix}`;\n const defaultLiteral = stringify(siblingSchema.default);\n if (defaultLiteral !== undefined) {\n consts.push(`export const ${defaultVarName} = ${defaultLiteral};`);\n functions.push(['default', defaultVarName]);\n }\n }\n\n if (typeof siblingSchema.description === 'string') {\n // Use the same single-quoted, fully JS-escaped form as the primitive\n // description path (see `pushDescriptionOrMeta`). `escape` only escapes\n // quote chars, so a multi-line description would emit raw newlines and\n // break the generated string literal (TS1002).\n functions.push([\n 'describe',\n `'${jsStringLiteralEscape(siblingSchema.description)}'`,\n ]);\n }\n };\n\n // Ref-aware path: emit a placeholder that the orchestrator will rewrite into\n // either a direct identifier or `z.lazy(() => Name)`.\n if (\n rules?.useReusableSchemas &&\n '$ref' in schema &&\n typeof schema.$ref === 'string' &&\n isComponentSchemaRef(schema.$ref)\n ) {\n const siblings = Object.keys(schema).filter((k) => k !== '$ref');\n const allSiblingsChainable = siblings.every((k) => isChainable(k));\n\n if (allSiblingsChainable) {\n const refName = getRefInfo(schema.$ref, context).name;\n const functions: [string, unknown][] = [\n ['namedRef', { name: refName, sourceRef: schema.$ref }],\n ];\n const consts: string[] = [];\n\n applyChainableSiblings(\n functions,\n consts,\n schema as OpenApiSchemaObject & {\n $ref: string;\n nullable?: boolean;\n default?: unknown;\n description?: string;\n },\n );\n\n return { functions, consts };\n }\n\n logVerbose(\n `[orval/zod] $ref ${schema.$ref} has non-chainable siblings ` +\n `[${siblings.filter((s) => !isChainable(s)).join(', ')}]; falling back to inlining.`,\n );\n schema = dereference(\n schema as OpenApiSchemaObject | OpenApiReferenceObject,\n context,\n );\n }\n\n // Dynamic-ref-aware path: when useReusableSchemas is true, resolve the\n // anchor and emit a namedRef sentinel if the target is a concrete component\n // schema. The SCC pipeline then decides direct vs zod.lazy().\n if (rules?.useReusableSchemas && isDynamicReference(schema)) {\n const anchorName = getDynamicAnchorName(schema.$dynamicRef);\n if (anchorName) {\n const { resolvedTypeName, schemaName } = resolveDynamicRef(\n anchorName,\n context,\n );\n\n if (resolvedTypeName !== 'unknown' && schemaName) {\n const siblings = Object.keys(schema).filter((k) => k !== '$dynamicRef');\n const allSiblingsChainable = siblings.every((k) => isChainable(k));\n\n if (allSiblingsChainable) {\n const sourceRef = `${COMPONENT_SCHEMAS_PREFIX}${encodeSegment(schemaName)}`;\n const functions: [string, unknown][] = [\n ['namedRef', { name: resolvedTypeName, sourceRef }],\n ];\n const consts: string[] = [];\n\n applyChainableSiblings(\n functions,\n consts,\n schema as OpenApiSchemaObject & {\n $dynamicRef: string;\n nullable?: boolean;\n default?: unknown;\n description?: string;\n },\n );\n\n return { functions, consts };\n }\n\n logVerbose(\n `[orval/zod] $dynamicRef ${schema.$dynamicRef} has non-chainable siblings ` +\n `[${siblings.filter((s) => !isChainable(s)).join(', ')}]; falling back to inlining.`,\n );\n }\n }\n\n // Not emitted as namedRef (non-chainable siblings, unresolvable anchor,\n // or external ref) — dereference now so the main body sees a resolved\n // schema with a proper type instead of the raw $dynamicRef (which\n // resolveZodType classifies as 'unknown').\n schema = dereference(\n schema as OpenApiSchemaObject | OpenApiReferenceObject,\n context,\n );\n }\n\n const useReusableSchemas = rules?.useReusableSchemas ?? false;\n const urlEncoded = rules?.urlEncoded ?? false;\n const consts: string[] = [];\n const constNameRegistry = rules?.constNameRegistry ?? {};\n const constsCounter = isNumber(constNameRegistry[name])\n ? constNameRegistry[name] + 1\n : 0;\n\n const constsCounterValue = constsCounter\n ? pascal(getNumberWord(constsCounter))\n : '';\n\n constNameRegistry[name] = constsCounter;\n\n const functions: [string, unknown][] = [];\n\n // Emit the schema's trailing description/metadata. On zod v4 with `emitMeta`\n // (top-level component schemas only) this is a single `.meta({ id, ... })`\n // carrying the schema name as `id` plus description/deprecated when present;\n // otherwise it falls back to the plain `.describe(...)`. Called from both\n // return points (the multi-type union exit and the main exit) so every schema\n // shape is covered. `.meta()` must be the LAST modifier in the chain — zod v4\n // turns `.meta({id}).describe(...)` into a `$ref` wrapper, whereas\n // `.describe(...).meta({id})` (and a lone `.meta`) stay flat.\n const pushDescriptionOrMeta = () => {\n // Empty-string descriptions are treated as absent — preserves the prior\n // `if (schema.description)` falsy-check semantics (which skipped both `''`\n // and `undefined`), so this change never emits a no-op `.describe('')` or\n // `description: ''` in meta.\n const description =\n typeof schema.description === 'string' && schema.description.length > 0\n ? schema.description\n : undefined;\n const deprecated =\n 'deprecated' in schema && schema.deprecated === true ? true : undefined;\n\n // A `const` branch of a `oneOf` renders as `zod.literal(...)` inside an\n // array, where a JSDoc comment is not reachable by an editor, so `title`\n // and `deprecated` have nowhere to go but the registry. Only zod v4 has\n // one; v3 keeps the plain `.describe(...)` it emits today. Branches that\n // carry neither also keep `.describe(...)`, so a spec without member\n // metadata produces the same output as before. (#3835)\n const title =\n typeof schema.title === 'string' && schema.title.length > 0\n ? schema.title\n : undefined;\n const isAnnotatedConst =\n schema.const !== undefined &&\n (title !== undefined || deprecated === true);\n\n if (rules?.emitMeta && isZodV4) {\n const meta: ZodMetaArgs = { id: name };\n if (description !== undefined) meta.description = description;\n if (deprecated) meta.deprecated = true;\n functions.push(['meta', meta]);\n } else if (isZodV4 && isAnnotatedConst) {\n const meta: ZodMetaArgs = {};\n if (title !== undefined) meta.title = title;\n if (description !== undefined) meta.description = description;\n if (deprecated) meta.deprecated = true;\n functions.push(['meta', meta]);\n } else if (description !== undefined) {\n // `.describe()` embeds the text in a plain string literal, so `/` and\n // `*` carry no meaning and escaping them would trip ESLint's\n // `no-useless-escape` in the generated code (#3985).\n functions.push(['describe', `'${jsStringLiteralEscape(description)}'`]);\n }\n };\n\n const type = resolveZodType(schema);\n const required = rules?.required ?? false;\n const hasDefault = schema.default !== undefined;\n const nullable =\n // changing to ?? here changes behavior - so don't\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n ('nullable' in schema && schema.nullable) ||\n (Array.isArray(schema.type) && schema.type.includes('null'));\n const min = schema.minimum ?? schema.minLength ?? schema.minItems;\n const max = schema.maximum ?? schema.maxLength ?? schema.maxItems;\n\n // Handle exclusiveMinimum and exclusiveMaximum (OpenAPI 3.0 vs 3.1 compatibility)\n // OpenAPI 3.0: exclusiveMinimum/exclusiveMaximum are booleans indicating if minimum/maximum is exclusive\n // OpenAPI 3.1: exclusiveMinimum/exclusiveMaximum are numbers (the value itself)\n const exclusiveMinRaw =\n 'exclusiveMinimum' in schema ? schema.exclusiveMinimum : undefined;\n const exclusiveMaxRaw =\n 'exclusiveMaximum' in schema ? schema.exclusiveMaximum : undefined;\n\n // Convert boolean to number if using OpenAPI 3.0 format. `false` means\n // \"not exclusive\" and must normalize to undefined (not linger as the\n // boolean `false`), or downstream code mistakes it for a constraint value.\n const exclusiveMin = isBoolean(exclusiveMinRaw)\n ? exclusiveMinRaw\n ? min\n : undefined\n : exclusiveMinRaw;\n const exclusiveMax = isBoolean(exclusiveMaxRaw)\n ? exclusiveMaxRaw\n ? max\n : undefined\n : exclusiveMaxRaw;\n\n const multipleOf = schema.multipleOf;\n const matches = schema.pattern ?? undefined;\n // Enum-based schemas are emitted as `zod.enum(...)` or literal unions, so\n // chaining scalar constraints onto the parent schema would generate invalid\n // Zod output. Arrays are handled separately via their item schema.\n const hasNonArrayEnum = !!schema.enum && type !== 'array';\n\n // Check for allOf/oneOf/anyOf BEFORE processing by type\n // This ensures these constraints work with any base type (string, number, object, etc.)\n let skipSwitchStatement = false;\n if (schema.allOf || schema.oneOf || schema.anyOf) {\n const separator = schema.allOf ? 'allOf' : schema.oneOf ? 'oneOf' : 'anyOf';\n\n const schemas = (schema.allOf ?? schema.oneOf ?? schema.anyOf) as (\n | OpenApiSchemaObject\n | OpenApiReferenceObject\n )[];\n\n // Emit a discriminated union only when the opt-in flag is set AND the spec\n // asks for one AND every branch can be rendered as a `ZodObject` (see the\n // notes on `isDiscriminatableMember`). Otherwise keep `separator` as-is and\n // fall back to a plain `zod.union`, which accepts any member shape.\n const discriminatorProperty = ((): string | undefined => {\n if (\n !context.output?.override?.zod?.generateDiscriminatedUnion ||\n !(schema.oneOf || schema.anyOf) ||\n !schema.discriminator?.propertyName ||\n schemas.length <= 1\n ) {\n return undefined;\n }\n\n const property = schema.discriminator.propertyName;\n if (\n !schemas.every((member) =>\n isDiscriminatableMember(\n member,\n property,\n useReusableSchemas,\n context,\n ),\n )\n ) {\n return undefined;\n }\n\n // `zod.discriminatedUnion` builds a value->branch map at construction and\n // throws if two branches share a discriminator value. Require the values\n // to be unique across all branches; otherwise fall back to a plain union.\n const seenValues = new Set<string>();\n for (const member of schemas) {\n const values = collectDiscriminatorValues(member, property, context);\n if (!values || values.length === 0) return undefined;\n for (const value of values) {\n const key = JSON.stringify(value);\n if (seenValues.has(key)) return undefined;\n seenValues.add(key);\n }\n }\n\n return property;\n })();\n const unionSeparator = discriminatorProperty\n ? encodeDiscriminatorSeparator(separator, discriminatorProperty)\n : separator;\n\n // In JSON Schema / OpenAPI 3.1 a `required` array in any `allOf` member\n // (and on the composing schema itself) applies to properties contributed by\n // any member. Collect them all so each member's own properties can be marked\n // required even when the `required` lives in a sibling member — e.g. props\n // in a `$ref` base + `required` in a constraint-only sibling. Only valid for\n // `allOf` (a conjunction); `oneOf`/`anyOf` are alternatives. (#3171)\n const allOfRequired = schema.allOf\n ? [\n ...new Set([\n ...getRequiredKeys(schema, name),\n ...schemas.flatMap((member, index) => {\n // Only the member's top-level `required` is needed. For `$ref`\n // members resolve shallowly (no deep property dereference) and\n // tolerate unresolvable refs — they simply contribute no keys.\n const isRef = '$ref' in member && typeof member.$ref === 'string';\n const resolved = isRef\n ? tryResolveRefSchema(member.$ref as string, context)\n : (member as OpenApiSchemaObject);\n if (!resolved) return [];\n // A constraint-only member never reaches the object path below,\n // so a misplaced boolean here would otherwise pass unreported.\n // Name the member, not the composing schema, or the message\n // points at the wrong place in the document.\n return getRequiredKeys(\n resolved,\n isRef ? (member.$ref as string) : `${name}.allOf[${index}]`,\n );\n }),\n ]),\n ]\n : undefined;\n\n // Constraint-only branches have to be rendered against the composing\n // schema's `properties`, otherwise their `required` is lost. Only for\n // `oneOf`/`anyOf` — an `allOf` member already gets the same effect through\n // `additionalRequired` above. (#3780)\n const withSiblingProperties = (\n member: OpenApiSchemaObject | OpenApiReferenceObject,\n ) => {\n const properties = schema.properties;\n if (\n !(schema.oneOf || schema.anyOf) ||\n !isObject(properties) ||\n Object.keys(properties).length === 0 ||\n !isConstraintOnlyMember(member)\n ) {\n return member as OpenApiSchemaObject;\n }\n\n const required = (member as OpenApiSchemaObject).required as string[];\n\n // Every key the branch requires needs a sibling schema to attach to. A key\n // with none cannot be made required in zod — both `unknown` and `any` are\n // treated as optional inside an object, so `{}` would still match — and\n // rewriting would silently drop it. Leave the whole branch as-is rather\n // than emit an object that only looks like it enforces the constraint.\n if (!required.every((key) => Object.hasOwn(properties, key))) {\n return member as OpenApiSchemaObject;\n }\n\n const forbidden = getForbiddenKeys(member as OpenApiSchemaObject);\n\n // A `not` constraint forbids keys. When the member is rendered against the\n // sibling properties, forbidden keys must be emitted as `zod.never()`\n // (optional, so absence passes and any value fails). These are injected\n // as pre-generated property overrides into the object schema below. (#3780)\n let propertyOverrides:\n | Record<string, ZodValidationSchemaDefinition>\n | undefined;\n if (forbidden) {\n propertyOverrides = {};\n for (const key of forbidden) {\n // A key that is both forbidden and required contradicts itself; emit\n // the required form (no optional) so the `never` still rejects any\n // value while the key is expected to be absent.\n const isForbiddenAndRequired = required.includes(key);\n propertyOverrides[key] = {\n functions: [\n ['never', undefined],\n ...(isForbiddenAndRequired\n ? []\n : ([['optional', undefined]] as const)),\n ],\n consts: [],\n } as ZodValidationSchemaDefinition;\n }\n }\n\n return {\n type: 'object',\n properties,\n required,\n // carried over so the branch keeps its `.describe(...)`\n description: (member as OpenApiSchemaObject).description,\n 'x-orval-property-overrides': propertyOverrides,\n } as OpenApiSchemaObject;\n };\n\n // Use index-based naming to ensure uniqueness when processing multiple schemas\n // This prevents duplicate schema names when nullable refs are used\n const baseSchemas = schemas.map((schema, index) =>\n generateZodValidationSchemaDefinition(\n withSiblingProperties(schema),\n context,\n `${camel(name)}${pascal(getNumberWord(index + 1))}`,\n strict,\n isZodV4,\n {\n required: true,\n additionalRequired: allOfRequired,\n propertyOverrides: (\n withSiblingProperties(schema) as OpenApiSchemaObject\n )['x-orval-property-overrides'] as\n | Record<string, ZodValidationSchemaDefinition>\n | undefined,\n constNameRegistry,\n useReusableSchemas,\n urlEncoded,\n },\n ),\n );\n\n // Handle allOf/oneOf/anyOf with additional properties - merge additional properties into the schema\n if ((schema.allOf || schema.oneOf || schema.anyOf) && schema.properties) {\n const additionalPropertiesSchema = {\n properties: schema.properties,\n required: schema.required,\n additionalProperties: schema.additionalProperties,\n type: schema.type,\n } as OpenApiSchemaObject;\n\n // Use index-based naming to ensure uniqueness\n const additionalIndex = baseSchemas.length + 1;\n const additionalPropertiesDefinition =\n generateZodValidationSchemaDefinition(\n additionalPropertiesSchema,\n context,\n `${camel(name)}${pascal(getNumberWord(additionalIndex))}`,\n strict,\n isZodV4,\n {\n required: true,\n additionalRequired: allOfRequired,\n constNameRegistry,\n useReusableSchemas,\n urlEncoded,\n },\n );\n\n // For oneOf/anyOf, use allOf to combine union with common properties\n // This generates: zod.union([...]).and(commonProperties)\n if (schema.oneOf || schema.anyOf) {\n functions.push([\n 'allOf',\n [\n { functions: [[unionSeparator, baseSchemas]], consts: [] },\n additionalPropertiesDefinition,\n ],\n ]);\n } else {\n // For allOf, just add to the list\n baseSchemas.push(additionalPropertiesDefinition);\n functions.push([separator, baseSchemas]);\n }\n } else {\n functions.push([unionSeparator, baseSchemas]);\n }\n skipSwitchStatement = true;\n }\n\n let defaultVarName: string | undefined;\n if (schema.default !== undefined) {\n defaultVarName = `${name}Default${constsCounterValue}`;\n let defaultValue: string | undefined;\n\n const isDateType =\n schema.type === 'string' &&\n (schema.format === 'date' || schema.format === 'date-time') &&\n context.output.override.useDates;\n\n if (isDateType) {\n // OpenApiSchemaObject defines default as 'any'\n defaultValue = `new Date(${JSON.stringify(schema.default)})`;\n } else if (isObject(schema.default)) {\n // Narrow string literals individually with `as const` so `zod.enum([...])`\n // properties accept the emitted default (#3244). Whole-object/array\n // `as const` would make nested arrays `readonly`, which zod v4's\n // `.default()` rejects against its mutable parameter type (#3399).\n // Recursively emit a default value as a TS expression. Strings get `as\n // const` so zod.enum([...]) properties accept the emitted default (#3244);\n // whole-object/array `as const` is avoided because it makes nested arrays\n // readonly, which zod v4's `.default()` rejects (#3399).\n const formatDefaultEntryValue = (\n entryValue: unknown,\n ): string | undefined => {\n if (isString(entryValue)) {\n return `${JSON.stringify(entryValue)} as const`;\n }\n\n if (Array.isArray(entryValue)) {\n const arrayItems = entryValue.map((item) => {\n if (isString(item)) {\n return `${JSON.stringify(item)} as const`;\n }\n if (isNumber(item)) {\n return `${item} as const`;\n }\n if (Array.isArray(item)) {\n const formatted = formatDefaultEntryValue(item);\n return formatted ?? '[]';\n }\n // Object items recurse so nested string values get `as const`\n // (e.g. `{ value: 'active' as const }`), which JSON.stringify\n // alone would drop (#3982 CodeRabbit).\n if (isObject(item)) {\n const formatted = formatDefaultEntryValue(item);\n return formatted ?? 'null';\n }\n return `${JSON.stringify(item)}`;\n });\n return `[${arrayItems.join(', ')}]`;\n }\n\n // Nested objects recurse: emitting the raw value would stringify to\n // `[object Object]` (#3972) and skipping it would leave a hole in the\n // object literal `{ , , }` (#3974).\n if (isObject(entryValue)) {\n const nestedEntries = Object.entries(entryValue)\n .map(([nestedKey, nestedValue]) => {\n const formatted = formatDefaultEntryValue(nestedValue);\n return formatted === undefined\n ? undefined\n : `${JSON.stringify(nestedKey)}: ${formatted}`;\n })\n .filter((entry) => entry !== undefined)\n .join(', ');\n return nestedEntries.length === 0 ? '{}' : `{ ${nestedEntries} }`;\n }\n\n if (isNumber(entryValue)) {\n return `${entryValue} as const`;\n }\n\n if (\n entryValue === null ||\n entryValue === undefined ||\n isBoolean(entryValue)\n )\n return `${entryValue}`;\n\n return undefined;\n };\n\n const entries = Object.entries(schema.default)\n .map(([key, value]) => {\n const formatted = formatDefaultEntryValue(value);\n return formatted === undefined\n ? undefined\n : `${JSON.stringify(key)}: ${formatted}`;\n })\n .filter((entry) => entry !== undefined)\n .join(', ');\n defaultValue = entries.length === 0 ? `{}` : `{ ${entries} }`;\n } else {\n // OpenApiSchemaObject defines default as 'any'\n defaultValue = formatDefaultValue(schema.default);\n\n // If the schema is an array with enum items, inject inplace to avoid issues with default values\n const isArrayWithEnumItems =\n Array.isArray(schema.default) &&\n type === 'array' &&\n schema.items &&\n 'enum' in schema.items &&\n schema.default.length > 0;\n\n if (isArrayWithEnumItems) {\n defaultVarName = defaultValue;\n defaultValue = undefined;\n }\n\n // A tuple (prefixItems) default must stay inline: hoisting it into a\n // named const widens the array to `number[]` (mutable, unbounded) which\n // is not assignable to the fixed-length `[number, number]` tuple that\n // `zod.tuple()` expects (#3984). Inline, TypeScript contextually types\n // the array literal as a tuple. `resolveZodType` maps prefixItems\n // arrays to 'tuple', so match both.\n const isTupleWithDefault =\n Array.isArray(schema.default) &&\n (type === 'array' || type === 'tuple') &&\n 'prefixItems' in schema &&\n schema.default.length > 0;\n\n if (isTupleWithDefault) {\n defaultVarName = defaultValue;\n defaultValue = undefined;\n }\n }\n if (defaultValue) {\n consts.push(`export const ${defaultVarName} = ${defaultValue};`);\n }\n }\n\n // Handle multi-type schemas (OpenAPI 3.1+ type arrays)\n if (isObject(type) && 'multiType' in type) {\n const types = type.multiType;\n functions.push([\n 'oneOf',\n types.map((t) =>\n generateZodValidationSchemaDefinition(\n {\n ...(schema as Record<string, unknown>),\n type: t,\n } as OpenApiSchemaObject,\n context,\n name,\n strict,\n isZodV4,\n {\n required: true,\n constNameRegistry,\n useReusableSchemas,\n urlEncoded,\n },\n ),\n ),\n ]);\n\n if (!required && nullable) {\n functions.push(['nullish', undefined]);\n } else if (nullable) {\n functions.push(['nullable', undefined]);\n } else if (!required) {\n functions.push(['optional', undefined]);\n }\n\n pushDescriptionOrMeta();\n\n return { functions, consts };\n }\n\n if (!skipSwitchStatement) {\n switch (type) {\n case 'tuple': {\n /**\n *\n * > 10.3.1.1. prefixItems\n * > The value of \"prefixItems\" MUST be a non-empty array of valid JSON Schemas.\n * >\n * > Validation succeeds if each element of the instance validates against the schema at the same position, if any.\n * > This keyword does not constrain the length of the array. If the array is longer than this keyword's value,\n * > this keyword validates only the prefix of matching length.\n * >\n * > This keyword produces an annotation value which is the largest index to which this keyword applied a subschema.\n * > The value MAY be a boolean true if a subschema was applied to every index of the instance, such as is produced by the \"items\" keyword.\n * > This annotation affects the behavior of \"items\" and \"unevaluatedItems\".\n * >\n * > Omitting this keyword has the same assertion behavior as an empty array.\n */\n if ('prefixItems' in schema) {\n const schema31 = schema as OpenApiSchemaObject;\n const prefixItems = Array.isArray(schema31.prefixItems)\n ? (schema31.prefixItems as (\n | OpenApiSchemaObject\n | OpenApiReferenceObject\n )[])\n : [];\n\n if (prefixItems.length > 0) {\n functions.push([\n 'tuple',\n prefixItems.map((item, idx) =>\n generateZodValidationSchemaDefinition(\n dereference(item, context),\n context,\n camel(`${name}-${idx}-item`),\n strict,\n isZodV4,\n {\n required: true,\n constNameRegistry,\n useReusableSchemas,\n urlEncoded,\n },\n ),\n ),\n ]);\n\n if (\n schema.items &&\n (max ?? Number.POSITIVE_INFINITY) > prefixItems.length\n ) {\n // only add zod.rest() if number of tuple elements can exceed provided prefixItems:\n functions.push([\n 'rest',\n generateZodValidationSchemaDefinition(\n schema.items as OpenApiSchemaObject | undefined,\n context,\n camel(`${name}-item`),\n strict,\n isZodV4,\n {\n required: true,\n constNameRegistry,\n useReusableSchemas,\n urlEncoded,\n },\n ),\n ]);\n }\n }\n }\n break;\n }\n case 'array': {\n functions.push([\n 'array',\n generateZodValidationSchemaDefinition(\n schema.items as OpenApiSchemaObject | undefined,\n context,\n camel(`${name}-item`),\n strict,\n isZodV4,\n {\n required: true,\n constNameRegistry,\n useReusableSchemas,\n urlEncoded,\n },\n ),\n ]);\n break;\n }\n case 'string': {\n if (schema.enum) {\n break;\n }\n\n if (\n context.output.override.useDates &&\n (schema.format === 'date' || schema.format === 'date-time')\n ) {\n functions.push(['date', undefined]);\n break;\n }\n\n // url-encoded bodies serialize via URLSearchParams (strings only), so\n // binary fields stay `string` rather than becoming `File` (#3664).\n if (!urlEncoded && schema.format === 'binary') {\n functions.push(['instanceof', 'Blob']);\n break;\n }\n\n // The @scalar/openapi-parser upgrader converts format: binary to\n // contentMediaType: application/octet-stream when upgrading\n // Swagger 2.0 / OAS 3.0 → OAS 3.1. Treat it the same as\n // format: binary so $ref-based model types generate Blob validation.\n if (\n !urlEncoded &&\n schema.contentMediaType === 'application/octet-stream' &&\n !schema.contentEncoding\n ) {\n functions.push(['instanceof', 'Blob']);\n break;\n }\n\n if (isZodV4) {\n if (!predefinedZodFormats.has(schema.format ?? '')) {\n if ('const' in schema) {\n functions.push(['literal', JSON.stringify(String(schema.const))]);\n } else if (schema.pattern && schema.format) {\n const regexp = buildRegExpLiteral(schema.pattern);\n consts.push(\n `export const ${name}RegExp${constsCounterValue} = ${regexp};\\n`,\n );\n functions.push([\n 'stringFormat',\n [\n `'${jsStringLiteralEscape(schema.format)}'`,\n `${name}RegExp${constsCounterValue}`,\n ],\n ]);\n } else {\n functions.push([type as string, undefined]);\n }\n break;\n }\n } else {\n if ('const' in schema) {\n functions.push(['literal', JSON.stringify(String(schema.const))]);\n } else {\n functions.push([type as string, undefined]);\n }\n }\n\n if (schema.format === 'date') {\n const formatAPI = getZodDateFormat(isZodV4);\n\n functions.push([formatAPI, undefined]);\n break;\n }\n\n if (schema.format === 'time') {\n const options = context.output.override.zod.timeOptions;\n const formatAPI = getZodTimeFormat(isZodV4);\n\n functions.push([formatAPI, JSON.stringify(options)]);\n break;\n }\n\n if (schema.format === 'date-time') {\n const options = context.output.override.zod.dateTimeOptions;\n const formatAPI = getZodDateTimeFormat(isZodV4);\n\n functions.push([formatAPI, JSON.stringify(options)]);\n break;\n }\n\n if (schema.format === 'email') {\n functions.push(['email', undefined]);\n break;\n }\n\n if (schema.format === 'uri') {\n functions.push(['url', undefined]);\n break;\n }\n\n if (schema.format === 'hostname') {\n if (isZodV4) {\n functions.push(['hostname', undefined]);\n } else {\n functions.push(['url', undefined]);\n }\n break;\n }\n\n if (schema.format === 'uuid') {\n functions.push(['uuid', undefined]);\n break;\n }\n\n break;\n }\n case 'never': {\n // `not`-forbidden keys render as `zod.never()`. Optional, so the key's\n // absence passes while any supplied value fails validation. (#3780)\n functions.push(['never', undefined]);\n if (required) {\n functions.push(['optional', undefined]);\n }\n break;\n }\n\n default: {\n // Handle const for number, boolean, null, and object types\n if ('const' in schema) {\n const constValue = schema.const;\n if (\n isNumber(constValue) ||\n isBoolean(constValue) ||\n constValue === null\n ) {\n functions.push(['literal', constValue]);\n break;\n }\n }\n\n const hasProperties = !!schema.properties;\n const properties = schema.properties ?? {};\n const hasDefinedProperties = Object.keys(properties).length > 0;\n const hasAdditionalPropertiesSchema =\n !!schema.additionalProperties &&\n !isBoolean(schema.additionalProperties);\n\n // A plain `type: object` without explicit properties/additionalProperties\n // represents an open dictionary-like object in OpenAPI and should not be\n // generated as a strict object.\n const shouldUseLooseObject =\n type === 'object' &&\n !hasDefinedProperties &&\n schema.additionalProperties === undefined &&\n !hasAdditionalPropertiesSchema;\n\n if (hasProperties && hasDefinedProperties) {\n const objectType = getObjectFunctionName(isZodV4, strict);\n\n // A property is required when this schema requires it OR when a\n // sibling `allOf` member requires it (propagated via additionalRequired). (#3171)\n const requiredKeys = new Set<string>([\n ...getRequiredKeys(schema, name),\n ...(rules?.additionalRequired ?? []),\n ]);\n\n functions.push([\n objectType,\n Object.keys(properties)\n .map((key) => ({\n [key]:\n rules?.propertyOverrides?.[key] ??\n generateZodValidationSchemaDefinition(\n properties[key] as OpenApiSchemaObject | undefined,\n context,\n camel(`${name}-${key}`),\n strict,\n isZodV4,\n {\n required: requiredKeys.has(key),\n constNameRegistry,\n useReusableSchemas,\n urlEncoded,\n },\n ),\n }))\n .reduce((acc, curr) => ({ ...acc, ...curr }), {}),\n ]);\n\n if (strict && !isZodV4) {\n functions.push(['strict', undefined]);\n }\n\n break;\n }\n\n if (shouldUseLooseObject) {\n const looseObjectType = getLooseObjectFunctionName(isZodV4);\n\n functions.push([looseObjectType, {}]);\n\n if (!isZodV4) {\n functions.push(['passthrough', undefined]);\n }\n\n break;\n }\n\n if (schema.additionalProperties) {\n functions.push([\n 'additionalProperties',\n generateZodValidationSchemaDefinition(\n isBoolean(schema.additionalProperties)\n ? {}\n : (schema.additionalProperties as OpenApiSchemaObject),\n context,\n name,\n strict,\n isZodV4,\n {\n required: true,\n constNameRegistry,\n useReusableSchemas,\n urlEncoded,\n },\n ),\n ]);\n\n break;\n }\n\n if (schema.enum) {\n break;\n }\n\n functions.push([type === 'integer' ? 'int' : type, undefined]);\n\n break;\n }\n }\n }\n\n if (!hasNonArrayEnum && isString(type) && minAndMaxTypes.has(type)) {\n // Handle minimum constraints: exclusiveMinimum (>.gt()) takes priority over minimum (.min())\n // Check if exclusive flag was set (boolean format in OpenAPI 3.0) or a different value (OpenAPI 3.1)\n const shouldUseExclusiveMin = exclusiveMin !== undefined;\n const shouldUseExclusiveMax = exclusiveMax !== undefined;\n\n if (shouldUseExclusiveMin && exclusiveMin !== undefined) {\n const safeExclusiveMin = assertSafeNumericConstraint(\n exclusiveMin,\n 'exclusiveMinimum',\n );\n consts.push(\n `export const ${name}ExclusiveMin${constsCounterValue} = ${safeExclusiveMin};`,\n );\n // Generate .gt() for exclusive minimum (> instead of >=)\n functions.push(['gt', `${name}ExclusiveMin${constsCounterValue}`]);\n } else if (min !== undefined) {\n const safeMin = assertSafeNumericConstraint(min, 'minimum');\n if (safeMin === 1) {\n functions.push(['min', `${safeMin}`]);\n } else {\n consts.push(\n `export const ${name}Min${constsCounterValue} = ${safeMin};`,\n );\n functions.push(['min', `${name}Min${constsCounterValue}`]);\n }\n }\n\n // Handle maximum constraints: exclusiveMaximum (<.lt()) takes priority over maximum (.max())\n if (shouldUseExclusiveMax && exclusiveMax !== undefined) {\n const safeExclusiveMax = assertSafeNumericConstraint(\n exclusiveMax,\n 'exclusiveMaximum',\n );\n consts.push(\n `export const ${name}ExclusiveMax${constsCounterValue} = ${safeExclusiveMax};`,\n );\n // Generate .lt() for exclusive maximum (< instead of <=)\n functions.push(['lt', `${name}ExclusiveMax${constsCounterValue}`]);\n } else if (max !== undefined) {\n const safeMax = assertSafeNumericConstraint(max, 'maximum');\n consts.push(`export const ${name}Max${constsCounterValue} = ${safeMax};`);\n functions.push(['max', `${name}Max${constsCounterValue}`]);\n }\n\n if (multipleOf !== undefined) {\n const safeMultipleOf = assertSafeNumericConstraint(\n multipleOf,\n 'multipleOf',\n );\n consts.push(\n `export const ${name}MultipleOf${constsCounterValue} = ${safeMultipleOf.toString()};`,\n );\n functions.push(['multipleOf', `${name}MultipleOf${constsCounterValue}`]);\n }\n if (\n exclusiveMin !== undefined ||\n min !== undefined ||\n exclusiveMax !== undefined ||\n multipleOf !== undefined ||\n max !== undefined\n ) {\n consts.push(`\\n`);\n }\n }\n\n const stringFormatAlreadyEmitted =\n isZodV4 &&\n type === 'string' &&\n !!matches &&\n !!schema.format &&\n !predefinedZodFormats.has(schema.format ?? '');\n\n if (\n matches &&\n !hasNonArrayEnum &&\n type === 'string' &&\n !stringFormatAlreadyEmitted\n ) {\n const regexp = buildRegExpLiteral(matches);\n\n consts.push(\n `export const ${name}RegExp${constsCounterValue} = ${regexp};\\n`,\n );\n if (schema.format && !predefinedZodFormats.has(schema.format) && isZodV4) {\n functions.push([\n 'stringFormat',\n [\n `'${jsStringLiteralEscape(schema.format)}'`,\n `${name}RegExp${constsCounterValue}`,\n ],\n ]);\n } else {\n functions.push(['regex', `${name}RegExp${constsCounterValue}`]);\n }\n }\n\n // Array item enums are handled by the nested item schema. Guard parent-array\n // enum emission to avoid generating invalid trailing `.enum(...)` chains.\n\n if (schema.enum && type !== 'array') {\n const enumMembers = getEnumMembers(schema);\n const hasMetadata = hasEnumMetadata(enumMembers);\n const enumValueInfo = getEnumValueInfo(enumMembers);\n\n const enumValues = enumMembers.map((member) => member.value);\n\n const canUseEnumObject =\n enumValueInfo.isHomogeneous && !enumValueInfo.isBoolean && hasMetadata;\n\n if (canUseEnumObject) {\n // The enum object is inserted as an object-literal argument to\n // `zod.enum({ ... })` (or `zod.nativeEnum({ ... } as const)`), so only\n // CONST generation is valid here: it emits `key: value` pairs. The other\n // two modes produce output that is not valid in that position — `union`\n // emits a type union (`'A' | 'B'`), and `enum` emits assignment syntax\n // (`A = 'A'`) that only parses inside an `enum` declaration. The user's\n // `enumGenerationType` override is deliberately ignored; wiring it through\n // would make the generated code fail to parse. See docs/guides/enums.mdx\n // (Zod section).\n const enumContent = getEnumImplementation(enumMembers, {\n enumNamingConvention: context.output.override.namingConvention.enum,\n enumGenerationType: EnumGeneration.CONST,\n });\n functions.push(['enumObject', `{\\n${enumContent}}`]);\n } else if (enumValues.every((value) => isString(value))) {\n functions.push([\n 'enum',\n `[${enumValues\n .map((value) => `'${jsStringLiteralEscape(value)}'`)\n .join(', ')}]`,\n ]);\n } else {\n functions.push([\n 'oneOf',\n enumMembers.map((member) => ({\n functions: [\n [\n 'literal',\n isString(member.value)\n ? `'${jsStringLiteralEscape(member.value)}'`\n : member.value,\n ],\n ],\n consts: [],\n })),\n ]);\n }\n }\n\n if (!required && nullable) {\n functions.push(['nullish', undefined]);\n } else if (nullable) {\n functions.push(['nullable', undefined]);\n } else if (!required && !hasDefault) {\n functions.push(['optional', undefined]);\n }\n\n if (hasDefault) {\n functions.push(['default', defaultVarName]);\n }\n\n pushDescriptionOrMeta();\n\n return { functions, consts: unique(consts) };\n};\n\n/**\n * Runtime shape passed to the user-supplied `override.zod.params` function for\n * every emitted validator. Exported so consumers can type their function with\n * `import type { ZodParamsContext } from 'orval'` instead of hand-writing it.\n */\nexport interface ZodParamsContext {\n /** The OpenAPI `operationId`, or `''` for shared component schemas. */\n operationId: string;\n /** `'schema'` is used for shared component schemas with no owning operation. */\n location: 'param' | 'query' | 'header' | 'body' | 'response' | 'schema';\n /** Generated schema name, e.g. `CreateUserBody`, or the component name. */\n schemaName: string;\n /** Path to the current property within the schema. Only object property names are appended. */\n fieldPath: string[];\n /** The Zod method being emitted, e.g. `'string'`, `'min'`, `'email'`. */\n validator: string;\n}\n\nexport interface ZodParamsInjection extends Pick<\n ZodParamsContext,\n 'operationId' | 'location' | 'schemaName'\n> {\n mutator: GeneratorMutator;\n}\n\nconst PARAMS_MODIFIER_VALIDATORS = new Set([\n 'optional',\n 'nullable',\n 'nullish',\n 'default',\n 'describe',\n // Nullary / degenerate validators — either no params arg accepted in zod v3\n // (e.g. .unknown(), .any(), .never(), .null(), .undefined(), .void()) or no\n // meaningful error to attach (unknown/any accept everything).\n 'unknown',\n 'any',\n 'never',\n 'null',\n 'undefined',\n 'void',\n]);\n\n// Validators whose single argument is already a params-shaped options object\n// (e.g. `z.iso.datetime({ offset, precision })`). For these, the injected\n// params must merge into the existing object rather than be appended as a\n// second argument.\nconst PARAMS_MERGE_INTO_OPTIONS_VALIDATORS = new Set([\n 'datetime',\n 'time',\n 'iso.datetime',\n 'iso.time',\n]);\n\nexport interface ZodMetaArgs {\n id?: string;\n title?: string;\n description?: string;\n deprecated?: boolean;\n}\n\n// The object literal for a `.meta(...)` call, built explicitly rather than via\n// `stringify` so the strings are JS-escaped and the key order is stable: id,\n// title, description, deprecated. Every key is optional. A schema name (`id`)\n// is only available for top-level component schemas, while a `oneOf` const\n// branch carries member metadata and no name. Returns undefined when nothing\n// is left to emit, so the caller can skip the call entirely.\nconst buildMetaArgs = (args: ZodMetaArgs): string | undefined => {\n const parts: string[] = [];\n if (args.id !== undefined) {\n parts.push(`id: '${jsStringLiteralEscape(args.id)}'`);\n }\n if (args.title !== undefined) {\n parts.push(`title: '${jsStringLiteralEscape(args.title)}'`);\n }\n if (args.description !== undefined) {\n parts.push(`description: '${jsStringLiteralEscape(args.description)}'`);\n }\n if (args.deprecated) {\n parts.push('deprecated: true');\n }\n return parts.length > 0 ? `{ ${parts.join(', ')} }` : undefined;\n};\n\nexport const parseZodValidationSchemaDefinition = (\n input: ZodValidationSchemaDefinition,\n context: ContextSpec,\n coerceTypes: boolean | ZodCoerceType[] = false,\n strict: boolean,\n isZodV4: boolean,\n preprocess?: GeneratorMutator,\n paramsInjection?: ZodParamsInjection,\n variant: ZodVariantOption = 'classic',\n exactOptional = false,\n): { zod: string; consts: string; usedRefs: Set<string> } => {\n if (input.functions.length === 0) {\n return { zod: '', consts: '', usedRefs: new Set() };\n }\n\n let consts = '';\n const usedRefs = new Set<string>();\n\n const appendConstsChunk = (chunk: string) => {\n if (!chunk) {\n return;\n }\n\n if (\n consts.length > 0 &&\n !consts.endsWith('\\n') &&\n !chunk.startsWith('\\n')\n ) {\n consts += '\\n';\n }\n\n consts += chunk;\n };\n\n const formatFunctionArgs = (value: unknown): string => {\n if (value === undefined) return '';\n if (value === null) return 'null';\n if (isString(value)) return value;\n if (Array.isArray(value)) {\n return value.map((item) => formatFunctionArgs(item)).join(', ');\n }\n if (isObject(value)) {\n return stringify(value) ?? '';\n }\n if (isNumber(value) || isBoolean(value)) return `${value}`;\n return '';\n };\n\n const buildParamsArg = (\n fn: string,\n fieldPath: readonly string[],\n ): string | undefined => {\n if (!paramsInjection) return undefined;\n if (PARAMS_MODIFIER_VALIDATORS.has(fn)) return undefined;\n const ctx: ZodParamsContext = {\n operationId: paramsInjection.operationId,\n location: paramsInjection.location,\n schemaName: paramsInjection.schemaName,\n fieldPath: [...fieldPath],\n validator: fn,\n };\n return `${paramsInjection.mutator.name}(${JSON.stringify(ctx)})`;\n };\n\n const shouldCoerce = (fn: string) =>\n coerceTypes &&\n (Array.isArray(coerceTypes)\n ? coerceTypes.includes(fn as ZodCoerceType)\n : COERCIBLE_TYPES.has(fn));\n\n const buildCombinedArgs = (\n fn: string,\n args: unknown,\n fieldPath: readonly string[],\n ) => {\n const formattedArgs = formatFunctionArgs(args);\n const paramsArg = buildParamsArg(fn, fieldPath);\n if (\n paramsArg &&\n formattedArgs &&\n PARAMS_MERGE_INTO_OPTIONS_VALIDATORS.has(fn)\n ) {\n return `{ ...${formattedArgs}, ...${paramsArg} }`;\n }\n if (paramsArg) {\n return formattedArgs ? `${formattedArgs}, ${paramsArg}` : paramsArg;\n }\n return formattedArgs;\n };\n\n type MiniRendered = { expr: string; kind?: string };\n\n const renderMiniDefinition = (\n definition: ZodValidationSchemaDefinition,\n fieldPath: readonly string[] = [],\n ): MiniRendered => {\n let current: MiniRendered | undefined;\n\n const requireCurrent = (fn: string) => {\n if (!current) {\n throw new Error(`Cannot render zod mini ${fn} without a base schema`);\n }\n return current;\n };\n\n const renderObject = (\n objectArgs: Record<string, ZodValidationSchemaDefinition>,\n objectType: string,\n ): MiniRendered => ({\n kind: 'object',\n expr: `${zodMiniCall(\n objectType,\n `{\n${Object.entries(objectArgs)\n .map(([key, schema]) => {\n const rendered = renderMiniDefinition(schema, [...fieldPath, key]);\n appendConstsChunk(schema.consts.join('\\n'));\n const coerceArrays =\n Array.isArray(coerceTypes) &&\n coerceTypes.includes('array' as ZodCoerceType);\n if (coerceArrays && schema.functions.some(([fn]) => fn === 'array')) {\n return ` ${JSON.stringify(key)}: ${zodMiniCall('pipe', `${zodMiniCall('transform', '(value) => value === undefined || Array.isArray(value) ? value : [value]')}, ${rendered.expr}`)}`;\n }\n return ` ${JSON.stringify(key)}: ${rendered.expr}`;\n })\n .join(',\\n')}\n}`,\n )}`,\n });\n\n // Merge an `allOf` of object schemas into one set of properties, or null\n // when a part isn't a plain object. Mirrors `mergeAllOfObjectsClassic`.\n const mergeAllOfObjectsMini = (\n allOfArgs: ZodValidationSchemaDefinition[],\n ): Record<string, ZodValidationSchemaDefinition> | null => {\n const allAreObjects =\n allOfArgs.length > 0 &&\n allOfArgs.every((partSchema) => {\n if (partSchema.functions.length === 0) return false;\n const firstFn = partSchema.functions[0][0];\n return firstFn === 'object' || firstFn === 'strictObject';\n });\n if (!allAreObjects) return null;\n\n const mergedProperties: Record<string, ZodValidationSchemaDefinition> =\n {};\n for (const partSchema of allOfArgs) {\n if (partSchema.consts.length > 0) {\n appendConstsChunk(partSchema.consts.join('\\n'));\n }\n const objectFunctionIndex = partSchema.functions.findIndex(\n ([fnName]) => fnName === 'object' || fnName === 'strictObject',\n );\n if (objectFunctionIndex !== -1) {\n const objectArgs = partSchema.functions[objectFunctionIndex][1];\n if (isObject(objectArgs)) {\n Object.assign(\n mergedProperties,\n objectArgs as Record<string, ZodValidationSchemaDefinition>,\n );\n }\n }\n }\n return mergedProperties;\n };\n\n // Render a single discriminated-union branch as a `ZodObject` (see\n // `renderDiscriminatedUnionMember` for the classic-variant counterpart).\n const renderDiscriminatedUnionMemberMini = (\n member: ZodValidationSchemaDefinition,\n ): string => {\n if (member.functions[0]?.[0] === 'allOf') {\n const merged = mergeAllOfObjectsMini(\n member.functions[0][1] as ZodValidationSchemaDefinition[],\n );\n if (merged !== null) {\n return renderObject(merged, getObjectFunctionName(true, strict)).expr;\n }\n }\n appendConstsChunk(member.consts.join('\\n'));\n return renderMiniDefinition(member, fieldPath).expr;\n };\n\n for (let index = 0; index < definition.functions.length; index++) {\n const [fn, args = ''] = definition.functions[index];\n\n if (fn === 'namedRef') {\n const refArgs = args as { name: string; sourceRef: string };\n usedRefs.add(refArgs.name);\n current = { expr: `__REF_${refArgs.name}__`, kind: 'ref' };\n continue;\n }\n\n if (fn === 'fileOrString') {\n current = {\n expr: zodMiniCall(\n 'union',\n `[${zodMiniCall('instanceof', 'Blob')}, ${zodMiniCall('string')}]`,\n ),\n kind: 'union',\n };\n continue;\n }\n\n if (fn === 'enumObject') {\n // Mini's `_enum` has no `const` type parameter, so an object literal\n // would widen to `Record<string, string | number>` and the generated\n // schema would lose its member literal types. Classic v3 already\n // appends `as const` for the same reason; mirror it here.\n current = {\n expr: zodMiniCall('enum', `${String(args)} as const`),\n kind: 'enum',\n };\n continue;\n }\n\n if (fn === 'allOf') {\n const allOfArgs = args as ZodValidationSchemaDefinition[];\n const mergedProperties = strict\n ? mergeAllOfObjectsMini(allOfArgs)\n : null;\n\n if (mergedProperties !== null) {\n current = renderObject(\n mergedProperties,\n getObjectFunctionName(true, strict),\n );\n continue;\n }\n\n const rendered = allOfArgs.map((partSchema) => {\n appendConstsChunk(partSchema.consts.join('\\n'));\n return renderMiniDefinition(partSchema, fieldPath).expr;\n });\n if (rendered.length === 0) {\n current = { expr: '' };\n continue;\n }\n current = {\n expr: rendered.reduce((acc, value) =>\n acc ? zodMiniCall('intersection', `${acc}, ${value}`) : value,\n ),\n kind: 'intersection',\n };\n continue;\n }\n\n const discriminator = decodeDiscriminatorSeparator(fn);\n if (discriminator || fn === 'oneOf' || fn === 'anyOf') {\n const unionArgs = args as ZodValidationSchemaDefinition[];\n if (unionArgs.length === 1) {\n appendConstsChunk(unionArgs[0].consts.join('\\n'));\n current = renderMiniDefinition(unionArgs[0], fieldPath);\n continue;\n }\n if (discriminator) {\n current = {\n expr: zodMiniCall(\n 'discriminatedUnion',\n `'${jsStringEscape(discriminator.property)}', [${unionArgs\n .map((arg) => renderDiscriminatedUnionMemberMini(arg))\n .join(',')}]`,\n ),\n kind: 'union',\n };\n continue;\n }\n current = {\n expr: zodMiniCall(\n 'union',\n `[${unionArgs\n .map((arg) => {\n appendConstsChunk(arg.consts.join('\\n'));\n return renderMiniDefinition(arg, fieldPath).expr;\n })\n .join(',')}]`,\n ),\n kind: 'union',\n };\n continue;\n }\n\n if (fn === 'additionalProperties') {\n const additionalPropertiesArgs = args as ZodValidationSchemaDefinition;\n const rendered = renderMiniDefinition(\n additionalPropertiesArgs,\n fieldPath,\n );\n if (Array.isArray(additionalPropertiesArgs.consts)) {\n appendConstsChunk(additionalPropertiesArgs.consts.join('\\n'));\n }\n current = {\n expr: zodMiniCall(\n 'record',\n `${zodMiniCall('string')}, ${rendered.expr}`,\n ),\n kind: 'object',\n };\n continue;\n }\n\n if (fn === 'object' || fn === 'strictObject' || fn === 'looseObject') {\n const objectType =\n fn === 'looseObject'\n ? 'looseObject'\n : getObjectFunctionName(true, strict);\n current = renderObject(\n args as Record<string, ZodValidationSchemaDefinition>,\n objectType,\n );\n continue;\n }\n\n if (fn === 'passthrough' || fn === 'strict') {\n continue;\n }\n\n if (fn === 'array') {\n const arrayArgs = args as ZodValidationSchemaDefinition;\n const rendered = renderMiniDefinition(arrayArgs, fieldPath);\n if (isString(arrayArgs.consts)) {\n appendConstsChunk(arrayArgs.consts);\n } else if (Array.isArray(arrayArgs.consts)) {\n appendConstsChunk(arrayArgs.consts.join('\\n'));\n }\n current = { expr: zodMiniCall('array', rendered.expr), kind: 'array' };\n continue;\n }\n\n if (fn === 'tuple') {\n const tupleItems = (args as ZodValidationSchemaDefinition[])\n .map((x) => {\n const rendered = renderMiniDefinition(x, fieldPath);\n appendConstsChunk(x.consts.join('\\n'));\n return rendered.expr;\n })\n .join(',\\n');\n const next = definition.functions[index + 1];\n if (next?.[0] === 'rest') {\n const restDefinition = next[1] as ZodValidationSchemaDefinition;\n const rest = renderMiniDefinition(restDefinition, fieldPath).expr;\n appendConstsChunk(restDefinition.consts.join('\\n'));\n current = {\n expr: zodMiniCall('tuple', `[${tupleItems}], ${rest}`),\n kind: 'tuple',\n };\n index++;\n } else {\n current = {\n expr: zodMiniCall('tuple', `[${tupleItems}]`),\n kind: 'tuple',\n };\n }\n continue;\n }\n\n const combinedArgs = buildCombinedArgs(fn, args, fieldPath);\n\n if (fn === 'int' && shouldCoerce('number')) {\n const numberArgs = buildCombinedArgs('number', undefined, fieldPath);\n current = {\n expr: zodMiniCall(\n 'pipe',\n `${zodMiniCoerceCall('number', numberArgs)}, ${zodMiniCall('int', combinedArgs)}`,\n ),\n kind: 'number',\n };\n continue;\n }\n\n if (fn === 'optional' || fn === 'nullable' || fn === 'nullish') {\n const value = requireCurrent(fn);\n const miniFn =\n exactOptional && isZodV4 && fn === 'optional' ? 'exactOptional' : fn;\n current = { expr: zodMiniCall(miniFn, value.expr), kind: value.kind };\n continue;\n }\n\n if (fn === 'default') {\n const value = requireCurrent(fn);\n current = {\n expr: zodMiniCall('_default', `${value.expr}, ${combinedArgs}`),\n kind: value.kind,\n };\n continue;\n }\n\n // Mini has no `.meta()` method, so registry metadata rides in as a\n // check. The argument goes through the same builder as the classic path,\n // so both variants emit the same keys in the same order.\n if (fn === 'meta') {\n const value = requireCurrent(fn);\n const metaArgs = buildMetaArgs(args as ZodMetaArgs);\n if (metaArgs) {\n current = {\n expr: `${value.expr}.check(${zodMiniCall(fn, metaArgs)})`,\n kind: value.kind,\n };\n }\n continue;\n }\n\n if (fn === 'describe') {\n const value = requireCurrent(fn);\n current = {\n expr: `${value.expr}.check(${zodMiniCall(fn, combinedArgs)})`,\n kind: value.kind,\n };\n continue;\n }\n\n if (\n fn === 'min' ||\n fn === 'max' ||\n fn === 'gt' ||\n fn === 'lt' ||\n fn === 'multipleOf' ||\n fn === 'regex' ||\n fn === 'length'\n ) {\n const value = requireCurrent(fn);\n const checkName =\n fn === 'min'\n ? value.kind === 'number'\n ? 'gte'\n : 'minLength'\n : fn === 'max'\n ? value.kind === 'number'\n ? 'lte'\n : 'maxLength'\n : fn;\n current = {\n expr: `${value.expr}.check(${zodMiniCall(checkName, combinedArgs)})`,\n kind: value.kind,\n };\n continue;\n }\n\n if (\n (fn !== 'date' && shouldCoerce(fn)) ||\n (fn === 'date' && shouldCoerce(fn) && context.output.override.useDates)\n ) {\n current = {\n expr: zodMiniCoerceCall(fn, combinedArgs),\n kind: fn,\n };\n continue;\n }\n\n current = {\n expr: zodMiniCall(fn, combinedArgs),\n kind:\n fn === 'int'\n ? 'number'\n : fn === 'enum' || fn === 'literal' || fn === 'stringFormat'\n ? 'string'\n : fn.split('.')[0],\n };\n }\n\n return current ?? { expr: '' };\n };\n\n // Merge an `allOf` of object schemas into a single `zod.object({...})`.\n // Returns null when a part isn't a plain object (so the caller can fall back\n // to `.and()`). Used both for strict-mode object merging and to turn an\n // inheritance branch of a discriminated union into a valid object option.\n function mergeAllOfObjectsClassic(\n allOfArgs: ZodValidationSchemaDefinition[],\n fieldPath: readonly string[],\n ): string | null {\n const allAreObjects =\n allOfArgs.length > 0 &&\n allOfArgs.every((partSchema) => {\n if (partSchema.functions.length === 0) return false;\n const firstFn = partSchema.functions[0][0];\n // Zod v3 renders a strict object as `object(...).strict()`, so the\n // object constructor is still the first function.\n return firstFn === 'object' || firstFn === 'strictObject';\n });\n if (!allAreObjects) return null;\n\n const mergedProperties: Record<string, ZodValidationSchemaDefinition> = {};\n let allConsts = '';\n for (const partSchema of allOfArgs) {\n if (partSchema.consts.length > 0) {\n allConsts += partSchema.consts.join('\\n');\n }\n const objectFunctionIndex = partSchema.functions.findIndex(\n ([fnName]) => fnName === 'object' || fnName === 'strictObject',\n );\n if (objectFunctionIndex !== -1) {\n const objectArgs = partSchema.functions[objectFunctionIndex][1];\n if (isObject(objectArgs)) {\n // Later members override earlier ones (derived over base).\n Object.assign(\n mergedProperties,\n objectArgs as Record<string, ZodValidationSchemaDefinition>,\n );\n }\n }\n }\n\n if (allConsts.length > 0) {\n appendConstsChunk(allConsts);\n }\n\n const objectType = getObjectFunctionName(isZodV4, strict);\n const mergedObjectString = `zod.${objectType}({\n${Object.entries(mergedProperties)\n .map(([key, schema]) => {\n const value = schema.functions\n .map((prop) => parseProperty(prop, [...fieldPath, key]))\n .join('');\n appendConstsChunk(schema.consts.join('\\n'));\n return ` ${JSON.stringify(key)}: ${value.startsWith('.') ? 'zod' : ''}${value}`;\n })\n .join(',\\n')}\n})`;\n\n // Apply strict only once for Zod v3 (v4 uses strictObject above).\n if (strict && !isZodV4) {\n return `${mergedObjectString}.strict()`;\n }\n return mergedObjectString;\n }\n\n // Render a single discriminated-union branch as a `ZodObject`. `allOf`\n // (inheritance) branches are merged into one object; every other branch is a\n // plain object or a `$ref` identifier and renders as-is. Generation only\n // marks the union as discriminated when all branches satisfy this, so the\n // fallback here should not trigger in practice.\n const renderDiscriminatedUnionMember = (\n member: ZodValidationSchemaDefinition,\n fieldPath: readonly string[],\n ): string => {\n if (member.functions[0]?.[0] === 'allOf') {\n const merged = mergeAllOfObjectsClassic(\n member.functions[0][1] as ZodValidationSchemaDefinition[],\n fieldPath,\n );\n if (merged !== null) {\n return merged;\n }\n }\n appendConstsChunk(member.consts.join('\\n'));\n const value = member.functions\n .map((prop) => parseProperty(prop, fieldPath))\n .join('');\n return `${value.startsWith('.') ? 'zod' : ''}${value}`;\n };\n\n const parseProperty = (\n property: [string, unknown],\n fieldPath: readonly string[] = [],\n ): string => {\n const [fn, args = ''] = property;\n\n if (fn === 'namedRef') {\n const refArgs = args as { name: string; sourceRef: string };\n usedRefs.add(refArgs.name);\n return `__REF_${refArgs.name}__`;\n }\n\n if (fn === 'enumObject') {\n const enumObjectImplementation = args as string;\n return isZodV4\n ? `.enum(${enumObjectImplementation})`\n : `.nativeEnum(${enumObjectImplementation} as const)`;\n }\n\n // `.meta({ id?, title?, description?, deprecated? })`, registry metadata\n // for zod v4. `id` names a top-level component schema; a `oneOf` const\n // branch has no name and carries only member metadata.\n if (fn === 'meta') {\n const metaArgs = buildMetaArgs(args as ZodMetaArgs);\n return metaArgs ? `.meta(${metaArgs})` : '';\n }\n\n // File | string for text contentMediaType/encoding (user can pass string, runtime wraps in Blob)\n if (fn === 'fileOrString') {\n return 'zod.instanceof(Blob).or(zod.string())';\n }\n\n if (fn === 'allOf') {\n const allOfArgs = args as ZodValidationSchemaDefinition[];\n // In strict mode, merge object parts into a single object so the extra\n // constraint applies once (rather than to each `.and()` term).\n if (strict) {\n const merged = mergeAllOfObjectsClassic(allOfArgs, fieldPath);\n if (merged !== null) {\n return merged;\n }\n }\n\n // Fallback to original .and() approach for non-object or non-strict cases\n let acc = '';\n for (const partSchema of allOfArgs) {\n const value = partSchema.functions\n .map((prop) => parseProperty(prop, fieldPath))\n .join('');\n const valueWithZod = `${value.startsWith('.') ? 'zod' : ''}${value}`;\n\n if (partSchema.consts.length > 0) {\n appendConstsChunk(partSchema.consts.join('\\n'));\n }\n\n if (acc.length === 0) {\n acc = valueWithZod;\n } else {\n acc += `.and(${valueWithZod})`;\n }\n }\n\n return acc;\n }\n const discriminator = decodeDiscriminatorSeparator(fn);\n if (discriminator || fn === 'oneOf' || fn === 'anyOf') {\n const unionArgs = args as ZodValidationSchemaDefinition[];\n // Can't use zod.union() with a single item\n if (unionArgs.length === 1) {\n appendConstsChunk(unionArgs[0].consts.join('\\n'));\n return unionArgs[0].functions\n .map((prop: [string, unknown]) => parseProperty(prop, fieldPath))\n .join('');\n }\n\n if (discriminator) {\n const members = unionArgs.map((member) =>\n renderDiscriminatedUnionMember(member, fieldPath),\n );\n return `.discriminatedUnion('${jsStringEscape(discriminator.property)}', [${members.join(',')}])`;\n }\n\n const union = unionArgs.map(\n ({\n functions,\n consts: argConsts,\n }: {\n functions: [string, unknown][];\n consts: string[];\n }) => {\n const value = functions\n .map((prop) => parseProperty(prop, fieldPath))\n .join('');\n const valueWithZod = `${value.startsWith('.') ? 'zod' : ''}${value}`;\n // consts are missing here\n appendConstsChunk(argConsts.join('\\n'));\n return valueWithZod;\n },\n );\n\n return `.union([${union.join(',')}])`;\n }\n\n if (fn === 'additionalProperties') {\n const additionalPropertiesArgs = args as ZodValidationSchemaDefinition;\n const value = additionalPropertiesArgs.functions\n .map((prop: [string, unknown]) => parseProperty(prop, fieldPath))\n .join('');\n const valueWithZod = `${value.startsWith('.') ? 'zod' : ''}${value}`;\n if (Array.isArray(additionalPropertiesArgs.consts)) {\n appendConstsChunk(additionalPropertiesArgs.consts.join('\\n'));\n }\n return `zod.record(zod.string(), ${valueWithZod})`;\n }\n\n if (fn === 'object' || fn === 'strictObject' || fn === 'looseObject') {\n const objectArgs = args as Record<string, ZodValidationSchemaDefinition>;\n const objectType =\n fn === 'looseObject'\n ? isZodV4\n ? 'looseObject'\n : 'object'\n : getObjectFunctionName(isZodV4, strict);\n\n const parsedObject = `zod.${objectType}({\n${Object.entries(objectArgs)\n .map(([key, schema]) => {\n const value = schema.functions\n .map((prop) => parseProperty(prop, [...fieldPath, key]))\n .join('');\n appendConstsChunk(schema.consts.join('\\n'));\n const fieldZod = `${value.startsWith('.') ? 'zod' : ''}${value}`;\n // Opt-in via `coerce.<location>: ['array', ...]`: a server framework (e.g.\n // Hono) delivers a single repeated-key value as a scalar, not a 1-element\n // array, so `?t=a` would fail z.array(...). Wrap so both `?t=a` and\n // `?t=a&t=b` parse. Undefined passes through so an outer `.optional()`/\n // `.default()` still applies. Already-arrays are left untouched (no-op for\n // JSON-body arrays).\n const coerceArrays =\n Array.isArray(coerceTypes) &&\n coerceTypes.includes('array' as ZodCoerceType);\n if (coerceArrays && schema.functions.some(([fn]) => fn === 'array')) {\n return ` ${JSON.stringify(key)}: zod.preprocess((value) => value === undefined || Array.isArray(value) ? value : [value], ${fieldZod})`;\n }\n return ` ${JSON.stringify(key)}: ${fieldZod}`;\n })\n .join(',\\n')}\n})`;\n\n if (fn === 'looseObject' && !isZodV4) {\n return `${parsedObject}.passthrough()`;\n }\n\n return parsedObject;\n }\n\n if (fn === 'passthrough') {\n return '.passthrough()';\n }\n\n if (fn === 'array') {\n const arrayArgs = args as ZodValidationSchemaDefinition;\n const value = arrayArgs.functions\n .map((prop: [string, unknown]) => parseProperty(prop, fieldPath))\n .join('');\n if (isString(arrayArgs.consts)) {\n appendConstsChunk(arrayArgs.consts);\n } else if (Array.isArray(arrayArgs.consts)) {\n appendConstsChunk(arrayArgs.consts.join('\\n'));\n }\n return `.array(${value.startsWith('.') ? 'zod' : ''}${value})`;\n }\n\n if (fn === 'strict' && !isZodV4) {\n return '.strict()';\n }\n\n if (fn === 'tuple') {\n return `zod.tuple([${(args as ZodValidationSchemaDefinition[])\n .map((x) => {\n const value = x.functions\n .map((prop) => parseProperty(prop, fieldPath))\n .join('');\n // Tuple-item consts (e.g. min/max on prefixItems, #3983) must be\n // emitted just like `array` does above, or the generated code\n // references undeclared constants.\n if (Array.isArray(x.consts)) {\n appendConstsChunk(x.consts.join('\\n'));\n }\n return `${value.startsWith('.') ? 'zod' : ''}${value}`;\n })\n .join(',\\n')}])`;\n }\n if (fn === 'rest') {\n const restArgs = args as ZodValidationSchemaDefinition;\n const restValue = restArgs.functions\n .map((prop) => parseProperty(prop, fieldPath))\n .join('');\n if (Array.isArray(restArgs.consts)) {\n appendConstsChunk(restArgs.consts.join('\\n'));\n }\n return `.rest(zod${restValue})`;\n }\n const shouldCoerceType =\n coerceTypes &&\n (Array.isArray(coerceTypes)\n ? coerceTypes.includes(fn as ZodCoerceType)\n : COERCIBLE_TYPES.has(fn));\n\n const formattedArgs = formatFunctionArgs(args);\n const paramsArg = buildParamsArg(fn, fieldPath);\n let combinedArgs: string;\n if (\n paramsArg &&\n formattedArgs &&\n PARAMS_MERGE_INTO_OPTIONS_VALIDATORS.has(fn)\n ) {\n combinedArgs = `{ ...${formattedArgs}, ...${paramsArg} }`;\n } else if (paramsArg) {\n combinedArgs = formattedArgs\n ? `${formattedArgs}, ${paramsArg}`\n : paramsArg;\n } else {\n combinedArgs = formattedArgs;\n }\n\n if (fn === 'int') {\n const numberArgs = buildCombinedArgs('number', undefined, fieldPath);\n if (shouldCoerce('number')) {\n return `.coerce.number(${numberArgs}).int(${combinedArgs})`;\n }\n if (!isZodV4) {\n return `.number(${numberArgs}).int(${combinedArgs})`;\n }\n }\n\n if (\n (fn !== 'date' && shouldCoerceType) ||\n (fn === 'date' && shouldCoerceType && context.output.override.useDates)\n ) {\n return `.coerce.${fn}(${combinedArgs})`;\n }\n\n // `.exactOptional()` (zod v4 only) narrows an optional property to `{ x?: T }`\n // for `exactOptionalPropertyTypes` consumers. Zod v3 has no such method, so\n // the flag no-ops there and a plain `.optional()` is emitted.\n if (exactOptional && isZodV4 && fn === 'optional') {\n return '.exactOptional()';\n }\n\n return `.${fn}(${combinedArgs})`;\n };\n\n appendConstsChunk(input.consts.join('\\n'));\n\n if (variant === 'mini') {\n const rendered = renderMiniDefinition(input);\n const value = preprocess\n ? zodMiniCall(\n 'pipe',\n `${zodMiniCall('transform', preprocess.name)}, ${rendered.expr}`,\n )\n : rendered.expr;\n if (consts.includes(',export')) {\n consts = consts.replaceAll(',export', '\\nexport');\n }\n return { zod: value, consts, usedRefs };\n }\n\n const schema = input.functions.map((prop) => parseProperty(prop)).join('');\n const value = preprocess\n ? `.preprocess(${preprocess.name}, ${\n schema.startsWith('.') ? 'zod' : ''\n }${schema})`\n : schema;\n\n const zod = `${value.startsWith('.') ? 'zod' : ''}${value}`;\n // Some export consts includes `,` as prefix, adding replace to remove those\n if (consts.includes(',export')) {\n consts = consts.replaceAll(',export', '\\nexport');\n }\n return { zod, consts, usedRefs };\n};\n\nconst dereferenceScalar = (value: unknown, context: ContextSpec): unknown => {\n if (isObject(value)) {\n return dereference(\n value as OpenApiSchemaObject | OpenApiReferenceObject,\n context,\n );\n } else if (Array.isArray(value)) {\n return value.map((item) => dereferenceScalar(item, context));\n } else {\n return value;\n }\n};\n\n/**\n * Attempts to resolve a `$ref` to its target schema. Returns `undefined`\n * instead of throwing when the ref cannot be found (e.g. external refs\n * not yet bundled). Logs a verbose warning on failure to aid debugging.\n */\nfunction tryResolveRefSchema(\n $ref: string,\n context: ContextSpec,\n): OpenApiSchemaObject | undefined {\n try {\n return resolveRef({ $ref } as OpenApiReferenceObject, context)\n .schema as OpenApiSchemaObject;\n } catch (error) {\n logVerbose(\n `[orval/zod] Failed to resolve $ref \"${$ref}\":`,\n error instanceof Error ? error.message : error,\n );\n return;\n }\n}\n\nconst COMPONENT_SCHEMAS_PREFIX = '#/components/schemas/';\n\nfunction extractSchemaNameFromRef($ref: string): string | undefined {\n if (!$ref.startsWith(COMPONENT_SCHEMAS_PREFIX)) return undefined;\n const raw = $ref.slice(COMPONENT_SCHEMAS_PREFIX.length);\n return decodeURIComponent(raw.replaceAll('~1', '/').replaceAll('~0', '~'));\n}\n\n/**\n * Recursively inlines all `$ref` and `$dynamicRef` references in an OpenAPI\n * schema tree, producing a fully-resolved schema suitable for Zod code generation.\n *\n * Tracks visited `$ref` paths via `context.parents` to break circular\n * references (returning `{}` for cycles).\n *\n * `$dynamicRef` is resolved using the dynamic scope attached to `context`:\n * 1. Look up the anchor name in `context.dynamicScope`.\n * 2. If not found, fall back to scanning `components.schemas` for a schema\n * that declares `$dynamicAnchor` with the same name.\n * 3. If resolved to a concrete schema, inline it (same as `$ref`).\n * 4. If unresolved, external, or a generic parameter → return `{}`.\n */\nexport const dereference = (\n schema: OpenApiSchemaObject | OpenApiReferenceObject,\n context: ContextSpec,\n): OpenApiSchemaObject => {\n const refName = '$ref' in schema ? schema.$ref : undefined;\n if (refName && context.parents?.includes(refName)) {\n return {};\n }\n\n if (isDynamicReference(schema)) {\n return dereferenceDynamicRef(schema, context);\n }\n\n const childContext: ContextSpec = {\n ...context,\n ...(refName\n ? { parents: [...(context.parents ?? []), refName] }\n : undefined),\n };\n\n const resolvedSchema: OpenApiSchemaObject | undefined =\n '$ref' in schema\n ? (() => {\n const referencedSchema = tryResolveRefSchema(schema.$ref, context);\n\n if (!referencedSchema || !isObject(referencedSchema)) {\n return;\n }\n\n const siblingProperties = Object.fromEntries(\n Object.entries(schema as Record<string, unknown>).filter(\n ([key]) => key !== '$ref',\n ),\n );\n\n return {\n ...(referencedSchema as Record<string, unknown>),\n ...siblingProperties,\n } as OpenApiSchemaObject;\n })()\n : schema;\n\n if (!resolvedSchema) {\n return {};\n }\n\n const resolvedContext = buildScopedContext(\n childContext,\n refName,\n resolvedSchema,\n );\n\n if (isDynamicReference(resolvedSchema)) {\n return dereferenceDynamicRef(resolvedSchema, resolvedContext);\n }\n\n return dereferenceProperties(resolvedSchema, resolvedContext);\n};\n\nfunction dereferenceProperties(\n schema: OpenApiSchemaObject,\n context: ContextSpec,\n): OpenApiSchemaObject {\n return Object.entries(schema).reduce<Record<string, unknown>>(\n (acc, [key, value]) => {\n if (key === 'properties' && isObject(value)) {\n acc[key] = Object.entries(value).reduce<\n Record<string, OpenApiSchemaObject>\n >((props, [propKey, propSchema]) => {\n props[propKey] = dereference(\n propSchema as OpenApiSchemaObject | OpenApiReferenceObject,\n context,\n );\n return props;\n }, {});\n } else if (key === 'default' || key === 'example' || key === 'examples') {\n acc[key] = value;\n } else {\n acc[key] = dereferenceScalar(value, context);\n }\n\n return acc;\n },\n {},\n ) as OpenApiSchemaObject;\n}\n\nfunction buildScopedContext(\n childContext: ContextSpec,\n refName: string | undefined,\n resolvedSchema: OpenApiSchemaObject,\n): ContextSpec {\n if (refName) {\n const schemaName = extractSchemaNameFromRef(refName);\n if (!schemaName) return childContext;\n\n const schemaRecord = resolvedSchema as Record<string, unknown>;\n const hasDynamicAnchor = typeof schemaRecord.$dynamicAnchor === 'string';\n const defs = schemaRecord.$defs as Record<string, unknown> | undefined;\n const hasDefsAnchors =\n defs &&\n typeof defs === 'object' &&\n Object.values(defs).some(\n (d) => d && typeof d === 'object' && '$dynamicAnchor' in d,\n );\n\n if (!hasDynamicAnchor && !hasDefsAnchors) return childContext;\n\n return {\n ...childContext,\n dynamicScope: buildDynamicScope(schemaName, resolvedSchema, childContext),\n };\n }\n\n // Anonymous inline subschema (reached via allOf/items/nested props without a\n // $ref). Detect inline $dynamicAnchor / $defs anchors and merge them over the\n // existing scope so the inline override shadows the parent anchor while\n // non-overridden parent anchors remain reachable. See #3492.\n const inlineScope = buildInlineDynamicScope(resolvedSchema);\n if (Object.keys(inlineScope).length === 0) return childContext;\n\n return {\n ...childContext,\n dynamicScope: { ...childContext.dynamicScope, ...inlineScope },\n };\n}\n\nfunction dereferenceDynamicRef(\n schema: object & { $dynamicRef: string },\n context: ContextSpec,\n): OpenApiSchemaObject {\n const dynamicRef = schema.$dynamicRef;\n const anchorName = getDynamicAnchorName(dynamicRef);\n if (!anchorName) {\n return {};\n }\n\n const {\n resolvedTypeName,\n schema: resolvedSchema,\n schemaName,\n } = resolveDynamicRef(anchorName, context);\n\n // Cycle key. Inline overrides resolve with `schemaName: undefined`, so every\n // resolution of the same anchor collapses to `@?`. This is correct for a\n // self-referential inline override. A false positive is possible only in the\n // contrived shape where an inline override A (reached via `$dynamicRef`) itself\n // contains a *distinct* nested inline override B of the same anchor with a\n // `$dynamicRef` descendant — B's resolution inherits A's key from `parents`\n // and returns `{}` instead of B. Siblings don't leak (each `dereference` uses\n // an immutable parent context), only this nested-via-`$dynamicRef` shape.\n // Acceptable given how exotic it is. See #3492.\n const dynamicRefPath = `$dynamicRef:${dynamicRef}@${schemaName ?? '?'}`;\n if (context.parents?.includes(dynamicRefPath)) {\n return {};\n }\n\n if (resolvedTypeName === 'unknown' || !isObject(resolvedSchema)) {\n return {};\n }\n\n const childContext: ContextSpec = {\n ...context,\n parents: [...(context.parents ?? []), dynamicRefPath],\n };\n\n const scopedContext = buildScopedContext(\n childContext,\n schemaName\n ? `${COMPONENT_SCHEMAS_PREFIX}${encodeSegment(schemaName)}`\n : undefined,\n resolvedSchema,\n );\n\n const siblingProperties = Object.fromEntries(\n Object.entries(schema).filter(([key]) => key !== '$dynamicRef'),\n );\n\n const merged: OpenApiSchemaObject = {\n ...(resolvedSchema as Record<string, unknown>),\n ...siblingProperties,\n } as OpenApiSchemaObject;\n\n return dereferenceProperties(merged, scopedContext);\n}\n\nfunction encodeSegment(segment: string): string {\n return segment.replaceAll('~', '~0').replaceAll('/', '~1');\n}\n\n/**\n * Generate zod schema for form-data request body.\n * Handles file type detection for top-level properties based on encoding.contentType\n * and contentMediaType. Mirrors type gen's resolveFormDataRootObject.\n */\nexport const generateFormDataZodSchema = (\n schema: OpenApiSchemaObject,\n context: ContextSpec,\n name: string,\n strict: boolean,\n isZodV4: boolean,\n encoding?: Record<string, { contentType?: string }>,\n useReusableSchemas?: boolean,\n): ZodValidationSchemaDefinition => {\n // Precompute file type overrides for top-level properties only\n const propertyOverrides: Record<string, ZodValidationSchemaDefinition> = {};\n\n if (schema.properties) {\n for (const key of Object.keys(schema.properties)) {\n const propSchema = schema.properties[key];\n const resolvedPropSchema = propSchema\n ? dereference(\n propSchema as OpenApiSchemaObject | OpenApiReferenceObject,\n context,\n )\n : undefined;\n\n const fileType = resolvedPropSchema\n ? getFormDataFieldFileType(\n resolvedPropSchema,\n encoding?.[key]?.contentType,\n )\n : undefined;\n\n if (fileType) {\n const isRequired = schema.required?.includes(key);\n const fileFunctions: [string, unknown][] = [\n fileType === 'binary'\n ? ['instanceof', 'Blob']\n : ['fileOrString', undefined],\n ];\n if (!isRequired) {\n fileFunctions.push(['optional', undefined]);\n }\n propertyOverrides[key] = { functions: fileFunctions, consts: [] };\n }\n }\n }\n\n // Delegate to generic handler with file type overrides\n return generateZodValidationSchemaDefinition(\n schema,\n context,\n name,\n strict,\n isZodV4,\n {\n required: true,\n propertyOverrides:\n Object.keys(propertyOverrides).length > 0\n ? propertyOverrides\n : undefined,\n useReusableSchemas,\n },\n );\n};\n\n/**\n * Parse a request body or response into a zod validation schema definition.\n *\n * Selects the relevant content type — JSON (and `+json` vendor types),\n * `multipart/form-data`, or `application/x-www-form-urlencoded`, plus\n * `text/plain` for responses — and generates the matching schema, handling\n * array roots. The url-encoded string-contract rationale lives where the flag\n * is derived (see `isFormUrlEncoded` below).\n */\nconst parseBodyAndResponse = ({\n data,\n context,\n name,\n strict,\n generate,\n isZodV4,\n parseType,\n useReusableSchemas,\n}: {\n data:\n | OpenApiResponseObject\n | OpenApiRequestBodyObject\n | OpenApiReferenceObject\n | undefined;\n context: ContextSpec;\n name: string;\n strict: boolean;\n generate: boolean;\n isZodV4: boolean;\n parseType: 'body' | 'response';\n useReusableSchemas?: boolean;\n}): {\n input: ZodValidationSchemaDefinition;\n isArray: boolean;\n rules?: {\n min?: number;\n max?: number;\n };\n} => {\n if (!data || !generate) {\n return {\n input: { functions: [], consts: [] },\n isArray: false,\n };\n }\n\n const resolvedRef = resolveRef(data, context).schema as\n | OpenApiResponseObject\n | OpenApiRequestBodyObject;\n\n // Only handle JSON, form-data and form-urlencoded here; other content types\n // (e.g., application/octet-stream) are skipped - unclear if this is correct\n // behavior for root-level binary/text bodies. The one exception is text/plain\n // responses, which are handled separately below (as a plain string schema).\n const contentEntries = Object.entries(resolvedRef.content ?? {});\n\n const jsonContent = contentEntries.find(\n isMediaType(\n // application/json\n // application/geo+json\n // application/ld+json\n // application/manifest+json\n // application/vnd.api+json (and other valid vendor subtypes)\n String.raw`^application\\/([^/;]+\\+)?json$`,\n ),\n );\n const formDataContent = contentEntries.find(\n isMediaType(String.raw`^multipart\\/form-data$`),\n );\n // form-urlencoded bodies are plain objects serialized via URLSearchParams, so\n // they validate like JSON (no file fields) — emit a regular object schema.\n const formUrlEncodedContent = contentEntries.find(\n isMediaType(String.raw`^application\\/x-www-form-urlencoded$`),\n );\n const [contentType, mediaType] = jsonContent\n ? (['application/json', jsonContent[1]] as const)\n : formDataContent\n ? (['multipart/form-data', formDataContent[1]] as const)\n : formUrlEncodedContent\n ? ([\n 'application/x-www-form-urlencoded',\n formUrlEncodedContent[1],\n ] as const)\n : [undefined, undefined];\n\n // url-encoded bodies serialize via URLSearchParams (strings only); the flag is\n // threaded into the generator so binary fields stay `string` at any depth.\n const isFormUrlEncoded = contentType === 'application/x-www-form-urlencoded';\n\n const schema = mediaType?.schema;\n\n if (!schema) {\n if (parseType === 'response') {\n const textPlainContent = contentEntries.find(\n isMediaType(String.raw`^text\\/plain$`),\n );\n if (textPlainContent) {\n return {\n input: { functions: [['string', undefined]], consts: [] },\n isArray: false,\n };\n }\n }\n\n return {\n input: { functions: [], consts: [] },\n isArray: false,\n };\n }\n\n const encoding = mediaType.encoding;\n const resolvedJsonSchema = dereference(schema, context);\n\n // keep the same behaviour for array\n if (resolvedJsonSchema.items) {\n const min =\n resolvedJsonSchema.minimum ??\n resolvedJsonSchema.minLength ??\n resolvedJsonSchema.minItems;\n const max =\n resolvedJsonSchema.maximum ??\n resolvedJsonSchema.maxLength ??\n resolvedJsonSchema.maxItems;\n\n // When useReusableSchemas is on, shallow-resolve one level so that $ref\n // references inside the items schema are preserved for named-ref emission.\n // E.g. Pets = array of {$ref: Pet} → we want to emit Pet (namedRef)\n // rather than inlining Pet's full schema.\n const rawItems: OpenApiSchemaObject | OpenApiReferenceObject =\n useReusableSchemas\n ? (() => {\n const shallowArraySchema = resolveRef(schema, context)\n .schema as OpenApiSchemaObject;\n return (shallowArraySchema.items ??\n resolvedJsonSchema.items) as OpenApiSchemaObject;\n })()\n : resolvedJsonSchema.items;\n\n return {\n input: generateZodValidationSchemaDefinition(\n parseType === 'body'\n ? removeReadOnlyProperties(rawItems as OpenApiSchemaObject)\n : (rawItems as OpenApiSchemaObject),\n context,\n name,\n strict,\n isZodV4,\n {\n required: true,\n useReusableSchemas,\n urlEncoded: isFormUrlEncoded,\n },\n ),\n isArray: true,\n rules: {\n ...(min === undefined ? {} : { min }),\n ...(max === undefined ? {} : { max }),\n },\n };\n }\n\n // When useReusableSchemas is on, pass the original schema (possibly a $ref)\n // directly to generateZodValidationSchemaDefinition so that component schema\n // references are emitted as named identifiers instead of being inlined.\n const effectiveSchema: OpenApiSchemaObject | OpenApiReferenceObject =\n useReusableSchemas\n ? parseType === 'body'\n ? removeReadOnlyProperties(schema as OpenApiSchemaObject)\n : schema\n : parseType === 'body'\n ? removeReadOnlyProperties(resolvedJsonSchema)\n : resolvedJsonSchema;\n\n const isFormData = contentType === 'multipart/form-data';\n\n return {\n input: isFormData\n ? generateFormDataZodSchema(\n effectiveSchema,\n context,\n name,\n strict,\n isZodV4,\n encoding,\n useReusableSchemas,\n )\n : generateZodValidationSchemaDefinition(\n effectiveSchema,\n context,\n name,\n strict,\n isZodV4,\n { required: true, useReusableSchemas, urlEncoded: isFormUrlEncoded },\n ),\n isArray: false,\n };\n};\n\nconst isMediaType =\n (pattern: string) =>\n ([contentType]: [string, object]): boolean =>\n new RegExp(pattern).test(contentType.split(';')[0].trim().toLowerCase());\n\nconst getSingleResponse = (\n responses:\n | Record<string, OpenApiResponseObject | OpenApiReferenceObject | undefined>\n | undefined,\n) => {\n if (!responses) {\n return;\n }\n\n const otherSuccess = Object.entries(responses).find(\n ([code]) => code.startsWith('2') && code !== '204' && code !== '205',\n )?.[1];\n\n return (\n responses['200'] ??\n responses['2XX'] ??\n responses['2xx'] ??\n otherSuccess ??\n responses['204'] ??\n responses['205']\n );\n};\n\n/* eslint-enable @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call */\n\nexport const parseParameters = ({\n data,\n context,\n operationName,\n isZodV4,\n strict,\n generate,\n useReusableSchemas,\n}: {\n data: (OpenApiParameterObject | OpenApiReferenceObject)[] | undefined;\n context: ContextSpec;\n operationName: string;\n isZodV4: boolean;\n strict: {\n param: boolean;\n query: boolean;\n header: boolean;\n body: boolean;\n response: boolean;\n };\n generate: {\n param: boolean;\n query: boolean;\n header: boolean;\n body: boolean;\n response: boolean;\n };\n useReusableSchemas?: boolean;\n}): {\n headers: ZodValidationSchemaDefinition;\n queryParams: ZodValidationSchemaDefinition;\n params: ZodValidationSchemaDefinition;\n} => {\n if (!data) {\n return {\n headers: {\n functions: [],\n consts: [],\n },\n queryParams: {\n functions: [],\n consts: [],\n },\n params: {\n functions: [],\n consts: [],\n },\n };\n }\n\n const initialDefinitionsByParameters: Record<\n 'headers' | 'queryParams' | 'params',\n Record<string, { functions: [string, unknown][]; consts: string[] }>\n > = {\n headers: {},\n queryParams: {},\n params: {},\n };\n\n const constNameRegistry: Record<string, number> = {};\n\n const defintionsByParameters = data.reduce((acc, val) => {\n const { schema: parameter }: { schema: OpenApiParameterObject } =\n resolveRef(val, context);\n\n if (!parameter.schema) {\n return acc;\n }\n if (!parameter.in || !parameter.name) {\n return acc;\n }\n\n // When useReusableSchemas is on, preserve `$ref` schemas verbatim so the\n // generator can take the namedRef path. We only shallow-clone to attach\n // the parameter-level `description` without mutating the shared ref object.\n // When off, fall back to dereferencing for backward compatibility.\n const schemaForGen: OpenApiSchemaObject | OpenApiReferenceObject =\n useReusableSchemas\n ? parameter.description\n ? Object.assign({}, parameter.schema, {\n description: parameter.description,\n })\n : parameter.schema\n : (() => {\n const s = dereference(parameter.schema, context);\n s.description = parameter.description;\n return s;\n })();\n\n const mapStrict = {\n path: strict.param,\n query: strict.query,\n header: strict.header,\n };\n\n const mapGenerate = {\n path: generate.param,\n query: generate.query,\n header: generate.header,\n };\n\n if (\n parameter.in !== 'path' &&\n parameter.in !== 'query' &&\n parameter.in !== 'header'\n ) {\n return acc;\n }\n\n const definition = generateZodValidationSchemaDefinition(\n schemaForGen,\n context,\n camel(`${operationName}-${parameter.in}-${parameter.name}`),\n mapStrict[parameter.in],\n isZodV4,\n {\n required: parameter.required,\n useReusableSchemas,\n constNameRegistry,\n },\n );\n\n if (parameter.in === 'header' && mapGenerate.header) {\n return {\n ...acc,\n headers: { ...acc.headers, [parameter.name]: definition },\n };\n }\n\n if (parameter.in === 'query' && mapGenerate.query) {\n return {\n ...acc,\n queryParams: { ...acc.queryParams, [parameter.name]: definition },\n };\n }\n\n if (parameter.in === 'path' && mapGenerate.path) {\n return {\n ...acc,\n params: { ...acc.params, [parameter.name]: definition },\n };\n }\n\n return acc;\n }, initialDefinitionsByParameters);\n\n const headers: ZodValidationSchemaDefinition = {\n functions: [],\n consts: [],\n };\n\n if (Object.keys(defintionsByParameters.headers).length > 0) {\n const parameterFunctions = getParameterFunctions(\n isZodV4,\n strict.header,\n defintionsByParameters.headers,\n );\n\n headers.functions.push(...parameterFunctions);\n }\n\n const queryParams: ZodValidationSchemaDefinition = {\n functions: [],\n consts: [],\n };\n\n if (Object.keys(defintionsByParameters.queryParams).length > 0) {\n const parameterFunctions = getParameterFunctions(\n isZodV4,\n strict.query,\n defintionsByParameters.queryParams,\n );\n\n queryParams.functions.push(...parameterFunctions);\n }\n\n const params: ZodValidationSchemaDefinition = {\n functions: [],\n consts: [],\n };\n\n if (Object.keys(defintionsByParameters.params).length > 0) {\n const parameterFunctions = getParameterFunctions(\n isZodV4,\n strict.param,\n defintionsByParameters.params,\n );\n\n params.functions.push(...parameterFunctions);\n }\n\n return {\n headers,\n queryParams,\n params,\n };\n};\n\nconst generateZodRoute = async (\n {\n operationId,\n operationName,\n typeName,\n verb,\n override,\n }: GeneratorVerbOptions,\n { pathRoute, context, output }: GeneratorOptions,\n) => {\n const zodVariant = context.output.override.zod.variant;\n const isZodV4 = resolveIsZodV4(\n context.output.override.zod.version,\n context.output.packageJson,\n );\n assertZodTarget({ variant: zodVariant, isZodV4 });\n const useReusableSchemas =\n context.output.override.zod.generateReusableSchemas;\n const spec = context.spec.paths?.[pathRoute];\n\n if (spec == undefined) {\n throw new Error(`No such path ${pathRoute} in ${context.projectName}`);\n }\n\n const parameters = [\n ...(spec.parameters ?? []),\n ...(spec[verb]?.parameters ?? []),\n ];\n\n const parsedParameters = parseParameters({\n data: parameters,\n context,\n operationName,\n isZodV4,\n strict: override.zod.strict,\n generate: override.zod.generate,\n useReusableSchemas,\n });\n\n const requestBody = spec[verb]?.requestBody;\n const parsedBody = parseBodyAndResponse({\n data: requestBody,\n context,\n name: camel(`${operationName}-body`),\n strict: override.zod.strict.body,\n generate: override.zod.generate.body,\n isZodV4,\n parseType: 'body',\n useReusableSchemas,\n });\n\n const responses = (\n context.output.override.zod.generateEachHttpStatus\n ? Object.entries(spec[verb]?.responses ?? {})\n : [['', getSingleResponse(spec[verb]?.responses)]]\n ) as [string, OpenApiResponseObject | OpenApiReferenceObject][];\n const parsedResponses = responses.map(([code, response]) =>\n parseBodyAndResponse({\n data: response,\n context,\n name: camel(`${operationName}-${code}-response`),\n strict: override.zod.strict.response,\n generate: override.zod.generate.response,\n isZodV4,\n parseType: 'response',\n useReusableSchemas,\n }),\n );\n\n const preprocessParams = override.zod.preprocess?.param\n ? await generateMutator({\n output,\n mutator: override.zod.preprocess.param,\n name: `${operationName}PreprocessParams`,\n workspace: context.workspace,\n tsconfig: context.output.tsconfig,\n })\n : undefined;\n\n const paramsMutator = override.zod.params\n ? await generateMutator({\n output,\n mutator: override.zod.params,\n name: `${operationName}ZodParams`,\n workspace: context.workspace,\n tsconfig: context.output.tsconfig,\n })\n : undefined;\n\n const pascalTypeName = pascal(typeName);\n const makeParamsInjection = (\n location: ZodParamsInjection['location'],\n schemaSuffix: string,\n ): ZodParamsInjection | undefined =>\n paramsMutator\n ? {\n mutator: paramsMutator,\n operationId,\n location,\n schemaName: `${pascalTypeName}${schemaSuffix}`,\n }\n : undefined;\n\n let inputParams = parseZodValidationSchemaDefinition(\n parsedParameters.params,\n context,\n override.zod.coerce.param,\n override.zod.strict.param,\n isZodV4,\n preprocessParams,\n makeParamsInjection('param', 'Params'),\n zodVariant,\n override.zod.exactOptional,\n );\n\n const preprocessQueryParams = override.zod.preprocess?.query\n ? await generateMutator({\n output,\n mutator: override.zod.preprocess.query,\n name: `${operationName}PreprocessQueryParams`,\n workspace: context.workspace,\n tsconfig: context.output.tsconfig,\n })\n : undefined;\n\n let inputQueryParams = parseZodValidationSchemaDefinition(\n parsedParameters.queryParams,\n context,\n override.zod.coerce.query,\n override.zod.strict.query,\n isZodV4,\n preprocessQueryParams,\n makeParamsInjection('query', 'QueryParams'),\n zodVariant,\n override.zod.exactOptional,\n );\n\n const preprocessHeader = override.zod.preprocess?.header\n ? await generateMutator({\n output,\n mutator: override.zod.preprocess.header,\n name: `${operationName}PreprocessHeader`,\n workspace: context.workspace,\n tsconfig: context.output.tsconfig,\n })\n : undefined;\n\n let inputHeaders = parseZodValidationSchemaDefinition(\n parsedParameters.headers,\n context,\n override.zod.coerce.header,\n override.zod.strict.header,\n isZodV4,\n preprocessHeader,\n makeParamsInjection('header', 'Header'),\n zodVariant,\n override.zod.exactOptional,\n );\n\n const preprocessBody = override.zod.preprocess?.body\n ? await generateMutator({\n output,\n mutator: override.zod.preprocess.body,\n name: `${operationName}PreprocessBody`,\n workspace: context.workspace,\n tsconfig: context.output.tsconfig,\n })\n : undefined;\n\n let inputBody = parseZodValidationSchemaDefinition(\n parsedBody.input,\n context,\n override.zod.coerce.body,\n override.zod.strict.body,\n isZodV4,\n preprocessBody,\n makeParamsInjection('body', 'Body'),\n zodVariant,\n override.zod.exactOptional,\n );\n\n const preprocessResponse = override.zod.preprocess?.response\n ? await generateMutator({\n output,\n mutator: override.zod.preprocess.response,\n name: `${operationName}PreprocessResponse`,\n workspace: context.workspace,\n tsconfig: context.output.tsconfig,\n })\n : undefined;\n\n const inputResponses = parsedResponses.map((parsedResponse, index) =>\n parseZodValidationSchemaDefinition(\n parsedResponse.input,\n context,\n override.zod.coerce.response,\n override.zod.strict.response,\n isZodV4,\n preprocessResponse,\n makeParamsInjection(\n 'response',\n responses[index][0] ? `${responses[index][0]}Response` : 'Response',\n ),\n zodVariant,\n override.zod.exactOptional,\n ),\n );\n\n const SENTINEL_PATTERN = /__REF_([A-Za-z_$][A-Za-z0-9_$]*)__/g;\n const rewriteSentinels = (s: string): string =>\n s.replaceAll(SENTINEL_PATTERN, (_m, name: string) => name);\n\n const allUsedRefs = new Set<string>([\n ...inputParams.usedRefs,\n ...inputQueryParams.usedRefs,\n ...inputHeaders.usedRefs,\n ...inputBody.usedRefs,\n ...inputResponses.flatMap((r) => [...r.usedRefs]),\n ]);\n\n if (useReusableSchemas && allUsedRefs.size > 0) {\n inputParams = { ...inputParams, zod: rewriteSentinels(inputParams.zod) };\n inputQueryParams = {\n ...inputQueryParams,\n zod: rewriteSentinels(inputQueryParams.zod),\n };\n inputHeaders = {\n ...inputHeaders,\n zod: rewriteSentinels(inputHeaders.zod),\n };\n inputBody = { ...inputBody, zod: rewriteSentinels(inputBody.zod) };\n for (let i = 0; i < inputResponses.length; i++) {\n inputResponses[i] = {\n ...inputResponses[i],\n zod: rewriteSentinels(inputResponses[i].zod),\n };\n }\n }\n\n if (\n !inputParams.zod &&\n !inputQueryParams.zod &&\n !inputHeaders.zod &&\n !inputBody.zod &&\n responses.length === 0\n ) {\n return {\n implementation: '',\n mutators: [],\n usedRefs: new Set<string>(),\n };\n }\n\n const useBrandedTypes = override.zod.useBrandedTypes;\n const generateCompanionTypes = override.zod.generateCompanionTypes;\n const renderExport = (\n name: string,\n expression: string,\n arrayItem?: { rules?: { min?: number; max?: number } },\n ) =>\n renderZodExport({\n name,\n expression,\n variant: zodVariant,\n brand: useBrandedTypes ? { isZodV4 } : undefined,\n companionTypes: generateCompanionTypes,\n arrayItem,\n });\n\n // With `generateReusableSchemas`, operations import component schemas by\n // their PascalCase name from a sibling schemas module. When an operation's\n // own pascalized wrapper name (e.g. `ListPetsResponse` from operationId\n // `listPets`) matches an imported ref, the generated `export const` shadows\n // the import and produces a self-referential initializer that TS rejects\n // with TS7022. Detect the collision and append `Schema` (with a counter for\n // further collisions) so the import keeps its meaning. For the array case\n // both the wrapper and its `Item` companion are checked together so they\n // stay in sync. The original name is preserved when there is no collision,\n // so non-colliding operations are unaffected.\n //\n // `localTaken` seeds from the imported refs and accumulates the names this\n // call hands out, so wrappers within the same operation (`Params`, `Body`,\n // per-status `Response`, …) can't pick a name another wrapper just claimed.\n // The fixed suffixes already keep these distinct in practice, but tracking\n // allocations removes the implicit invariant — future suffix additions stay\n // safe by construction.\n const localTaken = new Set(allUsedRefs);\n const allocateExportName = (baseName: string, hasItem: boolean): string => {\n const collides = (name: string) =>\n localTaken.has(name) || (hasItem && localTaken.has(`${name}Item`));\n const reserve = (name: string) => {\n localTaken.add(name);\n if (hasItem) localTaken.add(`${name}Item`);\n };\n if (!collides(baseName)) {\n reserve(baseName);\n return baseName;\n }\n let counter = 0;\n let candidate = `${baseName}Schema`;\n while (collides(candidate)) {\n counter += 1;\n candidate = `${baseName}Schema${counter}`;\n }\n reserve(candidate);\n return candidate;\n };\n\n const paramsName = allocateExportName(`${pascalTypeName}Params`, false);\n const queryParamsName = allocateExportName(\n `${pascalTypeName}QueryParams`,\n false,\n );\n const headerName = allocateExportName(`${pascalTypeName}Header`, false);\n const bodyName = allocateExportName(\n `${pascalTypeName}Body`,\n parsedBody.isArray,\n );\n\n return {\n implementation: [\n ...(inputParams.consts ? [inputParams.consts] : []),\n ...(inputParams.zod ? [renderExport(paramsName, inputParams.zod)] : []),\n ...(inputQueryParams.consts ? [inputQueryParams.consts] : []),\n ...(inputQueryParams.zod\n ? [renderExport(queryParamsName, inputQueryParams.zod)]\n : []),\n ...(inputHeaders.consts ? [inputHeaders.consts] : []),\n ...(inputHeaders.zod ? [renderExport(headerName, inputHeaders.zod)] : []),\n ...(inputBody.consts ? [inputBody.consts] : []),\n ...(inputBody.zod\n ? [\n renderExport(\n bodyName,\n inputBody.zod,\n parsedBody.isArray ? { rules: parsedBody.rules } : undefined,\n ),\n ]\n : []),\n ...inputResponses.flatMap((inputResponse, index) => {\n const operationResponse = allocateExportName(\n pascal(`${typeName}-${responses[index][0]}-response`),\n parsedResponses[index].isArray,\n );\n\n if (!inputResponse.zod) {\n if (!override.zod.generate.response) {\n return [];\n }\n\n const noContentStatusCodes = new Set(['204', '205']);\n const statusCode = responses[index][0];\n const isEachHttpStatusMode = !!statusCode;\n\n let isNoContent: boolean;\n if (isEachHttpStatusMode) {\n isNoContent = noContentStatusCodes.has(statusCode);\n } else {\n const specResponseKeys = new Set(\n Object.keys(spec[verb]?.responses ?? {}),\n );\n const hasStandardSuccess =\n specResponseKeys.has('200') ||\n specResponseKeys.has('2XX') ||\n specResponseKeys.has('2xx');\n isNoContent = !hasStandardSuccess;\n }\n const noContentSchema = isNoContent\n ? zodVariant === 'mini'\n ? zodMiniCall('void')\n : 'zod.void()'\n : zodVariant === 'mini'\n ? zodMiniCall('unknown')\n : 'zod.unknown()';\n\n return [renderExport(operationResponse, noContentSchema)];\n }\n\n return [\n ...(inputResponse.consts ? [inputResponse.consts] : []),\n renderExport(\n operationResponse,\n inputResponse.zod,\n parsedResponses[index].isArray\n ? { rules: parsedResponses[index].rules }\n : undefined,\n ),\n ];\n }),\n ].join('\\n\\n'),\n mutators: [\n // Gate each request-side preprocess mutator on its parsed `.zod`: it is\n // computed for every operation once the target is configured, so without\n // this an operation lacking the schema would emit an unused import.\n ...(preprocessParams && inputParams.zod ? [preprocessParams] : []),\n ...(preprocessQueryParams && inputQueryParams.zod\n ? [preprocessQueryParams]\n : []),\n ...(preprocessHeader && inputHeaders.zod ? [preprocessHeader] : []),\n ...(preprocessBody && inputBody.zod ? [preprocessBody] : []),\n ...(preprocessResponse ? [preprocessResponse] : []),\n // Unconditional even when this operation's parsed schemas don't\n // reference `paramsMutator.name`: in `single` mode, inline component\n // schemas (which DO reference it) rely on this entry to emit the\n // import. The cost is one harmless `import { zodParams }` line on\n // operations whose request/response have no leaf validators to inject.\n ...(paramsMutator ? [paramsMutator] : []),\n ],\n usedRefs: useReusableSchemas ? allUsedRefs : new Set<string>(),\n };\n};\n\nexport const generateZod: ClientBuilder = async (verbOptions, options) => {\n const { implementation, mutators, usedRefs } = await generateZodRoute(\n verbOptions,\n options,\n );\n\n return {\n implementation: implementation ? `${implementation}\\n\\n` : '',\n // Zod schemas are runtime values (not type-only), so mark with values: true\n // to prevent the import writer from emitting `import type { ... }`. Sort\n // by name so import order is stable across runs.\n imports: [...usedRefs].toSorted().map((name) => ({\n name,\n schemaName: name,\n values: true,\n })),\n mutators,\n };\n};\n\nconst zodClientBuilder: ClientGeneratorsBuilder = {\n client: generateZod,\n dependencies: getZodDependencies,\n};\n\nexport const builder = () => () => zodClientBuilder;\n\nexport {\n assertZodTarget,\n getZodImportSource,\n getZodTypeName,\n isZodVersionV4,\n resolveIsZodV4,\n} from './compatible-v4';\nexport { renderZodExport, type ZodExportBlock } from './export-emitter';\n\nexport default builder;\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@orval/zod",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.29.0",
|
|
4
4
|
"homepage": "https://orval.dev/docs/guides/zod",
|
|
5
5
|
"bugs": {
|
|
6
6
|
"url": "https://github.com/orval-labs/orval/issues"
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"./package.json": "./package.json"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@orval/core": "8.
|
|
26
|
+
"@orval/core": "8.29.0",
|
|
27
27
|
"jsesc": "^3.0.0",
|
|
28
28
|
"remeda": "^2.33.6"
|
|
29
29
|
},
|