105 lines
2.2 KiB
TypeScript
105 lines
2.2 KiB
TypeScript
import * as yargsParser from 'yargs-parser';
|
|
import * as yargs from 'yargs';
|
|
|
|
/**
|
|
* These options are only for getting an array with properties of AffectedOptions.
|
|
*
|
|
* @remark They are not defaults or useful for anything else
|
|
*/
|
|
const dummyOptions: NxArgs = {
|
|
target: '',
|
|
configuration: '',
|
|
runner: '',
|
|
parallel: false,
|
|
maxParallel: 0,
|
|
'max-parallel': 0,
|
|
untracked: false,
|
|
uncommitted: false,
|
|
all: false,
|
|
base: 'base',
|
|
head: 'head',
|
|
exclude: ['exclude'],
|
|
files: [''],
|
|
onlyFailed: false,
|
|
'only-failed': false,
|
|
verbose: false,
|
|
help: false,
|
|
version: false,
|
|
quiet: false,
|
|
plain: false,
|
|
withDeps: false,
|
|
'with-deps': false,
|
|
projects: [],
|
|
select: ''
|
|
} as any;
|
|
|
|
const nxSpecific = Object.keys(dummyOptions);
|
|
|
|
export interface NxArgs {
|
|
target?: string;
|
|
configuration?: string;
|
|
runner?: string;
|
|
parallel?: boolean;
|
|
maxParallel?: number;
|
|
'max-parallel'?: number;
|
|
untracked?: boolean;
|
|
uncommitted?: boolean;
|
|
all?: boolean;
|
|
base?: string;
|
|
head?: string;
|
|
exclude?: string[];
|
|
files?: string[];
|
|
onlyFailed?: boolean;
|
|
'only-failed'?: boolean;
|
|
verbose?: boolean;
|
|
help?: boolean;
|
|
version?: boolean;
|
|
quiet?: boolean;
|
|
plain?: boolean;
|
|
withDeps?: boolean;
|
|
'with-deps'?: boolean;
|
|
projects?: string[];
|
|
select?: string;
|
|
}
|
|
|
|
const ignoreArgs = ['$0', '_'];
|
|
|
|
export function splitArgsIntoNxArgsAndOverrides(
|
|
args: yargs.Arguments
|
|
): { nxArgs: NxArgs; overrides: yargs.Arguments } {
|
|
const nxArgs: any = {};
|
|
const overrides = yargsParser(args._);
|
|
delete overrides._;
|
|
|
|
Object.entries(args).forEach(([key, value]) => {
|
|
if (nxSpecific.includes(key as any)) {
|
|
nxArgs[key] = value;
|
|
} else if (!ignoreArgs.includes(key)) {
|
|
overrides[key] = value;
|
|
}
|
|
});
|
|
|
|
if (!nxArgs.projects) {
|
|
nxArgs.projects = [];
|
|
} else {
|
|
nxArgs.projects = args.projects.split(',').map((p: string) => p.trim());
|
|
}
|
|
|
|
if (
|
|
!nxArgs.files &&
|
|
!nxArgs.uncommitted &&
|
|
!nxArgs.untracked &&
|
|
!nxArgs.base &&
|
|
!nxArgs.head &&
|
|
!nxArgs.all &&
|
|
args._.length >= 2
|
|
) {
|
|
nxArgs.base = args._[0];
|
|
nxArgs.head = args._[1];
|
|
} else if (!nxArgs.base) {
|
|
nxArgs.base = 'master';
|
|
}
|
|
|
|
return { nxArgs, overrides };
|
|
}
|