Skip to content

Commit

Permalink
Make union validation a soft error i.e. can still create instruction (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
gnawf authored Jan 8, 2025
1 parent 4a63d8f commit 9a39029
Showing 1 changed file with 14 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ import graphql.nadel.validation.isRenamed
import graphql.nadel.validation.ok
import graphql.nadel.validation.onError
import graphql.nadel.validation.onErrorCast
import graphql.nadel.validation.results
import graphql.nadel.validation.toResult
import graphql.schema.GraphQLDirectiveContainer
import graphql.schema.GraphQLFieldDefinition
Expand Down Expand Up @@ -118,18 +119,23 @@ class NadelHydrationValidation internal constructor() {
.onError { return it }
limitSourceField(parent, virtualField, hydrations)
.onError { return it }
validateUnion(parent, virtualField, hydrations)
.onError { return it }

return hydrations
.map { hydration ->
validate(parent, virtualField, hydration, hasMoreThanOneHydration)
}
.toResult()
return results(
validateUnionMembersBacked(parent, virtualField, hydrations), // Do this instead of .onError for a soft error
hydrations
.map { hydration ->
validate(parent, virtualField, hydration, hasMoreThanOneHydration)
}
.toResult(),
)
}

/**
* Checks that if the virtual field outputs a union, that all of its union members have
* a corresponding backing field that can resolve it.
*/
context(NadelValidationContext)
private fun validateUnion(
private fun validateUnionMembersBacked(
parent: NadelServiceSchemaElement.FieldsContainer,
virtualField: GraphQLFieldDefinition,
hydrations: List<NadelHydrationDefinition>,
Expand Down

0 comments on commit 9a39029

Please sign in to comment.