@tanstack/react-query 5.17.3 → 5.17.5
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/build/legacy/useBaseQuery.cjs.map +1 -1
- package/build/legacy/useBaseQuery.d.cts +1 -87
- package/build/legacy/useBaseQuery.d.ts +1 -87
- package/build/legacy/useBaseQuery.js.map +1 -1
- package/build/modern/useBaseQuery.cjs.map +1 -1
- package/build/modern/useBaseQuery.d.cts +1 -87
- package/build/modern/useBaseQuery.d.ts +1 -87
- package/build/modern/useBaseQuery.js.map +1 -1
- package/package.json +2 -2
- package/src/__tests__/useQueries.test.tsx +23 -1
- package/src/useBaseQuery.ts +7 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/useBaseQuery.ts"],"sourcesContent":["'use client'\nimport * as React from 'react'\n\nimport { notifyManager } from '@tanstack/query-core'\nimport { useQueryErrorResetBoundary } from './QueryErrorResetBoundary'\nimport { useQueryClient } from './QueryClientProvider'\nimport { useIsRestoring } from './isRestoring'\nimport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary,\n} from './errorBoundaryUtils'\nimport { ensureStaleTime, fetchOptimistic, shouldSuspend } from './suspense'\nimport type { UseBaseQueryOptions } from './types'\nimport type {
|
|
1
|
+
{"version":3,"sources":["../../src/useBaseQuery.ts"],"sourcesContent":["'use client'\nimport * as React from 'react'\n\nimport { notifyManager } from '@tanstack/query-core'\nimport { useQueryErrorResetBoundary } from './QueryErrorResetBoundary'\nimport { useQueryClient } from './QueryClientProvider'\nimport { useIsRestoring } from './isRestoring'\nimport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary,\n} from './errorBoundaryUtils'\nimport { ensureStaleTime, fetchOptimistic, shouldSuspend } from './suspense'\nimport type { UseBaseQueryOptions } from './types'\nimport type {\n QueryClient,\n QueryKey,\n QueryObserver,\n QueryObserverResult,\n} from '@tanstack/query-core'\n\nexport function useBaseQuery<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey extends QueryKey,\n>(\n options: UseBaseQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >,\n Observer: typeof QueryObserver,\n queryClient?: QueryClient,\n): QueryObserverResult<TData, TError> {\n if (process.env.NODE_ENV !== 'production') {\n if (typeof options !== 'object' || Array.isArray(options)) {\n throw new Error(\n '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',\n )\n }\n }\n\n const client = useQueryClient(queryClient)\n const isRestoring = useIsRestoring()\n const errorResetBoundary = useQueryErrorResetBoundary()\n const defaultedOptions = client.defaultQueryOptions(options)\n\n // Make sure results are optimistically set in fetching state before subscribing or updating options\n defaultedOptions._optimisticResults = isRestoring\n ? 'isRestoring'\n : 'optimistic'\n\n ensureStaleTime(defaultedOptions)\n ensurePreventErrorBoundaryRetry(defaultedOptions, errorResetBoundary)\n\n useClearResetErrorBoundary(errorResetBoundary)\n\n const [observer] = React.useState(\n () =>\n new Observer<TQueryFnData, TError, TData, TQueryData, TQueryKey>(\n client,\n defaultedOptions,\n ),\n )\n\n const result = observer.getOptimisticResult(defaultedOptions)\n\n React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) => {\n const unsubscribe = isRestoring\n ? () => undefined\n : observer.subscribe(notifyManager.batchCalls(onStoreChange))\n\n // Update result to make sure we did not miss any query updates\n // between creating the observer and subscribing to it.\n observer.updateResult()\n\n return unsubscribe\n },\n [observer, isRestoring],\n ),\n () => observer.getCurrentResult(),\n () => observer.getCurrentResult(),\n )\n\n React.useEffect(() => {\n // Do not notify on updates because of changes in the options because\n // these changes should already be reflected in the optimistic result.\n observer.setOptions(defaultedOptions, { listeners: false })\n }, [defaultedOptions, observer])\n\n // Handle suspense\n if (shouldSuspend(defaultedOptions, result)) {\n // Do the same thing as the effect right above because the effect won't run\n // when we suspend but also, the component won't re-mount so our observer would\n // be out of date.\n throw fetchOptimistic(defaultedOptions, observer, errorResetBoundary)\n }\n\n // Handle error boundary\n if (\n getHasError({\n result,\n errorResetBoundary,\n throwOnError: defaultedOptions.throwOnError,\n query: client\n .getQueryCache()\n .get<\n TQueryFnData,\n TError,\n TQueryData,\n TQueryKey\n >(defaultedOptions.queryHash),\n })\n ) {\n throw result.error\n }\n\n // Handle result property usage tracking\n return !defaultedOptions.notifyOnChangeProps\n ? observer.trackResult(result)\n : result\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,YAAuB;AAEvB,wBAA8B;AAC9B,qCAA2C;AAC3C,iCAA+B;AAC/B,yBAA+B;AAC/B,gCAIO;AACP,sBAAgE;AASzD,SAAS,aAOd,SAOA,UACA,aACoC;AACpC,MAAI,QAAQ,IAAI,aAAa,cAAc;AACzC,QAAI,OAAO,YAAY,YAAY,MAAM,QAAQ,OAAO,GAAG;AACzD,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,aAAS,2CAAe,WAAW;AACzC,QAAM,kBAAc,mCAAe;AACnC,QAAM,yBAAqB,2DAA2B;AACtD,QAAM,mBAAmB,OAAO,oBAAoB,OAAO;AAG3D,mBAAiB,qBAAqB,cAClC,gBACA;AAEJ,uCAAgB,gBAAgB;AAChC,iEAAgC,kBAAkB,kBAAkB;AAEpE,4DAA2B,kBAAkB;AAE7C,QAAM,CAAC,QAAQ,IAAU;AAAA,IACvB,MACE,IAAI;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACJ;AAEA,QAAM,SAAS,SAAS,oBAAoB,gBAAgB;AAE5D,EAAM;AAAA,IACE;AAAA,MACJ,CAAC,kBAAkB;AACjB,cAAM,cAAc,cAChB,MAAM,SACN,SAAS,UAAU,gCAAc,WAAW,aAAa,CAAC;AAI9D,iBAAS,aAAa;AAEtB,eAAO;AAAA,MACT;AAAA,MACA,CAAC,UAAU,WAAW;AAAA,IACxB;AAAA,IACA,MAAM,SAAS,iBAAiB;AAAA,IAChC,MAAM,SAAS,iBAAiB;AAAA,EAClC;AAEA,EAAM,gBAAU,MAAM;AAGpB,aAAS,WAAW,kBAAkB,EAAE,WAAW,MAAM,CAAC;AAAA,EAC5D,GAAG,CAAC,kBAAkB,QAAQ,CAAC;AAG/B,UAAI,+BAAc,kBAAkB,MAAM,GAAG;AAI3C,cAAM,iCAAgB,kBAAkB,UAAU,kBAAkB;AAAA,EACtE;AAGA,UACE,uCAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA,cAAc,iBAAiB;AAAA,IAC/B,OAAO,OACJ,cAAc,EACd,IAKC,iBAAiB,SAAS;AAAA,EAChC,CAAC,GACD;AACA,UAAM,OAAO;AAAA,EACf;AAGA,SAAO,CAAC,iBAAiB,sBACrB,SAAS,YAAY,MAAM,IAC3B;AACN;","names":[]}
|
|
@@ -1,91 +1,5 @@
|
|
|
1
1
|
import { UseBaseQueryOptions } from './types.cjs';
|
|
2
|
-
import { QueryKey, QueryObserver, QueryClient } from '@tanstack/query-core';
|
|
3
|
-
|
|
4
|
-
interface Register {
|
|
5
|
-
}
|
|
6
|
-
type DefaultError = Register extends {
|
|
7
|
-
defaultError: infer TError;
|
|
8
|
-
} ? TError : Error;
|
|
9
|
-
interface ResultOptions {
|
|
10
|
-
throwOnError?: boolean;
|
|
11
|
-
}
|
|
12
|
-
interface RefetchOptions extends ResultOptions {
|
|
13
|
-
cancelRefetch?: boolean;
|
|
14
|
-
}
|
|
15
|
-
type QueryStatus = 'pending' | 'error' | 'success';
|
|
16
|
-
type FetchStatus = 'fetching' | 'paused' | 'idle';
|
|
17
|
-
interface QueryObserverBaseResult<TData = unknown, TError = DefaultError> {
|
|
18
|
-
data: TData | undefined;
|
|
19
|
-
dataUpdatedAt: number;
|
|
20
|
-
error: TError | null;
|
|
21
|
-
errorUpdatedAt: number;
|
|
22
|
-
failureCount: number;
|
|
23
|
-
failureReason: TError | null;
|
|
24
|
-
errorUpdateCount: number;
|
|
25
|
-
isError: boolean;
|
|
26
|
-
isFetched: boolean;
|
|
27
|
-
isFetchedAfterMount: boolean;
|
|
28
|
-
isFetching: boolean;
|
|
29
|
-
isLoading: boolean;
|
|
30
|
-
isPending: boolean;
|
|
31
|
-
isLoadingError: boolean;
|
|
32
|
-
/**
|
|
33
|
-
* @deprecated isInitialLoading is being deprecated in favor of isLoading
|
|
34
|
-
* and will be removed in the next major version.
|
|
35
|
-
*/
|
|
36
|
-
isInitialLoading: boolean;
|
|
37
|
-
isPaused: boolean;
|
|
38
|
-
isPlaceholderData: boolean;
|
|
39
|
-
isRefetchError: boolean;
|
|
40
|
-
isRefetching: boolean;
|
|
41
|
-
isStale: boolean;
|
|
42
|
-
isSuccess: boolean;
|
|
43
|
-
refetch: (options?: RefetchOptions) => Promise<QueryObserverResult<TData, TError>>;
|
|
44
|
-
status: QueryStatus;
|
|
45
|
-
fetchStatus: FetchStatus;
|
|
46
|
-
}
|
|
47
|
-
interface QueryObserverLoadingResult<TData = unknown, TError = DefaultError> extends QueryObserverBaseResult<TData, TError> {
|
|
48
|
-
data: undefined;
|
|
49
|
-
error: null;
|
|
50
|
-
isError: false;
|
|
51
|
-
isPending: true;
|
|
52
|
-
isLoadingError: false;
|
|
53
|
-
isRefetchError: false;
|
|
54
|
-
isSuccess: false;
|
|
55
|
-
status: 'pending';
|
|
56
|
-
}
|
|
57
|
-
interface QueryObserverLoadingErrorResult<TData = unknown, TError = DefaultError> extends QueryObserverBaseResult<TData, TError> {
|
|
58
|
-
data: undefined;
|
|
59
|
-
error: TError;
|
|
60
|
-
isError: true;
|
|
61
|
-
isPending: false;
|
|
62
|
-
isLoadingError: true;
|
|
63
|
-
isRefetchError: false;
|
|
64
|
-
isSuccess: false;
|
|
65
|
-
status: 'error';
|
|
66
|
-
}
|
|
67
|
-
interface QueryObserverRefetchErrorResult<TData = unknown, TError = DefaultError> extends QueryObserverBaseResult<TData, TError> {
|
|
68
|
-
data: TData;
|
|
69
|
-
error: TError;
|
|
70
|
-
isError: true;
|
|
71
|
-
isPending: false;
|
|
72
|
-
isLoadingError: false;
|
|
73
|
-
isRefetchError: true;
|
|
74
|
-
isSuccess: false;
|
|
75
|
-
status: 'error';
|
|
76
|
-
}
|
|
77
|
-
interface QueryObserverSuccessResult<TData = unknown, TError = DefaultError> extends QueryObserverBaseResult<TData, TError> {
|
|
78
|
-
data: TData;
|
|
79
|
-
error: null;
|
|
80
|
-
isError: false;
|
|
81
|
-
isPending: false;
|
|
82
|
-
isLoadingError: false;
|
|
83
|
-
isRefetchError: false;
|
|
84
|
-
isSuccess: true;
|
|
85
|
-
status: 'success';
|
|
86
|
-
}
|
|
87
|
-
type DefinedQueryObserverResult<TData = unknown, TError = DefaultError> = QueryObserverRefetchErrorResult<TData, TError> | QueryObserverSuccessResult<TData, TError>;
|
|
88
|
-
type QueryObserverResult<TData = unknown, TError = DefaultError> = DefinedQueryObserverResult<TData, TError> | QueryObserverLoadingErrorResult<TData, TError> | QueryObserverLoadingResult<TData, TError>;
|
|
2
|
+
import { QueryKey, QueryObserver, QueryClient, QueryObserverResult } from '@tanstack/query-core';
|
|
89
3
|
|
|
90
4
|
declare function useBaseQuery<TQueryFnData, TError, TData, TQueryData, TQueryKey extends QueryKey>(options: UseBaseQueryOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>, Observer: typeof QueryObserver, queryClient?: QueryClient): QueryObserverResult<TData, TError>;
|
|
91
5
|
|
|
@@ -1,91 +1,5 @@
|
|
|
1
1
|
import { UseBaseQueryOptions } from './types.js';
|
|
2
|
-
import { QueryKey, QueryObserver, QueryClient } from '@tanstack/query-core';
|
|
3
|
-
|
|
4
|
-
interface Register {
|
|
5
|
-
}
|
|
6
|
-
type DefaultError = Register extends {
|
|
7
|
-
defaultError: infer TError;
|
|
8
|
-
} ? TError : Error;
|
|
9
|
-
interface ResultOptions {
|
|
10
|
-
throwOnError?: boolean;
|
|
11
|
-
}
|
|
12
|
-
interface RefetchOptions extends ResultOptions {
|
|
13
|
-
cancelRefetch?: boolean;
|
|
14
|
-
}
|
|
15
|
-
type QueryStatus = 'pending' | 'error' | 'success';
|
|
16
|
-
type FetchStatus = 'fetching' | 'paused' | 'idle';
|
|
17
|
-
interface QueryObserverBaseResult<TData = unknown, TError = DefaultError> {
|
|
18
|
-
data: TData | undefined;
|
|
19
|
-
dataUpdatedAt: number;
|
|
20
|
-
error: TError | null;
|
|
21
|
-
errorUpdatedAt: number;
|
|
22
|
-
failureCount: number;
|
|
23
|
-
failureReason: TError | null;
|
|
24
|
-
errorUpdateCount: number;
|
|
25
|
-
isError: boolean;
|
|
26
|
-
isFetched: boolean;
|
|
27
|
-
isFetchedAfterMount: boolean;
|
|
28
|
-
isFetching: boolean;
|
|
29
|
-
isLoading: boolean;
|
|
30
|
-
isPending: boolean;
|
|
31
|
-
isLoadingError: boolean;
|
|
32
|
-
/**
|
|
33
|
-
* @deprecated isInitialLoading is being deprecated in favor of isLoading
|
|
34
|
-
* and will be removed in the next major version.
|
|
35
|
-
*/
|
|
36
|
-
isInitialLoading: boolean;
|
|
37
|
-
isPaused: boolean;
|
|
38
|
-
isPlaceholderData: boolean;
|
|
39
|
-
isRefetchError: boolean;
|
|
40
|
-
isRefetching: boolean;
|
|
41
|
-
isStale: boolean;
|
|
42
|
-
isSuccess: boolean;
|
|
43
|
-
refetch: (options?: RefetchOptions) => Promise<QueryObserverResult<TData, TError>>;
|
|
44
|
-
status: QueryStatus;
|
|
45
|
-
fetchStatus: FetchStatus;
|
|
46
|
-
}
|
|
47
|
-
interface QueryObserverLoadingResult<TData = unknown, TError = DefaultError> extends QueryObserverBaseResult<TData, TError> {
|
|
48
|
-
data: undefined;
|
|
49
|
-
error: null;
|
|
50
|
-
isError: false;
|
|
51
|
-
isPending: true;
|
|
52
|
-
isLoadingError: false;
|
|
53
|
-
isRefetchError: false;
|
|
54
|
-
isSuccess: false;
|
|
55
|
-
status: 'pending';
|
|
56
|
-
}
|
|
57
|
-
interface QueryObserverLoadingErrorResult<TData = unknown, TError = DefaultError> extends QueryObserverBaseResult<TData, TError> {
|
|
58
|
-
data: undefined;
|
|
59
|
-
error: TError;
|
|
60
|
-
isError: true;
|
|
61
|
-
isPending: false;
|
|
62
|
-
isLoadingError: true;
|
|
63
|
-
isRefetchError: false;
|
|
64
|
-
isSuccess: false;
|
|
65
|
-
status: 'error';
|
|
66
|
-
}
|
|
67
|
-
interface QueryObserverRefetchErrorResult<TData = unknown, TError = DefaultError> extends QueryObserverBaseResult<TData, TError> {
|
|
68
|
-
data: TData;
|
|
69
|
-
error: TError;
|
|
70
|
-
isError: true;
|
|
71
|
-
isPending: false;
|
|
72
|
-
isLoadingError: false;
|
|
73
|
-
isRefetchError: true;
|
|
74
|
-
isSuccess: false;
|
|
75
|
-
status: 'error';
|
|
76
|
-
}
|
|
77
|
-
interface QueryObserverSuccessResult<TData = unknown, TError = DefaultError> extends QueryObserverBaseResult<TData, TError> {
|
|
78
|
-
data: TData;
|
|
79
|
-
error: null;
|
|
80
|
-
isError: false;
|
|
81
|
-
isPending: false;
|
|
82
|
-
isLoadingError: false;
|
|
83
|
-
isRefetchError: false;
|
|
84
|
-
isSuccess: true;
|
|
85
|
-
status: 'success';
|
|
86
|
-
}
|
|
87
|
-
type DefinedQueryObserverResult<TData = unknown, TError = DefaultError> = QueryObserverRefetchErrorResult<TData, TError> | QueryObserverSuccessResult<TData, TError>;
|
|
88
|
-
type QueryObserverResult<TData = unknown, TError = DefaultError> = DefinedQueryObserverResult<TData, TError> | QueryObserverLoadingErrorResult<TData, TError> | QueryObserverLoadingResult<TData, TError>;
|
|
2
|
+
import { QueryKey, QueryObserver, QueryClient, QueryObserverResult } from '@tanstack/query-core';
|
|
89
3
|
|
|
90
4
|
declare function useBaseQuery<TQueryFnData, TError, TData, TQueryData, TQueryKey extends QueryKey>(options: UseBaseQueryOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>, Observer: typeof QueryObserver, queryClient?: QueryClient): QueryObserverResult<TData, TError>;
|
|
91
5
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/useBaseQuery.ts"],"sourcesContent":["'use client'\nimport * as React from 'react'\n\nimport { notifyManager } from '@tanstack/query-core'\nimport { useQueryErrorResetBoundary } from './QueryErrorResetBoundary'\nimport { useQueryClient } from './QueryClientProvider'\nimport { useIsRestoring } from './isRestoring'\nimport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary,\n} from './errorBoundaryUtils'\nimport { ensureStaleTime, fetchOptimistic, shouldSuspend } from './suspense'\nimport type { UseBaseQueryOptions } from './types'\nimport type {
|
|
1
|
+
{"version":3,"sources":["../../src/useBaseQuery.ts"],"sourcesContent":["'use client'\nimport * as React from 'react'\n\nimport { notifyManager } from '@tanstack/query-core'\nimport { useQueryErrorResetBoundary } from './QueryErrorResetBoundary'\nimport { useQueryClient } from './QueryClientProvider'\nimport { useIsRestoring } from './isRestoring'\nimport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary,\n} from './errorBoundaryUtils'\nimport { ensureStaleTime, fetchOptimistic, shouldSuspend } from './suspense'\nimport type { UseBaseQueryOptions } from './types'\nimport type {\n QueryClient,\n QueryKey,\n QueryObserver,\n QueryObserverResult,\n} from '@tanstack/query-core'\n\nexport function useBaseQuery<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey extends QueryKey,\n>(\n options: UseBaseQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >,\n Observer: typeof QueryObserver,\n queryClient?: QueryClient,\n): QueryObserverResult<TData, TError> {\n if (process.env.NODE_ENV !== 'production') {\n if (typeof options !== 'object' || Array.isArray(options)) {\n throw new Error(\n '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',\n )\n }\n }\n\n const client = useQueryClient(queryClient)\n const isRestoring = useIsRestoring()\n const errorResetBoundary = useQueryErrorResetBoundary()\n const defaultedOptions = client.defaultQueryOptions(options)\n\n // Make sure results are optimistically set in fetching state before subscribing or updating options\n defaultedOptions._optimisticResults = isRestoring\n ? 'isRestoring'\n : 'optimistic'\n\n ensureStaleTime(defaultedOptions)\n ensurePreventErrorBoundaryRetry(defaultedOptions, errorResetBoundary)\n\n useClearResetErrorBoundary(errorResetBoundary)\n\n const [observer] = React.useState(\n () =>\n new Observer<TQueryFnData, TError, TData, TQueryData, TQueryKey>(\n client,\n defaultedOptions,\n ),\n )\n\n const result = observer.getOptimisticResult(defaultedOptions)\n\n React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) => {\n const unsubscribe = isRestoring\n ? () => undefined\n : observer.subscribe(notifyManager.batchCalls(onStoreChange))\n\n // Update result to make sure we did not miss any query updates\n // between creating the observer and subscribing to it.\n observer.updateResult()\n\n return unsubscribe\n },\n [observer, isRestoring],\n ),\n () => observer.getCurrentResult(),\n () => observer.getCurrentResult(),\n )\n\n React.useEffect(() => {\n // Do not notify on updates because of changes in the options because\n // these changes should already be reflected in the optimistic result.\n observer.setOptions(defaultedOptions, { listeners: false })\n }, [defaultedOptions, observer])\n\n // Handle suspense\n if (shouldSuspend(defaultedOptions, result)) {\n // Do the same thing as the effect right above because the effect won't run\n // when we suspend but also, the component won't re-mount so our observer would\n // be out of date.\n throw fetchOptimistic(defaultedOptions, observer, errorResetBoundary)\n }\n\n // Handle error boundary\n if (\n getHasError({\n result,\n errorResetBoundary,\n throwOnError: defaultedOptions.throwOnError,\n query: client\n .getQueryCache()\n .get<\n TQueryFnData,\n TError,\n TQueryData,\n TQueryKey\n >(defaultedOptions.queryHash),\n })\n ) {\n throw result.error\n }\n\n // Handle result property usage tracking\n return !defaultedOptions.notifyOnChangeProps\n ? observer.trackResult(result)\n : result\n}\n"],"mappings":";;;AACA,YAAY,WAAW;AAEvB,SAAS,qBAAqB;AAC9B,SAAS,kCAAkC;AAC3C,SAAS,sBAAsB;AAC/B,SAAS,sBAAsB;AAC/B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,iBAAiB,iBAAiB,qBAAqB;AASzD,SAAS,aAOd,SAOA,UACA,aACoC;AACpC,MAAI,QAAQ,IAAI,aAAa,cAAc;AACzC,QAAI,OAAO,YAAY,YAAY,MAAM,QAAQ,OAAO,GAAG;AACzD,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,SAAS,eAAe,WAAW;AACzC,QAAM,cAAc,eAAe;AACnC,QAAM,qBAAqB,2BAA2B;AACtD,QAAM,mBAAmB,OAAO,oBAAoB,OAAO;AAG3D,mBAAiB,qBAAqB,cAClC,gBACA;AAEJ,kBAAgB,gBAAgB;AAChC,kCAAgC,kBAAkB,kBAAkB;AAEpE,6BAA2B,kBAAkB;AAE7C,QAAM,CAAC,QAAQ,IAAU;AAAA,IACvB,MACE,IAAI;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACJ;AAEA,QAAM,SAAS,SAAS,oBAAoB,gBAAgB;AAE5D,EAAM;AAAA,IACE;AAAA,MACJ,CAAC,kBAAkB;AACjB,cAAM,cAAc,cAChB,MAAM,SACN,SAAS,UAAU,cAAc,WAAW,aAAa,CAAC;AAI9D,iBAAS,aAAa;AAEtB,eAAO;AAAA,MACT;AAAA,MACA,CAAC,UAAU,WAAW;AAAA,IACxB;AAAA,IACA,MAAM,SAAS,iBAAiB;AAAA,IAChC,MAAM,SAAS,iBAAiB;AAAA,EAClC;AAEA,EAAM,gBAAU,MAAM;AAGpB,aAAS,WAAW,kBAAkB,EAAE,WAAW,MAAM,CAAC;AAAA,EAC5D,GAAG,CAAC,kBAAkB,QAAQ,CAAC;AAG/B,MAAI,cAAc,kBAAkB,MAAM,GAAG;AAI3C,UAAM,gBAAgB,kBAAkB,UAAU,kBAAkB;AAAA,EACtE;AAGA,MACE,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA,cAAc,iBAAiB;AAAA,IAC/B,OAAO,OACJ,cAAc,EACd,IAKC,iBAAiB,SAAS;AAAA,EAChC,CAAC,GACD;AACA,UAAM,OAAO;AAAA,EACf;AAGA,SAAO,CAAC,iBAAiB,sBACrB,SAAS,YAAY,MAAM,IAC3B;AACN;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/useBaseQuery.ts"],"sourcesContent":["'use client'\nimport * as React from 'react'\n\nimport { notifyManager } from '@tanstack/query-core'\nimport { useQueryErrorResetBoundary } from './QueryErrorResetBoundary'\nimport { useQueryClient } from './QueryClientProvider'\nimport { useIsRestoring } from './isRestoring'\nimport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary,\n} from './errorBoundaryUtils'\nimport { ensureStaleTime, fetchOptimistic, shouldSuspend } from './suspense'\nimport type { UseBaseQueryOptions } from './types'\nimport type {
|
|
1
|
+
{"version":3,"sources":["../../src/useBaseQuery.ts"],"sourcesContent":["'use client'\nimport * as React from 'react'\n\nimport { notifyManager } from '@tanstack/query-core'\nimport { useQueryErrorResetBoundary } from './QueryErrorResetBoundary'\nimport { useQueryClient } from './QueryClientProvider'\nimport { useIsRestoring } from './isRestoring'\nimport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary,\n} from './errorBoundaryUtils'\nimport { ensureStaleTime, fetchOptimistic, shouldSuspend } from './suspense'\nimport type { UseBaseQueryOptions } from './types'\nimport type {\n QueryClient,\n QueryKey,\n QueryObserver,\n QueryObserverResult,\n} from '@tanstack/query-core'\n\nexport function useBaseQuery<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey extends QueryKey,\n>(\n options: UseBaseQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >,\n Observer: typeof QueryObserver,\n queryClient?: QueryClient,\n): QueryObserverResult<TData, TError> {\n if (process.env.NODE_ENV !== 'production') {\n if (typeof options !== 'object' || Array.isArray(options)) {\n throw new Error(\n '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',\n )\n }\n }\n\n const client = useQueryClient(queryClient)\n const isRestoring = useIsRestoring()\n const errorResetBoundary = useQueryErrorResetBoundary()\n const defaultedOptions = client.defaultQueryOptions(options)\n\n // Make sure results are optimistically set in fetching state before subscribing or updating options\n defaultedOptions._optimisticResults = isRestoring\n ? 'isRestoring'\n : 'optimistic'\n\n ensureStaleTime(defaultedOptions)\n ensurePreventErrorBoundaryRetry(defaultedOptions, errorResetBoundary)\n\n useClearResetErrorBoundary(errorResetBoundary)\n\n const [observer] = React.useState(\n () =>\n new Observer<TQueryFnData, TError, TData, TQueryData, TQueryKey>(\n client,\n defaultedOptions,\n ),\n )\n\n const result = observer.getOptimisticResult(defaultedOptions)\n\n React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) => {\n const unsubscribe = isRestoring\n ? () => undefined\n : observer.subscribe(notifyManager.batchCalls(onStoreChange))\n\n // Update result to make sure we did not miss any query updates\n // between creating the observer and subscribing to it.\n observer.updateResult()\n\n return unsubscribe\n },\n [observer, isRestoring],\n ),\n () => observer.getCurrentResult(),\n () => observer.getCurrentResult(),\n )\n\n React.useEffect(() => {\n // Do not notify on updates because of changes in the options because\n // these changes should already be reflected in the optimistic result.\n observer.setOptions(defaultedOptions, { listeners: false })\n }, [defaultedOptions, observer])\n\n // Handle suspense\n if (shouldSuspend(defaultedOptions, result)) {\n // Do the same thing as the effect right above because the effect won't run\n // when we suspend but also, the component won't re-mount so our observer would\n // be out of date.\n throw fetchOptimistic(defaultedOptions, observer, errorResetBoundary)\n }\n\n // Handle error boundary\n if (\n getHasError({\n result,\n errorResetBoundary,\n throwOnError: defaultedOptions.throwOnError,\n query: client\n .getQueryCache()\n .get<\n TQueryFnData,\n TError,\n TQueryData,\n TQueryKey\n >(defaultedOptions.queryHash),\n })\n ) {\n throw result.error\n }\n\n // Handle result property usage tracking\n return !defaultedOptions.notifyOnChangeProps\n ? observer.trackResult(result)\n : result\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,YAAuB;AAEvB,wBAA8B;AAC9B,qCAA2C;AAC3C,iCAA+B;AAC/B,yBAA+B;AAC/B,gCAIO;AACP,sBAAgE;AASzD,SAAS,aAOd,SAOA,UACA,aACoC;AACpC,MAAI,QAAQ,IAAI,aAAa,cAAc;AACzC,QAAI,OAAO,YAAY,YAAY,MAAM,QAAQ,OAAO,GAAG;AACzD,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,aAAS,2CAAe,WAAW;AACzC,QAAM,kBAAc,mCAAe;AACnC,QAAM,yBAAqB,2DAA2B;AACtD,QAAM,mBAAmB,OAAO,oBAAoB,OAAO;AAG3D,mBAAiB,qBAAqB,cAClC,gBACA;AAEJ,uCAAgB,gBAAgB;AAChC,iEAAgC,kBAAkB,kBAAkB;AAEpE,4DAA2B,kBAAkB;AAE7C,QAAM,CAAC,QAAQ,IAAU;AAAA,IACvB,MACE,IAAI;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACJ;AAEA,QAAM,SAAS,SAAS,oBAAoB,gBAAgB;AAE5D,EAAM;AAAA,IACE;AAAA,MACJ,CAAC,kBAAkB;AACjB,cAAM,cAAc,cAChB,MAAM,SACN,SAAS,UAAU,gCAAc,WAAW,aAAa,CAAC;AAI9D,iBAAS,aAAa;AAEtB,eAAO;AAAA,MACT;AAAA,MACA,CAAC,UAAU,WAAW;AAAA,IACxB;AAAA,IACA,MAAM,SAAS,iBAAiB;AAAA,IAChC,MAAM,SAAS,iBAAiB;AAAA,EAClC;AAEA,EAAM,gBAAU,MAAM;AAGpB,aAAS,WAAW,kBAAkB,EAAE,WAAW,MAAM,CAAC;AAAA,EAC5D,GAAG,CAAC,kBAAkB,QAAQ,CAAC;AAG/B,UAAI,+BAAc,kBAAkB,MAAM,GAAG;AAI3C,cAAM,iCAAgB,kBAAkB,UAAU,kBAAkB;AAAA,EACtE;AAGA,UACE,uCAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA,cAAc,iBAAiB;AAAA,IAC/B,OAAO,OACJ,cAAc,EACd,IAKC,iBAAiB,SAAS;AAAA,EAChC,CAAC,GACD;AACA,UAAM,OAAO;AAAA,EACf;AAGA,SAAO,CAAC,iBAAiB,sBACrB,SAAS,YAAY,MAAM,IAC3B;AACN;","names":[]}
|
|
@@ -1,91 +1,5 @@
|
|
|
1
1
|
import { UseBaseQueryOptions } from './types.cjs';
|
|
2
|
-
import { QueryKey, QueryObserver, QueryClient } from '@tanstack/query-core';
|
|
3
|
-
|
|
4
|
-
interface Register {
|
|
5
|
-
}
|
|
6
|
-
type DefaultError = Register extends {
|
|
7
|
-
defaultError: infer TError;
|
|
8
|
-
} ? TError : Error;
|
|
9
|
-
interface ResultOptions {
|
|
10
|
-
throwOnError?: boolean;
|
|
11
|
-
}
|
|
12
|
-
interface RefetchOptions extends ResultOptions {
|
|
13
|
-
cancelRefetch?: boolean;
|
|
14
|
-
}
|
|
15
|
-
type QueryStatus = 'pending' | 'error' | 'success';
|
|
16
|
-
type FetchStatus = 'fetching' | 'paused' | 'idle';
|
|
17
|
-
interface QueryObserverBaseResult<TData = unknown, TError = DefaultError> {
|
|
18
|
-
data: TData | undefined;
|
|
19
|
-
dataUpdatedAt: number;
|
|
20
|
-
error: TError | null;
|
|
21
|
-
errorUpdatedAt: number;
|
|
22
|
-
failureCount: number;
|
|
23
|
-
failureReason: TError | null;
|
|
24
|
-
errorUpdateCount: number;
|
|
25
|
-
isError: boolean;
|
|
26
|
-
isFetched: boolean;
|
|
27
|
-
isFetchedAfterMount: boolean;
|
|
28
|
-
isFetching: boolean;
|
|
29
|
-
isLoading: boolean;
|
|
30
|
-
isPending: boolean;
|
|
31
|
-
isLoadingError: boolean;
|
|
32
|
-
/**
|
|
33
|
-
* @deprecated isInitialLoading is being deprecated in favor of isLoading
|
|
34
|
-
* and will be removed in the next major version.
|
|
35
|
-
*/
|
|
36
|
-
isInitialLoading: boolean;
|
|
37
|
-
isPaused: boolean;
|
|
38
|
-
isPlaceholderData: boolean;
|
|
39
|
-
isRefetchError: boolean;
|
|
40
|
-
isRefetching: boolean;
|
|
41
|
-
isStale: boolean;
|
|
42
|
-
isSuccess: boolean;
|
|
43
|
-
refetch: (options?: RefetchOptions) => Promise<QueryObserverResult<TData, TError>>;
|
|
44
|
-
status: QueryStatus;
|
|
45
|
-
fetchStatus: FetchStatus;
|
|
46
|
-
}
|
|
47
|
-
interface QueryObserverLoadingResult<TData = unknown, TError = DefaultError> extends QueryObserverBaseResult<TData, TError> {
|
|
48
|
-
data: undefined;
|
|
49
|
-
error: null;
|
|
50
|
-
isError: false;
|
|
51
|
-
isPending: true;
|
|
52
|
-
isLoadingError: false;
|
|
53
|
-
isRefetchError: false;
|
|
54
|
-
isSuccess: false;
|
|
55
|
-
status: 'pending';
|
|
56
|
-
}
|
|
57
|
-
interface QueryObserverLoadingErrorResult<TData = unknown, TError = DefaultError> extends QueryObserverBaseResult<TData, TError> {
|
|
58
|
-
data: undefined;
|
|
59
|
-
error: TError;
|
|
60
|
-
isError: true;
|
|
61
|
-
isPending: false;
|
|
62
|
-
isLoadingError: true;
|
|
63
|
-
isRefetchError: false;
|
|
64
|
-
isSuccess: false;
|
|
65
|
-
status: 'error';
|
|
66
|
-
}
|
|
67
|
-
interface QueryObserverRefetchErrorResult<TData = unknown, TError = DefaultError> extends QueryObserverBaseResult<TData, TError> {
|
|
68
|
-
data: TData;
|
|
69
|
-
error: TError;
|
|
70
|
-
isError: true;
|
|
71
|
-
isPending: false;
|
|
72
|
-
isLoadingError: false;
|
|
73
|
-
isRefetchError: true;
|
|
74
|
-
isSuccess: false;
|
|
75
|
-
status: 'error';
|
|
76
|
-
}
|
|
77
|
-
interface QueryObserverSuccessResult<TData = unknown, TError = DefaultError> extends QueryObserverBaseResult<TData, TError> {
|
|
78
|
-
data: TData;
|
|
79
|
-
error: null;
|
|
80
|
-
isError: false;
|
|
81
|
-
isPending: false;
|
|
82
|
-
isLoadingError: false;
|
|
83
|
-
isRefetchError: false;
|
|
84
|
-
isSuccess: true;
|
|
85
|
-
status: 'success';
|
|
86
|
-
}
|
|
87
|
-
type DefinedQueryObserverResult<TData = unknown, TError = DefaultError> = QueryObserverRefetchErrorResult<TData, TError> | QueryObserverSuccessResult<TData, TError>;
|
|
88
|
-
type QueryObserverResult<TData = unknown, TError = DefaultError> = DefinedQueryObserverResult<TData, TError> | QueryObserverLoadingErrorResult<TData, TError> | QueryObserverLoadingResult<TData, TError>;
|
|
2
|
+
import { QueryKey, QueryObserver, QueryClient, QueryObserverResult } from '@tanstack/query-core';
|
|
89
3
|
|
|
90
4
|
declare function useBaseQuery<TQueryFnData, TError, TData, TQueryData, TQueryKey extends QueryKey>(options: UseBaseQueryOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>, Observer: typeof QueryObserver, queryClient?: QueryClient): QueryObserverResult<TData, TError>;
|
|
91
5
|
|
|
@@ -1,91 +1,5 @@
|
|
|
1
1
|
import { UseBaseQueryOptions } from './types.js';
|
|
2
|
-
import { QueryKey, QueryObserver, QueryClient } from '@tanstack/query-core';
|
|
3
|
-
|
|
4
|
-
interface Register {
|
|
5
|
-
}
|
|
6
|
-
type DefaultError = Register extends {
|
|
7
|
-
defaultError: infer TError;
|
|
8
|
-
} ? TError : Error;
|
|
9
|
-
interface ResultOptions {
|
|
10
|
-
throwOnError?: boolean;
|
|
11
|
-
}
|
|
12
|
-
interface RefetchOptions extends ResultOptions {
|
|
13
|
-
cancelRefetch?: boolean;
|
|
14
|
-
}
|
|
15
|
-
type QueryStatus = 'pending' | 'error' | 'success';
|
|
16
|
-
type FetchStatus = 'fetching' | 'paused' | 'idle';
|
|
17
|
-
interface QueryObserverBaseResult<TData = unknown, TError = DefaultError> {
|
|
18
|
-
data: TData | undefined;
|
|
19
|
-
dataUpdatedAt: number;
|
|
20
|
-
error: TError | null;
|
|
21
|
-
errorUpdatedAt: number;
|
|
22
|
-
failureCount: number;
|
|
23
|
-
failureReason: TError | null;
|
|
24
|
-
errorUpdateCount: number;
|
|
25
|
-
isError: boolean;
|
|
26
|
-
isFetched: boolean;
|
|
27
|
-
isFetchedAfterMount: boolean;
|
|
28
|
-
isFetching: boolean;
|
|
29
|
-
isLoading: boolean;
|
|
30
|
-
isPending: boolean;
|
|
31
|
-
isLoadingError: boolean;
|
|
32
|
-
/**
|
|
33
|
-
* @deprecated isInitialLoading is being deprecated in favor of isLoading
|
|
34
|
-
* and will be removed in the next major version.
|
|
35
|
-
*/
|
|
36
|
-
isInitialLoading: boolean;
|
|
37
|
-
isPaused: boolean;
|
|
38
|
-
isPlaceholderData: boolean;
|
|
39
|
-
isRefetchError: boolean;
|
|
40
|
-
isRefetching: boolean;
|
|
41
|
-
isStale: boolean;
|
|
42
|
-
isSuccess: boolean;
|
|
43
|
-
refetch: (options?: RefetchOptions) => Promise<QueryObserverResult<TData, TError>>;
|
|
44
|
-
status: QueryStatus;
|
|
45
|
-
fetchStatus: FetchStatus;
|
|
46
|
-
}
|
|
47
|
-
interface QueryObserverLoadingResult<TData = unknown, TError = DefaultError> extends QueryObserverBaseResult<TData, TError> {
|
|
48
|
-
data: undefined;
|
|
49
|
-
error: null;
|
|
50
|
-
isError: false;
|
|
51
|
-
isPending: true;
|
|
52
|
-
isLoadingError: false;
|
|
53
|
-
isRefetchError: false;
|
|
54
|
-
isSuccess: false;
|
|
55
|
-
status: 'pending';
|
|
56
|
-
}
|
|
57
|
-
interface QueryObserverLoadingErrorResult<TData = unknown, TError = DefaultError> extends QueryObserverBaseResult<TData, TError> {
|
|
58
|
-
data: undefined;
|
|
59
|
-
error: TError;
|
|
60
|
-
isError: true;
|
|
61
|
-
isPending: false;
|
|
62
|
-
isLoadingError: true;
|
|
63
|
-
isRefetchError: false;
|
|
64
|
-
isSuccess: false;
|
|
65
|
-
status: 'error';
|
|
66
|
-
}
|
|
67
|
-
interface QueryObserverRefetchErrorResult<TData = unknown, TError = DefaultError> extends QueryObserverBaseResult<TData, TError> {
|
|
68
|
-
data: TData;
|
|
69
|
-
error: TError;
|
|
70
|
-
isError: true;
|
|
71
|
-
isPending: false;
|
|
72
|
-
isLoadingError: false;
|
|
73
|
-
isRefetchError: true;
|
|
74
|
-
isSuccess: false;
|
|
75
|
-
status: 'error';
|
|
76
|
-
}
|
|
77
|
-
interface QueryObserverSuccessResult<TData = unknown, TError = DefaultError> extends QueryObserverBaseResult<TData, TError> {
|
|
78
|
-
data: TData;
|
|
79
|
-
error: null;
|
|
80
|
-
isError: false;
|
|
81
|
-
isPending: false;
|
|
82
|
-
isLoadingError: false;
|
|
83
|
-
isRefetchError: false;
|
|
84
|
-
isSuccess: true;
|
|
85
|
-
status: 'success';
|
|
86
|
-
}
|
|
87
|
-
type DefinedQueryObserverResult<TData = unknown, TError = DefaultError> = QueryObserverRefetchErrorResult<TData, TError> | QueryObserverSuccessResult<TData, TError>;
|
|
88
|
-
type QueryObserverResult<TData = unknown, TError = DefaultError> = DefinedQueryObserverResult<TData, TError> | QueryObserverLoadingErrorResult<TData, TError> | QueryObserverLoadingResult<TData, TError>;
|
|
2
|
+
import { QueryKey, QueryObserver, QueryClient, QueryObserverResult } from '@tanstack/query-core';
|
|
89
3
|
|
|
90
4
|
declare function useBaseQuery<TQueryFnData, TError, TData, TQueryData, TQueryKey extends QueryKey>(options: UseBaseQueryOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>, Observer: typeof QueryObserver, queryClient?: QueryClient): QueryObserverResult<TData, TError>;
|
|
91
5
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/useBaseQuery.ts"],"sourcesContent":["'use client'\nimport * as React from 'react'\n\nimport { notifyManager } from '@tanstack/query-core'\nimport { useQueryErrorResetBoundary } from './QueryErrorResetBoundary'\nimport { useQueryClient } from './QueryClientProvider'\nimport { useIsRestoring } from './isRestoring'\nimport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary,\n} from './errorBoundaryUtils'\nimport { ensureStaleTime, fetchOptimistic, shouldSuspend } from './suspense'\nimport type { UseBaseQueryOptions } from './types'\nimport type {
|
|
1
|
+
{"version":3,"sources":["../../src/useBaseQuery.ts"],"sourcesContent":["'use client'\nimport * as React from 'react'\n\nimport { notifyManager } from '@tanstack/query-core'\nimport { useQueryErrorResetBoundary } from './QueryErrorResetBoundary'\nimport { useQueryClient } from './QueryClientProvider'\nimport { useIsRestoring } from './isRestoring'\nimport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary,\n} from './errorBoundaryUtils'\nimport { ensureStaleTime, fetchOptimistic, shouldSuspend } from './suspense'\nimport type { UseBaseQueryOptions } from './types'\nimport type {\n QueryClient,\n QueryKey,\n QueryObserver,\n QueryObserverResult,\n} from '@tanstack/query-core'\n\nexport function useBaseQuery<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey extends QueryKey,\n>(\n options: UseBaseQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >,\n Observer: typeof QueryObserver,\n queryClient?: QueryClient,\n): QueryObserverResult<TData, TError> {\n if (process.env.NODE_ENV !== 'production') {\n if (typeof options !== 'object' || Array.isArray(options)) {\n throw new Error(\n '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',\n )\n }\n }\n\n const client = useQueryClient(queryClient)\n const isRestoring = useIsRestoring()\n const errorResetBoundary = useQueryErrorResetBoundary()\n const defaultedOptions = client.defaultQueryOptions(options)\n\n // Make sure results are optimistically set in fetching state before subscribing or updating options\n defaultedOptions._optimisticResults = isRestoring\n ? 'isRestoring'\n : 'optimistic'\n\n ensureStaleTime(defaultedOptions)\n ensurePreventErrorBoundaryRetry(defaultedOptions, errorResetBoundary)\n\n useClearResetErrorBoundary(errorResetBoundary)\n\n const [observer] = React.useState(\n () =>\n new Observer<TQueryFnData, TError, TData, TQueryData, TQueryKey>(\n client,\n defaultedOptions,\n ),\n )\n\n const result = observer.getOptimisticResult(defaultedOptions)\n\n React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) => {\n const unsubscribe = isRestoring\n ? () => undefined\n : observer.subscribe(notifyManager.batchCalls(onStoreChange))\n\n // Update result to make sure we did not miss any query updates\n // between creating the observer and subscribing to it.\n observer.updateResult()\n\n return unsubscribe\n },\n [observer, isRestoring],\n ),\n () => observer.getCurrentResult(),\n () => observer.getCurrentResult(),\n )\n\n React.useEffect(() => {\n // Do not notify on updates because of changes in the options because\n // these changes should already be reflected in the optimistic result.\n observer.setOptions(defaultedOptions, { listeners: false })\n }, [defaultedOptions, observer])\n\n // Handle suspense\n if (shouldSuspend(defaultedOptions, result)) {\n // Do the same thing as the effect right above because the effect won't run\n // when we suspend but also, the component won't re-mount so our observer would\n // be out of date.\n throw fetchOptimistic(defaultedOptions, observer, errorResetBoundary)\n }\n\n // Handle error boundary\n if (\n getHasError({\n result,\n errorResetBoundary,\n throwOnError: defaultedOptions.throwOnError,\n query: client\n .getQueryCache()\n .get<\n TQueryFnData,\n TError,\n TQueryData,\n TQueryKey\n >(defaultedOptions.queryHash),\n })\n ) {\n throw result.error\n }\n\n // Handle result property usage tracking\n return !defaultedOptions.notifyOnChangeProps\n ? observer.trackResult(result)\n : result\n}\n"],"mappings":";;;AACA,YAAY,WAAW;AAEvB,SAAS,qBAAqB;AAC9B,SAAS,kCAAkC;AAC3C,SAAS,sBAAsB;AAC/B,SAAS,sBAAsB;AAC/B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,iBAAiB,iBAAiB,qBAAqB;AASzD,SAAS,aAOd,SAOA,UACA,aACoC;AACpC,MAAI,QAAQ,IAAI,aAAa,cAAc;AACzC,QAAI,OAAO,YAAY,YAAY,MAAM,QAAQ,OAAO,GAAG;AACzD,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,SAAS,eAAe,WAAW;AACzC,QAAM,cAAc,eAAe;AACnC,QAAM,qBAAqB,2BAA2B;AACtD,QAAM,mBAAmB,OAAO,oBAAoB,OAAO;AAG3D,mBAAiB,qBAAqB,cAClC,gBACA;AAEJ,kBAAgB,gBAAgB;AAChC,kCAAgC,kBAAkB,kBAAkB;AAEpE,6BAA2B,kBAAkB;AAE7C,QAAM,CAAC,QAAQ,IAAU;AAAA,IACvB,MACE,IAAI;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACJ;AAEA,QAAM,SAAS,SAAS,oBAAoB,gBAAgB;AAE5D,EAAM;AAAA,IACE;AAAA,MACJ,CAAC,kBAAkB;AACjB,cAAM,cAAc,cAChB,MAAM,SACN,SAAS,UAAU,cAAc,WAAW,aAAa,CAAC;AAI9D,iBAAS,aAAa;AAEtB,eAAO;AAAA,MACT;AAAA,MACA,CAAC,UAAU,WAAW;AAAA,IACxB;AAAA,IACA,MAAM,SAAS,iBAAiB;AAAA,IAChC,MAAM,SAAS,iBAAiB;AAAA,EAClC;AAEA,EAAM,gBAAU,MAAM;AAGpB,aAAS,WAAW,kBAAkB,EAAE,WAAW,MAAM,CAAC;AAAA,EAC5D,GAAG,CAAC,kBAAkB,QAAQ,CAAC;AAG/B,MAAI,cAAc,kBAAkB,MAAM,GAAG;AAI3C,UAAM,gBAAgB,kBAAkB,UAAU,kBAAkB;AAAA,EACtE;AAGA,MACE,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA,cAAc,iBAAiB;AAAA,IAC/B,OAAO,OACJ,cAAc,EACd,IAKC,iBAAiB,SAAS;AAAA,EAChC,CAAC,GACD;AACA,UAAM,OAAO;AAAA,EACf;AAGA,SAAO,CAAC,iBAAiB,sBACrB,SAAS,YAAY,MAAM,IAC3B;AACN;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tanstack/react-query",
|
|
3
|
-
"version": "5.17.
|
|
3
|
+
"version": "5.17.5",
|
|
4
4
|
"description": "Hooks for managing, caching and syncing asynchronous and remote data in React",
|
|
5
5
|
"author": "tannerlinsley",
|
|
6
6
|
"license": "MIT",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"!build/codemods/**/__tests__"
|
|
42
42
|
],
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@tanstack/query-core": "5.17.
|
|
44
|
+
"@tanstack/query-core": "5.17.4"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
47
|
"@types/react": "^18.2.45",
|
|
@@ -978,7 +978,7 @@ describe('useQueries', () => {
|
|
|
978
978
|
)
|
|
979
979
|
})
|
|
980
980
|
|
|
981
|
-
it('should not return new instances when called without queries', async () => {
|
|
981
|
+
it.skip('should not return new instances when called without queries', async () => {
|
|
982
982
|
const key = queryKey()
|
|
983
983
|
const ids: Array<number> = []
|
|
984
984
|
let resultChanged = 0
|
|
@@ -1027,6 +1027,28 @@ describe('useQueries', () => {
|
|
|
1027
1027
|
expect(resultChanged).toBe(1)
|
|
1028
1028
|
})
|
|
1029
1029
|
|
|
1030
|
+
it('should not have infinite render loops with empty queries (#6645)', async () => {
|
|
1031
|
+
let renderCount = 0
|
|
1032
|
+
|
|
1033
|
+
function Page() {
|
|
1034
|
+
const result = useQueries({
|
|
1035
|
+
queries: [],
|
|
1036
|
+
})
|
|
1037
|
+
|
|
1038
|
+
React.useEffect(() => {
|
|
1039
|
+
renderCount++
|
|
1040
|
+
})
|
|
1041
|
+
|
|
1042
|
+
return <div>data: {JSON.stringify(result)}</div>
|
|
1043
|
+
}
|
|
1044
|
+
|
|
1045
|
+
renderWithClient(queryClient, <Page />)
|
|
1046
|
+
|
|
1047
|
+
await sleep(10)
|
|
1048
|
+
|
|
1049
|
+
expect(renderCount).toBe(1)
|
|
1050
|
+
})
|
|
1051
|
+
|
|
1030
1052
|
it('should only call combine with query results', async () => {
|
|
1031
1053
|
const key1 = queryKey()
|
|
1032
1054
|
const key2 = queryKey()
|
package/src/useBaseQuery.ts
CHANGED
|
@@ -12,7 +12,12 @@ import {
|
|
|
12
12
|
} from './errorBoundaryUtils'
|
|
13
13
|
import { ensureStaleTime, fetchOptimistic, shouldSuspend } from './suspense'
|
|
14
14
|
import type { UseBaseQueryOptions } from './types'
|
|
15
|
-
import type {
|
|
15
|
+
import type {
|
|
16
|
+
QueryClient,
|
|
17
|
+
QueryKey,
|
|
18
|
+
QueryObserver,
|
|
19
|
+
QueryObserverResult,
|
|
20
|
+
} from '@tanstack/query-core'
|
|
16
21
|
|
|
17
22
|
export function useBaseQuery<
|
|
18
23
|
TQueryFnData,
|
|
@@ -30,7 +35,7 @@ export function useBaseQuery<
|
|
|
30
35
|
>,
|
|
31
36
|
Observer: typeof QueryObserver,
|
|
32
37
|
queryClient?: QueryClient,
|
|
33
|
-
) {
|
|
38
|
+
): QueryObserverResult<TData, TError> {
|
|
34
39
|
if (process.env.NODE_ENV !== 'production') {
|
|
35
40
|
if (typeof options !== 'object' || Array.isArray(options)) {
|
|
36
41
|
throw new Error(
|