42 lines
1.5 KiB
JavaScript
42 lines
1.5 KiB
JavaScript
|
export { parseArgsStringToArgv };
|
||
|
export default function parseArgsStringToArgv(value, env, file) {
|
||
|
// ([^\s'"]([^\s'"]*(['"])([^\3]*?)\3)+[^\s'"]*) Matches nested quotes until the first space outside of quotes
|
||
|
// [^\s'"]+ or Match if not a space ' or "
|
||
|
// (['"])([^\5]*?)\5 or Match "quoted text" without quotes
|
||
|
// `\3` and `\5` are a backreference to the quote style (' or ") captured
|
||
|
var myRegexp = /([^\s'"]([^\s'"]*(['"])([^\3]*?)\3)+[^\s'"]*)|[^\s'"]+|(['"])([^\5]*?)\5/gi;
|
||
|
var myString = value;
|
||
|
var myArray = [];
|
||
|
if (env) {
|
||
|
myArray.push(env);
|
||
|
}
|
||
|
if (file) {
|
||
|
myArray.push(file);
|
||
|
}
|
||
|
var match;
|
||
|
do {
|
||
|
// Each call to exec returns the next regex match as an array
|
||
|
match = myRegexp.exec(myString);
|
||
|
if (match !== null) {
|
||
|
// Index 1 in the array is the captured group if it exists
|
||
|
// Index 0 is the matched text, which we use if no captured group exists
|
||
|
myArray.push(firstString(match[1], match[6], match[0]));
|
||
|
}
|
||
|
} while (match !== null);
|
||
|
return myArray;
|
||
|
}
|
||
|
// Accepts any number of arguments, and returns the first one that is a string
|
||
|
// (even an empty string)
|
||
|
function firstString() {
|
||
|
var args = [];
|
||
|
for (var _i = 0; _i < arguments.length; _i++) {
|
||
|
args[_i] = arguments[_i];
|
||
|
}
|
||
|
for (var i = 0; i < args.length; i++) {
|
||
|
var arg = args[i];
|
||
|
if (typeof arg === "string") {
|
||
|
return arg;
|
||
|
}
|
||
|
}
|
||
|
}
|