From 4390f68285d00bfefd7769e209c7d70a964e095b Mon Sep 17 00:00:00 2001 From: domi Date: Tue, 20 Nov 2018 15:51:53 +0100 Subject: [PATCH 1/5] Add more information in conversion error --- src/execution/execute.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/execution/execute.js b/src/execution/execute.js index ccf2bf3d2f..71d7cf165f 100644 --- a/src/execution/execute.js +++ b/src/execution/execute.js @@ -865,7 +865,7 @@ function completeValue( throw new Error( `Cannot return null for non-nullable field ${info.parentType.name}.${ info.fieldName - }.`, + }. Value ${result} cannot be converted to ${returnType.ofType.name}`, ); } return completed; From 62af8b6b2ad15ec5941d62fde25a9fdd7f4e6a97 Mon Sep 17 00:00:00 2001 From: domi Date: Wed, 21 Nov 2018 09:07:04 +0100 Subject: [PATCH 2/5] Update execute.js Add more information in conversion error: fix pipeline --- src/execution/execute.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/execution/execute.js b/src/execution/execute.js index 71d7cf165f..16afdadba6 100644 --- a/src/execution/execute.js +++ b/src/execution/execute.js @@ -865,7 +865,7 @@ function completeValue( throw new Error( `Cannot return null for non-nullable field ${info.parentType.name}.${ info.fieldName - }. Value ${result} cannot be converted to ${returnType.ofType.name}`, + }. Value ${inspect(result)} cannot be converted to ${inspect(returnType)}`, ); } return completed; From 3ea33bff16130246b06754d9b40e52741d48e715 Mon Sep 17 00:00:00 2001 From: Dominique Loiseau Date: Wed, 21 Nov 2018 09:15:21 +0100 Subject: [PATCH 3/5] Add more information in conversion error: lint --- src/execution/execute.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/execution/execute.js b/src/execution/execute.js index 16afdadba6..63c451bd52 100644 --- a/src/execution/execute.js +++ b/src/execution/execute.js @@ -865,7 +865,9 @@ function completeValue( throw new Error( `Cannot return null for non-nullable field ${info.parentType.name}.${ info.fieldName - }. Value ${inspect(result)} cannot be converted to ${inspect(returnType)}`, + }. Value ${inspect(result)} cannot be converted to ${inspect( + returnType, + )}`, ); } return completed; From b585c4c40d21f7abafb174182963bf9eb86d00c7 Mon Sep 17 00:00:00 2001 From: Dominique Loiseau Date: Wed, 21 Nov 2018 09:34:44 +0100 Subject: [PATCH 4/5] Add more information in conversion error: fix tests --- src/execution/__tests__/lists-test.js | 20 ++++++++++---------- src/execution/__tests__/nonnull-test.js | 14 +++++++------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/execution/__tests__/lists-test.js b/src/execution/__tests__/lists-test.js index feab126922..b607b66313 100644 --- a/src/execution/__tests__/lists-test.js +++ b/src/execution/__tests__/lists-test.js @@ -210,7 +210,7 @@ describe('Execute: Handles list nullability', () => { errors: [ { message: - 'Cannot return null for non-nullable field DataType.test.', + 'Cannot return null for non-nullable field DataType.test. Value null cannot be converted to [Int]!', locations: [{ line: 1, column: 10 }], path: ['nest', 'test'], }, @@ -239,7 +239,7 @@ describe('Execute: Handles list nullability', () => { errors: [ { message: - 'Cannot return null for non-nullable field DataType.test.', + 'Cannot return null for non-nullable field DataType.test. Value null cannot be converted to [Int]!', locations: [{ line: 1, column: 10 }], path: ['nest', 'test'], }, @@ -313,7 +313,7 @@ describe('Execute: Handles list nullability', () => { errors: [ { message: - 'Cannot return null for non-nullable field DataType.test.', + 'Cannot return null for non-nullable field DataType.test. Value null cannot be converted to Int!', locations: [{ line: 1, column: 10 }], path: ['nest', 'test', 1], }, @@ -337,7 +337,7 @@ describe('Execute: Handles list nullability', () => { errors: [ { message: - 'Cannot return null for non-nullable field DataType.test.', + 'Cannot return null for non-nullable field DataType.test. Value null cannot be converted to Int!', locations: [{ line: 1, column: 10 }], path: ['nest', 'test', 1], }, @@ -380,7 +380,7 @@ describe('Execute: Handles list nullability', () => { errors: [ { message: - 'Cannot return null for non-nullable field DataType.test.', + 'Cannot return null for non-nullable field DataType.test. Value null cannot be converted to Int!', locations: [{ line: 1, column: 10 }], path: ['nest', 'test', 1], }, @@ -424,7 +424,7 @@ describe('Execute: Handles list nullability', () => { errors: [ { message: - 'Cannot return null for non-nullable field DataType.test.', + 'Cannot return null for non-nullable field DataType.test. Value null cannot be converted to Int!', locations: [{ line: 1, column: 10 }], path: ['nest', 'test', 1], }, @@ -439,7 +439,7 @@ describe('Execute: Handles list nullability', () => { errors: [ { message: - 'Cannot return null for non-nullable field DataType.test.', + 'Cannot return null for non-nullable field DataType.test. Value null cannot be converted to [Int!]!', locations: [{ line: 1, column: 10 }], path: ['nest', 'test'], }, @@ -461,7 +461,7 @@ describe('Execute: Handles list nullability', () => { errors: [ { message: - 'Cannot return null for non-nullable field DataType.test.', + 'Cannot return null for non-nullable field DataType.test. Value null cannot be converted to Int!', locations: [{ line: 1, column: 10 }], path: ['nest', 'test', 1], }, @@ -476,7 +476,7 @@ describe('Execute: Handles list nullability', () => { errors: [ { message: - 'Cannot return null for non-nullable field DataType.test.', + 'Cannot return null for non-nullable field DataType.test. Value null cannot be converted to [Int!]!', locations: [{ line: 1, column: 10 }], path: ['nest', 'test'], }, @@ -514,7 +514,7 @@ describe('Execute: Handles list nullability', () => { errors: [ { message: - 'Cannot return null for non-nullable field DataType.test.', + 'Cannot return null for non-nullable field DataType.test. Value null cannot be converted to Int!', locations: [{ line: 1, column: 10 }], path: ['nest', 'test', 1], }, diff --git a/src/execution/__tests__/nonnull-test.js b/src/execution/__tests__/nonnull-test.js index c7795bfff7..3209a5e9b4 100644 --- a/src/execution/__tests__/nonnull-test.js +++ b/src/execution/__tests__/nonnull-test.js @@ -177,7 +177,7 @@ describe('Execute: handles non-nullable types', () => { errors: [ { message: - 'Cannot return null for non-nullable field DataType.syncNonNull.', + 'Cannot return null for non-nullable field DataType.syncNonNull. Value null cannot be converted to String!', path: ['syncNest', 'syncNonNull'], locations: [{ line: 4, column: 11 }], }, @@ -216,7 +216,7 @@ describe('Execute: handles non-nullable types', () => { errors: [ { message: - 'Cannot return null for non-nullable field DataType.syncNonNull.', + 'Cannot return null for non-nullable field DataType.syncNonNull. Value null cannot be converted to String!', path: ['promiseNest', 'syncNonNull'], locations: [{ line: 4, column: 11 }], }, @@ -409,7 +409,7 @@ describe('Execute: handles non-nullable types', () => { errors: [ { message: - 'Cannot return null for non-nullable field DataType.syncNonNull.', + 'Cannot return null for non-nullable field DataType.syncNonNull. Value null cannot be converted to String!', path: [ 'syncNest', 'syncNonNullNest', @@ -422,7 +422,7 @@ describe('Execute: handles non-nullable types', () => { }, { message: - 'Cannot return null for non-nullable field DataType.syncNonNull.', + 'Cannot return null for non-nullable field DataType.syncNonNull. Value null cannot be converted to String!', path: [ 'promiseNest', 'syncNonNullNest', @@ -435,7 +435,7 @@ describe('Execute: handles non-nullable types', () => { }, { message: - 'Cannot return null for non-nullable field DataType.promiseNonNull.', + 'Cannot return null for non-nullable field DataType.promiseNonNull. Value null cannot be converted to String!', path: [ 'anotherNest', 'syncNonNullNest', @@ -448,7 +448,7 @@ describe('Execute: handles non-nullable types', () => { }, { message: - 'Cannot return null for non-nullable field DataType.promiseNonNull.', + 'Cannot return null for non-nullable field DataType.promiseNonNull. Value null cannot be converted to String!', path: [ 'anotherPromiseNest', 'syncNonNullNest', @@ -535,7 +535,7 @@ describe('Execute: handles non-nullable types', () => { errors: [ { message: - 'Cannot return null for non-nullable field DataType.syncNonNull.', + 'Cannot return null for non-nullable field DataType.syncNonNull. Value null cannot be converted to String!', path: ['syncNonNull'], locations: [{ line: 3, column: 9 }], }, From 8bad454757377d6bc3296a29057c70784aaacc26 Mon Sep 17 00:00:00 2001 From: Ivan Goncharov Date: Tue, 5 Feb 2019 20:20:22 +0200 Subject: [PATCH 5/5] Switch to having more granular errors --- src/execution/__tests__/lists-test.js | 20 ++++++++++---------- src/execution/__tests__/nonnull-test.js | 14 +++++++------- src/execution/execute.js | 19 ++++++++++++------- 3 files changed, 29 insertions(+), 24 deletions(-) diff --git a/src/execution/__tests__/lists-test.js b/src/execution/__tests__/lists-test.js index b607b66313..feab126922 100644 --- a/src/execution/__tests__/lists-test.js +++ b/src/execution/__tests__/lists-test.js @@ -210,7 +210,7 @@ describe('Execute: Handles list nullability', () => { errors: [ { message: - 'Cannot return null for non-nullable field DataType.test. Value null cannot be converted to [Int]!', + 'Cannot return null for non-nullable field DataType.test.', locations: [{ line: 1, column: 10 }], path: ['nest', 'test'], }, @@ -239,7 +239,7 @@ describe('Execute: Handles list nullability', () => { errors: [ { message: - 'Cannot return null for non-nullable field DataType.test. Value null cannot be converted to [Int]!', + 'Cannot return null for non-nullable field DataType.test.', locations: [{ line: 1, column: 10 }], path: ['nest', 'test'], }, @@ -313,7 +313,7 @@ describe('Execute: Handles list nullability', () => { errors: [ { message: - 'Cannot return null for non-nullable field DataType.test. Value null cannot be converted to Int!', + 'Cannot return null for non-nullable field DataType.test.', locations: [{ line: 1, column: 10 }], path: ['nest', 'test', 1], }, @@ -337,7 +337,7 @@ describe('Execute: Handles list nullability', () => { errors: [ { message: - 'Cannot return null for non-nullable field DataType.test. Value null cannot be converted to Int!', + 'Cannot return null for non-nullable field DataType.test.', locations: [{ line: 1, column: 10 }], path: ['nest', 'test', 1], }, @@ -380,7 +380,7 @@ describe('Execute: Handles list nullability', () => { errors: [ { message: - 'Cannot return null for non-nullable field DataType.test. Value null cannot be converted to Int!', + 'Cannot return null for non-nullable field DataType.test.', locations: [{ line: 1, column: 10 }], path: ['nest', 'test', 1], }, @@ -424,7 +424,7 @@ describe('Execute: Handles list nullability', () => { errors: [ { message: - 'Cannot return null for non-nullable field DataType.test. Value null cannot be converted to Int!', + 'Cannot return null for non-nullable field DataType.test.', locations: [{ line: 1, column: 10 }], path: ['nest', 'test', 1], }, @@ -439,7 +439,7 @@ describe('Execute: Handles list nullability', () => { errors: [ { message: - 'Cannot return null for non-nullable field DataType.test. Value null cannot be converted to [Int!]!', + 'Cannot return null for non-nullable field DataType.test.', locations: [{ line: 1, column: 10 }], path: ['nest', 'test'], }, @@ -461,7 +461,7 @@ describe('Execute: Handles list nullability', () => { errors: [ { message: - 'Cannot return null for non-nullable field DataType.test. Value null cannot be converted to Int!', + 'Cannot return null for non-nullable field DataType.test.', locations: [{ line: 1, column: 10 }], path: ['nest', 'test', 1], }, @@ -476,7 +476,7 @@ describe('Execute: Handles list nullability', () => { errors: [ { message: - 'Cannot return null for non-nullable field DataType.test. Value null cannot be converted to [Int!]!', + 'Cannot return null for non-nullable field DataType.test.', locations: [{ line: 1, column: 10 }], path: ['nest', 'test'], }, @@ -514,7 +514,7 @@ describe('Execute: Handles list nullability', () => { errors: [ { message: - 'Cannot return null for non-nullable field DataType.test. Value null cannot be converted to Int!', + 'Cannot return null for non-nullable field DataType.test.', locations: [{ line: 1, column: 10 }], path: ['nest', 'test', 1], }, diff --git a/src/execution/__tests__/nonnull-test.js b/src/execution/__tests__/nonnull-test.js index 3209a5e9b4..c7795bfff7 100644 --- a/src/execution/__tests__/nonnull-test.js +++ b/src/execution/__tests__/nonnull-test.js @@ -177,7 +177,7 @@ describe('Execute: handles non-nullable types', () => { errors: [ { message: - 'Cannot return null for non-nullable field DataType.syncNonNull. Value null cannot be converted to String!', + 'Cannot return null for non-nullable field DataType.syncNonNull.', path: ['syncNest', 'syncNonNull'], locations: [{ line: 4, column: 11 }], }, @@ -216,7 +216,7 @@ describe('Execute: handles non-nullable types', () => { errors: [ { message: - 'Cannot return null for non-nullable field DataType.syncNonNull. Value null cannot be converted to String!', + 'Cannot return null for non-nullable field DataType.syncNonNull.', path: ['promiseNest', 'syncNonNull'], locations: [{ line: 4, column: 11 }], }, @@ -409,7 +409,7 @@ describe('Execute: handles non-nullable types', () => { errors: [ { message: - 'Cannot return null for non-nullable field DataType.syncNonNull. Value null cannot be converted to String!', + 'Cannot return null for non-nullable field DataType.syncNonNull.', path: [ 'syncNest', 'syncNonNullNest', @@ -422,7 +422,7 @@ describe('Execute: handles non-nullable types', () => { }, { message: - 'Cannot return null for non-nullable field DataType.syncNonNull. Value null cannot be converted to String!', + 'Cannot return null for non-nullable field DataType.syncNonNull.', path: [ 'promiseNest', 'syncNonNullNest', @@ -435,7 +435,7 @@ describe('Execute: handles non-nullable types', () => { }, { message: - 'Cannot return null for non-nullable field DataType.promiseNonNull. Value null cannot be converted to String!', + 'Cannot return null for non-nullable field DataType.promiseNonNull.', path: [ 'anotherNest', 'syncNonNullNest', @@ -448,7 +448,7 @@ describe('Execute: handles non-nullable types', () => { }, { message: - 'Cannot return null for non-nullable field DataType.promiseNonNull. Value null cannot be converted to String!', + 'Cannot return null for non-nullable field DataType.promiseNonNull.', path: [ 'anotherPromiseNest', 'syncNonNullNest', @@ -535,7 +535,7 @@ describe('Execute: handles non-nullable types', () => { errors: [ { message: - 'Cannot return null for non-nullable field DataType.syncNonNull. Value null cannot be converted to String!', + 'Cannot return null for non-nullable field DataType.syncNonNull.', path: ['syncNonNull'], locations: [{ line: 3, column: 9 }], }, diff --git a/src/execution/execute.js b/src/execution/execute.js index 63c451bd52..08d2ff79c2 100644 --- a/src/execution/execute.js +++ b/src/execution/execute.js @@ -862,13 +862,18 @@ function completeValue( result, ); if (completed === null) { - throw new Error( - `Cannot return null for non-nullable field ${info.parentType.name}.${ - info.fieldName - }. Value ${inspect(result)} cannot be converted to ${inspect( - returnType, - )}`, - ); + if (result == null) { + throw new Error( + `Cannot return null for non-nullable field ` + + `${info.parentType.name}.${info.fieldName}.`, + ); + } else { + throw new Error( + `Cannot coerce '${inspect(result)}' into type ` + + `${inspect(returnType)} for non-nullable field ` + + `${info.parentType.name}.${info.fieldName}`, + ); + } } return completed; }