1 line
53 KiB
JSON
1 line
53 KiB
JSON
{"ast":null,"code":"// src/queryObserver.ts\nimport { isServer, isValidTimeout, noop, replaceData, resolveEnabled, resolveStaleTime, shallowEqualObjects, timeUntilStale } from \"./utils.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { focusManager } from \"./focusManager.js\";\nimport { Subscribable } from \"./subscribable.js\";\nimport { fetchState } from \"./query.js\";\nvar QueryObserver = class extends Subscribable {\n constructor(client, options) {\n super();\n this.options = options;\n this.#client = client;\n this.#selectError = null;\n this.bindMethods();\n this.setOptions(options);\n }\n #client;\n #currentQuery = void 0;\n #currentQueryInitialState = void 0;\n #currentResult = void 0;\n #currentResultState;\n #currentResultOptions;\n #selectError;\n #selectFn;\n #selectResult;\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;\n #staleTimeoutId;\n #refetchIntervalId;\n #currentRefetchInterval;\n #trackedProps = /* @__PURE__ */new Set();\n bindMethods() {\n this.refetch = this.refetch.bind(this);\n }\n onSubscribe() {\n if (this.listeners.size === 1) {\n this.#currentQuery.addObserver(this);\n if (shouldFetchOnMount(this.#currentQuery, this.options)) {\n this.#executeFetch();\n } else {\n this.updateResult();\n }\n this.#updateTimers();\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.destroy();\n }\n }\n shouldFetchOnReconnect() {\n return shouldFetchOn(this.#currentQuery, this.options, this.options.refetchOnReconnect);\n }\n shouldFetchOnWindowFocus() {\n return shouldFetchOn(this.#currentQuery, this.options, this.options.refetchOnWindowFocus);\n }\n destroy() {\n this.listeners = /* @__PURE__ */new Set();\n this.#clearStaleTimeout();\n this.#clearRefetchInterval();\n this.#currentQuery.removeObserver(this);\n }\n setOptions(options, notifyOptions) {\n const prevOptions = this.options;\n const prevQuery = this.#currentQuery;\n this.options = this.#client.defaultQueryOptions(options);\n if (this.options.enabled !== void 0 && typeof this.options.enabled !== \"boolean\" && typeof this.options.enabled !== \"function\" && typeof resolveEnabled(this.options.enabled, this.#currentQuery) !== \"boolean\") {\n throw new Error(\"Expected enabled to be a boolean or a callback that returns a boolean\");\n }\n this.#updateQuery();\n this.#currentQuery.setOptions(this.options);\n if (prevOptions._defaulted && !shallowEqualObjects(this.options, prevOptions)) {\n this.#client.getQueryCache().notify({\n type: \"observerOptionsUpdated\",\n query: this.#currentQuery,\n observer: this\n });\n }\n const mounted = this.hasListeners();\n if (mounted && shouldFetchOptionally(this.#currentQuery, prevQuery, this.options, prevOptions)) {\n this.#executeFetch();\n }\n this.updateResult(notifyOptions);\n if (mounted && (this.#currentQuery !== prevQuery || resolveEnabled(this.options.enabled, this.#currentQuery) !== resolveEnabled(prevOptions.enabled, this.#currentQuery) || resolveStaleTime(this.options.staleTime, this.#currentQuery) !== resolveStaleTime(prevOptions.staleTime, this.#currentQuery))) {\n this.#updateStaleTimeout();\n }\n const nextRefetchInterval = this.#computeRefetchInterval();\n if (mounted && (this.#currentQuery !== prevQuery || resolveEnabled(this.options.enabled, this.#currentQuery) !== resolveEnabled(prevOptions.enabled, this.#currentQuery) || nextRefetchInterval !== this.#currentRefetchInterval)) {\n this.#updateRefetchInterval(nextRefetchInterval);\n }\n }\n getOptimisticResult(options) {\n const query = this.#client.getQueryCache().build(this.#client, options);\n const result = this.createResult(query, options);\n if (shouldAssignObserverCurrentProperties(this, result)) {\n this.#currentResult = result;\n this.#currentResultOptions = this.options;\n this.#currentResultState = this.#currentQuery.state;\n }\n return result;\n }\n getCurrentResult() {\n return this.#currentResult;\n }\n trackResult(result, onPropTracked) {\n const trackedResult = {};\n Object.keys(result).forEach(key => {\n Object.defineProperty(trackedResult, key, {\n configurable: false,\n enumerable: true,\n get: () => {\n this.trackProp(key);\n onPropTracked?.(key);\n return result[key];\n }\n });\n });\n return trackedResult;\n }\n trackProp(key) {\n this.#trackedProps.add(key);\n }\n getCurrentQuery() {\n return this.#currentQuery;\n }\n refetch({\n ...options\n } = {}) {\n return this.fetch({\n ...options\n });\n }\n fetchOptimistic(options) {\n const defaultedOptions = this.#client.defaultQueryOptions(options);\n const query = this.#client.getQueryCache().build(this.#client, defaultedOptions);\n query.isFetchingOptimistic = true;\n return query.fetch().then(() => this.createResult(query, defaultedOptions));\n }\n fetch(fetchOptions) {\n return this.#executeFetch({\n ...fetchOptions,\n cancelRefetch: fetchOptions.cancelRefetch ?? true\n }).then(() => {\n this.updateResult();\n return this.#currentResult;\n });\n }\n #executeFetch(fetchOptions) {\n this.#updateQuery();\n let promise = this.#currentQuery.fetch(this.options, fetchOptions);\n if (!fetchOptions?.throwOnError) {\n promise = promise.catch(noop);\n }\n return promise;\n }\n #updateStaleTimeout() {\n this.#clearStaleTimeout();\n const staleTime = resolveStaleTime(this.options.staleTime, this.#currentQuery);\n if (isServer || this.#currentResult.isStale || !isValidTimeout(staleTime)) {\n return;\n }\n const time = timeUntilStale(this.#currentResult.dataUpdatedAt, staleTime);\n const timeout = time + 1;\n this.#staleTimeoutId = setTimeout(() => {\n if (!this.#currentResult.isStale) {\n this.updateResult();\n }\n }, timeout);\n }\n #computeRefetchInterval() {\n return (typeof this.options.refetchInterval === \"function\" ? this.options.refetchInterval(this.#currentQuery) : this.options.refetchInterval) ?? false;\n }\n #updateRefetchInterval(nextInterval) {\n this.#clearRefetchInterval();\n this.#currentRefetchInterval = nextInterval;\n if (isServer || resolveEnabled(this.options.enabled, this.#currentQuery) === false || !isValidTimeout(this.#currentRefetchInterval) || this.#currentRefetchInterval === 0) {\n return;\n }\n this.#refetchIntervalId = setInterval(() => {\n if (this.options.refetchIntervalInBackground || focusManager.isFocused()) {\n this.#executeFetch();\n }\n }, this.#currentRefetchInterval);\n }\n #updateTimers() {\n this.#updateStaleTimeout();\n this.#updateRefetchInterval(this.#computeRefetchInterval());\n }\n #clearStaleTimeout() {\n if (this.#staleTimeoutId) {\n clearTimeout(this.#staleTimeoutId);\n this.#staleTimeoutId = void 0;\n }\n }\n #clearRefetchInterval() {\n if (this.#refetchIntervalId) {\n clearInterval(this.#refetchIntervalId);\n this.#refetchIntervalId = void 0;\n }\n }\n createResult(query, options) {\n const prevQuery = this.#currentQuery;\n const prevOptions = this.options;\n const prevResult = this.#currentResult;\n const prevResultState = this.#currentResultState;\n const prevResultOptions = this.#currentResultOptions;\n const queryChange = query !== prevQuery;\n const queryInitialState = queryChange ? query.state : this.#currentQueryInitialState;\n const {\n state\n } = query;\n let newState = {\n ...state\n };\n let isPlaceholderData = false;\n let data;\n if (options._optimisticResults) {\n const mounted = this.hasListeners();\n const fetchOnMount = !mounted && shouldFetchOnMount(query, options);\n const fetchOptionally = mounted && shouldFetchOptionally(query, prevQuery, options, prevOptions);\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 let {\n error,\n errorUpdatedAt,\n status\n } = newState;\n if (options.select && newState.data !== void 0) {\n if (prevResult && newState.data === prevResultState?.data && options.select === this.#selectFn) {\n data = this.#selectResult;\n } else {\n try {\n this.#selectFn = options.select;\n data = options.select(newState.data);\n data = replaceData(prevResult?.data, data, options);\n this.#selectResult = data;\n this.#selectError = null;\n } catch (selectError) {\n this.#selectError = selectError;\n }\n }\n } else {\n data = newState.data;\n }\n if (options.placeholderData !== void 0 && data === void 0 && status === \"pending\") {\n let placeholderData;\n if (prevResult?.isPlaceholderData && options.placeholderData === prevResultOptions?.placeholderData) {\n placeholderData = prevResult.data;\n } else {\n placeholderData = typeof options.placeholderData === \"function\" ? options.placeholderData(this.#lastQueryWithDefinedData?.state.data, this.#lastQueryWithDefinedData) : options.placeholderData;\n if (options.select && placeholderData !== void 0) {\n try {\n placeholderData = options.select(placeholderData);\n this.#selectError = null;\n } catch (selectError) {\n this.#selectError = selectError;\n }\n }\n }\n if (placeholderData !== void 0) {\n status = \"success\";\n data = replaceData(prevResult?.data, placeholderData, options);\n isPlaceholderData = true;\n }\n }\n if (this.#selectError) {\n error = this.#selectError;\n data = this.#selectResult;\n errorUpdatedAt = Date.now();\n status = \"error\";\n }\n const isFetching = newState.fetchStatus === \"fetching\";\n const isPending = status === \"pending\";\n const isError = status === \"error\";\n const isLoading = isPending && isFetching;\n const hasData = data !== void 0;\n const result = {\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: newState.dataUpdateCount > 0 || newState.errorUpdateCount > 0,\n isFetchedAfterMount: newState.dataUpdateCount > queryInitialState.dataUpdateCount || 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 };\n return result;\n }\n updateResult(notifyOptions) {\n const prevResult = this.#currentResult;\n const nextResult = this.createResult(this.#currentQuery, this.options);\n this.#currentResultState = this.#currentQuery.state;\n this.#currentResultOptions = this.options;\n if (this.#currentResultState.data !== void 0) {\n this.#lastQueryWithDefinedData = this.#currentQuery;\n }\n if (shallowEqualObjects(nextResult, prevResult)) {\n return;\n }\n this.#currentResult = nextResult;\n const defaultNotifyOptions = {};\n const shouldNotifyListeners = () => {\n if (!prevResult) {\n return true;\n }\n const {\n notifyOnChangeProps\n } = this.options;\n const notifyOnChangePropsValue = typeof notifyOnChangeProps === \"function\" ? notifyOnChangeProps() : notifyOnChangeProps;\n if (notifyOnChangePropsValue === \"all\" || !notifyOnChangePropsValue && !this.#trackedProps.size) {\n return true;\n }\n const includedProps = new Set(notifyOnChangePropsValue ?? this.#trackedProps);\n if (this.options.throwOnError) {\n includedProps.add(\"error\");\n }\n return Object.keys(this.#currentResult).some(key => {\n const typedKey = key;\n const changed = this.#currentResult[typedKey] !== prevResult[typedKey];\n return changed && includedProps.has(typedKey);\n });\n };\n if (notifyOptions?.listeners !== false && shouldNotifyListeners()) {\n defaultNotifyOptions.listeners = true;\n }\n this.#notify({\n ...defaultNotifyOptions,\n ...notifyOptions\n });\n }\n #updateQuery() {\n const query = this.#client.getQueryCache().build(this.#client, this.options);\n if (query === this.#currentQuery) {\n return;\n }\n const prevQuery = this.#currentQuery;\n this.#currentQuery = query;\n this.#currentQueryInitialState = query.state;\n if (this.hasListeners()) {\n prevQuery?.removeObserver(this);\n query.addObserver(this);\n }\n }\n onQueryUpdate() {\n this.updateResult();\n if (this.hasListeners()) {\n this.#updateTimers();\n }\n }\n #notify(notifyOptions) {\n notifyManager.batch(() => {\n if (notifyOptions.listeners) {\n this.listeners.forEach(listener => {\n listener(this.#currentResult);\n });\n }\n this.#client.getQueryCache().notify({\n query: this.#currentQuery,\n type: \"observerResultsUpdated\"\n });\n });\n }\n};\nfunction shouldLoadOnMount(query, options) {\n return resolveEnabled(options.enabled, query) !== false && query.state.data === void 0 && !(query.state.status === \"error\" && options.retryOnMount === false);\n}\nfunction shouldFetchOnMount(query, options) {\n return shouldLoadOnMount(query, options) || query.state.data !== void 0 && shouldFetchOn(query, options, options.refetchOnMount);\n}\nfunction shouldFetchOn(query, options, field) {\n if (resolveEnabled(options.enabled, query) !== false) {\n const value = typeof field === \"function\" ? field(query) : field;\n return value === \"always\" || value !== false && isStale(query, options);\n }\n return false;\n}\nfunction shouldFetchOptionally(query, prevQuery, options, prevOptions) {\n return (query !== prevQuery || resolveEnabled(prevOptions.enabled, query) === false) && (!options.suspense || query.state.status !== \"error\") && isStale(query, options);\n}\nfunction isStale(query, options) {\n return resolveEnabled(options.enabled, query) !== false && query.isStaleByTime(resolveStaleTime(options.staleTime, query));\n}\nfunction shouldAssignObserverCurrentProperties(observer, optimisticResult) {\n if (!shallowEqualObjects(observer.getCurrentResult(), optimisticResult)) {\n return true;\n }\n return false;\n}\nexport { QueryObserver };","map":{"version":3,"names":["isServer","isValidTimeout","noop","replaceData","resolveEnabled","resolveStaleTime","shallowEqualObjects","timeUntilStale","notifyManager","focusManager","Subscribable","fetchState","QueryObserver","constructor","client","options","selectError","bindMethods","setOptions","currentQuery","currentQueryInitialState","currentResult","currentResultState","currentResultOptions","selectFn","selectResult","lastQueryWithDefinedData","staleTimeoutId","refetchIntervalId","currentRefetchInterval","trackedProps","Set","refetch","bind","onSubscribe","listeners","size","addObserver","shouldFetchOnMount","executeFetch","updateResult","updateTimers","onUnsubscribe","hasListeners","destroy","shouldFetchOnReconnect","shouldFetchOn","refetchOnReconnect","shouldFetchOnWindowFocus","refetchOnWindowFocus","clearStaleTimeout","clearRefetchInterval","removeObserver","notifyOptions","prevOptions","prevQuery","defaultQueryOptions","enabled","Error","updateQuery","_defaulted","getQueryCache","notify","type","query","observer","mounted","shouldFetchOptionally","staleTime","updateStaleTimeout","nextRefetchInterval","computeRefetchInterval","updateRefetchInterval","getOptimisticResult","build","result","createResult","shouldAssignObserverCurrentProperties","state","getCurrentResult","trackResult","onPropTracked","trackedResult","Object","keys","forEach","key","defineProperty","configurable","enumerable","get","trackProp","add","getCurrentQuery","fetch","fetchOptimistic","defaultedOptions","isFetchingOptimistic","then","fetchOptions","cancelRefetch","#executeFetch","promise","throwOnError","catch","#updateStaleTimeout","isStale","time","dataUpdatedAt","timeout","setTimeout","#computeRefetchInterval","refetchInterval","#updateRefetchInterval","nextInterval","setInterval","refetchIntervalInBackground","isFocused","#updateTimers","#clearStaleTimeout","clearTimeout","#clearRefetchInterval","clearInterval","prevResult","prevResultState","prevResultOptions","queryChange","queryInitialState","newState","isPlaceholderData","data","_optimisticResults","fetchOnMount","fetchOptionally","fetchStatus","error","errorUpdatedAt","status","select","placeholderData","Date","now","isFetching","isPending","isError","isLoading","hasData","isSuccess","isInitialLoading","failureCount","fetchFailureCount","failureReason","fetchFailureReason","errorUpdateCount","isFetched","dataUpdateCount","isFetchedAfterMount","isRefetching","isLoadingError","isPaused","isRefetchError","nextResult","defaultNotifyOptions","shouldNotifyListeners","notifyOnChangeProps","notifyOnChangePropsValue","includedProps","some","typedKey","changed","has","#updateQuery","onQueryUpdate","#notify","batch","listener","shouldLoadOnMount","retryOnMount","refetchOnMount","field","value","suspense","isStaleByTime","optimisticResult"],"sources":["/Users/shoofle/Projects/the-forest/node_modules/@tanstack/query-core/src/queryObserver.ts"],"sourcesContent":["import {\n isServer,\n isValidTimeout,\n noop,\n replaceData,\n resolveEnabled,\n resolveStaleTime,\n shallowEqualObjects,\n timeUntilStale,\n} from './utils'\nimport { notifyManager } from './notifyManager'\nimport { focusManager } from './focusManager'\nimport { Subscribable } from './subscribable'\nimport { fetchState } from './query'\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 QueryOptions,\n RefetchOptions,\n} from './types'\n\ntype QueryObserverListener<TData, TError> = (\n result: QueryObserverResult<TData, TError>,\n) => void\n\nexport interface NotifyOptions {\n listeners?: boolean\n}\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?: ReturnType<typeof setTimeout>\n #refetchIntervalId?: ReturnType<typeof setInterval>\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 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 notifyOptions?: NotifyOptions,\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 resolveEnabled(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(notifyOptions)\n\n // Update stale interval if needed\n if (\n mounted &&\n (this.#currentQuery !== prevQuery ||\n resolveEnabled(this.options.enabled, this.#currentQuery) !==\n resolveEnabled(prevOptions.enabled, this.#currentQuery) ||\n resolveStaleTime(this.options.staleTime, this.#currentQuery) !==\n resolveStaleTime(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 resolveEnabled(this.options.enabled, this.#currentQuery) !==\n resolveEnabled(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 (shouldAssignObserverCurrentProperties(this, 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 const trackedResult = {} as QueryObserverResult<TData, TError>\n\n Object.keys(result).forEach((key) => {\n Object.defineProperty(trackedResult, key, {\n configurable: false,\n enumerable: true,\n get: () => {\n this.trackProp(key as keyof QueryObserverResult)\n onPropTracked?.(key as keyof QueryObserverResult)\n return result[key as keyof QueryObserverResult]\n },\n })\n })\n\n return trackedResult\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 query.isFetchingOptimistic = true\n\n return query.fetch().then(() => this.createResult(query, defaultedOptions))\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 as QueryOptions<TQueryFnData, TError, TQueryData, TQueryKey>,\n fetchOptions,\n )\n\n if (!fetchOptions?.throwOnError) {\n promise = promise.catch(noop)\n }\n\n return promise\n }\n\n #updateStaleTimeout(): void {\n this.#clearStaleTimeout()\n const staleTime = resolveStaleTime(\n this.options.staleTime,\n this.#currentQuery,\n )\n\n if (isServer || this.#currentResult.isStale || !isValidTimeout(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 = 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 isServer ||\n resolveEnabled(this.options.enabled, this.#currentQuery) === false ||\n !isValidTimeout(this.#currentRefetchInterval) ||\n this.#currentRefetchInterval === 0\n ) {\n return\n }\n\n this.#refetchIntervalId = 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) {\n clearTimeout(this.#staleTimeoutId)\n this.#staleTimeoutId = undefined\n }\n }\n\n #clearRefetchInterval(): void {\n if (this.#refetchIntervalId) {\n 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 // Select data if needed\n if (options.select && newState.data !== undefined) {\n // Memoize select result\n if (\n prevResult &&\n newState.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(newState.data)\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 }\n // Use query data\n else {\n data = newState.data as unknown as TData\n }\n\n // Show placeholder data 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 } else {\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 if (options.select && placeholderData !== undefined) {\n try {\n placeholderData = options.select(placeholderData)\n this.#selectError = null\n } catch (selectError) {\n this.#selectError = selectError as TError\n }\n }\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 if (this.#selectError) {\n error = this.#selectError as any\n data = this.#selectResult\n errorUpdatedAt = Date.now()\n status = 'error'\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: newState.dataUpdateCount > 0 || newState.errorUpdateCount > 0,\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 }\n\n return result as QueryObserverResult<TData, TError>\n }\n\n updateResult(notifyOptions?: NotifyOptions): void {\n const prevResult = this.#currentResult as\n | QueryObserverResult<TData, TError>\n | undefined\n\n const nextResult = this.createResult(this.#currentQuery, this.options)\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 // Determine which callbacks to trigger\n const defaultNotifyOptions: NotifyOptions = {}\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 return changed && includedProps.has(typedKey)\n })\n }\n\n if (notifyOptions?.listeners !== false && shouldNotifyListeners()) {\n defaultNotifyOptions.listeners = true\n }\n\n this.#notify({ ...defaultNotifyOptions, ...notifyOptions })\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 #notify(notifyOptions: NotifyOptions): void {\n notifyManager.batch(() => {\n // First, trigger the listeners\n if (notifyOptions.listeners) {\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\nfunction shouldLoadOnMount(\n query: Query<any, any, any, any>,\n options: QueryObserverOptions<any, any, any, any>,\n): boolean {\n return (\n resolveEnabled(options.enabled, query) !== false &&\n query.state.data === undefined &&\n !(query.state.status === 'error' && options.retryOnMount === false)\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 (resolveEnabled(options.enabled, query) !== false) {\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 resolveEnabled(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 resolveEnabled(options.enabled, query) !== false &&\n query.isStaleByTime(resolveStaleTime(options.staleTime, query))\n )\n}\n\n// this function would decide if we will update the observer's 'current'\n// properties after an optimistic reading via getOptimisticResult\nfunction shouldAssignObserverCurrentProperties<\n TQueryFnData = unknown,\n TError = unknown,\n TData = TQueryFnData,\n TQueryData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n observer: QueryObserver<TQueryFnData, TError, TData, TQueryData, TQueryKey>,\n optimisticResult: QueryObserverResult<TData, TError>,\n) {\n // if the newly created result isn't what the observer is holding as current,\n // then we'll need to update the properties as well\n if (!shallowEqualObjects(observer.getCurrentResult(), optimisticResult)) {\n return true\n }\n\n // basically, just keep previous properties if nothing changed\n return false\n}\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]} |