@tanstack/react-query 4.35.7 → 4.39.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 (146) hide show
  1. package/build/lib/__tests__/queryOptions.types.test.d.ts +2 -0
  2. package/build/lib/__tests__/useSuspenseQueries.types.test.d.ts +6 -0
  3. package/build/lib/__tests__/useSuspenseQuery.types.test.d.ts +2 -0
  4. package/build/lib/__tests__/utils.d.ts +1 -0
  5. package/build/lib/index.d.ts +3 -0
  6. package/build/lib/queryOptions.d.ts +14 -0
  7. package/build/lib/useQueries.d.ts +22 -11
  8. package/build/lib/useQuery.d.ts +21 -14
  9. package/build/lib/useSuspenseQueries.d.ts +66 -0
  10. package/build/lib/useSuspenseQuery.d.ts +8 -0
  11. package/package.json +3 -10
  12. package/src/__tests__/queryOptions.types.test.tsx +270 -0
  13. package/src/__tests__/useQuery.types.test.tsx +1 -2
  14. package/src/__tests__/useSuspenseQueries.types.test.tsx +102 -0
  15. package/src/__tests__/useSuspenseQuery.types.test.tsx +81 -0
  16. package/src/__tests__/utils.tsx +2 -0
  17. package/src/index.ts +3 -0
  18. package/src/queryOptions.ts +86 -0
  19. package/src/useQueries.ts +50 -22
  20. package/src/useQuery.ts +55 -22
  21. package/src/useSuspenseQueries.ts +162 -0
  22. package/src/useSuspenseQuery.ts +58 -0
  23. package/build/lib/Hydrate.esm.js +0 -32
  24. package/build/lib/Hydrate.esm.js.map +0 -1
  25. package/build/lib/Hydrate.js +0 -57
  26. package/build/lib/Hydrate.js.map +0 -1
  27. package/build/lib/Hydrate.mjs +0 -32
  28. package/build/lib/Hydrate.mjs.map +0 -1
  29. package/build/lib/QueryClientProvider.esm.js +0 -66
  30. package/build/lib/QueryClientProvider.esm.js.map +0 -1
  31. package/build/lib/QueryClientProvider.js +0 -92
  32. package/build/lib/QueryClientProvider.js.map +0 -1
  33. package/build/lib/QueryClientProvider.mjs +0 -66
  34. package/build/lib/QueryClientProvider.mjs.map +0 -1
  35. package/build/lib/QueryErrorResetBoundary.esm.js +0 -33
  36. package/build/lib/QueryErrorResetBoundary.esm.js.map +0 -1
  37. package/build/lib/QueryErrorResetBoundary.js +0 -58
  38. package/build/lib/QueryErrorResetBoundary.js.map +0 -1
  39. package/build/lib/QueryErrorResetBoundary.mjs +0 -33
  40. package/build/lib/QueryErrorResetBoundary.mjs.map +0 -1
  41. package/build/lib/errorBoundaryUtils.esm.js +0 -28
  42. package/build/lib/errorBoundaryUtils.esm.js.map +0 -1
  43. package/build/lib/errorBoundaryUtils.js +0 -54
  44. package/build/lib/errorBoundaryUtils.js.map +0 -1
  45. package/build/lib/errorBoundaryUtils.mjs +0 -28
  46. package/build/lib/errorBoundaryUtils.mjs.map +0 -1
  47. package/build/lib/index.esm.js +0 -13
  48. package/build/lib/index.esm.js.map +0 -1
  49. package/build/lib/index.js +0 -41
  50. package/build/lib/index.js.map +0 -1
  51. package/build/lib/index.mjs +0 -13
  52. package/build/lib/index.mjs.map +0 -1
  53. package/build/lib/isRestoring.esm.js +0 -9
  54. package/build/lib/isRestoring.esm.js.map +0 -1
  55. package/build/lib/isRestoring.js +0 -34
  56. package/build/lib/isRestoring.js.map +0 -1
  57. package/build/lib/isRestoring.mjs +0 -9
  58. package/build/lib/isRestoring.mjs.map +0 -1
  59. package/build/lib/reactBatchedUpdates.esm.js +0 -7
  60. package/build/lib/reactBatchedUpdates.esm.js.map +0 -1
  61. package/build/lib/reactBatchedUpdates.js +0 -31
  62. package/build/lib/reactBatchedUpdates.js.map +0 -1
  63. package/build/lib/reactBatchedUpdates.mjs +0 -7
  64. package/build/lib/reactBatchedUpdates.mjs.map +0 -1
  65. package/build/lib/reactBatchedUpdates.native.esm.js +0 -2
  66. package/build/lib/reactBatchedUpdates.native.esm.js.map +0 -1
  67. package/build/lib/reactBatchedUpdates.native.js +0 -13
  68. package/build/lib/reactBatchedUpdates.native.js.map +0 -1
  69. package/build/lib/reactBatchedUpdates.native.mjs +0 -2
  70. package/build/lib/reactBatchedUpdates.native.mjs.map +0 -1
  71. package/build/lib/setBatchUpdatesFn.esm.js +0 -5
  72. package/build/lib/setBatchUpdatesFn.esm.js.map +0 -1
  73. package/build/lib/setBatchUpdatesFn.js +0 -7
  74. package/build/lib/setBatchUpdatesFn.js.map +0 -1
  75. package/build/lib/setBatchUpdatesFn.mjs +0 -5
  76. package/build/lib/setBatchUpdatesFn.mjs.map +0 -1
  77. package/build/lib/suspense.esm.js +0 -24
  78. package/build/lib/suspense.esm.js.map +0 -1
  79. package/build/lib/suspense.js +0 -31
  80. package/build/lib/suspense.js.map +0 -1
  81. package/build/lib/suspense.mjs +0 -24
  82. package/build/lib/suspense.mjs.map +0 -1
  83. package/build/lib/useBaseQuery.esm.js +0 -72
  84. package/build/lib/useBaseQuery.esm.js.map +0 -1
  85. package/build/lib/useBaseQuery.js +0 -96
  86. package/build/lib/useBaseQuery.js.map +0 -1
  87. package/build/lib/useBaseQuery.mjs +0 -72
  88. package/build/lib/useBaseQuery.mjs.map +0 -1
  89. package/build/lib/useInfiniteQuery.esm.js +0 -11
  90. package/build/lib/useInfiniteQuery.esm.js.map +0 -1
  91. package/build/lib/useInfiniteQuery.js +0 -15
  92. package/build/lib/useInfiniteQuery.js.map +0 -1
  93. package/build/lib/useInfiniteQuery.mjs +0 -11
  94. package/build/lib/useInfiniteQuery.mjs.map +0 -1
  95. package/build/lib/useIsFetching.esm.js +0 -17
  96. package/build/lib/useIsFetching.esm.js.map +0 -1
  97. package/build/lib/useIsFetching.js +0 -41
  98. package/build/lib/useIsFetching.js.map +0 -1
  99. package/build/lib/useIsFetching.mjs +0 -17
  100. package/build/lib/useIsFetching.mjs.map +0 -1
  101. package/build/lib/useIsMutating.esm.js +0 -17
  102. package/build/lib/useIsMutating.esm.js.map +0 -1
  103. package/build/lib/useIsMutating.js +0 -41
  104. package/build/lib/useIsMutating.js.map +0 -1
  105. package/build/lib/useIsMutating.mjs +0 -17
  106. package/build/lib/useIsMutating.mjs.map +0 -1
  107. package/build/lib/useMutation.esm.js +0 -35
  108. package/build/lib/useMutation.esm.js.map +0 -1
  109. package/build/lib/useMutation.js +0 -59
  110. package/build/lib/useMutation.js.map +0 -1
  111. package/build/lib/useMutation.mjs +0 -35
  112. package/build/lib/useMutation.mjs.map +0 -1
  113. package/build/lib/useQueries.esm.js +0 -81
  114. package/build/lib/useQueries.esm.js.map +0 -1
  115. package/build/lib/useQueries.js +0 -105
  116. package/build/lib/useQueries.js.map +0 -1
  117. package/build/lib/useQueries.mjs +0 -81
  118. package/build/lib/useQueries.mjs.map +0 -1
  119. package/build/lib/useQuery.esm.js +0 -11
  120. package/build/lib/useQuery.esm.js.map +0 -1
  121. package/build/lib/useQuery.js +0 -15
  122. package/build/lib/useQuery.js.map +0 -1
  123. package/build/lib/useQuery.mjs +0 -11
  124. package/build/lib/useQuery.mjs.map +0 -1
  125. package/build/lib/useSyncExternalStore.esm.js +0 -7
  126. package/build/lib/useSyncExternalStore.esm.js.map +0 -1
  127. package/build/lib/useSyncExternalStore.js +0 -11
  128. package/build/lib/useSyncExternalStore.js.map +0 -1
  129. package/build/lib/useSyncExternalStore.mjs +0 -7
  130. package/build/lib/useSyncExternalStore.mjs.map +0 -1
  131. package/build/lib/useSyncExternalStore.native.esm.js +0 -2
  132. package/build/lib/useSyncExternalStore.native.esm.js.map +0 -1
  133. package/build/lib/useSyncExternalStore.native.js +0 -13
  134. package/build/lib/useSyncExternalStore.native.js.map +0 -1
  135. package/build/lib/useSyncExternalStore.native.mjs +0 -2
  136. package/build/lib/useSyncExternalStore.native.mjs.map +0 -1
  137. package/build/lib/utils.esm.js +0 -11
  138. package/build/lib/utils.esm.js.map +0 -1
  139. package/build/lib/utils.js +0 -15
  140. package/build/lib/utils.js.map +0 -1
  141. package/build/lib/utils.mjs +0 -11
  142. package/build/lib/utils.mjs.map +0 -1
  143. package/build/umd/index.development.js +0 -3961
  144. package/build/umd/index.development.js.map +0 -1
  145. package/build/umd/index.production.js +0 -2
  146. package/build/umd/index.production.js.map +0 -1
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=queryOptions.types.test.d.ts.map
@@ -0,0 +1,6 @@
1
+ export declare const queryKey: readonly ["key"];
2
+ export declare const queryFn: () => Promise<{
3
+ text: string;
4
+ }>;
5
+ export declare const select: (data: Awaited<ReturnType<typeof queryFn>>) => string;
6
+ //# sourceMappingURL=useSuspenseQueries.types.test.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=useSuspenseQuery.types.test.d.ts.map
@@ -4,6 +4,7 @@ import * as React from 'react';
4
4
  import { render } from '@testing-library/react';
5
5
  import { QueryClient } from '..';
6
6
  import type { ContextOptions, MutationOptions, QueryClientConfig } from '..';
7
+ export declare const doNotExecute: (_func: () => void) => boolean;
7
8
  export declare function renderWithClient(client: QueryClient, ui: React.ReactElement, options?: ContextOptions): ReturnType<typeof render>;
8
9
  export declare const Blink: ({ duration, children, }: {
9
10
  duration: number;
@@ -4,6 +4,8 @@ export * from './types';
4
4
  export { useQueries } from './useQueries';
5
5
  export type { QueriesResults, QueriesOptions } from './useQueries';
6
6
  export { useQuery } from './useQuery';
7
+ export { useSuspenseQuery } from './useSuspenseQuery';
8
+ export { useSuspenseQueries } from './useSuspenseQueries';
7
9
  export { defaultContext, QueryClientProvider, useQueryClient, } from './QueryClientProvider';
8
10
  export type { QueryClientProviderProps } from './QueryClientProvider';
9
11
  export type { QueryErrorResetBoundaryProps } from './QueryErrorResetBoundary';
@@ -15,4 +17,5 @@ export { useIsMutating } from './useIsMutating';
15
17
  export { useMutation } from './useMutation';
16
18
  export { useInfiniteQuery } from './useInfiniteQuery';
17
19
  export { useIsRestoring, IsRestoringProvider } from './isRestoring';
20
+ export { queryOptions } from './queryOptions';
18
21
  //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,14 @@
1
+ import type { InitialDataFunction, NonUndefinedGuard, OmitKeyof, QueryKey, WithRequired } from '@tanstack/query-core';
2
+ import type { UseQueryOptions } from './types';
3
+ declare type UseQueryOptionsOmitted<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> = OmitKeyof<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'onSuccess' | 'onError' | 'onSettled' | 'refetchInterval'>;
4
+ declare type ProhibitedQueryOptionsKeyInV5 = keyof Pick<UseQueryOptionsOmitted, 'useErrorBoundary' | 'suspense' | 'getNextPageParam' | 'getPreviousPageParam'>;
5
+ export declare type UndefinedInitialDataOptions<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> = UseQueryOptionsOmitted<TQueryFnData, TError, TData, TQueryKey> & {
6
+ initialData?: undefined | InitialDataFunction<NonUndefinedGuard<TQueryFnData>> | NonUndefinedGuard<TQueryFnData>;
7
+ };
8
+ export declare type DefinedInitialDataOptions<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> = UseQueryOptionsOmitted<TQueryFnData, TError, TData, TQueryKey> & {
9
+ initialData: NonUndefinedGuard<TQueryFnData> | (() => NonUndefinedGuard<TQueryFnData>);
10
+ };
11
+ export declare function queryOptions<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(options: WithRequired<OmitKeyof<DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>, ProhibitedQueryOptionsKeyInV5>, 'queryKey'>): WithRequired<DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>, 'queryKey'>;
12
+ export declare function queryOptions<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(options: WithRequired<OmitKeyof<UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>, ProhibitedQueryOptionsKeyInV5>, 'queryKey'>): WithRequired<UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>, 'queryKey'>;
13
+ export {};
14
+ //# sourceMappingURL=queryOptions.d.ts.map
@@ -1,6 +1,6 @@
1
- import type { QueryFunction, QueryKey } from '@tanstack/query-core';
2
- import type { UseQueryOptions, UseQueryResult } from './types';
3
- declare type UseQueryOptionsForUseQueries<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> = Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'context'>;
1
+ import type { OmitKeyof, QueryFunction, QueryKey } from '@tanstack/query-core';
2
+ import type { DefinedUseQueryResult, UseQueryOptions, UseQueryResult } from './types';
3
+ declare type UseQueryOptionsForUseQueries<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> = OmitKeyof<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'context'>;
4
4
  declare type MAXIMUM_DEPTH = 20;
5
5
  declare type GetOptions<T> = T extends {
6
6
  queryFnData: infer TQueryFnData;
@@ -18,30 +18,41 @@ declare type GetOptions<T> = T extends {
18
18
  } ? UseQueryOptionsForUseQueries<TQueryFnData, unknown, TData, TQueryKey> : T extends {
19
19
  queryFn?: QueryFunction<infer TQueryFnData, infer TQueryKey>;
20
20
  } ? UseQueryOptionsForUseQueries<TQueryFnData, unknown, TQueryFnData, TQueryKey> : UseQueryOptionsForUseQueries;
21
- declare type GetResults<T> = T extends {
21
+ declare type GetDefinedOrUndefinedQueryResult<T, TData, TError = unknown> = T extends {
22
+ initialData?: infer TInitialData;
23
+ } ? unknown extends TInitialData ? UseQueryResult<TData, TError> : TInitialData extends TData ? DefinedUseQueryResult<TData, TError> : TInitialData extends () => infer TInitialDataResult ? unknown extends TInitialDataResult ? UseQueryResult<TData, TError> : TInitialDataResult extends TData ? DefinedUseQueryResult<TData, TError> : UseQueryResult<TData, TError> : UseQueryResult<TData, TError> : UseQueryResult<TData, TError>;
24
+ declare type GetUseQueryResult<T> = T extends {
22
25
  queryFnData: any;
23
26
  error?: infer TError;
24
27
  data: infer TData;
25
- } ? UseQueryResult<TData, TError> : T extends {
28
+ } ? GetDefinedOrUndefinedQueryResult<T, TData, TError> : T extends {
26
29
  queryFnData: infer TQueryFnData;
27
30
  error?: infer TError;
28
- } ? UseQueryResult<TQueryFnData, TError> : T extends {
31
+ } ? GetDefinedOrUndefinedQueryResult<T, TQueryFnData, TError> : T extends {
29
32
  data: infer TData;
30
33
  error?: infer TError;
31
- } ? UseQueryResult<TData, TError> : T extends [any, infer TError, infer TData] ? UseQueryResult<TData, TError> : T extends [infer TQueryFnData, infer TError] ? UseQueryResult<TQueryFnData, TError> : T extends [infer TQueryFnData] ? UseQueryResult<TQueryFnData> : T extends {
34
+ } ? GetDefinedOrUndefinedQueryResult<T, TData, TError> : T extends [any, infer TError, infer TData] ? GetDefinedOrUndefinedQueryResult<T, TData, TError> : T extends [infer TQueryFnData, infer TError] ? GetDefinedOrUndefinedQueryResult<T, TQueryFnData, TError> : T extends [infer TQueryFnData] ? GetDefinedOrUndefinedQueryResult<T, TQueryFnData> : T extends {
32
35
  queryFn?: QueryFunction<unknown, any>;
33
36
  select: (data: any) => infer TData;
34
- } ? UseQueryResult<TData> : T extends {
37
+ } ? GetDefinedOrUndefinedQueryResult<T, TData> : T extends {
35
38
  queryFn?: QueryFunction<infer TQueryFnData, any>;
36
- } ? UseQueryResult<TQueryFnData> : UseQueryResult;
39
+ } ? GetDefinedOrUndefinedQueryResult<T, TQueryFnData> : UseQueryResult;
37
40
  /**
38
41
  * QueriesOptions reducer recursively unwraps function arguments to infer/enforce type param
39
42
  */
40
- export declare type QueriesOptions<T extends any[], Result extends any[] = [], Depth extends ReadonlyArray<number> = []> = Depth['length'] extends MAXIMUM_DEPTH ? UseQueryOptionsForUseQueries[] : T extends [] ? [] : T extends [infer Head] ? [...Result, GetOptions<Head>] : T extends [infer Head, ...infer Tail] ? QueriesOptions<[...Tail], [...Result, GetOptions<Head>], [...Depth, 1]> : unknown[] extends T ? T : T extends UseQueryOptionsForUseQueries<infer TQueryFnData, infer TError, infer TData, infer TQueryKey>[] ? UseQueryOptionsForUseQueries<TQueryFnData, TError, TData, TQueryKey>[] : UseQueryOptionsForUseQueries[];
43
+ export declare type QueriesOptions<T extends any[], TResult extends any[] = [], TDepth extends ReadonlyArray<number> = []> = TDepth['length'] extends MAXIMUM_DEPTH ? UseQueryOptionsForUseQueries[] : T extends [] ? [] : T extends [infer Head] ? [...TResult, GetOptions<Head>] : T extends [infer Head, ...infer Tail] ? QueriesOptions<[...Tail], [...TResult, GetOptions<Head>], [...TDepth, 1]> : unknown[] extends T ? T : T extends UseQueryOptionsForUseQueries<infer TQueryFnData, infer TError, infer TData, infer TQueryKey>[] ? UseQueryOptionsForUseQueries<TQueryFnData, TError, TData, TQueryKey>[] : UseQueryOptionsForUseQueries[];
41
44
  /**
42
45
  * QueriesResults reducer recursively maps type param to results
43
46
  */
44
- export declare type QueriesResults<T extends any[], Result extends any[] = [], Depth extends ReadonlyArray<number> = []> = Depth['length'] extends MAXIMUM_DEPTH ? UseQueryResult[] : T extends [] ? [] : T extends [infer Head] ? [...Result, GetResults<Head>] : T extends [infer Head, ...infer Tail] ? QueriesResults<[...Tail], [...Result, GetResults<Head>], [...Depth, 1]> : T extends UseQueryOptionsForUseQueries<infer TQueryFnData, infer TError, infer TData, any>[] ? UseQueryResult<unknown extends TData ? TQueryFnData : TData, TError>[] : UseQueryResult[];
47
+ export declare type QueriesResults<T extends any[], TResults extends any[] = [], TDepth extends ReadonlyArray<number> = []> = TDepth['length'] extends MAXIMUM_DEPTH ? UseQueryResult[] : T extends [] ? [] : T extends [infer Head] ? [...TResults, GetUseQueryResult<Head>] : T extends [infer Head, ...infer Tail] ? QueriesResults<[
48
+ ...Tail
49
+ ], [
50
+ ...TResults,
51
+ GetUseQueryResult<Head>
52
+ ], [
53
+ ...TDepth,
54
+ 1
55
+ ]> : T extends UseQueryOptionsForUseQueries<infer TQueryFnData, infer TError, infer TData, any>[] ? UseQueryResult<unknown extends TData ? TQueryFnData : TData, TError>[] : UseQueryResult[];
45
56
  export declare function useQueries<T extends any[]>({ queries, context, }: {
46
57
  queries: readonly [...QueriesOptions<T>];
47
58
  context?: UseQueryOptions['context'];
@@ -1,24 +1,31 @@
1
- import type { QueryFunction, QueryKey } from '@tanstack/query-core';
1
+ import type { DefinedInitialDataOptions, UndefinedInitialDataOptions } from './queryOptions';
2
+ import type { InitialDataFunction, NonUndefinedGuard, OmitKeyof, QueryFunction, QueryKey } from '@tanstack/query-core';
2
3
  import type { DefinedUseQueryResult, UseQueryOptions, UseQueryResult } from './types';
3
- export declare function useQuery<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(options: Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'initialData'> & {
4
- initialData?: () => undefined;
5
- }): UseQueryResult<TData, TError>;
6
- export declare function useQuery<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(options: Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'initialData'> & {
7
- initialData: TQueryFnData | (() => TQueryFnData);
4
+ export declare function useQuery<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(options: DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>): DefinedUseQueryResult<TData, TError>;
5
+ export declare function useQuery<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(options: OmitKeyof<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'initialData'> & {
6
+ initialData: NonUndefinedGuard<TQueryFnData> | (() => NonUndefinedGuard<TQueryFnData>);
8
7
  }): DefinedUseQueryResult<TData, TError>;
9
- export declare function useQuery<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(options: UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>): UseQueryResult<TData, TError>;
10
- export declare function useQuery<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(queryKey: TQueryKey, options?: Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'queryKey' | 'initialData'> & {
11
- initialData?: () => undefined;
8
+ export declare function useQuery<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(options: UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>): UseQueryResult<TData, TError>;
9
+ export declare function useQuery<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(options: OmitKeyof<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'initialData'> & {
10
+ initialData?: undefined | InitialDataFunction<NonUndefinedGuard<TQueryFnData>> | NonUndefinedGuard<TQueryFnData>;
12
11
  }): UseQueryResult<TData, TError>;
13
- export declare function useQuery<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(queryKey: TQueryKey, options?: Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'queryKey' | 'initialData'> & {
12
+ export declare function useQuery<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(options: UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>): UseQueryResult<TData, TError>;
13
+ /** @deprecated */
14
+ export declare function useQuery<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(queryKey: TQueryKey, options?: OmitKeyof<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'queryKey' | 'initialData'>): UseQueryResult<TData, TError>;
15
+ /** @deprecated */
16
+ export declare function useQuery<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(queryKey: TQueryKey, options?: OmitKeyof<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'queryKey' | 'initialData'> & {
14
17
  initialData: TQueryFnData | (() => TQueryFnData);
15
18
  }): DefinedUseQueryResult<TData, TError>;
16
- export declare function useQuery<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(queryKey: TQueryKey, options?: Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'queryKey'>): UseQueryResult<TData, TError>;
17
- export declare function useQuery<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(queryKey: TQueryKey, queryFn: QueryFunction<TQueryFnData, TQueryKey>, options?: Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'queryKey' | 'queryFn' | 'initialData'> & {
19
+ /** @deprecated */
20
+ export declare function useQuery<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(queryKey: TQueryKey, options?: OmitKeyof<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'queryKey'>): UseQueryResult<TData, TError>;
21
+ /** @deprecated */
22
+ export declare function useQuery<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(queryKey: TQueryKey, queryFn: QueryFunction<TQueryFnData, TQueryKey>, options?: OmitKeyof<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'queryKey' | 'queryFn' | 'initialData'> & {
18
23
  initialData?: () => undefined;
19
24
  }): UseQueryResult<TData, TError>;
20
- export declare function useQuery<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(queryKey: TQueryKey, queryFn: QueryFunction<TQueryFnData, TQueryKey>, options?: Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'queryKey' | 'queryFn' | 'initialData'> & {
25
+ /** @deprecated */
26
+ export declare function useQuery<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(queryKey: TQueryKey, queryFn: QueryFunction<TQueryFnData, TQueryKey>, options?: OmitKeyof<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'queryKey' | 'queryFn' | 'initialData'> & {
21
27
  initialData: TQueryFnData | (() => TQueryFnData);
22
28
  }): DefinedUseQueryResult<TData, TError>;
23
- export declare function useQuery<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(queryKey: TQueryKey, queryFn: QueryFunction<TQueryFnData, TQueryKey>, options?: Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'queryKey' | 'queryFn'>): UseQueryResult<TData, TError>;
29
+ /** @deprecated */
30
+ export declare function useQuery<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(queryKey: TQueryKey, queryFn: QueryFunction<TQueryFnData, TQueryKey>, options?: OmitKeyof<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'queryKey' | 'queryFn'>): UseQueryResult<TData, TError>;
24
31
  //# sourceMappingURL=useQuery.d.ts.map
@@ -0,0 +1,66 @@
1
+ import type { UseQueryOptions } from './types';
2
+ import type { QueryFunction } from '@tanstack/query-core';
3
+ import type { UseSuspenseQueryOptions, UseSuspenseQueryResult } from './useSuspenseQuery';
4
+ declare type MAXIMUM_DEPTH = 20;
5
+ declare type GetSuspenseOptions<T> = T extends {
6
+ queryFnData: infer TQueryFnData;
7
+ error?: infer TError;
8
+ data: infer TData;
9
+ } ? UseSuspenseQueryOptions<TQueryFnData, TError, TData> : T extends {
10
+ queryFnData: infer TQueryFnData;
11
+ error?: infer TError;
12
+ } ? UseSuspenseQueryOptions<TQueryFnData, TError> : T extends {
13
+ data: infer TData;
14
+ error?: infer TError;
15
+ } ? UseSuspenseQueryOptions<unknown, TError, TData> : T extends [infer TQueryFnData, infer TError, infer TData] ? UseSuspenseQueryOptions<TQueryFnData, TError, TData> : T extends [infer TQueryFnData, infer TError] ? UseSuspenseQueryOptions<TQueryFnData, TError> : T extends [infer TQueryFnData] ? UseSuspenseQueryOptions<TQueryFnData> : T extends {
16
+ queryFn?: QueryFunction<infer TQueryFnData, infer TQueryKey>;
17
+ select?: (data: any) => infer TData;
18
+ } ? UseSuspenseQueryOptions<TQueryFnData, unknown, TData, TQueryKey> : T extends {
19
+ queryFn?: QueryFunction<infer TQueryFnData, infer TQueryKey>;
20
+ } ? UseSuspenseQueryOptions<TQueryFnData, unknown, TQueryFnData, TQueryKey> : UseSuspenseQueryOptions;
21
+ declare type GetSuspenseResults<T> = T extends {
22
+ queryFnData: any;
23
+ error?: infer TError;
24
+ data: infer TData;
25
+ } ? UseSuspenseQueryResult<TData, TError> : T extends {
26
+ queryFnData: infer TQueryFnData;
27
+ error?: infer TError;
28
+ } ? UseSuspenseQueryResult<TQueryFnData, TError> : T extends {
29
+ data: infer TData;
30
+ error?: infer TError;
31
+ } ? UseSuspenseQueryResult<TData, TError> : T extends [any, infer TError, infer TData] ? UseSuspenseQueryResult<TData, TError> : T extends [infer TQueryFnData, infer TError] ? UseSuspenseQueryResult<TQueryFnData, TError> : T extends [infer TQueryFnData] ? UseSuspenseQueryResult<TQueryFnData> : T extends {
32
+ queryFn?: QueryFunction<infer TQueryFnData, any>;
33
+ select?: (data: any) => infer TData;
34
+ } ? UseSuspenseQueryResult<unknown extends TData ? TQueryFnData : TData> : T extends {
35
+ queryFn?: QueryFunction<infer TQueryFnData, any>;
36
+ } ? UseSuspenseQueryResult<TQueryFnData> : UseSuspenseQueryResult;
37
+ /**
38
+ * SuspenseQueriesOptions reducer recursively unwraps function arguments to infer/enforce type param
39
+ */
40
+ export declare type SuspenseQueriesOptions<T extends Array<any>, TResult extends Array<any> = [], TDepth extends ReadonlyArray<number> = []> = TDepth['length'] extends MAXIMUM_DEPTH ? Array<UseSuspenseQueryOptions> : T extends [] ? [] : T extends [infer Head] ? [...TResult, GetSuspenseOptions<Head>] : T extends [infer Head, ...infer Tail] ? SuspenseQueriesOptions<[
41
+ ...Tail
42
+ ], [
43
+ ...TResult,
44
+ GetSuspenseOptions<Head>
45
+ ], [
46
+ ...TDepth,
47
+ 1
48
+ ]> : Array<unknown> extends T ? T : T extends Array<UseSuspenseQueryOptions<infer TQueryFnData, infer TError, infer TData, infer TQueryKey>> ? Array<UseSuspenseQueryOptions<TQueryFnData, TError, TData, TQueryKey>> : Array<UseSuspenseQueryOptions>;
49
+ /**
50
+ * SuspenseQueriesResults reducer recursively maps type param to results
51
+ */
52
+ export declare type SuspenseQueriesResults<T extends Array<any>, TResult extends Array<any> = [], TDepth extends ReadonlyArray<number> = []> = TDepth['length'] extends MAXIMUM_DEPTH ? Array<UseSuspenseQueryResult> : T extends [] ? [] : T extends [infer Head] ? [...TResult, GetSuspenseResults<Head>] : T extends [infer Head, ...infer Tail] ? SuspenseQueriesResults<[
53
+ ...Tail
54
+ ], [
55
+ ...TResult,
56
+ GetSuspenseResults<Head>
57
+ ], [
58
+ ...TDepth,
59
+ 1
60
+ ]> : T extends Array<UseSuspenseQueryOptions<infer TQueryFnData, infer TError, infer TData, any>> ? Array<UseSuspenseQueryResult<unknown extends TData ? TQueryFnData : TData, TError>> : Array<UseSuspenseQueryResult>;
61
+ export declare function useSuspenseQueries<T extends any[]>({ queries, context, }: {
62
+ queries: readonly [...SuspenseQueriesOptions<T>];
63
+ context?: UseQueryOptions['context'];
64
+ }): SuspenseQueriesResults<T>;
65
+ export {};
66
+ //# sourceMappingURL=useSuspenseQueries.d.ts.map
@@ -0,0 +1,8 @@
1
+ import type { DefinedQueryObserverResult, OmitKeyof, QueryKey } from '@tanstack/query-core';
2
+ import type { UseQueryOptions } from './types';
3
+ declare type DistributiveOmit<TObject, TKey extends keyof TObject> = TObject extends any ? Omit<TObject, TKey> : never;
4
+ export declare type UseSuspenseQueryResult<TData = unknown, TError = unknown> = DistributiveOmit<DefinedQueryObserverResult<TData, TError>, 'isPlaceholderData'>;
5
+ export declare type UseSuspenseQueryOptions<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> = OmitKeyof<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'enabled' | 'useErrorBoundary' | 'suspense' | 'placeholderData' | 'networkMode' | 'onSuccess' | 'onError' | 'onSettled' | 'getPreviousPageParam' | 'getNextPageParam'>;
6
+ export declare function useSuspenseQuery<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(options: UseSuspenseQueryOptions<TQueryFnData, TError, TData, TQueryKey>): UseSuspenseQueryResult<TData, TError>;
7
+ export {};
8
+ //# sourceMappingURL=useSuspenseQuery.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/react-query",
3
- "version": "4.35.7",
3
+ "version": "4.39.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.35.7"
54
+ "@tanstack/query-core": "4.39.0"
55
55
  },
56
56
  "peerDependencies": {
57
57
  "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
@@ -66,12 +66,5 @@
66
66
  "optional": true
67
67
  }
68
68
  },
69
- "scripts": {
70
- "clean": "rimraf ./build",
71
- "test:eslint": "eslint --ext .ts,.tsx ./src",
72
- "test:types": "tsc",
73
- "test:lib": "jest --config ./jest.config.ts",
74
- "test:lib:dev": "pnpm run test:lib --watch",
75
- "build:types": "tsc --build"
76
- }
69
+ "scripts": {}
77
70
  }
@@ -0,0 +1,270 @@
1
+ import { expectTypeOf } from 'expect-type'
2
+ import {
3
+ QueryCache,
4
+ type UseQueryResult,
5
+ useQueries,
6
+ useQuery,
7
+ useQueryClient,
8
+ } from '@tanstack/react-query'
9
+ import { queryOptions } from '..'
10
+ import { useSuspenseQueries, useSuspenseQuery } from '..'
11
+ import { type UseSuspenseQueryResult } from '../useSuspenseQuery'
12
+ import { doNotExecute } from './utils'
13
+ import type { DefinedUseQueryResult } from '@tanstack/react-query'
14
+
15
+ const queryKey = ['key'] as const
16
+ const queryFn = () => Promise.resolve({ field: 'success' })
17
+
18
+ describe('queryOptions', () => {
19
+ it('should be used with useQuery', () => {
20
+ doNotExecute(() => {
21
+ const dd = useQuery(
22
+ queryOptions({
23
+ queryKey,
24
+ queryFn,
25
+ }),
26
+ )
27
+ expectTypeOf(dd).toEqualTypeOf<UseQueryResult<{ field: string }>>()
28
+ expectTypeOf(
29
+ useQuery({
30
+ ...queryOptions({
31
+ queryKey,
32
+ queryFn,
33
+ }),
34
+ select: (data) => data.field,
35
+ }),
36
+ ).toEqualTypeOf<UseQueryResult<string>>()
37
+ expectTypeOf(
38
+ useQuery({
39
+ ...queryOptions({
40
+ queryKey,
41
+ queryFn,
42
+ select: (data) => data.field,
43
+ }),
44
+ }),
45
+ ).toEqualTypeOf<UseQueryResult<string>>()
46
+ expectTypeOf(
47
+ useQuery({
48
+ ...queryOptions({
49
+ queryKey,
50
+ queryFn,
51
+ }),
52
+ initialData: { field: 'success' },
53
+ }),
54
+ ).toEqualTypeOf<DefinedUseQueryResult<{ field: string }>>()
55
+ expectTypeOf(
56
+ useQuery({
57
+ ...queryOptions({
58
+ queryKey,
59
+ queryFn,
60
+ }),
61
+ initialData: { field: 'success' },
62
+ select: (data) => data.field,
63
+ }),
64
+ ).toEqualTypeOf<DefinedUseQueryResult<string>>()
65
+ expectTypeOf(
66
+ useQuery({
67
+ ...queryOptions({
68
+ queryKey,
69
+ queryFn,
70
+ }),
71
+ initialData: undefined,
72
+ select: (data) => data.field,
73
+ }),
74
+ ).toEqualTypeOf<UseQueryResult<string>>()
75
+ expectTypeOf(
76
+ useQuery({
77
+ ...queryOptions({
78
+ queryKey,
79
+ queryFn,
80
+ }),
81
+ initialData: () => undefined,
82
+ select: (data) => data.field,
83
+ }),
84
+ ).toEqualTypeOf<UseQueryResult<string>>()
85
+ expectTypeOf(
86
+ useQuery({
87
+ ...queryOptions({
88
+ queryKey,
89
+ queryFn,
90
+ select: (data) => data.field,
91
+ }),
92
+ refetchInterval: 1000,
93
+ }),
94
+ ).toEqualTypeOf<UseQueryResult<string>>()
95
+ })
96
+ })
97
+ it('should be used with useSuspenseQuery', () => {
98
+ doNotExecute(() => {
99
+ expectTypeOf(
100
+ useSuspenseQuery(
101
+ queryOptions({
102
+ queryKey,
103
+ queryFn,
104
+ }),
105
+ ),
106
+ ).toEqualTypeOf<UseSuspenseQueryResult<{ field: string }>>()
107
+
108
+ expectTypeOf(
109
+ useSuspenseQuery({
110
+ ...queryOptions({
111
+ queryKey,
112
+ queryFn,
113
+ }),
114
+ select: (data) => data.field,
115
+ }),
116
+ ).toEqualTypeOf<UseSuspenseQueryResult<string>>()
117
+ expectTypeOf(
118
+ useSuspenseQuery({
119
+ ...queryOptions({
120
+ queryKey,
121
+ queryFn,
122
+ }),
123
+ initialData: { field: 'success' },
124
+ }),
125
+ ).toEqualTypeOf<UseSuspenseQueryResult<{ field: string }>>()
126
+ expectTypeOf(
127
+ useSuspenseQuery({
128
+ ...queryOptions({
129
+ queryKey,
130
+ queryFn,
131
+ }),
132
+ initialData: undefined,
133
+ select: (data) => data.field,
134
+ }),
135
+ ).toEqualTypeOf<UseSuspenseQueryResult<string>>()
136
+ expectTypeOf(
137
+ useSuspenseQuery({
138
+ ...queryOptions({
139
+ queryKey,
140
+ queryFn,
141
+ }),
142
+ initialData: { field: 'success' },
143
+ select: (data) => data.field,
144
+ }),
145
+ ).toEqualTypeOf<UseSuspenseQueryResult<string>>()
146
+ expectTypeOf(
147
+ useSuspenseQuery({
148
+ ...queryOptions({
149
+ queryKey,
150
+ queryFn,
151
+ select: (data) => data.field,
152
+ }),
153
+ refetchInterval: 1000,
154
+ }),
155
+ ).toEqualTypeOf<UseSuspenseQueryResult<string>>()
156
+ })
157
+ })
158
+ it('should be used with useQueries', () => {
159
+ doNotExecute(() => {
160
+ const [query1, query2, query3, query4] = useQueries({
161
+ queries: [
162
+ queryOptions({
163
+ queryKey,
164
+ queryFn,
165
+ }),
166
+ queryOptions({
167
+ queryKey,
168
+ queryFn,
169
+ initialData: { field: 'success' },
170
+ }),
171
+ {
172
+ ...queryOptions({
173
+ queryKey,
174
+ queryFn,
175
+ }),
176
+ initialData: { field: 'success' },
177
+ },
178
+ {
179
+ ...queryOptions({
180
+ queryKey,
181
+ queryFn,
182
+ }),
183
+ initialData: undefined,
184
+ },
185
+ ],
186
+ })
187
+ expectTypeOf(query1).toEqualTypeOf<UseQueryResult<{ field: string }>>()
188
+ expectTypeOf(query2).toEqualTypeOf<
189
+ DefinedUseQueryResult<{ field: string }>
190
+ >()
191
+ expectTypeOf(query3).toEqualTypeOf<
192
+ DefinedUseQueryResult<{ field: string }>
193
+ >()
194
+ expectTypeOf(query4).toEqualTypeOf<UseQueryResult<{ field: string }>>()
195
+ })
196
+ })
197
+ it('should be used with useSuspenseQueries', () => {
198
+ doNotExecute(() => {
199
+ const [query1, query2, query3, query4, query5] = useSuspenseQueries({
200
+ queries: [
201
+ queryOptions({
202
+ queryKey,
203
+ queryFn,
204
+ }),
205
+ queryOptions({
206
+ queryKey,
207
+ queryFn,
208
+ initialData: { field: 'success' },
209
+ }),
210
+ {
211
+ ...queryOptions({
212
+ queryKey,
213
+ queryFn,
214
+ }),
215
+ initialData: { field: 'success' },
216
+ },
217
+ {
218
+ ...queryOptions({
219
+ queryKey,
220
+ queryFn,
221
+ }),
222
+ initialData: undefined,
223
+ },
224
+ {
225
+ ...queryOptions({
226
+ queryKey,
227
+ queryFn,
228
+ select: (data) => data.field,
229
+ }),
230
+ },
231
+ ],
232
+ })
233
+ expectTypeOf(query1).toEqualTypeOf<
234
+ UseSuspenseQueryResult<{ field: string }>
235
+ >()
236
+ expectTypeOf(query2).toEqualTypeOf<
237
+ UseSuspenseQueryResult<{ field: string }>
238
+ >()
239
+ expectTypeOf(query3).toEqualTypeOf<
240
+ UseSuspenseQueryResult<{ field: string }>
241
+ >()
242
+ expectTypeOf(query4).toEqualTypeOf<
243
+ UseSuspenseQueryResult<{ field: string }>
244
+ >()
245
+ expectTypeOf(query5).toEqualTypeOf<UseSuspenseQueryResult<string>>()
246
+ })
247
+ })
248
+ it('should be used with useQueryClient', () => {
249
+ doNotExecute(async () => {
250
+ const queryClient = useQueryClient()
251
+ queryClient.invalidateQueries(queryOptions({ queryKey, queryFn }))
252
+ queryClient.resetQueries(queryOptions({ queryKey, queryFn }))
253
+ queryClient.removeQueries(queryOptions({ queryKey, queryFn }))
254
+ queryClient.cancelQueries(queryOptions({ queryKey, queryFn }))
255
+ queryClient.prefetchQuery(queryOptions({ queryKey, queryFn }))
256
+ queryClient.refetchQueries(queryOptions({ queryKey, queryFn }))
257
+ expectTypeOf(
258
+ await queryClient.fetchQuery(queryOptions({ queryKey, queryFn })),
259
+ ).toEqualTypeOf<{ field: string }>()
260
+ })
261
+ })
262
+ it('should be used with queryCache', () => {
263
+ doNotExecute(() => {
264
+ const queryCache = new QueryCache()
265
+ queryCache.find({ queryKey: [] })
266
+ queryCache.find(queryOptions({ queryKey, queryFn }))
267
+ queryCache.find(queryKey)
268
+ })
269
+ })
270
+ })
@@ -1,4 +1,5 @@
1
1
  import { useQuery } from '../useQuery'
2
+ import { doNotExecute } from './utils'
2
3
 
3
4
  export type Equal<X, Y> = (<T>() => T extends X ? 1 : 2) extends <
4
5
  T,
@@ -8,8 +9,6 @@ export type Equal<X, Y> = (<T>() => T extends X ? 1 : 2) extends <
8
9
 
9
10
  export type Expect<T extends true> = T
10
11
 
11
- const doNotExecute = (_func: () => void) => true
12
-
13
12
  describe('initialData', () => {
14
13
  describe('Config object overload', () => {
15
14
  it('TData should always be defined when initialData is provided as an object', () => {