From a870126055a96125fa95a4c3d1d0954890b4e9af Mon Sep 17 00:00:00 2001 From: Dominik Dorfmeister Date: Fri, 7 Apr 2023 21:03:32 +0200 Subject: [PATCH 1/2] fix: do not mutate input params passed to function from consumers should be treated as readonly and thus shouldn't be modified --- packages/query-core/src/mutationCache.ts | 8 ++++---- packages/query-core/src/queryCache.ts | 10 ++++------ packages/query-core/src/queryClient.ts | 6 ++---- 3 files changed, 10 insertions(+), 14 deletions(-) diff --git a/packages/query-core/src/mutationCache.ts b/packages/query-core/src/mutationCache.ts index 5a47c8d35c..64ce65cb30 100644 --- a/packages/query-core/src/mutationCache.ts +++ b/packages/query-core/src/mutationCache.ts @@ -139,11 +139,11 @@ export class MutationCache extends Subscribable { >( filters: MutationFilters, ): Mutation | undefined { - if (typeof filters.exact === 'undefined') { - filters.exact = true - } + const defaultedFilters = { exact: true, ...filters } - return this.#mutations.find((mutation) => matchMutation(filters, mutation)) + return this.#mutations.find((mutation) => + matchMutation(defaultedFilters, mutation), + ) } findAll(filters: MutationFilters = {}): Mutation[] { diff --git a/packages/query-core/src/queryCache.ts b/packages/query-core/src/queryCache.ts index 7b9c6f9efc..0b36901638 100644 --- a/packages/query-core/src/queryCache.ts +++ b/packages/query-core/src/queryCache.ts @@ -176,13 +176,11 @@ export class QueryCache extends Subscribable { find( filters: WithRequired, ): Query | undefined { - if (typeof filters.exact === 'undefined') { - filters.exact = true - } + const defaultedFilters = { exact: true, ...filters } - return this.getAll().find((query) => matchQuery(filters, query)) as - | Query - | undefined + return this.getAll().find((query) => + matchQuery(defaultedFilters, query), + ) as Query | undefined } findAll(filters: QueryFilters = {}): Query[] { diff --git a/packages/query-core/src/queryClient.ts b/packages/query-core/src/queryClient.ts index 9ca09d02bc..b7eb8867a6 100644 --- a/packages/query-core/src/queryClient.ts +++ b/packages/query-core/src/queryClient.ts @@ -212,14 +212,12 @@ export class QueryClient { filters: QueryFilters = {}, cancelOptions: CancelOptions = {}, ): Promise { - if (typeof cancelOptions.revert === 'undefined') { - cancelOptions.revert = true - } + const defaultedCancelOptions = { revert: true, ...cancelOptions } const promises = notifyManager.batch(() => this.#queryCache .findAll(filters) - .map((query) => query.cancel(cancelOptions)), + .map((query) => query.cancel(defaultedCancelOptions)), ) return Promise.all(promises).then(noop).catch(noop) From 67ebbdf829d77ca45426113fb7e88918f2bb34b8 Mon Sep 17 00:00:00 2001 From: Damian Osipiuk Date: Tue, 11 Apr 2023 22:09:44 +0200 Subject: [PATCH 2/2] test: remove unexpected `exact` props from find methods --- packages/vue-query/src/__tests__/mutationCache.test.ts | 1 - packages/vue-query/src/__tests__/queryCache.test.ts | 1 - 2 files changed, 2 deletions(-) diff --git a/packages/vue-query/src/__tests__/mutationCache.test.ts b/packages/vue-query/src/__tests__/mutationCache.test.ts index bd57f9e26c..d5e97fba34 100644 --- a/packages/vue-query/src/__tests__/mutationCache.test.ts +++ b/packages/vue-query/src/__tests__/mutationCache.test.ts @@ -19,7 +19,6 @@ describe('MutationCache', () => { }) expect(MutationCacheOrigin.prototype.find).toBeCalledWith({ - exact: true, mutationKey: ['baz'], }) }) diff --git a/packages/vue-query/src/__tests__/queryCache.test.ts b/packages/vue-query/src/__tests__/queryCache.test.ts index 90a277d5b6..9dace11432 100644 --- a/packages/vue-query/src/__tests__/queryCache.test.ts +++ b/packages/vue-query/src/__tests__/queryCache.test.ts @@ -20,7 +20,6 @@ describe('QueryCache', () => { expect(QueryCacheOrigin.prototype.find).toBeCalledWith({ queryKey: ['foo', 'bar'], - exact: true, //Exact is true, as `find` in QueryCacheOrigin sets exact to true in the passed filters if exact is undefined }) }) })