@@ -122,8 +122,6 @@ function getInstanceName(name?: string): string {
122
122
}
123
123
124
124
// reporting
125
- const fxIdMap = new Map < unknown , string > ( ) ;
126
-
127
125
function createReporter ( state : ReturnType < typeof createState > ) {
128
126
return ( m : Message ) : Record < string , unknown > | void => {
129
127
// errors
@@ -139,9 +137,7 @@ function createReporter(state: ReturnType<typeof createState>) {
139
137
140
138
// effects
141
139
if ( isEffectCall ( m ) ) {
142
- const name = getName ( m ) ;
143
- const callId = getEffectCallId ( m ) ;
144
- fxIdMap . set ( callId , name ) ;
140
+ saveEffectCall ( m ) ;
145
141
return {
146
142
type : `☄️ [effect] ${ m . name || "unknown" } ` ,
147
143
params : m . value ,
@@ -153,9 +149,7 @@ function createReporter(state: ReturnType<typeof createState>) {
153
149
}
154
150
155
151
if ( isEffectFinally ( m ) ) {
156
- const callId = getEffectCallId ( m ) ;
157
- const name = fxIdMap . get ( callId ) ! ;
158
- fxIdMap . delete ( callId ) ;
152
+ const name = getParentEffectName ( m ) ;
159
153
160
154
if ( ( m . value as any ) . status === "done" ) {
161
155
return {
@@ -255,6 +249,35 @@ function isForward(m: Message) {
255
249
return m . kind === "forward" ;
256
250
}
257
251
252
+ // effects tracking
253
+ const fxIdMap = new Map < unknown , string [ ] > ( ) ;
254
+
255
+ function getCallsById ( id : unknown ) {
256
+ if ( ! fxIdMap . has ( id ) ) {
257
+ fxIdMap . set ( id , [ ] ) ;
258
+ }
259
+ return fxIdMap . get ( id ) ! ;
260
+ }
261
+
262
+ function saveEffectCall ( m : Message ) {
263
+ const name = getName ( m ) ;
264
+ const callId = getEffectCallId ( m ) ;
265
+ const calls = getCallsById ( callId ) ;
266
+ calls . push ( name ) ;
267
+ }
268
+
269
+ function getParentEffectName ( m : Message ) {
270
+ const callId = getEffectCallId ( m ) ;
271
+ const calls = getCallsById ( callId ) ;
272
+ const name = calls . pop ( ) ;
273
+
274
+ if ( calls . length === 0 ) {
275
+ fxIdMap . delete ( callId ) ;
276
+ }
277
+
278
+ return name ;
279
+ }
280
+
258
281
// util
259
282
function isEffectorInternal ( m : Message ) {
260
283
return ! ! m . meta . named ;
0 commit comments