From 233e77ba1c12ef676173d39d3b2b718fa181a4bb Mon Sep 17 00:00:00 2001 From: jdecroock Date: Fri, 21 Jan 2022 16:34:26 +0100 Subject: [PATCH 1/4] fix incremental fetch not bubbling up JS-errors --- .changeset/smart-brooms-fix.md | 5 +++++ packages/core/src/internal/fetchSource.ts | 12 ++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 .changeset/smart-brooms-fix.md diff --git a/.changeset/smart-brooms-fix.md b/.changeset/smart-brooms-fix.md new file mode 100644 index 0000000000..968f5a93e0 --- /dev/null +++ b/.changeset/smart-brooms-fix.md @@ -0,0 +1,5 @@ +--- +'@urql/core': patch +--- + +Fix error bubbling, when an error happened in the exchange-pipeline we would treat it as a GraphQL-error diff --git a/packages/core/src/internal/fetchSource.ts b/packages/core/src/internal/fetchSource.ts index e5e8b3b9fb..05ab4f37e7 100644 --- a/packages/core/src/internal/fetchSource.ts +++ b/packages/core/src/internal/fetchSource.ts @@ -146,6 +146,18 @@ export const makeFetchSource = ( }) .then(complete) .catch((error: Error) => { + if ( + error.constructor === Error || + error.name === 'SyntaxError' || + error.name === 'TypeError' + ) { + const e = new Error(error.message); + e.stack = + e.stack?.split('\n').slice(0, 2).join('\n') + '\n' + error.stack; + e.constructor = error.constructor; + throw e; + } + if (error.name !== 'AbortError') { const result = makeErrorResult( operation, From 606c35363e86a01a21c04e70aef938eaab496042 Mon Sep 17 00:00:00 2001 From: jdecroock Date: Fri, 21 Jan 2022 17:51:10 +0100 Subject: [PATCH 2/4] the stack exists --- packages/core/src/internal/fetchSource.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/src/internal/fetchSource.ts b/packages/core/src/internal/fetchSource.ts index 05ab4f37e7..61bd322964 100644 --- a/packages/core/src/internal/fetchSource.ts +++ b/packages/core/src/internal/fetchSource.ts @@ -153,7 +153,7 @@ export const makeFetchSource = ( ) { const e = new Error(error.message); e.stack = - e.stack?.split('\n').slice(0, 2).join('\n') + '\n' + error.stack; + e.stack!.split('\n').slice(0, 2).join('\n') + '\n' + error.stack; e.constructor = error.constructor; throw e; } From c95c7bef4a61567b047f8dd5db554999b6c9b812 Mon Sep 17 00:00:00 2001 From: Jovi De Croock Date: Fri, 21 Jan 2022 17:53:07 +0100 Subject: [PATCH 3/4] Update fetchSource.ts --- packages/core/src/internal/fetchSource.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/core/src/internal/fetchSource.ts b/packages/core/src/internal/fetchSource.ts index 61bd322964..98cc359916 100644 --- a/packages/core/src/internal/fetchSource.ts +++ b/packages/core/src/internal/fetchSource.ts @@ -147,7 +147,6 @@ export const makeFetchSource = ( .then(complete) .catch((error: Error) => { if ( - error.constructor === Error || error.name === 'SyntaxError' || error.name === 'TypeError' ) { From 8328ef6c2b5129e9a2237b029364c1a3f62477ab Mon Sep 17 00:00:00 2001 From: Jovi De Croock Date: Fri, 21 Jan 2022 17:54:38 +0100 Subject: [PATCH 4/4] formatting --- packages/core/src/internal/fetchSource.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/core/src/internal/fetchSource.ts b/packages/core/src/internal/fetchSource.ts index 98cc359916..fa4a62f456 100644 --- a/packages/core/src/internal/fetchSource.ts +++ b/packages/core/src/internal/fetchSource.ts @@ -146,10 +146,7 @@ export const makeFetchSource = ( }) .then(complete) .catch((error: Error) => { - if ( - error.name === 'SyntaxError' || - error.name === 'TypeError' - ) { + if (error.name === 'SyntaxError' || error.name === 'TypeError') { const e = new Error(error.message); e.stack = e.stack!.split('\n').slice(0, 2).join('\n') + '\n' + error.stack;