From c86b4d4744a7b8329ac12556f6ae1a6e2daeff24 Mon Sep 17 00:00:00 2001 From: Christoph Zwerschke Date: Tue, 15 Oct 2024 16:31:46 +0200 Subject: [PATCH] Fix/optimize value coercion check for OneOf type (#4181) Where a JavaScript value is coerced to a GraphQL OneOf Input Type, a null value should only be reported when the "one of" condition is satisfied. The code block starting at line 158 [here](https://github.com/graphql/graphql-js/blob/1dbdadc6f46d2c97c71c7a4f5c61a2c75d1536ae/src/utilities/coerceInputValue.ts#L158) that accesses `keys[0]` should not be executed if `keys` is empty or contains more than one item. The PR fixes this by adding an else statement. Alternatively, the "if/else" branches could be reversed, and the `keys.length !== 1` check should become a `keys.length === 1` check. --- src/utilities/coerceInputValue.ts | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/utilities/coerceInputValue.ts b/src/utilities/coerceInputValue.ts index f43ea63c..7e1ceed4 100644 --- a/src/utilities/coerceInputValue.ts +++ b/src/utilities/coerceInputValue.ts @@ -199,16 +199,16 @@ function coerceInputValueImpl( `Exactly one key must be specified for OneOf type "${type}".`, ), ); - } - - const key = keys[0]; - const value = coercedValue[key]; - if (value === null) { - onError( - pathToArray(path).concat(key), - value, - new GraphQLError(`Field "${key}" must be non-null.`), - ); + } else { + const key = keys[0]; + const value = coercedValue[key]; + if (value === null) { + onError( + pathToArray(path).concat(key), + value, + new GraphQLError(`Field "${key}" must be non-null.`), + ); + } } }