{"version":3,"sources":["sprintf.min.js","sprintf.js"],"names":["window","sprintf","key","arguments","cache","hasOwnProperty","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","Error","test","isNaN","TypeError","parseInt","String","fromCharCode","JSON","stringify","parseFloat","toExponential","toFixed","toPrecision","substring","valueOf","toUpperCase","replace","charAt","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":[null,"/* 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] && cache.hasOwnProperty(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 = {}\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 else {\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"],"sourceRoot":"/source/"}