@@ -14,18 +14,26 @@ import { MyWeakMap, NODE_TYPE, onceWarnWithKeyAndFiber, safeCall } from "../shar
14
14
15
15
import type { fiberKey , refKey , RenderDispatch , RuntimeMap } from "./interface" ;
16
16
import type { MyReactFiberContainer , MyReactFiberNode } from "../runtimeFiber" ;
17
+ import type { MyReactHookNode } from "../runtimeHook" ;
17
18
import type { HMR } from "../share" ;
18
19
import type { createContext , MyReactElementNode , UpdateQueue } from "@my-react/react" ;
19
20
20
21
type Listeners = {
21
22
fiberInitial : Set < ( fiber : MyReactFiberNode ) => void > ;
22
23
fiberUpdate : Set < ( fiber : MyReactFiberNode ) => void > ;
24
+ fiberTrigger : Set < ( fiber : MyReactFiberNode , updater : UpdateQueue ) => void > ;
23
25
fiberUnmount : Set < ( fiber : MyReactFiberNode ) => void > ;
24
26
fiberHMR ?: Set < ( fiber : MyReactFiberNode ) => void > ;
27
+ fiberWarn ?: Set < ( fiber : MyReactFiberNode , ...args : any ) => void > ;
28
+ fiberError ?: Set < ( fiber : MyReactFiberNode , ...args : any ) => void > ;
25
29
fiberHasChange : Set < ( list : ListTree < MyReactFiberNode > ) => void > ;
26
- fiberTrigger : Set < ( fiber : MyReactFiberNode , updater : UpdateQueue ) => void > ;
27
30
performanceWarn ?: Set < ( fiber : MyReactFiberNode ) => void > ;
28
31
32
+ hookInitial : Set < ( hook : MyReactHookNode ) => void > ;
33
+ hookUpdate : Set < ( hook : MyReactHookNode ) => void > ;
34
+ hookTrigger : Set < ( hook : MyReactHookNode , updater : UpdateQueue ) => void > ;
35
+ hookUnmount : Set < ( hook : MyReactHookNode ) => void > ;
36
+
29
37
beforeCommit : Set < ( ) => void > ;
30
38
afterCommit : Set < ( ) => void > ;
31
39
beforeUpdate : Set < ( ) => void > ;
@@ -42,8 +50,14 @@ const getInitialValue = (): Listeners => {
42
50
fiberHasChange : new Set ( ) ,
43
51
fiberUnmount : new Set ( ) ,
44
52
fiberHMR : new Set ( ) ,
53
+ fiberWarn : new Set ( ) ,
54
+ fiberError : new Set ( ) ,
45
55
fiberTrigger : new Set ( ) ,
46
56
performanceWarn : new Set ( ) ,
57
+ hookInitial : new Set ( ) ,
58
+ hookUpdate : new Set ( ) ,
59
+ hookTrigger : new Set ( ) ,
60
+ hookUnmount : new Set ( ) ,
47
61
beforeCommit : new Set ( ) ,
48
62
afterCommit : new Set ( ) ,
49
63
beforeUpdate : new Set ( ) ,
@@ -57,7 +71,10 @@ const getInitialValue = (): Listeners => {
57
71
fiberHasChange : new Set ( ) ,
58
72
fiberUnmount : new Set ( ) ,
59
73
fiberTrigger : new Set ( ) ,
60
- performanceWarn : new Set ( ) ,
74
+ hookInitial : new Set ( ) ,
75
+ hookUpdate : new Set ( ) ,
76
+ hookTrigger : new Set ( ) ,
77
+ hookUnmount : new Set ( ) ,
61
78
beforeCommit : new Set ( ) ,
62
79
afterCommit : new Set ( ) ,
63
80
beforeUpdate : new Set ( ) ,
@@ -285,12 +302,52 @@ export class CustomRenderDispatch implements RenderDispatch {
285
302
set ?. add ?.( onceCb ) ;
286
303
}
287
304
305
+ onFiberWarn ( cb : ( _fiber : MyReactFiberNode , ...args : any ) => void ) {
306
+ const set = listenerMap . get ( this ) . fiberWarn ;
307
+
308
+ set ?. add ?.( cb ) ;
309
+
310
+ return ( ) => set ?. delete ?.( cb ) ;
311
+ }
312
+
313
+ onceFiberWarn ( cb : ( _fiber : MyReactFiberNode , ...args : any ) => void ) {
314
+ const set = listenerMap . get ( this ) . fiberWarn ;
315
+
316
+ const onceCb = ( _fiber : MyReactFiberNode ) => {
317
+ cb ( _fiber ) ;
318
+
319
+ set ?. delete ?.( onceCb ) ;
320
+ } ;
321
+
322
+ set ?. add ?.( onceCb ) ;
323
+ }
324
+
325
+ onFiberError ( cb : ( _fiber : MyReactFiberNode , ...args : any ) => void ) {
326
+ const set = listenerMap . get ( this ) . fiberError ;
327
+
328
+ set ?. add ?.( cb ) ;
329
+
330
+ return ( ) => set ?. delete ?.( cb ) ;
331
+ }
332
+
333
+ onceFiberError ( cb : ( _fiber : MyReactFiberNode , ...args : any ) => void ) {
334
+ const set = listenerMap . get ( this ) . fiberError ;
335
+
336
+ const onceCb = ( _fiber : MyReactFiberNode ) => {
337
+ cb ( _fiber ) ;
338
+
339
+ set ?. delete ?.( onceCb ) ;
340
+ } ;
341
+
342
+ set ?. add ?.( onceCb ) ;
343
+ }
344
+
288
345
onPerformanceWarn ( cb : ( _fiber : MyReactFiberNode ) => void ) {
289
346
const set = listenerMap . get ( this ) . performanceWarn ;
290
347
291
- set . add ( cb ) ;
348
+ set ? .add ?. ( cb ) ;
292
349
293
- return ( ) => set . delete ( cb ) ;
350
+ return ( ) => set ? .delete ?. ( cb ) ;
294
351
}
295
352
296
353
oncePerformanceWarn ( cb : ( _fiber : MyReactFiberNode ) => void ) {
@@ -299,6 +356,86 @@ export class CustomRenderDispatch implements RenderDispatch {
299
356
const onceCb = ( _fiber : MyReactFiberNode ) => {
300
357
cb ( _fiber ) ;
301
358
359
+ set ?. delete ?.( onceCb ) ;
360
+ } ;
361
+
362
+ set ?. add ?.( onceCb ) ;
363
+ }
364
+
365
+ onHookInitial ( cb : ( _hook : MyReactHookNode ) => void ) {
366
+ const set = listenerMap . get ( this ) . hookInitial ;
367
+
368
+ set . add ( cb ) ;
369
+
370
+ return ( ) => set . delete ( cb ) ;
371
+ }
372
+
373
+ onceHookInitial ( cb : ( _hook : MyReactHookNode ) => void ) {
374
+ const set = listenerMap . get ( this ) . hookInitial ;
375
+
376
+ const onceCb = ( _hook : MyReactHookNode ) => {
377
+ cb ( _hook ) ;
378
+
379
+ set . delete ( onceCb ) ;
380
+ } ;
381
+
382
+ set . add ( onceCb ) ;
383
+ }
384
+
385
+ onHookUpdate ( cb : ( _hook : MyReactHookNode ) => void ) {
386
+ const set = listenerMap . get ( this ) . hookUpdate ;
387
+
388
+ set . add ( cb ) ;
389
+
390
+ return ( ) => set . delete ( cb ) ;
391
+ }
392
+
393
+ onceHookUpdate ( cb : ( _hook : MyReactHookNode ) => void ) {
394
+ const set = listenerMap . get ( this ) . hookUpdate ;
395
+
396
+ const onceCb = ( _hook : MyReactHookNode ) => {
397
+ cb ( _hook ) ;
398
+
399
+ set . delete ( onceCb ) ;
400
+ } ;
401
+
402
+ set . add ( onceCb ) ;
403
+ }
404
+
405
+ onHookUnmount ( cb : ( _hook : MyReactHookNode ) => void ) {
406
+ const set = listenerMap . get ( this ) . hookUnmount ;
407
+
408
+ set . add ( cb ) ;
409
+
410
+ return ( ) => set . delete ( cb ) ;
411
+ }
412
+
413
+ onceHookUnmount ( cb : ( _hook : MyReactHookNode ) => void ) {
414
+ const set = listenerMap . get ( this ) . hookUnmount ;
415
+
416
+ const onceCb = ( _hook : MyReactHookNode ) => {
417
+ cb ( _hook ) ;
418
+
419
+ set . delete ( onceCb ) ;
420
+ } ;
421
+
422
+ set . add ( onceCb ) ;
423
+ }
424
+
425
+ onHookTrigger ( cb : ( _hook : MyReactHookNode , _updater : UpdateQueue ) => void ) {
426
+ const set = listenerMap . get ( this ) . hookTrigger ;
427
+
428
+ set . add ( cb ) ;
429
+
430
+ return ( ) => set . delete ( cb ) ;
431
+ }
432
+
433
+ onceHookTrigger ( cb : ( _hook : MyReactHookNode , _updater : UpdateQueue ) => void ) {
434
+ const set = listenerMap . get ( this ) . hookTrigger ;
435
+
436
+ const onceCb = ( _hook : MyReactHookNode , _updater : UpdateQueue ) => {
437
+ cb ( _hook , _updater ) ;
438
+
302
439
set . delete ( onceCb ) ;
303
440
} ;
304
441
0 commit comments