@@ -568,14 +568,26 @@ set or coercing a scalar value.
568
568
569
569
ExecuteField(objectType, objectValue, fieldType, fields, variableValues):
570
570
571
- - Let {field} be the first entry in {fields}.
572
- - Let {fieldName} be the field name of {field}.
573
- - Let {argumentValues} be the result of {CoerceArgumentValues(objectType, field,
574
- variableValues)}
575
- - Let {resolvedValue} be {ResolveFieldValue(objectType, objectValue, fieldName,
576
- argumentValues)}.
577
- - Return the result of {CompleteValue(fieldType, fields, resolvedValue,
578
- variableValues)}.
571
+ - Let {field} be the first entry in {fields}.
572
+ - Let {fieldName} be the field name of {field}.
573
+ - Let {requiredStatus} be the required status of {field}.
574
+ - Let {argumentValues} be the result of {CoerceArgumentValues(objectType, field, variableValues)}
575
+ - Let {resolvedValue} be {ResolveFieldValue(objectType, objectValue, fieldName, argumentValues)}.
576
+ - Let {modifiedFieldType} be {ModifiedOutputType(fieldType, requiredStatus)}.
577
+ - Return the result of {CompleteValue(modifiedFieldType, fields, resolvedValue, variableValues)}.
578
+
579
+ ModifiedOutputType(outputType, requiredStatus):
580
+
581
+ - If {requiredStatus} is 'required' and {outputType} is not a Non-Nullable type:
582
+ - Return Non-Null with an inner type of {outputType}.
583
+ - Otherwise if {requiredStatus} is 'optional':
584
+ - If {outputType} is not a Non-Nullable type:
585
+ - Return {outputType}.
586
+ - Otherwise if {outputType} is a Non-Nullable type:
587
+ - Let {innerOutputType} be the inner type of {outputType}.
588
+ - Return {innerOutputType}.
589
+ - Otherwise:
590
+ - Return {outputType}.
579
591
580
592
### Coercing Field Arguments
581
593
0 commit comments