whycq
2024-03-28 cb5354ffdce249a49213a0430316e607c6002da7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
'use strict'
 
let list = {
  comma(string) {
    return list.split(string, [','], true)
  },
 
  space(string) {
    let spaces = [' ', '\n', '\t']
    return list.split(string, spaces)
  },
 
  split(string, separators, last) {
    let array = []
    let current = ''
    let split = false
 
    let func = 0
    let inQuote = false
    let prevQuote = ''
    let escape = false
 
    for (let letter of string) {
      if (escape) {
        escape = false
      } else if (letter === '\\') {
        escape = true
      } else if (inQuote) {
        if (letter === prevQuote) {
          inQuote = false
        }
      } else if (letter === '"' || letter === "'") {
        inQuote = true
        prevQuote = letter
      } else if (letter === '(') {
        func += 1
      } else if (letter === ')') {
        if (func > 0) func -= 1
      } else if (func === 0) {
        if (separators.includes(letter)) split = true
      }
 
      if (split) {
        if (current !== '') array.push(current.trim())
        current = ''
        split = false
      } else {
        current += letter
      }
    }
 
    if (last || current !== '') array.push(current.trim())
    return array
  }
}
 
module.exports = list
list.default = list