From 65a9840301be5517dfd86ed379b975cdbeee8a8f Mon Sep 17 00:00:00 2001 From: Nick Lucas Date: Sat, 5 Apr 2025 10:40:20 +0100 Subject: [PATCH 1/3] Remove prdicate typing --- packages/query-core/src/utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/query-core/src/utils.ts b/packages/query-core/src/utils.ts index eaf0cc4c89..de3b6f2954 100644 --- a/packages/query-core/src/utils.ts +++ b/packages/query-core/src/utils.ts @@ -31,7 +31,7 @@ export interface QueryFilters< /** * Include queries matching this predicate function */ - predicate?: (query: Query) => boolean + predicate?: (query: Query) => boolean /** * Include queries matching this query key */ From 8064c84706c010600a793f47547121f6f94b5886 Mon Sep 17 00:00:00 2001 From: Nick Lucas Date: Sun, 13 Apr 2025 13:51:33 +0100 Subject: [PATCH 2/3] Removing generics everywhere --- .../src/__tests__/queryClient.test-d.tsx | 51 +++---- .../query-core/src/__tests__/utils.test-d.tsx | 36 +---- packages/query-core/src/queryCache.ts | 2 +- packages/query-core/src/queryClient.ts | 125 +++--------------- packages/query-core/src/types.ts | 16 +-- packages/query-core/src/utils.ts | 7 +- 6 files changed, 47 insertions(+), 190 deletions(-) diff --git a/packages/query-core/src/__tests__/queryClient.test-d.tsx b/packages/query-core/src/__tests__/queryClient.test-d.tsx index 94cef6ff9b..e06d5829bd 100644 --- a/packages/query-core/src/__tests__/queryClient.test-d.tsx +++ b/packages/query-core/src/__tests__/queryClient.test-d.tsx @@ -225,18 +225,13 @@ describe('fully typed usage', () => { } const mutationOptions: MutationOptions = {} - const queryFilters: QueryFilters< - TData, - TError, - TData, - DataTag - > = { + const queryFilters: QueryFilters> = { predicate(query) { expectTypeOf(query).toEqualTypeOf< - Query> + Query> >() - expectTypeOf(query.state.data).toEqualTypeOf() - expectTypeOf(query.state.error).toEqualTypeOf() + expectTypeOf(query.state.data).toEqualTypeOf() + expectTypeOf(query.state.error).toEqualTypeOf() return false }, } @@ -267,7 +262,7 @@ describe('fully typed usage', () => { const queriesData = queryClient.getQueriesData(queryFilters) expectTypeOf(queriesData).toEqualTypeOf< - Array<[QueryKey, TData | undefined]> + Array<[ReadonlyArray, unknown]> >() const queryData3 = queryClient.setQueryData(queryKey, { foo: '' }) @@ -286,11 +281,9 @@ describe('fully typed usage', () => { >[1] expectTypeOf().toEqualTypeOf< - Updater - >() - expectTypeOf(queriesData2).toEqualTypeOf< - Array<[QueryKey, TData | undefined]> + Updater >() + expectTypeOf(queriesData2).toEqualTypeOf>() const queryState = queryClient.getQueryState(queryKey) expectTypeOf(queryState).toEqualTypeOf< @@ -530,10 +523,8 @@ describe('invalidateQueries', () => { queryClient.invalidateQueries({ queryKey, predicate: (query) => { - expectTypeOf(query.state.data).toEqualTypeOf() - expectTypeOf(query.queryKey).toEqualTypeOf< - DataTag, number> - >() + expectTypeOf(query.state.data).toEqualTypeOf() + expectTypeOf(query.queryKey).toEqualTypeOf() return true }, }) @@ -547,10 +538,8 @@ describe('cancelQueries', () => { queryClient.cancelQueries({ queryKey, predicate: (query) => { - expectTypeOf(query.state.data).toEqualTypeOf() - expectTypeOf(query.queryKey).toEqualTypeOf< - DataTag, number> - >() + expectTypeOf(query.state.data).toEqualTypeOf() + expectTypeOf(query.queryKey).toEqualTypeOf() return true }, }) @@ -564,10 +553,8 @@ describe('removeQueries', () => { queryClient.removeQueries({ queryKey, predicate: (query) => { - expectTypeOf(query.state.data).toEqualTypeOf() - expectTypeOf(query.queryKey).toEqualTypeOf< - DataTag, number> - >() + expectTypeOf(query.state.data).toEqualTypeOf() + expectTypeOf(query.queryKey).toEqualTypeOf() return true }, }) @@ -581,10 +568,8 @@ describe('refetchQueries', () => { queryClient.refetchQueries({ queryKey, predicate: (query) => { - expectTypeOf(query.state.data).toEqualTypeOf() - expectTypeOf(query.queryKey).toEqualTypeOf< - DataTag, number> - >() + expectTypeOf(query.state.data).toEqualTypeOf() + expectTypeOf(query.queryKey).toEqualTypeOf() return true }, }) @@ -598,10 +583,8 @@ describe('resetQueries', () => { queryClient.resetQueries({ queryKey, predicate: (query) => { - expectTypeOf(query.state.data).toEqualTypeOf() - expectTypeOf(query.queryKey).toEqualTypeOf< - DataTag, number> - >() + expectTypeOf(query.state.data).toEqualTypeOf() + expectTypeOf(query.queryKey).toEqualTypeOf() return true }, }) diff --git a/packages/query-core/src/__tests__/utils.test-d.tsx b/packages/query-core/src/__tests__/utils.test-d.tsx index 91be29f3d4..03a7aebad3 100644 --- a/packages/query-core/src/__tests__/utils.test-d.tsx +++ b/packages/query-core/src/__tests__/utils.test-d.tsx @@ -4,43 +4,13 @@ import type { QueryFilters } from '../utils' import type { DataTag, QueryKey } from '../types' describe('QueryFilters', () => { - it('should be typed if generics are passed', () => { - type TData = { a: number; b: string } - - const filters: QueryFilters< - TData, - Error, - TData, - DataTag - > = { - predicate(query) { - expectTypeOf(query.setData({ a: 1, b: '1' })).toEqualTypeOf() - return true - }, - queryKey: ['key'] as DataTag, - } - - const queryClient = new QueryClient() - - const data = queryClient.getQueryData(filters.queryKey!) - expectTypeOf(data).toEqualTypeOf() - - const error = queryClient.getQueryState(filters.queryKey!)?.error - expectTypeOf(error).toEqualTypeOf() - }) - - it('should be typed if generics are passed including an error type', () => { + it('should be typed unknown even if tagged generics are passed', () => { type TData = { a: number; b: string } type TError = Error & { message: string } - const filters: QueryFilters< - TData, - TError, - TData, - DataTag - > = { + const filters: QueryFilters> = { predicate(query) { - expectTypeOf(query.setData({ a: 1, b: '1' })).toEqualTypeOf() + expectTypeOf(query.setData({ a: 1, b: '1' })).toEqualTypeOf() return true }, queryKey: ['key'] as DataTag, diff --git a/packages/query-core/src/queryCache.ts b/packages/query-core/src/queryCache.ts index b7772fe03d..dd7123eaac 100644 --- a/packages/query-core/src/queryCache.ts +++ b/packages/query-core/src/queryCache.ts @@ -190,7 +190,7 @@ export class QueryCache extends Subscribable { ) as Query | undefined } - findAll(filters: QueryFilters = {}): Array { + findAll(filters: QueryFilters = {}): Array { const queries = this.getAll() return Object.keys(filters).length > 0 ? queries.filter((query) => matchQuery(filters, query)) diff --git a/packages/query-core/src/queryClient.ts b/packages/query-core/src/queryClient.ts index 821d1433ce..ad920601fc 100644 --- a/packages/query-core/src/queryClient.ts +++ b/packages/query-core/src/queryClient.ts @@ -106,9 +106,9 @@ export class QueryClient { this.#unsubscribeOnline = undefined } - isFetching< - TQueryFilters extends QueryFilters = QueryFilters, - >(filters?: TQueryFilters): number { + isFetching = QueryFilters>( + filters?: TQueryFilters, + ): number { return this.#queryCache.findAll({ ...filters, fetchStatus: 'fetching' }) .length } @@ -166,25 +166,10 @@ export class QueryClient { getQueriesData< TQueryFnData = unknown, - TQueryFilters extends QueryFilters< - any, - any, - any, - any - > = QueryFilters, - TInferredQueryFnData = TQueryFilters extends QueryFilters< - infer TData, - any, - any, - any - > - ? TData - : TQueryFnData, - >( - filters: TQueryFilters, - ): Array<[QueryKey, TInferredQueryFnData | undefined]> { + TQueryFilters extends QueryFilters = QueryFilters, + >(filters: TQueryFilters): Array<[QueryKey, TQueryFnData | undefined]> { return this.#queryCache.findAll(filters).map(({ queryKey, state }) => { - const data = state.data as TInferredQueryFnData | undefined + const data = state.data as TQueryFnData | undefined return [queryKey, data] }) } @@ -226,34 +211,21 @@ export class QueryClient { setQueriesData< TQueryFnData, - TQueryFilters extends QueryFilters< - any, - any, - any, - any - > = QueryFilters, - TInferredQueryFnData = TQueryFilters extends QueryFilters< - infer TData, - any, - any, - any - > - ? TData - : TQueryFnData, + TQueryFilters extends QueryFilters = QueryFilters, >( filters: TQueryFilters, updater: Updater< - NoInfer | undefined, - NoInfer | undefined + NoInfer | undefined, + NoInfer | undefined >, options?: SetDataOptions, - ): Array<[QueryKey, TInferredQueryFnData | undefined]> { + ): Array<[QueryKey, TQueryFnData | undefined]> { return notifyManager.batch(() => this.#queryCache .findAll(filters) .map(({ queryKey }) => [ queryKey, - this.setQueryData(queryKey, updater, options), + this.setQueryData(queryKey, updater, options), ]), ) } @@ -273,19 +245,8 @@ export class QueryClient { )?.state } - removeQueries< - TQueryFnData = unknown, - TError = DefaultError, - TTaggedQueryKey extends QueryKey = QueryKey, - TInferredQueryFnData = InferDataFromTag, - TInferredError = InferErrorFromTag, - >( - filters?: QueryFilters< - TInferredQueryFnData, - TInferredError, - TInferredQueryFnData, - TTaggedQueryKey - >, + removeQueries( + filters?: QueryFilters, ): void { const queryCache = this.#queryCache notifyManager.batch(() => { @@ -295,19 +256,8 @@ export class QueryClient { }) } - resetQueries< - TQueryFnData = unknown, - TError = DefaultError, - TTaggedQueryKey extends QueryKey = QueryKey, - TInferredQueryFnData = InferDataFromTag, - TInferredError = InferErrorFromTag, - >( - filters?: QueryFilters< - TInferredQueryFnData, - TInferredError, - TInferredQueryFnData, - TTaggedQueryKey - >, + resetQueries( + filters?: QueryFilters, options?: ResetOptions, ): Promise { const queryCache = this.#queryCache @@ -326,19 +276,8 @@ export class QueryClient { }) } - cancelQueries< - TQueryFnData = unknown, - TError = DefaultError, - TTaggedQueryKey extends QueryKey = QueryKey, - TInferredQueryFnData = InferDataFromTag, - TInferredError = InferErrorFromTag, - >( - filters?: QueryFilters< - TInferredQueryFnData, - TInferredError, - TInferredQueryFnData, - TTaggedQueryKey - >, + cancelQueries( + filters?: QueryFilters, cancelOptions: CancelOptions = {}, ): Promise { const defaultedCancelOptions = { revert: true, ...cancelOptions } @@ -352,19 +291,8 @@ export class QueryClient { return Promise.all(promises).then(noop).catch(noop) } - invalidateQueries< - TQueryFnData = unknown, - TError = DefaultError, - TTaggedQueryKey extends QueryKey = QueryKey, - TInferredQueryFnData = InferDataFromTag, - TInferredError = InferErrorFromTag, - >( - filters?: InvalidateQueryFilters< - TInferredQueryFnData, - TInferredError, - TInferredQueryFnData, - TTaggedQueryKey - >, + invalidateQueries( + filters?: InvalidateQueryFilters, options: InvalidateOptions = {}, ): Promise { return notifyManager.batch(() => { @@ -385,19 +313,8 @@ export class QueryClient { }) } - refetchQueries< - TQueryFnData = unknown, - TError = DefaultError, - TTaggedQueryKey extends QueryKey = QueryKey, - TInferredQueryFnData = InferDataFromTag, - TInferredError = InferErrorFromTag, - >( - filters?: RefetchQueryFilters< - TInferredQueryFnData, - TInferredError, - TInferredQueryFnData, - TTaggedQueryKey - >, + refetchQueries( + filters?: RefetchQueryFilters, options: RefetchOptions = {}, ): Promise { const fetchOptions = { diff --git a/packages/query-core/src/types.ts b/packages/query-core/src/types.ts index c973b6a758..0aafb2f1af 100644 --- a/packages/query-core/src/types.ts +++ b/packages/query-core/src/types.ts @@ -576,21 +576,13 @@ export interface RefetchOptions extends ResultOptions { cancelRefetch?: boolean } -export interface InvalidateQueryFilters< - TQueryFnData = unknown, - TError = DefaultError, - TData = TQueryFnData, - TQueryKey extends QueryKey = QueryKey, -> extends QueryFilters { +export interface InvalidateQueryFilters + extends QueryFilters { refetchType?: QueryTypeFilter | 'none' } -export interface RefetchQueryFilters< - TQueryFnData = unknown, - TError = DefaultError, - TData = TQueryFnData, - TQueryKey extends QueryKey = QueryKey, -> extends QueryFilters {} +export interface RefetchQueryFilters + extends QueryFilters {} export interface InvalidateOptions extends RefetchOptions {} export interface ResetOptions extends RefetchOptions {} diff --git a/packages/query-core/src/utils.ts b/packages/query-core/src/utils.ts index de3b6f2954..eb4a6e51db 100644 --- a/packages/query-core/src/utils.ts +++ b/packages/query-core/src/utils.ts @@ -14,12 +14,7 @@ import type { FetchOptions, Query } from './query' // TYPES -export interface QueryFilters< - TQueryFnData = unknown, - TError = DefaultError, - TData = TQueryFnData, - TQueryKey extends QueryKey = QueryKey, -> { +export interface QueryFilters { /** * Filter to active queries, inactive queries or all queries */ From ce0ff2f2ab24df88b5340f6e955ec0348c3e79fb Mon Sep 17 00:00:00 2001 From: Nick Lucas Date: Sun, 13 Apr 2025 14:03:34 +0100 Subject: [PATCH 3/3] Fix type errors --- packages/vue-query/src/queryClient.ts | 61 ++++----------------------- 1 file changed, 8 insertions(+), 53 deletions(-) diff --git a/packages/vue-query/src/queryClient.ts b/packages/vue-query/src/queryClient.ts index b8d149261a..ca0fe3953d 100644 --- a/packages/vue-query/src/queryClient.ts +++ b/packages/vue-query/src/queryClient.ts @@ -156,14 +156,7 @@ export class QueryClient extends QC { TTaggedQueryKey extends QueryKey = QueryKey, TInferredQueryFnData = InferDataFromTag, TInferredError = InferErrorFromTag, - >( - filters?: QueryFilters< - TInferredQueryFnData, - TInferredError, - TInferredQueryFnData, - TTaggedQueryKey - >, - ): void + >(filters?: QueryFilters): void removeQueries(filters: MaybeRefDeep = {}): void { return super.removeQueries(cloneDeepUnref(filters)) } @@ -175,12 +168,7 @@ export class QueryClient extends QC { TInferredQueryFnData = InferDataFromTag, TInferredError = InferErrorFromTag, >( - filters?: QueryFilters< - TInferredQueryFnData, - TInferredError, - TInferredQueryFnData, - TTaggedQueryKey - >, + filters?: QueryFilters, options?: MaybeRefDeep, ): Promise resetQueries( @@ -197,12 +185,7 @@ export class QueryClient extends QC { TInferredQueryFnData = InferDataFromTag, TInferredError = InferErrorFromTag, >( - filters?: QueryFilters< - TInferredQueryFnData, - TInferredError, - TInferredQueryFnData, - TTaggedQueryKey - >, + filters?: QueryFilters, options?: MaybeRefDeep, ): Promise cancelQueries( @@ -219,29 +202,11 @@ export class QueryClient extends QC { TInferredQueryFnData = InferDataFromTag, TInferredError = InferErrorFromTag, >( - filters?: InvalidateQueryFilters< - TInferredQueryFnData, - TInferredError, - TInferredQueryFnData, - TTaggedQueryKey - >, + filters?: InvalidateQueryFilters, options?: MaybeRefDeep, ): Promise - invalidateQueries< - TQueryFnData = unknown, - TError = DefaultError, - TTaggedQueryKey extends QueryKey = QueryKey, - TInferredQueryFnData = InferDataFromTag, - TInferredError = InferErrorFromTag, - >( - filters: MaybeRefDeep< - InvalidateQueryFilters< - TInferredQueryFnData, - TInferredError, - TInferredQueryFnData, - TTaggedQueryKey - > - > = {}, + invalidateQueries( + filters: MaybeRefDeep> = {}, options: MaybeRefDeep = {}, ): Promise { const filtersCloned = cloneDeepUnref(filters) @@ -256,12 +221,7 @@ export class QueryClient extends QC { return Promise.resolve() } - const refetchFilters: RefetchQueryFilters< - TInferredQueryFnData, - TInferredError, - TInferredQueryFnData, - TTaggedQueryKey - > = { + const refetchFilters: RefetchQueryFilters = { ...filtersCloned, type: filtersCloned.refetchType ?? filtersCloned.type ?? 'active', } @@ -280,12 +240,7 @@ export class QueryClient extends QC { TInferredQueryFnData = InferDataFromTag, TInferredError = InferErrorFromTag, >( - filters?: RefetchQueryFilters< - TInferredQueryFnData, - TInferredError, - TInferredQueryFnData, - TTaggedQueryKey - >, + filters?: RefetchQueryFilters, options?: MaybeRefDeep, ): Promise refetchQueries(