All files index.js

100% Statements 26/26
100% Branches 14/14
100% Functions 2/2
100% Lines 19/19
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 293x 1x 24x 24x   24x 23x   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
}