From c9c3ae1a3421fb4e2b41ee9e431b76599392b487 Mon Sep 17 00:00:00 2001 From: Dominik Dorfmeister Date: Tue, 2 Apr 2024 10:18:58 +0200 Subject: [PATCH 1/4] fix(types): add pageParam and direction as optional to "normal" queryFn because that's what we get when using a defaultQueryFn --- .../src/__tests__/queryClient.test-d.tsx | 24 ++++++++++++++++++- packages/query-core/src/types.ts | 2 ++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/packages/query-core/src/__tests__/queryClient.test-d.tsx b/packages/query-core/src/__tests__/queryClient.test-d.tsx index 0a017d6505..7db15b71aa 100644 --- a/packages/query-core/src/__tests__/queryClient.test-d.tsx +++ b/packages/query-core/src/__tests__/queryClient.test-d.tsx @@ -1,6 +1,7 @@ import { describe, expectTypeOf, it } from 'vitest' import { QueryClient } from '../queryClient' -import type { DataTag, InfiniteData } from '../types' +import type { FetchDirection } from '../query' +import type { DataTag, InfiniteData, QueryKey } from '../types' describe('getQueryData', () => { it('should be typed if key is tagged', () => { @@ -133,3 +134,24 @@ describe('fetchInfiniteQuery', () => { }) }) }) + +describe('defaultOptions', () => { + it('should have a typed QueryFunctionContext', () => { + new QueryClient({ + defaultOptions: { + queries: { + queryFn: (context) => { + expectTypeOf(context).toEqualTypeOf<{ + queryKey: QueryKey + meta: Record | undefined + signal: AbortSignal + pageParam?: unknown + direction?: FetchDirection + }>() + return Promise.resolve('data') + }, + }, + }, + }) + }) +}) diff --git a/packages/query-core/src/types.ts b/packages/query-core/src/types.ts index b7bcc1ffbc..40f2659f08 100644 --- a/packages/query-core/src/types.ts +++ b/packages/query-core/src/types.ts @@ -66,6 +66,8 @@ export type QueryFunctionContext< queryKey: TQueryKey signal: AbortSignal meta: QueryMeta | undefined + pageParam?: unknown + direction?: FetchDirection } : { queryKey: TQueryKey From d45904c5d15ec25f6848cff93dbb556e8e6899b2 Mon Sep 17 00:00:00 2001 From: Dominik Dorfmeister Date: Tue, 2 Apr 2024 10:35:25 +0200 Subject: [PATCH 2/4] chore: remove tests that are no longer true --- .../src/__tests__/useInfiniteQuery.test-d.tsx | 20 ------------------- 1 file changed, 20 deletions(-) diff --git a/packages/react-query/src/__tests__/useInfiniteQuery.test-d.tsx b/packages/react-query/src/__tests__/useInfiniteQuery.test-d.tsx index a6a4b429e4..6f2c2640a3 100644 --- a/packages/react-query/src/__tests__/useInfiniteQuery.test-d.tsx +++ b/packages/react-query/src/__tests__/useInfiniteQuery.test-d.tsx @@ -27,26 +27,6 @@ describe('pageParam', () => { }) }) - it('there should be no pageParam passed to the queryFn of useQuery', () => { - useQuery({ - queryKey: ['key'], - // @ts-expect-error there should be no pageParam passed to queryFn of useQuery - queryFn: ({ pageParam }) => { - return String(pageParam) - }, - }) - }) - - it('there should be no direction passed to the queryFn of useQuery', () => { - useQuery({ - queryKey: ['key'], - // @ts-expect-error there should be no pageParam passed to queryFn of useQuery - queryFn: ({ direction }) => { - return String(direction) - }, - }) - }) - it('initialPageParam should define type of param passed to queryFunctionContext for fetchInfiniteQuery', () => { const queryClient = new QueryClient() queryClient.fetchInfiniteQuery({ From 76ddf1422de81a3ac67f444f5e8e64565f8f3c07 Mon Sep 17 00:00:00 2001 From: Dominik Dorfmeister Date: Tue, 2 Apr 2024 10:45:43 +0200 Subject: [PATCH 3/4] chore: cleanup --- packages/query-core/src/__tests__/query.test.tsx | 1 - packages/react-query/src/__tests__/useInfiniteQuery.test-d.tsx | 1 - 2 files changed, 2 deletions(-) diff --git a/packages/query-core/src/__tests__/query.test.tsx b/packages/query-core/src/__tests__/query.test.tsx index 0f963b5c47..12202512d6 100644 --- a/packages/query-core/src/__tests__/query.test.tsx +++ b/packages/query-core/src/__tests__/query.test.tsx @@ -208,7 +208,6 @@ describe('query', () => { expect(queryFn).toHaveBeenCalledTimes(1) const args = queryFn.mock.calls[0]![0] expect(args).toBeDefined() - // @ts-expect-error page param should be undefined expect(args.pageParam).toBeUndefined() expect(args.queryKey).toEqual(key) expect(args.signal).toBeInstanceOf(AbortSignal) diff --git a/packages/react-query/src/__tests__/useInfiniteQuery.test-d.tsx b/packages/react-query/src/__tests__/useInfiniteQuery.test-d.tsx index 6f2c2640a3..8b25ee8830 100644 --- a/packages/react-query/src/__tests__/useInfiniteQuery.test-d.tsx +++ b/packages/react-query/src/__tests__/useInfiniteQuery.test-d.tsx @@ -1,7 +1,6 @@ import { describe, expectTypeOf, it } from 'vitest' import { QueryClient } from '@tanstack/query-core' import { useInfiniteQuery } from '../useInfiniteQuery' -import { useQuery } from '../useQuery' import type { InfiniteData } from '@tanstack/query-core' describe('pageParam', () => { From 50f0d59c1e3b04a5be320bf300e49d143c218c01 Mon Sep 17 00:00:00 2001 From: Dominik Dorfmeister Date: Tue, 2 Apr 2024 13:38:44 +0200 Subject: [PATCH 4/4] wth? --- packages/query-core/src/types.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/query-core/src/types.ts b/packages/query-core/src/types.ts index 40f2659f08..71fb6e1bf5 100644 --- a/packages/query-core/src/types.ts +++ b/packages/query-core/src/types.ts @@ -67,7 +67,7 @@ export type QueryFunctionContext< signal: AbortSignal meta: QueryMeta | undefined pageParam?: unknown - direction?: FetchDirection + direction?: 'forward' | 'backward' } : { queryKey: TQueryKey