@tanstack/preact-query 0.0.1 → 5.91.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.
- package/LICENSE +21 -0
- package/README.md +48 -45
- package/build/codemods/src/utils/index.cjs +208 -0
- package/build/codemods/src/utils/transformers/query-cache-transformer.cjs +124 -0
- package/build/codemods/src/utils/transformers/query-client-transformer.cjs +53 -0
- package/build/codemods/src/utils/transformers/use-query-like-transformer.cjs +38 -0
- package/build/codemods/src/v4/key-transformation.cjs +181 -0
- package/build/codemods/src/v4/replace-import-specifier.cjs +25 -0
- package/build/codemods/src/v4/utils/replacers/key-replacer.cjs +164 -0
- package/build/codemods/src/v5/is-loading/is-loading.cjs +244 -0
- package/build/codemods/src/v5/keep-previous-data/README.md +32 -0
- package/build/codemods/src/v5/keep-previous-data/keep-previous-data.cjs +271 -0
- package/build/codemods/src/v5/keep-previous-data/utils/already-has-placeholder-data-property.cjs +26 -0
- package/build/codemods/src/v5/remove-overloads/remove-overloads.cjs +58 -0
- package/build/codemods/src/v5/remove-overloads/transformers/filter-aware-usage-transformer.cjs +271 -0
- package/build/codemods/src/v5/remove-overloads/transformers/query-fn-aware-usage-transformer.cjs +185 -0
- package/build/codemods/src/v5/remove-overloads/utils/index.cjs +123 -0
- package/build/codemods/src/v5/remove-overloads/utils/unknown-usage-error.cjs +27 -0
- package/build/codemods/src/v5/rename-hydrate/rename-hydrate.cjs +55 -0
- package/build/codemods/src/v5/rename-properties/rename-properties.cjs +41 -0
- package/build/legacy/HydrationBoundary.cjs +80 -0
- package/build/legacy/HydrationBoundary.cjs.map +1 -0
- package/build/legacy/HydrationBoundary.d.cts +14 -0
- package/build/legacy/HydrationBoundary.d.ts +14 -0
- package/build/legacy/HydrationBoundary.js +55 -0
- package/build/legacy/HydrationBoundary.js.map +1 -0
- package/build/legacy/IsRestoringProvider.cjs +37 -0
- package/build/legacy/IsRestoringProvider.cjs.map +1 -0
- package/build/legacy/IsRestoringProvider.d.cts +6 -0
- package/build/legacy/IsRestoringProvider.d.ts +6 -0
- package/build/legacy/IsRestoringProvider.js +11 -0
- package/build/legacy/IsRestoringProvider.js.map +1 -0
- package/build/legacy/QueryClientProvider.cjs +62 -0
- package/build/legacy/QueryClientProvider.cjs.map +1 -0
- package/build/legacy/QueryClientProvider.d.cts +13 -0
- package/build/legacy/QueryClientProvider.d.ts +13 -0
- package/build/legacy/QueryClientProvider.js +35 -0
- package/build/legacy/QueryClientProvider.js.map +1 -0
- package/build/legacy/QueryErrorResetBoundary.cjs +57 -0
- package/build/legacy/QueryErrorResetBoundary.cjs.map +1 -0
- package/build/legacy/QueryErrorResetBoundary.d.cts +19 -0
- package/build/legacy/QueryErrorResetBoundary.d.ts +19 -0
- package/build/legacy/QueryErrorResetBoundary.js +31 -0
- package/build/legacy/QueryErrorResetBoundary.js.map +1 -0
- package/build/legacy/errorBoundaryUtils.cjs +57 -0
- package/build/legacy/errorBoundaryUtils.cjs.map +1 -0
- package/build/legacy/errorBoundaryUtils.d.cts +15 -0
- package/build/legacy/errorBoundaryUtils.d.ts +15 -0
- package/build/legacy/errorBoundaryUtils.js +30 -0
- package/build/legacy/errorBoundaryUtils.js.map +1 -0
- package/build/legacy/index.cjs +97 -0
- package/build/legacy/index.cjs.map +1 -0
- package/build/legacy/index.d.cts +21 -0
- package/build/legacy/index.d.ts +21 -0
- package/build/legacy/index.js +54 -0
- package/build/legacy/index.js.map +1 -0
- package/build/legacy/infiniteQueryOptions.cjs +33 -0
- package/build/legacy/infiniteQueryOptions.cjs.map +1 -0
- package/build/legacy/infiniteQueryOptions.d.cts +23 -0
- package/build/legacy/infiniteQueryOptions.d.ts +23 -0
- package/build/legacy/infiniteQueryOptions.js +8 -0
- package/build/legacy/infiniteQueryOptions.js.map +1 -0
- package/build/legacy/mutationOptions.cjs +33 -0
- package/build/legacy/mutationOptions.cjs.map +1 -0
- package/build/legacy/mutationOptions.d.cts +7 -0
- package/build/legacy/mutationOptions.d.ts +7 -0
- package/build/legacy/mutationOptions.js +8 -0
- package/build/legacy/mutationOptions.js.map +1 -0
- package/build/legacy/queryOptions.cjs +33 -0
- package/build/legacy/queryOptions.cjs.map +1 -0
- package/build/legacy/queryOptions.d.cts +24 -0
- package/build/legacy/queryOptions.d.ts +24 -0
- package/build/legacy/queryOptions.js +8 -0
- package/build/legacy/queryOptions.js.map +1 -0
- package/build/legacy/suspense.cjs +58 -0
- package/build/legacy/suspense.cjs.map +1 -0
- package/build/legacy/suspense.d.cts +11 -0
- package/build/legacy/suspense.d.ts +11 -0
- package/build/legacy/suspense.js +29 -0
- package/build/legacy/suspense.js.map +1 -0
- package/build/legacy/types.cjs +19 -0
- package/build/legacy/types.cjs.map +1 -0
- package/build/legacy/types.d.cts +52 -0
- package/build/legacy/types.d.ts +52 -0
- package/build/legacy/types.js +1 -0
- package/build/legacy/types.js.map +1 -0
- package/build/legacy/useBaseQuery.cjs +121 -0
- package/build/legacy/useBaseQuery.cjs.map +1 -0
- package/build/legacy/useBaseQuery.d.cts +6 -0
- package/build/legacy/useBaseQuery.d.ts +6 -0
- package/build/legacy/useBaseQuery.js +105 -0
- package/build/legacy/useBaseQuery.js.map +1 -0
- package/build/legacy/useInfiniteQuery.cjs +39 -0
- package/build/legacy/useInfiniteQuery.cjs.map +1 -0
- package/build/legacy/useInfiniteQuery.d.cts +9 -0
- package/build/legacy/useInfiniteQuery.d.ts +9 -0
- package/build/legacy/useInfiniteQuery.js +14 -0
- package/build/legacy/useInfiniteQuery.js.map +1 -0
- package/build/legacy/useIsFetching.cjs +45 -0
- package/build/legacy/useIsFetching.cjs.map +1 -0
- package/build/legacy/useIsFetching.d.cts +5 -0
- package/build/legacy/useIsFetching.d.ts +5 -0
- package/build/legacy/useIsFetching.js +20 -0
- package/build/legacy/useIsFetching.js.map +1 -0
- package/build/legacy/useMutation.cjs +63 -0
- package/build/legacy/useMutation.cjs.map +1 -0
- package/build/legacy/useMutation.d.cts +6 -0
- package/build/legacy/useMutation.d.ts +6 -0
- package/build/legacy/useMutation.js +43 -0
- package/build/legacy/useMutation.js.map +1 -0
- package/build/legacy/useMutationState.cjs +75 -0
- package/build/legacy/useMutationState.cjs.map +1 -0
- package/build/legacy/useMutationState.d.cts +10 -0
- package/build/legacy/useMutationState.d.ts +10 -0
- package/build/legacy/useMutationState.js +49 -0
- package/build/legacy/useMutationState.js.map +1 -0
- package/build/legacy/usePrefetchInfiniteQuery.cjs +37 -0
- package/build/legacy/usePrefetchInfiniteQuery.cjs.map +1 -0
- package/build/legacy/usePrefetchInfiniteQuery.d.cts +5 -0
- package/build/legacy/usePrefetchInfiniteQuery.d.ts +5 -0
- package/build/legacy/usePrefetchInfiniteQuery.js +12 -0
- package/build/legacy/usePrefetchInfiniteQuery.js.map +1 -0
- package/build/legacy/usePrefetchQuery.cjs +37 -0
- package/build/legacy/usePrefetchQuery.cjs.map +1 -0
- package/build/legacy/usePrefetchQuery.d.cts +6 -0
- package/build/legacy/usePrefetchQuery.d.ts +6 -0
- package/build/legacy/usePrefetchQuery.js +12 -0
- package/build/legacy/usePrefetchQuery.js.map +1 -0
- package/build/legacy/useQueries.cjs +120 -0
- package/build/legacy/useQueries.cjs.map +1 -0
- package/build/legacy/useQueries.d.cts +76 -0
- package/build/legacy/useQueries.d.ts +76 -0
- package/build/legacy/useQueries.js +109 -0
- package/build/legacy/useQueries.js.map +1 -0
- package/build/legacy/useQuery.cjs +35 -0
- package/build/legacy/useQuery.cjs.map +1 -0
- package/build/legacy/useQuery.d.cts +9 -0
- package/build/legacy/useQuery.d.ts +9 -0
- package/build/legacy/useQuery.js +10 -0
- package/build/legacy/useQuery.js.map +1 -0
- package/build/legacy/useSuspenseInfiniteQuery.cjs +50 -0
- package/build/legacy/useSuspenseInfiniteQuery.cjs.map +1 -0
- package/build/legacy/useSuspenseInfiniteQuery.d.cts +6 -0
- package/build/legacy/useSuspenseInfiniteQuery.d.ts +6 -0
- package/build/legacy/useSuspenseInfiniteQuery.js +25 -0
- package/build/legacy/useSuspenseInfiniteQuery.js.map +1 -0
- package/build/legacy/useSuspenseQueries.cjs +55 -0
- package/build/legacy/useSuspenseQueries.cjs.map +1 -0
- package/build/legacy/useSuspenseQueries.d.cts +79 -0
- package/build/legacy/useSuspenseQueries.d.ts +79 -0
- package/build/legacy/useSuspenseQueries.js +30 -0
- package/build/legacy/useSuspenseQueries.js.map +1 -0
- package/build/legacy/useSuspenseQuery.cjs +51 -0
- package/build/legacy/useSuspenseQuery.cjs.map +1 -0
- package/build/legacy/useSuspenseQuery.d.cts +6 -0
- package/build/legacy/useSuspenseQuery.d.ts +6 -0
- package/build/legacy/useSuspenseQuery.js +26 -0
- package/build/legacy/useSuspenseQuery.js.map +1 -0
- package/build/legacy/utils.cjs +79 -0
- package/build/legacy/utils.cjs.map +1 -0
- package/build/legacy/utils.d.cts +4 -0
- package/build/legacy/utils.d.ts +4 -0
- package/build/legacy/utils.js +53 -0
- package/build/legacy/utils.js.map +1 -0
- package/build/modern/HydrationBoundary.cjs +80 -0
- package/build/modern/HydrationBoundary.cjs.map +1 -0
- package/build/modern/HydrationBoundary.d.cts +14 -0
- package/build/modern/HydrationBoundary.d.ts +14 -0
- package/build/modern/HydrationBoundary.js +55 -0
- package/build/modern/HydrationBoundary.js.map +1 -0
- package/build/modern/IsRestoringProvider.cjs +37 -0
- package/build/modern/IsRestoringProvider.cjs.map +1 -0
- package/build/modern/IsRestoringProvider.d.cts +6 -0
- package/build/modern/IsRestoringProvider.d.ts +6 -0
- package/build/modern/IsRestoringProvider.js +11 -0
- package/build/modern/IsRestoringProvider.js.map +1 -0
- package/build/modern/QueryClientProvider.cjs +62 -0
- package/build/modern/QueryClientProvider.cjs.map +1 -0
- package/build/modern/QueryClientProvider.d.cts +13 -0
- package/build/modern/QueryClientProvider.d.ts +13 -0
- package/build/modern/QueryClientProvider.js +35 -0
- package/build/modern/QueryClientProvider.js.map +1 -0
- package/build/modern/QueryErrorResetBoundary.cjs +57 -0
- package/build/modern/QueryErrorResetBoundary.cjs.map +1 -0
- package/build/modern/QueryErrorResetBoundary.d.cts +19 -0
- package/build/modern/QueryErrorResetBoundary.d.ts +19 -0
- package/build/modern/QueryErrorResetBoundary.js +31 -0
- package/build/modern/QueryErrorResetBoundary.js.map +1 -0
- package/build/modern/errorBoundaryUtils.cjs +57 -0
- package/build/modern/errorBoundaryUtils.cjs.map +1 -0
- package/build/modern/errorBoundaryUtils.d.cts +15 -0
- package/build/modern/errorBoundaryUtils.d.ts +15 -0
- package/build/modern/errorBoundaryUtils.js +30 -0
- package/build/modern/errorBoundaryUtils.js.map +1 -0
- package/build/modern/index.cjs +97 -0
- package/build/modern/index.cjs.map +1 -0
- package/build/modern/index.d.cts +21 -0
- package/build/modern/index.d.ts +21 -0
- package/build/modern/index.js +54 -0
- package/build/modern/index.js.map +1 -0
- package/build/modern/infiniteQueryOptions.cjs +33 -0
- package/build/modern/infiniteQueryOptions.cjs.map +1 -0
- package/build/modern/infiniteQueryOptions.d.cts +23 -0
- package/build/modern/infiniteQueryOptions.d.ts +23 -0
- package/build/modern/infiniteQueryOptions.js +8 -0
- package/build/modern/infiniteQueryOptions.js.map +1 -0
- package/build/modern/mutationOptions.cjs +33 -0
- package/build/modern/mutationOptions.cjs.map +1 -0
- package/build/modern/mutationOptions.d.cts +7 -0
- package/build/modern/mutationOptions.d.ts +7 -0
- package/build/modern/mutationOptions.js +8 -0
- package/build/modern/mutationOptions.js.map +1 -0
- package/build/modern/queryOptions.cjs +33 -0
- package/build/modern/queryOptions.cjs.map +1 -0
- package/build/modern/queryOptions.d.cts +24 -0
- package/build/modern/queryOptions.d.ts +24 -0
- package/build/modern/queryOptions.js +8 -0
- package/build/modern/queryOptions.js.map +1 -0
- package/build/modern/suspense.cjs +58 -0
- package/build/modern/suspense.cjs.map +1 -0
- package/build/modern/suspense.d.cts +11 -0
- package/build/modern/suspense.d.ts +11 -0
- package/build/modern/suspense.js +29 -0
- package/build/modern/suspense.js.map +1 -0
- package/build/modern/types.cjs +19 -0
- package/build/modern/types.cjs.map +1 -0
- package/build/modern/types.d.cts +52 -0
- package/build/modern/types.d.ts +52 -0
- package/build/modern/types.js +1 -0
- package/build/modern/types.js.map +1 -0
- package/build/modern/useBaseQuery.cjs +118 -0
- package/build/modern/useBaseQuery.cjs.map +1 -0
- package/build/modern/useBaseQuery.d.cts +6 -0
- package/build/modern/useBaseQuery.d.ts +6 -0
- package/build/modern/useBaseQuery.js +102 -0
- package/build/modern/useBaseQuery.js.map +1 -0
- package/build/modern/useInfiniteQuery.cjs +39 -0
- package/build/modern/useInfiniteQuery.cjs.map +1 -0
- package/build/modern/useInfiniteQuery.d.cts +9 -0
- package/build/modern/useInfiniteQuery.d.ts +9 -0
- package/build/modern/useInfiniteQuery.js +14 -0
- package/build/modern/useInfiniteQuery.js.map +1 -0
- package/build/modern/useIsFetching.cjs +45 -0
- package/build/modern/useIsFetching.cjs.map +1 -0
- package/build/modern/useIsFetching.d.cts +5 -0
- package/build/modern/useIsFetching.d.ts +5 -0
- package/build/modern/useIsFetching.js +20 -0
- package/build/modern/useIsFetching.js.map +1 -0
- package/build/modern/useMutation.cjs +63 -0
- package/build/modern/useMutation.cjs.map +1 -0
- package/build/modern/useMutation.d.cts +6 -0
- package/build/modern/useMutation.d.ts +6 -0
- package/build/modern/useMutation.js +43 -0
- package/build/modern/useMutation.js.map +1 -0
- package/build/modern/useMutationState.cjs +75 -0
- package/build/modern/useMutationState.cjs.map +1 -0
- package/build/modern/useMutationState.d.cts +10 -0
- package/build/modern/useMutationState.d.ts +10 -0
- package/build/modern/useMutationState.js +49 -0
- package/build/modern/useMutationState.js.map +1 -0
- package/build/modern/usePrefetchInfiniteQuery.cjs +37 -0
- package/build/modern/usePrefetchInfiniteQuery.cjs.map +1 -0
- package/build/modern/usePrefetchInfiniteQuery.d.cts +5 -0
- package/build/modern/usePrefetchInfiniteQuery.d.ts +5 -0
- package/build/modern/usePrefetchInfiniteQuery.js +12 -0
- package/build/modern/usePrefetchInfiniteQuery.js.map +1 -0
- package/build/modern/usePrefetchQuery.cjs +37 -0
- package/build/modern/usePrefetchQuery.cjs.map +1 -0
- package/build/modern/usePrefetchQuery.d.cts +6 -0
- package/build/modern/usePrefetchQuery.d.ts +6 -0
- package/build/modern/usePrefetchQuery.js +12 -0
- package/build/modern/usePrefetchQuery.js.map +1 -0
- package/build/modern/useQueries.cjs +120 -0
- package/build/modern/useQueries.cjs.map +1 -0
- package/build/modern/useQueries.d.cts +76 -0
- package/build/modern/useQueries.d.ts +76 -0
- package/build/modern/useQueries.js +109 -0
- package/build/modern/useQueries.js.map +1 -0
- package/build/modern/useQuery.cjs +35 -0
- package/build/modern/useQuery.cjs.map +1 -0
- package/build/modern/useQuery.d.cts +9 -0
- package/build/modern/useQuery.d.ts +9 -0
- package/build/modern/useQuery.js +10 -0
- package/build/modern/useQuery.js.map +1 -0
- package/build/modern/useSuspenseInfiniteQuery.cjs +50 -0
- package/build/modern/useSuspenseInfiniteQuery.cjs.map +1 -0
- package/build/modern/useSuspenseInfiniteQuery.d.cts +6 -0
- package/build/modern/useSuspenseInfiniteQuery.d.ts +6 -0
- package/build/modern/useSuspenseInfiniteQuery.js +25 -0
- package/build/modern/useSuspenseInfiniteQuery.js.map +1 -0
- package/build/modern/useSuspenseQueries.cjs +55 -0
- package/build/modern/useSuspenseQueries.cjs.map +1 -0
- package/build/modern/useSuspenseQueries.d.cts +79 -0
- package/build/modern/useSuspenseQueries.d.ts +79 -0
- package/build/modern/useSuspenseQueries.js +30 -0
- package/build/modern/useSuspenseQueries.js.map +1 -0
- package/build/modern/useSuspenseQuery.cjs +51 -0
- package/build/modern/useSuspenseQuery.cjs.map +1 -0
- package/build/modern/useSuspenseQuery.d.cts +6 -0
- package/build/modern/useSuspenseQuery.d.ts +6 -0
- package/build/modern/useSuspenseQuery.js +26 -0
- package/build/modern/useSuspenseQuery.js.map +1 -0
- package/build/modern/utils.cjs +79 -0
- package/build/modern/utils.cjs.map +1 -0
- package/build/modern/utils.d.cts +4 -0
- package/build/modern/utils.d.ts +4 -0
- package/build/modern/utils.js +53 -0
- package/build/modern/utils.js.map +1 -0
- package/build/query-codemods/eslint.config.js +18 -0
- package/build/query-codemods/package.json +38 -0
- package/build/query-codemods/root.eslint.config.js +64 -0
- package/build/query-codemods/tsconfig.json +8 -0
- package/build/query-codemods/vite.config.ts +30 -0
- package/package.json +82 -8
- package/src/HydrationBoundary.tsx +108 -0
- package/src/IsRestoringProvider.ts +7 -0
- package/src/QueryClientProvider.tsx +45 -0
- package/src/QueryErrorResetBoundary.tsx +57 -0
- package/src/errorBoundaryUtils.ts +76 -0
- package/src/index.ts +56 -0
- package/src/infiniteQueryOptions.ts +150 -0
- package/src/mutationOptions.ts +42 -0
- package/src/queryOptions.ts +88 -0
- package/src/suspense.ts +81 -0
- package/src/types.ts +241 -0
- package/src/useBaseQuery.ts +169 -0
- package/src/useInfiniteQuery.ts +81 -0
- package/src/useIsFetching.ts +23 -0
- package/src/useMutation.ts +69 -0
- package/src/useMutationState.ts +74 -0
- package/src/usePrefetchInfiniteQuery.tsx +31 -0
- package/src/usePrefetchQuery.tsx +20 -0
- package/src/useQueries.ts +331 -0
- package/src/useQuery.ts +52 -0
- package/src/useSuspenseInfiniteQuery.ts +50 -0
- package/src/useSuspenseQueries.ts +211 -0
- package/src/useSuspenseQuery.ts +34 -0
- package/src/utils.ts +88 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
DataTag,
|
|
3
|
+
DefaultError,
|
|
4
|
+
InitialDataFunction,
|
|
5
|
+
NonUndefinedGuard,
|
|
6
|
+
OmitKeyof,
|
|
7
|
+
QueryFunction,
|
|
8
|
+
QueryKey,
|
|
9
|
+
SkipToken,
|
|
10
|
+
} from '@tanstack/query-core'
|
|
11
|
+
|
|
12
|
+
import type { UseQueryOptions } from './types'
|
|
13
|
+
|
|
14
|
+
export type UndefinedInitialDataOptions<
|
|
15
|
+
TQueryFnData = unknown,
|
|
16
|
+
TError = DefaultError,
|
|
17
|
+
TData = TQueryFnData,
|
|
18
|
+
TQueryKey extends QueryKey = QueryKey,
|
|
19
|
+
> = UseQueryOptions<TQueryFnData, TError, TData, TQueryKey> & {
|
|
20
|
+
initialData?:
|
|
21
|
+
| undefined
|
|
22
|
+
| InitialDataFunction<NonUndefinedGuard<TQueryFnData>>
|
|
23
|
+
| NonUndefinedGuard<TQueryFnData>
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export type UnusedSkipTokenOptions<
|
|
27
|
+
TQueryFnData = unknown,
|
|
28
|
+
TError = DefaultError,
|
|
29
|
+
TData = TQueryFnData,
|
|
30
|
+
TQueryKey extends QueryKey = QueryKey,
|
|
31
|
+
> = OmitKeyof<
|
|
32
|
+
UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
|
|
33
|
+
'queryFn'
|
|
34
|
+
> & {
|
|
35
|
+
queryFn?: Exclude<
|
|
36
|
+
UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>['queryFn'],
|
|
37
|
+
SkipToken | undefined
|
|
38
|
+
>
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export type DefinedInitialDataOptions<
|
|
42
|
+
TQueryFnData = unknown,
|
|
43
|
+
TError = DefaultError,
|
|
44
|
+
TData = TQueryFnData,
|
|
45
|
+
TQueryKey extends QueryKey = QueryKey,
|
|
46
|
+
> = Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'queryFn'> & {
|
|
47
|
+
initialData:
|
|
48
|
+
| NonUndefinedGuard<TQueryFnData>
|
|
49
|
+
| (() => NonUndefinedGuard<TQueryFnData>)
|
|
50
|
+
queryFn?: QueryFunction<TQueryFnData, TQueryKey>
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export function queryOptions<
|
|
54
|
+
TQueryFnData = unknown,
|
|
55
|
+
TError = DefaultError,
|
|
56
|
+
TData = TQueryFnData,
|
|
57
|
+
TQueryKey extends QueryKey = QueryKey,
|
|
58
|
+
>(
|
|
59
|
+
options: DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,
|
|
60
|
+
): DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey> & {
|
|
61
|
+
queryKey: DataTag<TQueryKey, TQueryFnData, TError>
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export function queryOptions<
|
|
65
|
+
TQueryFnData = unknown,
|
|
66
|
+
TError = DefaultError,
|
|
67
|
+
TData = TQueryFnData,
|
|
68
|
+
TQueryKey extends QueryKey = QueryKey,
|
|
69
|
+
>(
|
|
70
|
+
options: UnusedSkipTokenOptions<TQueryFnData, TError, TData, TQueryKey>,
|
|
71
|
+
): UnusedSkipTokenOptions<TQueryFnData, TError, TData, TQueryKey> & {
|
|
72
|
+
queryKey: DataTag<TQueryKey, TQueryFnData, TError>
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export function queryOptions<
|
|
76
|
+
TQueryFnData = unknown,
|
|
77
|
+
TError = DefaultError,
|
|
78
|
+
TData = TQueryFnData,
|
|
79
|
+
TQueryKey extends QueryKey = QueryKey,
|
|
80
|
+
>(
|
|
81
|
+
options: UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,
|
|
82
|
+
): UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey> & {
|
|
83
|
+
queryKey: DataTag<TQueryKey, TQueryFnData, TError>
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export function queryOptions(options: unknown) {
|
|
87
|
+
return options
|
|
88
|
+
}
|
package/src/suspense.ts
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
DefaultError,
|
|
3
|
+
DefaultedQueryObserverOptions,
|
|
4
|
+
Query,
|
|
5
|
+
QueryKey,
|
|
6
|
+
QueryObserver,
|
|
7
|
+
QueryObserverResult,
|
|
8
|
+
} from '@tanstack/query-core'
|
|
9
|
+
|
|
10
|
+
import type { QueryErrorResetBoundaryValue } from './QueryErrorResetBoundary'
|
|
11
|
+
|
|
12
|
+
export const defaultThrowOnError = <
|
|
13
|
+
TQueryFnData = unknown,
|
|
14
|
+
TError = DefaultError,
|
|
15
|
+
TData = TQueryFnData,
|
|
16
|
+
TQueryKey extends QueryKey = QueryKey,
|
|
17
|
+
>(
|
|
18
|
+
_error: TError,
|
|
19
|
+
query: Query<TQueryFnData, TError, TData, TQueryKey>,
|
|
20
|
+
) => query.state.data === undefined
|
|
21
|
+
|
|
22
|
+
export const ensureSuspenseTimers = (
|
|
23
|
+
defaultedOptions: DefaultedQueryObserverOptions<any, any, any, any, any>,
|
|
24
|
+
) => {
|
|
25
|
+
if (defaultedOptions.suspense) {
|
|
26
|
+
// Handle staleTime to ensure minimum 1000ms in Suspense mode
|
|
27
|
+
// This prevents unnecessary refetching when components remount after suspending
|
|
28
|
+
const MIN_SUSPENSE_TIME_MS = 1000
|
|
29
|
+
|
|
30
|
+
const clamp = (value: number | 'static' | undefined) =>
|
|
31
|
+
value === 'static'
|
|
32
|
+
? value
|
|
33
|
+
: Math.max(value ?? MIN_SUSPENSE_TIME_MS, MIN_SUSPENSE_TIME_MS)
|
|
34
|
+
|
|
35
|
+
const originalStaleTime = defaultedOptions.staleTime
|
|
36
|
+
defaultedOptions.staleTime =
|
|
37
|
+
typeof originalStaleTime === 'function'
|
|
38
|
+
? (...args) => clamp(originalStaleTime(...args))
|
|
39
|
+
: clamp(originalStaleTime)
|
|
40
|
+
|
|
41
|
+
if (typeof defaultedOptions.gcTime === 'number') {
|
|
42
|
+
defaultedOptions.gcTime = Math.max(
|
|
43
|
+
defaultedOptions.gcTime,
|
|
44
|
+
MIN_SUSPENSE_TIME_MS,
|
|
45
|
+
)
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export const willFetch = (
|
|
51
|
+
result: QueryObserverResult<any, any>,
|
|
52
|
+
isRestoring: boolean,
|
|
53
|
+
) => result.isLoading && result.isFetching && !isRestoring
|
|
54
|
+
|
|
55
|
+
export const shouldSuspend = (
|
|
56
|
+
defaultedOptions:
|
|
57
|
+
| DefaultedQueryObserverOptions<any, any, any, any, any>
|
|
58
|
+
| undefined,
|
|
59
|
+
result: QueryObserverResult<any, any>,
|
|
60
|
+
) => defaultedOptions?.suspense && result.isPending
|
|
61
|
+
|
|
62
|
+
export const fetchOptimistic = <
|
|
63
|
+
TQueryFnData,
|
|
64
|
+
TError,
|
|
65
|
+
TData,
|
|
66
|
+
TQueryData,
|
|
67
|
+
TQueryKey extends QueryKey,
|
|
68
|
+
>(
|
|
69
|
+
defaultedOptions: DefaultedQueryObserverOptions<
|
|
70
|
+
TQueryFnData,
|
|
71
|
+
TError,
|
|
72
|
+
TData,
|
|
73
|
+
TQueryData,
|
|
74
|
+
TQueryKey
|
|
75
|
+
>,
|
|
76
|
+
observer: QueryObserver<TQueryFnData, TError, TData, TQueryData, TQueryKey>,
|
|
77
|
+
errorResetBoundary: QueryErrorResetBoundaryValue,
|
|
78
|
+
) =>
|
|
79
|
+
observer.fetchOptimistic(defaultedOptions).catch(() => {
|
|
80
|
+
errorResetBoundary.clearReset()
|
|
81
|
+
})
|
package/src/types.ts
ADDED
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
/* istanbul ignore file */
|
|
2
|
+
import type {
|
|
3
|
+
DefaultError,
|
|
4
|
+
DefinedInfiniteQueryObserverResult,
|
|
5
|
+
DefinedQueryObserverResult,
|
|
6
|
+
DistributiveOmit,
|
|
7
|
+
FetchQueryOptions,
|
|
8
|
+
InfiniteQueryObserverOptions,
|
|
9
|
+
InfiniteQueryObserverResult,
|
|
10
|
+
MutateFunction,
|
|
11
|
+
MutationObserverOptions,
|
|
12
|
+
MutationObserverResult,
|
|
13
|
+
OmitKeyof,
|
|
14
|
+
Override,
|
|
15
|
+
QueryKey,
|
|
16
|
+
QueryObserverOptions,
|
|
17
|
+
QueryObserverResult,
|
|
18
|
+
SkipToken,
|
|
19
|
+
} from '@tanstack/query-core'
|
|
20
|
+
|
|
21
|
+
export type AnyUseBaseQueryOptions = UseBaseQueryOptions<
|
|
22
|
+
any,
|
|
23
|
+
any,
|
|
24
|
+
any,
|
|
25
|
+
any,
|
|
26
|
+
any
|
|
27
|
+
>
|
|
28
|
+
export interface UseBaseQueryOptions<
|
|
29
|
+
TQueryFnData = unknown,
|
|
30
|
+
TError = DefaultError,
|
|
31
|
+
TData = TQueryFnData,
|
|
32
|
+
TQueryData = TQueryFnData,
|
|
33
|
+
TQueryKey extends QueryKey = QueryKey,
|
|
34
|
+
> extends QueryObserverOptions<
|
|
35
|
+
TQueryFnData,
|
|
36
|
+
TError,
|
|
37
|
+
TData,
|
|
38
|
+
TQueryData,
|
|
39
|
+
TQueryKey
|
|
40
|
+
> {
|
|
41
|
+
/**
|
|
42
|
+
* Set this to `false` to unsubscribe this observer from updates to the query cache.
|
|
43
|
+
* Defaults to `true`.
|
|
44
|
+
*/
|
|
45
|
+
subscribed?: boolean
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export interface UsePrefetchQueryOptions<
|
|
49
|
+
TQueryFnData = unknown,
|
|
50
|
+
TError = DefaultError,
|
|
51
|
+
TData = TQueryFnData,
|
|
52
|
+
TQueryKey extends QueryKey = QueryKey,
|
|
53
|
+
> extends OmitKeyof<
|
|
54
|
+
FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
|
|
55
|
+
'queryFn'
|
|
56
|
+
> {
|
|
57
|
+
queryFn?: Exclude<
|
|
58
|
+
FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>['queryFn'],
|
|
59
|
+
SkipToken
|
|
60
|
+
>
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export type AnyUseQueryOptions = UseQueryOptions<any, any, any, any>
|
|
64
|
+
export interface UseQueryOptions<
|
|
65
|
+
TQueryFnData = unknown,
|
|
66
|
+
TError = DefaultError,
|
|
67
|
+
TData = TQueryFnData,
|
|
68
|
+
TQueryKey extends QueryKey = QueryKey,
|
|
69
|
+
> extends OmitKeyof<
|
|
70
|
+
UseBaseQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>,
|
|
71
|
+
'suspense'
|
|
72
|
+
> {}
|
|
73
|
+
|
|
74
|
+
export type AnyUseSuspenseQueryOptions = UseSuspenseQueryOptions<
|
|
75
|
+
any,
|
|
76
|
+
any,
|
|
77
|
+
any,
|
|
78
|
+
any
|
|
79
|
+
>
|
|
80
|
+
export interface UseSuspenseQueryOptions<
|
|
81
|
+
TQueryFnData = unknown,
|
|
82
|
+
TError = DefaultError,
|
|
83
|
+
TData = TQueryFnData,
|
|
84
|
+
TQueryKey extends QueryKey = QueryKey,
|
|
85
|
+
> extends OmitKeyof<
|
|
86
|
+
UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
|
|
87
|
+
'queryFn' | 'enabled' | 'throwOnError' | 'placeholderData'
|
|
88
|
+
> {
|
|
89
|
+
queryFn?: Exclude<
|
|
90
|
+
UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>['queryFn'],
|
|
91
|
+
SkipToken
|
|
92
|
+
>
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export type AnyUseInfiniteQueryOptions = UseInfiniteQueryOptions<
|
|
96
|
+
any,
|
|
97
|
+
any,
|
|
98
|
+
any,
|
|
99
|
+
any,
|
|
100
|
+
any
|
|
101
|
+
>
|
|
102
|
+
export interface UseInfiniteQueryOptions<
|
|
103
|
+
TQueryFnData = unknown,
|
|
104
|
+
TError = DefaultError,
|
|
105
|
+
TData = TQueryFnData,
|
|
106
|
+
TQueryKey extends QueryKey = QueryKey,
|
|
107
|
+
TPageParam = unknown,
|
|
108
|
+
> extends OmitKeyof<
|
|
109
|
+
InfiniteQueryObserverOptions<
|
|
110
|
+
TQueryFnData,
|
|
111
|
+
TError,
|
|
112
|
+
TData,
|
|
113
|
+
TQueryKey,
|
|
114
|
+
TPageParam
|
|
115
|
+
>,
|
|
116
|
+
'suspense'
|
|
117
|
+
> {
|
|
118
|
+
/**
|
|
119
|
+
* Set this to `false` to unsubscribe this observer from updates to the query cache.
|
|
120
|
+
* Defaults to `true`.
|
|
121
|
+
*/
|
|
122
|
+
subscribed?: boolean
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export type AnyUseSuspenseInfiniteQueryOptions =
|
|
126
|
+
UseSuspenseInfiniteQueryOptions<any, any, any, any, any>
|
|
127
|
+
export interface UseSuspenseInfiniteQueryOptions<
|
|
128
|
+
TQueryFnData = unknown,
|
|
129
|
+
TError = DefaultError,
|
|
130
|
+
TData = TQueryFnData,
|
|
131
|
+
TQueryKey extends QueryKey = QueryKey,
|
|
132
|
+
TPageParam = unknown,
|
|
133
|
+
> extends OmitKeyof<
|
|
134
|
+
UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>,
|
|
135
|
+
'queryFn' | 'enabled' | 'throwOnError' | 'placeholderData'
|
|
136
|
+
> {
|
|
137
|
+
queryFn?: Exclude<
|
|
138
|
+
UseInfiniteQueryOptions<
|
|
139
|
+
TQueryFnData,
|
|
140
|
+
TError,
|
|
141
|
+
TData,
|
|
142
|
+
TQueryKey,
|
|
143
|
+
TPageParam
|
|
144
|
+
>['queryFn'],
|
|
145
|
+
SkipToken
|
|
146
|
+
>
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
export type UseBaseQueryResult<
|
|
150
|
+
TData = unknown,
|
|
151
|
+
TError = DefaultError,
|
|
152
|
+
> = QueryObserverResult<TData, TError>
|
|
153
|
+
|
|
154
|
+
export type UseQueryResult<
|
|
155
|
+
TData = unknown,
|
|
156
|
+
TError = DefaultError,
|
|
157
|
+
> = UseBaseQueryResult<TData, TError>
|
|
158
|
+
|
|
159
|
+
export type UseSuspenseQueryResult<
|
|
160
|
+
TData = unknown,
|
|
161
|
+
TError = DefaultError,
|
|
162
|
+
> = DistributiveOmit<
|
|
163
|
+
DefinedQueryObserverResult<TData, TError>,
|
|
164
|
+
'isPlaceholderData' | 'promise'
|
|
165
|
+
>
|
|
166
|
+
|
|
167
|
+
export type DefinedUseQueryResult<
|
|
168
|
+
TData = unknown,
|
|
169
|
+
TError = DefaultError,
|
|
170
|
+
> = DefinedQueryObserverResult<TData, TError>
|
|
171
|
+
|
|
172
|
+
export type UseInfiniteQueryResult<
|
|
173
|
+
TData = unknown,
|
|
174
|
+
TError = DefaultError,
|
|
175
|
+
> = InfiniteQueryObserverResult<TData, TError>
|
|
176
|
+
|
|
177
|
+
export type DefinedUseInfiniteQueryResult<
|
|
178
|
+
TData = unknown,
|
|
179
|
+
TError = DefaultError,
|
|
180
|
+
> = DefinedInfiniteQueryObserverResult<TData, TError>
|
|
181
|
+
|
|
182
|
+
export type UseSuspenseInfiniteQueryResult<
|
|
183
|
+
TData = unknown,
|
|
184
|
+
TError = DefaultError,
|
|
185
|
+
> = OmitKeyof<
|
|
186
|
+
DefinedInfiniteQueryObserverResult<TData, TError>,
|
|
187
|
+
'isPlaceholderData' | 'promise'
|
|
188
|
+
>
|
|
189
|
+
|
|
190
|
+
export type AnyUseMutationOptions = UseMutationOptions<any, any, any, any>
|
|
191
|
+
export interface UseMutationOptions<
|
|
192
|
+
TData = unknown,
|
|
193
|
+
TError = DefaultError,
|
|
194
|
+
TVariables = void,
|
|
195
|
+
TOnMutateResult = unknown,
|
|
196
|
+
> extends OmitKeyof<
|
|
197
|
+
MutationObserverOptions<TData, TError, TVariables, TOnMutateResult>,
|
|
198
|
+
'_defaulted'
|
|
199
|
+
> {}
|
|
200
|
+
|
|
201
|
+
export type UseMutateFunction<
|
|
202
|
+
TData = unknown,
|
|
203
|
+
TError = DefaultError,
|
|
204
|
+
TVariables = void,
|
|
205
|
+
TOnMutateResult = unknown,
|
|
206
|
+
> = (
|
|
207
|
+
...args: Parameters<
|
|
208
|
+
MutateFunction<TData, TError, TVariables, TOnMutateResult>
|
|
209
|
+
>
|
|
210
|
+
) => void
|
|
211
|
+
|
|
212
|
+
export type UseMutateAsyncFunction<
|
|
213
|
+
TData = unknown,
|
|
214
|
+
TError = DefaultError,
|
|
215
|
+
TVariables = void,
|
|
216
|
+
TOnMutateResult = unknown,
|
|
217
|
+
> = MutateFunction<TData, TError, TVariables, TOnMutateResult>
|
|
218
|
+
|
|
219
|
+
export type UseBaseMutationResult<
|
|
220
|
+
TData = unknown,
|
|
221
|
+
TError = DefaultError,
|
|
222
|
+
TVariables = unknown,
|
|
223
|
+
TOnMutateResult = unknown,
|
|
224
|
+
> = Override<
|
|
225
|
+
MutationObserverResult<TData, TError, TVariables, TOnMutateResult>,
|
|
226
|
+
{ mutate: UseMutateFunction<TData, TError, TVariables, TOnMutateResult> }
|
|
227
|
+
> & {
|
|
228
|
+
mutateAsync: UseMutateAsyncFunction<
|
|
229
|
+
TData,
|
|
230
|
+
TError,
|
|
231
|
+
TVariables,
|
|
232
|
+
TOnMutateResult
|
|
233
|
+
>
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
export type UseMutationResult<
|
|
237
|
+
TData = unknown,
|
|
238
|
+
TError = DefaultError,
|
|
239
|
+
TVariables = unknown,
|
|
240
|
+
TOnMutateResult = unknown,
|
|
241
|
+
> = UseBaseMutationResult<TData, TError, TVariables, TOnMutateResult>
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { isServer, noop, notifyManager } from '@tanstack/query-core'
|
|
2
|
+
import type {
|
|
3
|
+
QueryClient,
|
|
4
|
+
QueryKey,
|
|
5
|
+
QueryObserver,
|
|
6
|
+
QueryObserverResult,
|
|
7
|
+
} from '@tanstack/query-core'
|
|
8
|
+
import { useCallback, useEffect, useState } from 'preact/hooks'
|
|
9
|
+
|
|
10
|
+
import { useIsRestoring } from './IsRestoringProvider'
|
|
11
|
+
import { useQueryClient } from './QueryClientProvider'
|
|
12
|
+
import { useQueryErrorResetBoundary } from './QueryErrorResetBoundary'
|
|
13
|
+
import {
|
|
14
|
+
ensurePreventErrorBoundaryRetry,
|
|
15
|
+
getHasError,
|
|
16
|
+
useClearResetErrorBoundary,
|
|
17
|
+
} from './errorBoundaryUtils'
|
|
18
|
+
import {
|
|
19
|
+
ensureSuspenseTimers,
|
|
20
|
+
fetchOptimistic,
|
|
21
|
+
shouldSuspend,
|
|
22
|
+
willFetch,
|
|
23
|
+
} from './suspense'
|
|
24
|
+
import type { UseBaseQueryOptions } from './types'
|
|
25
|
+
import { useSyncExternalStore } from './utils'
|
|
26
|
+
|
|
27
|
+
export function useBaseQuery<
|
|
28
|
+
TQueryFnData,
|
|
29
|
+
TError,
|
|
30
|
+
TData,
|
|
31
|
+
TQueryData,
|
|
32
|
+
TQueryKey extends QueryKey,
|
|
33
|
+
>(
|
|
34
|
+
options: UseBaseQueryOptions<
|
|
35
|
+
TQueryFnData,
|
|
36
|
+
TError,
|
|
37
|
+
TData,
|
|
38
|
+
TQueryData,
|
|
39
|
+
TQueryKey
|
|
40
|
+
>,
|
|
41
|
+
Observer: typeof QueryObserver,
|
|
42
|
+
queryClient?: QueryClient,
|
|
43
|
+
): QueryObserverResult<TData, TError> {
|
|
44
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
45
|
+
if (typeof options !== 'object' || Array.isArray(options)) {
|
|
46
|
+
throw new Error(
|
|
47
|
+
'Bad argument type. Starting with v5, only the "Object" form is allowed when calling query related functions. Please use the error stack to find the culprit call. More info here: https://tanstack.com/query/latest/docs/react/guides/migrating-to-v5#supports-a-single-signature-one-object',
|
|
48
|
+
)
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const isRestoring = useIsRestoring()
|
|
53
|
+
const errorResetBoundary = useQueryErrorResetBoundary()
|
|
54
|
+
const client = useQueryClient(queryClient)
|
|
55
|
+
const defaultedOptions = client.defaultQueryOptions(options)
|
|
56
|
+
|
|
57
|
+
;(client.getDefaultOptions().queries as any)?._experimental_beforeQuery?.(
|
|
58
|
+
defaultedOptions,
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
62
|
+
if (!defaultedOptions.queryFn) {
|
|
63
|
+
console.error(
|
|
64
|
+
`[${defaultedOptions.queryHash}]: No queryFn was passed as an option, and no default queryFn was found. The queryFn parameter is only optional when using a default queryFn. More info here: https://tanstack.com/query/latest/docs/framework/react/guides/default-query-function`,
|
|
65
|
+
)
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Make sure results are optimistically set in fetching state before subscribing or updating options
|
|
70
|
+
defaultedOptions._optimisticResults = isRestoring
|
|
71
|
+
? 'isRestoring'
|
|
72
|
+
: 'optimistic'
|
|
73
|
+
|
|
74
|
+
ensureSuspenseTimers(defaultedOptions)
|
|
75
|
+
ensurePreventErrorBoundaryRetry(defaultedOptions, errorResetBoundary)
|
|
76
|
+
|
|
77
|
+
useClearResetErrorBoundary(errorResetBoundary)
|
|
78
|
+
|
|
79
|
+
// this needs to be invoked before creating the Observer because that can create a cache entry
|
|
80
|
+
const isNewCacheEntry = !client
|
|
81
|
+
.getQueryCache()
|
|
82
|
+
.get(defaultedOptions.queryHash)
|
|
83
|
+
|
|
84
|
+
const [observer] = useState(
|
|
85
|
+
() =>
|
|
86
|
+
new Observer<TQueryFnData, TError, TData, TQueryData, TQueryKey>(
|
|
87
|
+
client,
|
|
88
|
+
defaultedOptions,
|
|
89
|
+
),
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
// note: this must be called before useSyncExternalStore
|
|
93
|
+
const result = observer.getOptimisticResult(defaultedOptions)
|
|
94
|
+
|
|
95
|
+
const shouldSubscribe = !isRestoring && options.subscribed !== false
|
|
96
|
+
useSyncExternalStore(
|
|
97
|
+
useCallback(
|
|
98
|
+
(onStoreChange) => {
|
|
99
|
+
const unsubscribe = shouldSubscribe
|
|
100
|
+
? observer.subscribe(notifyManager.batchCalls(onStoreChange))
|
|
101
|
+
: noop
|
|
102
|
+
|
|
103
|
+
// Update result to make sure we did not miss any query updates
|
|
104
|
+
// between creating the observer and subscribing to it.
|
|
105
|
+
observer.updateResult()
|
|
106
|
+
|
|
107
|
+
return unsubscribe
|
|
108
|
+
},
|
|
109
|
+
[observer, shouldSubscribe],
|
|
110
|
+
),
|
|
111
|
+
() => observer.getCurrentResult(),
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
useEffect(() => {
|
|
115
|
+
observer.setOptions(defaultedOptions)
|
|
116
|
+
}, [defaultedOptions, observer])
|
|
117
|
+
|
|
118
|
+
// Handle suspense
|
|
119
|
+
if (shouldSuspend(defaultedOptions, result)) {
|
|
120
|
+
throw fetchOptimistic(defaultedOptions, observer, errorResetBoundary)
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// Handle error boundary
|
|
124
|
+
if (
|
|
125
|
+
getHasError({
|
|
126
|
+
result,
|
|
127
|
+
errorResetBoundary,
|
|
128
|
+
throwOnError: defaultedOptions.throwOnError,
|
|
129
|
+
query: client
|
|
130
|
+
.getQueryCache()
|
|
131
|
+
.get<
|
|
132
|
+
TQueryFnData,
|
|
133
|
+
TError,
|
|
134
|
+
TQueryData,
|
|
135
|
+
TQueryKey
|
|
136
|
+
>(defaultedOptions.queryHash),
|
|
137
|
+
suspense: defaultedOptions.suspense,
|
|
138
|
+
})
|
|
139
|
+
) {
|
|
140
|
+
throw result.error
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
;(client.getDefaultOptions().queries as any)?._experimental_afterQuery?.(
|
|
144
|
+
defaultedOptions,
|
|
145
|
+
result,
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
if (
|
|
149
|
+
defaultedOptions.experimental_prefetchInRender &&
|
|
150
|
+
!isServer &&
|
|
151
|
+
willFetch(result, isRestoring)
|
|
152
|
+
) {
|
|
153
|
+
const promise = isNewCacheEntry
|
|
154
|
+
? // Fetch immediately on render in order to ensure `.promise` is resolved even if the component is unmounted
|
|
155
|
+
fetchOptimistic(defaultedOptions, observer, errorResetBoundary)
|
|
156
|
+
: // subscribe to the "cache promise" so that we can finalize the currentThenable once data comes in
|
|
157
|
+
client.getQueryCache().get(defaultedOptions.queryHash)?.promise
|
|
158
|
+
|
|
159
|
+
promise?.catch(noop).finally(() => {
|
|
160
|
+
// `.updateResult()` will trigger `.#currentThenable` to finalize
|
|
161
|
+
observer.updateResult()
|
|
162
|
+
})
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// Handle result property usage tracking
|
|
166
|
+
return !defaultedOptions.notifyOnChangeProps
|
|
167
|
+
? observer.trackResult(result)
|
|
168
|
+
: result
|
|
169
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { InfiniteQueryObserver } from '@tanstack/query-core'
|
|
2
|
+
import type {
|
|
3
|
+
DefaultError,
|
|
4
|
+
InfiniteData,
|
|
5
|
+
QueryClient,
|
|
6
|
+
QueryKey,
|
|
7
|
+
QueryObserver,
|
|
8
|
+
} from '@tanstack/query-core'
|
|
9
|
+
|
|
10
|
+
import type {
|
|
11
|
+
DefinedInitialDataInfiniteOptions,
|
|
12
|
+
UndefinedInitialDataInfiniteOptions,
|
|
13
|
+
} from './infiniteQueryOptions'
|
|
14
|
+
import type {
|
|
15
|
+
DefinedUseInfiniteQueryResult,
|
|
16
|
+
UseInfiniteQueryOptions,
|
|
17
|
+
UseInfiniteQueryResult,
|
|
18
|
+
} from './types'
|
|
19
|
+
import { useBaseQuery } from './useBaseQuery'
|
|
20
|
+
|
|
21
|
+
export function useInfiniteQuery<
|
|
22
|
+
TQueryFnData,
|
|
23
|
+
TError = DefaultError,
|
|
24
|
+
TData = InfiniteData<TQueryFnData>,
|
|
25
|
+
TQueryKey extends QueryKey = QueryKey,
|
|
26
|
+
TPageParam = unknown,
|
|
27
|
+
>(
|
|
28
|
+
options: DefinedInitialDataInfiniteOptions<
|
|
29
|
+
TQueryFnData,
|
|
30
|
+
TError,
|
|
31
|
+
TData,
|
|
32
|
+
TQueryKey,
|
|
33
|
+
TPageParam
|
|
34
|
+
>,
|
|
35
|
+
queryClient?: QueryClient,
|
|
36
|
+
): DefinedUseInfiniteQueryResult<TData, TError>
|
|
37
|
+
|
|
38
|
+
export function useInfiniteQuery<
|
|
39
|
+
TQueryFnData,
|
|
40
|
+
TError = DefaultError,
|
|
41
|
+
TData = InfiniteData<TQueryFnData>,
|
|
42
|
+
TQueryKey extends QueryKey = QueryKey,
|
|
43
|
+
TPageParam = unknown,
|
|
44
|
+
>(
|
|
45
|
+
options: UndefinedInitialDataInfiniteOptions<
|
|
46
|
+
TQueryFnData,
|
|
47
|
+
TError,
|
|
48
|
+
TData,
|
|
49
|
+
TQueryKey,
|
|
50
|
+
TPageParam
|
|
51
|
+
>,
|
|
52
|
+
queryClient?: QueryClient,
|
|
53
|
+
): UseInfiniteQueryResult<TData, TError>
|
|
54
|
+
|
|
55
|
+
export function useInfiniteQuery<
|
|
56
|
+
TQueryFnData,
|
|
57
|
+
TError = DefaultError,
|
|
58
|
+
TData = InfiniteData<TQueryFnData>,
|
|
59
|
+
TQueryKey extends QueryKey = QueryKey,
|
|
60
|
+
TPageParam = unknown,
|
|
61
|
+
>(
|
|
62
|
+
options: UseInfiniteQueryOptions<
|
|
63
|
+
TQueryFnData,
|
|
64
|
+
TError,
|
|
65
|
+
TData,
|
|
66
|
+
TQueryKey,
|
|
67
|
+
TPageParam
|
|
68
|
+
>,
|
|
69
|
+
queryClient?: QueryClient,
|
|
70
|
+
): UseInfiniteQueryResult<TData, TError>
|
|
71
|
+
|
|
72
|
+
export function useInfiniteQuery(
|
|
73
|
+
options: UseInfiniteQueryOptions,
|
|
74
|
+
queryClient?: QueryClient,
|
|
75
|
+
) {
|
|
76
|
+
return useBaseQuery(
|
|
77
|
+
options,
|
|
78
|
+
InfiniteQueryObserver as typeof QueryObserver,
|
|
79
|
+
queryClient,
|
|
80
|
+
)
|
|
81
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { notifyManager } from '@tanstack/query-core'
|
|
2
|
+
import type { QueryClient, QueryFilters } from '@tanstack/query-core'
|
|
3
|
+
import { useCallback } from 'preact/hooks'
|
|
4
|
+
|
|
5
|
+
import { useQueryClient } from './QueryClientProvider'
|
|
6
|
+
import { useSyncExternalStore } from './utils'
|
|
7
|
+
|
|
8
|
+
export function useIsFetching(
|
|
9
|
+
filters?: QueryFilters,
|
|
10
|
+
queryClient?: QueryClient,
|
|
11
|
+
): number {
|
|
12
|
+
const client = useQueryClient(queryClient)
|
|
13
|
+
const queryCache = client.getQueryCache()
|
|
14
|
+
|
|
15
|
+
return useSyncExternalStore(
|
|
16
|
+
useCallback(
|
|
17
|
+
(onStoreChange) =>
|
|
18
|
+
queryCache.subscribe(notifyManager.batchCalls(onStoreChange)),
|
|
19
|
+
[queryCache],
|
|
20
|
+
),
|
|
21
|
+
() => client.isFetching(filters),
|
|
22
|
+
)
|
|
23
|
+
}
|