From d0b58bb78c218dc662376438adc09598b688a1fe Mon Sep 17 00:00:00 2001 From: SukkaW Date: Thu, 10 Oct 2024 16:39:56 +0800 Subject: [PATCH] Fix: make fetch-retry relax more --- Build/lib/fetch-retry.ts | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/Build/lib/fetch-retry.ts b/Build/lib/fetch-retry.ts index 3c570167..045e0e88 100644 --- a/Build/lib/fetch-retry.ts +++ b/Build/lib/fetch-retry.ts @@ -91,15 +91,32 @@ function createFetchRetry($fetch: typeof fetch): FetchWithRetry { return res; } } catch (err: unknown) { - if (err instanceof Error && ( - err.name === 'AbortError' - || ('digest' in err && err.digest === 'AbortError') - ) && !retryOpts.retryOnAborted) { - console.log(picocolors.gray('[fetch abort]'), url); - return bail(err) as never; - } - if (isClientError(err)) { - return bail(err) as never; + const mayBailError = (err: unknown) => { + if (typeof err === 'object' && err !== null && 'name' in err) { + if (( + err.name === 'AbortError' + || ('digest' in err && err.digest === 'AbortError') + ) && !retryOpts.retryOnAborted) { + console.log(picocolors.gray('[fetch abort]'), url); + return bail(err) as never; + } + if (err.name === 'Custom304NotModifiedError') { + return bail(err) as never; + } + if (err.name === 'CustomNoETagFallbackError') { + return bail(err) as never; + } + } + if (isClientError(err)) { + return bail(err) as never; + } + }; + + mayBailError(err); + if (err instanceof AggregateError) { + for (const e of err.errors) { + mayBailError(e); + } } console.log(picocolors.gray('[fetch fail]'), url, err);