strong-tie/inbound-calls
0
1'use strict'2function tryStringify (o) {3 try { return JSON.stringify(o) } catch(e) { return '"[Circular]"' }4}5 6module.exports = format7 8function format(f, args, opts) {9 var ss = (opts && opts.stringify) || tryStringify10 var offset = 111 if (typeof f === 'object' && f !== null) {12 var len = args.length + offset13 if (len === 1) return f14 var objects = new Array(len)15 objects[0] = ss(f)16 for (var index = 1; index < len; index++) {17 objects[index] = ss(args[index])18 }19 return objects.join(' ')20 }21 if (typeof f !== 'string') {22 return f23 }24 var argLen = args.length25 if (argLen === 0) return f26 var str = ''27 var a = 1 - offset28 var lastPos = -129 var flen = (f && f.length) || 030 for (var i = 0; i < flen;) {31 if (f.charCodeAt(i) === 37 && i + 1 < flen) {32 lastPos = lastPos > -1 ? lastPos : 033 switch (f.charCodeAt(i + 1)) {34 case 100: // 'd'35 case 102: // 'f'36 if (a >= argLen)37 break38 if (args[a] == null) break39 if (lastPos < i)40 str += f.slice(lastPos, i)41 str += Number(args[a])42 lastPos = i + 243 i++44 break45 case 105: // 'i'46 if (a >= argLen)47 break48 if (args[a] == null) break49 if (lastPos < i)50 str += f.slice(lastPos, i)51 str += Math.floor(Number(args[a]))52 lastPos = i + 253 i++54 break55 case 79: // 'O'56 case 111: // 'o'57 case 106: // 'j'58 if (a >= argLen)59 break60 if (args[a] === undefined) break61 if (lastPos < i)62 str += f.slice(lastPos, i)63 var type = typeof args[a]64 if (type === 'string') {65 str += '\'' + args[a] + '\''66 lastPos = i + 267 i++68 break69 }70 if (type === 'function') {71 str += args[a].name || '<anonymous>'72 lastPos = i + 273 i++74 break75 }76 str += ss(args[a])77 lastPos = i + 278 i++79 break80 case 115: // 's'81 if (a >= argLen)82 break83 if (lastPos < i)84 str += f.slice(lastPos, i)85 str += String(args[a])86 lastPos = i + 287 i++88 break89 case 37: // '%'90 if (lastPos < i)91 str += f.slice(lastPos, i)92 str += '%'93 lastPos = i + 294 i++95 a--96 break97 }98 ++a99 }100 ++i101 }102 if (lastPos === -1)103 return f104 else if (lastPos < flen) {105 str += f.slice(lastPos)106 }107 108 return str109}110 