{"version":3,"file":"useBaseQuery.mjs","sources":["../../src/useBaseQuery.ts"],"sourcesContent":["import * as React from 'react'\nimport { useSyncExternalStore } from './useSyncExternalStore'\n\nimport type { QueryKey, QueryObserver } from '@tanstack/query-core'\nimport { notifyManager } from '@tanstack/query-core'\nimport { useQueryErrorResetBoundary } from './QueryErrorResetBoundary'\nimport { useQueryClient } from './QueryClientProvider'\nimport type { UseBaseQueryOptions } from './types'\nimport { shouldThrowError } from './utils'\nimport { useIsRestoring } from './isRestoring'\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) {\n  const queryClient = useQueryClient({ context: options.context })\n  const isRestoring = useIsRestoring()\n  const errorResetBoundary = useQueryErrorResetBoundary()\n  const defaultedOptions = queryClient.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  // Include callbacks in batch renders\n  if (defaultedOptions.onError) {\n    defaultedOptions.onError = notifyManager.batchCalls(\n      defaultedOptions.onError,\n    )\n  }\n\n  if (defaultedOptions.onSuccess) {\n    defaultedOptions.onSuccess = notifyManager.batchCalls(\n      defaultedOptions.onSuccess,\n    )\n  }\n\n  if (defaultedOptions.onSettled) {\n    defaultedOptions.onSettled = notifyManager.batchCalls(\n      defaultedOptions.onSettled,\n    )\n  }\n\n  if (defaultedOptions.suspense) {\n    // Always set stale time when using suspense to prevent\n    // fetching again when directly mounting after suspending\n    if (typeof defaultedOptions.staleTime !== 'number') {\n      defaultedOptions.staleTime = 1000\n    }\n  }\n\n  if (defaultedOptions.suspense || defaultedOptions.useErrorBoundary) {\n    // Prevent retrying failed query if the error boundary has not been reset yet\n    if (!errorResetBoundary.isReset()) {\n      defaultedOptions.retryOnMount = false\n    }\n  }\n\n  const [observer] = React.useState(\n    () =>\n      new Observer<TQueryFnData, TError, TData, TQueryData, TQueryKey>(\n        queryClient,\n        defaultedOptions,\n      ),\n  )\n\n  const result = observer.getOptimisticResult(defaultedOptions)\n\n  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    errorResetBoundary.clearReset()\n  }, [errorResetBoundary])\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 (\n    defaultedOptions.suspense &&\n    result.isLoading &&\n    result.isFetching &&\n    !isRestoring\n  ) {\n    throw observer\n      .fetchOptimistic(defaultedOptions)\n      .then(({ data }) => {\n        defaultedOptions.onSuccess?.(data as TData)\n        defaultedOptions.onSettled?.(data, null)\n      })\n      .catch((error) => {\n        errorResetBoundary.clearReset()\n        defaultedOptions.onError?.(error)\n        defaultedOptions.onSettled?.(undefined, error)\n      })\n  }\n\n  // Handle error boundary\n  if (\n    result.isError &&\n    !errorResetBoundary.isReset() &&\n    !result.isFetching &&\n    shouldThrowError(defaultedOptions.useErrorBoundary, [\n      result.error,\n      observer.getCurrentQuery(),\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"],"names":["useBaseQuery","options","Observer","queryClient","useQueryClient","context","isRestoring","useIsRestoring","errorResetBoundary","useQueryErrorResetBoundary","defaultedOptions","defaultQueryOptions","_optimisticResults","onError","notifyManager","batchCalls","onSuccess","onSettled","suspense","staleTime","useErrorBoundary","isReset","retryOnMount","observer","React","useState","result","getOptimisticResult","useSyncExternalStore","useCallback","onStoreChange","undefined","subscribe","getCurrentResult","useEffect","clearReset","setOptions","listeners","isLoading","isFetching","fetchOptimistic","then","data","catch","error","isError","shouldThrowError","getCurrentQuery","notifyOnChangeProps","trackResult"],"mappings":"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"}