1234567891011121314151617181920212223242526272829303132333435363738394041 |
- 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;
- }
- }
- }
|