(
options: Accessor<
UseBaseQueryOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>
>,
Observer: typeof QueryObserver,
queryClient?: Accessor<QueryClient>,
)
| 101 | |
| 102 | // Base Query Function that is used to create the query. |
| 103 | export function useBaseQuery< |
| 104 | TQueryFnData, |
| 105 | TError, |
| 106 | TData, |
| 107 | TQueryData, |
| 108 | TQueryKey extends QueryKey, |
| 109 | >( |
| 110 | options: Accessor< |
| 111 | UseBaseQueryOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey> |
| 112 | >, |
| 113 | Observer: typeof QueryObserver, |
| 114 | queryClient?: Accessor<QueryClient>, |
| 115 | ) { |
| 116 | type ResourceData = QueryObserverResult<TData, TError> |
| 117 | |
| 118 | const client = createMemo(() => useQueryClient(queryClient?.())) |
| 119 | const isRestoring = useIsRestoring() |
| 120 | // There are times when we run a query on the server but the resource is never read |
| 121 | // This could lead to times when the queryObserver is unsubscribed before the resource has loaded |
| 122 | // Causing a time out error. To prevent this we will queue the unsubscribe if the cleanup is called |
| 123 | // before the resource has loaded |
| 124 | let unsubscribeQueued = false |
| 125 | |
| 126 | const defaultedOptions = createMemo(() => { |
| 127 | const defaultOptions = client().defaultQueryOptions(options()) |
| 128 | defaultOptions._optimisticResults = isRestoring() |
| 129 | ? 'isRestoring' |
| 130 | : 'optimistic' |
| 131 | defaultOptions.structuralSharing = false |
| 132 | if (isServer) { |
| 133 | defaultOptions.retry = false |
| 134 | defaultOptions.throwOnError = true |
| 135 | } |
| 136 | return defaultOptions |
| 137 | }) |
| 138 | const initialOptions = defaultedOptions() |
| 139 | |
| 140 | const [observer, setObserver] = createSignal( |
| 141 | new Observer(client(), defaultedOptions()), |
| 142 | ) |
| 143 | |
| 144 | let observerResult = observer().getOptimisticResult(defaultedOptions()) |
| 145 | const [state, setState] = |
| 146 | createStore<QueryObserverResult<TData, TError>>(observerResult) |
| 147 | |
| 148 | const createServerSubscriber = ( |
| 149 | resolve: ( |
| 150 | data: ResourceData | PromiseLike<ResourceData | undefined> | undefined, |
| 151 | ) => void, |
| 152 | reject: (reason?: any) => void, |
| 153 | ) => { |
| 154 | return observer().subscribe((result) => { |
| 155 | notifyManager.batchCalls(() => { |
| 156 | const query = observer().getCurrentQuery() |
| 157 | const unwrappedResult = hydratableObserverResult(query, result) |
| 158 | |
| 159 | if (unwrappedResult.isError) { |
| 160 | reject(unwrappedResult.error) |
no test coverage detected
searching dependent graphs…