| "use client"; | |
| // src/useBaseQuery.ts | |
| import * as React from "react"; | |
| import { environmentManager, noop, notifyManager } from "@tanstack/query-core"; | |
| import { useQueryClient } from "./QueryClientProvider.js"; | |
| import { useQueryErrorResetBoundary } from "./QueryErrorResetBoundary.js"; | |
| import { | |
| ensurePreventErrorBoundaryRetry, | |
| getHasError, | |
| useClearResetErrorBoundary | |
| } from "./errorBoundaryUtils.js"; | |
| import { useIsRestoring } from "./IsRestoringProvider.js"; | |
| import { | |
| ensureSuspenseTimers, | |
| fetchOptimistic, | |
| shouldSuspend, | |
| willFetch | |
| } from "./suspense.js"; | |
| function useBaseQuery(options, Observer, queryClient) { | |
| var _a, _b, _c, _d; | |
| if (process.env.NODE_ENV !== "production") { | |
| if (typeof options !== "object" || Array.isArray(options)) { | |
| throw new Error( | |
| 'Bad argument type. Starting with v5, only the "Object" form is allowed when calling query related functions. Please use the error stack to find the culprit call. More info here: https://tanstack.com/query/latest/docs/react/guides/migrating-to-v5#supports-a-single-signature-one-object' | |
| ); | |
| } | |
| } | |
| const isRestoring = useIsRestoring(); | |
| const errorResetBoundary = useQueryErrorResetBoundary(); | |
| const client = useQueryClient(queryClient); | |
| const defaultedOptions = client.defaultQueryOptions(options); | |
| (_b = (_a = client.getDefaultOptions().queries) == null ? void 0 : _a._experimental_beforeQuery) == null ? void 0 : _b.call( | |
| _a, | |
| defaultedOptions | |
| ); | |
| const query = client.getQueryCache().get(defaultedOptions.queryHash); | |
| if (process.env.NODE_ENV !== "production") { | |
| if (!defaultedOptions.queryFn) { | |
| console.error( | |
| `[${defaultedOptions.queryHash}]: No queryFn was passed as an option, and no default queryFn was found. The queryFn parameter is only optional when using a default queryFn. More info here: https://tanstack.com/query/latest/docs/framework/react/guides/default-query-function` | |
| ); | |
| } | |
| } | |
| const subscribed = options.subscribed !== false; | |
| defaultedOptions._optimisticResults = isRestoring ? "isRestoring" : subscribed ? "optimistic" : void 0; | |
| ensureSuspenseTimers(defaultedOptions); | |
| ensurePreventErrorBoundaryRetry(defaultedOptions, errorResetBoundary, query); | |
| useClearResetErrorBoundary(errorResetBoundary); | |
| const isNewCacheEntry = !client.getQueryCache().get(defaultedOptions.queryHash); | |
| const [observer] = React.useState( | |
| () => new Observer( | |
| client, | |
| defaultedOptions | |
| ) | |
| ); | |
| const result = observer.getOptimisticResult(defaultedOptions); | |
| const shouldSubscribe = !isRestoring && subscribed; | |
| React.useSyncExternalStore( | |
| React.useCallback( | |
| (onStoreChange) => { | |
| const unsubscribe = shouldSubscribe ? observer.subscribe(notifyManager.batchCalls(onStoreChange)) : noop; | |
| observer.updateResult(); | |
| return unsubscribe; | |
| }, | |
| [observer, shouldSubscribe] | |
| ), | |
| () => observer.getCurrentResult(), | |
| () => observer.getCurrentResult() | |
| ); | |
| React.useEffect(() => { | |
| observer.setOptions(defaultedOptions); | |
| }, [defaultedOptions, observer]); | |
| if (shouldSuspend(defaultedOptions, result)) { | |
| throw fetchOptimistic(defaultedOptions, observer, errorResetBoundary); | |
| } | |
| if (getHasError({ | |
| result, | |
| errorResetBoundary, | |
| throwOnError: defaultedOptions.throwOnError, | |
| query, | |
| suspense: defaultedOptions.suspense | |
| })) { | |
| throw result.error; | |
| } | |
| ; | |
| (_d = (_c = client.getDefaultOptions().queries) == null ? void 0 : _c._experimental_afterQuery) == null ? void 0 : _d.call( | |
| _c, | |
| defaultedOptions, | |
| result | |
| ); | |
| if (defaultedOptions.experimental_prefetchInRender && !environmentManager.isServer() && willFetch(result, isRestoring)) { | |
| const promise = isNewCacheEntry ? ( | |
| // Fetch immediately on render in order to ensure `.promise` is resolved even if the component is unmounted | |
| fetchOptimistic(defaultedOptions, observer, errorResetBoundary) | |
| ) : ( | |
| // subscribe to the "cache promise" so that we can finalize the currentThenable once data comes in | |
| query == null ? void 0 : query.promise | |
| ); | |
| promise == null ? void 0 : promise.catch(noop).finally(() => { | |
| observer.updateResult(); | |
| }); | |
| } | |
| return !defaultedOptions.notifyOnChangeProps ? observer.trackResult(result) : result; | |
| } | |
| export { | |
| useBaseQuery | |
| }; | |
| //# sourceMappingURL=useBaseQuery.js.map |
Xet Storage Details
- Size:
- 4.36 kB
- Xet hash:
- b6c65d24f3f2b8043e1f46c3792a13f55516592dfe899f1272df1955a964d612
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.