@tanstack/react-query 5.0.0-alpha.2 → 5.0.0-alpha.21

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 (110) hide show
  1. package/build/lib/HydrationBoundary.esm.js +1 -0
  2. package/build/lib/HydrationBoundary.esm.js.map +1 -1
  3. package/build/lib/HydrationBoundary.js +1 -0
  4. package/build/lib/HydrationBoundary.js.map +1 -1
  5. package/build/lib/HydrationBoundary.mjs +1 -0
  6. package/build/lib/HydrationBoundary.mjs.map +1 -1
  7. package/build/lib/QueryClientProvider.esm.js +1 -0
  8. package/build/lib/QueryClientProvider.esm.js.map +1 -1
  9. package/build/lib/QueryClientProvider.js +1 -0
  10. package/build/lib/QueryClientProvider.js.map +1 -1
  11. package/build/lib/QueryClientProvider.mjs +1 -0
  12. package/build/lib/QueryClientProvider.mjs.map +1 -1
  13. package/build/lib/QueryErrorResetBoundary.esm.js +1 -0
  14. package/build/lib/QueryErrorResetBoundary.esm.js.map +1 -1
  15. package/build/lib/QueryErrorResetBoundary.js +1 -0
  16. package/build/lib/QueryErrorResetBoundary.js.map +1 -1
  17. package/build/lib/QueryErrorResetBoundary.mjs +1 -0
  18. package/build/lib/QueryErrorResetBoundary.mjs.map +1 -1
  19. package/build/lib/__tests__/ssr.test.d.ts +0 -3
  20. package/build/lib/__tests__/utils.d.ts +2 -3
  21. package/build/lib/errorBoundaryUtils.esm.js +1 -0
  22. package/build/lib/errorBoundaryUtils.esm.js.map +1 -1
  23. package/build/lib/errorBoundaryUtils.js +1 -0
  24. package/build/lib/errorBoundaryUtils.js.map +1 -1
  25. package/build/lib/errorBoundaryUtils.mjs +1 -0
  26. package/build/lib/errorBoundaryUtils.mjs.map +1 -1
  27. package/build/lib/isRestoring.esm.js +1 -0
  28. package/build/lib/isRestoring.esm.js.map +1 -1
  29. package/build/lib/isRestoring.js +1 -0
  30. package/build/lib/isRestoring.js.map +1 -1
  31. package/build/lib/isRestoring.mjs +1 -0
  32. package/build/lib/isRestoring.mjs.map +1 -1
  33. package/build/lib/suspense.d.ts +1 -1
  34. package/build/lib/suspense.esm.js +2 -9
  35. package/build/lib/suspense.esm.js.map +1 -1
  36. package/build/lib/suspense.js +2 -9
  37. package/build/lib/suspense.js.map +1 -1
  38. package/build/lib/suspense.mjs +1 -8
  39. package/build/lib/suspense.mjs.map +1 -1
  40. package/build/lib/useBaseQuery.esm.js +1 -11
  41. package/build/lib/useBaseQuery.esm.js.map +1 -1
  42. package/build/lib/useBaseQuery.js +1 -11
  43. package/build/lib/useBaseQuery.js.map +1 -1
  44. package/build/lib/useBaseQuery.mjs +1 -11
  45. package/build/lib/useBaseQuery.mjs.map +1 -1
  46. package/build/lib/useInfiniteQuery.esm.js +1 -0
  47. package/build/lib/useInfiniteQuery.esm.js.map +1 -1
  48. package/build/lib/useInfiniteQuery.js +1 -0
  49. package/build/lib/useInfiniteQuery.js.map +1 -1
  50. package/build/lib/useInfiniteQuery.mjs +1 -0
  51. package/build/lib/useInfiniteQuery.mjs.map +1 -1
  52. package/build/lib/useIsFetching.esm.js +1 -0
  53. package/build/lib/useIsFetching.esm.js.map +1 -1
  54. package/build/lib/useIsFetching.js +1 -0
  55. package/build/lib/useIsFetching.js.map +1 -1
  56. package/build/lib/useIsFetching.mjs +1 -0
  57. package/build/lib/useIsFetching.mjs.map +1 -1
  58. package/build/lib/useMutation.esm.js +1 -0
  59. package/build/lib/useMutation.esm.js.map +1 -1
  60. package/build/lib/useMutation.js +1 -0
  61. package/build/lib/useMutation.js.map +1 -1
  62. package/build/lib/useMutation.mjs +1 -0
  63. package/build/lib/useMutation.mjs.map +1 -1
  64. package/build/lib/useMutationState.d.ts +3 -3
  65. package/build/lib/useMutationState.esm.js +1 -0
  66. package/build/lib/useMutationState.esm.js.map +1 -1
  67. package/build/lib/useMutationState.js +1 -0
  68. package/build/lib/useMutationState.js.map +1 -1
  69. package/build/lib/useMutationState.mjs +1 -0
  70. package/build/lib/useMutationState.mjs.map +1 -1
  71. package/build/lib/useQueries.d.ts +2 -3
  72. package/build/lib/useQueries.esm.js +20 -16
  73. package/build/lib/useQueries.esm.js.map +1 -1
  74. package/build/lib/useQueries.js +20 -16
  75. package/build/lib/useQueries.js.map +1 -1
  76. package/build/lib/useQueries.mjs +11 -10
  77. package/build/lib/useQueries.mjs.map +1 -1
  78. package/build/lib/useQuery.esm.js +1 -0
  79. package/build/lib/useQuery.esm.js.map +1 -1
  80. package/build/lib/useQuery.js +1 -0
  81. package/build/lib/useQuery.js.map +1 -1
  82. package/build/lib/useQuery.mjs +1 -0
  83. package/build/lib/useQuery.mjs.map +1 -1
  84. package/build/umd/index.development.js +108 -138
  85. package/build/umd/index.development.js.map +1 -1
  86. package/build/umd/index.production.js +1 -1
  87. package/build/umd/index.production.js.map +1 -1
  88. package/package.json +3 -3
  89. package/src/__tests__/HydrationBoundary.test.tsx +4 -3
  90. package/src/__tests__/QueryClientProvider.test.tsx +2 -1
  91. package/src/__tests__/QueryResetErrorBoundary.test.tsx +753 -620
  92. package/src/__tests__/ssr-hydration.test.tsx +11 -10
  93. package/src/__tests__/ssr.test.tsx +4 -7
  94. package/src/__tests__/suspense.test.tsx +11 -92
  95. package/src/__tests__/useInfiniteQuery.test.tsx +18 -16
  96. package/src/__tests__/useInfiniteQuery.type.test.tsx +94 -13
  97. package/src/__tests__/useMutation.test.tsx +21 -20
  98. package/src/__tests__/useMutationState.test.tsx +24 -58
  99. package/src/__tests__/useQueries.test.tsx +25 -154
  100. package/src/__tests__/useQuery.test.tsx +174 -359
  101. package/src/__tests__/utils.tsx +3 -2
  102. package/src/errorBoundaryUtils.ts +1 -0
  103. package/src/suspense.ts +3 -11
  104. package/src/useBaseQuery.ts +1 -19
  105. package/src/useInfiniteQuery.ts +1 -0
  106. package/src/useIsFetching.ts +1 -0
  107. package/src/useMutation.ts +1 -0
  108. package/src/useMutationState.ts +4 -3
  109. package/src/useQueries.ts +19 -18
  110. package/src/useQuery.ts +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"useQueries.mjs","sources":["../../src/useQueries.ts"],"sourcesContent":["import * as React from 'react'\n\nimport type {\n QueryKey,\n QueryFunction,\n QueriesPlaceholderDataFunction,\n QueryClient,\n DefaultError,\n} from '@tanstack/query-core'\nimport { notifyManager, QueriesObserver } from '@tanstack/query-core'\nimport { useQueryClient } from './QueryClientProvider'\nimport type { UseQueryOptions, UseQueryResult } from './types'\nimport { useIsRestoring } from './isRestoring'\nimport { useQueryErrorResetBoundary } from './QueryErrorResetBoundary'\nimport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary,\n} from './errorBoundaryUtils'\nimport {\n ensureStaleTime,\n shouldSuspend,\n fetchOptimistic,\n willFetch,\n} from './suspense'\n\n// This defines the `UseQueryOptions` that are accepted in `QueriesOptions` & `GetOptions`.\n// `placeholderData` function does not have a parameter\ntype UseQueryOptionsForUseQueries<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = Omit<\n UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n 'placeholderData'\n> & {\n placeholderData?: TQueryFnData | QueriesPlaceholderDataFunction<TQueryFnData>\n}\n\n// Avoid TS depth-limit error in case of large array literal\ntype MAXIMUM_DEPTH = 20\n\ntype GetOptions<T> =\n // Part 1: responsible for applying explicit type parameter to function arguments, if object { queryFnData: TQueryFnData, error: TError, data: TData }\n T extends {\n queryFnData: infer TQueryFnData\n error?: infer TError\n data: infer TData\n }\n ? UseQueryOptionsForUseQueries<TQueryFnData, TError, TData>\n : T extends { queryFnData: infer TQueryFnData; error?: infer TError }\n ? UseQueryOptionsForUseQueries<TQueryFnData, TError>\n : T extends { data: infer TData; error?: infer TError }\n ? UseQueryOptionsForUseQueries<unknown, TError, TData>\n : // Part 2: responsible for applying explicit type parameter to function arguments, if tuple [TQueryFnData, TError, TData]\n T extends [infer TQueryFnData, infer TError, infer TData]\n ? UseQueryOptionsForUseQueries<TQueryFnData, TError, TData>\n : T extends [infer TQueryFnData, infer TError]\n ? UseQueryOptionsForUseQueries<TQueryFnData, TError>\n : T extends [infer TQueryFnData]\n ? UseQueryOptionsForUseQueries<TQueryFnData>\n : // Part 3: responsible for inferring and enforcing type if no explicit parameter was provided\n T extends {\n queryFn?: QueryFunction<infer TQueryFnData, infer TQueryKey>\n select: (data: any) => infer TData\n }\n ? UseQueryOptionsForUseQueries<TQueryFnData, Error, TData, TQueryKey>\n : T extends { queryFn?: QueryFunction<infer TQueryFnData, infer TQueryKey> }\n ? UseQueryOptionsForUseQueries<TQueryFnData, Error, TQueryFnData, TQueryKey>\n : // Fallback\n UseQueryOptionsForUseQueries\n\ntype GetResults<T> =\n // Part 1: responsible for mapping explicit type parameter to function result, if object\n T extends { queryFnData: any; error?: infer TError; data: infer TData }\n ? UseQueryResult<TData, TError>\n : T extends { queryFnData: infer TQueryFnData; error?: infer TError }\n ? UseQueryResult<TQueryFnData, TError>\n : T extends { data: infer TData; error?: infer TError }\n ? UseQueryResult<TData, TError>\n : // Part 2: responsible for mapping explicit type parameter to function result, if tuple\n T extends [any, infer TError, infer TData]\n ? UseQueryResult<TData, TError>\n : T extends [infer TQueryFnData, infer TError]\n ? UseQueryResult<TQueryFnData, TError>\n : T extends [infer TQueryFnData]\n ? UseQueryResult<TQueryFnData>\n : // Part 3: responsible for mapping inferred type to results, if no explicit parameter was provided\n T extends {\n queryFn?: QueryFunction<unknown, any>\n select: (data: any) => infer TData\n }\n ? UseQueryResult<TData>\n : T extends { queryFn?: QueryFunction<infer TQueryFnData, any> }\n ? UseQueryResult<TQueryFnData>\n : // Fallback\n UseQueryResult\n\n/**\n * QueriesOptions reducer recursively unwraps function arguments to infer/enforce type param\n */\nexport type QueriesOptions<\n T extends any[],\n Result extends any[] = [],\n Depth extends ReadonlyArray<number> = [],\n> = Depth['length'] extends MAXIMUM_DEPTH\n ? UseQueryOptionsForUseQueries[]\n : T extends []\n ? []\n : T extends [infer Head]\n ? [...Result, GetOptions<Head>]\n : T extends [infer Head, ...infer Tail]\n ? QueriesOptions<[...Tail], [...Result, GetOptions<Head>], [...Depth, 1]>\n : unknown[] extends T\n ? T\n : // If T is *some* array but we couldn't assign unknown[] to it, then it must hold some known/homogenous type!\n // use this to infer the param types in the case of Array.map() argument\n T extends UseQueryOptionsForUseQueries<\n infer TQueryFnData,\n infer TError,\n infer TData,\n infer TQueryKey\n >[]\n ? UseQueryOptionsForUseQueries<TQueryFnData, TError, TData, TQueryKey>[]\n : // Fallback\n UseQueryOptionsForUseQueries[]\n\n/**\n * QueriesResults reducer recursively maps type param to results\n */\nexport type QueriesResults<\n T extends any[],\n Result extends any[] = [],\n Depth extends ReadonlyArray<number> = [],\n> = Depth['length'] extends MAXIMUM_DEPTH\n ? UseQueryResult[]\n : T extends []\n ? []\n : T extends [infer Head]\n ? [...Result, GetResults<Head>]\n : T extends [infer Head, ...infer Tail]\n ? QueriesResults<[...Tail], [...Result, GetResults<Head>], [...Depth, 1]>\n : T extends UseQueryOptionsForUseQueries<\n infer TQueryFnData,\n infer TError,\n infer TData,\n any\n >[]\n ? // Dynamic-size (homogenous) UseQueryOptions array: map directly to array of results\n UseQueryResult<\n unknown extends TData ? TQueryFnData : TData,\n unknown extends TError ? DefaultError : TError\n >[]\n : // Fallback\n UseQueryResult[]\n\nexport function useQueries<T extends any[]>({\n queries,\n queryClient,\n}: {\n queries: readonly [...QueriesOptions<T>]\n queryClient?: QueryClient\n}): QueriesResults<T> {\n const client = useQueryClient(queryClient)\n const isRestoring = useIsRestoring()\n\n const defaultedQueries = React.useMemo(\n () =>\n queries.map((options) => {\n const defaultedOptions = client.defaultQueryOptions(options)\n\n // Make sure the results are already in fetching state before subscribing or updating options\n defaultedOptions._optimisticResults = isRestoring\n ? 'isRestoring'\n : 'optimistic'\n\n return defaultedOptions\n }),\n [queries, client, isRestoring],\n )\n\n const [observer] = React.useState(\n () => new QueriesObserver(client, defaultedQueries),\n )\n\n const optimisticResult = observer.getOptimisticResult(defaultedQueries)\n\n React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) =>\n isRestoring\n ? () => undefined\n : observer.subscribe(notifyManager.batchCalls(onStoreChange)),\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.setQueries(defaultedQueries, { listeners: false })\n }, [defaultedQueries, observer])\n\n const errorResetBoundary = useQueryErrorResetBoundary()\n\n defaultedQueries.forEach((query) => {\n ensurePreventErrorBoundaryRetry(query, errorResetBoundary)\n ensureStaleTime(query)\n })\n\n useClearResetErrorBoundary(errorResetBoundary)\n\n const shouldAtLeastOneSuspend = optimisticResult.some((result, index) =>\n shouldSuspend(defaultedQueries[index], result, isRestoring),\n )\n\n const suspensePromises = shouldAtLeastOneSuspend\n ? optimisticResult.flatMap((result, index) => {\n const options = defaultedQueries[index]\n const queryObserver = observer.getObservers()[index]\n\n if (options && queryObserver) {\n if (shouldSuspend(options, result, isRestoring)) {\n return fetchOptimistic(options, queryObserver, errorResetBoundary)\n } else if (willFetch(result, isRestoring)) {\n void fetchOptimistic(options, queryObserver, errorResetBoundary)\n }\n }\n return []\n })\n : []\n\n if (suspensePromises.length > 0) {\n throw Promise.all(suspensePromises)\n }\n\n const firstSingleResultWhichShouldThrow = optimisticResult.find(\n (result, index) =>\n getHasError({\n result,\n errorResetBoundary,\n throwErrors: defaultedQueries[index]?.throwErrors ?? false,\n query: observer.getQueries()[index]!,\n }),\n )\n\n if (firstSingleResultWhichShouldThrow?.error) {\n throw firstSingleResultWhichShouldThrow.error\n }\n\n return optimisticResult as QueriesResults<T>\n}\n"],"names":["useQueries","queries","queryClient","client","useQueryClient","isRestoring","useIsRestoring","defaultedQueries","React","useMemo","map","options","defaultedOptions","defaultQueryOptions","_optimisticResults","observer","useState","QueriesObserver","optimisticResult","getOptimisticResult","useSyncExternalStore","useCallback","onStoreChange","undefined","subscribe","notifyManager","batchCalls","getCurrentResult","useEffect","setQueries","listeners","errorResetBoundary","useQueryErrorResetBoundary","forEach","query","ensurePreventErrorBoundaryRetry","ensureStaleTime","useClearResetErrorBoundary","shouldAtLeastOneSuspend","some","result","index","shouldSuspend","suspensePromises","flatMap","queryObserver","getObservers","fetchOptimistic","willFetch","length","Promise","all","firstSingleResultWhichShouldThrow","find","getHasError","throwErrors","getQueries","error"],"mappings":"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"}
1
+ {"version":3,"file":"useQueries.mjs","sources":["../../src/useQueries.ts"],"sourcesContent":["'use client'\nimport * as React from 'react'\n\nimport type {\n QueryKey,\n QueryFunction,\n QueriesPlaceholderDataFunction,\n QueryClient,\n DefaultError,\n} from '@tanstack/query-core'\nimport { notifyManager, QueriesObserver } from '@tanstack/query-core'\nimport { useQueryClient } from './QueryClientProvider'\nimport type { UseQueryOptions, UseQueryResult } from './types'\nimport { useIsRestoring } from './isRestoring'\nimport { useQueryErrorResetBoundary } from './QueryErrorResetBoundary'\nimport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary,\n} from './errorBoundaryUtils'\nimport {\n ensureStaleTime,\n shouldSuspend,\n fetchOptimistic,\n willFetch,\n} from './suspense'\n\n// This defines the `UseQueryOptions` that are accepted in `QueriesOptions` & `GetOptions`.\n// `placeholderData` function does not have a parameter\ntype UseQueryOptionsForUseQueries<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = Omit<\n UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n 'placeholderData'\n> & {\n placeholderData?: TQueryFnData | QueriesPlaceholderDataFunction<TQueryFnData>\n}\n\n// Avoid TS depth-limit error in case of large array literal\ntype MAXIMUM_DEPTH = 20\n\ntype GetOptions<T> =\n // Part 1: responsible for applying explicit type parameter to function arguments, if object { queryFnData: TQueryFnData, error: TError, data: TData }\n T extends {\n queryFnData: infer TQueryFnData\n error?: infer TError\n data: infer TData\n }\n ? UseQueryOptionsForUseQueries<TQueryFnData, TError, TData>\n : T extends { queryFnData: infer TQueryFnData; error?: infer TError }\n ? UseQueryOptionsForUseQueries<TQueryFnData, TError>\n : T extends { data: infer TData; error?: infer TError }\n ? UseQueryOptionsForUseQueries<unknown, TError, TData>\n : // Part 2: responsible for applying explicit type parameter to function arguments, if tuple [TQueryFnData, TError, TData]\n T extends [infer TQueryFnData, infer TError, infer TData]\n ? UseQueryOptionsForUseQueries<TQueryFnData, TError, TData>\n : T extends [infer TQueryFnData, infer TError]\n ? UseQueryOptionsForUseQueries<TQueryFnData, TError>\n : T extends [infer TQueryFnData]\n ? UseQueryOptionsForUseQueries<TQueryFnData>\n : // Part 3: responsible for inferring and enforcing type if no explicit parameter was provided\n T extends {\n queryFn?: QueryFunction<infer TQueryFnData, infer TQueryKey>\n select: (data: any) => infer TData\n }\n ? UseQueryOptionsForUseQueries<TQueryFnData, Error, TData, TQueryKey>\n : T extends { queryFn?: QueryFunction<infer TQueryFnData, infer TQueryKey> }\n ? UseQueryOptionsForUseQueries<TQueryFnData, Error, TQueryFnData, TQueryKey>\n : // Fallback\n UseQueryOptionsForUseQueries\n\ntype GetResults<T> =\n // Part 1: responsible for mapping explicit type parameter to function result, if object\n T extends { queryFnData: any; error?: infer TError; data: infer TData }\n ? UseQueryResult<TData, TError>\n : T extends { queryFnData: infer TQueryFnData; error?: infer TError }\n ? UseQueryResult<TQueryFnData, TError>\n : T extends { data: infer TData; error?: infer TError }\n ? UseQueryResult<TData, TError>\n : // Part 2: responsible for mapping explicit type parameter to function result, if tuple\n T extends [any, infer TError, infer TData]\n ? UseQueryResult<TData, TError>\n : T extends [infer TQueryFnData, infer TError]\n ? UseQueryResult<TQueryFnData, TError>\n : T extends [infer TQueryFnData]\n ? UseQueryResult<TQueryFnData>\n : // Part 3: responsible for mapping inferred type to results, if no explicit parameter was provided\n T extends {\n queryFn?: QueryFunction<unknown, any>\n select: (data: any) => infer TData\n }\n ? UseQueryResult<TData>\n : T extends { queryFn?: QueryFunction<infer TQueryFnData, any> }\n ? UseQueryResult<TQueryFnData>\n : // Fallback\n UseQueryResult\n\n/**\n * QueriesOptions reducer recursively unwraps function arguments to infer/enforce type param\n */\nexport type QueriesOptions<\n T extends any[],\n Result extends any[] = [],\n Depth extends ReadonlyArray<number> = [],\n> = Depth['length'] extends MAXIMUM_DEPTH\n ? UseQueryOptionsForUseQueries[]\n : T extends []\n ? []\n : T extends [infer Head]\n ? [...Result, GetOptions<Head>]\n : T extends [infer Head, ...infer Tail]\n ? QueriesOptions<[...Tail], [...Result, GetOptions<Head>], [...Depth, 1]>\n : unknown[] extends T\n ? T\n : // If T is *some* array but we couldn't assign unknown[] to it, then it must hold some known/homogenous type!\n // use this to infer the param types in the case of Array.map() argument\n T extends UseQueryOptionsForUseQueries<\n infer TQueryFnData,\n infer TError,\n infer TData,\n infer TQueryKey\n >[]\n ? UseQueryOptionsForUseQueries<TQueryFnData, TError, TData, TQueryKey>[]\n : // Fallback\n UseQueryOptionsForUseQueries[]\n\n/**\n * QueriesResults reducer recursively maps type param to results\n */\nexport type QueriesResults<\n T extends any[],\n Result extends any[] = [],\n Depth extends ReadonlyArray<number> = [],\n> = Depth['length'] extends MAXIMUM_DEPTH\n ? UseQueryResult[]\n : T extends []\n ? []\n : T extends [infer Head]\n ? [...Result, GetResults<Head>]\n : T extends [infer Head, ...infer Tail]\n ? QueriesResults<[...Tail], [...Result, GetResults<Head>], [...Depth, 1]>\n : T extends UseQueryOptionsForUseQueries<\n infer TQueryFnData,\n infer TError,\n infer TData,\n any\n >[]\n ? // Dynamic-size (homogenous) UseQueryOptions array: map directly to array of results\n UseQueryResult<\n unknown extends TData ? TQueryFnData : TData,\n unknown extends TError ? DefaultError : TError\n >[]\n : // Fallback\n UseQueryResult[]\n\nexport function useQueries<T extends any[]>(\n {\n queries,\n }: {\n queries: readonly [...QueriesOptions<T>]\n },\n queryClient?: QueryClient,\n): QueriesResults<T> {\n const client = useQueryClient(queryClient)\n const isRestoring = useIsRestoring()\n const errorResetBoundary = useQueryErrorResetBoundary()\n\n const defaultedQueries = React.useMemo(\n () =>\n queries.map((options) => {\n const defaultedOptions = client.defaultQueryOptions(options)\n\n // Make sure the results are already in fetching state before subscribing or updating options\n defaultedOptions._optimisticResults = isRestoring\n ? 'isRestoring'\n : 'optimistic'\n\n return defaultedOptions\n }),\n [queries, client, isRestoring],\n )\n\n defaultedQueries.forEach((query) => {\n ensureStaleTime(query)\n ensurePreventErrorBoundaryRetry(query, errorResetBoundary)\n })\n\n useClearResetErrorBoundary(errorResetBoundary)\n\n const [observer] = React.useState(\n () => new QueriesObserver(client, defaultedQueries),\n )\n\n const optimisticResult = observer.getOptimisticResult(defaultedQueries)\n\n React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) =>\n isRestoring\n ? () => undefined\n : observer.subscribe(notifyManager.batchCalls(onStoreChange)),\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.setQueries(defaultedQueries, { listeners: false })\n }, [defaultedQueries, observer])\n\n const shouldAtLeastOneSuspend = optimisticResult.some((result, index) =>\n shouldSuspend(defaultedQueries[index], result, isRestoring),\n )\n\n const suspensePromises = shouldAtLeastOneSuspend\n ? optimisticResult.flatMap((result, index) => {\n const options = defaultedQueries[index]\n const queryObserver = observer.getObservers()[index]\n\n if (options && queryObserver) {\n if (shouldSuspend(options, result, isRestoring)) {\n return fetchOptimistic(options, queryObserver, errorResetBoundary)\n } else if (willFetch(result, isRestoring)) {\n void fetchOptimistic(options, queryObserver, errorResetBoundary)\n }\n }\n return []\n })\n : []\n\n if (suspensePromises.length > 0) {\n throw Promise.all(suspensePromises)\n }\n const observerQueries = observer.getQueries()\n const firstSingleResultWhichShouldThrow = optimisticResult.find(\n (result, index) =>\n getHasError({\n result,\n errorResetBoundary,\n throwErrors: defaultedQueries[index]?.throwErrors ?? false,\n query: observerQueries[index]!,\n }),\n )\n\n if (firstSingleResultWhichShouldThrow?.error) {\n throw firstSingleResultWhichShouldThrow.error\n }\n\n return optimisticResult as QueriesResults<T>\n}\n"],"names":["queries","defaultedOptions","defaultedQueries","ensurePreventErrorBoundaryRetry","observer","listeners"],"mappings":";;;;;;;;;AA2BA;AACA;;AAkIO;AAEHA;AAGF;AAGA;;;AAIA;AAGM;;AAEA;AACAC;AAIA;;AAKNC;;AAEEC;AACF;;AAIA;AAIA;;;AAeE;AACA;AACAC;AAAwCC;AAAiB;AAC3D;;AAMA;AAEM;;;;AAKI;;AAEA;AACF;AACF;AACA;;AAIN;AACE;AACF;AACA;AACA;;;;;AAOI;;;AAKJ;AAEA;AACF;;"}
@@ -1,3 +1,4 @@
1
+ 'use client';
1
2
  import { QueryObserver } from '@tanstack/query-core';
2
3
  import { useBaseQuery } from './useBaseQuery.esm.js';
3
4
 
@@ -1 +1 @@
1
- {"version":3,"file":"useQuery.esm.js","sources":["../../src/useQuery.ts"],"sourcesContent":["import type { QueryClient, QueryKey, DefaultError } from '@tanstack/query-core'\nimport { QueryObserver } from '@tanstack/query-core'\nimport type {\n DefinedUseQueryResult,\n UseQueryOptions,\n UseQueryResult,\n} from './types'\nimport { useBaseQuery } from './useBaseQuery'\n\n// HOOK\ntype UndefinedInitialDataOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = UseQueryOptions<TQueryFnData, TError, TData, TQueryKey> & {\n initialData?: undefined\n}\n\ntype DefinedInitialDataOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = UseQueryOptions<TQueryFnData, TError, TData, TQueryKey> & {\n initialData: TQueryFnData | (() => TQueryFnData)\n}\n\nexport function useQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n): UseQueryResult<TData, TError>\n\nexport function useQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n): DefinedUseQueryResult<TData, TError>\n\nexport function useQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n) {\n return useBaseQuery(options, QueryObserver, queryClient)\n}\n"],"names":["useQuery","options","queryClient","useBaseQuery","QueryObserver"],"mappings":";;;AASA;;AAuCO,SAASA,QAAQ,CAMtBC,OAAgE,EAChEC,WAAyB,EACzB;AACA,EAAA,OAAOC,YAAY,CAACF,OAAO,EAAEG,aAAa,EAAEF,WAAW,CAAC,CAAA;AAC1D;;;;"}
1
+ {"version":3,"file":"useQuery.esm.js","sources":["../../src/useQuery.ts"],"sourcesContent":["'use client'\nimport type { QueryClient, QueryKey, DefaultError } from '@tanstack/query-core'\nimport { QueryObserver } from '@tanstack/query-core'\nimport type {\n DefinedUseQueryResult,\n UseQueryOptions,\n UseQueryResult,\n} from './types'\nimport { useBaseQuery } from './useBaseQuery'\n\n// HOOK\ntype UndefinedInitialDataOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = UseQueryOptions<TQueryFnData, TError, TData, TQueryKey> & {\n initialData?: undefined\n}\n\ntype DefinedInitialDataOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = UseQueryOptions<TQueryFnData, TError, TData, TQueryKey> & {\n initialData: TQueryFnData | (() => TQueryFnData)\n}\n\nexport function useQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n): UseQueryResult<TData, TError>\n\nexport function useQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n): DefinedUseQueryResult<TData, TError>\n\nexport function useQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n) {\n return useBaseQuery(options, QueryObserver, queryClient)\n}\n"],"names":[],"mappings":";;;;AAUA;;AAuCO;AASL;AACF;;"}
@@ -1,3 +1,4 @@
1
+ 'use client';
1
2
  'use strict';
2
3
 
3
4
  var queryCore = require('@tanstack/query-core');
@@ -1 +1 @@
1
- {"version":3,"file":"useQuery.js","sources":["../../src/useQuery.ts"],"sourcesContent":["import type { QueryClient, QueryKey, DefaultError } from '@tanstack/query-core'\nimport { QueryObserver } from '@tanstack/query-core'\nimport type {\n DefinedUseQueryResult,\n UseQueryOptions,\n UseQueryResult,\n} from './types'\nimport { useBaseQuery } from './useBaseQuery'\n\n// HOOK\ntype UndefinedInitialDataOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = UseQueryOptions<TQueryFnData, TError, TData, TQueryKey> & {\n initialData?: undefined\n}\n\ntype DefinedInitialDataOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = UseQueryOptions<TQueryFnData, TError, TData, TQueryKey> & {\n initialData: TQueryFnData | (() => TQueryFnData)\n}\n\nexport function useQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n): UseQueryResult<TData, TError>\n\nexport function useQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n): DefinedUseQueryResult<TData, TError>\n\nexport function useQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n) {\n return useBaseQuery(options, QueryObserver, queryClient)\n}\n"],"names":["useQuery","options","queryClient","useBaseQuery","QueryObserver"],"mappings":";;;;;AASA;;AAuCO,SAASA,QAAQ,CAMtBC,OAAgE,EAChEC,WAAyB,EACzB;AACA,EAAA,OAAOC,yBAAY,CAACF,OAAO,EAAEG,uBAAa,EAAEF,WAAW,CAAC,CAAA;AAC1D;;;;"}
1
+ {"version":3,"file":"useQuery.js","sources":["../../src/useQuery.ts"],"sourcesContent":["'use client'\nimport type { QueryClient, QueryKey, DefaultError } from '@tanstack/query-core'\nimport { QueryObserver } from '@tanstack/query-core'\nimport type {\n DefinedUseQueryResult,\n UseQueryOptions,\n UseQueryResult,\n} from './types'\nimport { useBaseQuery } from './useBaseQuery'\n\n// HOOK\ntype UndefinedInitialDataOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = UseQueryOptions<TQueryFnData, TError, TData, TQueryKey> & {\n initialData?: undefined\n}\n\ntype DefinedInitialDataOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = UseQueryOptions<TQueryFnData, TError, TData, TQueryKey> & {\n initialData: TQueryFnData | (() => TQueryFnData)\n}\n\nexport function useQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n): UseQueryResult<TData, TError>\n\nexport function useQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n): DefinedUseQueryResult<TData, TError>\n\nexport function useQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n) {\n return useBaseQuery(options, QueryObserver, queryClient)\n}\n"],"names":[],"mappings":";;;;;;AAUA;;AAuCO;AASL;AACF;;"}
@@ -1,3 +1,4 @@
1
+ 'use client';
1
2
  import { QueryObserver } from '@tanstack/query-core';
2
3
  import { useBaseQuery } from './useBaseQuery.mjs';
3
4
 
@@ -1 +1 @@
1
- {"version":3,"file":"useQuery.mjs","sources":["../../src/useQuery.ts"],"sourcesContent":["import type { QueryClient, QueryKey, DefaultError } from '@tanstack/query-core'\nimport { QueryObserver } from '@tanstack/query-core'\nimport type {\n DefinedUseQueryResult,\n UseQueryOptions,\n UseQueryResult,\n} from './types'\nimport { useBaseQuery } from './useBaseQuery'\n\n// HOOK\ntype UndefinedInitialDataOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = UseQueryOptions<TQueryFnData, TError, TData, TQueryKey> & {\n initialData?: undefined\n}\n\ntype DefinedInitialDataOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = UseQueryOptions<TQueryFnData, TError, TData, TQueryKey> & {\n initialData: TQueryFnData | (() => TQueryFnData)\n}\n\nexport function useQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n): UseQueryResult<TData, TError>\n\nexport function useQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n): DefinedUseQueryResult<TData, TError>\n\nexport function useQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n) {\n return useBaseQuery(options, QueryObserver, queryClient)\n}\n"],"names":["useQuery","options","queryClient","useBaseQuery","QueryObserver"],"mappings":";;;AASA;;AAuCO,SAASA,QAAQ,CAMtBC,OAAgE,EAChEC,WAAyB,EACzB;AACA,EAAA,OAAOC,YAAY,CAACF,OAAO,EAAEG,aAAa,EAAEF,WAAW,CAAC,CAAA;AAC1D;;;;"}
1
+ {"version":3,"file":"useQuery.mjs","sources":["../../src/useQuery.ts"],"sourcesContent":["'use client'\nimport type { QueryClient, QueryKey, DefaultError } from '@tanstack/query-core'\nimport { QueryObserver } from '@tanstack/query-core'\nimport type {\n DefinedUseQueryResult,\n UseQueryOptions,\n UseQueryResult,\n} from './types'\nimport { useBaseQuery } from './useBaseQuery'\n\n// HOOK\ntype UndefinedInitialDataOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = UseQueryOptions<TQueryFnData, TError, TData, TQueryKey> & {\n initialData?: undefined\n}\n\ntype DefinedInitialDataOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = UseQueryOptions<TQueryFnData, TError, TData, TQueryKey> & {\n initialData: TQueryFnData | (() => TQueryFnData)\n}\n\nexport function useQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n): UseQueryResult<TData, TError>\n\nexport function useQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n): DefinedUseQueryResult<TData, TError>\n\nexport function useQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n queryClient?: QueryClient,\n) {\n return useBaseQuery(options, QueryObserver, queryClient)\n}\n"],"names":[],"mappings":";;;;AAUA;;AAuCO;AASL;AACF;;"}
@@ -1043,7 +1043,7 @@
1043
1043
  this.state = reducer(this.state);
1044
1044
  notifyManager.batch(() => {
1045
1045
  this.#observers.forEach(observer => {
1046
- observer.onQueryUpdate(action);
1046
+ observer.onQueryUpdate();
1047
1047
  });
1048
1048
  this.#cache.notify({
1049
1049
  query: this,
@@ -1135,10 +1135,11 @@
1135
1135
  return [...this.#queries.values()];
1136
1136
  }
1137
1137
  find(filters) {
1138
- if (typeof filters.exact === 'undefined') {
1139
- filters.exact = true;
1140
- }
1141
- return this.getAll().find(query => matchQuery(filters, query));
1138
+ const defaultedFilters = {
1139
+ exact: true,
1140
+ ...filters
1141
+ };
1142
+ return this.getAll().find(query => matchQuery(defaultedFilters, query));
1142
1143
  }
1143
1144
  findAll(filters = {}) {
1144
1145
  const queries = this.getAll();
@@ -1173,18 +1174,26 @@
1173
1174
 
1174
1175
  class Mutation extends Removable {
1175
1176
  #observers;
1177
+ #defaultOptions;
1176
1178
  #mutationCache;
1177
1179
  #retryer;
1178
1180
  constructor(config) {
1179
1181
  super();
1180
- this.options = config.options;
1181
1182
  this.mutationId = config.mutationId;
1183
+ this.#defaultOptions = config.defaultOptions;
1182
1184
  this.#mutationCache = config.mutationCache;
1183
1185
  this.#observers = [];
1184
1186
  this.state = config.state || getDefaultState();
1185
- this.updateGcTime(this.options.gcTime);
1187
+ this.setOptions(config.options);
1186
1188
  this.scheduleGc();
1187
1189
  }
1190
+ setOptions(options) {
1191
+ this.options = {
1192
+ ...this.#defaultOptions,
1193
+ ...options
1194
+ };
1195
+ this.updateGcTime(this.options.gcTime);
1196
+ }
1188
1197
  get meta() {
1189
1198
  return this.options.meta;
1190
1199
  }
@@ -1436,10 +1445,11 @@
1436
1445
  return this.#mutations;
1437
1446
  }
1438
1447
  find(filters) {
1439
- if (typeof filters.exact === 'undefined') {
1440
- filters.exact = true;
1441
- }
1442
- return this.#mutations.find(mutation => matchMutation(filters, mutation));
1448
+ const defaultedFilters = {
1449
+ exact: true,
1450
+ ...filters
1451
+ };
1452
+ return this.#mutations.find(mutation => matchMutation(defaultedFilters, mutation));
1443
1453
  }
1444
1454
  findAll(filters = {}) {
1445
1455
  return this.#mutations.filter(mutation => matchMutation(filters, mutation));
@@ -1465,12 +1475,15 @@
1465
1475
  function infiniteQueryBehavior() {
1466
1476
  return {
1467
1477
  onFetch: context => {
1468
- context.fetchFn = () => {
1478
+ context.fetchFn = async () => {
1469
1479
  const options = context.options;
1470
1480
  const direction = context.fetchOptions?.meta?.fetchMore?.direction;
1471
1481
  const oldPages = context.state.data?.pages || [];
1472
1482
  const oldPageParams = context.state.data?.pageParams || [];
1473
- let newPageParams = oldPageParams;
1483
+ const empty = {
1484
+ pages: [],
1485
+ pageParams: []
1486
+ };
1474
1487
  let cancelled = false;
1475
1488
  const addSignalProperty = object => {
1476
1489
  Object.defineProperty(object, 'signal', {
@@ -1490,95 +1503,95 @@
1490
1503
 
1491
1504
  // Get query function
1492
1505
  const queryFn = context.options.queryFn || (() => Promise.reject(new Error('Missing queryFn')));
1493
- const buildNewPages = (pages, param, page, previous) => {
1494
- const {
1495
- maxPages
1496
- } = context.options;
1497
- if (previous) {
1498
- newPageParams = addToStart(newPageParams, param, maxPages);
1499
- return addToStart(pages, page, maxPages);
1500
- }
1501
- newPageParams = addToEnd(newPageParams, param, maxPages);
1502
- return addToEnd(pages, page, maxPages);
1503
- };
1504
1506
 
1505
1507
  // Create function to fetch a page
1506
- const fetchPage = (pages, param, previous) => {
1508
+ const fetchPage = async (data, param, previous) => {
1507
1509
  if (cancelled) {
1508
1510
  return Promise.reject();
1509
1511
  }
1510
- if (typeof param === 'undefined' && pages.length) {
1511
- return Promise.resolve(pages);
1512
+ if (typeof param === 'undefined' && data.pages.length) {
1513
+ return Promise.resolve(data);
1512
1514
  }
1513
1515
  const queryFnContext = {
1514
1516
  queryKey: context.queryKey,
1515
1517
  pageParam: param,
1518
+ direction: previous ? 'backward' : 'forward',
1516
1519
  meta: context.options.meta
1517
1520
  };
1518
1521
  addSignalProperty(queryFnContext);
1519
- const queryFnResult = queryFn(queryFnContext);
1520
- const promise = Promise.resolve(queryFnResult).then(page => buildNewPages(pages, param, page, previous));
1521
- return promise;
1522
+ const page = await queryFn(queryFnContext);
1523
+ const {
1524
+ maxPages
1525
+ } = context.options;
1526
+ const addTo = previous ? addToStart : addToEnd;
1527
+ return {
1528
+ pages: addTo(data.pages, page, maxPages),
1529
+ pageParams: addTo(data.pageParams, param, maxPages)
1530
+ };
1522
1531
  };
1523
- let promise;
1532
+ let result;
1524
1533
 
1525
1534
  // Fetch first page?
1526
1535
  if (!oldPages.length) {
1527
- promise = fetchPage([], options.defaultPageParam);
1536
+ result = await fetchPage(empty, options.defaultPageParam);
1528
1537
  }
1529
1538
 
1530
1539
  // fetch next / previous page?
1531
1540
  else if (direction) {
1532
1541
  const previous = direction === 'backward';
1533
- const param = previous ? getPreviousPageParam(options, oldPages) : getNextPageParam(options, oldPages);
1534
- promise = fetchPage(oldPages, param, previous);
1542
+ const pageParamFn = previous ? getPreviousPageParam : getNextPageParam;
1543
+ const oldData = {
1544
+ pages: oldPages,
1545
+ pageParams: oldPageParams
1546
+ };
1547
+ const param = pageParamFn(options, oldData);
1548
+ result = await fetchPage(oldData, param, previous);
1535
1549
  }
1536
1550
 
1537
1551
  // Refetch pages
1538
1552
  else {
1539
- newPageParams = [];
1540
-
1541
1553
  // Fetch first page
1542
- promise = fetchPage([], oldPageParams[0]);
1554
+ result = await fetchPage(empty, oldPageParams[0]);
1543
1555
 
1544
1556
  // Fetch remaining pages
1545
1557
  for (let i = 1; i < oldPages.length; i++) {
1546
- promise = promise.then(pages => {
1547
- const param = getNextPageParam(options, pages);
1548
- return fetchPage(pages, param);
1549
- });
1558
+ const param = getNextPageParam(options, result);
1559
+ result = await fetchPage(result, param);
1550
1560
  }
1551
1561
  }
1552
- const finalPromise = promise.then(pages => ({
1553
- pages,
1554
- pageParams: newPageParams
1555
- }));
1556
- return finalPromise;
1562
+ return result;
1557
1563
  };
1558
1564
  }
1559
1565
  };
1560
1566
  }
1561
- function getNextPageParam(options, pages) {
1562
- return options.getNextPageParam(pages[pages.length - 1], pages);
1567
+ function getNextPageParam(options, {
1568
+ pages,
1569
+ pageParams
1570
+ }) {
1571
+ const lastIndex = pages.length - 1;
1572
+ return options.getNextPageParam(pages[lastIndex], pages, pageParams[lastIndex], pageParams);
1563
1573
  }
1564
- function getPreviousPageParam(options, pages) {
1565
- return options.getPreviousPageParam?.(pages[0], pages);
1574
+ function getPreviousPageParam(options, {
1575
+ pages,
1576
+ pageParams
1577
+ }) {
1578
+ return options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams);
1566
1579
  }
1567
1580
 
1568
1581
  /**
1569
1582
  * Checks if there is a next page.
1570
1583
  */
1571
- function hasNextPage(options, pages) {
1572
- if (!pages) return false;
1573
- return typeof getNextPageParam(options, pages) !== 'undefined';
1584
+ function hasNextPage(options, data) {
1585
+ if (!data) return false;
1586
+ return typeof getNextPageParam(options, data) !== 'undefined';
1574
1587
  }
1575
1588
 
1576
1589
  /**
1577
1590
  * Checks if there is a previous page.
1578
1591
  */
1579
- function hasPreviousPage(options, pages) {
1580
- if (!pages || !options.getPreviousPageParam) return false;
1581
- return typeof getPreviousPageParam(options, pages) !== 'undefined';
1592
+ function hasPreviousPage(options, data) {
1593
+ if (!data || !options.getPreviousPageParam) return false;
1594
+ return typeof getPreviousPageParam(options, data) !== 'undefined';
1582
1595
  }
1583
1596
 
1584
1597
  // CLASS
@@ -1703,10 +1716,11 @@
1703
1716
  });
1704
1717
  }
1705
1718
  cancelQueries(filters = {}, cancelOptions = {}) {
1706
- if (typeof cancelOptions.revert === 'undefined') {
1707
- cancelOptions.revert = true;
1708
- }
1709
- const promises = notifyManager.batch(() => this.#queryCache.findAll(filters).map(query => query.cancel(cancelOptions)));
1719
+ const defaultedCancelOptions = {
1720
+ revert: true,
1721
+ ...cancelOptions
1722
+ };
1723
+ const promises = notifyManager.batch(() => this.#queryCache.findAll(filters).map(query => query.cancel(defaultedCancelOptions)));
1710
1724
  return Promise.all(promises).then(noop$1).catch(noop$1);
1711
1725
  }
1712
1726
  invalidateQueries(filters = {}, options = {}) {
@@ -1855,10 +1869,12 @@
1855
1869
  #currentResult = undefined;
1856
1870
  #currentResultState;
1857
1871
  #currentResultOptions;
1858
- #previousQueryResult;
1859
1872
  #selectError;
1860
1873
  #selectFn;
1861
1874
  #selectResult;
1875
+ // This property keeps track of the last defined query data.
1876
+ // It will be used to pass the previous data to the placeholder function between renders.
1877
+ #lastDefinedQueryData;
1862
1878
  #staleTimeoutId;
1863
1879
  #refetchIntervalId;
1864
1880
  #currentRefetchInterval;
@@ -2053,7 +2069,6 @@
2053
2069
  const prevResultOptions = this.#currentResultOptions;
2054
2070
  const queryChange = query !== prevQuery;
2055
2071
  const queryInitialState = queryChange ? query.state : this.#currentQueryInitialState;
2056
- const prevQueryResult = queryChange ? this.#currentResult : this.#previousQueryResult;
2057
2072
  const {
2058
2073
  state
2059
2074
  } = query;
@@ -2112,7 +2127,7 @@
2112
2127
  if (prevResult?.isPlaceholderData && options.placeholderData === prevResultOptions?.placeholderData) {
2113
2128
  placeholderData = prevResult.data;
2114
2129
  } else {
2115
- placeholderData = typeof options.placeholderData === 'function' ? options.placeholderData(prevQueryResult?.data) : options.placeholderData;
2130
+ placeholderData = typeof options.placeholderData === 'function' ? options.placeholderData(this.#lastDefinedQueryData) : options.placeholderData;
2116
2131
  if (options.select && typeof placeholderData !== 'undefined') {
2117
2132
  try {
2118
2133
  placeholderData = options.select(placeholderData);
@@ -2176,6 +2191,9 @@
2176
2191
  if (shallowEqualObjects(nextResult, prevResult)) {
2177
2192
  return;
2178
2193
  }
2194
+ if (this.#currentResultState.data !== undefined) {
2195
+ this.#lastDefinedQueryData = this.#currentResultState.data;
2196
+ }
2179
2197
  this.#currentResult = nextResult;
2180
2198
 
2181
2199
  // Determine which callbacks to trigger
@@ -2216,36 +2234,20 @@
2216
2234
  const prevQuery = this.#currentQuery;
2217
2235
  this.#currentQuery = query;
2218
2236
  this.#currentQueryInitialState = query.state;
2219
- this.#previousQueryResult = this.#currentResult;
2220
2237
  if (this.hasListeners()) {
2221
2238
  prevQuery?.removeObserver(this);
2222
2239
  query.addObserver(this);
2223
2240
  }
2224
2241
  }
2225
- onQueryUpdate(action) {
2226
- const notifyOptions = {};
2227
- if (action.type === 'success') {
2228
- notifyOptions.onSuccess = !action.manual;
2229
- } else if (action.type === 'error' && !isCancelledError(action.error)) {
2230
- notifyOptions.onError = true;
2231
- }
2232
- this.#updateResult(notifyOptions);
2242
+ onQueryUpdate() {
2243
+ this.#updateResult();
2233
2244
  if (this.hasListeners()) {
2234
2245
  this.#updateTimers();
2235
2246
  }
2236
2247
  }
2237
2248
  #notify(notifyOptions) {
2238
2249
  notifyManager.batch(() => {
2239
- // First trigger the configuration callbacks
2240
- if (notifyOptions.onSuccess) {
2241
- this.options.onSuccess?.(this.#currentResult.data);
2242
- this.options.onSettled?.(this.#currentResult.data, null);
2243
- } else if (notifyOptions.onError) {
2244
- this.options.onError?.(this.#currentResult.error);
2245
- this.options.onSettled?.(undefined, this.#currentResult.error);
2246
- }
2247
-
2248
- // Then trigger the listeners
2250
+ // First, trigger the listeners
2249
2251
  if (notifyOptions.listeners) {
2250
2252
  this.listeners.forEach(listener => {
2251
2253
  listener(this.#currentResult);
@@ -2367,9 +2369,10 @@
2367
2369
  }
2368
2370
  #findMatchingObservers(queries) {
2369
2371
  const prevObservers = this.#observers;
2372
+ const prevObserversMap = new Map(prevObservers.map(observer => [observer.options.queryHash, observer]));
2370
2373
  const defaultedQueryOptions = queries.map(options => this.#client.defaultQueryOptions(options));
2371
2374
  const matchingObservers = defaultedQueryOptions.flatMap(defaultedOptions => {
2372
- const match = prevObservers.find(observer => observer.options.queryHash === defaultedOptions.queryHash);
2375
+ const match = prevObserversMap.get(defaultedOptions.queryHash);
2373
2376
  if (match != null) {
2374
2377
  return [{
2375
2378
  defaultedQueryOptions: defaultedOptions,
@@ -2378,8 +2381,8 @@
2378
2381
  }
2379
2382
  return [];
2380
2383
  });
2381
- const matchedQueryHashes = matchingObservers.map(match => match.defaultedQueryOptions.queryHash);
2382
- const unmatchedQueries = defaultedQueryOptions.filter(defaultedOptions => !matchedQueryHashes.includes(defaultedOptions.queryHash));
2384
+ const matchedQueryHashes = new Set(matchingObservers.map(match => match.defaultedQueryOptions.queryHash));
2385
+ const unmatchedQueries = defaultedQueryOptions.filter(defaultedOptions => !matchedQueryHashes.has(defaultedOptions.queryHash));
2383
2386
  const getObserver = options => {
2384
2387
  const defaultedOptions = this.#client.defaultQueryOptions(options);
2385
2388
  const currentObserver = this.#observers.find(o => o.options.queryHash === defaultedOptions.queryHash);
@@ -2436,7 +2439,7 @@
2436
2439
  options.behavior = infiniteQueryBehavior();
2437
2440
  return super.getOptimisticResult(options);
2438
2441
  }
2439
- fetchNextPage(options = {}) {
2442
+ fetchNextPage(options) {
2440
2443
  return this.fetch({
2441
2444
  ...options,
2442
2445
  meta: {
@@ -2446,9 +2449,7 @@
2446
2449
  }
2447
2450
  });
2448
2451
  }
2449
- fetchPreviousPage({
2450
- ...options
2451
- } = {}) {
2452
+ fetchPreviousPage(options) {
2452
2453
  return this.fetch({
2453
2454
  ...options,
2454
2455
  meta: {
@@ -2473,8 +2474,8 @@
2473
2474
  ...result,
2474
2475
  fetchNextPage: this.fetchNextPage,
2475
2476
  fetchPreviousPage: this.fetchPreviousPage,
2476
- hasNextPage: hasNextPage(options, state.data?.pages),
2477
- hasPreviousPage: hasPreviousPage(options, state.data?.pages),
2477
+ hasNextPage: hasNextPage(options, state.data),
2478
+ hasPreviousPage: hasPreviousPage(options, state.data),
2478
2479
  isFetchingNextPage,
2479
2480
  isFetchingPreviousPage,
2480
2481
  isRefetching: isRefetching && !isFetchingNextPage && !isFetchingPreviousPage
@@ -2512,6 +2513,7 @@
2512
2513
  observer: this
2513
2514
  });
2514
2515
  }
2516
+ this.#currentMutation?.setOptions(this.options);
2515
2517
  }
2516
2518
  onUnsubscribe() {
2517
2519
  if (!this.listeners.length) {
@@ -2599,24 +2601,10 @@
2599
2601
  return query.state.status === 'success';
2600
2602
  }
2601
2603
  function dehydrate(client, options = {}) {
2602
- const mutations = [];
2603
- const queries = [];
2604
- if (options.dehydrateMutations !== false) {
2605
- const shouldDehydrateMutation = options.shouldDehydrateMutation || defaultShouldDehydrateMutation;
2606
- client.getMutationCache().getAll().forEach(mutation => {
2607
- if (shouldDehydrateMutation(mutation)) {
2608
- mutations.push(dehydrateMutation(mutation));
2609
- }
2610
- });
2611
- }
2612
- if (options.dehydrateQueries !== false) {
2613
- const shouldDehydrateQuery = options.shouldDehydrateQuery || defaultShouldDehydrateQuery;
2614
- client.getQueryCache().getAll().forEach(query => {
2615
- if (shouldDehydrateQuery(query)) {
2616
- queries.push(dehydrateQuery(query));
2617
- }
2618
- });
2619
- }
2604
+ const filterMutation = options.shouldDehydrateMutation ?? defaultShouldDehydrateMutation;
2605
+ const mutations = client.getMutationCache().getAll().flatMap(mutation => filterMutation(mutation) ? [dehydrateMutation(mutation)] : []);
2606
+ const filterQuery = options.shouldDehydrateQuery ?? defaultShouldDehydrateQuery;
2607
+ const queries = client.getQueryCache().getAll().flatMap(query => filterQuery(query) ? [dehydrateQuery(query)] : []);
2620
2608
  return {
2621
2609
  mutations,
2622
2610
  queries
@@ -2770,26 +2758,19 @@
2770
2758
  };
2771
2759
  const willFetch = (result, isRestoring) => result.isLoading && result.isFetching && !isRestoring;
2772
2760
  const shouldSuspend = (defaultedOptions, result, isRestoring) => defaultedOptions?.suspense && willFetch(result, isRestoring);
2773
- const fetchOptimistic = (defaultedOptions, observer, errorResetBoundary) => observer.fetchOptimistic(defaultedOptions).then(({
2774
- data
2775
- }) => {
2776
- defaultedOptions.onSuccess?.(data);
2777
- defaultedOptions.onSettled?.(data, null);
2778
- }).catch(error => {
2761
+ const fetchOptimistic = (defaultedOptions, observer, errorResetBoundary) => observer.fetchOptimistic(defaultedOptions).catch(() => {
2779
2762
  errorResetBoundary.clearReset();
2780
- defaultedOptions.onError?.(error);
2781
- defaultedOptions.onSettled?.(undefined, error);
2782
2763
  });
2783
2764
 
2784
2765
  // This defines the `UseQueryOptions` that are accepted in `QueriesOptions` & `GetOptions`.
2785
2766
  // `placeholderData` function does not have a parameter
2786
2767
 
2787
2768
  function useQueries({
2788
- queries,
2789
- queryClient
2790
- }) {
2769
+ queries
2770
+ }, queryClient) {
2791
2771
  const client = useQueryClient(queryClient);
2792
2772
  const isRestoring = useIsRestoring();
2773
+ const errorResetBoundary = useQueryErrorResetBoundary();
2793
2774
  const defaultedQueries = React__namespace.useMemo(() => queries.map(options => {
2794
2775
  const defaultedOptions = client.defaultQueryOptions(options);
2795
2776
 
@@ -2797,6 +2778,11 @@
2797
2778
  defaultedOptions._optimisticResults = isRestoring ? 'isRestoring' : 'optimistic';
2798
2779
  return defaultedOptions;
2799
2780
  }), [queries, client, isRestoring]);
2781
+ defaultedQueries.forEach(query => {
2782
+ ensureStaleTime(query);
2783
+ ensurePreventErrorBoundaryRetry(query, errorResetBoundary);
2784
+ });
2785
+ useClearResetErrorBoundary(errorResetBoundary);
2800
2786
  const [observer] = React__namespace.useState(() => new QueriesObserver(client, defaultedQueries));
2801
2787
  const optimisticResult = observer.getOptimisticResult(defaultedQueries);
2802
2788
  React__namespace.useSyncExternalStore(React__namespace.useCallback(onStoreChange => isRestoring ? () => undefined : observer.subscribe(notifyManager.batchCalls(onStoreChange)), [observer, isRestoring]), () => observer.getCurrentResult(), () => observer.getCurrentResult());
@@ -2807,12 +2793,6 @@
2807
2793
  listeners: false
2808
2794
  });
2809
2795
  }, [defaultedQueries, observer]);
2810
- const errorResetBoundary = useQueryErrorResetBoundary();
2811
- defaultedQueries.forEach(query => {
2812
- ensurePreventErrorBoundaryRetry(query, errorResetBoundary);
2813
- ensureStaleTime(query);
2814
- });
2815
- useClearResetErrorBoundary(errorResetBoundary);
2816
2796
  const shouldAtLeastOneSuspend = optimisticResult.some((result, index) => shouldSuspend(defaultedQueries[index], result, isRestoring));
2817
2797
  const suspensePromises = shouldAtLeastOneSuspend ? optimisticResult.flatMap((result, index) => {
2818
2798
  const options = defaultedQueries[index];
@@ -2829,11 +2809,12 @@
2829
2809
  if (suspensePromises.length > 0) {
2830
2810
  throw Promise.all(suspensePromises);
2831
2811
  }
2812
+ const observerQueries = observer.getQueries();
2832
2813
  const firstSingleResultWhichShouldThrow = optimisticResult.find((result, index) => getHasError({
2833
2814
  result,
2834
2815
  errorResetBoundary,
2835
2816
  throwErrors: defaultedQueries[index]?.throwErrors ?? false,
2836
- query: observer.getQueries()[index]
2817
+ query: observerQueries[index]
2837
2818
  }));
2838
2819
  if (firstSingleResultWhichShouldThrow?.error) {
2839
2820
  throw firstSingleResultWhichShouldThrow.error;
@@ -2849,17 +2830,6 @@
2849
2830
 
2850
2831
  // Make sure results are optimistically set in fetching state before subscribing or updating options
2851
2832
  defaultedOptions._optimisticResults = isRestoring ? 'isRestoring' : 'optimistic';
2852
-
2853
- // Include callbacks in batch renders
2854
- if (defaultedOptions.onError) {
2855
- defaultedOptions.onError = notifyManager.batchCalls(defaultedOptions.onError);
2856
- }
2857
- if (defaultedOptions.onSuccess) {
2858
- defaultedOptions.onSuccess = notifyManager.batchCalls(defaultedOptions.onSuccess);
2859
- }
2860
- if (defaultedOptions.onSettled) {
2861
- defaultedOptions.onSettled = notifyManager.batchCalls(defaultedOptions.onSettled);
2862
- }
2863
2833
  ensureStaleTime(defaultedOptions);
2864
2834
  ensurePreventErrorBoundaryRetry(defaultedOptions, errorResetBoundary);
2865
2835
  useClearResetErrorBoundary(errorResetBoundary);