From b34975b60b6318555300eea4e70189cc109be970 Mon Sep 17 00:00:00 2001 From: AgentEnder Date: Tue, 13 Dec 2022 12:13:00 -0500 Subject: [PATCH] fix(core): additional null check when hashing lockfile --- packages/nx/src/lock-file/utils/hashing.ts | 23 ++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/packages/nx/src/lock-file/utils/hashing.ts b/packages/nx/src/lock-file/utils/hashing.ts index c8d2283218ead3..d432328b9e859d 100644 --- a/packages/nx/src/lock-file/utils/hashing.ts +++ b/packages/nx/src/lock-file/utils/hashing.ts @@ -34,30 +34,37 @@ function hashExternalNode(node: ProjectGraphExternalNode, graph: ProjectGraph) { if (!graph.dependencies[node.name]) { node.data.hash = hashString(hashKey); } else { - const hashingInput = [hashKey]; - // collect all dependencies' hashes - traverseExternalNodesDependencies(node.name, graph, hashingInput); - node.data.hash = defaultHashing.hashArray(hashingInput.sort()); + const externalDependencies = traverseExternalNodesDependencies( + node.name, + graph, + new Set([hashKey]) + ); + node.data.hash = defaultHashing.hashArray(Array.from(externalDependencies)); } } function traverseExternalNodesDependencies( projectName: string, graph: ProjectGraph, - visited: string[] -) { + visited: Set +): Set { graph.dependencies[projectName].forEach((d) => { const target = graph.externalNodes[d.target]; + if (!target) { + return; + } + const targetKey = `${target.data.packageName}@${target.data.version}`; - if (visited.indexOf(targetKey) === -1) { - visited.push(targetKey); + if (!visited.has(targetKey)) { + visited.add(targetKey); if (graph.dependencies[d.target]) { traverseExternalNodesDependencies(d.target, graph, visited); } } }); + return visited; } /**