@@ -54,6 +54,8 @@ const calcDepFlagsStep = (node) => {
5454 // If this is a peer edge, mark the target as peer
5555 if ( peer ) {
5656 to . peer = true
57+ } else if ( to . peer && ! hasIncomingPeerEdge ( to ) ) {
58+ unsetFlag ( to , 'peer' )
5759 }
5860
5961 // devOptional is the *overlap* of the dev and optional tree.
@@ -66,11 +68,6 @@ const calcDepFlagsStep = (node) => {
6668 // either the dev or opt trees
6769 const unsetDev = unsetDevOpt || ! node . dev && ! dev
6870 const unsetOpt = unsetDevOpt || ! node . optional && ! optional
69- const unsetPeer = ! peer && ! hasIncomingPeerEdge ( to )
70-
71- if ( unsetPeer ) {
72- unsetFlag ( to , 'peer' )
73- }
7471
7572 if ( unsetDevOpt ) {
7673 unsetFlag ( to , 'devOptional' )
@@ -124,7 +121,7 @@ const unsetFlag = (node, flag) => {
124121 const children = [ ]
125122 const targetNode = node . isLink && node . target ? node . target : node
126123 for ( const edge of targetNode . edgesOut . values ( ) ) {
127- if ( edge . to && edge . to [ flag ] ) {
124+ if ( edge . to ?. [ flag ] ) {
128125 // For the peer flag, only follow peer edges to unset the flag
129126 // Don't propagate peer flag through prod/dev/optional edges
130127 if ( flag === 'peer' ) {
@@ -133,7 +130,7 @@ const unsetFlag = (node, flag) => {
133130 }
134131 } else {
135132 // For other flags, follow prod edges (and peer edges for non-peer flags)
136- if ( edge . type === 'prod' || ( flag !== 'peer' && edge . type === 'peer' ) ) {
133+ if ( edge . type === 'prod' || edge . type === 'peer' ) {
137134 children . push ( edge . to )
138135 }
139136 }
0 commit comments