Uh oh!
There was an error while loading. Please reload this page.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
Repository: TanStack/query
Length of output: 50371
🏁 Script executed:
Repository: TanStack/query
Length of output: 6963
🏁 Script executed:
Repository: TanStack/query
Length of output: 3128
🏁 Script executed:
Repository: TanStack/query
Length of output: 8707
🌐 Web query:
packages/vue-query/src/queryClient.ts MaybeRefDeepOrGetter FetchQueryOptions vue query getter deep refs💡 Result:
In TanStack Vue Query,
MaybeRefDeepOrGetteris a type utility introduced to support bothMaybeRef(Vue refs) and getter functions (() => T) within query options [1]. This allows for more flexible, reactive configurations that can handle complex, nested structures [1]. ### Core Concepts * MaybeRefDeep: Recursively transforms properties of typeTintoMaybeRef<T>, allowing deep reactivity where individual properties of an options object can be Vue refs [2]. * MaybeRefOrGetter: A union type (MaybeRef<T> | (() => T)) that allows passing either a static value, a Vue ref, or a getter function [2]. * MaybeRefDeepOrGetter: Extends the concept to handle deeply reactive objects while also permitting the entire object (or specific parts of it) to be returned by a getter function [1]. ### Technical Context in queryClient.ts Inpackages/vue-query/src/queryClient.ts, methods likefetchQueryandprefetchQueryutilize these type utilities to normalize incoming options [3][4]. Specifically, these methods applycloneDeepUnrefto the options object before passing them to the underlyingquery-coreimplementation [3][4].cloneDeepUnrefis a utility defined inpackages/vue-query/src/utils.tsthat performs several key tasks [5]: 1. Deep Unwrapping: It recursively traverses the options object to unwrapRefvalues [5]. 2. Getter Resolution: It can be configured (by settingunrefGettersto true) to execute getter functions, allowing it to resolve reactive dependencies even when they are wrapped in functions rather than just refs [5]. 3. Integration: This mechanism bridges the gap between Vue's reactive system and the imperative, static-options-based nature of the core TanStack Query library [3][5]. ### Recent Developments Recent PRs and issues indicate ongoing refinements to these type utilities to ensure that getters and plain properties are handled correctly across all query methods, such asensureQueryDataandfetchQuery[6][7]. The goal of these changes is to maintain strict TypeScript compatibility while providing a seamless developer experience that mirrors howuseQueryhandles reactive options [6][1].Citations:
queryOptionsinsideensureQueryData#6477🏁 Script executed:
Repository: TanStack/query
Length of output: 192
🏁 Script executed:
Repository: TanStack/query
Length of output: 9424
Allow deep refs in
fetchQuerygetters.cloneDeepUnrefOrGet()unwraps getter results, but thefetchQueryoverload still types the getter branch as() => FetchQueryOptions<...>. That rejects getters returning ref-bearing options even though runtime accepts them. Change it to() => MaybeRefDeep<FetchQueryOptions<...>>so the type surface matches behavior.🤖 Prompt for AI Agents