You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							110 lines
						
					
					
						
							2.6 KiB
						
					
					
				
			
		
		
	
	
							110 lines
						
					
					
						
							2.6 KiB
						
					
					
				'use strict'
 | 
						|
function tryStringify (o) {
 | 
						|
  try { return JSON.stringify(o) } catch(e) { return '"[Circular]"' }
 | 
						|
}
 | 
						|
 | 
						|
module.exports = format
 | 
						|
 | 
						|
function format(f, args, opts) {
 | 
						|
  var ss = (opts && opts.stringify) || tryStringify
 | 
						|
  var offset = 1
 | 
						|
  if (typeof f === 'object' && f !== null) {
 | 
						|
    var len = args.length + offset
 | 
						|
    if (len === 1) return f
 | 
						|
    var objects = new Array(len)
 | 
						|
    objects[0] = ss(f)
 | 
						|
    for (var index = 1; index < len; index++) {
 | 
						|
      objects[index] = ss(args[index])
 | 
						|
    }
 | 
						|
    return objects.join(' ')
 | 
						|
  }
 | 
						|
  if (typeof f !== 'string') {
 | 
						|
    return f
 | 
						|
  }
 | 
						|
  var argLen = args.length
 | 
						|
  if (argLen === 0) return f
 | 
						|
  var str = ''
 | 
						|
  var a = 1 - offset
 | 
						|
  var lastPos = -1
 | 
						|
  var flen = (f && f.length) || 0
 | 
						|
  for (var i = 0; i < flen;) {
 | 
						|
    if (f.charCodeAt(i) === 37 && i + 1 < flen) {
 | 
						|
      lastPos = lastPos > -1 ? lastPos : 0
 | 
						|
      switch (f.charCodeAt(i + 1)) {
 | 
						|
        case 100: // 'd'
 | 
						|
        case 102: // 'f'
 | 
						|
          if (a >= argLen)
 | 
						|
            break
 | 
						|
          if (args[a] == null)  break
 | 
						|
          if (lastPos < i)
 | 
						|
            str += f.slice(lastPos, i)
 | 
						|
          str += Number(args[a])
 | 
						|
          lastPos = i + 2
 | 
						|
          i++
 | 
						|
          break
 | 
						|
        case 105: // 'i'
 | 
						|
          if (a >= argLen)
 | 
						|
            break
 | 
						|
          if (args[a] == null)  break
 | 
						|
          if (lastPos < i)
 | 
						|
            str += f.slice(lastPos, i)
 | 
						|
          str += Math.floor(Number(args[a]))
 | 
						|
          lastPos = i + 2
 | 
						|
          i++
 | 
						|
          break
 | 
						|
        case 79: // 'O'
 | 
						|
        case 111: // 'o'
 | 
						|
        case 106: // 'j'
 | 
						|
          if (a >= argLen)
 | 
						|
            break
 | 
						|
          if (args[a] === undefined) break
 | 
						|
          if (lastPos < i)
 | 
						|
            str += f.slice(lastPos, i)
 | 
						|
          var type = typeof args[a]
 | 
						|
          if (type === 'string') {
 | 
						|
            str += '\'' + args[a] + '\''
 | 
						|
            lastPos = i + 2
 | 
						|
            i++
 | 
						|
            break
 | 
						|
          }
 | 
						|
          if (type === 'function') {
 | 
						|
            str += args[a].name || '<anonymous>'
 | 
						|
            lastPos = i + 2
 | 
						|
            i++
 | 
						|
            break
 | 
						|
          }
 | 
						|
          str += ss(args[a])
 | 
						|
          lastPos = i + 2
 | 
						|
          i++
 | 
						|
          break
 | 
						|
        case 115: // 's'
 | 
						|
          if (a >= argLen)
 | 
						|
            break
 | 
						|
          if (lastPos < i)
 | 
						|
            str += f.slice(lastPos, i)
 | 
						|
          str += String(args[a])
 | 
						|
          lastPos = i + 2
 | 
						|
          i++
 | 
						|
          break
 | 
						|
        case 37: // '%'
 | 
						|
          if (lastPos < i)
 | 
						|
            str += f.slice(lastPos, i)
 | 
						|
          str += '%'
 | 
						|
          lastPos = i + 2
 | 
						|
          i++
 | 
						|
          a--
 | 
						|
          break
 | 
						|
      }
 | 
						|
      ++a
 | 
						|
    }
 | 
						|
    ++i
 | 
						|
  }
 | 
						|
  if (lastPos === -1)
 | 
						|
    return f
 | 
						|
  else if (lastPos < flen) {
 | 
						|
    str += f.slice(lastPos)
 | 
						|
  }
 | 
						|
 | 
						|
  return str
 | 
						|
}
 |