@@ -14,6 +14,7 @@ import type {
14
14
BundlerConfig ,
15
15
ModuleMetaData ,
16
16
ModuleReference ,
17
+ ModuleKey ,
17
18
} from './ReactFlightServerConfig' ;
18
19
19
20
import {
@@ -28,6 +29,7 @@ import {
28
29
processSymbolChunk ,
29
30
processErrorChunk ,
30
31
resolveModuleMetaData ,
32
+ getModuleKey ,
31
33
isModuleReference ,
32
34
} from './ReactFlightServerConfig' ;
33
35
@@ -79,6 +81,7 @@ export type Request = {
79
81
completedJSONChunks : Array < Chunk > ,
80
82
completedErrorChunks : Array < Chunk > ,
81
83
writtenSymbols : Map < Symbol , number> ,
84
+ writtenModules : Map < ModuleKey , number> ,
82
85
flowing : boolean ,
83
86
toJSON : ( key : string , value : ReactModel ) => ReactJSONValue ,
84
87
} ;
@@ -101,6 +104,7 @@ export function createRequest(
101
104
completedJSONChunks : [ ] ,
102
105
completedErrorChunks : [ ] ,
103
106
writtenSymbols : new Map ( ) ,
107
+ writtenModules : new Map ( ) ,
104
108
flowing : false ,
105
109
toJSON : function ( key : string , value : ReactModel ) : ReactJSONValue {
106
110
return resolveModelToJSON ( request , this , key , value ) ;
@@ -420,6 +424,11 @@ export function resolveModelToJSON(
420
424
if (typeof value === 'object') {
421
425
if ( isModuleReference ( value ) ) {
422
426
const moduleReference : ModuleReference < any > = ( value : any ) ;
427
+ const moduleKey : ModuleKey = getModuleKey ( moduleReference ) ;
428
+ const existingId = request . writtenModules . get ( moduleKey ) ;
429
+ if ( existingId !== undefined ) {
430
+ return serializeByValueID ( existingId ) ;
431
+ }
423
432
try {
424
433
const moduleMetaData : ModuleMetaData = resolveModuleMetaData (
425
434
request . bundlerConfig ,
0 commit comments