UNPKG

string-argv

Version:

string-argv parses a string into an argument array to mimic process.argv. This is useful when testing Command Line Utilities that you want to pass arguments to.

46 lines (45 loc) 1.62 kB
"use strict"; exports.__esModule = true; exports.parseArgsStringToArgv = void 0; 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; } exports["default"] = parseArgsStringToArgv; exports.parseArgsStringToArgv = parseArgsStringToArgv; // 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; } } }