blob: 569f61ad4ab1d8fe75f022943557de9a7ada3fba [file] [log] [blame]
Yang Guo4fd355c2019-09-19 10:59:03 +02001// take an un-split argv string and tokenize it.
2module.exports = function (argString) {
3 if (Array.isArray(argString)) return argString
4
5 argString = argString.trim()
6
7 var i = 0
8 var prevC = null
9 var c = null
10 var opening = null
11 var args = []
12
13 for (var ii = 0; ii < argString.length; ii++) {
14 prevC = c
15 c = argString.charAt(ii)
16
17 // split on spaces unless we're in quotes.
18 if (c === ' ' && !opening) {
19 if (!(prevC === ' ')) {
20 i++
21 }
22 continue
23 }
24
25 // don't split the string if we're in matching
26 // opening or closing single and double quotes.
27 if (c === opening) {
28 if (!args[i]) args[i] = ''
29 opening = null
30 } else if ((c === "'" || c === '"') && !opening) {
31 opening = c
32 }
33
34 if (!args[i]) args[i] = ''
35 args[i] += c
36 }
37
38 return args
39}