@@ -4,11 +4,15 @@ import type {
4
4
} from "../dom/ssr/routeModules" ;
5
5
import type { DataWithResponseInit } from "../router/utils" ;
6
6
import type { Serializable } from "../server-runtime/single-fetch" ;
7
+ import type { unstable_SerializesTo } from "./serializes-to" ;
7
8
import type { Equal , Expect , Func , IsAny , Pretty } from "./utils" ;
8
9
9
10
// prettier-ignore
10
11
type Serialize < T > =
11
- // First, let type stay as-is if its already serializable...
12
+ // If type has a `SerializesTo` brand, use that type
13
+ T extends unstable_SerializesTo < infer To > ? To :
14
+
15
+ // Then, let type stay as-is if its already serializable...
12
16
T extends Serializable ? T :
13
17
14
18
// ...then don't allow functions to be serialized...
@@ -69,21 +73,38 @@ type __tests = [
69
73
Expect < Equal < ServerDataFrom < any > , undefined > > ,
70
74
Expect <
71
75
Equal <
72
- ServerDataFrom < ( ) => { a : string ; b : Date ; c : ( ) => boolean } > ,
73
- { a : string ; b : Date ; c : undefined }
76
+ ServerDataFrom <
77
+ ( ) => {
78
+ a : string ;
79
+ b : Date ;
80
+ c : ( ) => boolean ;
81
+ d : unstable_SerializesTo < number > ;
82
+ }
83
+ > ,
84
+ { a : string ; b : Date ; c : undefined ; d : number }
74
85
>
75
86
> ,
76
87
Expect <
77
88
Equal <
78
89
Pretty <
79
90
ServerDataFrom <
80
91
( ) =>
81
- | { json : string ; b : Date ; c : ( ) => boolean }
82
- | DataWithResponseInit < { data : string ; b : Date ; c : ( ) => boolean } >
92
+ | {
93
+ json : string ;
94
+ b : Date ;
95
+ c : ( ) => boolean ;
96
+ d : unstable_SerializesTo < number > ;
97
+ }
98
+ | DataWithResponseInit < {
99
+ data : string ;
100
+ b : Date ;
101
+ c : ( ) => boolean ;
102
+ d : unstable_SerializesTo < number > ;
103
+ } >
83
104
>
84
105
> ,
85
- | { json : string ; b : Date ; c : undefined }
86
- | { data : string ; b : Date ; c : undefined }
106
+ | { json : string ; b : Date ; c : undefined ; d : number }
107
+ | { data : string ; b : Date ; c : undefined ; d : number }
87
108
>
88
109
> ,
89
110
Expect < Equal < ServerDataFrom < ( ) => { a : string } | Response > , { a : string } > > ,
0 commit comments