| 'use strict' |
| |
| let list = { |
| split(string, separators, last) { |
| let array = [] |
| let current = '' |
| let split = false |
| |
| let func = 0 |
| let quote = false |
| let escape = false |
| |
| for (let letter of string) { |
| if (escape) { |
| escape = false |
| } else if (letter === '\\') { |
| escape = true |
| } else if (quote) { |
| if (letter === quote) { |
| quote = false |
| } |
| } else if (letter === '"' || letter === "'") { |
| quote = 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 |
| }, |
| |
| space(string) { |
| let spaces = [' ', '\n', '\t'] |
| return list.split(string, spaces) |
| }, |
| |
| comma(string) { |
| return list.split(string, [','], true) |
| } |
| } |
| |
| module.exports = list |
| list.default = list |