41 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/**
 | 
						|
 * @license
 | 
						|
 * Copyright (c) 2016, Contributors
 | 
						|
 * SPDX-License-Identifier: ISC
 | 
						|
 */
 | 
						|
// take an un-split argv string and tokenize it.
 | 
						|
export function tokenizeArgString(argString) {
 | 
						|
    if (Array.isArray(argString)) {
 | 
						|
        return argString.map(e => typeof e !== 'string' ? e + '' : e);
 | 
						|
    }
 | 
						|
    argString = argString.trim();
 | 
						|
    let i = 0;
 | 
						|
    let prevC = null;
 | 
						|
    let c = null;
 | 
						|
    let opening = null;
 | 
						|
    const args = [];
 | 
						|
    for (let ii = 0; ii < argString.length; ii++) {
 | 
						|
        prevC = c;
 | 
						|
        c = argString.charAt(ii);
 | 
						|
        // split on spaces unless we're in quotes.
 | 
						|
        if (c === ' ' && !opening) {
 | 
						|
            if (!(prevC === ' ')) {
 | 
						|
                i++;
 | 
						|
            }
 | 
						|
            continue;
 | 
						|
        }
 | 
						|
        // don't split the string if we're in matching
 | 
						|
        // opening or closing single and double quotes.
 | 
						|
        if (c === opening) {
 | 
						|
            opening = null;
 | 
						|
        }
 | 
						|
        else if ((c === "'" || c === '"') && !opening) {
 | 
						|
            opening = c;
 | 
						|
        }
 | 
						|
        if (!args[i])
 | 
						|
            args[i] = '';
 | 
						|
        args[i] += c;
 | 
						|
    }
 | 
						|
    return args;
 | 
						|
}
 |