{"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"]}