From cb63446a7fad52c19af2d40877637b11575fe330 Mon Sep 17 00:00:00 2001 From: Phil Pluckthun Date: Thu, 16 Mar 2023 04:41:34 +0000 Subject: [PATCH 1/2] Add alternative rethrow method by wrapping yield --- .changeset/silent-numbers-look.md | 5 +++++ packages/core/src/internal/fetchSource.ts | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 .changeset/silent-numbers-look.md diff --git a/.changeset/silent-numbers-look.md b/.changeset/silent-numbers-look.md new file mode 100644 index 0000000000..888b24220b --- /dev/null +++ b/.changeset/silent-numbers-look.md @@ -0,0 +1,5 @@ +--- +'@urql/core': patch +--- + +Ensure network errors are always issued with `CombinedError`s, while downstream errors are re-thrown. diff --git a/packages/core/src/internal/fetchSource.ts b/packages/core/src/internal/fetchSource.ts index efbcc74e32..5b5f611006 100644 --- a/packages/core/src/internal/fetchSource.ts +++ b/packages/core/src/internal/fetchSource.ts @@ -104,6 +104,7 @@ async function* fetchOperation( url: string, fetchOptions: RequestInit ) { + let networkMode = true; let abortController: AbortController | void; let result: OperationResult | null = null; let response: Response; @@ -132,16 +133,18 @@ async function* fetchOperation( } for await (const payload of results) { + networkMode = false; yield (result = result ? mergeResultPatch(result, payload, response) : makeResult(operation, payload, response)); + networkMode = true; } if (!result) { yield (result = makeResult(operation, {}, response)); } } catch (error: any) { - if (result) { + if (!networkMode) { throw error; } From c51260b633c1678723440addab6e73b95ca685e0 Mon Sep 17 00:00:00 2001 From: Phil Pluckthun Date: Thu, 16 Mar 2023 04:51:18 +0000 Subject: [PATCH 2/2] Isolate networkMode flag from makeResult --- packages/core/src/internal/fetchSource.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/core/src/internal/fetchSource.ts b/packages/core/src/internal/fetchSource.ts index 5b5f611006..4345a22b2a 100644 --- a/packages/core/src/internal/fetchSource.ts +++ b/packages/core/src/internal/fetchSource.ts @@ -133,10 +133,11 @@ async function* fetchOperation( } for await (const payload of results) { - networkMode = false; - yield (result = result + result = result ? mergeResultPatch(result, payload, response) - : makeResult(operation, payload, response)); + : makeResult(operation, payload, response); + networkMode = false; + yield result; networkMode = true; }