ph-dev-tools
Version:
Development Tools for PHibernate
55 lines • 1.92 kB
JavaScript
;
/**
* Created by Papa on 4/24/2016.
*/
const Arguments_1 = require("./Arguments");
function parseFlags(programArguments) {
let flags = new Arguments_1.Flags();
let argumentGroups = getArgumentGroups(programArguments);
let foundFlags = {};
argumentGroups.forEach((argumentGroup) => {
let flag = argumentGroup[0];
let argType = Arguments_1.ARGUMENT_FLAGS[flag];
switch (argType) {
case Arguments_1.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;
}
exports.parseFlags = parseFlags;
function verifyArgumentGroupLength(argumentGroup, expectedLength) {
if (argumentGroup.length !== expectedLength) {
throw `Expecting '${expectedLength - 1}' values for '${argumentGroup[0]}' flag`;
}
}
function getArgumentGroups(programArguments) {
let optionGroups = [];
let currentOptionGroup;
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;
}
//# sourceMappingURL=parser.js.map