From b06fceb4a23396b23e95d9b772a64dcb7a1f9d08 Mon Sep 17 00:00:00 2001 From: Ben Durrant Date: Fri, 22 Nov 2024 11:55:30 +0000 Subject: [PATCH 1/3] Allow passing meta to retry.fail, and passing baseQuery to ensure types match --- docs/rtk-query/usage/customizing-queries.mdx | 2 +- packages/toolkit/src/query/retry.ts | 8 +++-- .../toolkit/src/query/tests/retry.test-d.ts | 33 +++++++++++++++++-- 3 files changed, 37 insertions(+), 6 deletions(-) diff --git a/docs/rtk-query/usage/customizing-queries.mdx b/docs/rtk-query/usage/customizing-queries.mdx index 092f990687..d3f716df0d 100644 --- a/docs/rtk-query/usage/customizing-queries.mdx +++ b/docs/rtk-query/usage/customizing-queries.mdx @@ -636,7 +636,7 @@ const staggeredBaseQueryWithBailOut = retry( // bail out of re-tries immediately if unauthorized, // because we know successive re-retries would be redundant if (result.error?.status === 401) { - retry.fail(result.error) + retry.fail(result.error, result.meta) } return result diff --git a/packages/toolkit/src/query/retry.ts b/packages/toolkit/src/query/retry.ts index 05ab05dd01..e30f1b5fe7 100644 --- a/packages/toolkit/src/query/retry.ts +++ b/packages/toolkit/src/query/retry.ts @@ -5,6 +5,7 @@ import type { BaseQueryError, BaseQueryExtraOptions, BaseQueryFn, + BaseQueryMeta, } from './baseQueryTypes' import type { FetchBaseQueryError } from './fetchBaseQuery' import { HandledError } from './HandledError' @@ -64,8 +65,11 @@ export type RetryOptions = { } ) -function fail(e: any): never { - throw Object.assign(new HandledError({ error: e }), { +function fail( + e: BaseQueryError, + meta?: BaseQueryMeta, +): never { + throw Object.assign(new HandledError({ error: e, meta }), { throwImmediately: true, }) } diff --git a/packages/toolkit/src/query/tests/retry.test-d.ts b/packages/toolkit/src/query/tests/retry.test-d.ts index 26a9eb210f..ef8aee5f7f 100644 --- a/packages/toolkit/src/query/tests/retry.test-d.ts +++ b/packages/toolkit/src/query/tests/retry.test-d.ts @@ -1,4 +1,9 @@ -import type { RetryOptions } from '@internal/query/retry' +import { retry, type RetryOptions } from '@internal/query/retry' +import { + fetchBaseQuery, + type FetchBaseQueryError, + type FetchBaseQueryMeta, +} from '@internal/query/fetchBaseQuery' describe('type tests', () => { test('RetryOptions only accepts one of maxRetries or retryCondition', () => { @@ -14,6 +19,28 @@ describe('type tests', () => { retryCondition: () => false, }).not.toMatchTypeOf() }) -}) + test('fail can be pretyped to only accept correct error and meta', () => { + expectTypeOf(retry.fail).parameter(0).toEqualTypeOf() + expectTypeOf(retry.fail).parameter(1).toEqualTypeOf<{} | undefined>() + expectTypeOf(retry.fail).toBeCallableWith('Literally anything', {}) + + const myBaseQuery = fetchBaseQuery() + const typedFail = retry.fail + + expectTypeOf(typedFail).parameter(0).toMatchTypeOf() + expectTypeOf(typedFail) + .parameter(1) + .toMatchTypeOf() -export {} + expectTypeOf(typedFail).toBeCallableWith( + { + status: 401, + data: 'Unauthorized', + }, + { request: new Request('http://localhost') }, + ) + + expectTypeOf(typedFail).parameter(0).not.toMatchTypeOf() + expectTypeOf(typedFail).parameter(1).not.toMatchTypeOf<{}>() + }) +}) From 5960d03613f865ce5e9ebccbf3171fd230ebc89d Mon Sep 17 00:00:00 2001 From: Ben Durrant Date: Fri, 22 Nov 2024 12:31:45 +0000 Subject: [PATCH 2/3] use more shorthand --- packages/toolkit/src/query/retry.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/toolkit/src/query/retry.ts b/packages/toolkit/src/query/retry.ts index e30f1b5fe7..3947dd4acd 100644 --- a/packages/toolkit/src/query/retry.ts +++ b/packages/toolkit/src/query/retry.ts @@ -66,10 +66,10 @@ export type RetryOptions = { ) function fail( - e: BaseQueryError, + error: BaseQueryError, meta?: BaseQueryMeta, ): never { - throw Object.assign(new HandledError({ error: e, meta }), { + throw Object.assign(new HandledError({ error, meta }), { throwImmediately: true, }) } From 2f9e318cea200e00dd618f4e12c65586884ec78d Mon Sep 17 00:00:00 2001 From: Mark Erikson Date: Sat, 23 Nov 2024 16:07:39 -0500 Subject: [PATCH 3/3] Drop TS test matrix support for TS <5.0 --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 5486079d76..d18385c584 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -111,7 +111,7 @@ jobs: fail-fast: false matrix: node: ['20.x'] - ts: ['4.7', '4.8', '4.9', '5.0', '5.1', '5.2', '5.3', '5.4', '5.5'] + ts: ['5.0', '5.1', '5.2', '5.3', '5.4', '5.5'] steps: - name: Checkout repo uses: actions/checkout@v4