From 3d7340986a9950cdc1db42a43c080fd19241271a Mon Sep 17 00:00:00 2001 From: lbo728 Date: Wed, 22 Jul 2026 11:05:31 +0900 Subject: [PATCH] fix(vue-query): unwrap getter options in fetchQuery --- .changeset/vue-query-fetch-query-getter-options.md | 5 +++++ .../vue-query/src/__tests__/queryClient.test.ts | 14 ++++++++++++++ packages/vue-query/src/queryClient.ts | 12 ++++++++++-- 3 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 .changeset/vue-query-fetch-query-getter-options.md diff --git a/.changeset/vue-query-fetch-query-getter-options.md b/.changeset/vue-query-fetch-query-getter-options.md new file mode 100644 index 00000000000..7e6d0c4307f --- /dev/null +++ b/.changeset/vue-query-fetch-query-getter-options.md @@ -0,0 +1,5 @@ +--- +"@tanstack/vue-query": patch +--- + +Unwrap getter function options passed to `queryClient.fetchQuery`. diff --git a/packages/vue-query/src/__tests__/queryClient.test.ts b/packages/vue-query/src/__tests__/queryClient.test.ts index 61f17739f9d..fb9f3456b98 100644 --- a/packages/vue-query/src/__tests__/queryClient.test.ts +++ b/packages/vue-query/src/__tests__/queryClient.test.ts @@ -338,6 +338,20 @@ describe('QueryCache', () => { queryKey: queryKeyUnref, }) }) + + it('should unwrap getter function options', () => { + const queryClient = new QueryClient() + + queryClient.fetchQuery(() => ({ + queryKey: queryKeyRef, + queryFn: fn, + })) + + expect(QueryClientOrigin.prototype.fetchQuery).toHaveBeenCalledWith({ + queryKey: queryKeyUnref, + queryFn: fn, + }) + }) }) describe('prefetchQuery', () => { diff --git a/packages/vue-query/src/queryClient.ts b/packages/vue-query/src/queryClient.ts index b9f78e26c17..9ecce289f7a 100644 --- a/packages/vue-query/src/queryClient.ts +++ b/packages/vue-query/src/queryClient.ts @@ -33,6 +33,14 @@ import type { Updater, } from '@tanstack/query-core' +type MaybeRefDeepOrGetter = MaybeRefDeep | (() => T) + +function cloneDeepUnrefOrGet(value: MaybeRefDeepOrGetter): T { + const unwrapped = typeof value === 'function' ? (value as () => T)() : value + + return cloneDeepUnref(unwrapped as MaybeRefDeep) +} + export class QueryClient extends QC { constructor(config: QueryClientConfig = {}) { const vueQueryConfig = { @@ -301,11 +309,11 @@ export class QueryClient extends QC { TQueryKey extends QueryKey = QueryKey, TPageParam = never, >( - options: MaybeRefDeep< + options: MaybeRefDeepOrGetter< FetchQueryOptions >, ): Promise { - return super.fetchQuery(cloneDeepUnref(options)) + return super.fetchQuery(cloneDeepUnrefOrGet(options)) } prefetchQuery<