UNPKG

ph-dev-tools

Version:
73 lines (61 loc) 1.75 kB
/** * Created by Papa on 4/24/2016. */ import {ARGUMENT_FLAGS, ArgumentType, Flags} from "./Arguments"; export function parseFlags( programArguments:string[] ):Flags { let flags:Flags = new Flags(); let argumentGroups:string[][] = getArgumentGroups(programArguments); let foundFlags:{[argumentType:number]:boolean} = {}; argumentGroups.forEach(( argumentGroup:string[] ) => { let flag = argumentGroup[0]; let argType:ArgumentType = ARGUMENT_FLAGS[flag]; switch(argType) { case ArgumentType.CONFIG: if(foundFlags[argType]) { throw `Flag already specified '${flag}'`; } verifyArgumentGroupLength(argumentGroup, 2); foundFlags[argType] = true; flags.optionsFilePath = argumentGroup[1]; default: throw `Unexpected flag '${flag}'`; } }); if(!flags.optionsFilePath) { flags.optionsFilePath = 'phconfig.json'; } return flags; } function verifyArgumentGroupLength( argumentGroup:string[], expectedLength:number ):void { if(argumentGroup.length !== expectedLength) { throw `Expecting '${expectedLength - 1}' values for '${argumentGroup[0]}' flag`; } } function getArgumentGroups( programArguments:string[] ):string[][] { let optionGroups:string[][] = []; let currentOptionGroup:string[]; for (let i = 2; i < programArguments.length; i++) { let currentArgument = programArguments[i]; // we have a new option if (currentArgument.indexOf('-') === 0) { if (currentOptionGroup) { optionGroups.push(currentOptionGroup); } currentOptionGroup = []; } currentOptionGroup.push(currentArgument); } if (currentOptionGroup) { optionGroups.push(currentOptionGroup); } return optionGroups; }