{"version":3,"file":"query.cjs","names":["Removable","replaceData","noop","resolveQueryValue","skipToken","timeUntilStale","ensureQueryFn","infiniteQueryBehavior","createRetryer","CancelledError","canFetch"],"sources":["../../src/query.ts"],"sourcesContent":["import {\n  ensureQueryFn,\n  noop,\n  replaceData,\n  resolveQueryValue,\n  skipToken,\n  timeUntilStale,\n} from './utils'\nimport { notifyManager } from './notifyManager'\nimport { CancelledError, canFetch, createRetryer } from './retryer'\nimport { Removable } from './removable'\nimport { infiniteQueryBehavior } from './infiniteQueryBehavior'\nimport type { QueryCache } from './queryCache'\nimport type { QueryClient } from './queryClient'\nimport type {\n  CancelOptions,\n  DefaultError,\n  FetchStatus,\n  InitialDataFunction,\n  OmitKeyof,\n  QueryFunctionContext,\n  QueryKey,\n  QueryMeta,\n  QueryOptions,\n  QueryStatus,\n  SetDataOptions,\n  StaleTime,\n} from './types'\nimport type { QueryObserver } from './queryObserver'\nimport type { Retryer } from './retryer'\n\n// TYPES\n\ninterface QueryConfig<\n  TQueryFnData,\n  TError,\n  TData,\n  TQueryKey extends QueryKey = QueryKey,\n> {\n  client: QueryClient\n  queryKey: TQueryKey\n  queryHash: string\n  options?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>\n  defaultOptions?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>\n  state?: QueryState<TData, TError>\n}\n\nexport interface QueryState<TData = unknown, TError = DefaultError> {\n  data: TData | undefined\n  dataUpdateCount: number\n  dataUpdatedAt: number\n  error: TError | null\n  errorUpdateCount: number\n  errorUpdatedAt: number\n  fetchFailureCount: number\n  fetchFailureReason: TError | null\n  fetchMeta: FetchMeta | null\n  isInvalidated: boolean\n  status: QueryStatus\n  fetchStatus: FetchStatus\n}\n\nexport interface FetchContext<\n  TQueryFnData,\n  TError,\n  TData,\n  TQueryKey extends QueryKey = QueryKey,\n> {\n  fetchFn: () => unknown | Promise<unknown>\n  fetchOptions?: FetchOptions\n  signal: AbortSignal\n  options: QueryOptions<TQueryFnData, TError, TData, any>\n  client: QueryClient\n  queryKey: TQueryKey\n  state: QueryState<TData, TError>\n}\n\nexport interface QueryBehavior<\n  TQueryFnData = unknown,\n  TError = DefaultError,\n  TData = TQueryFnData,\n  TQueryKey extends QueryKey = QueryKey,\n> {\n  onFetch: (\n    context: FetchContext<TQueryFnData, TError, TData, TQueryKey>,\n    query: Query,\n  ) => void\n}\n\nexport type FetchDirection = 'forward' | 'backward'\n\nexport interface FetchMeta {\n  fetchMore?: { direction: FetchDirection }\n}\n\nexport interface FetchOptions<TData = unknown> {\n  cancelRefetch?: boolean\n  meta?: FetchMeta\n  initialPromise?: Promise<TData>\n}\n\ninterface FailedAction<TError> {\n  type: 'failed'\n  failureCount: number\n  error: TError\n}\n\ninterface FetchAction {\n  type: 'fetch'\n  meta?: FetchMeta\n}\n\ninterface SuccessAction<TData> {\n  data: TData | undefined\n  type: 'success'\n  dataUpdatedAt?: number\n  manual?: boolean\n}\n\ninterface ErrorAction<TError> {\n  type: 'error'\n  error: TError\n}\n\ninterface InvalidateAction {\n  type: 'invalidate'\n}\n\ninterface PauseAction {\n  type: 'pause'\n}\n\ninterface ContinueAction {\n  type: 'continue'\n}\n\ninterface SetStateAction<TData, TError> {\n  type: 'setState'\n  state: Partial<QueryState<TData, TError>>\n}\n\nexport type Action<TData, TError> =\n  | ContinueAction\n  | ErrorAction<TError>\n  | FailedAction<TError>\n  | FetchAction\n  | InvalidateAction\n  | PauseAction\n  | SetStateAction<TData, TError>\n  | SuccessAction<TData>\n\n// CLASS\n\nexport class Query<\n  TQueryFnData = unknown,\n  TError = DefaultError,\n  TData = TQueryFnData,\n  TQueryKey extends QueryKey = QueryKey,\n> extends Removable {\n  queryKey: TQueryKey\n  queryHash: string\n  options!: QueryOptions<TQueryFnData, TError, TData, TQueryKey>\n  state: QueryState<TData, TError>\n  #queryType?: 'infinite'\n\n  #initialState: QueryState<TData, TError>\n  #revertState?: QueryState<TData, TError>\n  #cache: QueryCache\n  #client: QueryClient\n  #retryer?: Retryer<TData>\n  observers: Array<QueryObserver<any, any, any, any, any>>\n  #defaultOptions?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>\n  #abortSignalConsumed: boolean\n\n  constructor(config: QueryConfig<TQueryFnData, TError, TData, TQueryKey>) {\n    super()\n\n    this.#abortSignalConsumed = false\n    this.#defaultOptions = config.defaultOptions\n    this.setOptions(config.options)\n    this.observers = []\n    this.#client = config.client\n    this.#cache = this.#client.getQueryCache()\n    this.queryKey = config.queryKey\n    this.queryHash = config.queryHash\n    this.#initialState = getDefaultState(this.options)\n    this.state = config.state ?? this.#initialState\n    this.scheduleGc()\n  }\n  get meta(): QueryMeta | undefined {\n    return this.options.meta\n  }\n\n  get queryType() {\n    return this.#queryType\n  }\n\n  get promise(): Promise<TData> | undefined {\n    return this.#retryer?.promise\n  }\n\n  setOptions(\n    options?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n  ): void {\n    this.options = { ...this.#defaultOptions, ...options }\n\n    if (options?._type) {\n      this.#queryType = options._type\n    }\n\n    this.updateGcTime(this.options.gcTime)\n\n    // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n    if (this.state && this.state.data === undefined) {\n      const defaultState = getDefaultState(this.options)\n      if (defaultState.data !== undefined) {\n        this.setState(\n          successState(defaultState.data, defaultState.dataUpdatedAt),\n        )\n        this.#initialState = defaultState\n      }\n    }\n  }\n\n  protected optionalRemove() {\n    if (!this.observers.length && this.state.fetchStatus === 'idle') {\n      this.#cache.remove(this)\n    }\n  }\n\n  setData(\n    newData: TData,\n    options?: SetDataOptions & { manual: boolean },\n  ): TData {\n    const data = replaceData(this.state.data, newData, this.options)\n\n    // Set data and mark it as cached\n    this.#dispatch({\n      data,\n      type: 'success',\n      dataUpdatedAt: options?.updatedAt,\n      manual: options?.manual,\n    })\n\n    return data\n  }\n\n  setState(state: Partial<QueryState<TData, TError>>): void {\n    this.#dispatch({ type: 'setState', state })\n  }\n\n  cancel(options?: CancelOptions): Promise<void> {\n    const promise = this.#retryer?.promise\n    this.#retryer?.cancel(options)\n    return promise ? promise.then(noop).catch(noop) : Promise.resolve()\n  }\n\n  destroy(): void {\n    super.destroy()\n\n    this.cancel({ silent: true })\n  }\n\n  get resetState(): QueryState<TData, TError> {\n    return this.#initialState\n  }\n\n  reset(): void {\n    this.destroy()\n    this.setState(this.resetState)\n  }\n\n  isActive(): boolean {\n    return this.observers.some(\n      (observer) => resolveQueryValue(observer.options.enabled, this) !== false,\n    )\n  }\n\n  isDisabled(): boolean {\n    if (this.getObserversCount() > 0) {\n      return !this.isActive()\n    }\n    // if a query has no observers, it should still be considered disabled if it never attempted a fetch\n    return this.options.queryFn === skipToken || !this.isFetched()\n  }\n\n  isFetched() {\n    return this.state.dataUpdateCount + this.state.errorUpdateCount > 0\n  }\n\n  isStatic(): boolean {\n    if (this.getObserversCount() > 0) {\n      return this.observers.some(\n        (observer) =>\n          resolveQueryValue(observer.options.staleTime, this) === 'static',\n      )\n    }\n\n    return false\n  }\n\n  isStale(): boolean {\n    // check observers first, their `isStale` has the source of truth\n    // calculated with `isStaleByTime` and it takes `enabled` into account\n    if (this.getObserversCount() > 0) {\n      return this.observers.some(\n        (observer) => observer.getCurrentResult().isStale,\n      )\n    }\n\n    return this.state.data === undefined || this.state.isInvalidated\n  }\n\n  isStaleByTime(staleTime: StaleTime = 0): boolean {\n    // no data is always stale\n    if (this.state.data === undefined) {\n      return true\n    }\n    // static is never stale\n    if (staleTime === 'static') {\n      return false\n    }\n    // if the query is invalidated, it is stale\n    if (this.state.isInvalidated) {\n      return true\n    }\n\n    return !timeUntilStale(this.state.dataUpdatedAt, staleTime)\n  }\n\n  onFocus(): void {\n    const observer = this.observers.find((x) => x.shouldFetchOnWindowFocus())\n\n    observer?.refetch({ cancelRefetch: false })\n\n    // Continue fetch if currently paused\n    this.#retryer?.continue()\n  }\n\n  onOnline(): void {\n    const observer = this.observers.find((x) => x.shouldFetchOnReconnect())\n\n    observer?.refetch({ cancelRefetch: false })\n\n    // Continue fetch if currently paused\n    this.#retryer?.continue()\n  }\n\n  addObserver(observer: QueryObserver<any, any, any, any, any>): void {\n    if (!this.observers.includes(observer)) {\n      this.observers.push(observer)\n\n      // Stop the query from being garbage collected\n      this.clearGcTimeout()\n\n      this.#cache.notify({ type: 'observerAdded', query: this, observer })\n    }\n  }\n\n  removeObserver(observer: QueryObserver<any, any, any, any, any>): void {\n    const index = this.observers.indexOf(observer)\n    if (index !== -1) {\n      this.observers.splice(index, 1)\n\n      if (!this.observers.length) {\n        // If the transport layer does not support cancellation\n        // we'll let the query continue so the result can be cached\n        if (this.#retryer) {\n          if (\n            this.#abortSignalConsumed ||\n            (this.state.fetchStatus === 'paused' &&\n              this.state.status === 'pending')\n          ) {\n            this.#retryer.cancel({ revert: true })\n          } else {\n            this.#retryer.cancelRetry()\n          }\n        }\n\n        this.scheduleGc()\n      }\n\n      this.#cache.notify({ type: 'observerRemoved', query: this, observer })\n    }\n  }\n\n  getObserversCount(): number {\n    return this.observers.length\n  }\n\n  invalidate(): void {\n    if (!this.state.isInvalidated) {\n      this.#dispatch({ type: 'invalidate' })\n    }\n  }\n\n  async fetch(\n    options?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n    fetchOptions?: FetchOptions<TQueryFnData>,\n  ): Promise<TData> {\n    if (\n      this.state.fetchStatus !== 'idle' &&\n      // If the promise in the retryer is already rejected, we have to definitely\n      // re-start the fetch; there is a chance that the query is still in a\n      // pending state when that happens\n      this.#retryer?.status() !== 'rejected'\n    ) {\n      if (this.state.data !== undefined && fetchOptions?.cancelRefetch) {\n        // Silently cancel current fetch if the user wants to cancel refetch\n        this.cancel({ silent: true })\n      } else if (this.#retryer) {\n        // make sure that retries that were potentially cancelled due to unmounts can continue\n        this.#retryer.continueRetry()\n        // Return current promise if we are already fetching\n        return this.#retryer.promise\n      }\n    }\n\n    // Update config if passed, otherwise the config from the last execution is used\n    if (options) {\n      this.setOptions(options)\n    }\n\n    // Use the options from the first observer with a query function if no function is found.\n    // This can happen when the query is hydrated or created with setQueryData.\n    if (!this.options.queryFn) {\n      const observer = this.observers.find((x) => x.options.queryFn)\n      if (observer) {\n        this.setOptions(observer.options)\n      }\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (!Array.isArray(this.options.queryKey)) {\n        console.error(\n          `As of v4, queryKey needs to be an Array. If you are using a string like 'repoData', please change it to an Array, e.g. ['repoData']`,\n        )\n      }\n    }\n\n    const abortController = new AbortController()\n\n    // Adds an enumerable signal property to the object that\n    // which sets abortSignalConsumed to true when the signal\n    // is read.\n    const addSignalProperty = (object: unknown) => {\n      Object.defineProperty(object, 'signal', {\n        enumerable: true,\n        get: () => {\n          this.#abortSignalConsumed = true\n          return abortController.signal\n        },\n      })\n    }\n\n    // Create fetch function\n    const fetchFn = () => {\n      const queryFn = ensureQueryFn(this.options, fetchOptions)\n\n      // Create query function context\n      const createQueryFnContext = (): QueryFunctionContext<TQueryKey> => {\n        const queryFnContext: OmitKeyof<\n          QueryFunctionContext<TQueryKey>,\n          'signal'\n        > = {\n          client: this.#client,\n          queryKey: this.queryKey,\n          meta: this.meta,\n        }\n        addSignalProperty(queryFnContext)\n        return queryFnContext as QueryFunctionContext<TQueryKey>\n      }\n\n      const queryFnContext = createQueryFnContext()\n\n      this.#abortSignalConsumed = false\n      if (this.options.persister) {\n        return this.options.persister(\n          queryFn,\n          queryFnContext,\n          this as unknown as Query,\n        )\n      }\n\n      return queryFn(queryFnContext)\n    }\n\n    // Trigger behavior hook\n    const createFetchContext = (): FetchContext<\n      TQueryFnData,\n      TError,\n      TData,\n      TQueryKey\n    > => {\n      const context: OmitKeyof<\n        FetchContext<TQueryFnData, TError, TData, TQueryKey>,\n        'signal'\n      > = {\n        fetchOptions,\n        options: this.options,\n        queryKey: this.queryKey,\n        client: this.#client,\n        state: this.state,\n        fetchFn,\n      }\n\n      addSignalProperty(context)\n      return context as FetchContext<TQueryFnData, TError, TData, TQueryKey>\n    }\n\n    const context = createFetchContext()\n\n    const behavior =\n      this.#queryType === 'infinite'\n        ? (infiniteQueryBehavior(\n            (this.options as { pages?: number }).pages,\n          ) as QueryBehavior<TQueryFnData, TError, TData, TQueryKey>)\n        : this.options.behavior\n    behavior?.onFetch(context, this as unknown as Query)\n\n    // Store state in case the current fetch needs to be reverted\n    this.#revertState = this.state\n\n    // Set to fetching state if not already in it\n    if (\n      this.state.fetchStatus === 'idle' ||\n      this.state.fetchMeta !== context.fetchOptions?.meta\n    ) {\n      this.#dispatch({ type: 'fetch', meta: context.fetchOptions?.meta })\n    }\n\n    // Try to fetch the data\n    const retryer = (this.#retryer = createRetryer({\n      initialPromise: fetchOptions?.initialPromise as\n        | Promise<TData>\n        | undefined,\n      fn: context.fetchFn as () => Promise<TData>,\n      onCancel: (error) => {\n        if (error instanceof CancelledError && error.revert) {\n          this.setState({\n            ...this.#revertState,\n            fetchStatus: 'idle' as const,\n          })\n        }\n        abortController.abort()\n      },\n      onFail: (failureCount, error) => {\n        this.#dispatch({ type: 'failed', failureCount, error })\n      },\n      onPause: () => {\n        this.#dispatch({ type: 'pause' })\n      },\n      onContinue: () => {\n        this.#dispatch({ type: 'continue' })\n      },\n      retry: context.options.retry,\n      retryDelay: context.options.retryDelay,\n      networkMode: context.options.networkMode,\n      canRun: () => true,\n    }))\n\n    try {\n      const data = await retryer.start()\n      // this is more of a runtime guard\n      // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n      if (data === undefined) {\n        if (process.env.NODE_ENV !== 'production') {\n          console.error(\n            `Query data cannot be undefined. Please make sure to return a value other than undefined from your query function. Affected query key: ${this.queryHash}`,\n          )\n        }\n        throw new Error(`${this.queryHash} data is undefined`)\n      }\n\n      this.setData(data)\n\n      // Notify cache callback\n      this.#cache.config.onSuccess?.(data, this as Query<any, any, any, any>)\n      this.#cache.config.onSettled?.(\n        data,\n        this.state.error as any,\n        this as Query<any, any, any, any>,\n      )\n      return data\n    } catch (error) {\n      if (error instanceof CancelledError) {\n        if (error.silent) {\n          // silent cancellation implies a new fetch is going to be started,\n          // so we piggyback onto that promise\n          return this.#retryer.promise\n        } else if (error.revert) {\n          // transform error into reverted state data\n          // if the initial fetch was cancelled, we have no data, so we have\n          // to get reject with a CancelledError\n          if (this.state.data === undefined) {\n            throw error\n          }\n          return this.state.data\n        }\n      }\n      this.#dispatch({\n        type: 'error',\n        error: error as TError,\n      })\n\n      // Notify cache callback\n      this.#cache.config.onError?.(\n        error as any,\n        this as Query<any, any, any, any>,\n      )\n      this.#cache.config.onSettled?.(\n        this.state.data,\n        error as any,\n        this as Query<any, any, any, any>,\n      )\n\n      throw error // rethrow the error for further handling\n    } finally {\n      // The settled retryer's promise would otherwise pin this fetch's raw\n      // result (a second copy after structural sharing) for the query's lifetime\n      if (this.#retryer === retryer) {\n        this.#retryer = undefined\n      }\n      // Schedule query gc after fetching\n      this.scheduleGc()\n    }\n  }\n\n  #dispatch(action: Action<TData, TError>): void {\n    const reducer = (\n      state: QueryState<TData, TError>,\n    ): QueryState<TData, TError> => {\n      switch (action.type) {\n        case 'failed':\n          return {\n            ...state,\n            fetchFailureCount: action.failureCount,\n            fetchFailureReason: action.error,\n          }\n        case 'pause':\n          return {\n            ...state,\n            fetchStatus: 'paused',\n          }\n        case 'continue':\n          return {\n            ...state,\n            fetchStatus: 'fetching',\n          }\n        case 'fetch':\n          return {\n            ...state,\n            ...fetchState(state.data, this.options),\n            fetchMeta: action.meta ?? null,\n          }\n        case 'success':\n          const newState = {\n            ...state,\n            ...successState(action.data, action.dataUpdatedAt),\n            dataUpdateCount: state.dataUpdateCount + 1,\n            ...(!action.manual && {\n              fetchStatus: 'idle' as const,\n              fetchFailureCount: 0,\n              fetchFailureReason: null,\n            }),\n          }\n          // If fetching ends successfully, we don't need revertState as a fallback anymore.\n          // For manual updates, capture the state to revert to it in case of a cancellation.\n          this.#revertState = action.manual ? newState : undefined\n\n          return newState\n        case 'error':\n          const error = action.error\n          return {\n            ...state,\n            error,\n            errorUpdateCount: state.errorUpdateCount + 1,\n            errorUpdatedAt: Date.now(),\n            fetchFailureCount: state.fetchFailureCount + 1,\n            fetchFailureReason: error,\n            fetchStatus: 'idle',\n            status: 'error',\n            // flag existing data as invalidated if we get a background error\n            // note that \"no data\" always means stale so we can set unconditionally here\n            isInvalidated: true,\n          }\n        case 'invalidate':\n          return {\n            ...state,\n            isInvalidated: true,\n          }\n        case 'setState':\n          return {\n            ...state,\n            ...action.state,\n          }\n      }\n    }\n\n    this.state = reducer(this.state)\n\n    notifyManager.batch(() => {\n      // Keep the current iteration stable if an observer unsubscribes\n      // synchronously while it is being notified.\n      this.observers.slice().forEach((observer) => {\n        observer.onQueryUpdate()\n      })\n\n      this.#cache.notify({ query: this, type: 'updated', action })\n    })\n  }\n}\n\nexport function fetchState<\n  TQueryFnData,\n  TError,\n  TData,\n  TQueryKey extends QueryKey,\n>(\n  data: TData | undefined,\n  options: QueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n) {\n  return {\n    fetchFailureCount: 0,\n    fetchFailureReason: null,\n    fetchStatus: canFetch(options.networkMode) ? 'fetching' : 'paused',\n    ...(data === undefined &&\n      ({\n        error: null,\n        status: 'pending',\n      } as const)),\n  } as const\n}\n\nfunction successState<TData>(data: TData | undefined, dataUpdatedAt?: number) {\n  return {\n    data,\n    dataUpdatedAt: dataUpdatedAt ?? Date.now(),\n    error: null,\n    isInvalidated: false,\n    status: 'success' as const,\n  }\n}\n\nfunction getDefaultState<\n  TQueryFnData,\n  TError,\n  TData,\n  TQueryKey extends QueryKey,\n>(\n  options: QueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n): QueryState<TData, TError> {\n  const data =\n    typeof options.initialData === 'function'\n      ? (options.initialData as InitialDataFunction<TData>)()\n      : options.initialData\n\n  const hasData = data !== undefined\n\n  const initialDataUpdatedAt = hasData\n    ? typeof options.initialDataUpdatedAt === 'function'\n      ? options.initialDataUpdatedAt()\n      : options.initialDataUpdatedAt\n    : 0\n\n  return {\n    data,\n    dataUpdateCount: 0,\n    dataUpdatedAt: hasData ? (initialDataUpdatedAt ?? Date.now()) : 0,\n    error: null,\n    errorUpdateCount: 0,\n    errorUpdatedAt: 0,\n    fetchFailureCount: 0,\n    fetchFailureReason: null,\n    fetchMeta: null,\n    isInvalidated: false,\n    status: hasData ? 'success' : 'pending',\n    fetchStatus: 'idle',\n  }\n}\n"],"mappings":"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"}