Skip to content

Commit

Permalink
possible way to resolve passing flags to cli commands
Browse files Browse the repository at this point in the history
  • Loading branch information
ajaymathur committed Jan 8, 2018
1 parent 8b012ab commit cc60fb4
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 2 deletions.
10 changes: 8 additions & 2 deletions src/cli.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { BoltError } from './utils/errors';
import cleanStack from 'clean-stack';
import * as commands from './commands';
import * as options from './utils/options';
import * as flagHelpers from './functions/flagHelper';

const commandMap = {
ADD: { add: true },
Expand Down Expand Up @@ -97,7 +98,12 @@ const commandMap = {
WORKSPACES_UPGRADE: { upgrade: true, up: true }
};

function runCommandFromCli(args: options.Args, flags: options.Flags) {
function runCommandFromCli(args: options.Args, flags: options.Flags, pureArgs) {
console.log(flags);
let flagsArgs = flagHelpers.identifyFlags(pureArgs);
let { additionalArgs, updatedFlags } = flagHelpers.extractPossibleArgs(flags);

args = args.concat(additionalArgs);
let [command, ...commandArgs] = args;
let [subCommand, ...subCommandArgs] = commandArgs;

Expand Down Expand Up @@ -417,7 +423,7 @@ export default async function cli(argv: Array<string>, exit: boolean = false) {
processes.handleSignals();

try {
await runCommandFromCli(input, flags);
await runCommandFromCli(input, flags, argv);
} catch (err) {
if (err instanceof BoltError) {
logger.error(err.message);
Expand Down
47 changes: 47 additions & 0 deletions src/functions/flagHelper.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
// @flow

const IS_BOOLEAN_FLAGS = {
'--dev': true,
'--peerdev': true
};

function isFlagWithValue(flag) {
return flag.indexOf('=') > -1;
}

function isFlag(maybeFlag) {
return maybeFlag.indexOf('--') > -1;
}

export function identifyFlags(args: Array<string> = []) {
let flags = [];
args.forEach((arg, index) => {
if (isFlag(arg)) {
if (IS_BOOLEAN_FLAGS[arg]) {
flags.push(arg);
} else {
if (isFlagWithValue(arg)) {
flags.push(arg);
} else {
flags.push(arg, args[++index]);
}
}
}
});
return flags;
}

export function extractPossibleArgs(flags = {}) {
let additionalArgs = [];
let updatedFlags = Object.assign({}, flags);
Object.keys(updatedFlags).forEach(flag => {
if (IS_BOOLEAN_FLAGS['--' + flag]) {
additionalArgs.push(updatedFlags[flag]);
updatedFlags[flag] = true;
}
});
return {
additionalArgs,
updatedFlags
};
}

0 comments on commit cc60fb4

Please sign in to comment.