@@ -9,23 +9,22 @@ const enum ReactiveAccessType {
99 Call ,
1010}
1111
12- interface TsNode {
12+ interface TSNode {
1313 ast : ts . Node ;
1414 start : number ;
1515 end : number ;
1616}
1717
1818interface ReactiveNode {
19- binding ?: TsNode & {
20- isReactiveSource : boolean ;
19+ isDependency : boolean ;
20+ isDependent : boolean ;
21+ binding ?: TSNode & {
2122 accessTypes : ReactiveAccessType [ ] ;
2223 } ;
23- accessor ?: TsNode & {
24+ accessor ?: TSNode & {
2425 requiredAccess : boolean ;
2526 } ;
26- callback ?: TsNode & {
27- isReactiveEffect : boolean ;
28- } ;
27+ callback ?: TSNode ;
2928}
3029
3130const analyzeCache = new WeakMap < ts . SourceFile , ReturnType < typeof analyze > > ( ) ;
@@ -72,10 +71,7 @@ export function getReactiveReferences(
7271 const dependents = info . binding ? findDependents ( info . binding . ast , info . binding . accessTypes ) : [ ] ;
7372 const dependencies = findDependencies ( info ) ;
7473
75- if ( ! info . callback ?. isReactiveEffect && ! dependents . length ) {
76- return ;
77- }
78- if ( ! info . binding ?. isReactiveSource && ! dependencies . length ) {
74+ if ( ( ! info . isDependent && ! dependents . length ) || ( ! info . isDependency && ! dependencies . length ) ) {
7975 return ;
8076 }
8177
@@ -124,8 +120,8 @@ export function getReactiveReferences(
124120 }
125121 visited . add ( signal ) ;
126122
127- const nodes : TsNode [ ] = [ ] ;
128- let hasReactiveSource = ! ! signal . binding ?. isReactiveSource ;
123+ const nodes : TSNode [ ] = [ ] ;
124+ let hasDependency = signal . isDependency ;
129125
130126 if ( signal . accessor ) {
131127 const { requiredAccess } = signal . accessor ;
@@ -144,13 +140,13 @@ export function getReactiveReferences(
144140 } ) ;
145141 }
146142
147- if ( ! hasReactiveSource ) {
143+ if ( ! hasDependency ) {
148144 return [ ] ;
149145 }
150146
151147 return nodes ;
152148
153- function visit ( node : TsNode , requiredAccess : boolean , parentIsPropertyAccess = false ) {
149+ function visit ( node : TSNode , requiredAccess : boolean , parentIsPropertyAccess = false ) {
154150 if ( ! requiredAccess ) {
155151 if ( ! parentIsPropertyAccess && ts . isIdentifier ( node . ast ) ) {
156152 const definition = languageService . getDefinitionAtPosition ( sourceFile . fileName , node . start ) ;
@@ -164,14 +160,14 @@ export function getReactiveReferences(
164160 }
165161 if ( signal . binding ) {
166162 nodes . push ( signal . binding ) ;
167- hasReactiveSource ||= signal . binding . isReactiveSource ;
163+ hasDependency ||= signal . isDependency ;
168164 }
169165 if ( signal . callback ) {
170166 nodes . push ( signal . callback ) ;
171167 }
172168 const deps = findDependencies ( signal , visited ) ;
173169 nodes . push ( ...deps ) ;
174- hasReactiveSource ||= deps . length > 0 ;
170+ hasDependency ||= deps . length > 0 ;
175171 }
176172 }
177173 }
@@ -197,23 +193,23 @@ export function getReactiveReferences(
197193 if ( ts . isPropertyAccessExpression ( node . ast ) ) {
198194 if ( accessType === ReactiveAccessType . ValueProperty && node . ast . name . text === 'value' ) {
199195 nodes . push ( signal . binding ) ;
200- hasReactiveSource ||= signal . binding . isReactiveSource ;
196+ hasDependency ||= signal . isDependency ;
201197 }
202198 if ( accessType === ReactiveAccessType . AnyProperty && node . ast . name . text !== '' ) {
203199 nodes . push ( signal . binding ) ;
204- hasReactiveSource ||= signal . binding . isReactiveSource ;
200+ hasDependency ||= signal . isDependency ;
205201 }
206202 }
207203 else if ( ts . isElementAccessExpression ( node . ast ) ) {
208204 if ( accessType === ReactiveAccessType . AnyProperty ) {
209205 nodes . push ( signal . binding ) ;
210- hasReactiveSource ||= signal . binding . isReactiveSource ;
206+ hasDependency ||= signal . isDependency ;
211207 }
212208 }
213209 else if ( ts . isCallExpression ( node . ast ) ) {
214210 if ( accessType === ReactiveAccessType . Call ) {
215211 nodes . push ( signal . binding ) ;
216- hasReactiveSource ||= signal . binding . isReactiveSource ;
212+ hasDependency ||= signal . isDependency ;
217213 }
218214 }
219215 }
@@ -225,7 +221,7 @@ export function getReactiveReferences(
225221 }
226222 const deps = findDependencies ( signal , visited ) ;
227223 nodes . push ( ...deps ) ;
228- hasReactiveSource ||= deps . length > 0 ;
224+ hasDependency ||= deps . length > 0 ;
229225 }
230226 }
231227 }
@@ -250,14 +246,14 @@ export function getReactiveReferences(
250246 . map ( range => {
251247 const sourceRange = toSourceRange ( range . start , range . end ) ;
252248 if ( sourceRange ) {
253- return findSubscribersWorker ( sourceRange . start , trackKinds , visited ) ;
249+ return findDependentsWorker ( sourceRange . start , trackKinds , visited ) ;
254250 }
255251 return [ ] ;
256252 } )
257253 . flat ( ) ;
258254 }
259255
260- function findSubscribersWorker ( pos : number , accessTypes : ReactiveAccessType [ ] , visited = new Set < number > ( ) ) {
256+ function findDependentsWorker ( pos : number , accessTypes : ReactiveAccessType [ ] , visited = new Set < number > ( ) ) {
261257 if ( visited . has ( pos ) ) {
262258 return [ ] ;
263259 }
@@ -290,13 +286,13 @@ export function getReactiveReferences(
290286 }
291287 }
292288 if ( match ) {
293- let hasReactiveEffect = ! ! effect . callback ?. isReactiveEffect ;
289+ let hasDependent = effect . isDependent ;
294290 if ( effect . binding ) {
295291 const dependents = findDependents ( effect . binding . ast , effect . binding . accessTypes , visited ) ;
296292 result . push ( ...dependents ) ;
297- hasReactiveEffect ||= dependents . length > 0 ;
293+ hasDependent ||= dependents . length > 0 ;
298294 }
299- if ( hasReactiveEffect ) {
295+ if ( hasDependent ) {
300296 result . push ( effect ) ;
301297 }
302298 }
@@ -351,10 +347,11 @@ function analyze(
351347 const nameRange = toSourceRange ( node . name . getStart ( sourceFile ) , node . name . end ) ;
352348 if ( nameRange ) {
353349 signals . push ( {
350+ isDependency : true ,
351+ isDependent : false ,
354352 binding : {
355353 ...nameRange ,
356354 ast : node . name ,
357- isReactiveSource : true ,
358355 accessTypes : [ ReactiveAccessType . ValueProperty ] ,
359356 } ,
360357 } ) ;
@@ -367,10 +364,11 @@ function analyze(
367364 const nameRange = toSourceRange ( node . name . getStart ( sourceFile ) , node . name . end ) ;
368365 if ( nameRange ) {
369366 signals . push ( {
367+ isDependency : true ,
368+ isDependent : false ,
370369 binding : {
371370 ...nameRange ,
372371 ast : node . name ,
373- isReactiveSource : true ,
374372 accessTypes : [ ReactiveAccessType . AnyProperty ] ,
375373 } ,
376374 } ) ;
@@ -386,10 +384,11 @@ function analyze(
386384 const bodyRange = toSourceRange ( node . body . getStart ( sourceFile ) , node . body . end ) ;
387385 if ( nameRange && bodyRange ) {
388386 signals . push ( {
387+ isDependency : false ,
388+ isDependent : false ,
389389 binding : {
390390 ...nameRange ,
391391 ast : node . name ,
392- isReactiveSource : false ,
393392 accessTypes : [ ReactiveAccessType . Call ] ,
394393 } ,
395394 accessor : {
@@ -400,7 +399,6 @@ function analyze(
400399 callback : {
401400 ...bodyRange ,
402401 ast : node . body ,
403- isReactiveEffect : false ,
404402 } ,
405403 } ) ;
406404 }
@@ -417,10 +415,11 @@ function analyze(
417415 const callbackRange = toSourceRange ( callback . getStart ( sourceFile ) , callback . end ) ;
418416 if ( nameRange && callbackRange ) {
419417 signals . push ( {
418+ isDependency : false ,
419+ isDependent : false ,
420420 binding : {
421421 ...nameRange ,
422422 ast : name ,
423- isReactiveSource : false ,
424423 accessTypes : [ ReactiveAccessType . Call ] ,
425424 } ,
426425 accessor : {
@@ -431,7 +430,6 @@ function analyze(
431430 callback : {
432431 ...callbackRange ,
433432 ast : callback ,
434- isReactiveEffect : false ,
435433 } ,
436434 } ) ;
437435 }
@@ -445,11 +443,12 @@ function analyze(
445443 const nameRange = toSourceRange ( node . name . getStart ( sourceFile ) , node . name . end ) ;
446444 if ( nameRange ) {
447445 signals . push ( {
446+ isDependency : true ,
447+ isDependent : false ,
448448 binding : {
449449 ...nameRange ,
450450 ast : node . name ,
451451 accessTypes : [ ReactiveAccessType . ValueProperty ] ,
452- isReactiveSource : true ,
453452 } ,
454453 } ) ;
455454 }
@@ -465,6 +464,8 @@ function analyze(
465464 const callbackRange = toSourceRange ( callback . getStart ( sourceFile ) , callback . end ) ;
466465 if ( callbackRange ) {
467466 signals . push ( {
467+ isDependency : false ,
468+ isDependent : true ,
468469 accessor : {
469470 ...callbackRange ,
470471 ast : callback . body ,
@@ -473,7 +474,6 @@ function analyze(
473474 callback : {
474475 ...callbackRange ,
475476 ast : callback . body ,
476- isReactiveEffect : true ,
477477 } ,
478478 } ) ;
479479 }
@@ -488,6 +488,8 @@ function analyze(
488488 if ( depsRange && effectRange ) {
489489 if ( ts . isArrowFunction ( depsCallback ) || ts . isFunctionExpression ( depsCallback ) ) {
490490 signals . push ( {
491+ isDependency : false ,
492+ isDependent : true ,
491493 accessor : {
492494 ...depsRange ,
493495 ast : depsCallback . body ,
@@ -496,12 +498,13 @@ function analyze(
496498 callback : {
497499 ...effectRange ,
498500 ast : effectCallback . body ,
499- isReactiveEffect : true ,
500501 } ,
501502 } ) ;
502503 }
503504 else {
504505 signals . push ( {
506+ isDependency : false ,
507+ isDependent : true ,
505508 accessor : {
506509 ...depsRange ,
507510 ast : depsCallback ,
@@ -510,7 +513,6 @@ function analyze(
510513 callback : {
511514 ...effectRange ,
512515 ast : effectCallback . body ,
513- isReactiveEffect : true ,
514516 } ,
515517 } ) ;
516518 }
@@ -525,14 +527,15 @@ function analyze(
525527 binding = {
526528 ...nameRange ,
527529 ast : call . parent . name ,
528- isReactiveSource : true ,
529530 accessTypes : [ ReactiveAccessType . AnyProperty , ReactiveAccessType . Call ] ,
530531 } ;
531532 }
532533 }
533534 const callRange = toSourceRange ( call . getStart ( sourceFile ) , call . end ) ;
534535 if ( callRange ) {
535536 signals . push ( {
537+ isDependency : true ,
538+ isDependent : false ,
536539 binding,
537540 accessor : {
538541 ...callRange ,
@@ -552,14 +555,15 @@ function analyze(
552555 binding = {
553556 ...nameRange ,
554557 ast : call . parent . name ,
555- isReactiveSource : true ,
556558 accessTypes : [ ReactiveAccessType . ValueProperty ] ,
557559 } ;
558560 }
559561 }
560562 const argRange = toSourceRange ( arg . getStart ( sourceFile ) , arg . end ) ;
561563 if ( argRange ) {
562564 signals . push ( {
565+ isDependency : true ,
566+ isDependent : true ,
563567 binding,
564568 accessor : {
565569 ...argRange ,
@@ -569,7 +573,6 @@ function analyze(
569573 callback : {
570574 ...argRange ,
571575 ast : arg . body ,
572- isReactiveEffect : true ,
573576 } ,
574577 } ) ;
575578 }
@@ -582,14 +585,15 @@ function analyze(
582585 binding = {
583586 ...nameRange ,
584587 ast : call . parent . name ,
585- isReactiveSource : true ,
586588 accessTypes : [ ReactiveAccessType . ValueProperty ] ,
587589 } ;
588590 }
589591 }
590592 const argRange = toSourceRange ( arg . getStart ( sourceFile ) , arg . end ) ;
591593 if ( argRange ) {
592594 signals . push ( {
595+ isDependency : true ,
596+ isDependent : false ,
593597 binding,
594598 accessor : {
595599 ...argRange ,
@@ -609,7 +613,6 @@ function analyze(
609613 binding = {
610614 ...nameRange ,
611615 ast : call . parent . name ,
612- isReactiveSource : true ,
613616 accessTypes : [ ReactiveAccessType . ValueProperty ] ,
614617 } ;
615618 }
@@ -620,6 +623,8 @@ function analyze(
620623 const callbackRange = toSourceRange ( callback . getStart ( sourceFile ) , callback . end ) ;
621624 if ( callbackRange ) {
622625 signals . push ( {
626+ isDependency : true ,
627+ isDependent : true ,
623628 binding,
624629 accessor : {
625630 ...callbackRange ,
@@ -629,7 +634,6 @@ function analyze(
629634 callback : {
630635 ...callbackRange ,
631636 ast : callback . body ,
632- isReactiveEffect : true ,
633637 } ,
634638 } ) ;
635639 }
@@ -639,6 +643,8 @@ function analyze(
639643 const bodyRange = toSourceRange ( prop . body . getStart ( sourceFile ) , prop . body . end ) ;
640644 if ( bodyRange ) {
641645 signals . push ( {
646+ isDependency : true ,
647+ isDependent : true ,
642648 binding,
643649 accessor : {
644650 ...bodyRange ,
@@ -648,7 +654,6 @@ function analyze(
648654 callback : {
649655 ...bodyRange ,
650656 ast : prop . body ,
651- isReactiveEffect : true ,
652657 } ,
653658 } ) ;
654659 }
0 commit comments