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
			| 
											3 years ago
										 | '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 | ||
|  | } |