@@ -214,29 +214,7 @@ func NormalizeSchema(schema []byte) ([]byte, error) {
214214 }
215215
216216 // Remove conditionally required fields from the required array
217- if requiredVal , found := parentObj .Get ("required" ); found {
218- if requiredArr , ok := requiredVal .([]any ); ok {
219- newRequired := make ([]any , 0 , len (requiredArr ))
220- conditionalFields := make (map [string ]bool )
221- for _ , req := range reqs {
222- conditionalFields [req .fieldName ] = true
223- }
224- for _ , field := range requiredArr {
225- if fieldStr , ok := field .(string ); ok {
226- if ! conditionalFields [fieldStr ] {
227- newRequired = append (newRequired , field )
228- }
229- } else {
230- newRequired = append (newRequired , field )
231- }
232- }
233- if len (newRequired ) > 0 {
234- parentObj .Set ("required" , newRequired )
235- } else {
236- parentObj .Delete ("required" )
237- }
238- }
239- }
217+ removeConditionalFieldsFromRequired (parentObj , reqs )
240218
241219 // Generate if/then/else constructs for each conditional requirement
242220 allOfItems := make ([]any , 0 , len (reqs ))
@@ -268,6 +246,37 @@ func NormalizeSchema(schema []byte) ([]byte, error) {
268246 return normalized , nil
269247}
270248
249+ // removeConditionalFieldsFromRequired removes conditionally required fields from the required array.
250+ func removeConditionalFieldsFromRequired (parentObj * orderedmap.OrderedMap , reqs []conditionalRequirement ) {
251+ requiredVal , found := parentObj .Get ("required" )
252+ if ! found {
253+ return
254+ }
255+ requiredArr , ok := requiredVal .([]any )
256+ if ! ok {
257+ return
258+ }
259+
260+ conditionalFields := make (map [string ]bool )
261+ for _ , req := range reqs {
262+ conditionalFields [req .fieldName ] = true
263+ }
264+
265+ newRequired := make ([]any , 0 , len (requiredArr ))
266+ for _ , field := range requiredArr {
267+ fieldStr , ok := field .(string )
268+ if ! ok || ! conditionalFields [fieldStr ] {
269+ newRequired = append (newRequired , field )
270+ }
271+ }
272+
273+ if len (newRequired ) > 0 {
274+ parentObj .Set ("required" , newRequired )
275+ } else {
276+ parentObj .Delete ("required" )
277+ }
278+ }
279+
271280// getObjectAtPath returns the orderedmap at the given path string.
272281func getObjectAtPath (m * orderedmap.OrderedMap , pathStr string ) * orderedmap.OrderedMap {
273282 if pathStr == "" {
0 commit comments