@@ -877,7 +877,9 @@ class ResourceResult extends PromiseResult {
877
877
class SerializerResult extends PromiseResult {
878
878
constructor (
879
879
public $resolved$ : boolean ,
880
- public $value$ : unknown
880
+ public $value$ : unknown ,
881
+ public $effects$ : null | Set < EffectSubscription > ,
882
+ public $qrl$ : QRLInternal | null
881
883
) {
882
884
super ( $resolved$ , $value$ ) ;
883
885
}
@@ -1126,7 +1128,7 @@ async function serialize(serializationContext: SerializationContext): Promise<vo
1126
1128
const result = value [ SerializerSymbol ] ( value ) ;
1127
1129
if ( isPromise ( result ) ) {
1128
1130
const forwardRef = $resolvePromise$ ( result , $addRoot$ , ( resolved , resolvedValue ) => {
1129
- return new SerializerResult ( resolved , resolvedValue ) ;
1131
+ return new SerializerResult ( resolved , resolvedValue , null , null ) ;
1130
1132
} ) ;
1131
1133
output ( TypeIds . ForwardRef , forwardRef ) ;
1132
1134
} else {
@@ -1154,13 +1156,27 @@ async function serialize(serializationContext: SerializationContext): Promise<vo
1154
1156
value . $ssrNode$ . vnodeData [ 0 ] |= VNodeDataFlag . SERIALIZE ;
1155
1157
output ( TypeIds . RefVNode , value . $ssrNode$ . id ) ;
1156
1158
} else if ( value instanceof SignalImpl ) {
1159
+ if ( value instanceof SerializerSignalImpl ) {
1160
+ const forwardRefId = $resolvePromise$ (
1161
+ $getCustomSerializerPromise$ ( value , value . $untrackedValue$ ) ,
1162
+ $addRoot$ ,
1163
+ ( resolved , resolvedValue ) => {
1164
+ return new SerializerResult (
1165
+ resolved ,
1166
+ resolvedValue ,
1167
+ value . $effects$ ,
1168
+ value . $computeQrl$
1169
+ ) ;
1170
+ }
1171
+ ) ;
1172
+ output ( TypeIds . ForwardRef , forwardRefId ) ;
1173
+ return ;
1174
+ }
1157
1175
/**
1158
1176
* Special case: when a Signal value is an SSRNode, it always needs to be a DOM ref instead.
1159
1177
* It can never be meant to become a vNode, because vNodes are internal only.
1160
1178
*/
1161
- const isSerialized = value instanceof SerializerSignalImpl ;
1162
1179
const v : unknown =
1163
- ! isSerialized &&
1164
1180
value instanceof ComputedSignalImpl &&
1165
1181
( value . $flags$ & SignalFlags . INVALID || fastSkipSerialize ( value . $untrackedValue$ ) )
1166
1182
? NEEDS_COMPUTATION
@@ -1182,13 +1198,9 @@ async function serialize(serializationContext: SerializationContext): Promise<vo
1182
1198
value . $effects$ ,
1183
1199
] ;
1184
1200
if ( v !== NEEDS_COMPUTATION ) {
1185
- if ( isSerialized ) {
1186
- out . push ( $getCustomSerializerPromise$ ( value , v ) ) ;
1187
- } else {
1188
- out . push ( v ) ;
1189
- }
1201
+ out . push ( v ) ;
1190
1202
}
1191
- output ( isSerialized ? TypeIds . SerializerSignal : TypeIds . ComputedSignal , out ) ;
1203
+ output ( TypeIds . ComputedSignal , out ) ;
1192
1204
} else {
1193
1205
output ( TypeIds . Signal , [ v , ...( value . $effects$ || [ ] ) ] ) ;
1194
1206
}
@@ -1276,7 +1288,9 @@ async function serialize(serializationContext: SerializationContext): Promise<vo
1276
1288
if ( value instanceof ResourceResult ) {
1277
1289
output ( TypeIds . Resource , [ value . $resolved$ , value . $value$ , value . $effects$ ] ) ;
1278
1290
} else if ( value instanceof SerializerResult ) {
1279
- if ( value . $resolved$ ) {
1291
+ if ( value . $qrl$ ) {
1292
+ output ( TypeIds . SerializerSignal , [ value . $qrl$ , value . $effects$ , value . $value$ ] ) ;
1293
+ } else if ( value . $resolved$ ) {
1280
1294
writeValue ( value . $value$ ) ;
1281
1295
} else {
1282
1296
console . error ( value . $value$ ) ;
0 commit comments