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
 | |
| }
 |