diff --git a/docs/framework/angular/guides/disabling-queries.md b/docs/framework/angular/guides/disabling-queries.md
index 10f29cdf52..8d707e235f 100644
--- a/docs/framework/angular/guides/disabling-queries.md
+++ b/docs/framework/angular/guides/disabling-queries.md
@@ -67,3 +67,27 @@ export class TodosComponent {
```
[//]: # 'Example2'
+[//]: # 'Example3'
+
+```ts
+@Component({
+ selector: 'todos',
+ template: `
+
+ // 🚀 applying the filter will enable and execute the query
+
+
+
+ `,
+})
+export class TodosComponent {
+ filter = signal('')
+
+ todosQuery = injectQuery(() => ({
+ queryKey: ['todos', this.filter()],
+ queryFn: this.filter ? () => fetchTodos(this.filter()) : skipToken,
+ }))
+}
+```
+
+[//]: # 'Example3'
diff --git a/docs/framework/react/guides/disabling-queries.md b/docs/framework/react/guides/disabling-queries.md
index 9de977e0d0..f7ad9b212e 100644
--- a/docs/framework/react/guides/disabling-queries.md
+++ b/docs/framework/react/guides/disabling-queries.md
@@ -12,7 +12,9 @@ When `enabled` is `false`:
- The query will not automatically fetch on mount.
- The query will not automatically refetch in the background.
- The query will ignore query client `invalidateQueries` and `refetchQueries` calls that would normally result in the query refetching.
-- `refetch` returned from `useQuery` can be used to manually trigger the query to fetch.
+- `refetch` returned from `useQuery` can be used to manually trigger the query to fetch. However, it will not work with `skipToken`.
+
+> Typescript users may prefer to use [skipToken](#typesafe-disabling-of-queries-using-skiptoken) as an alternative to `enabled = false`.
[//]: # 'Example'
@@ -92,3 +94,33 @@ If you are using disabled or lazy queries, you can use the `isLoading` flag inst
`isPending && isFetching`
so it will only be true if the query is currently fetching for the first time.
+
+## Typesafe disabling of queries using `skipToken`
+
+If you are using TypeScript, you can use the `skipToken` to disable a query. This is useful when you want to disable a query based on a condition, but you still want to keep the query to be type safe.
+
+> IMPORTANT: `refetch` from `useQuery` will not work with `skipToken`. Other than that, `skipToken` works the same as `enabled: false`.
+
+[//]: # 'Example3'
+
+```tsx
+function Todos() {
+ const [filter, setFilter] = React.useState()
+
+ const { data } = useQuery({
+ queryKey: ['todos', filter],
+ // ⬇️ disabled as long as the filter is undefined or empty
+ queryFn: filter ? () => fetchTodos(filter) : skipToken,
+ })
+
+ return (
+
+ // 🚀 applying the filter will enable and execute the query
+
+ {data &&
+
+ )
+}
+```
+
+[//]: # 'Example3'
diff --git a/docs/framework/react/react-native.md b/docs/framework/react/react-native.md
index 88f400f34c..d773cb730c 100644
--- a/docs/framework/react/react-native.md
+++ b/docs/framework/react/react-native.md
@@ -138,6 +138,6 @@ function MyComponent() {
notifyOnChangeProps,
})
- return DataUpdatedAt: {dataUpdatedAt}
+ return DataUpdatedAt: {dataUpdatedAt}
}
```
diff --git a/docs/framework/react/typescript.md b/docs/framework/react/typescript.md
index 36a6f8d210..acf4b8d544 100644
--- a/docs/framework/react/typescript.md
+++ b/docs/framework/react/typescript.md
@@ -227,3 +227,8 @@ For tips and tricks around type inference, have a look at [React Query and TypeS
the Community Resources. To find out how to get the best possible type-safety, you can read [Type-safe React Query](./community/tkdodos-blog#19-type-safe-react-query).
[//]: # 'Materials'
+
+## Typesafe disabling of queries using `skipToken`
+
+If you are using TypeScript, you can use the `skipToken` to disable a query. This is useful when you want to disable a query based on a condition, but you still want to keep the query to be type safe.
+Read more about it in the [Disabling Queries](./guides/disabling-queries.md) guide.
diff --git a/docs/framework/vue/guides/disabling-queries.md b/docs/framework/vue/guides/disabling-queries.md
index 6f1434d07d..bd0de7532f 100644
--- a/docs/framework/vue/guides/disabling-queries.md
+++ b/docs/framework/vue/guides/disabling-queries.md
@@ -53,3 +53,24 @@ const { data } = useQuery({
```
[//]: # 'Example2'
+[//]: # 'Example3'
+
+```vue
+
+
+
+ Filter was set and data is here!
+
+```
+
+[//]: # 'Example3'
diff --git a/examples/angular/basic/package.json b/examples/angular/basic/package.json
index e9dc2dc6a4..d22b458d8a 100644
--- a/examples/angular/basic/package.json
+++ b/examples/angular/basic/package.json
@@ -17,7 +17,7 @@
"@angular/platform-browser": "^17.1.3",
"@angular/platform-browser-dynamic": "^17.1.3",
"@angular/router": "^17.1.3",
- "@tanstack/angular-query-experimental": "^5.24.8",
+ "@tanstack/angular-query-experimental": "^5.25.0",
"rxjs": "^7.8.1",
"tslib": "^2.6.2",
"zone.js": "^0.14.3"
@@ -26,7 +26,7 @@
"@angular-devkit/build-angular": "^17.1.3",
"@angular/cli": "^17.1.3",
"@angular/compiler-cli": "^17.1.3",
- "@tanstack/angular-query-devtools-experimental": "^5.24.8",
+ "@tanstack/angular-query-devtools-experimental": "^5.25.0",
"typescript": "5.2.2"
},
"overrides": {
diff --git a/examples/angular/infinite-query-with-max-pages/package.json b/examples/angular/infinite-query-with-max-pages/package.json
index fcaf73671c..91a8201481 100644
--- a/examples/angular/infinite-query-with-max-pages/package.json
+++ b/examples/angular/infinite-query-with-max-pages/package.json
@@ -17,7 +17,7 @@
"@angular/platform-browser": "^17.1.3",
"@angular/platform-browser-dynamic": "^17.1.3",
"@angular/router": "^17.1.3",
- "@tanstack/angular-query-experimental": "^5.24.8",
+ "@tanstack/angular-query-experimental": "^5.25.0",
"rxjs": "^7.8.1",
"tslib": "^2.6.2",
"zone.js": "^0.14.3"
@@ -26,7 +26,7 @@
"@angular-devkit/build-angular": "^17.1.3",
"@angular/cli": "^17.1.3",
"@angular/compiler-cli": "^17.1.3",
- "@tanstack/angular-query-devtools-experimental": "^5.24.8",
+ "@tanstack/angular-query-devtools-experimental": "^5.25.0",
"typescript": "5.2.2"
},
"overrides": {
diff --git a/examples/angular/router/package.json b/examples/angular/router/package.json
index fe674a1bee..8f82524bd7 100644
--- a/examples/angular/router/package.json
+++ b/examples/angular/router/package.json
@@ -17,7 +17,7 @@
"@angular/platform-browser": "^17.1.3",
"@angular/platform-browser-dynamic": "^17.1.3",
"@angular/router": "^17.1.3",
- "@tanstack/angular-query-experimental": "^5.24.8",
+ "@tanstack/angular-query-experimental": "^5.25.0",
"rxjs": "^7.8.1",
"tslib": "^2.6.2",
"zone.js": "^0.14.3"
@@ -26,7 +26,7 @@
"@angular-devkit/build-angular": "^17.1.3",
"@angular/cli": "^17.1.3",
"@angular/compiler-cli": "^17.1.3",
- "@tanstack/angular-query-devtools-experimental": "^5.24.8",
+ "@tanstack/angular-query-devtools-experimental": "^5.25.0",
"typescript": "5.2.2"
},
"overrides": {
diff --git a/examples/angular/simple/package.json b/examples/angular/simple/package.json
index 3a3cca6351..0fb3864ad0 100644
--- a/examples/angular/simple/package.json
+++ b/examples/angular/simple/package.json
@@ -17,7 +17,7 @@
"@angular/platform-browser": "^17.1.3",
"@angular/platform-browser-dynamic": "^17.1.3",
"@angular/router": "^17.1.3",
- "@tanstack/angular-query-experimental": "^5.24.8",
+ "@tanstack/angular-query-experimental": "^5.25.0",
"rxjs": "^7.8.1",
"tslib": "^2.6.2",
"zone.js": "^0.14.3"
@@ -26,7 +26,7 @@
"@angular-devkit/build-angular": "^17.1.3",
"@angular/cli": "^17.1.3",
"@angular/compiler-cli": "^17.1.3",
- "@tanstack/angular-query-devtools-experimental": "^5.24.8",
+ "@tanstack/angular-query-devtools-experimental": "^5.25.0",
"typescript": "5.2.2"
},
"overrides": {
diff --git a/examples/react/algolia/package.json b/examples/react/algolia/package.json
index 1eb9ad9d31..e11879130e 100644
--- a/examples/react/algolia/package.json
+++ b/examples/react/algolia/package.json
@@ -11,8 +11,8 @@
"dependencies": {
"@algolia/client-search": "4.22.1",
"@algolia/transporter": "4.22.1",
- "@tanstack/react-query": "^5.24.8",
- "@tanstack/react-query-devtools": "^5.24.8",
+ "@tanstack/react-query": "^5.25.0",
+ "@tanstack/react-query-devtools": "^5.25.0",
"algoliasearch": "4.22.1",
"react": "^18.2.0",
"react-dom": "^18.2.0"
diff --git a/examples/react/algolia/src/SearchResults.tsx b/examples/react/algolia/src/SearchResults.tsx
index 59b353a7dd..9298419931 100644
--- a/examples/react/algolia/src/SearchResults.tsx
+++ b/examples/react/algolia/src/SearchResults.tsx
@@ -25,7 +25,6 @@ export default function SearchResults({ query = '' }: SearchResultsProps) {
hitsPerPage: 5,
staleTime: 1000 * 30, // 30s
gcTime: 1000 * 60 * 15, // 15m
- enabled: !!query,
})
if (!query) return null
diff --git a/examples/react/algolia/src/useAlgolia.ts b/examples/react/algolia/src/useAlgolia.ts
index 0199589a78..3c0fb2eec7 100644
--- a/examples/react/algolia/src/useAlgolia.ts
+++ b/examples/react/algolia/src/useAlgolia.ts
@@ -1,4 +1,4 @@
-import { useInfiniteQuery } from '@tanstack/react-query'
+import { useInfiniteQuery, skipToken } from '@tanstack/react-query'
import { search } from './algolia'
export type UseAlgoliaOptions = {
@@ -7,7 +7,6 @@ export type UseAlgoliaOptions = {
hitsPerPage?: number
staleTime?: number
gcTime?: number
- enabled?: boolean
}
export default function useAlgolia({
@@ -16,17 +15,17 @@ export default function useAlgolia({
hitsPerPage = 10,
staleTime,
gcTime,
- enabled,
}: UseAlgoliaOptions) {
const queryInfo = useInfiniteQuery({
queryKey: ['algolia', indexName, query, hitsPerPage],
- queryFn: ({ pageParam }) =>
- search({ indexName, query, pageParam, hitsPerPage }),
+ queryFn: query
+ ? ({ pageParam }) =>
+ search({ indexName, query, pageParam, hitsPerPage })
+ : skipToken,
initialPageParam: 0,
getNextPageParam: (lastPage) => lastPage?.nextPage,
staleTime,
gcTime,
- enabled,
})
const hits = queryInfo.data?.pages.map((page) => page.hits).flat()
diff --git a/examples/react/auto-refetching/package.json b/examples/react/auto-refetching/package.json
index 58c7d57215..5e9c1d2df4 100644
--- a/examples/react/auto-refetching/package.json
+++ b/examples/react/auto-refetching/package.json
@@ -7,8 +7,8 @@
"start": "next start"
},
"dependencies": {
- "@tanstack/react-query": "^5.24.8",
- "@tanstack/react-query-devtools": "^5.24.8",
+ "@tanstack/react-query": "^5.25.0",
+ "@tanstack/react-query-devtools": "^5.25.0",
"axios": "^1.6.7",
"isomorphic-unfetch": "4.0.2",
"next": "^14.0.0",
diff --git a/examples/react/basic-graphql-request/package.json b/examples/react/basic-graphql-request/package.json
index a91357cc18..52f6d0fe35 100644
--- a/examples/react/basic-graphql-request/package.json
+++ b/examples/react/basic-graphql-request/package.json
@@ -8,8 +8,8 @@
"preview": "vite preview"
},
"dependencies": {
- "@tanstack/react-query": "^5.24.8",
- "@tanstack/react-query-devtools": "^5.24.8",
+ "@tanstack/react-query": "^5.25.0",
+ "@tanstack/react-query-devtools": "^5.25.0",
"graphql": "^16.8.1",
"graphql-request": "^6.1.0",
"react": "^18.2.0",
diff --git a/examples/react/basic-typescript/package.json b/examples/react/basic-typescript/package.json
index 186096e070..7705aef431 100644
--- a/examples/react/basic-typescript/package.json
+++ b/examples/react/basic-typescript/package.json
@@ -9,10 +9,10 @@
"test:types": "tsc"
},
"dependencies": {
- "@tanstack/query-sync-storage-persister": "^5.24.8",
- "@tanstack/react-query": "^5.24.8",
- "@tanstack/react-query-devtools": "^5.24.8",
- "@tanstack/react-query-persist-client": "^5.24.8",
+ "@tanstack/query-sync-storage-persister": "^5.25.0",
+ "@tanstack/react-query": "^5.25.0",
+ "@tanstack/react-query-devtools": "^5.25.0",
+ "@tanstack/react-query-persist-client": "^5.25.0",
"axios": "^1.6.7",
"react": "^18.2.0",
"react-dom": "^18.2.0"
diff --git a/examples/react/basic-typescript/src/index.tsx b/examples/react/basic-typescript/src/index.tsx
index 34b931bbc4..09d700c7c1 100644
--- a/examples/react/basic-typescript/src/index.tsx
+++ b/examples/react/basic-typescript/src/index.tsx
@@ -2,7 +2,12 @@
import * as React from 'react'
import ReactDOM from 'react-dom/client'
import axios from 'axios'
-import { useQuery, useQueryClient, QueryClient } from '@tanstack/react-query'
+import {
+ QueryClient,
+ skipToken,
+ useQuery,
+ useQueryClient,
+} from '@tanstack/react-query'
import { PersistQueryClientProvider } from '@tanstack/react-query-persist-client'
import { createSyncStoragePersister } from '@tanstack/query-sync-storage-persister'
import { ReactQueryDevtools } from '@tanstack/react-query-devtools'
@@ -95,8 +100,7 @@ const getPostById = async (id: number): Promise => {
function usePost(postId: number) {
return useQuery({
queryKey: ['post', postId],
- queryFn: () => getPostById(postId),
- enabled: !!postId,
+ queryFn: postId ? () => getPostById(postId) : skipToken,
})
}
diff --git a/examples/react/basic/package.json b/examples/react/basic/package.json
index 81f4a39b72..644dbc7105 100644
--- a/examples/react/basic/package.json
+++ b/examples/react/basic/package.json
@@ -8,8 +8,8 @@
"preview": "vite preview"
},
"dependencies": {
- "@tanstack/react-query": "^5.24.8",
- "@tanstack/react-query-devtools": "^5.24.8",
+ "@tanstack/react-query": "^5.25.0",
+ "@tanstack/react-query-devtools": "^5.25.0",
"axios": "^1.6.7",
"react": "^18.2.0",
"react-dom": "^18.2.0"
diff --git a/examples/react/default-query-function/package.json b/examples/react/default-query-function/package.json
index fd51caba5b..13ead2c7dc 100644
--- a/examples/react/default-query-function/package.json
+++ b/examples/react/default-query-function/package.json
@@ -8,8 +8,8 @@
"preview": "vite preview"
},
"dependencies": {
- "@tanstack/react-query": "^5.24.8",
- "@tanstack/react-query-devtools": "^5.24.8",
+ "@tanstack/react-query": "^5.25.0",
+ "@tanstack/react-query-devtools": "^5.25.0",
"axios": "^1.6.7",
"react": "^18.2.0",
"react-dom": "^18.2.0"
diff --git a/examples/react/infinite-query-with-max-pages/package.json b/examples/react/infinite-query-with-max-pages/package.json
index 581fa01d36..3b9d552cc8 100644
--- a/examples/react/infinite-query-with-max-pages/package.json
+++ b/examples/react/infinite-query-with-max-pages/package.json
@@ -7,8 +7,8 @@
"start": "next start"
},
"dependencies": {
- "@tanstack/react-query": "^5.24.8",
- "@tanstack/react-query-devtools": "^5.24.8",
+ "@tanstack/react-query": "^5.25.0",
+ "@tanstack/react-query-devtools": "^5.25.0",
"axios": "^1.6.7",
"isomorphic-unfetch": "4.0.2",
"next": "^14.0.0",
diff --git a/examples/react/load-more-infinite-scroll/package.json b/examples/react/load-more-infinite-scroll/package.json
index c0a7e9e1ff..3a6468a603 100644
--- a/examples/react/load-more-infinite-scroll/package.json
+++ b/examples/react/load-more-infinite-scroll/package.json
@@ -7,8 +7,8 @@
"start": "next start"
},
"dependencies": {
- "@tanstack/react-query": "^5.24.8",
- "@tanstack/react-query-devtools": "^5.24.8",
+ "@tanstack/react-query": "^5.25.0",
+ "@tanstack/react-query-devtools": "^5.25.0",
"axios": "^1.6.7",
"isomorphic-unfetch": "4.0.2",
"next": "^14.0.0",
diff --git a/examples/react/nextjs-suspense-streaming/package.json b/examples/react/nextjs-suspense-streaming/package.json
index e05d886f93..18a9773985 100644
--- a/examples/react/nextjs-suspense-streaming/package.json
+++ b/examples/react/nextjs-suspense-streaming/package.json
@@ -8,9 +8,9 @@
"test:types": "tsc"
},
"dependencies": {
- "@tanstack/react-query": "^5.24.8",
- "@tanstack/react-query-devtools": "^5.24.8",
- "@tanstack/react-query-next-experimental": "^5.24.8",
+ "@tanstack/react-query": "^5.25.0",
+ "@tanstack/react-query-devtools": "^5.25.0",
+ "@tanstack/react-query-next-experimental": "^5.25.0",
"next": "^14.0.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
diff --git a/examples/react/nextjs/package.json b/examples/react/nextjs/package.json
index 91f7d98ac6..1c5e642ecd 100644
--- a/examples/react/nextjs/package.json
+++ b/examples/react/nextjs/package.json
@@ -7,8 +7,8 @@
"start": "next start"
},
"dependencies": {
- "@tanstack/react-query": "^5.24.8",
- "@tanstack/react-query-devtools": "^5.24.8",
+ "@tanstack/react-query": "^5.25.0",
+ "@tanstack/react-query-devtools": "^5.25.0",
"ky": "^1.2.0",
"next": "^14.0.0",
"react": "^18.2.0",
diff --git a/examples/react/offline/package.json b/examples/react/offline/package.json
index 4dd4b2720b..efcd0317a2 100644
--- a/examples/react/offline/package.json
+++ b/examples/react/offline/package.json
@@ -8,11 +8,11 @@
"preview": "vite preview"
},
"dependencies": {
- "@tanstack/query-sync-storage-persister": "^5.24.8",
+ "@tanstack/query-sync-storage-persister": "^5.25.0",
"@tanstack/react-location": "^3.7.4",
- "@tanstack/react-query": "^5.24.8",
- "@tanstack/react-query-devtools": "^5.24.8",
- "@tanstack/react-query-persist-client": "^5.24.8",
+ "@tanstack/react-query": "^5.25.0",
+ "@tanstack/react-query-devtools": "^5.25.0",
+ "@tanstack/react-query-persist-client": "^5.25.0",
"ky": "^1.2.0",
"msw": "^2.1.7",
"react": "^18.2.0",
diff --git a/examples/react/optimistic-updates-cache/package.json b/examples/react/optimistic-updates-cache/package.json
index 8ae674e4b0..af1bfa6731 100755
--- a/examples/react/optimistic-updates-cache/package.json
+++ b/examples/react/optimistic-updates-cache/package.json
@@ -8,8 +8,8 @@
"test:types": "tsc"
},
"dependencies": {
- "@tanstack/react-query": "^5.24.8",
- "@tanstack/react-query-devtools": "^5.24.8",
+ "@tanstack/react-query": "^5.25.0",
+ "@tanstack/react-query-devtools": "^5.25.0",
"axios": "^1.6.7",
"isomorphic-unfetch": "4.0.2",
"next": "^14.0.0",
diff --git a/examples/react/optimistic-updates-ui/package.json b/examples/react/optimistic-updates-ui/package.json
index 0a42e13611..071a36efd3 100755
--- a/examples/react/optimistic-updates-ui/package.json
+++ b/examples/react/optimistic-updates-ui/package.json
@@ -7,8 +7,8 @@
"start": "next start"
},
"dependencies": {
- "@tanstack/react-query": "^5.24.8",
- "@tanstack/react-query-devtools": "^5.24.8",
+ "@tanstack/react-query": "^5.25.0",
+ "@tanstack/react-query-devtools": "^5.25.0",
"axios": "^1.6.7",
"isomorphic-unfetch": "4.0.2",
"next": "^14.0.0",
diff --git a/examples/react/pagination/package.json b/examples/react/pagination/package.json
index 12187da866..9553267f3e 100644
--- a/examples/react/pagination/package.json
+++ b/examples/react/pagination/package.json
@@ -7,8 +7,8 @@
"start": "next start"
},
"dependencies": {
- "@tanstack/react-query": "^5.24.8",
- "@tanstack/react-query-devtools": "^5.24.8",
+ "@tanstack/react-query": "^5.25.0",
+ "@tanstack/react-query-devtools": "^5.25.0",
"axios": "^1.6.7",
"isomorphic-unfetch": "4.0.2",
"next": "^14.0.0",
diff --git a/examples/react/playground/package.json b/examples/react/playground/package.json
index 1ae4f45673..10b816ff6d 100644
--- a/examples/react/playground/package.json
+++ b/examples/react/playground/package.json
@@ -8,8 +8,8 @@
"preview": "vite preview"
},
"dependencies": {
- "@tanstack/react-query": "^5.24.8",
- "@tanstack/react-query-devtools": "^5.24.8",
+ "@tanstack/react-query": "^5.25.0",
+ "@tanstack/react-query-devtools": "^5.25.0",
"react": "^18.2.0",
"react-dom": "^18.2.0"
},
diff --git a/examples/react/prefetching/package.json b/examples/react/prefetching/package.json
index 1c5ba1b5c4..dd72fd56b9 100644
--- a/examples/react/prefetching/package.json
+++ b/examples/react/prefetching/package.json
@@ -7,8 +7,8 @@
"start": "next start"
},
"dependencies": {
- "@tanstack/react-query": "^5.24.8",
- "@tanstack/react-query-devtools": "^5.24.8",
+ "@tanstack/react-query": "^5.25.0",
+ "@tanstack/react-query-devtools": "^5.25.0",
"axios": "^1.6.7",
"isomorphic-unfetch": "4.0.2",
"next": "^14.0.0",
diff --git a/examples/react/react-native/package.json b/examples/react/react-native/package.json
index 1eb624e540..7d3d70b99e 100644
--- a/examples/react/react-native/package.json
+++ b/examples/react/react-native/package.json
@@ -14,8 +14,8 @@
"@react-native-community/netinfo": "^11.1.0",
"@react-navigation/native": "^6.1.6",
"@react-navigation/stack": "^6.3.16",
- "@tanstack/react-query": "^5.24.8",
- "@tanstack/react-query-devtools": "^5.24.8",
+ "@tanstack/react-query": "^5.25.0",
+ "@tanstack/react-query-devtools": "^5.25.0",
"expo": "^50.0.6",
"expo-constants": "^15.4.5",
"expo-status-bar": "^1.11.1",
diff --git a/examples/react/react-router/package.json b/examples/react/react-router/package.json
index c17acc209a..114de1c966 100644
--- a/examples/react/react-router/package.json
+++ b/examples/react/react-router/package.json
@@ -9,8 +9,8 @@
"test:types": "tsc"
},
"dependencies": {
- "@tanstack/react-query": "^5.24.8",
- "@tanstack/react-query-devtools": "^5.24.8",
+ "@tanstack/react-query": "^5.25.0",
+ "@tanstack/react-query-devtools": "^5.25.0",
"localforage": "^1.10.0",
"match-sorter": "^6.3.4",
"react": "^18.2.0",
diff --git a/examples/react/rick-morty/package.json b/examples/react/rick-morty/package.json
index 988a51cd93..917aea5561 100644
--- a/examples/react/rick-morty/package.json
+++ b/examples/react/rick-morty/package.json
@@ -12,8 +12,8 @@
"@emotion/styled": "^11.11.0",
"@mui/material": "^5.15.2",
"@mui/styles": "^5.15.2",
- "@tanstack/react-query": "^5.24.8",
- "@tanstack/react-query-devtools": "^5.24.8",
+ "@tanstack/react-query": "^5.25.0",
+ "@tanstack/react-query-devtools": "^5.25.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-router": "^6.22.0",
diff --git a/examples/react/simple/package.json b/examples/react/simple/package.json
index c56bcf176f..086b476b4b 100644
--- a/examples/react/simple/package.json
+++ b/examples/react/simple/package.json
@@ -8,8 +8,8 @@
"preview": "vite preview"
},
"dependencies": {
- "@tanstack/react-query": "^5.24.8",
- "@tanstack/react-query-devtools": "^5.24.8",
+ "@tanstack/react-query": "^5.25.0",
+ "@tanstack/react-query-devtools": "^5.25.0",
"axios": "^1.6.7",
"react": "^18.2.0",
"react-dom": "^18.2.0"
diff --git a/examples/react/star-wars/package.json b/examples/react/star-wars/package.json
index 863bf15514..447e3877de 100644
--- a/examples/react/star-wars/package.json
+++ b/examples/react/star-wars/package.json
@@ -12,8 +12,8 @@
"@emotion/styled": "^11.11.0",
"@mui/material": "^5.15.2",
"@mui/styles": "^5.15.2",
- "@tanstack/react-query": "^5.24.8",
- "@tanstack/react-query-devtools": "^5.24.8",
+ "@tanstack/react-query": "^5.25.0",
+ "@tanstack/react-query-devtools": "^5.25.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-router": "^6.22.0",
diff --git a/examples/react/suspense/package.json b/examples/react/suspense/package.json
index 1cb8ee78cf..1ea2c141d7 100644
--- a/examples/react/suspense/package.json
+++ b/examples/react/suspense/package.json
@@ -3,8 +3,8 @@
"private": true,
"type": "module",
"dependencies": {
- "@tanstack/react-query": "^5.24.8",
- "@tanstack/react-query-devtools": "^5.24.8",
+ "@tanstack/react-query": "^5.25.0",
+ "@tanstack/react-query-devtools": "^5.25.0",
"axios": "^1.6.7",
"font-awesome": "^4.7.0",
"react": "^18.2.0",
diff --git a/examples/solid/basic-graphql-request/package.json b/examples/solid/basic-graphql-request/package.json
index f61208d480..83f5047b2b 100644
--- a/examples/solid/basic-graphql-request/package.json
+++ b/examples/solid/basic-graphql-request/package.json
@@ -9,8 +9,8 @@
"test:types": "tsc"
},
"dependencies": {
- "@tanstack/solid-query": "^5.24.8",
- "@tanstack/solid-query-devtools": "^5.24.8",
+ "@tanstack/solid-query": "^5.25.0",
+ "@tanstack/solid-query-devtools": "^5.25.0",
"graphql": "^16.8.1",
"graphql-request": "^6.1.0",
"solid-js": "^1.8.14"
diff --git a/examples/solid/basic-typescript/package.json b/examples/solid/basic-typescript/package.json
index 4321f200bc..0824231644 100644
--- a/examples/solid/basic-typescript/package.json
+++ b/examples/solid/basic-typescript/package.json
@@ -9,8 +9,8 @@
"test:types": "tsc"
},
"dependencies": {
- "@tanstack/solid-query": "^5.24.8",
- "@tanstack/solid-query-devtools": "^5.24.8",
+ "@tanstack/solid-query": "^5.25.0",
+ "@tanstack/solid-query-devtools": "^5.25.0",
"solid-js": "^1.8.14"
},
"devDependencies": {
diff --git a/examples/solid/default-query-function/package.json b/examples/solid/default-query-function/package.json
index 86d4e5dd90..0ace3fc4fd 100644
--- a/examples/solid/default-query-function/package.json
+++ b/examples/solid/default-query-function/package.json
@@ -9,8 +9,8 @@
"test:types": "tsc"
},
"dependencies": {
- "@tanstack/solid-query": "^5.24.8",
- "@tanstack/solid-query-devtools": "^5.24.8",
+ "@tanstack/solid-query": "^5.25.0",
+ "@tanstack/solid-query-devtools": "^5.25.0",
"solid-js": "^1.8.14"
},
"devDependencies": {
diff --git a/examples/solid/simple/package.json b/examples/solid/simple/package.json
index bc94352da8..cc1cb7bddc 100644
--- a/examples/solid/simple/package.json
+++ b/examples/solid/simple/package.json
@@ -9,8 +9,8 @@
"test:types": "tsc"
},
"dependencies": {
- "@tanstack/solid-query": "^5.24.8",
- "@tanstack/solid-query-devtools": "^5.24.8",
+ "@tanstack/solid-query": "^5.25.0",
+ "@tanstack/solid-query-devtools": "^5.25.0",
"solid-js": "^1.8.14"
},
"devDependencies": {
diff --git a/examples/solid/solid-start-streaming/package.json b/examples/solid/solid-start-streaming/package.json
index b9a60d9ad0..aaa5bf2fb4 100644
--- a/examples/solid/solid-start-streaming/package.json
+++ b/examples/solid/solid-start-streaming/package.json
@@ -11,8 +11,8 @@
"@solidjs/meta": "^0.29.3",
"@solidjs/router": "^0.12.0",
"@solidjs/start": "^0.5.4",
- "@tanstack/solid-query": "^5.24.8",
- "@tanstack/solid-query-devtools": "^5.24.8",
+ "@tanstack/solid-query": "^5.25.0",
+ "@tanstack/solid-query-devtools": "^5.25.0",
"solid-js": "^1.8.14",
"vinxi": "^0.3.3"
},
diff --git a/examples/svelte/auto-refetching/package.json b/examples/svelte/auto-refetching/package.json
index 5e436e5313..410c506602 100644
--- a/examples/svelte/auto-refetching/package.json
+++ b/examples/svelte/auto-refetching/package.json
@@ -9,8 +9,8 @@
"test:types": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json"
},
"dependencies": {
- "@tanstack/svelte-query": "^5.24.8",
- "@tanstack/svelte-query-devtools": "^5.24.8"
+ "@tanstack/svelte-query": "^5.25.0",
+ "@tanstack/svelte-query-devtools": "^5.25.0"
},
"devDependencies": {
"@sveltejs/adapter-auto": "^3.1.1",
diff --git a/examples/svelte/basic/package.json b/examples/svelte/basic/package.json
index 9d978697e1..51bf6a25d4 100644
--- a/examples/svelte/basic/package.json
+++ b/examples/svelte/basic/package.json
@@ -9,8 +9,8 @@
"test:types": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json"
},
"dependencies": {
- "@tanstack/svelte-query": "^5.24.8",
- "@tanstack/svelte-query-devtools": "^5.24.8"
+ "@tanstack/svelte-query": "^5.25.0",
+ "@tanstack/svelte-query-devtools": "^5.25.0"
},
"devDependencies": {
"@sveltejs/adapter-auto": "^3.1.1",
diff --git a/examples/svelte/load-more-infinite-scroll/package.json b/examples/svelte/load-more-infinite-scroll/package.json
index 3edf3e116d..cd39dc2ca5 100644
--- a/examples/svelte/load-more-infinite-scroll/package.json
+++ b/examples/svelte/load-more-infinite-scroll/package.json
@@ -9,8 +9,8 @@
"test:types": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json"
},
"dependencies": {
- "@tanstack/svelte-query": "^5.24.8",
- "@tanstack/svelte-query-devtools": "^5.24.8"
+ "@tanstack/svelte-query": "^5.25.0",
+ "@tanstack/svelte-query-devtools": "^5.25.0"
},
"devDependencies": {
"@sveltejs/adapter-auto": "^3.1.1",
diff --git a/examples/svelte/optimistic-updates-typescript/package.json b/examples/svelte/optimistic-updates-typescript/package.json
index 846be3cae2..7fdc38007f 100644
--- a/examples/svelte/optimistic-updates-typescript/package.json
+++ b/examples/svelte/optimistic-updates-typescript/package.json
@@ -9,8 +9,8 @@
"test:types": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json"
},
"dependencies": {
- "@tanstack/svelte-query": "^5.24.8",
- "@tanstack/svelte-query-devtools": "^5.24.8"
+ "@tanstack/svelte-query": "^5.25.0",
+ "@tanstack/svelte-query-devtools": "^5.25.0"
},
"devDependencies": {
"@sveltejs/adapter-auto": "^3.1.1",
diff --git a/examples/svelte/playground/package.json b/examples/svelte/playground/package.json
index efa09e9ff6..d9ead2fb3b 100644
--- a/examples/svelte/playground/package.json
+++ b/examples/svelte/playground/package.json
@@ -9,8 +9,8 @@
"test:types": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json"
},
"dependencies": {
- "@tanstack/svelte-query": "^5.24.8",
- "@tanstack/svelte-query-devtools": "^5.24.8"
+ "@tanstack/svelte-query": "^5.25.0",
+ "@tanstack/svelte-query-devtools": "^5.25.0"
},
"devDependencies": {
"@sveltejs/adapter-auto": "^3.1.1",
diff --git a/examples/svelte/simple/package.json b/examples/svelte/simple/package.json
index b8c9478083..97ed563f0e 100644
--- a/examples/svelte/simple/package.json
+++ b/examples/svelte/simple/package.json
@@ -9,8 +9,8 @@
"test:types": "svelte-check --tsconfig ./tsconfig.json"
},
"dependencies": {
- "@tanstack/svelte-query": "^5.24.8",
- "@tanstack/svelte-query-devtools": "^5.24.8"
+ "@tanstack/svelte-query": "^5.25.0",
+ "@tanstack/svelte-query-devtools": "^5.25.0"
},
"devDependencies": {
"@sveltejs/vite-plugin-svelte": "^3.0.2",
diff --git a/examples/svelte/ssr/package.json b/examples/svelte/ssr/package.json
index d70bb49a90..204efa5eb8 100644
--- a/examples/svelte/ssr/package.json
+++ b/examples/svelte/ssr/package.json
@@ -9,8 +9,8 @@
"test:types": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json"
},
"dependencies": {
- "@tanstack/svelte-query": "^5.24.8",
- "@tanstack/svelte-query-devtools": "^5.24.8"
+ "@tanstack/svelte-query": "^5.25.0",
+ "@tanstack/svelte-query-devtools": "^5.25.0"
},
"devDependencies": {
"@sveltejs/adapter-auto": "^3.1.1",
diff --git a/examples/svelte/star-wars/package.json b/examples/svelte/star-wars/package.json
index 29c6bc1c53..f9864c47b2 100644
--- a/examples/svelte/star-wars/package.json
+++ b/examples/svelte/star-wars/package.json
@@ -9,8 +9,8 @@
"test:types": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json"
},
"dependencies": {
- "@tanstack/svelte-query": "^5.24.8",
- "@tanstack/svelte-query-devtools": "^5.24.8"
+ "@tanstack/svelte-query": "^5.25.0",
+ "@tanstack/svelte-query-devtools": "^5.25.0"
},
"devDependencies": {
"@sveltejs/adapter-auto": "^3.1.1",
diff --git a/examples/vue/2.6-basic/package.json b/examples/vue/2.6-basic/package.json
index b13a45f38e..a77bab9347 100644
--- a/examples/vue/2.6-basic/package.json
+++ b/examples/vue/2.6-basic/package.json
@@ -8,7 +8,7 @@
"preview": "vite preview"
},
"dependencies": {
- "@tanstack/vue-query": "^5.24.8",
+ "@tanstack/vue-query": "^5.25.0",
"@vue/composition-api": "1.7.2",
"vue": "2.6.14",
"vue-template-compiler": "2.6.14"
diff --git a/examples/vue/basic/package.json b/examples/vue/basic/package.json
index f89d209818..db0e8c32fe 100644
--- a/examples/vue/basic/package.json
+++ b/examples/vue/basic/package.json
@@ -8,8 +8,8 @@
"preview": "vite preview"
},
"dependencies": {
- "@tanstack/vue-query": "^5.24.8",
- "@tanstack/vue-query-devtools": "^5.24.8",
+ "@tanstack/vue-query": "^5.25.0",
+ "@tanstack/vue-query-devtools": "^5.25.0",
"vue": "^3.3.0"
},
"devDependencies": {
diff --git a/examples/vue/dependent-queries/package.json b/examples/vue/dependent-queries/package.json
index 187a660822..521c7f279f 100644
--- a/examples/vue/dependent-queries/package.json
+++ b/examples/vue/dependent-queries/package.json
@@ -8,7 +8,7 @@
"preview": "vite preview"
},
"dependencies": {
- "@tanstack/vue-query": "^5.24.8",
+ "@tanstack/vue-query": "^5.25.0",
"vue": "^3.3.0"
},
"devDependencies": {
diff --git a/examples/vue/nuxt3/package.json b/examples/vue/nuxt3/package.json
index 5b66a3dace..f02791354c 100644
--- a/examples/vue/nuxt3/package.json
+++ b/examples/vue/nuxt3/package.json
@@ -7,7 +7,7 @@
"start": "node .output/server/index.mjs"
},
"dependencies": {
- "@tanstack/vue-query": "^5.24.8"
+ "@tanstack/vue-query": "^5.25.0"
},
"devDependencies": {
"nuxt": "^3.5.2"
diff --git a/examples/vue/persister/package.json b/examples/vue/persister/package.json
index 01fa2758f6..a35c64135b 100644
--- a/examples/vue/persister/package.json
+++ b/examples/vue/persister/package.json
@@ -8,10 +8,10 @@
"preview": "vite preview"
},
"dependencies": {
- "@tanstack/query-core": "^5.24.8",
- "@tanstack/query-persist-client-core": "^5.24.8",
- "@tanstack/query-sync-storage-persister": "^5.24.8",
- "@tanstack/vue-query": "^5.24.8",
+ "@tanstack/query-core": "^5.25.0",
+ "@tanstack/query-persist-client-core": "^5.25.0",
+ "@tanstack/query-sync-storage-persister": "^5.25.0",
+ "@tanstack/vue-query": "^5.25.0",
"idb-keyval": "^6.2.1",
"vue": "^3.3.0"
},
diff --git a/examples/vue/simple/package.json b/examples/vue/simple/package.json
index de1816108c..f97ca9175f 100644
--- a/examples/vue/simple/package.json
+++ b/examples/vue/simple/package.json
@@ -8,8 +8,8 @@
"preview": "vite preview"
},
"dependencies": {
- "@tanstack/vue-query": "^5.24.8",
- "@tanstack/vue-query-devtools": "^5.24.8",
+ "@tanstack/vue-query": "^5.25.0",
+ "@tanstack/vue-query-devtools": "^5.25.0",
"vue": "^3.3.0"
},
"devDependencies": {
diff --git a/packages/angular-query-devtools-experimental/package.json b/packages/angular-query-devtools-experimental/package.json
index d16c28edcb..f7f1ea548b 100644
--- a/packages/angular-query-devtools-experimental/package.json
+++ b/packages/angular-query-devtools-experimental/package.json
@@ -1,6 +1,6 @@
{
"name": "@tanstack/angular-query-devtools-experimental",
- "version": "5.24.8",
+ "version": "5.25.0",
"description": "Developer tools to interact with and visualize the TanStack/angular-query cache",
"author": "Arnoud de Vries",
"license": "MIT",
diff --git a/packages/angular-query-experimental/package.json b/packages/angular-query-experimental/package.json
index 1e7cf97fd1..f3534e29b8 100644
--- a/packages/angular-query-experimental/package.json
+++ b/packages/angular-query-experimental/package.json
@@ -1,6 +1,6 @@
{
"name": "@tanstack/angular-query-experimental",
- "version": "5.24.8",
+ "version": "5.25.0",
"description": "Signals for managing, caching and syncing asynchronous and remote data in Angular",
"author": "Arnoud de Vries",
"license": "MIT",
diff --git a/packages/angular-query-experimental/src/inject-queries.ts b/packages/angular-query-experimental/src/inject-queries.ts
index f5f722f270..7664e9148c 100644
--- a/packages/angular-query-experimental/src/inject-queries.ts
+++ b/packages/angular-query-experimental/src/inject-queries.ts
@@ -11,6 +11,7 @@ import type {
QueryKey,
QueryObserverOptions,
QueryObserverResult,
+ SkipToken,
ThrowOnError,
} from '@tanstack/query-core'
@@ -52,7 +53,9 @@ type GetOptions =
? QueryObserverOptionsForCreateQueries
: // Part 3: responsible for inferring and enforcing type if no explicit parameter was provided
T extends {
- queryFn?: QueryFunction
+ queryFn?:
+ | QueryFunction
+ | SkipToken
select: (data: any) => infer TData
throwOnError?: ThrowOnError
}
@@ -63,10 +66,9 @@ type GetOptions =
TQueryKey
>
: T extends {
- queryFn?: QueryFunction<
- infer TQueryFnData,
- infer TQueryKey
- >
+ queryFn?:
+ | QueryFunction
+ | SkipToken
throwOnError?: ThrowOnError
}
? QueryObserverOptionsForCreateQueries<
diff --git a/packages/query-async-storage-persister/package.json b/packages/query-async-storage-persister/package.json
index e0eea27e8e..386cc99d12 100644
--- a/packages/query-async-storage-persister/package.json
+++ b/packages/query-async-storage-persister/package.json
@@ -1,6 +1,6 @@
{
"name": "@tanstack/query-async-storage-persister",
- "version": "5.24.8",
+ "version": "5.25.0",
"description": "A persister for asynchronous storages, to be used with TanStack/Query",
"author": "tannerlinsley",
"license": "MIT",
diff --git a/packages/query-broadcast-client-experimental/package.json b/packages/query-broadcast-client-experimental/package.json
index b44114784e..63bfeffecf 100644
--- a/packages/query-broadcast-client-experimental/package.json
+++ b/packages/query-broadcast-client-experimental/package.json
@@ -1,6 +1,6 @@
{
"name": "@tanstack/query-broadcast-client-experimental",
- "version": "5.24.8",
+ "version": "5.25.0",
"description": "An experimental plugin to for broadcasting the state of your queryClient between browser tabs/windows",
"author": "tannerlinsley",
"license": "MIT",
diff --git a/packages/query-core/package.json b/packages/query-core/package.json
index ebb79d1a72..360a02b2d8 100644
--- a/packages/query-core/package.json
+++ b/packages/query-core/package.json
@@ -1,6 +1,6 @@
{
"name": "@tanstack/query-core",
- "version": "5.24.8",
+ "version": "5.25.0",
"description": "The framework agnostic core that powers TanStack Query",
"author": "tannerlinsley",
"license": "MIT",
diff --git a/packages/query-core/src/index.ts b/packages/query-core/src/index.ts
index 830a49f600..0d6dd2f264 100644
--- a/packages/query-core/src/index.ts
+++ b/packages/query-core/src/index.ts
@@ -20,8 +20,9 @@ export {
matchQuery,
matchMutation,
keepPreviousData,
+ skipToken,
} from './utils'
-export type { MutationFilters, QueryFilters, Updater } from './utils'
+export type { MutationFilters, QueryFilters, Updater, SkipToken } from './utils'
export { isCancelledError } from './retryer'
export {
dehydrate,
diff --git a/packages/query-core/src/infiniteQueryBehavior.ts b/packages/query-core/src/infiniteQueryBehavior.ts
index 73ddd9e51e..dd79ba8098 100644
--- a/packages/query-core/src/infiniteQueryBehavior.ts
+++ b/packages/query-core/src/infiniteQueryBehavior.ts
@@ -1,4 +1,4 @@
-import { addToEnd, addToStart } from './utils'
+import { addToEnd, addToStart, skipToken } from './utils'
import type { QueryBehavior } from './query'
import type {
InfiniteData,
@@ -38,11 +38,20 @@ export function infiniteQueryBehavior(
// Get query function
const queryFn =
- context.options.queryFn ||
- (() =>
- Promise.reject(
- new Error(`Missing queryFn: '${context.options.queryHash}'`),
- ))
+ context.options.queryFn && context.options.queryFn !== skipToken
+ ? context.options.queryFn
+ : () => {
+ if (process.env.NODE_ENV !== 'production') {
+ if (context.options.queryFn === skipToken) {
+ console.error(
+ `Attempted to invoke queryFn when set to skipToken. This is likely a configuration error. Query hash: '${context.options.queryHash}'`,
+ )
+ }
+ }
+ return Promise.reject(
+ new Error(`Missing queryFn: '${context.options.queryHash}'`),
+ )
+ }
// Create function to fetch a page
const fetchPage = async (
diff --git a/packages/query-core/src/query.ts b/packages/query-core/src/query.ts
index 6018f5071d..fcca677bdd 100644
--- a/packages/query-core/src/query.ts
+++ b/packages/query-core/src/query.ts
@@ -1,4 +1,4 @@
-import { noop, replaceData, timeUntilStale } from './utils'
+import { noop, replaceData, skipToken, timeUntilStale } from './utils'
import { notifyManager } from './notifyManager'
import { canFetch, createRetryer, isCancelledError } from './retryer'
import { Removable } from './removable'
@@ -387,11 +387,20 @@ export class Query<
// Create fetch function
const fetchFn = () => {
- if (!this.options.queryFn) {
+ if (process.env.NODE_ENV !== 'production') {
+ if (this.options.queryFn === skipToken) {
+ console.error(
+ `Attempted to invoke queryFn when set to skipToken. This is likely a configuration error. Query hash: '${this.options.queryHash}'`,
+ )
+ }
+ }
+
+ if (!this.options.queryFn || this.options.queryFn === skipToken) {
return Promise.reject(
new Error(`Missing queryFn: '${this.options.queryHash}'`),
)
}
+
this.#abortSignalConsumed = false
if (this.options.persister) {
return this.options.persister(
diff --git a/packages/query-core/src/queryClient.ts b/packages/query-core/src/queryClient.ts
index d54cacf55c..2f0d4cf0b4 100644
--- a/packages/query-core/src/queryClient.ts
+++ b/packages/query-core/src/queryClient.ts
@@ -4,6 +4,7 @@ import {
hashQueryKeyByOptions,
noop,
partialMatchKey,
+ skipToken,
} from './utils'
import { QueryCache } from './queryCache'
import { MutationCache } from './mutationCache'
@@ -537,6 +538,13 @@ export class QueryClient {
defaultedOptions.networkMode = 'offlineFirst'
}
+ if (
+ defaultedOptions.enabled !== true &&
+ defaultedOptions.queryFn === skipToken
+ ) {
+ defaultedOptions.enabled = false
+ }
+
return defaultedOptions as DefaultedQueryObserverOptions<
TQueryFnData,
TError,
diff --git a/packages/query-core/src/tests/queryClient.test.tsx b/packages/query-core/src/tests/queryClient.test.tsx
index a975db3971..eaad117718 100644
--- a/packages/query-core/src/tests/queryClient.test.tsx
+++ b/packages/query-core/src/tests/queryClient.test.tsx
@@ -10,6 +10,7 @@ import {
hydrate,
onlineManager,
} from '..'
+import { skipToken } from '../utils'
import {
createQueryClient,
mockOnlineManagerIsOnline,
@@ -1354,6 +1355,7 @@ describe('queryClient', () => {
test('should refetch all active queries', async () => {
const key1 = queryKey()
const key2 = queryKey()
+ const key3 = queryKey()
const queryFn1 = vi.fn, string>().mockReturnValue('data1')
const queryFn2 = vi.fn, string>().mockReturnValue('data2')
const observer1 = new QueryObserver(queryClient, {
@@ -1366,13 +1368,21 @@ describe('queryClient', () => {
queryFn: queryFn2,
enabled: false,
})
+ const observer3 = new QueryObserver(queryClient, {
+ queryKey: key3,
+ queryFn: skipToken,
+ })
+ let didSkipTokenRun = false
observer1.subscribe(() => undefined)
observer2.subscribe(() => undefined)
+ observer3.subscribe(() => (didSkipTokenRun = true))
await queryClient.resetQueries()
+ observer3.destroy()
observer2.destroy()
observer1.destroy()
expect(queryFn1).toHaveBeenCalledTimes(2)
expect(queryFn2).toHaveBeenCalledTimes(0)
+ expect(didSkipTokenRun).toBe(false)
})
})
diff --git a/packages/query-core/src/types.ts b/packages/query-core/src/types.ts
index c4b2b29d4d..faaea7bb84 100644
--- a/packages/query-core/src/types.ts
+++ b/packages/query-core/src/types.ts
@@ -3,7 +3,7 @@
import type { MutationState } from './mutation'
import type { FetchDirection, Query, QueryBehavior } from './query'
import type { RetryDelayValue, RetryValue } from './retryer'
-import type { QueryFilters, QueryTypeFilter } from './utils'
+import type { QueryFilters, QueryTypeFilter, SkipToken } from './utils'
import type { QueryCache } from './queryCache'
import type { MutationCache } from './mutationCache'
@@ -147,7 +147,7 @@ export interface QueryOptions<
* Setting it to `Infinity` will disable garbage collection.
*/
gcTime?: number
- queryFn?: QueryFunction
+ queryFn?: QueryFunction | SkipToken
persister?: QueryPersister<
NoInfer,
NoInfer,
diff --git a/packages/query-core/src/utils.ts b/packages/query-core/src/utils.ts
index 91af0759c1..3962b12645 100644
--- a/packages/query-core/src/utils.ts
+++ b/packages/query-core/src/utils.ts
@@ -342,3 +342,6 @@ export function addToStart(items: Array, item: T, max = 0): Array {
const newItems = [item, ...items]
return max && newItems.length > max ? newItems.slice(0, -1) : newItems
}
+
+export const skipToken = Symbol()
+export type SkipToken = typeof skipToken
diff --git a/packages/query-persist-client-core/package.json b/packages/query-persist-client-core/package.json
index 12d9646030..1aaffd4ac8 100644
--- a/packages/query-persist-client-core/package.json
+++ b/packages/query-persist-client-core/package.json
@@ -1,6 +1,6 @@
{
"name": "@tanstack/query-persist-client-core",
- "version": "5.24.8",
+ "version": "5.25.0",
"description": "Set of utilities for interacting with persisters, which can save your queryClient for later use",
"author": "tannerlinsley",
"license": "MIT",
diff --git a/packages/query-sync-storage-persister/package.json b/packages/query-sync-storage-persister/package.json
index bcd80080d2..8bf154d84d 100644
--- a/packages/query-sync-storage-persister/package.json
+++ b/packages/query-sync-storage-persister/package.json
@@ -1,6 +1,6 @@
{
"name": "@tanstack/query-sync-storage-persister",
- "version": "5.24.8",
+ "version": "5.25.0",
"description": "A persister for synchronous storages, to be used with TanStack/Query",
"author": "tannerlinsley",
"license": "MIT",
diff --git a/packages/react-query-devtools/package.json b/packages/react-query-devtools/package.json
index a90b487076..6892c933b8 100644
--- a/packages/react-query-devtools/package.json
+++ b/packages/react-query-devtools/package.json
@@ -1,6 +1,6 @@
{
"name": "@tanstack/react-query-devtools",
- "version": "5.24.8",
+ "version": "5.25.0",
"description": "Developer tools to interact with and visualize the TanStack/react-query cache",
"author": "tannerlinsley",
"license": "MIT",
diff --git a/packages/react-query-next-experimental/package.json b/packages/react-query-next-experimental/package.json
index d314371377..0c7b5ebded 100644
--- a/packages/react-query-next-experimental/package.json
+++ b/packages/react-query-next-experimental/package.json
@@ -1,6 +1,6 @@
{
"name": "@tanstack/react-query-next-experimental",
- "version": "5.24.8",
+ "version": "5.25.0",
"description": "Hydration utils for React Query in the NextJs app directory",
"author": "tannerlinsley",
"license": "MIT",
diff --git a/packages/react-query-persist-client/package.json b/packages/react-query-persist-client/package.json
index 7f802c43a6..501010e972 100644
--- a/packages/react-query-persist-client/package.json
+++ b/packages/react-query-persist-client/package.json
@@ -1,6 +1,6 @@
{
"name": "@tanstack/react-query-persist-client",
- "version": "5.24.8",
+ "version": "5.25.0",
"description": "React bindings to work with persisters in TanStack/react-query",
"author": "tannerlinsley",
"license": "MIT",
diff --git a/packages/react-query/package.json b/packages/react-query/package.json
index a454d730b9..a444988661 100644
--- a/packages/react-query/package.json
+++ b/packages/react-query/package.json
@@ -1,6 +1,6 @@
{
"name": "@tanstack/react-query",
- "version": "5.24.8",
+ "version": "5.25.0",
"description": "Hooks for managing, caching and syncing asynchronous and remote data in React",
"author": "tannerlinsley",
"license": "MIT",
diff --git a/packages/react-query/src/__tests__/queryOptions.test-d.tsx b/packages/react-query/src/__tests__/queryOptions.test-d.tsx
index 449e4923e0..dcb8d0ca47 100644
--- a/packages/react-query/src/__tests__/queryOptions.test-d.tsx
+++ b/packages/react-query/src/__tests__/queryOptions.test-d.tsx
@@ -1,6 +1,5 @@
import { describe, expect, expectTypeOf, it } from 'vitest'
-import { QueryClient } from '@tanstack/query-core'
-import { dataTagSymbol } from '@tanstack/query-core'
+import { QueryClient, dataTagSymbol, skipToken } from '@tanstack/query-core'
import { queryOptions } from '../queryOptions'
import { useQuery } from '../useQuery'
import { useQueries } from '../useQueries'
@@ -43,6 +42,7 @@ describe('queryOptions', () => {
const { data } = useSuspenseQuery(options)
expectTypeOf(data).toEqualTypeOf()
})
+
it('should work when passed to fetchQuery', async () => {
const options = queryOptions({
queryKey: ['key'],
@@ -147,4 +147,26 @@ describe('queryOptions', () => {
const data = queryClient.setQueryData(queryKey, 5)
expectTypeOf(data).toEqualTypeOf()
})
+
+ it('should infer even if there is a conditional skipToken', () => {
+ const options = queryOptions({
+ queryKey: ['key'],
+ queryFn: Math.random() > 0.5 ? skipToken : () => Promise.resolve(5),
+ })
+
+ const queryClient = new QueryClient()
+ const data = queryClient.getQueryData(options.queryKey)
+ expectTypeOf(data).toEqualTypeOf()
+ })
+
+ it('should infer to unknown if we disable a query with just a skipToken', () => {
+ const options = queryOptions({
+ queryKey: ['key'],
+ queryFn: skipToken,
+ })
+
+ const queryClient = new QueryClient()
+ const data = queryClient.getQueryData(options.queryKey)
+ expectTypeOf(data).toEqualTypeOf()
+ })
})
diff --git a/packages/react-query/src/__tests__/suspense.test-d.tsx b/packages/react-query/src/__tests__/suspense.test-d.tsx
index 9367866753..6d333a817a 100644
--- a/packages/react-query/src/__tests__/suspense.test-d.tsx
+++ b/packages/react-query/src/__tests__/suspense.test-d.tsx
@@ -1,6 +1,7 @@
import { describe, expectTypeOf, it } from 'vitest'
import { useSuspenseQuery } from '../useSuspenseQuery'
import { useSuspenseInfiniteQuery } from '../useSuspenseInfiniteQuery'
+import type { UseSuspenseQueryOptions } from '..'
import type { InfiniteData } from '@tanstack/query-core'
describe('useSuspenseQuery', () => {
@@ -121,4 +122,14 @@ describe('useSuspenseInfiniteQuery', () => {
// @ts-expect-error TS2339
query.isPlaceholderData
})
+
+ it('should not accept skipToken type for queryFn in useSuspenseQuery', () => {
+ const query: UseSuspenseQueryOptions = {
+ // @ts-expect-error
+ queryFn: skipToken,
+ queryKey: [1],
+ }
+
+ return query
+ })
})
diff --git a/packages/react-query/src/__tests__/useQueries.test.tsx b/packages/react-query/src/__tests__/useQueries.test.tsx
index d52492f64f..7b8f3d5512 100644
--- a/packages/react-query/src/__tests__/useQueries.test.tsx
+++ b/packages/react-query/src/__tests__/useQueries.test.tsx
@@ -2,7 +2,7 @@ import { describe, expect, expectTypeOf, it, vi } from 'vitest'
import { fireEvent, render, waitFor } from '@testing-library/react'
import * as React from 'react'
import { ErrorBoundary } from 'react-error-boundary'
-import { QueryCache, queryOptions, useQueries } from '..'
+import { QueryCache, queryOptions, skipToken, useQueries } from '..'
import {
createQueryClient,
expectTypeNotAny,
@@ -17,7 +17,7 @@ import type {
UseQueryOptions,
UseQueryResult,
} from '..'
-import type { QueryFunctionContext } from '@tanstack/query-core'
+import type { QueryFunctionContext, SkipToken } from '@tanstack/query-core'
describe('useQueries', () => {
const queryCache = new QueryCache()
@@ -704,15 +704,18 @@ describe('useQueries', () => {
// no need to type the mapped query
(query) => {
const { queryFn: fn, queryKey: key } = query
- expectTypeOf | undefined>(fn)
+ expectTypeOf<
+ QueryFunction | undefined | SkipToken
+ >(fn)
return {
queryKey: key,
- queryFn: fn
- ? (ctx: QueryFunctionContext) => {
- expectTypeOf(ctx.queryKey)
- return fn.call({}, ctx)
- }
- : undefined,
+ queryFn:
+ fn && fn !== skipToken
+ ? (ctx: QueryFunctionContext) => {
+ expectTypeOf(ctx.queryKey)
+ return fn.call({}, ctx)
+ }
+ : undefined,
}
},
),
diff --git a/packages/react-query/src/__tests__/useQuery.test.tsx b/packages/react-query/src/__tests__/useQuery.test.tsx
index 18888856a9..762f612c3a 100644
--- a/packages/react-query/src/__tests__/useQuery.test.tsx
+++ b/packages/react-query/src/__tests__/useQuery.test.tsx
@@ -2,6 +2,7 @@ import { describe, expect, expectTypeOf, it, test, vi } from 'vitest'
import { act, fireEvent, render, waitFor } from '@testing-library/react'
import * as React from 'react'
import { ErrorBoundary } from 'react-error-boundary'
+import { skipToken } from '@tanstack/query-core'
import { QueryCache, keepPreviousData, useQuery } from '..'
import {
Blink,
@@ -6329,4 +6330,51 @@ describe('useQuery', () => {
expect(() => render()).toThrow('Bad argument type')
consoleMock.mockRestore()
})
+
+ it('should respect skipToken and refetch when skipToken is taken away', async () => {
+ const key = queryKey()
+
+ function Page({ enabled }: { enabled: boolean }) {
+ const { data, status } = useQuery({
+ queryKey: [key],
+ queryFn: enabled
+ ? async () => {
+ await sleep(10)
+
+ return Promise.resolve('data')
+ }
+ : skipToken,
+ retry: false,
+ retryOnMount: false,
+ refetchOnMount: false,
+ refetchOnWindowFocus: false,
+ })
+
+ return (
+
+
status: {status}
+
data: {String(data)}
+
+ )
+ }
+
+ function App() {
+ const [enabled, toggle] = React.useReducer((x) => !x, false)
+
+ return (
+
+ )
+ }
+
+ const rendered = renderWithClient(queryClient, )
+
+ await waitFor(() => rendered.getByText('status: pending'))
+
+ fireEvent.click(rendered.getByRole('button', { name: 'enable' }))
+ await waitFor(() => rendered.getByText('status: success'))
+ await waitFor(() => rendered.getByText('data: data'))
+ })
})
diff --git a/packages/react-query/src/useQueries.ts b/packages/react-query/src/useQueries.ts
index 34e9b38be0..9da316d90e 100644
--- a/packages/react-query/src/useQueries.ts
+++ b/packages/react-query/src/useQueries.ts
@@ -32,6 +32,7 @@ import type {
QueryClient,
QueryFunction,
QueryKey,
+ SkipToken,
ThrowOnError,
} from '@tanstack/query-core'
@@ -73,7 +74,9 @@ type GetOptions =
? UseQueryOptionsForUseQueries
: // Part 3: responsible for inferring and enforcing type if no explicit parameter was provided
T extends {
- queryFn?: QueryFunction
+ queryFn?:
+ | QueryFunction
+ | SkipToken
select?: (data: any) => infer TData
throwOnError?: ThrowOnError
}
@@ -84,10 +87,9 @@ type GetOptions =
TQueryKey
>
: T extends {
- queryFn?: QueryFunction<
- infer TQueryFnData,
- infer TQueryKey
- >
+ queryFn?:
+ | QueryFunction
+ | SkipToken
throwOnError?: ThrowOnError
}
? UseQueryOptionsForUseQueries<
@@ -133,7 +135,7 @@ type GetResults =
? GetDefinedOrUndefinedQueryResult
: // Part 3: responsible for mapping inferred type to results, if no explicit parameter was provided
T extends {
- queryFn?: QueryFunction
+ queryFn?: QueryFunction | SkipToken
select?: (data: any) => infer TData
throwOnError?: ThrowOnError
}
@@ -143,7 +145,9 @@ type GetResults =
unknown extends TError ? DefaultError : TError
>
: T extends {
- queryFn?: QueryFunction
+ queryFn?:
+ | QueryFunction
+ | SkipToken
throwOnError?: ThrowOnError
}
? GetDefinedOrUndefinedQueryResult<
diff --git a/packages/react-query/src/useSuspenseQueries.ts b/packages/react-query/src/useSuspenseQueries.ts
index 1d58da0c53..1802e3a207 100644
--- a/packages/react-query/src/useSuspenseQueries.ts
+++ b/packages/react-query/src/useSuspenseQueries.ts
@@ -6,6 +6,7 @@ import type {
DefaultError,
QueryClient,
QueryFunction,
+ SkipToken,
ThrowOnError,
} from '@tanstack/query-core'
@@ -33,7 +34,9 @@ type GetSuspenseOptions =
? UseSuspenseQueryOptions
: // Part 3: responsible for inferring and enforcing type if no explicit parameter was provided
T extends {
- queryFn?: QueryFunction
+ queryFn?:
+ | QueryFunction
+ | SkipToken
select?: (data: any) => infer TData
throwOnError?: ThrowOnError
}
@@ -44,10 +47,9 @@ type GetSuspenseOptions =
TQueryKey
>
: T extends {
- queryFn?: QueryFunction<
- infer TQueryFnData,
- infer TQueryKey
- >
+ queryFn?:
+ | QueryFunction
+ | SkipToken
throwOnError?: ThrowOnError
}
? UseSuspenseQueryOptions<
diff --git a/packages/react-query/src/useSuspenseQuery.ts b/packages/react-query/src/useSuspenseQuery.ts
index 3bf6039d01..9bc53e6fd6 100644
--- a/packages/react-query/src/useSuspenseQuery.ts
+++ b/packages/react-query/src/useSuspenseQuery.ts
@@ -1,5 +1,5 @@
'use client'
-import { QueryObserver } from '@tanstack/query-core'
+import { QueryObserver, skipToken } from '@tanstack/query-core'
import { useBaseQuery } from './useBaseQuery'
import { defaultThrowOnError } from './suspense'
import type { UseSuspenseQueryOptions, UseSuspenseQueryResult } from './types'
@@ -14,6 +14,12 @@ export function useSuspenseQuery<
options: UseSuspenseQueryOptions,
queryClient?: QueryClient,
): UseSuspenseQueryResult {
+ if (process.env.NODE_ENV !== 'production') {
+ if (options.queryFn === skipToken) {
+ console.error('skipToken is not allowed for useSuspenseQuery')
+ }
+ }
+
return useBaseQuery(
{
...options,
diff --git a/packages/solid-query-devtools/package.json b/packages/solid-query-devtools/package.json
index 0fadc21a93..97c85367e4 100644
--- a/packages/solid-query-devtools/package.json
+++ b/packages/solid-query-devtools/package.json
@@ -1,6 +1,6 @@
{
"name": "@tanstack/solid-query-devtools",
- "version": "5.24.8",
+ "version": "5.25.0",
"description": "Developer tools to interact with and visualize the TanStack/solid-query Query cache",
"author": "tannerlinsley",
"license": "MIT",
diff --git a/packages/solid-query-persist-client/package.json b/packages/solid-query-persist-client/package.json
index 97314bfce2..1c9a1177bf 100644
--- a/packages/solid-query-persist-client/package.json
+++ b/packages/solid-query-persist-client/package.json
@@ -1,6 +1,6 @@
{
"name": "@tanstack/solid-query-persist-client",
- "version": "5.24.8",
+ "version": "5.25.0",
"description": "Solid.js bindings to work with persisters in TanStack/solid-query",
"author": "tannerlinsley",
"license": "MIT",
diff --git a/packages/solid-query/package.json b/packages/solid-query/package.json
index ea7ebc907d..aa681ab493 100644
--- a/packages/solid-query/package.json
+++ b/packages/solid-query/package.json
@@ -1,6 +1,6 @@
{
"name": "@tanstack/solid-query",
- "version": "5.24.8",
+ "version": "5.25.0",
"description": "Primitives for managing, caching and syncing asynchronous and remote data in Solid",
"author": "tannerlinsley",
"license": "MIT",
diff --git a/packages/solid-query/src/__tests__/createQueries.test.tsx b/packages/solid-query/src/__tests__/createQueries.test.tsx
index 294e336b30..5dffe87246 100644
--- a/packages/solid-query/src/__tests__/createQueries.test.tsx
+++ b/packages/solid-query/src/__tests__/createQueries.test.tsx
@@ -10,7 +10,11 @@ import {
createQueries,
} from '..'
import { createQueryClient, expectTypeNotAny, queryKey, sleep } from './utils'
-import type { QueryFunctionContext, QueryKey } from '@tanstack/query-core'
+import type {
+ QueryFunctionContext,
+ QueryKey,
+ SkipToken,
+} from '@tanstack/query-core'
import type {
CreateQueryResult,
QueryFunction,
@@ -581,13 +585,18 @@ describe('useQueries', () => {
// no need to type the mapped query
(query) => {
const { queryFn: fn, queryKey: key } = query
- expectTypeOf | undefined>(fn)
+ expectTypeOf<
+ QueryFunction | SkipToken | undefined
+ >(fn)
return {
queryKey: key,
queryFn: fn
? (ctx: QueryFunctionContext) => {
expectTypeOf(ctx.queryKey)
- return fn.call({}, ctx)
+ return (fn as QueryFunction).call(
+ {},
+ ctx,
+ )
}
: undefined,
}
diff --git a/packages/solid-query/src/createQueries.ts b/packages/solid-query/src/createQueries.ts
index 9fffdf60cb..fc4d8a9368 100644
--- a/packages/solid-query/src/createQueries.ts
+++ b/packages/solid-query/src/createQueries.ts
@@ -23,6 +23,7 @@ import type {
QueryFunction,
QueryKey,
QueryObserverResult,
+ SkipToken,
ThrowOnError,
} from '@tanstack/query-core'
@@ -64,7 +65,9 @@ type GetOptions =
? CreateQueryOptionsForCreateQueries
: // Part 3: responsible for inferring and enforcing type if no explicit parameter was provided
T extends {
- queryFn?: QueryFunction
+ queryFn?:
+ | QueryFunction
+ | SkipToken
select?: (data: any) => infer TData
throwOnError?: ThrowOnError
}
@@ -75,10 +78,9 @@ type GetOptions =
TQueryKey
>
: T extends {
- queryFn?: QueryFunction<
- infer TQueryFnData,
- infer TQueryKey
- >
+ queryFn?:
+ | QueryFunction
+ | SkipToken
throwOnError?: ThrowOnError
}
? CreateQueryOptionsForCreateQueries<
diff --git a/packages/svelte-query-devtools/package.json b/packages/svelte-query-devtools/package.json
index b6a6989928..b8d029ebce 100644
--- a/packages/svelte-query-devtools/package.json
+++ b/packages/svelte-query-devtools/package.json
@@ -1,6 +1,6 @@
{
"name": "@tanstack/svelte-query-devtools",
- "version": "5.24.8",
+ "version": "5.25.0",
"description": "Developer tools to interact with and visualize the TanStack/svelte-query cache",
"author": "Lachlan Collins",
"license": "MIT",
diff --git a/packages/svelte-query-persist-client/package.json b/packages/svelte-query-persist-client/package.json
index affc033eec..b9b0c4983f 100644
--- a/packages/svelte-query-persist-client/package.json
+++ b/packages/svelte-query-persist-client/package.json
@@ -1,6 +1,6 @@
{
"name": "@tanstack/svelte-query-persist-client",
- "version": "5.24.8",
+ "version": "5.25.0",
"description": "Svelte bindings to work with persisters in TanStack/svelte-query",
"author": "Lachlan Collins",
"license": "MIT",
diff --git a/packages/svelte-query/package.json b/packages/svelte-query/package.json
index 3f05c51276..9447e7ed09 100644
--- a/packages/svelte-query/package.json
+++ b/packages/svelte-query/package.json
@@ -1,6 +1,6 @@
{
"name": "@tanstack/svelte-query",
- "version": "5.24.8",
+ "version": "5.25.0",
"description": "Primitives for managing, caching and syncing asynchronous and remote data in Svelte",
"author": "Lachlan Collins",
"license": "MIT",
diff --git a/packages/svelte-query/src/createQueries.ts b/packages/svelte-query/src/createQueries.ts
index cb8d0c4bd1..48eb64fe5e 100644
--- a/packages/svelte-query/src/createQueries.ts
+++ b/packages/svelte-query/src/createQueries.ts
@@ -14,6 +14,7 @@ import type {
QueryKey,
QueryObserverOptions,
QueryObserverResult,
+ SkipToken,
ThrowOnError,
} from '@tanstack/query-core'
@@ -55,7 +56,9 @@ type GetOptions =
? QueryObserverOptionsForCreateQueries
: // Part 3: responsible for inferring and enforcing type if no explicit parameter was provided
T extends {
- queryFn?: QueryFunction
+ queryFn?:
+ | QueryFunction
+ | SkipToken
select?: (data: any) => infer TData
throwOnError?: ThrowOnError
}
@@ -66,10 +69,9 @@ type GetOptions =
TQueryKey
>
: T extends {
- queryFn?: QueryFunction<
- infer TQueryFnData,
- infer TQueryKey
- >
+ queryFn?:
+ | QueryFunction
+ | SkipToken
throwOnError?: ThrowOnError
}
? QueryObserverOptionsForCreateQueries<
diff --git a/packages/vue-query-devtools/package.json b/packages/vue-query-devtools/package.json
index e340435211..895ea060ed 100644
--- a/packages/vue-query-devtools/package.json
+++ b/packages/vue-query-devtools/package.json
@@ -1,6 +1,6 @@
{
"name": "@tanstack/vue-query-devtools",
- "version": "5.24.8",
+ "version": "5.25.0",
"description": "Developer tools to interact with and visualize the TanStack/vue-query cache",
"author": "tannerlinsley",
"license": "MIT",
diff --git a/packages/vue-query/package.json b/packages/vue-query/package.json
index 734b2b1d71..855984448f 100644
--- a/packages/vue-query/package.json
+++ b/packages/vue-query/package.json
@@ -1,6 +1,6 @@
{
"name": "@tanstack/vue-query",
- "version": "5.24.8",
+ "version": "5.25.0",
"description": "Hooks for managing, caching and syncing asynchronous and remote data in Vue",
"author": "Damian Osipiuk",
"license": "MIT",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f95ed92c00..8aa0338e74 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -146,7 +146,7 @@ importers:
specifier: ^17.1.3
version: 17.1.3(@angular/common@17.1.3)(@angular/core@17.1.3)(@angular/platform-browser@17.1.3)(rxjs@7.8.1)
'@tanstack/angular-query-experimental':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/angular-query-experimental
rxjs:
specifier: ^7.8.1
@@ -168,7 +168,7 @@ importers:
specifier: ^17.1.3
version: 17.1.3(@angular/compiler@17.1.3)(typescript@5.2.2)
'@tanstack/angular-query-devtools-experimental':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/angular-query-devtools-experimental
typescript:
specifier: 5.2.2
@@ -201,7 +201,7 @@ importers:
specifier: ^17.1.3
version: 17.1.3(@angular/common@17.1.3)(@angular/core@17.1.3)(@angular/platform-browser@17.1.3)(rxjs@7.8.1)
'@tanstack/angular-query-experimental':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/angular-query-experimental
rxjs:
specifier: ^7.8.1
@@ -223,7 +223,7 @@ importers:
specifier: ^17.1.3
version: 17.1.3(@angular/compiler@17.1.3)(typescript@5.2.2)
'@tanstack/angular-query-devtools-experimental':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/angular-query-devtools-experimental
typescript:
specifier: 5.2.2
@@ -256,7 +256,7 @@ importers:
specifier: ^17.1.3
version: 17.1.3(@angular/common@17.1.3)(@angular/core@17.1.3)(@angular/platform-browser@17.1.3)(rxjs@7.8.1)
'@tanstack/angular-query-experimental':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/angular-query-experimental
rxjs:
specifier: ^7.8.1
@@ -278,7 +278,7 @@ importers:
specifier: ^17.1.3
version: 17.1.3(@angular/compiler@17.1.3)(typescript@5.2.2)
'@tanstack/angular-query-devtools-experimental':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/angular-query-devtools-experimental
typescript:
specifier: 5.2.2
@@ -311,7 +311,7 @@ importers:
specifier: ^17.1.3
version: 17.1.3(@angular/common@17.1.3)(@angular/core@17.1.3)(@angular/platform-browser@17.1.3)(rxjs@7.8.1)
'@tanstack/angular-query-experimental':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/angular-query-experimental
rxjs:
specifier: ^7.8.1
@@ -333,7 +333,7 @@ importers:
specifier: ^17.1.3
version: 17.1.3(@angular/compiler@17.1.3)(typescript@5.2.2)
'@tanstack/angular-query-devtools-experimental':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/angular-query-devtools-experimental
typescript:
specifier: 5.2.2
@@ -348,10 +348,10 @@ importers:
specifier: 4.22.1
version: 4.22.1
'@tanstack/react-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query
'@tanstack/react-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query-devtools
algoliasearch:
specifier: 4.22.1
@@ -385,10 +385,10 @@ importers:
examples/react/auto-refetching:
dependencies:
'@tanstack/react-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query
'@tanstack/react-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query-devtools
axios:
specifier: ^1.6.7
@@ -409,10 +409,10 @@ importers:
examples/react/basic:
dependencies:
'@tanstack/react-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query
'@tanstack/react-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query-devtools
axios:
specifier: ^1.6.7
@@ -437,10 +437,10 @@ importers:
examples/react/basic-graphql-request:
dependencies:
'@tanstack/react-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query
'@tanstack/react-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query-devtools
graphql:
specifier: ^16.8.1
@@ -465,16 +465,16 @@ importers:
examples/react/basic-typescript:
dependencies:
'@tanstack/query-sync-storage-persister':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/query-sync-storage-persister
'@tanstack/react-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query
'@tanstack/react-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query-devtools
'@tanstack/react-query-persist-client':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query-persist-client
axios:
specifier: ^1.6.7
@@ -514,10 +514,10 @@ importers:
examples/react/default-query-function:
dependencies:
'@tanstack/react-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query
'@tanstack/react-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query-devtools
axios:
specifier: ^1.6.7
@@ -539,10 +539,10 @@ importers:
examples/react/infinite-query-with-max-pages:
dependencies:
'@tanstack/react-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query
'@tanstack/react-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query-devtools
axios:
specifier: ^1.6.7
@@ -566,10 +566,10 @@ importers:
examples/react/load-more-infinite-scroll:
dependencies:
'@tanstack/react-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query
'@tanstack/react-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query-devtools
axios:
specifier: ^1.6.7
@@ -593,10 +593,10 @@ importers:
examples/react/nextjs:
dependencies:
'@tanstack/react-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query
'@tanstack/react-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query-devtools
ky:
specifier: ^1.2.0
@@ -620,13 +620,13 @@ importers:
examples/react/nextjs-suspense-streaming:
dependencies:
'@tanstack/react-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query
'@tanstack/react-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query-devtools
'@tanstack/react-query-next-experimental':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query-next-experimental
next:
specifier: ^14.0.0
@@ -654,19 +654,19 @@ importers:
examples/react/offline:
dependencies:
'@tanstack/query-sync-storage-persister':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/query-sync-storage-persister
'@tanstack/react-location':
specifier: ^3.7.4
version: 3.7.4(react-dom@18.2.0)(react@18.2.0)
'@tanstack/react-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query
'@tanstack/react-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query-devtools
'@tanstack/react-query-persist-client':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query-persist-client
ky:
specifier: ^1.2.0
@@ -694,10 +694,10 @@ importers:
examples/react/optimistic-updates-cache:
dependencies:
'@tanstack/react-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query
'@tanstack/react-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query-devtools
axios:
specifier: ^1.6.7
@@ -731,10 +731,10 @@ importers:
examples/react/optimistic-updates-ui:
dependencies:
'@tanstack/react-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query
'@tanstack/react-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query-devtools
axios:
specifier: ^1.6.7
@@ -768,10 +768,10 @@ importers:
examples/react/pagination:
dependencies:
'@tanstack/react-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query
'@tanstack/react-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query-devtools
axios:
specifier: ^1.6.7
@@ -792,10 +792,10 @@ importers:
examples/react/playground:
dependencies:
'@tanstack/react-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query
'@tanstack/react-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query-devtools
react:
specifier: ^18.2.0
@@ -814,10 +814,10 @@ importers:
examples/react/prefetching:
dependencies:
'@tanstack/react-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query
'@tanstack/react-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query-devtools
axios:
specifier: ^1.6.7
@@ -847,10 +847,10 @@ importers:
specifier: ^6.3.16
version: 6.3.16(@react-navigation/native@6.1.6)(react-native-gesture-handler@2.15.0)(react-native-safe-area-context@4.9.0)(react-native-screens@3.29.0)(react-native@0.73.4)(react@18.2.0)
'@tanstack/react-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query
'@tanstack/react-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query-devtools
expo:
specifier: ^50.0.6
@@ -899,10 +899,10 @@ importers:
examples/react/react-router:
dependencies:
'@tanstack/react-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query
'@tanstack/react-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query-devtools
localforage:
specifier: ^1.10.0
@@ -963,10 +963,10 @@ importers:
specifier: ^5.15.2
version: 5.15.2(@types/react@18.2.55)(react@18.2.0)
'@tanstack/react-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query
'@tanstack/react-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query-devtools
react:
specifier: ^18.2.0
@@ -991,10 +991,10 @@ importers:
examples/react/simple:
dependencies:
'@tanstack/react-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query
'@tanstack/react-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query-devtools
axios:
specifier: ^1.6.7
@@ -1028,10 +1028,10 @@ importers:
specifier: ^5.15.2
version: 5.15.2(@types/react@18.2.55)(react@18.2.0)
'@tanstack/react-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query
'@tanstack/react-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query-devtools
react:
specifier: ^18.2.0
@@ -1056,10 +1056,10 @@ importers:
examples/react/suspense:
dependencies:
'@tanstack/react-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query
'@tanstack/react-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/react-query-devtools
axios:
specifier: ^1.6.7
@@ -1087,10 +1087,10 @@ importers:
examples/solid/basic-graphql-request:
dependencies:
'@tanstack/solid-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/solid-query
'@tanstack/solid-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/solid-query-devtools
graphql:
specifier: ^16.8.1
@@ -1115,10 +1115,10 @@ importers:
examples/solid/basic-typescript:
dependencies:
'@tanstack/solid-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/solid-query
'@tanstack/solid-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/solid-query-devtools
solid-js:
specifier: ^1.8.14
@@ -1137,10 +1137,10 @@ importers:
examples/solid/default-query-function:
dependencies:
'@tanstack/solid-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/solid-query
'@tanstack/solid-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/solid-query-devtools
solid-js:
specifier: ^1.8.14
@@ -1159,10 +1159,10 @@ importers:
examples/solid/simple:
dependencies:
'@tanstack/solid-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/solid-query
'@tanstack/solid-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/solid-query-devtools
solid-js:
specifier: ^1.8.14
@@ -1193,10 +1193,10 @@ importers:
specifier: ^0.5.4
version: 0.5.4(@testing-library/jest-dom@6.4.2)(rollup@4.6.0)(solid-js@1.8.14)(vinxi@0.3.3)(vite@4.5.1)
'@tanstack/solid-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/solid-query
'@tanstack/solid-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/solid-query-devtools
solid-js:
specifier: ^1.8.14
@@ -1208,10 +1208,10 @@ importers:
examples/svelte/auto-refetching:
dependencies:
'@tanstack/svelte-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/svelte-query
'@tanstack/svelte-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/svelte-query-devtools
devDependencies:
'@sveltejs/adapter-auto':
@@ -1239,10 +1239,10 @@ importers:
examples/svelte/basic:
dependencies:
'@tanstack/svelte-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/svelte-query
'@tanstack/svelte-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/svelte-query-devtools
devDependencies:
'@sveltejs/adapter-auto':
@@ -1270,10 +1270,10 @@ importers:
examples/svelte/load-more-infinite-scroll:
dependencies:
'@tanstack/svelte-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/svelte-query
'@tanstack/svelte-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/svelte-query-devtools
devDependencies:
'@sveltejs/adapter-auto':
@@ -1301,10 +1301,10 @@ importers:
examples/svelte/optimistic-updates-typescript:
dependencies:
'@tanstack/svelte-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/svelte-query
'@tanstack/svelte-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/svelte-query-devtools
devDependencies:
'@sveltejs/adapter-auto':
@@ -1332,10 +1332,10 @@ importers:
examples/svelte/playground:
dependencies:
'@tanstack/svelte-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/svelte-query
'@tanstack/svelte-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/svelte-query-devtools
devDependencies:
'@sveltejs/adapter-auto':
@@ -1363,10 +1363,10 @@ importers:
examples/svelte/simple:
dependencies:
'@tanstack/svelte-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/svelte-query
'@tanstack/svelte-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/svelte-query-devtools
devDependencies:
'@sveltejs/vite-plugin-svelte':
@@ -1391,10 +1391,10 @@ importers:
examples/svelte/ssr:
dependencies:
'@tanstack/svelte-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/svelte-query
'@tanstack/svelte-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/svelte-query-devtools
devDependencies:
'@sveltejs/adapter-auto':
@@ -1422,10 +1422,10 @@ importers:
examples/svelte/star-wars:
dependencies:
'@tanstack/svelte-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/svelte-query
'@tanstack/svelte-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/svelte-query-devtools
devDependencies:
'@sveltejs/adapter-auto':
@@ -1462,10 +1462,10 @@ importers:
examples/vue/basic:
dependencies:
'@tanstack/vue-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/vue-query
'@tanstack/vue-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/vue-query-devtools
vue:
specifier: ^3.3.0
@@ -1484,7 +1484,7 @@ importers:
examples/vue/dependent-queries:
dependencies:
'@tanstack/vue-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/vue-query
vue:
specifier: ^3.3.0
@@ -1503,16 +1503,16 @@ importers:
examples/vue/persister:
dependencies:
'@tanstack/query-core':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/query-core
'@tanstack/query-persist-client-core':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/query-persist-client-core
'@tanstack/query-sync-storage-persister':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/query-sync-storage-persister
'@tanstack/vue-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/vue-query
idb-keyval:
specifier: ^6.2.1
@@ -1534,10 +1534,10 @@ importers:
examples/vue/simple:
dependencies:
'@tanstack/vue-query':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/vue-query
'@tanstack/vue-query-devtools':
- specifier: ^5.24.8
+ specifier: ^5.25.0
version: link:../../../packages/vue-query-devtools
vue:
specifier: ^3.3.0