@tanstack/react-query 4.39.1 → 4.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/build/lib/index.d.ts +3 -1
  2. package/build/lib/index.esm.js +1 -1
  3. package/build/lib/index.js +2 -2
  4. package/build/lib/index.mjs +1 -1
  5. package/build/lib/types.d.ts +3 -1
  6. package/build/lib/useQuery.d.ts +0 -3
  7. package/build/lib/useQuery.esm.js +0 -1
  8. package/build/lib/useQuery.esm.js.map +1 -1
  9. package/build/lib/useQuery.js +0 -1
  10. package/build/lib/useQuery.js.map +1 -1
  11. package/build/lib/useQuery.mjs +0 -1
  12. package/build/lib/useQuery.mjs.map +1 -1
  13. package/build/lib/useSuspenseQueries.d.ts +1 -2
  14. package/build/lib/useSuspenseQueries.esm.js.map +1 -1
  15. package/build/lib/useSuspenseQueries.js.map +1 -1
  16. package/build/lib/useSuspenseQueries.mjs.map +1 -1
  17. package/build/lib/useSuspenseQuery.d.ts +2 -6
  18. package/build/lib/useSuspenseQuery.esm.js +4 -1
  19. package/build/lib/useSuspenseQuery.esm.js.map +1 -1
  20. package/build/lib/useSuspenseQuery.js +4 -1
  21. package/build/lib/useSuspenseQuery.js.map +1 -1
  22. package/build/lib/useSuspenseQuery.mjs +4 -1
  23. package/build/lib/useSuspenseQuery.mjs.map +1 -1
  24. package/build/umd/index.development.js +8 -6
  25. package/build/umd/index.development.js.map +1 -1
  26. package/build/umd/index.production.js +1 -1
  27. package/build/umd/index.production.js.map +1 -1
  28. package/package.json +2 -2
  29. package/src/__tests__/Hydrate.test.tsx +1 -1
  30. package/src/__tests__/queryOptions.types.test.tsx +6 -5
  31. package/src/__tests__/useQuery.types.test.tsx +35 -0
  32. package/src/__tests__/useSuspenseQueries.types.test.tsx +5 -3
  33. package/src/__tests__/useSuspenseQuery.types.test.tsx +1 -5
  34. package/src/index.ts +9 -1
  35. package/src/types.ts +29 -0
  36. package/src/useQuery.ts +0 -21
  37. package/src/useSuspenseQueries.ts +3 -3
  38. package/src/useSuspenseQuery.ts +5 -37
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/react-query",
3
- "version": "4.39.1",
3
+ "version": "4.40.0",
4
4
  "description": "Hooks for managing, caching and syncing asynchronous and remote data in React",
5
5
  "author": "tannerlinsley",
6
6
  "license": "MIT",
@@ -51,7 +51,7 @@
51
51
  },
52
52
  "dependencies": {
53
53
  "use-sync-external-store": "^1.2.0",
54
- "@tanstack/query-core": "4.39.1"
54
+ "@tanstack/query-core": "4.40.0"
55
55
  },
56
56
  "peerDependencies": {
57
57
  "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
@@ -10,7 +10,7 @@ import {
10
10
  dehydrate,
11
11
  useHydrate,
12
12
  useQuery,
13
- } from '@tanstack/react-query'
13
+ } from '..'
14
14
  import { createQueryClient, sleep } from './utils'
15
15
 
16
16
  describe('React hydration', () => {
@@ -1,16 +1,17 @@
1
1
  import { expectTypeOf } from 'expect-type'
2
2
  import {
3
+ type DefinedUseQueryResult,
3
4
  QueryCache,
4
5
  type UseQueryResult,
6
+ type UseSuspenseQueryResult,
7
+ queryOptions,
5
8
  useQueries,
6
9
  useQuery,
7
10
  useQueryClient,
8
- } from '@tanstack/react-query'
9
- import { queryOptions } from '..'
10
- import { useSuspenseQueries, useSuspenseQuery } from '..'
11
- import { type UseSuspenseQueryResult } from '../useSuspenseQuery'
11
+ useSuspenseQueries,
12
+ useSuspenseQuery,
13
+ } from '..'
12
14
  import { doNotExecute } from './utils'
13
- import type { DefinedUseQueryResult } from '@tanstack/react-query'
14
15
 
15
16
  const queryKey = ['key'] as const
16
17
  const queryFn = () => Promise.resolve({ field: 'success' })
@@ -1,5 +1,7 @@
1
+ import { expectTypeOf } from 'expect-type'
1
2
  import { useQuery } from '../useQuery'
2
3
  import { doNotExecute } from './utils'
4
+ import type { DefinedUseQueryResult, UseQueryResult } from '../types'
3
5
 
4
6
  export type Equal<X, Y> = (<T>() => T extends X ? 1 : 2) extends <
5
7
  T,
@@ -9,6 +11,39 @@ export type Equal<X, Y> = (<T>() => T extends X ? 1 : 2) extends <
9
11
 
10
12
  export type Expect<T extends true> = T
11
13
 
14
+ describe('onSuccess', () => {
15
+ it('should be typed correctly', () => {
16
+ doNotExecute(() => {
17
+ expectTypeOf(
18
+ useQuery({
19
+ queryKey: ['posts'],
20
+ queryFn: async () => ({ id: 1 }),
21
+ onSuccess: (data) =>
22
+ expectTypeOf(data).toEqualTypeOf<{ id: number }>(),
23
+ }),
24
+ ).toEqualTypeOf<UseQueryResult<{ id: number }, unknown>>()
25
+ expectTypeOf(
26
+ useQuery({
27
+ queryKey: ['posts'],
28
+ queryFn: async () => ({ id: 1 }),
29
+ initialData: { id: 1 },
30
+ onSuccess: (data) =>
31
+ expectTypeOf(data).toEqualTypeOf<{ id: number }>(),
32
+ }),
33
+ ).toEqualTypeOf<DefinedUseQueryResult<{ id: number }, unknown>>()
34
+ expectTypeOf(
35
+ useQuery({
36
+ queryKey: ['posts'],
37
+ queryFn: async () => ({ id: 1 }),
38
+ initialData: { id: 1 },
39
+ select: (data) => data.id,
40
+ onSuccess: (data) => expectTypeOf(data).toEqualTypeOf<number>(),
41
+ }),
42
+ ).toEqualTypeOf<DefinedUseQueryResult<number, unknown>>()
43
+ })
44
+ })
45
+ })
46
+
12
47
  describe('initialData', () => {
13
48
  describe('Config object overload', () => {
14
49
  it('TData should always be defined when initialData is provided as an object', () => {
@@ -1,8 +1,10 @@
1
1
  import { expectTypeOf } from 'expect-type'
2
- import { queryOptions } from '..'
3
- import { useSuspenseQueries } from '..'
2
+ import {
3
+ type UseSuspenseQueryResult,
4
+ queryOptions,
5
+ useSuspenseQueries,
6
+ } from '..'
4
7
  import { doNotExecute } from './utils'
5
- import type { UseSuspenseQueryResult } from '../useSuspenseQuery'
6
8
 
7
9
  export const queryKey = ['key'] as const
8
10
  const sleep = (ms: number) =>
@@ -1,9 +1,5 @@
1
1
  import { expectTypeOf } from 'expect-type'
2
- import {
3
- type UseSuspenseQueryResult,
4
- useSuspenseQuery,
5
- } from '../useSuspenseQuery'
6
- import { queryOptions } from '..'
2
+ import { type UseSuspenseQueryResult, queryOptions, useSuspenseQuery } from '..'
7
3
  import { doNotExecute } from './utils'
8
4
 
9
5
  const queryKey = ['key'] as const
package/src/index.ts CHANGED
@@ -13,6 +13,15 @@ export type { QueriesResults, QueriesOptions } from './useQueries'
13
13
  export { useQuery } from './useQuery'
14
14
  export { useSuspenseQuery } from './useSuspenseQuery'
15
15
  export { useSuspenseQueries } from './useSuspenseQueries'
16
+ export type {
17
+ SuspenseQueriesResults,
18
+ SuspenseQueriesOptions,
19
+ } from './useSuspenseQueries'
20
+ export { queryOptions } from './queryOptions'
21
+ export type {
22
+ DefinedInitialDataOptions,
23
+ UndefinedInitialDataOptions,
24
+ } from './queryOptions'
16
25
  export {
17
26
  defaultContext,
18
27
  QueryClientProvider,
@@ -31,4 +40,3 @@ export { useIsMutating } from './useIsMutating'
31
40
  export { useMutation } from './useMutation'
32
41
  export { useInfiniteQuery } from './useInfiniteQuery'
33
42
  export { useIsRestoring, IsRestoringProvider } from './isRestoring'
34
- export { queryOptions } from './queryOptions'
package/src/types.ts CHANGED
@@ -3,11 +3,13 @@
3
3
  import type * as React from 'react'
4
4
  import type {
5
5
  DefinedQueryObserverResult,
6
+ DistributiveOmit,
6
7
  InfiniteQueryObserverOptions,
7
8
  InfiniteQueryObserverResult,
8
9
  MutateFunction,
9
10
  MutationObserverOptions,
10
11
  MutationObserverResult,
12
+ OmitKeyof,
11
13
  QueryKey,
12
14
  QueryObserverOptions,
13
15
  QueryObserverResult,
@@ -43,6 +45,25 @@ export interface UseQueryOptions<
43
45
  TQueryKey
44
46
  > {}
45
47
 
48
+ export type UseSuspenseQueryOptions<
49
+ TQueryFnData = unknown,
50
+ TError = unknown,
51
+ TData = TQueryFnData,
52
+ TQueryKey extends QueryKey = QueryKey,
53
+ > = OmitKeyof<
54
+ UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
55
+ | 'enabled'
56
+ | 'useErrorBoundary'
57
+ | 'suspense'
58
+ | 'placeholderData'
59
+ | 'networkMode'
60
+ | 'onSuccess'
61
+ | 'onError'
62
+ | 'onSettled'
63
+ | 'getPreviousPageParam'
64
+ | 'getNextPageParam'
65
+ >
66
+
46
67
  export interface UseInfiniteQueryOptions<
47
68
  TQueryFnData = unknown,
48
69
  TError = unknown,
@@ -68,6 +89,14 @@ export type UseQueryResult<
68
89
  TError = unknown,
69
90
  > = UseBaseQueryResult<TData, TError>
70
91
 
92
+ export type UseSuspenseQueryResult<
93
+ TData = unknown,
94
+ TError = unknown,
95
+ > = DistributiveOmit<
96
+ DefinedQueryObserverResult<TData, TError>,
97
+ 'isPlaceholderData'
98
+ >
99
+
71
100
  export type DefinedUseBaseQueryResult<
72
101
  TData = unknown,
73
102
  TError = unknown,
package/src/useQuery.ts CHANGED
@@ -1,10 +1,6 @@
1
1
  'use client'
2
2
  import { QueryObserver, parseQueryArgs } from '@tanstack/query-core'
3
3
  import { useBaseQuery } from './useBaseQuery'
4
- import type {
5
- DefinedInitialDataOptions,
6
- UndefinedInitialDataOptions,
7
- } from './queryOptions'
8
4
  import type {
9
5
  InitialDataFunction,
10
6
  NonUndefinedGuard,
@@ -19,14 +15,6 @@ import type {
19
15
  } from './types'
20
16
 
21
17
  // HOOK
22
- export function useQuery<
23
- TQueryFnData = unknown,
24
- TError = unknown,
25
- TData = TQueryFnData,
26
- TQueryKey extends QueryKey = QueryKey,
27
- >(
28
- options: DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,
29
- ): DefinedUseQueryResult<TData, TError>
30
18
  export function useQuery<
31
19
  TQueryFnData = unknown,
32
20
  TError = unknown,
@@ -42,14 +30,6 @@ export function useQuery<
42
30
  | (() => NonUndefinedGuard<TQueryFnData>)
43
31
  },
44
32
  ): DefinedUseQueryResult<TData, TError>
45
- export function useQuery<
46
- TQueryFnData = unknown,
47
- TError = unknown,
48
- TData = TQueryFnData,
49
- TQueryKey extends QueryKey = QueryKey,
50
- >(
51
- options: UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,
52
- ): UseQueryResult<TData, TError>
53
33
  export function useQuery<
54
34
  TQueryFnData = unknown,
55
35
  TError = unknown,
@@ -156,7 +136,6 @@ export function useQuery<
156
136
  'queryKey' | 'queryFn'
157
137
  >,
158
138
  ): UseQueryResult<TData, TError>
159
- /** @deprecated */
160
139
  export function useQuery<
161
140
  TQueryFnData,
162
141
  TError,
@@ -1,10 +1,10 @@
1
1
  import { useQueries } from './useQueries'
2
- import type { UseQueryOptions } from './types'
3
- import type { NetworkMode, QueryFunction } from '@tanstack/query-core'
4
2
  import type {
3
+ UseQueryOptions,
5
4
  UseSuspenseQueryOptions,
6
5
  UseSuspenseQueryResult,
7
- } from './useSuspenseQuery'
6
+ } from './types'
7
+ import type { NetworkMode, QueryFunction } from '@tanstack/query-core'
8
8
 
9
9
  // Avoid TS depth-limit error in case of large array literal
10
10
  type MAXIMUM_DEPTH = 20
@@ -1,42 +1,7 @@
1
1
  import { QueryObserver } from '@tanstack/query-core'
2
2
  import { useBaseQuery } from './useBaseQuery'
3
- import type {
4
- DefinedQueryObserverResult,
5
- OmitKeyof,
6
- QueryKey,
7
- } from '@tanstack/query-core'
8
- import type { UseQueryOptions } from './types'
9
-
10
- type DistributiveOmit<TObject, TKey extends keyof TObject> = TObject extends any
11
- ? Omit<TObject, TKey>
12
- : never
13
-
14
- export type UseSuspenseQueryResult<
15
- TData = unknown,
16
- TError = unknown,
17
- > = DistributiveOmit<
18
- DefinedQueryObserverResult<TData, TError>,
19
- 'isPlaceholderData'
20
- >
21
-
22
- export type UseSuspenseQueryOptions<
23
- TQueryFnData = unknown,
24
- TError = unknown,
25
- TData = TQueryFnData,
26
- TQueryKey extends QueryKey = QueryKey,
27
- > = OmitKeyof<
28
- UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
29
- | 'enabled'
30
- | 'useErrorBoundary'
31
- | 'suspense'
32
- | 'placeholderData'
33
- | 'networkMode'
34
- | 'onSuccess'
35
- | 'onError'
36
- | 'onSettled'
37
- | 'getPreviousPageParam'
38
- | 'getNextPageParam'
39
- >
3
+ import type { QueryKey } from '@tanstack/query-core'
4
+ import type { UseSuspenseQueryOptions, UseSuspenseQueryResult } from './types'
40
5
 
41
6
  export function useSuspenseQuery<
42
7
  TQueryFnData = unknown,
@@ -52,6 +17,9 @@ export function useSuspenseQuery<
52
17
  suspense: true,
53
18
  placeholderData: undefined,
54
19
  networkMode: 'always',
20
+ onSuccess: undefined,
21
+ onError: undefined,
22
+ onSettled: undefined,
55
23
  },
56
24
  QueryObserver,
57
25
  ) as UseSuspenseQueryResult<TData, TError>