From 9a235d1415120fa09544e4d5f4ceb54e17b83589 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavol=20Luk=C4=8Da?= Date: Wed, 1 Nov 2023 00:10:01 +0100 Subject: [PATCH 1/2] fix: graphQLErrors in Error Link if networkError.result is an empty string --- .changeset/loud-hounds-heal.md | 5 +++++ src/link/error/__tests__/index.ts | 34 +++++++++++++++++++++++++++++++ src/link/error/index.ts | 7 ++++--- 3 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 .changeset/loud-hounds-heal.md diff --git a/.changeset/loud-hounds-heal.md b/.changeset/loud-hounds-heal.md new file mode 100644 index 00000000000..f80a0a34105 --- /dev/null +++ b/.changeset/loud-hounds-heal.md @@ -0,0 +1,5 @@ +--- +"@apollo/client": patch +--- + +Fix graphQLErrors in Error Link if networkError.result is an empty string diff --git a/src/link/error/__tests__/index.ts b/src/link/error/__tests__/index.ts index a6189ee3b87..5e886ff58d3 100644 --- a/src/link/error/__tests__/index.ts +++ b/src/link/error/__tests__/index.ts @@ -145,6 +145,40 @@ describe("error handling", () => { }); } ); + itAsync( + "sets graphQLErrors to undefined if networkError.result is an empty string", + (resolve, reject) => { + const query = gql` + query Foo { + foo { + bar + } + } + `; + + let called: boolean; + const errorLink = onError(({ graphQLErrors }) => { + expect(graphQLErrors).toBeUndefined(); + called = true; + }); + + const mockLink = new ApolloLink((operation) => { + return new Observable((obs) => { + const response = { status: 500, ok: false } as Response; + throwServerError(response, "", "app is crashing"); + }); + }); + + const link = errorLink.concat(mockLink); + + execute(link, { query }).subscribe({ + error: (e) => { + expect(called).toBe(true); + resolve(); + }, + }); + } + ); itAsync("completes if no errors", (resolve, reject) => { const query = gql` { diff --git a/src/link/error/index.ts b/src/link/error/index.ts index ec5d6dffba9..4fdcf8f3be2 100644 --- a/src/link/error/index.ts +++ b/src/link/error/index.ts @@ -60,9 +60,10 @@ export function onError(errorHandler: ErrorHandler): ApolloLink { networkError, //Network errors can return GraphQL errors on for example a 403 graphQLErrors: - networkError && - networkError.result && - networkError.result.errors, + (networkError && + networkError.result && + networkError.result.errors) || + undefined, forward, }); if (retriedResult) { From ff63c4fac4fb7b83af656cac1d07bc7f13349870 Mon Sep 17 00:00:00 2001 From: Jerel Miller Date: Wed, 12 Jun 2024 12:00:16 -0600 Subject: [PATCH 2/2] Use `void 0` instead of `undefined` --- src/link/error/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/link/error/index.ts b/src/link/error/index.ts index 4fdcf8f3be2..039b6e193e2 100644 --- a/src/link/error/index.ts +++ b/src/link/error/index.ts @@ -63,7 +63,7 @@ export function onError(errorHandler: ErrorHandler): ApolloLink { (networkError && networkError.result && networkError.result.errors) || - undefined, + void 0, forward, }); if (retriedResult) {