MCPcopy Create free account
hub / github.com/TanStack/query / streamedQuery

Function streamedQuery

packages/query-core/src/streamedQuery.ts:75–144  ·  view source on GitHub ↗
({
  streamFn,
  refetchMode = 'reset',
  reducer = (items, chunk) =>
    addToEnd(items as Array<TQueryFnData>, chunk) as TData,
  initialValue = [] as TData,
}: StreamedQueryParams<TQueryFnData, TData, TQueryKey>)

Source from the content-addressed store, hash-verified

73 * ```
74 */
75export function streamedQuery<
76 TQueryFnData = unknown,
77 TData = Array<TQueryFnData>,
78 TQueryKey extends QueryKey = QueryKey,
79>({
80 streamFn,
81 refetchMode = 'reset',
82 reducer = (items, chunk) =>
83 addToEnd(items as Array<TQueryFnData>, chunk) as TData,
84 initialValue = [] as TData,
85}: StreamedQueryParams<TQueryFnData, TData, TQueryKey>): QueryFunction<
86 TData,
87 TQueryKey
88> {
89 return async (context) => {
90 const query = context.client
91 .getQueryCache()
92 .find({ queryKey: context.queryKey, exact: true })
93 const isRefetch = !!query && query.isFetched()
94 if (isRefetch && refetchMode === 'reset') {
95 query.setState({
96 ...query.resetState,
97 fetchStatus: 'fetching',
98 })
99 }
100
101 let result = initialValue
102
103 let cancelled: boolean = false as boolean
104 const streamFnContext = addConsumeAwareSignal<
105 OmitKeyof<typeof context, 'signal'>
106 >(
107 {
108 client: context.client,
109 meta: context.meta,
110 queryKey: context.queryKey,
111 pageParam: context.pageParam,
112 direction: context.direction,
113 },
114 () => context.signal,
115 () => (cancelled = true),
116 )
117
118 const stream = await streamFn(streamFnContext)
119
120 const isReplaceRefetch = isRefetch && refetchMode === 'replace'
121
122 for await (const chunk of stream) {
123 if (cancelled) {
124 break
125 }
126
127 if (isReplaceRefetch) {
128 // don't append to the cache directly when replace-refetching
129 result = reducer(result, chunk)
130 } else {
131 context.client.setQueryData<TData>(context.queryKey, (prev) =>
132 reducer(prev === undefined ? initialValue : prev, chunk),

Callers 3

chatQueryOptionsFunction · 0.85

Calls 8

addToEndFunction · 0.90
addConsumeAwareSignalFunction · 0.90
getQueryCacheMethod · 0.80
isFetchedMethod · 0.80
setStateMethod · 0.80
findMethod · 0.45
setQueryDataMethod · 0.45
getQueryDataMethod · 0.45

Tested by

no test coverage detected