75 lines
1.8 KiB
TypeScript

import { runCommand } from '../tasks-runner/run-command';
import { createProjectGraph, ProjectGraph } from '../core/project-graph';
import { readEnvironment } from '../core/file-utils';
import { EmptyReporter } from '../tasks-runner/empty-reporter';
import { splitArgsIntoNxArgsAndOverrides } from './utils';
import { projectHasTarget } from '../utils/project-graph-utils';
export function runOne(opts: {
project: string;
target: string;
configuration: string;
parsedArgs: any;
}): void {
const { nxArgs, overrides } = splitArgsIntoNxArgsAndOverrides(
{
...opts.parsedArgs,
configuration: opts.configuration,
target: opts.target,
_: []
},
'run-one'
);
const projectGraph = createProjectGraph();
const { projects, projectsMap } = getProjects(
projectGraph,
nxArgs.withDeps,
opts.project,
opts.target
);
const env = readEnvironment(opts.target, projectsMap);
const reporter = nxArgs.withDeps
? new (require(`../tasks-runner/run-one-reporter`)).RunOneReporter(
opts.project
)
: new EmptyReporter();
runCommand(
projects,
projectGraph,
env,
nxArgs,
overrides,
reporter,
opts.project
);
}
function getProjects(
projectGraph: ProjectGraph,
includeDeps: boolean,
project: string,
target: string
): any {
let projects = [projectGraph.nodes[project]];
let projectsMap = {
[project]: projectGraph.nodes[project]
};
if (includeDeps) {
const s = require(`../core/project-graph`);
const deps = s.onlyWorkspaceProjects(s.withDeps(projectGraph, projects))
.nodes;
const projectsWithTarget = Object.values(deps).filter((p: any) =>
projectHasTarget(p, target)
);
return {
projects: projectsWithTarget,
projectsMap: deps
};
} else {
return { projects, projectsMap };
}
}