{"version":3,"file":"queryObserver.cjs","names":["Subscribable","resolveQueryValue","shallowEqualObjects","fetchState","replaceData","noop","isServerEnvironment","isValidTimeout","timeUntilStale","timeoutManager","focusManager"],"sources":["../../src/queryObserver.ts"],"sourcesContent":["import { focusManager } from './focusManager'\nimport { isServer as isServerEnvironment } from './environmentManager'\nimport { notifyManager } from './notifyManager'\nimport { fetchState } from './query'\nimport { Subscribable } from './subscribable'\nimport {\n  isValidTimeout,\n  noop,\n  replaceData,\n  resolveQueryValue,\n  shallowEqualObjects,\n  timeUntilStale,\n} from './utils'\nimport { timeoutManager } from './timeoutManager'\nimport type { ManagedTimerId } from './timeoutManager'\nimport type { FetchOptions, Query, QueryState } from './query'\nimport type { QueryClient } from './queryClient'\nimport type {\n  DefaultError,\n  DefaultedQueryObserverOptions,\n  PlaceholderDataFunction,\n  QueryKey,\n  QueryObserverBaseResult,\n  QueryObserverOptions,\n  QueryObserverResult,\n  RefetchOptions,\n} from './types'\n\ntype QueryObserverListener<TData, TError> = (\n  result: QueryObserverResult<TData, TError>,\n) => void\n\ninterface ObserverFetchOptions extends FetchOptions {\n  throwOnError?: boolean\n}\n\nexport class QueryObserver<\n  TQueryFnData = unknown,\n  TError = DefaultError,\n  TData = TQueryFnData,\n  TQueryData = TQueryFnData,\n  TQueryKey extends QueryKey = QueryKey,\n> extends Subscribable<QueryObserverListener<TData, TError>> {\n  #client: QueryClient\n  #currentQuery: Query<TQueryFnData, TError, TQueryData, TQueryKey> = undefined!\n  #currentQueryInitialState: QueryState<TQueryData, TError> = undefined!\n  #currentResult: QueryObserverResult<TData, TError> = undefined!\n  #currentResultState?: QueryState<TQueryData, TError>\n  #currentResultOptions?: QueryObserverOptions<\n    TQueryFnData,\n    TError,\n    TData,\n    TQueryData,\n    TQueryKey\n  >\n  #selectError: TError | null\n  #selectFn?: (data: TQueryData) => TData\n  #selectResult?: TData\n  // This property keeps track of the last query with defined data.\n  // It will be used to pass the previous data and query to the placeholder function between renders.\n  #lastQueryWithDefinedData?: Query<TQueryFnData, TError, TQueryData, TQueryKey>\n  #staleTimeoutId?: ManagedTimerId\n  #refetchIntervalId?: ManagedTimerId\n  #currentRefetchInterval?: number | false\n  #trackedProps = new Set<keyof QueryObserverResult>()\n\n  constructor(\n    client: QueryClient,\n    public options: QueryObserverOptions<\n      TQueryFnData,\n      TError,\n      TData,\n      TQueryData,\n      TQueryKey\n    >,\n  ) {\n    super()\n\n    this.#client = client\n    this.#selectError = null\n\n    this.bindMethods()\n    this.setOptions(options)\n  }\n\n  protected bindMethods(): void {\n    this.refetch = this.refetch.bind(this)\n  }\n\n  protected onSubscribe(): void {\n    if (this.listeners.size === 1) {\n      this.#currentQuery.addObserver(this)\n\n      if (shouldFetchOnMount(this.#currentQuery, this.options)) {\n        this.#executeFetch()\n      } else {\n        this.updateResult()\n      }\n\n      this.#updateTimers()\n    }\n  }\n\n  protected onUnsubscribe(): void {\n    if (!this.hasListeners()) {\n      this.destroy()\n    }\n  }\n\n  shouldFetchOnReconnect(): boolean {\n    return shouldFetchOn(\n      this.#currentQuery,\n      this.options,\n      this.options.refetchOnReconnect,\n    )\n  }\n\n  shouldFetchOnWindowFocus(): boolean {\n    return shouldFetchOn(\n      this.#currentQuery,\n      this.options,\n      this.options.refetchOnWindowFocus,\n    )\n  }\n\n  destroy(): void {\n    this.listeners = new Set()\n    this.#clearStaleTimeout()\n    this.#clearRefetchInterval()\n    this.#currentQuery.removeObserver(this)\n  }\n\n  setOptions(\n    options: QueryObserverOptions<\n      TQueryFnData,\n      TError,\n      TData,\n      TQueryData,\n      TQueryKey\n    >,\n  ): void {\n    const prevOptions = this.options\n    const prevQuery = this.#currentQuery\n\n    this.options = this.#client.defaultQueryOptions(options)\n\n    if (\n      this.options.enabled !== undefined &&\n      typeof this.options.enabled !== 'boolean' &&\n      typeof this.options.enabled !== 'function' &&\n      typeof resolveQueryValue(this.options.enabled, this.#currentQuery) !==\n        'boolean'\n    ) {\n      throw new Error(\n        'Expected enabled to be a boolean or a callback that returns a boolean',\n      )\n    }\n\n    this.#updateQuery()\n    this.#currentQuery.setOptions(this.options)\n\n    if (\n      prevOptions._defaulted &&\n      !shallowEqualObjects(this.options, prevOptions)\n    ) {\n      this.#client.getQueryCache().notify({\n        type: 'observerOptionsUpdated',\n        query: this.#currentQuery,\n        observer: this,\n      })\n    }\n\n    const mounted = this.hasListeners()\n\n    // Fetch if there are subscribers\n    if (\n      mounted &&\n      shouldFetchOptionally(\n        this.#currentQuery,\n        prevQuery,\n        this.options,\n        prevOptions,\n      )\n    ) {\n      this.#executeFetch()\n    }\n\n    // Update result\n    this.updateResult()\n\n    // Update stale interval if needed\n    if (\n      mounted &&\n      (this.#currentQuery !== prevQuery ||\n        resolveQueryValue(this.options.enabled, this.#currentQuery) !==\n          resolveQueryValue(prevOptions.enabled, this.#currentQuery) ||\n        resolveQueryValue(this.options.staleTime, this.#currentQuery) !==\n          resolveQueryValue(prevOptions.staleTime, this.#currentQuery))\n    ) {\n      this.#updateStaleTimeout()\n    }\n\n    const nextRefetchInterval = this.#computeRefetchInterval()\n\n    // Update refetch interval if needed\n    if (\n      mounted &&\n      (this.#currentQuery !== prevQuery ||\n        resolveQueryValue(this.options.enabled, this.#currentQuery) !==\n          resolveQueryValue(prevOptions.enabled, this.#currentQuery) ||\n        nextRefetchInterval !== this.#currentRefetchInterval)\n    ) {\n      this.#updateRefetchInterval(nextRefetchInterval)\n    }\n  }\n\n  getOptimisticResult(\n    options: DefaultedQueryObserverOptions<\n      TQueryFnData,\n      TError,\n      TData,\n      TQueryData,\n      TQueryKey\n    >,\n  ): QueryObserverResult<TData, TError> {\n    const query = this.#client.getQueryCache().build(this.#client, options)\n\n    const result = this.createResult(query, options)\n\n    if (!shallowEqualObjects(this.getCurrentResult(), result)) {\n      // this assigns the optimistic result to the current Observer\n      // because if the query function changes, useQuery will be performing\n      // an effect where it would fetch again.\n      // When the fetch finishes, we perform a deep data cloning in order\n      // to reuse objects references. This deep data clone is performed against\n      // the `observer.currentResult.data` property\n      // When QueryKey changes, we refresh the query and get new `optimistic`\n      // result, while we leave the `observer.currentResult`, so when new data\n      // arrives, it finds the old `observer.currentResult` which is related\n      // to the old QueryKey. Which means that currentResult and selectData are\n      // out of sync already.\n      // To solve this, we move the cursor of the currentResult every time\n      // an observer reads an optimistic value.\n\n      // When keeping the previous data, the result doesn't change until new\n      // data arrives.\n      this.#currentResult = result\n      this.#currentResultOptions = this.options\n      this.#currentResultState = this.#currentQuery.state\n    }\n    return result\n  }\n\n  getCurrentResult(): QueryObserverResult<TData, TError> {\n    return this.#currentResult\n  }\n\n  trackResult(\n    result: QueryObserverResult<TData, TError>,\n    onPropTracked?: (key: keyof QueryObserverResult) => void,\n  ): QueryObserverResult<TData, TError> {\n    return new Proxy(result, {\n      get: (target, key) => {\n        this.trackProp(key as keyof QueryObserverResult)\n        onPropTracked?.(key as keyof QueryObserverResult)\n        return Reflect.get(target, key)\n      },\n    })\n  }\n\n  trackProp(key: keyof QueryObserverResult) {\n    this.#trackedProps.add(key)\n  }\n\n  getCurrentQuery(): Query<TQueryFnData, TError, TQueryData, TQueryKey> {\n    return this.#currentQuery\n  }\n\n  refetch({ ...options }: RefetchOptions = {}): Promise<\n    QueryObserverResult<TData, TError>\n  > {\n    return this.fetch({\n      ...options,\n    })\n  }\n\n  fetchOptimistic(\n    options: QueryObserverOptions<\n      TQueryFnData,\n      TError,\n      TData,\n      TQueryData,\n      TQueryKey\n    >,\n  ): Promise<QueryObserverResult<TData, TError>> {\n    const defaultedOptions = this.#client.defaultQueryOptions(options)\n\n    const query = this.#client\n      .getQueryCache()\n      .build(this.#client, defaultedOptions)\n\n    let unsubscribe = () => {}\n    let resolveEarly:\n      | ((result: QueryObserverResult<TData, TError>) => void)\n      | undefined\n\n    const cachePromise = new Promise<QueryObserverResult<TData, TError>>(\n      (resolve) => {\n        resolveEarly = resolve\n        unsubscribe = this.#client.getQueryCache().subscribe((event) => {\n          if (\n            event.type === 'updated' &&\n            event.query.queryHash === query.queryHash &&\n            query.state.data !== undefined\n          ) {\n            unsubscribe()\n            resolve(this.createResult(query, defaultedOptions))\n          }\n        })\n      },\n    )\n\n    return Promise.race([\n      query\n        .fetch()\n        .then(() => {\n          const result = this.createResult(query, defaultedOptions)\n          // Settle the subscriber promise so both branches always settle.\n          // This value is ignored by Promise.race since the fetch branch already won.\n          resolveEarly?.(result)\n          return result\n        })\n        .finally(() => {\n          unsubscribe()\n        }),\n      cachePromise,\n    ])\n  }\n\n  protected fetch(\n    fetchOptions: ObserverFetchOptions,\n  ): Promise<QueryObserverResult<TData, TError>> {\n    return this.#executeFetch({\n      ...fetchOptions,\n      cancelRefetch: fetchOptions.cancelRefetch ?? true,\n    }).then(() => {\n      this.updateResult()\n      return this.#currentResult\n    })\n  }\n\n  #executeFetch(\n    fetchOptions?: Omit<ObserverFetchOptions, 'initialPromise'>,\n  ): Promise<TQueryData | undefined> {\n    // Make sure we reference the latest query as the current one might have been removed\n    this.#updateQuery()\n\n    // Fetch\n    let promise: Promise<TQueryData | undefined> = this.#currentQuery.fetch(\n      this.options,\n      fetchOptions,\n    )\n\n    if (!fetchOptions?.throwOnError) {\n      promise = promise.catch(noop)\n    }\n\n    return promise\n  }\n\n  #shouldScheduleTimer(timeout: unknown): timeout is number {\n    return (\n      !isServerEnvironment() &&\n      resolveQueryValue(this.options.enabled, this.#currentQuery) !== false &&\n      isValidTimeout(timeout)\n    )\n  }\n\n  #updateStaleTimeout(): void {\n    this.#clearStaleTimeout()\n    const staleTime = resolveQueryValue(\n      this.options.staleTime,\n      this.#currentQuery,\n    )\n\n    if (this.#currentResult.isStale || !this.#shouldScheduleTimer(staleTime)) {\n      return\n    }\n\n    const time = timeUntilStale(this.#currentResult.dataUpdatedAt, staleTime)\n\n    // The timeout is sometimes triggered 1 ms before the stale time expiration.\n    // To mitigate this issue we always add 1 ms to the timeout.\n    const timeout = time + 1\n\n    this.#staleTimeoutId = timeoutManager.setTimeout(() => {\n      if (!this.#currentResult.isStale) {\n        this.updateResult()\n      }\n    }, timeout)\n  }\n\n  #computeRefetchInterval() {\n    return (\n      (typeof this.options.refetchInterval === 'function'\n        ? this.options.refetchInterval(this.#currentQuery)\n        : this.options.refetchInterval) ?? false\n    )\n  }\n\n  #updateRefetchInterval(nextInterval: number | false): void {\n    this.#clearRefetchInterval()\n\n    this.#currentRefetchInterval = nextInterval\n\n    if (\n      this.#currentRefetchInterval === 0 ||\n      !this.#shouldScheduleTimer(this.#currentRefetchInterval)\n    ) {\n      return\n    }\n\n    this.#refetchIntervalId = timeoutManager.setInterval(() => {\n      if (\n        this.options.refetchIntervalInBackground ||\n        focusManager.isFocused()\n      ) {\n        this.#executeFetch()\n      }\n    }, this.#currentRefetchInterval)\n  }\n\n  #updateTimers(): void {\n    this.#updateStaleTimeout()\n    this.#updateRefetchInterval(this.#computeRefetchInterval())\n  }\n\n  #clearStaleTimeout(): void {\n    if (this.#staleTimeoutId !== undefined) {\n      timeoutManager.clearTimeout(this.#staleTimeoutId)\n      this.#staleTimeoutId = undefined\n    }\n  }\n\n  #clearRefetchInterval(): void {\n    if (this.#refetchIntervalId !== undefined) {\n      timeoutManager.clearInterval(this.#refetchIntervalId)\n      this.#refetchIntervalId = undefined\n    }\n  }\n\n  protected createResult(\n    query: Query<TQueryFnData, TError, TQueryData, TQueryKey>,\n    options: QueryObserverOptions<\n      TQueryFnData,\n      TError,\n      TData,\n      TQueryData,\n      TQueryKey\n    >,\n  ): QueryObserverResult<TData, TError> {\n    const prevQuery = this.#currentQuery\n    const prevOptions = this.options\n    const prevResult = this.#currentResult as\n      | QueryObserverResult<TData, TError>\n      | undefined\n    const prevResultState = this.#currentResultState\n    const prevResultOptions = this.#currentResultOptions\n    const queryChange = query !== prevQuery\n    const queryInitialState = queryChange\n      ? query.state\n      : this.#currentQueryInitialState\n\n    const { state } = query\n    let newState = { ...state }\n    let isPlaceholderData = false\n    let data: TData | undefined\n\n    // Optimistically set result in fetching state if needed\n    if (options._optimisticResults) {\n      const mounted = this.hasListeners()\n\n      const fetchOnMount = !mounted && shouldFetchOnMount(query, options)\n\n      const fetchOptionally =\n        mounted && shouldFetchOptionally(query, prevQuery, options, prevOptions)\n\n      if (fetchOnMount || fetchOptionally) {\n        newState = {\n          ...newState,\n          ...fetchState(state.data, query.options),\n        }\n      }\n      if (options._optimisticResults === 'isRestoring') {\n        newState.fetchStatus = 'idle'\n      }\n    }\n\n    let { error, errorUpdatedAt, status } = newState\n\n    // Per default, use query data\n    data = newState.data as unknown as TData\n    let skipSelect = false\n\n    // use placeholderData if needed\n    if (\n      options.placeholderData !== undefined &&\n      data === undefined &&\n      status === 'pending'\n    ) {\n      let placeholderData\n\n      // Memoize placeholder data\n      if (\n        prevResult?.isPlaceholderData &&\n        options.placeholderData === prevResultOptions?.placeholderData\n      ) {\n        placeholderData = prevResult.data\n        // we have to skip select when reading this memoization\n        // because prevResult.data is already \"selected\"\n        skipSelect = true\n      } else {\n        // compute placeholderData\n        placeholderData =\n          typeof options.placeholderData === 'function'\n            ? (\n                options.placeholderData as unknown as PlaceholderDataFunction<TQueryData>\n              )(\n                this.#lastQueryWithDefinedData?.state.data,\n                this.#lastQueryWithDefinedData as any,\n              )\n            : options.placeholderData\n      }\n\n      if (placeholderData !== undefined) {\n        status = 'success'\n        data = replaceData(\n          prevResult?.data,\n          placeholderData as unknown,\n          options,\n        ) as TData\n        isPlaceholderData = true\n      }\n    }\n\n    // Select data if needed\n    // this also runs placeholderData through the select function\n    if (options.select && data !== undefined && !skipSelect) {\n      // Memoize select result\n      if (\n        prevResult &&\n        data === prevResultState?.data &&\n        options.select === this.#selectFn\n      ) {\n        data = this.#selectResult\n      } else {\n        try {\n          this.#selectFn = options.select\n          data = options.select(data as any)\n          data = replaceData(prevResult?.data, data, options)\n          this.#selectResult = data\n          this.#selectError = null\n        } catch (selectError) {\n          this.#selectError = selectError as TError\n        }\n      }\n    } else if (data === undefined) {\n      // a stored select error belongs to previously selected data; once that\n      // data is gone (query switch or reset), it must not leak into this result\n      this.#selectError = null\n    }\n\n    if (this.#selectError) {\n      error = this.#selectError\n      data = this.#selectResult\n      errorUpdatedAt = Date.now()\n      status = 'error'\n      isPlaceholderData = false\n    }\n\n    const isFetching = newState.fetchStatus === 'fetching'\n    const isPending = status === 'pending'\n    const isError = status === 'error'\n\n    const isLoading = isPending && isFetching\n    const hasData = data !== undefined\n\n    const result: QueryObserverBaseResult<TData, TError> = {\n      status,\n      fetchStatus: newState.fetchStatus,\n      isPending,\n      isSuccess: status === 'success',\n      isError,\n      isInitialLoading: isLoading,\n      isLoading,\n      data,\n      dataUpdatedAt: newState.dataUpdatedAt,\n      error,\n      errorUpdatedAt,\n      failureCount: newState.fetchFailureCount,\n      failureReason: newState.fetchFailureReason,\n      errorUpdateCount: newState.errorUpdateCount,\n      isFetched: query.isFetched(),\n      isFetchedAfterMount:\n        newState.dataUpdateCount > queryInitialState.dataUpdateCount ||\n        newState.errorUpdateCount > queryInitialState.errorUpdateCount,\n      isFetching,\n      isRefetching: isFetching && !isPending,\n      isLoadingError: isError && !hasData,\n      isPaused: newState.fetchStatus === 'paused',\n      isPlaceholderData,\n      isRefetchError: isError && hasData,\n      isStale: isStale(query, options),\n      refetch: this.refetch,\n      isEnabled: resolveQueryValue(options.enabled, query) !== false,\n    }\n\n    const nextResult = result as QueryObserverResult<TData, TError>\n\n    return nextResult\n  }\n\n  updateResult(): void {\n    const prevResult = this.#currentResult as\n      | QueryObserverResult<TData, TError>\n      | undefined\n\n    const nextResult = this.createResult(this.#currentQuery, this.options)\n\n    this.#currentResultState = this.#currentQuery.state\n    this.#currentResultOptions = this.options\n\n    if (this.#currentResultState.data !== undefined) {\n      this.#lastQueryWithDefinedData = this.#currentQuery\n    }\n\n    // Only notify and update result if something has changed\n    if (shallowEqualObjects(nextResult, prevResult)) {\n      return\n    }\n\n    this.#currentResult = nextResult\n\n    const shouldNotifyListeners = (): boolean => {\n      if (!prevResult) {\n        return true\n      }\n\n      const { notifyOnChangeProps } = this.options\n      const notifyOnChangePropsValue =\n        typeof notifyOnChangeProps === 'function'\n          ? notifyOnChangeProps()\n          : notifyOnChangeProps\n\n      if (\n        notifyOnChangePropsValue === 'all' ||\n        (!notifyOnChangePropsValue && !this.#trackedProps.size)\n      ) {\n        return true\n      }\n\n      const includedProps = new Set(\n        notifyOnChangePropsValue ?? this.#trackedProps,\n      )\n\n      if (this.options.throwOnError) {\n        includedProps.add('error')\n      }\n\n      return Object.keys(this.#currentResult).some((key) => {\n        const typedKey = key as keyof QueryObserverResult\n        const changed = this.#currentResult[typedKey] !== prevResult[typedKey]\n\n        return changed && includedProps.has(typedKey)\n      })\n    }\n\n    const notifyListeners = shouldNotifyListeners()\n\n    notifyManager.batch(() => {\n      // First, trigger the listeners\n      if (notifyListeners) {\n        this.listeners.forEach((listener) => {\n          listener(this.#currentResult)\n        })\n      }\n\n      // Then the cache listeners\n      this.#client.getQueryCache().notify({\n        query: this.#currentQuery,\n        type: 'observerResultsUpdated',\n      })\n    })\n  }\n\n  #updateQuery(): void {\n    const query = this.#client.getQueryCache().build(this.#client, this.options)\n\n    if (query === this.#currentQuery) {\n      return\n    }\n\n    const prevQuery = this.#currentQuery as\n      | Query<TQueryFnData, TError, TQueryData, TQueryKey>\n      | undefined\n    this.#currentQuery = query\n    this.#currentQueryInitialState = query.state\n\n    if (this.hasListeners()) {\n      prevQuery?.removeObserver(this)\n      query.addObserver(this)\n    }\n  }\n\n  onQueryUpdate(): void {\n    this.updateResult()\n\n    if (this.hasListeners()) {\n      this.#updateTimers()\n    }\n  }\n}\n\nfunction shouldLoadOnMount(\n  query: Query<any, any, any, any>,\n  options: QueryObserverOptions<any, any, any, any>,\n): boolean {\n  return (\n    resolveQueryValue(options.enabled, query) !== false &&\n    query.state.data === undefined &&\n    !(\n      query.state.status === 'error' &&\n      resolveQueryValue(options.retryOnMount, query) === false\n    )\n  )\n}\n\nfunction shouldFetchOnMount(\n  query: Query<any, any, any, any>,\n  options: QueryObserverOptions<any, any, any, any, any>,\n): boolean {\n  return (\n    shouldLoadOnMount(query, options) ||\n    (query.state.data !== undefined &&\n      shouldFetchOn(query, options, options.refetchOnMount))\n  )\n}\n\nfunction shouldFetchOn(\n  query: Query<any, any, any, any>,\n  options: QueryObserverOptions<any, any, any, any, any>,\n  field: (typeof options)['refetchOnMount'] &\n    (typeof options)['refetchOnWindowFocus'] &\n    (typeof options)['refetchOnReconnect'],\n) {\n  if (\n    resolveQueryValue(options.enabled, query) !== false &&\n    resolveQueryValue(options.staleTime, query) !== 'static'\n  ) {\n    const value = typeof field === 'function' ? field(query) : field\n\n    return value === 'always' || (value !== false && isStale(query, options))\n  }\n  return false\n}\n\nfunction shouldFetchOptionally(\n  query: Query<any, any, any, any>,\n  prevQuery: Query<any, any, any, any>,\n  options: QueryObserverOptions<any, any, any, any, any>,\n  prevOptions: QueryObserverOptions<any, any, any, any, any>,\n): boolean {\n  return (\n    (query !== prevQuery ||\n      resolveQueryValue(prevOptions.enabled, query) === false) &&\n    (!options.suspense || query.state.status !== 'error') &&\n    isStale(query, options)\n  )\n}\n\nfunction isStale(\n  query: Query<any, any, any, any>,\n  options: QueryObserverOptions<any, any, any, any, any>,\n): boolean {\n  return (\n    resolveQueryValue(options.enabled, query) !== false &&\n    query.isStaleByTime(resolveQueryValue(options.staleTime, query))\n  )\n}\n"],"mappings":"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"}