Skip to content

Commit

Permalink
fix: recursive resolve deps on create command graph
Browse files Browse the repository at this point in the history
  • Loading branch information
afedorov committed Apr 24, 2024
1 parent df87a5e commit 5bd7eff
Showing 1 changed file with 36 additions and 12 deletions.
48 changes: 36 additions & 12 deletions packages/nx/src/commands-runner/create-command-graph.ts
Expand Up @@ -4,24 +4,48 @@ import { NxArgs } from '../utils/command-line-utils';
import { output } from '../utils/output';
import { CommandGraph } from './command-graph';

/**
* Make structure { lib: [dep], dep: [dep1], dep1: [] } from projectName lib and projectGraph
* @param projectGraph
* @param projectName
* @param resolved reference to an object that will contain resolved dependencies
* @returns
*/
const recursiveResolveDeps = (projectGraph: ProjectGraph, projectName: string, resolved: Record<string, string[]>) => {
if (projectGraph.dependencies[projectName].length === 0) {
// no deps - no resolve
resolved[projectName] = []
return
}
// if already resolved - just skip
if (resolved[projectName]) {
return resolved[projectName]
}

// deps string list
const projectDeps = [
...new Set(projectGraph.dependencies[projectName]
.map((projectDep) => projectDep.target)
.filter((projectDep) => projectGraph.nodes[projectDep])).values(),
];

// define
resolved[projectName] = projectDeps;
if (projectDeps.length > 0) {
for (const dep of projectDeps) {
recursiveResolveDeps(projectGraph, dep, resolved)
}
}
}

export function createCommandGraph(
projectGraph: ProjectGraph,
projectNames: string[],
nxArgs: NxArgs
): CommandGraph {
const dependencies: Record<string, string[]> = {};
const dependencies: Record<string, string[]> = {}
for (const projectName of projectNames) {
if (projectGraph.dependencies[projectName].length >= 1) {
dependencies[projectName] = [
...new Set(
projectGraph.dependencies[projectName]
.map((projectDep) => projectDep.target)
.filter((projectDep) => projectGraph.nodes[projectDep])
).values(),
];
} else {
dependencies[projectName] = [];
}
recursiveResolveDeps(projectGraph, projectName, dependencies)
}
const roots = Object.keys(dependencies).filter(
(d) => dependencies[d].length === 0
Expand Down

0 comments on commit 5bd7eff

Please sign in to comment.