Spaces:
Running
Running
| /** | |
| * @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; | |
| } | |