33 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
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;
 | 
						|
}
 |