ArgParer2
This commit is contained in:
@ -47,21 +47,32 @@ export class ArgParser {
|
||||
// Find & add flag
|
||||
const combined = arg.split('=');
|
||||
const argDef = this.flags.find(flag => flag.flags.includes(combined[0] || arg));
|
||||
if(!argDef) extras.push(arg); // Not found, add to extras
|
||||
const value = argDef.default === false ? true : argDef.default === true ? false : queue.splice(queue.findIndex(q => q[0] != '-'), 1)[0];
|
||||
if(value == null) parsed['_error'] = `${argDef.name.toUpperCase()} missing value`
|
||||
if(argDef == null) { // Not found, add to extras
|
||||
extras.push(arg);
|
||||
continue;
|
||||
}
|
||||
const value = argDef.default === false ? true : argDef.default === true ? false : argDef.default || queue.splice(queue.findIndex(q => q[0] != '-'), 1)[0];
|
||||
if(value == null) parsed['_error'] = `Option missing value: ${arg.name}`;
|
||||
parsed[argDef.name] = value;
|
||||
} else { // Command
|
||||
const c = this.commands.find(command => command.name == arg);
|
||||
if(!!c) {
|
||||
parsed['_command'] = c.name;
|
||||
parsed[c.name] = c.parse(queue.splice(0, queue.length));
|
||||
const parsedCommand = c.parse(queue.splice(0, queue.length));
|
||||
Object.keys(parsedCommand).forEach(key => {
|
||||
if(parsed[key] != parsedCommand[key] && parsedCommand[key] == c.defaults[key])
|
||||
delete parsedCommand[key];
|
||||
});
|
||||
parsed = {
|
||||
...parsed,
|
||||
...parsedCommand,
|
||||
_command: c.name
|
||||
};
|
||||
} else extras.push(arg); // Not found, add to extras
|
||||
}
|
||||
}
|
||||
// Arguments
|
||||
this.args.filter(arg => !arg.extras).forEach(arg => {
|
||||
if(!arg.optional && !extras.length) parsed['_error'] = `${arg.name.toUpperCase()} is missing`;
|
||||
if(!arg.optional && !extras.length) parsed['_error'] = `Argument missing: ${arg.name.toUpperCase()}`;
|
||||
parsed[arg.name] = extras.splice(0, 1)[0];
|
||||
});
|
||||
// Extras
|
||||
|
@ -12,8 +12,15 @@ export class Logger {
|
||||
this.fns = lineFns;
|
||||
this.historyLen -= lineFns.length * 2;
|
||||
this.history = Array(this.historyLen).fill('');
|
||||
this.log();
|
||||
}
|
||||
|
||||
/**
|
||||
* Add red error message to logs
|
||||
* @param message {string} - Text that will be added
|
||||
*/
|
||||
error(message) { this.log(`ERROR: ${message}`); }
|
||||
|
||||
/**
|
||||
* Add a linebreak
|
||||
*/
|
||||
@ -33,13 +40,20 @@ export class Logger {
|
||||
}
|
||||
|
||||
/**
|
||||
* Add message to logs & output
|
||||
* Add message to the logs
|
||||
* @param message {string} - Text that will be added
|
||||
*/
|
||||
log(message) {
|
||||
log(message = '') {
|
||||
this.ns.clearLog();
|
||||
this.header();
|
||||
if(message != null) this.history.push(message);
|
||||
if(message) this.history.push(message);
|
||||
this.history.splice(0, this.history.length - this.historyLen);
|
||||
this.history.forEach(m => this.ns.print(m));
|
||||
}
|
||||
|
||||
/**
|
||||
* Add orange warning to the logs
|
||||
* @param message {string} - Text that will be added
|
||||
*/
|
||||
warn(message) { this.log(`WARN: ${message}`); }
|
||||
}
|
||||
|
Reference in New Issue
Block a user