@@ -82,19 +82,26 @@ export default class DependencyMap {
8282 if ( this . #nodes. has ( dependency ) ) {
8383 validDependencies . add ( dependency ) ;
8484
85- if ( this . #dependenciesInverse. has ( dependency ) ) {
86- this . #dependenciesInverse. get ( dependency ) ?. add ( node ) ;
87- } else {
88- this . #dependenciesInverse. set ( dependency , new Set ( [ node ] ) ) ;
85+ let inverseSet = this . #dependenciesInverse. get ( dependency ) ;
86+
87+ if ( ! inverseSet ) {
88+ inverseSet = new Set ( ) ;
89+ this . #dependenciesInverse. set ( dependency , inverseSet ) ;
8990 }
91+
92+ inverseSet . add ( node ) ;
9093 } else {
9194 invalidDependencies . add ( dependency ) ;
9295
93- if ( this . #invalidDependenciesInverse. has ( dependency ) ) {
94- this . #invalidDependenciesInverse. get ( dependency ) ?. add ( node ) ;
95- } else {
96- this . #invalidDependenciesInverse. set ( dependency , new Set ( [ node ] ) ) ;
96+ let inverseInvalidSet =
97+ this . #invalidDependenciesInverse. get ( dependency ) ;
98+
99+ if ( ! inverseInvalidSet ) {
100+ inverseInvalidSet = new Set ( ) ;
101+ this . #invalidDependenciesInverse. set ( dependency , inverseInvalidSet ) ;
97102 }
103+
104+ inverseInvalidSet . add ( node ) ;
98105 }
99106 }
100107
@@ -163,10 +170,9 @@ export default class DependencyMap {
163170 * @param nodes Record of nodes to sort
164171 * @returns Array of node keys sorted by depth
165172 */
166- private sortNodesByDepth = ( nodes : Record < string , true > ) : string [ ] => {
173+ private sortNodesByDepth = ( nodes : string [ ] ) : string [ ] => {
167174 // Pre-compute depths for all nodes
168- const nodeKeys = Object . keys ( nodes ) ;
169- const nodeDepths = nodeKeys . map ( ( node ) => ( {
175+ const nodeDepths = nodes . map ( ( node ) => ( {
170176 node,
171177 depth : node . split ( "." ) . length ,
172178 } ) ) ;
@@ -186,15 +192,16 @@ export default class DependencyMap {
186192 */
187193
188194 addNodes = ( nodes : Record < string , true > , strict = true ) => {
195+ const newUnaddedNodes = Object . keys ( nodes ) . filter (
196+ ( node ) => ! this . #nodes. has ( node ) ,
197+ ) ;
189198 const nodesToAdd = strict
190- ? Object . keys ( nodes )
191- : this . sortNodesByDepth ( nodes ) ;
199+ ? newUnaddedNodes
200+ : this . sortNodesByDepth ( newUnaddedNodes ) ;
192201
193202 let didUpdateGraph = false ;
194203
195204 for ( const newNode of nodesToAdd ) {
196- if ( this . #nodes. has ( newNode ) ) continue ;
197-
198205 // New node introduced to the graph.
199206 this . #nodes. set ( newNode , true ) ;
200207 // Check the paths that consumed this node before it was introduced.
@@ -228,11 +235,15 @@ export default class DependencyMap {
228235 this . #invalidDependencies. get ( iNode ) ?. delete ( newNode ) ;
229236 didUpdateGraph = true ;
230237
231- if ( this . #dependenciesInverse. has ( newNode ) ) {
232- this . #dependenciesInverse. get ( newNode ) ?. add ( iNode ) ;
233- } else {
234- this . #dependenciesInverse. set ( newNode , new Set ( [ iNode ] ) ) ;
238+ // Get or create the inverse dependencies set for the new node
239+ let inverseSet = this . #dependenciesInverse. get ( newNode ) ;
240+
241+ if ( ! inverseSet ) {
242+ inverseSet = new Set ( ) ;
243+ this . #dependenciesInverse. set ( newNode , inverseSet ) ;
235244 }
245+
246+ inverseSet . add ( iNode ) ;
236247 }
237248
238249 this . #invalidDependenciesInverse. delete ( newNode ) ;
@@ -261,11 +272,14 @@ export default class DependencyMap {
261272
262273 if ( ! this . #nodes. has ( iNode ) ) continue ;
263274
264- if ( this . #invalidDependenciesInverse. has ( node ) ) {
265- this . #invalidDependenciesInverse. get ( node ) ?. add ( iNode ) ;
266- } else {
267- this . #invalidDependenciesInverse. set ( node , new Set ( [ iNode ] ) ) ;
275+ let inverseInvalidSet = this . #invalidDependenciesInverse. get ( node ) ;
276+
277+ if ( ! inverseInvalidSet ) {
278+ inverseInvalidSet = new Set ( ) ;
279+ this . #invalidDependenciesInverse. set ( node , inverseInvalidSet ) ;
268280 }
281+
282+ inverseInvalidSet . add ( iNode ) ;
269283 }
270284
271285 this . #dependenciesInverse. delete ( node ) ;
0 commit comments