Skip to content

Commit 7037c4f

Browse files
refactor(schema): extract removeConditionalFieldsFromRequired to reduce nesting complexity
Extract the nested logic for removing conditional fields from required arrays into a separate helper function to satisfy the nestif linter (complexity was 10). Co-Authored-By: Martin Vasko <Matovidlo2@gmail.com>
1 parent ca2eabc commit 7037c4f

1 file changed

Lines changed: 32 additions & 23 deletions

File tree

internal/pkg/encoding/json/schema/schema.go

Lines changed: 32 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -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.
272281
func getObjectAtPath(m *orderedmap.OrderedMap, pathStr string) *orderedmap.OrderedMap {
273282
if pathStr == "" {

0 commit comments

Comments
 (0)