From 98b68c239da235a918847f083813de3e3a6c4e08 Mon Sep 17 00:00:00 2001 From: TkDodo Date: Mon, 1 Sep 2025 13:39:51 +0200 Subject: [PATCH 1/3] ref: rename queryFn to streamFn in streamedQuery this avoids the weirdly double-nested queryFn naming --- .../src/__tests__/streamedQuery.test.tsx | 18 +++++++++--------- packages/query-core/src/streamedQuery.ts | 6 +++--- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/query-core/src/__tests__/streamedQuery.test.tsx b/packages/query-core/src/__tests__/streamedQuery.test.tsx index 6eccf4536c..576d73fb5c 100644 --- a/packages/query-core/src/__tests__/streamedQuery.test.tsx +++ b/packages/query-core/src/__tests__/streamedQuery.test.tsx @@ -34,7 +34,7 @@ describe('streamedQuery', () => { const observer = new QueryObserver(queryClient, { queryKey: key, queryFn: streamedQuery({ - queryFn: () => createAsyncNumberGenerator(3), + streamFn: () => createAsyncNumberGenerator(3), }), }) @@ -78,7 +78,7 @@ describe('streamedQuery', () => { const observer = new QueryObserver(queryClient, { queryKey: key, queryFn: streamedQuery({ - queryFn: async function* () { + streamFn: async function* () { for await (const num of createAsyncNumberGenerator(3)) { yield [num, num] as const } @@ -133,7 +133,7 @@ describe('streamedQuery', () => { const observer = new QueryObserver(queryClient, { queryKey: key, queryFn: streamedQuery({ - queryFn: () => createAsyncNumberGenerator(2), + streamFn: () => createAsyncNumberGenerator(2), }), }) @@ -187,7 +187,7 @@ describe('streamedQuery', () => { const observer = new QueryObserver(queryClient, { queryKey: key, queryFn: streamedQuery({ - queryFn: () => createAsyncNumberGenerator(2), + streamFn: () => createAsyncNumberGenerator(2), refetchMode: 'append', }), }) @@ -243,7 +243,7 @@ describe('streamedQuery', () => { const observer = new QueryObserver(queryClient, { queryKey: key, queryFn: streamedQuery({ - queryFn: () => createAsyncNumberGenerator(2, offset), + streamFn: () => createAsyncNumberGenerator(2, offset), refetchMode: 'replace', }), }) @@ -300,7 +300,7 @@ describe('streamedQuery', () => { const observer = new QueryObserver(queryClient, { queryKey: key, queryFn: streamedQuery({ - queryFn: () => createAsyncNumberGenerator(3), + streamFn: () => createAsyncNumberGenerator(3), refetchMode: 'append', }), }) @@ -355,7 +355,7 @@ describe('streamedQuery', () => { const observer = new QueryObserver(queryClient, { queryKey: key, queryFn: streamedQuery({ - queryFn: (context) => { + streamFn: (context) => { // just consume the signal // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition const numbers = context.signal ? 3 : 0 @@ -396,7 +396,7 @@ describe('streamedQuery', () => { const observer = new QueryObserver(queryClient, { queryKey: key, queryFn: streamedQuery({ - queryFn: () => createAsyncNumberGenerator(3), + streamFn: () => createAsyncNumberGenerator(3), maxChunks: 2, }), }) @@ -441,7 +441,7 @@ describe('streamedQuery', () => { const observer = new QueryObserver(queryClient, { queryKey: key, queryFn: streamedQuery({ - queryFn: () => createAsyncNumberGenerator(3), + streamFn: () => createAsyncNumberGenerator(3), maxChunks: 2, refetchMode: 'append', }), diff --git a/packages/query-core/src/streamedQuery.ts b/packages/query-core/src/streamedQuery.ts index 03c36bf23a..ece53e07d9 100644 --- a/packages/query-core/src/streamedQuery.ts +++ b/packages/query-core/src/streamedQuery.ts @@ -20,11 +20,11 @@ export function streamedQuery< TQueryFnData = unknown, TQueryKey extends QueryKey = QueryKey, >({ - queryFn, + streamFn, refetchMode = 'reset', maxChunks, }: { - queryFn: ( + streamFn: ( context: QueryFunctionContext, ) => AsyncIterable | Promise> refetchMode?: 'append' | 'reset' | 'replace' @@ -46,7 +46,7 @@ export function streamedQuery< } let result: Array = [] - const stream = await queryFn(context) + const stream = await streamFn(context) for await (const chunk of stream) { if (context.signal.aborted) { From 8af2be0306c398832ba94e0f593e82e01212b322 Mon Sep 17 00:00:00 2001 From: TkDodo Date: Wed, 3 Sep 2025 12:57:05 +0200 Subject: [PATCH 2/3] chore: docs --- docs/reference/streamedQuery.md | 6 +++--- examples/react/chat/src/chat.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/reference/streamedQuery.md b/docs/reference/streamedQuery.md index c02cc907ba..1d21b09def 100644 --- a/docs/reference/streamedQuery.md +++ b/docs/reference/streamedQuery.md @@ -13,7 +13,7 @@ import { experimental_streamedQuery as streamedQuery } from '@tanstack/react-que const query = queryOptions({ queryKey: ['data'], queryFn: streamedQuery({ - queryFn: fetchDataInChunks, + streamFn: fetchDataInChunks, }), }) ``` @@ -22,9 +22,9 @@ const query = queryOptions({ **Options** -- `queryFn: (context: QueryFunctionContext) => Promise>` +- `streamFn: (context: QueryFunctionContext) => Promise>` - **Required** - - The function that returns a Promise of an AsyncIterable of data to stream in. + - The function that returns a Promise of an AsyncIterable with data to stream in. - Receives a [QueryFunctionContext](../../framework/react/guides/query-functions.md#queryfunctioncontext) - `refetchMode?: 'append' | 'reset' | 'replace` - Optional diff --git a/examples/react/chat/src/chat.ts b/examples/react/chat/src/chat.ts index e806ed7cc0..5f938a7611 100644 --- a/examples/react/chat/src/chat.ts +++ b/examples/react/chat/src/chat.ts @@ -27,7 +27,7 @@ export const chatQueryOptions = (question: string) => queryOptions({ queryKey: ['chat', question], queryFn: streamedQuery({ - queryFn: () => chatAnswer(question), + streamFn: () => chatAnswer(question), }), staleTime: Infinity, }) From dd12c6cb62b69a426c7e1c62a558909fdd0bd129 Mon Sep 17 00:00:00 2001 From: TkDodo Date: Thu, 4 Sep 2025 11:07:32 +0200 Subject: [PATCH 3/3] fix: docs --- docs/reference/streamedQuery.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/reference/streamedQuery.md b/docs/reference/streamedQuery.md index e7ec4a6667..8c70475ba3 100644 --- a/docs/reference/streamedQuery.md +++ b/docs/reference/streamedQuery.md @@ -26,7 +26,7 @@ const query = queryOptions({ - **Required** - The function that returns a Promise of an AsyncIterable with data to stream in. - Receives a [QueryFunctionContext](../../framework/react/guides/query-functions.md#queryfunctioncontext) -- `refetchMode?: 'append' | 'reset' | 'replace` +- `refetchMode?: 'append' | 'reset' | 'replace'` - Optional - Defines how refetches are handled. - Defaults to `'reset'`