@@ -78,6 +78,7 @@ export type Request = {
78
78
completedModuleChunks : Array < Chunk > ,
79
79
completedJSONChunks : Array < Chunk > ,
80
80
completedErrorChunks : Array < Chunk > ,
81
+ writtenSymbols : Map < Symbol , number> ,
81
82
flowing : boolean ,
82
83
toJSON : ( key : string , value : ReactModel ) => ReactJSONValue ,
83
84
} ;
@@ -99,6 +100,7 @@ export function createRequest(
99
100
completedModuleChunks : [ ] ,
100
101
completedJSONChunks : [ ] ,
101
102
completedErrorChunks : [ ] ,
103
+ writtenSymbols : new Map ( ) ,
102
104
flowing : false ,
103
105
toJSON : function ( key : string , value : ReactModel ) : ReactJSONValue {
104
106
return resolveModelToJSON ( request , this , key , value ) ;
@@ -522,6 +524,11 @@ export function resolveModelToJSON(
522
524
}
523
525
524
526
if ( typeof value === 'symbol ') {
527
+ const writtenSymbols = request . writtenSymbols ;
528
+ const existingId = writtenSymbols . get ( value ) ;
529
+ if ( existingId !== undefined ) {
530
+ return serializeByValueID ( existingId ) ;
531
+ }
525
532
const name = value . description ;
526
533
invariant (
527
534
Symbol . for ( name ) === value ,
@@ -535,6 +542,7 @@ export function resolveModelToJSON(
535
542
request . pendingChunks ++ ;
536
543
const symbolId = request . nextChunkId ++ ;
537
544
emitSymbolChunk ( request , symbolId , name ) ;
545
+ writtenSymbols . set ( value , symbolId ) ;
538
546
return serializeByValueID ( symbolId ) ;
539
547
}
540
548
0 commit comments