All files index.js

100% Statements 26/26
100% Branches 14/14
100% Functions 2/2
100% Lines 18/18
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 273x 1x 24x 24x   24x   20x 20x 29x   26x 26x 26x 26x 18x 21x   46x     26x 26x   17x    
function err (msg) { throw Error(msg) }
module.exports = function () {
  var re = /%([+-])?(\d+)?(?:\.(\d+))?s/g     // captures: left-justify, field-width, precision   (type 's' assumed)
  var a = arguments
 
  if (!a.length) { return '' } else if (a.length === 1) { return a[0] }
 
  var ret = '', off = 0, expr = a[0], m = null
  for (var i = 1; i < a.length; i++) {
    m = re.exec(expr) || err('too many arguments')  // should have at least one %.. expression per arg
 
    ret += expr.substring(off, m.index)
    var s = a[i]
    s = m[3] == null ? s : s.substring(0, m[3])     // precision    (max size)
    if (s.length < m[2]) {                           // field-width  (min size)
      if (m[1] === '-') {
        while (s.length < m[2]) { s = s + ' ' }
      } else {
        while (s.length < m[2]) { s = ' ' + s }
      }
    }
    ret += s
    off = re.lastIndex
  }
  return (off < expr.length) ? ret + expr.substring(off) : ret
}