78 lines
2.0 KiB
TypeScript
78 lines
2.0 KiB
TypeScript
import yargsParser = require('yargs-parser');
|
|
|
|
export function parseRunOneOptions(
|
|
nxJson: any,
|
|
workspaceConfigJson: any,
|
|
args: string[]
|
|
): false | { project; target; configuration; parsedArgs } {
|
|
// custom runner is not set, no tasks runner
|
|
if (
|
|
!nxJson.tasksRunnerOptions ||
|
|
!nxJson.tasksRunnerOptions.default ||
|
|
!nxJson.tasksRunnerOptions.default.runner
|
|
) {
|
|
return false;
|
|
}
|
|
|
|
// the list of all possible tasks doesn't include the given name, no tasks runner
|
|
let allPossibleTasks = ['run'];
|
|
Object.values(workspaceConfigJson.projects || {}).forEach((p: any) => {
|
|
allPossibleTasks.push(...Object.keys(p.architect || {}));
|
|
});
|
|
if (allPossibleTasks.indexOf(args[0]) === -1) {
|
|
return false;
|
|
}
|
|
|
|
let defaultProjectName = null;
|
|
try {
|
|
defaultProjectName = workspaceConfigJson.cli.defaultProjectName;
|
|
} catch (e) {}
|
|
|
|
const parsedArgs = yargsParser(args, {
|
|
boolean: ['prod'],
|
|
string: ['configuration', 'project']
|
|
});
|
|
|
|
let project;
|
|
let target;
|
|
let configuration;
|
|
|
|
if (parsedArgs._[0] === 'run') {
|
|
[project, target, configuration] = parsedArgs._[1].split(':');
|
|
parsedArgs._ = parsedArgs._.slice(1);
|
|
} else {
|
|
target = parsedArgs._[0];
|
|
project = parsedArgs._[1];
|
|
parsedArgs._ = parsedArgs._.slice(2);
|
|
}
|
|
|
|
if (!project && defaultProjectName) {
|
|
project = defaultProjectName;
|
|
}
|
|
|
|
if (parsedArgs.configuration) {
|
|
configuration = parsedArgs.configuration;
|
|
}
|
|
if (parsedArgs.prod) {
|
|
configuration = 'production';
|
|
}
|
|
if (parsedArgs.project) {
|
|
project = parsedArgs.project;
|
|
}
|
|
|
|
// we need both to be able to run a target, no tasks runner
|
|
if (!project || !target) {
|
|
return false;
|
|
}
|
|
|
|
// we need both to be able to run a target, no tasks runner
|
|
if (!workspaceConfigJson.projects[project]) return false;
|
|
|
|
const res = { project, target, configuration, parsedArgs };
|
|
delete parsedArgs['configuration'];
|
|
delete parsedArgs['prod'];
|
|
delete parsedArgs['project'];
|
|
|
|
return res;
|
|
}
|