var program = require("commander"); import config = require("./config"); import jamslogging = require("./jamslogging"); import jamsglobal = require("./jamsglobal"); import jamshelper = require("./jamshelper"); import jamscommands = require("./jamscommands"); import clientparameter = require("./clientparameter"); var localconfig = getConfig(); var global = new jamsglobal.Global(localconfig.locale, localconfig); var helper = new jamshelper.Helper(); var cmds = new jamscommands.Commands(process.argv, localconfig); var log = new jamslogging.Logging(program, localconfig); program.version(localconfig.packageInfo["version"]); program.on("--help", () => { loadCommands(); }); cmds.getCommand(); loadArgs("default"); if (cmds.isHelp()) { if (helper.isNullOrEmpty(cmds.action)) { program.parse(process.argv); program.outputHelp(); } else { if (cmds.isCommand(cmds.action)) { loadArgs(cmds.action, true); program.parse(process.argv); program.outputHelp(); } else { log.jamsresult(`${global.getText("resultfailnotacommand") }`); } } } else { if (cmds.isCommand()) { loadArgs(cmds.command, true); program.parse(process.argv); commandExecute(cmds.command, cmds.action, program); } else { program.parse(process.argv); log.jamsresult(`${global.getText("resultfailnotacommand") }`); } } // #region Help-Specific Functions function loadArgs(command: string, showdetails: boolean = false): string { loadCommandArgs(command); if (showdetails) { loadHelp(command); } return command; } function loadCommandValues(command: string) { var clientparams = new clientparameter.ClientParameter(command); return clientparams.options; } function loadCommands() { var columnify = require("columnify"); var clientparams = new clientparameter.ClientParameter("commands"); if (helper.isNullOrEmpty(cmds.action)) { var commands = clientparams.getCommandsList(getConfig()); var columns = columnify(commands, { columns: ["lead", "name", "description"], showHeaders: false, config: { lead: { minWidth: 3 }, name: { minWidth: 10, align: "left" } } }); console.log(` ${global.getText("helpcommands") }:`); console.log(""); console.log(columns); console.log(""); console.log(` ${global.getText("helpusage") }`); } } function loadCommandArgs(command: string) { var commands = getCommandValueArray(command); for (var cmdindex in commands) { var cmd = commands[cmdindex]; var shortcut = cmd.shortcut; var commandtext = cmd.commandtext; var desc = cmd.description; var valuetype = cmd.valuetype; var regex = cmd.regex; var dash = "-"; var dashdash = "--"; if (!helper.isNullOrEmpty(valuetype) || !helper.isNullOrEmpty(regex)) { if (!helper.isNullOrEmpty(regex)) { program.option(`${dash}${shortcut}, ${dashdash}${commandtext}`, desc, regex); } else { program.option(`${dash}${shortcut}, ${dashdash}${commandtext}`, desc, valuetype); } } else { program.option(`${dash}${shortcut}, ${dashdash}${commandtext}`, desc); } } } function getCommandValueArray(command: string) { var commands = loadCommandValues(command); var cmdvalues = new Array(); var index = 0; for (var cmdindex in commands) { cmdvalues[index] = commands[cmdindex]; index++; } return cmdvalues; } function loadHelp(cmd) { program.on("--help", () => { if(!helper.isNullOrEmpty(cmd)) { var command = cmds.getHelpTopic(); console.log(" --"); console.log(` ${global.getText(`menu${command.toLowerCase() }`).toUpperCase() } HELP`); console.log(` ${global.getText(`help${command.toLowerCase() }`) }`); console.log(""); console.log(` ${global.getText("helpusagetext") }: jams ${global.getText(`usage${command.toLowerCase() }`) }`); } }); } // #endregion // #region Helper Functions function commandExecute(commandName: string, action:string, program) { var cmd = require(`./Commands/${commandName}`); cmd.config = getConfig(); cmd.Execute(program, cmd.config); } function getConfig(): any { var conf = new config.Config(); var server = program.server; var helper = new jamshelper.Helper(); if (!helper.isNullOrEmpty(server) || server === true) { log.verbose(`${global.getTextUpper("server")} ${global.getText("definedas")} "${server}".`); if (helper.validateUrl(server)) { conf.server = server; } else { log.error(global.getText("invalidserver")); } } //Uncomment and modify to override configuration value // conf.server = "http://left/JAMS/api"; // conf.tokenfilename = "MVPNodeToken.json"; // conf.locale = "en-us"; // conf.ignoreerror = false; return conf; } // #endregion