{"version":3,"sources":["sprintf.js"],"names":["window","sprintf","key","arguments","cache","parse","format","call","get_type","variable","Object","prototype","toString","slice","toLowerCase","str_repeat","input","multiplier","preformattedPadding","Array","join","re","not_string","not_bool","not_type","not_primitive","number","numeric_arg","json","not_json","text","modulo","placeholder","key_access","index_access","sign","parse_tree","argv","arg","i","k","match","pad","pad_character","pad_length","cursor","tree_length","length","node_type","output","is_positive","hasOwnProperty","Error","test","isNaN","TypeError","parseInt","String","fromCharCode","JSON","stringify","parseFloat","toExponential","toFixed","toPrecision","substring","valueOf","toUpperCase","replace","charAt","create","fmt","_fmt","arg_names","exec","SyntaxError","field_list","replacement_field","field_match","vsprintf","_argv","splice","apply","0"," ","_","exports","define","amd","this"],"mappings":"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","file":"sprintf.min.js","sourcesContent":["/* globals window, exports, define */\n\n(function(window) {\n 'use strict'\n\n var re = {\n not_string: /[^s]/,\n not_bool: /[^t]/,\n not_type: /[^T]/,\n not_primitive: /[^v]/,\n number: /[diefg]/,\n numeric_arg: /[bcdiefguxX]/,\n json: /[j]/,\n not_json: /[^j]/,\n text: /^[^\\x25]+/,\n modulo: /^\\x25{2}/,\n placeholder: /^\\x25(?:([1-9]\\d*)\\$|\\(([^\\)]+)\\))?(\\+)?(0|'[^$])?(-)?(\\d+)?(?:\\.(\\d+))?([b-gijostTuvxX])/,\n key: /^([a-z_][a-z_\\d]*)/i,\n key_access: /^\\.([a-z_][a-z_\\d]*)/i,\n index_access: /^\\[(\\d+)\\]/,\n sign: /^[\\+\\-]/\n }\n\n function sprintf() {\n var key = arguments[0], cache = sprintf.cache\n if (!(cache[key])) {\n cache[key] = sprintf.parse(key)\n }\n return sprintf.format.call(null, cache[key], arguments)\n }\n\n sprintf.format = function(parse_tree, argv) {\n var cursor = 1, tree_length = parse_tree.length, node_type = '', arg, output = [], i, k, match, pad, pad_character, pad_length, is_positive = true, sign = ''\n for (i = 0; i < tree_length; i++) {\n node_type = get_type(parse_tree[i])\n if (node_type === 'string') {\n output[output.length] = parse_tree[i]\n }\n else if (node_type === 'array') {\n match = parse_tree[i] // convenience purposes only\n if (match[2]) { // keyword argument\n arg = argv[cursor]\n for (k = 0; k < match[2].length; k++) {\n if (!arg.hasOwnProperty(match[2][k])) {\n throw new Error(sprintf('[sprintf] property \"%s\" does not exist', match[2][k]))\n }\n arg = arg[match[2][k]]\n }\n }\n else if (match[1]) { // positional argument (explicit)\n arg = argv[match[1]]\n }\n else { // positional argument (implicit)\n arg = argv[cursor++]\n }\n\n if (re.not_type.test(match[8]) && re.not_primitive.test(match[8]) && get_type(arg) == 'function') {\n arg = arg()\n }\n\n if (re.numeric_arg.test(match[8]) && (get_type(arg) != 'number' && isNaN(arg))) {\n throw new TypeError(sprintf(\"[sprintf] expecting number but found %s\", get_type(arg)))\n }\n\n if (re.number.test(match[8])) {\n is_positive = arg >= 0\n }\n\n switch (match[8]) {\n case 'b':\n arg = parseInt(arg, 10).toString(2)\n break\n case 'c':\n arg = String.fromCharCode(parseInt(arg, 10))\n break\n case 'd':\n case 'i':\n arg = parseInt(arg, 10)\n break\n case 'j':\n arg = JSON.stringify(arg, null, match[6] ? parseInt(match[6]) : 0)\n break\n case 'e':\n arg = match[7] ? parseFloat(arg).toExponential(match[7]) : parseFloat(arg).toExponential()\n break\n case 'f':\n arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg)\n break\n case 'g':\n arg = match[7] ? parseFloat(arg).toPrecision(match[7]) : parseFloat(arg)\n break\n case 'o':\n arg = arg.toString(8)\n break\n case 's':\n arg = String(arg)\n arg = (match[7] ? arg.substring(0, match[7]) : arg)\n break\n case 't':\n arg = String(!!arg)\n arg = (match[7] ? arg.substring(0, match[7]) : arg)\n break\n case 'T':\n arg = get_type(arg)\n arg = (match[7] ? arg.substring(0, match[7]) : arg)\n break\n case 'u':\n arg = parseInt(arg, 10) >>> 0\n break\n case 'v':\n arg = arg.valueOf()\n arg = (match[7] ? arg.substring(0, match[7]) : arg)\n break\n case 'x':\n arg = parseInt(arg, 10).toString(16)\n break\n case 'X':\n arg = parseInt(arg, 10).toString(16).toUpperCase()\n break\n }\n if (re.json.test(match[8])) {\n output[output.length] = arg\n }\n else {\n if (re.number.test(match[8]) && (!is_positive || match[3])) {\n sign = is_positive ? '+' : '-'\n arg = arg.toString().replace(re.sign, '')\n }\n else {\n sign = ''\n }\n pad_character = match[4] ? match[4] === '0' ? '0' : match[4].charAt(1) : ' '\n pad_length = match[6] - (sign + arg).length\n pad = match[6] ? (pad_length > 0 ? str_repeat(pad_character, pad_length) : '') : ''\n output[output.length] = match[5] ? sign + arg + pad : (pad_character === '0' ? sign + pad + arg : pad + sign + arg)\n }\n }\n }\n return output.join('')\n }\n\n sprintf.cache = Object.create(null)\n\n sprintf.parse = function(fmt) {\n var _fmt = fmt, match = [], parse_tree = [], arg_names = 0\n while (_fmt) {\n if ((match = re.text.exec(_fmt)) !== null) {\n parse_tree[parse_tree.length] = match[0]\n }\n else if ((match = re.modulo.exec(_fmt)) !== null) {\n parse_tree[parse_tree.length] = '%'\n }\n else if ((match = re.placeholder.exec(_fmt)) !== null) {\n if (match[2]) {\n arg_names |= 1\n var field_list = [], replacement_field = match[2], field_match = []\n if ((field_match = re.key.exec(replacement_field)) !== null) {\n field_list[field_list.length] = field_match[1]\n while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') {\n if ((field_match = re.key_access.exec(replacement_field)) !== null) {\n field_list[field_list.length] = field_match[1]\n }\n else if ((field_match = re.index_access.exec(replacement_field)) !== null) {\n field_list[field_list.length] = field_match[1]\n }\n else {\n throw new SyntaxError(\"[sprintf] failed to parse named argument key\")\n }\n }\n }\n else {\n throw new SyntaxError(\"[sprintf] failed to parse named argument key\")\n }\n match[2] = field_list\n }\n else {\n arg_names |= 2\n }\n if (arg_names === 3) {\n throw new Error(\"[sprintf] mixing positional and named placeholders is not (yet) supported\")\n }\n parse_tree[parse_tree.length] = match\n }\n else {\n throw new SyntaxError(\"[sprintf] unexpected placeholder\")\n }\n _fmt = _fmt.substring(match[0].length)\n }\n return parse_tree\n }\n\n var vsprintf = function(fmt, argv, _argv) {\n _argv = (argv || []).slice(0)\n _argv.splice(0, 0, fmt)\n return sprintf.apply(null, _argv)\n }\n\n /**\n * helpers\n */\n function get_type(variable) {\n if (typeof variable === 'number') {\n return 'number'\n }\n else if (typeof variable === 'string') {\n return 'string'\n }\n else {\n return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase()\n }\n }\n\n var preformattedPadding = {\n '0': ['', '0', '00', '000', '0000', '00000', '000000', '0000000'],\n ' ': ['', ' ', ' ', ' ', ' ', ' ', ' ', ' '],\n '_': ['', '_', '__', '___', '____', '_____', '______', '_______'],\n }\n function str_repeat(input, multiplier) {\n if (multiplier >= 0 && multiplier <= 7 && preformattedPadding[input]) {\n return preformattedPadding[input][multiplier]\n }\n return Array(multiplier + 1).join(input)\n }\n\n /**\n * export to either browser or node.js\n */\n if (typeof exports !== 'undefined') {\n exports.sprintf = sprintf\n exports.vsprintf = vsprintf\n }\n if (typeof window !== 'undefined') {\n window.sprintf = sprintf\n window.vsprintf = vsprintf\n\n if (typeof define === 'function' && define.amd) {\n define(function() {\n return {\n sprintf: sprintf,\n vsprintf: vsprintf\n }\n })\n }\n }\n})(typeof window === 'undefined' ? this : window);\n"]}