diff --git a/ui/desktop/src/recipe/validation.ts b/ui/desktop/src/recipe/validation.ts index b76eae4a9b99..065e2c2f3e41 100644 --- a/ui/desktop/src/recipe/validation.ts +++ b/ui/desktop/src/recipe/validation.ts @@ -187,40 +187,30 @@ function openApiSchemaToZod(schema: Record): z.ZodTypeAny { shape[propName] = openApiSchemaToZod(propSchema as Record); } - // Make optional properties optional - if (schema.required && Array.isArray(schema.required)) { - const optionalShape: Record = {}; - for (const [propName, zodSchema] of Object.entries(shape)) { - if (schema.required.includes(propName)) { - optionalShape[propName] = zodSchema; - } else { - optionalShape[propName] = zodSchema.optional(); - } - } - let objectSchema = z.object(optionalShape); - - if (schema.additionalProperties === true) { - return schema.nullable - ? objectSchema.passthrough().nullable() - : objectSchema.passthrough(); - } else if (schema.additionalProperties === false) { - return schema.nullable ? objectSchema.strict().nullable() : objectSchema.strict(); + // Make optional properties optional based on required array + const optionalShape: Record = {}; + const requiredFields = + schema.required && Array.isArray(schema.required) ? schema.required : []; + + for (const [propName, zodSchema] of Object.entries(shape)) { + if (requiredFields.includes(propName)) { + optionalShape[propName] = zodSchema; + } else { + optionalShape[propName] = zodSchema.optional(); } + } - return schema.nullable ? objectSchema.nullable() : objectSchema; - } else { - let objectSchema = z.object(shape); + let objectSchema = z.object(optionalShape); - if (schema.additionalProperties === true) { - return schema.nullable - ? objectSchema.passthrough().nullable() - : objectSchema.passthrough(); - } else if (schema.additionalProperties === false) { - return schema.nullable ? objectSchema.strict().nullable() : objectSchema.strict(); - } - - return schema.nullable ? objectSchema.nullable() : objectSchema; + if (schema.additionalProperties === true) { + return schema.nullable + ? objectSchema.passthrough().nullable() + : objectSchema.passthrough(); + } else if (schema.additionalProperties === false) { + return schema.nullable ? objectSchema.strict().nullable() : objectSchema.strict(); } + + return schema.nullable ? objectSchema.nullable() : objectSchema; } return schema.nullable ? z.record(z.any()).nullable() : z.record(z.any());