Skip to content

Commit c9de407

Browse files
AndrewSisleyfredcarle
authored andcommitted
fix: Handle adding of fields to thunk-fields (#4)
1 parent 9514adb commit c9de407

File tree

1 file changed

+20
-4
lines changed

1 file changed

+20
-4
lines changed

definition.go

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1239,11 +1239,27 @@ func (gt *InputObject) AddFieldConfig(fieldName string, fieldConfig *InputObject
12391239
if fieldName == "" || fieldConfig == nil {
12401240
return
12411241
}
1242-
fieldMap, ok := gt.typeConfig.Fields.(InputObjectConfigFieldMap)
1243-
if gt.err = invariant(ok, "Cannot add field to a thunk"); gt.err != nil {
1244-
return
1242+
1243+
switch fields := gt.typeConfig.Fields.(type) {
1244+
case InputObjectConfigFieldMap:
1245+
// If the fields were defined synchronously (not a thunk),
1246+
// we just add to the map
1247+
fields[fieldName] = fieldConfig
1248+
case InputObjectConfigFieldMapThunk:
1249+
// If the fields were defined using a thunk, we wrap the
1250+
// original thunk behind a new thunk which appends the new
1251+
// field
1252+
var newThunk InputObjectConfigFieldMapThunk = func() (InputObjectConfigFieldMap, error) {
1253+
oldFieldMap, err := fields()
1254+
if err != nil {
1255+
return nil, err
1256+
}
1257+
oldFieldMap[fieldName] = fieldConfig
1258+
return oldFieldMap, nil
1259+
}
1260+
gt.typeConfig.Fields = newThunk
12451261
}
1246-
fieldMap[fieldName] = fieldConfig
1262+
12471263
gt.fields = gt.defineFieldMap()
12481264
}
12491265

0 commit comments

Comments
 (0)