5
5
import { isRedirect } from '@tanstack/router-core'
6
6
import type { AnyRouter } from '@tanstack/router-core'
7
7
import type {
8
+ DehydrateOptions ,
9
+ HydrateOptions ,
8
10
QueryClient ,
9
11
DehydratedState as QueryDehydratedState ,
10
12
} from '@tanstack/query-core'
@@ -20,6 +22,8 @@ export type RouterSsrQueryOptions<TRouter extends AnyRouter> = {
20
22
* @link [Guide](https://tanstack.com/router/latest/docs/framework/react/api/router/redirectFunction)
21
23
*/
22
24
handleRedirects ?: boolean
25
+ hydrateOptions ?: Omit < HydrateOptions , 'shouldDehydrateQuery' >
26
+ dehydrateOptions ?: DehydrateOptions
23
27
}
24
28
25
29
type DehydratedRouterQueryState = {
@@ -31,6 +35,8 @@ export function setupCoreRouterSsrQueryIntegration<TRouter extends AnyRouter>({
31
35
router,
32
36
queryClient,
33
37
handleRedirects = true ,
38
+ dehydrateOptions,
39
+ hydrateOptions,
34
40
} : RouterSsrQueryOptions < TRouter > ) {
35
41
const ogHydrate = router . options . hydrate
36
42
const ogDehydrate = router . options . dehydrate
@@ -50,7 +56,10 @@ export function setupCoreRouterSsrQueryIntegration<TRouter extends AnyRouter>({
50
56
queryStream : queryStream . stream ,
51
57
}
52
58
53
- const dehydratedQueryClient = queryDehydrate ( queryClient )
59
+ const dehydratedQueryClient = queryDehydrate (
60
+ queryClient ,
61
+ dehydrateOptions ,
62
+ )
54
63
if ( dehydratedQueryClient . queries . length > 0 ) {
55
64
dehydratedQueryClient . queries . forEach ( ( query ) => {
56
65
sentQueries . add ( query . queryHash )
@@ -93,6 +102,7 @@ export function setupCoreRouterSsrQueryIntegration<TRouter extends AnyRouter>({
93
102
sentQueries . add ( event . query . queryHash )
94
103
queryStream . enqueue (
95
104
queryDehydrate ( queryClient , {
105
+ ...hydrateOptions ,
96
106
shouldDehydrateQuery : ( query ) => {
97
107
if ( query . queryHash === event . query . queryHash ) {
98
108
return (
@@ -110,15 +120,19 @@ export function setupCoreRouterSsrQueryIntegration<TRouter extends AnyRouter>({
110
120
await ogHydrate ?.( dehydrated )
111
121
// hydrate the query client with the dehydrated data (if it was dehydrated on the server)
112
122
if ( dehydrated . dehydratedQueryClient ) {
113
- queryHydrate ( queryClient , dehydrated . dehydratedQueryClient )
123
+ queryHydrate (
124
+ queryClient ,
125
+ dehydrated . dehydratedQueryClient ,
126
+ hydrateOptions ,
127
+ )
114
128
}
115
129
116
130
// read the query stream and hydrate the queries as they come in
117
131
const reader = dehydrated . queryStream . getReader ( )
118
132
reader
119
133
. read ( )
120
134
. then ( async function handle ( { done, value } ) {
121
- queryHydrate ( queryClient , value )
135
+ queryHydrate ( queryClient , value , hydrateOptions )
122
136
if ( done ) {
123
137
return
124
138
}
0 commit comments