|
1234567891011121314151617181920212223242526272829303132 |
- export 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;
- }
|