diff --git a/src/utilities/__tests__/valueFromAST-test.js b/src/utilities/__tests__/valueFromAST-test.js index e7f9b24579..df91495839 100644 --- a/src/utilities/__tests__/valueFromAST-test.js +++ b/src/utilities/__tests__/valueFromAST-test.js @@ -72,6 +72,7 @@ describe('valueFromAST', () => { expectValueFrom('"BLUE"', testEnum).to.equal(undefined); expectValueFrom('null', testEnum).to.equal(null); expectValueFrom('NULL', testEnum).to.equal(null); + expectValueFrom('NULL', new GraphQLNonNull(testEnum)).to.equal(null); expectValueFrom('NAN', testEnum).to.deep.equal(NaN); expectValueFrom('NO_CUSTOM_VALUE', testEnum).to.equal('NO_CUSTOM_VALUE'); }); @@ -184,6 +185,7 @@ describe('valueFromAST', () => { expectValueFrom('$var', GraphQLBoolean, {}).to.equal(undefined); expectValueFrom('$var', GraphQLBoolean, { var: true }).to.equal(true); expectValueFrom('$var', GraphQLBoolean, { var: null }).to.equal(null); + expectValueFrom('$var', nonNullBool, { var: null }).to.equal(undefined); }); it('asserts variables are provided as items in lists', () => { diff --git a/src/utilities/valueFromAST.js b/src/utilities/valueFromAST.js index d1065753a4..9e710516e3 100644 --- a/src/utilities/valueFromAST.js +++ b/src/utilities/valueFromAST.js @@ -50,18 +50,6 @@ export function valueFromAST( return; } - if (isNonNullType(type)) { - if (valueNode.kind === Kind.NULL) { - return; // Invalid: intentionally return no value. - } - return valueFromAST(valueNode, type.ofType, variables); - } - - if (valueNode.kind === Kind.NULL) { - // This is explicitly returning the value null. - return null; - } - if (valueNode.kind === Kind.VARIABLE) { const variableName = valueNode.name.value; if (!variables || isInvalid(variables[variableName])) { @@ -78,6 +66,18 @@ export function valueFromAST( return variableValue; } + if (isNonNullType(type)) { + if (valueNode.kind === Kind.NULL) { + return; // Invalid: intentionally return no value. + } + return valueFromAST(valueNode, type.ofType, variables); + } + + if (valueNode.kind === Kind.NULL) { + // This is explicitly returning the value null. + return null; + } + if (isListType(type)) { const itemType = type.ofType; if (valueNode.kind === Kind.LIST) {