You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
1.2 KiB
37 lines
1.2 KiB
4 years ago
|
"use strict";
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
exports.parseCommand = void 0;
|
||
|
function parseCommand(cmd) {
|
||
|
const extraSpacesStrippedCommand = cmd.replace(/\s{2,}/g, ' ');
|
||
|
const splitCommand = extraSpacesStrippedCommand.split(/\s+(?![^[]*]|[^<]*>)/);
|
||
|
const bregex = /\.*[\][<>]/g;
|
||
|
const firstCommand = splitCommand.shift();
|
||
|
if (!firstCommand)
|
||
|
throw new Error(`No command found in: ${cmd}`);
|
||
|
const parsedCommand = {
|
||
|
cmd: firstCommand.replace(bregex, ''),
|
||
|
demanded: [],
|
||
|
optional: []
|
||
|
};
|
||
|
splitCommand.forEach((cmd, i) => {
|
||
|
let variadic = false;
|
||
|
cmd = cmd.replace(/\s/g, '');
|
||
|
if (/\.+[\]>]/.test(cmd) && i === splitCommand.length - 1)
|
||
|
variadic = true;
|
||
|
if (/^\[/.test(cmd)) {
|
||
|
parsedCommand.optional.push({
|
||
|
cmd: cmd.replace(bregex, '').split('|'),
|
||
|
variadic
|
||
|
});
|
||
|
}
|
||
|
else {
|
||
|
parsedCommand.demanded.push({
|
||
|
cmd: cmd.replace(bregex, '').split('|'),
|
||
|
variadic
|
||
|
});
|
||
|
}
|
||
|
});
|
||
|
return parsedCommand;
|
||
|
}
|
||
|
exports.parseCommand = parseCommand;
|