{"version":3,"file":"useBaseQuery.mjs","sources":["../../../src/react/useBaseQuery.ts"],"sourcesContent":["import * as React from 'react'\n\nimport { QueryClient } from '../vanilla'\nimport {\n  ObservableQueryOptions,\n  ObservableQueryResult,\n} from '../vanilla/observableQuery'\nimport { PrimitiveQuery } from '../vanilla/primitiveQuery'\nimport { GetVariablesOption } from '../vanilla/typeUtils'\nimport { useQueryClient } from './QueryClientProvider'\nimport { useQueryErrorResetBoundary } from './QueryErrorResetBoundary'\nimport {\n  ensurePreventErrorBoundaryRetry,\n  getHasError,\n  useClearResetErrorBoundary,\n} from './errorBoundaryUtils'\nimport { ensureStaleTime, fetchOptimistic, shouldSuspend } from './suspense'\n\nexport type UseBseQueryOptions<\n  TFetcherData = unknown,\n  TVars = unknown,\n  TError = Error,\n  TQueryData = TFetcherData,\n  TData = TFetcherData\n> = ObservableQueryOptions<TFetcherData, TVars, TError, TQueryData, TData> &\n  GetVariablesOption<TVars> & {\n    query: PrimitiveQuery<TFetcherData, TVars, TError, TQueryData>\n  }\n\nexport type UseBaseQueryResult<\n  TData = unknown,\n  TError = unknown\n> = ObservableQueryResult<TData, TError>\n\nexport function useBaseQuery<\n  TFetcherData = unknown,\n  TVars = unknown,\n  TError = Error,\n  TQueryData = TFetcherData,\n  TData = TQueryData\n>(\n  options: UseBseQueryOptions<TFetcherData, TVars, TError, TQueryData, TData>,\n  queryClient?: QueryClient\n) {\n  const client = useQueryClient(queryClient)\n  const errorResetBoundary = useQueryErrorResetBoundary()\n  const defaultedOptions = client.defaultQueryOptions(options)\n\n  defaultedOptions._optimisticResults = true\n\n  ensureStaleTime(defaultedOptions)\n  ensurePreventErrorBoundaryRetry(defaultedOptions, errorResetBoundary)\n\n  useClearResetErrorBoundary(errorResetBoundary)\n\n  const [obsQuery] = React.useState(() => client.watchQuery(defaultedOptions))\n\n  const result = obsQuery.getOptimisticResult(defaultedOptions)\n\n  React.useSyncExternalStore(\n    React.useCallback(\n      onStoreChange => {\n        const unsubscribe = obsQuery.subscribe(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        obsQuery.updateResult()\n\n        return unsubscribe\n      },\n      [obsQuery]\n    ),\n    () => obsQuery.getCurrentResult(),\n    () => obsQuery.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    obsQuery.setOptions(defaultedOptions, { listeners: false })\n  }, [defaultedOptions, obsQuery])\n\n  // Handle suspense\n  if (shouldSuspend(defaultedOptions, result)) {\n    throw fetchOptimistic(defaultedOptions, obsQuery, errorResetBoundary)\n  }\n\n  // Handle error boundary\n  if (\n    getHasError(\n      result,\n      errorResetBoundary,\n      obsQuery.getCurrentQueryInfo(),\n      defaultedOptions.throwOnError\n    )\n  ) {\n    throw result.error\n  }\n\n  // Handle result property usage tracking\n  return obsQuery.trackResult(result)\n}\n"],"names":["useBaseQuery","options","queryClient","client","useQueryClient","errorResetBoundary","useQueryErrorResetBoundary","defaultedOptions","defaultQueryOptions","_optimisticResults","ensureStaleTime","ensurePreventErrorBoundaryRetry","useClearResetErrorBoundary","obsQuery","React","useState","watchQuery","result","getOptimisticResult","useSyncExternalStore","useCallback","onStoreChange","unsubscribe","subscribe","updateResult","getCurrentResult","useEffect","setOptions","listeners","shouldSuspend","fetchOptimistic","getHasError","getCurrentQueryInfo","throwOnError","error","trackResult"],"mappings":";;;;;;AAkCO,SAASA,YAAYA,CAO1BC,OAA2E,EAC3EC,WAAyB,EACzB;AACA,EAAA,MAAMC,MAAM,GAAGC,cAAc,CAACF,WAAW,CAAC,CAAA;AAC1C,EAAA,MAAMG,kBAAkB,GAAGC,0BAA0B,EAAE,CAAA;AACvD,EAAA,MAAMC,gBAAgB,GAAGJ,MAAM,CAACK,mBAAmB,CAACP,OAAO,CAAC,CAAA;EAE5DM,gBAAgB,CAACE,kBAAkB,GAAG,IAAI,CAAA;EAE1CC,eAAe,CAACH,gBAAgB,CAAC,CAAA;AACjCI,EAAAA,+BAA+B,CAACJ,gBAAgB,EAAEF,kBAAkB,CAAC,CAAA;EAErEO,0BAA0B,CAACP,kBAAkB,CAAC,CAAA;AAE9C,EAAA,MAAM,CAACQ,QAAQ,CAAC,GAAGC,KAAK,CAACC,QAAQ,CAAC,MAAMZ,MAAM,CAACa,UAAU,CAACT,gBAAgB,CAAC,CAAC,CAAA;AAE5E,EAAA,MAAMU,MAAM,GAAGJ,QAAQ,CAACK,mBAAmB,CAACX,gBAAgB,CAAC,CAAA;EAE7DO,KAAK,CAACK,oBAAoB,CACxBL,KAAK,CAACM,WAAW,CACfC,aAAa,IAAI;AACf,IAAA,MAAMC,WAAW,GAAGT,QAAQ,CAACU,SAAS,CAACF,aAAa,CAAC,CAAA;;AAErD;AACA;IACAR,QAAQ,CAACW,YAAY,EAAE,CAAA;AAEvB,IAAA,OAAOF,WAAW,CAAA;AACpB,GAAC,EACD,CAACT,QAAQ,CACX,CAAC,EACD,MAAMA,QAAQ,CAACY,gBAAgB,EAAE,EACjC,MAAMZ,QAAQ,CAACY,gBAAgB,EACjC,CAAC,CAAA;EAEDX,KAAK,CAACY,SAAS,CAAC,MAAM;AACpB;AACA;AACAb,IAAAA,QAAQ,CAACc,UAAU,CAACpB,gBAAgB,EAAE;AAAEqB,MAAAA,SAAS,EAAE,KAAA;AAAM,KAAC,CAAC,CAAA;AAC7D,GAAC,EAAE,CAACrB,gBAAgB,EAAEM,QAAQ,CAAC,CAAC,CAAA;;AAEhC;AACA,EAAA,IAAIgB,aAAa,CAACtB,gBAAgB,EAAEU,MAAM,CAAC,EAAE;AAC3C,IAAA,MAAMa,eAAe,CAACvB,gBAAgB,EAAEM,QAAQ,EAAER,kBAAkB,CAAC,CAAA;AACvE,GAAA;;AAEA;AACA,EAAA,IACE0B,WAAW,CACTd,MAAM,EACNZ,kBAAkB,EAClBQ,QAAQ,CAACmB,mBAAmB,EAAE,EAC9BzB,gBAAgB,CAAC0B,YACnB,CAAC,EACD;IACA,MAAMhB,MAAM,CAACiB,KAAK,CAAA;AACpB,GAAA;;AAEA;AACA,EAAA,OAAOrB,QAAQ,CAACsB,WAAW,CAAClB,MAAM,CAAC,CAAA;AACrC;;;;"}