| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 | /*! * split-string <https://github.com/jonschlinkert/split-string> * * Copyright (c) 2015-2017, Jon Schlinkert. * Released under the MIT License. */'use strict';var extend = require('extend-shallow');module.exports = function(str, options, fn) {  if (typeof str !== 'string') {    throw new TypeError('expected a string');  }  if (typeof options === 'function') {    fn = options;    options = null;  }  // allow separator to be defined as a string  if (typeof options === 'string') {    options = { sep: options };  }  var opts = extend({sep: '.'}, options);  var quotes = opts.quotes || ['"', "'", '`'];  var brackets;  if (opts.brackets === true) {    brackets = {      '<': '>',      '(': ')',      '[': ']',      '{': '}'    };  } else if (opts.brackets) {    brackets = opts.brackets;  }  var tokens = [];  var stack = [];  var arr = [''];  var sep = opts.sep;  var len = str.length;  var idx = -1;  var closeIdx;  function expected() {    if (brackets && stack.length) {      return brackets[stack[stack.length - 1]];    }  }  while (++idx < len) {    var ch = str[idx];    var next = str[idx + 1];    var tok = { val: ch, idx: idx, arr: arr, str: str };    tokens.push(tok);    if (ch === '\\') {      tok.val = keepEscaping(opts, str, idx) === true ? (ch + next) : next;      tok.escaped = true;      if (typeof fn === 'function') {        fn(tok);      }      arr[arr.length - 1] += tok.val;      idx++;      continue;    }    if (brackets && brackets[ch]) {      stack.push(ch);      var e = expected();      var i = idx + 1;      if (str.indexOf(e, i + 1) !== -1) {        while (stack.length && i < len) {          var s = str[++i];          if (s === '\\') {            s++;            continue;          }          if (quotes.indexOf(s) !== -1) {            i = getClosingQuote(str, s, i + 1);            continue;          }          e = expected();          if (stack.length && str.indexOf(e, i + 1) === -1) {            break;          }          if (brackets[s]) {            stack.push(s);            continue;          }          if (e === s) {            stack.pop();          }        }      }      closeIdx = i;      if (closeIdx === -1) {        arr[arr.length - 1] += ch;        continue;      }      ch = str.slice(idx, closeIdx + 1);      tok.val = ch;      tok.idx = idx = closeIdx;    }    if (quotes.indexOf(ch) !== -1) {      closeIdx = getClosingQuote(str, ch, idx + 1);      if (closeIdx === -1) {        arr[arr.length - 1] += ch;        continue;      }      if (keepQuotes(ch, opts) === true) {        ch = str.slice(idx, closeIdx + 1);      } else {        ch = str.slice(idx + 1, closeIdx);      }      tok.val = ch;      tok.idx = idx = closeIdx;    }    if (typeof fn === 'function') {      fn(tok, tokens);      ch = tok.val;      idx = tok.idx;    }    if (tok.val === sep && tok.split !== false) {      arr.push('');      continue;    }    arr[arr.length - 1] += tok.val;  }  return arr;};function getClosingQuote(str, ch, i, brackets) {  var idx = str.indexOf(ch, i);  if (str.charAt(idx - 1) === '\\') {    return getClosingQuote(str, ch, idx + 1);  }  return idx;}function keepQuotes(ch, opts) {  if (opts.keepDoubleQuotes === true && ch === '"') return true;  if (opts.keepSingleQuotes === true && ch === "'") return true;  return opts.keepQuotes;}function keepEscaping(opts, str, idx) {  if (typeof opts.keepEscaping === 'function') {    return opts.keepEscaping(str, idx);  }  return opts.keepEscaping === true || str[idx + 1] === '\\';}
 |