{"version":3,"file":"static/js/2778.fd8c45e5.js","mappings":"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","sources":["../node_modules/parse-srcset/src/parse-srcset.js","../node_modules/parse-svg-path/index.js","../node_modules/path-to-regexp/node_modules/isarray/index.js","../node_modules/performance-now/src/performance-now.coffee","../node_modules/picocolors/picocolors.browser.js","../node_modules/path-to-regexp/index.js"],"sourcesContent":["/**\n * Srcset Parser\n *\n * By Alex Bell | MIT License\n *\n * JS Parser for the string value that appears in markup \n *\n * @returns Array [{url: _, d: _, w: _, h:_}, ...]\n *\n * Based super duper closely on the reference algorithm at:\n * https://html.spec.whatwg.org/multipage/embedded-content.html#parse-a-srcset-attribute\n *\n * Most comments are copied in directly from the spec\n * (except for comments in parens).\n */\n\n(function (root, factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine([], factory);\n\t} else if (typeof module === 'object' && module.exports) {\n\t\t// Node. Does not work with strict CommonJS, but\n\t\t// only CommonJS-like environments that support module.exports,\n\t\t// like Node.\n\t\tmodule.exports = factory();\n\t} else {\n\t\t// Browser globals (root is window)\n\t\troot.parseSrcset = factory();\n\t}\n}(this, function () {\n\n\t// 1. Let input be the value passed to this algorithm.\n\treturn function (input) {\n\n\t\t// UTILITY FUNCTIONS\n\n\t\t// Manual is faster than RegEx\n\t\t// http://bjorn.tipling.com/state-and-regular-expressions-in-javascript\n\t\t// http://jsperf.com/whitespace-character/5\n\t\tfunction isSpace(c) {\n\t\t\treturn (c === \"\\u0020\" || // space\n\t\t\tc === \"\\u0009\" || // horizontal tab\n\t\t\tc === \"\\u000A\" || // new line\n\t\t\tc === \"\\u000C\" || // form feed\n\t\t\tc === \"\\u000D\"); // carriage return\n\t\t}\n\n\t\tfunction collectCharacters(regEx) {\n\t\t\tvar chars,\n\t\t\t\tmatch = regEx.exec(input.substring(pos));\n\t\t\tif (match) {\n\t\t\t\tchars = match[ 0 ];\n\t\t\t\tpos += chars.length;\n\t\t\t\treturn chars;\n\t\t\t}\n\t\t}\n\n\t\tvar inputLength = input.length,\n\n\t\t\t// (Don't use \\s, to avoid matching non-breaking space)\n\t\t\tregexLeadingSpaces = /^[ \\t\\n\\r\\u000c]+/,\n\t\t\tregexLeadingCommasOrSpaces = /^[, \\t\\n\\r\\u000c]+/,\n\t\t\tregexLeadingNotSpaces = /^[^ \\t\\n\\r\\u000c]+/,\n\t\t\tregexTrailingCommas = /[,]+$/,\n\t\t\tregexNonNegativeInteger = /^\\d+$/,\n\n\t\t\t// ( Positive or negative or unsigned integers or decimals, without or without exponents.\n\t\t\t// Must include at least one digit.\n\t\t\t// According to spec tests any decimal point must be followed by a digit.\n\t\t\t// No leading plus sign is allowed.)\n\t\t\t// https://html.spec.whatwg.org/multipage/infrastructure.html#valid-floating-point-number\n\t\t\tregexFloatingPoint = /^-?(?:[0-9]+|[0-9]*\\.[0-9]+)(?:[eE][+-]?[0-9]+)?$/,\n\n\t\t\turl,\n\t\t\tdescriptors,\n\t\t\tcurrentDescriptor,\n\t\t\tstate,\n\t\t\tc,\n\n\t\t\t// 2. Let position be a pointer into input, initially pointing at the start\n\t\t\t// of the string.\n\t\t\tpos = 0,\n\n\t\t\t// 3. Let candidates be an initially empty source set.\n\t\t\tcandidates = [];\n\n\t\t// 4. Splitting loop: Collect a sequence of characters that are space\n\t\t// characters or U+002C COMMA characters. If any U+002C COMMA characters\n\t\t// were collected, that is a parse error.\n\t\twhile (true) {\n\t\t\tcollectCharacters(regexLeadingCommasOrSpaces);\n\n\t\t\t// 5. If position is past the end of input, return candidates and abort these steps.\n\t\t\tif (pos >= inputLength) {\n\t\t\t\treturn candidates; // (we're done, this is the sole return path)\n\t\t\t}\n\n\t\t\t// 6. Collect a sequence of characters that are not space characters,\n\t\t\t// and let that be url.\n\t\t\turl = collectCharacters(regexLeadingNotSpaces);\n\n\t\t\t// 7. Let descriptors be a new empty list.\n\t\t\tdescriptors = [];\n\n\t\t\t// 8. If url ends with a U+002C COMMA character (,), follow these substeps:\n\t\t\t//\t\t(1). Remove all trailing U+002C COMMA characters from url. If this removed\n\t\t\t// more than one character, that is a parse error.\n\t\t\tif (url.slice(-1) === \",\") {\n\t\t\t\turl = url.replace(regexTrailingCommas, \"\");\n\t\t\t\t// (Jump ahead to step 9 to skip tokenization and just push the candidate).\n\t\t\t\tparseDescriptors();\n\n\t\t\t\t//\tOtherwise, follow these substeps:\n\t\t\t} else {\n\t\t\t\ttokenize();\n\t\t\t} // (close else of step 8)\n\n\t\t\t// 16. Return to the step labeled splitting loop.\n\t\t} // (Close of big while loop.)\n\n\t\t/**\n\t\t * Tokenizes descriptor properties prior to parsing\n\t\t * Returns undefined.\n\t\t */\n\t\tfunction tokenize() {\n\n\t\t\t// 8.1. Descriptor tokeniser: Skip whitespace\n\t\t\tcollectCharacters(regexLeadingSpaces);\n\n\t\t\t// 8.2. Let current descriptor be the empty string.\n\t\t\tcurrentDescriptor = \"\";\n\n\t\t\t// 8.3. Let state be in descriptor.\n\t\t\tstate = \"in descriptor\";\n\n\t\t\twhile (true) {\n\n\t\t\t\t// 8.4. Let c be the character at position.\n\t\t\t\tc = input.charAt(pos);\n\n\t\t\t\t// Do the following depending on the value of state.\n\t\t\t\t// For the purpose of this step, \"EOF\" is a special character representing\n\t\t\t\t// that position is past the end of input.\n\n\t\t\t\t// In descriptor\n\t\t\t\tif (state === \"in descriptor\") {\n\t\t\t\t\t// Do the following, depending on the value of c:\n\n\t\t\t\t\t// Space character\n\t\t\t\t\t// If current descriptor is not empty, append current descriptor to\n\t\t\t\t\t// descriptors and let current descriptor be the empty string.\n\t\t\t\t\t// Set state to after descriptor.\n\t\t\t\t\tif (isSpace(c)) {\n\t\t\t\t\t\tif (currentDescriptor) {\n\t\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\t\tcurrentDescriptor = \"\";\n\t\t\t\t\t\t\tstate = \"after descriptor\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// U+002C COMMA (,)\n\t\t\t\t\t\t// Advance position to the next character in input. If current descriptor\n\t\t\t\t\t\t// is not empty, append current descriptor to descriptors. Jump to the step\n\t\t\t\t\t\t// labeled descriptor parser.\n\t\t\t\t\t} else if (c === \",\") {\n\t\t\t\t\t\tpos += 1;\n\t\t\t\t\t\tif (currentDescriptor) {\n\t\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t// U+0028 LEFT PARENTHESIS (()\n\t\t\t\t\t\t// Append c to current descriptor. Set state to in parens.\n\t\t\t\t\t} else if (c === \"\\u0028\") {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t\tstate = \"in parens\";\n\n\t\t\t\t\t\t// EOF\n\t\t\t\t\t\t// If current descriptor is not empty, append current descriptor to\n\t\t\t\t\t\t// descriptors. Jump to the step labeled descriptor parser.\n\t\t\t\t\t} else if (c === \"\") {\n\t\t\t\t\t\tif (currentDescriptor) {\n\t\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t// Anything else\n\t\t\t\t\t\t// Append c to current descriptor.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t}\n\t\t\t\t\t// (end \"in descriptor\"\n\n\t\t\t\t\t// In parens\n\t\t\t\t} else if (state === \"in parens\") {\n\n\t\t\t\t\t// U+0029 RIGHT PARENTHESIS ())\n\t\t\t\t\t// Append c to current descriptor. Set state to in descriptor.\n\t\t\t\t\tif (c === \")\") {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t\tstate = \"in descriptor\";\n\n\t\t\t\t\t\t// EOF\n\t\t\t\t\t\t// Append current descriptor to descriptors. Jump to the step labeled\n\t\t\t\t\t\t// descriptor parser.\n\t\t\t\t\t} else if (c === \"\") {\n\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t// Anything else\n\t\t\t\t\t\t// Append c to current descriptor.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t}\n\n\t\t\t\t\t// After descriptor\n\t\t\t\t} else if (state === \"after descriptor\") {\n\n\t\t\t\t\t// Do the following, depending on the value of c:\n\t\t\t\t\t// Space character: Stay in this state.\n\t\t\t\t\tif (isSpace(c)) {\n\n\t\t\t\t\t\t// EOF: Jump to the step labeled descriptor parser.\n\t\t\t\t\t} else if (c === \"\") {\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t// Anything else\n\t\t\t\t\t\t// Set state to in descriptor. Set position to the previous character in input.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstate = \"in descriptor\";\n\t\t\t\t\t\tpos -= 1;\n\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Advance position to the next character in input.\n\t\t\t\tpos += 1;\n\n\t\t\t\t// Repeat this step.\n\t\t\t} // (close while true loop)\n\t\t}\n\n\t\t/**\n\t\t * Adds descriptor properties to a candidate, pushes to the candidates array\n\t\t * @return undefined\n\t\t */\n\t\t// Declared outside of the while loop so that it's only created once.\n\t\tfunction parseDescriptors() {\n\n\t\t\t// 9. Descriptor parser: Let error be no.\n\t\t\tvar pError = false,\n\n\t\t\t\t// 10. Let width be absent.\n\t\t\t\t// 11. Let density be absent.\n\t\t\t\t// 12. Let future-compat-h be absent. (We're implementing it now as h)\n\t\t\t\tw, d, h, i,\n\t\t\t\tcandidate = {},\n\t\t\t\tdesc, lastChar, value, intVal, floatVal;\n\n\t\t\t// 13. For each descriptor in descriptors, run the appropriate set of steps\n\t\t\t// from the following list:\n\t\t\tfor (i = 0 ; i < descriptors.length; i++) {\n\t\t\t\tdesc = descriptors[ i ];\n\n\t\t\t\tlastChar = desc[ desc.length - 1 ];\n\t\t\t\tvalue = desc.substring(0, desc.length - 1);\n\t\t\t\tintVal = parseInt(value, 10);\n\t\t\t\tfloatVal = parseFloat(value);\n\n\t\t\t\t// If the descriptor consists of a valid non-negative integer followed by\n\t\t\t\t// a U+0077 LATIN SMALL LETTER W character\n\t\t\t\tif (regexNonNegativeInteger.test(value) && (lastChar === \"w\")) {\n\n\t\t\t\t\t// If width and density are not both absent, then let error be yes.\n\t\t\t\t\tif (w || d) {pError = true;}\n\n\t\t\t\t\t// Apply the rules for parsing non-negative integers to the descriptor.\n\t\t\t\t\t// If the result is zero, let error be yes.\n\t\t\t\t\t// Otherwise, let width be the result.\n\t\t\t\t\tif (intVal === 0) {pError = true;} else {w = intVal;}\n\n\t\t\t\t\t// If the descriptor consists of a valid floating-point number followed by\n\t\t\t\t\t// a U+0078 LATIN SMALL LETTER X character\n\t\t\t\t} else if (regexFloatingPoint.test(value) && (lastChar === \"x\")) {\n\n\t\t\t\t\t// If width, density and future-compat-h are not all absent, then let error\n\t\t\t\t\t// be yes.\n\t\t\t\t\tif (w || d || h) {pError = true;}\n\n\t\t\t\t\t// Apply the rules for parsing floating-point number values to the descriptor.\n\t\t\t\t\t// If the result is less than zero, let error be yes. Otherwise, let density\n\t\t\t\t\t// be the result.\n\t\t\t\t\tif (floatVal < 0) {pError = true;} else {d = floatVal;}\n\n\t\t\t\t\t// If the descriptor consists of a valid non-negative integer followed by\n\t\t\t\t\t// a U+0068 LATIN SMALL LETTER H character\n\t\t\t\t} else if (regexNonNegativeInteger.test(value) && (lastChar === \"h\")) {\n\n\t\t\t\t\t// If height and density are not both absent, then let error be yes.\n\t\t\t\t\tif (h || d) {pError = true;}\n\n\t\t\t\t\t// Apply the rules for parsing non-negative integers to the descriptor.\n\t\t\t\t\t// If the result is zero, let error be yes. Otherwise, let future-compat-h\n\t\t\t\t\t// be the result.\n\t\t\t\t\tif (intVal === 0) {pError = true;} else {h = intVal;}\n\n\t\t\t\t\t// Anything else, Let error be yes.\n\t\t\t\t} else {pError = true;}\n\t\t\t} // (close step 13 for loop)\n\n\t\t\t// 15. If error is still no, then append a new image source to candidates whose\n\t\t\t// URL is url, associated with a width width if not absent and a pixel\n\t\t\t// density density if not absent. Otherwise, there is a parse error.\n\t\t\tif (!pError) {\n\t\t\t\tcandidate.url = url;\n\t\t\t\tif (w) { candidate.w = w;}\n\t\t\t\tif (d) { candidate.d = d;}\n\t\t\t\tif (h) { candidate.h = h;}\n\t\t\t\tcandidates.push(candidate);\n\t\t\t} else if (console && console.log) {\n\t\t\t\tconsole.log(\"Invalid srcset descriptor found in '\" +\n\t\t\t\t\tinput + \"' at '\" + desc + \"'.\");\n\t\t\t}\n\t\t} // (close parseDescriptors fn)\n\n\t}\n}));\n","\nmodule.exports = parse\n\n/**\n * expected argument lengths\n * @type {Object}\n */\n\nvar length = {a: 7, c: 6, h: 1, l: 2, m: 2, q: 4, s: 4, t: 2, v: 1, z: 0}\n\n/**\n * segment pattern\n * @type {RegExp}\n */\n\nvar segment = /([astvzqmhlc])([^astvzqmhlc]*)/ig\n\n/**\n * parse an svg path data string. Generates an Array\n * of commands where each command is an Array of the\n * form `[command, arg1, arg2, ...]`\n *\n * @param {String} path\n * @return {Array}\n */\n\nfunction parse(path) {\n\tvar data = []\n\tpath.replace(segment, function(_, command, args){\n\t\tvar type = command.toLowerCase()\n\t\targs = parseValues(args)\n\n\t\t// overloaded moveTo\n\t\tif (type == 'm' && args.length > 2) {\n\t\t\tdata.push([command].concat(args.splice(0, 2)))\n\t\t\ttype = 'l'\n\t\t\tcommand = command == 'm' ? 'l' : 'L'\n\t\t}\n\n\t\twhile (true) {\n\t\t\tif (args.length == length[type]) {\n\t\t\t\targs.unshift(command)\n\t\t\t\treturn data.push(args)\n\t\t\t}\n\t\t\tif (args.length < length[type]) throw new Error('malformed path data')\n\t\t\tdata.push([command].concat(args.splice(0, length[type])))\n\t\t}\n\t})\n\treturn data\n}\n\nvar number = /-?[0-9]*\\.?[0-9]+(?:e[-+]?\\d+)?/ig\n\nfunction parseValues(args) {\n\tvar numbers = args.match(number)\n\treturn numbers ? numbers.map(Number) : []\n}\n","module.exports = Array.isArray || function (arr) {\n return Object.prototype.toString.call(arr) == '[object Array]';\n};\n","if performance? and performance.now\n module.exports = -> performance.now()\nelse if process? and process.hrtime\n module.exports = -> (getNanoSeconds() - nodeLoadTime) / 1e6\n hrtime = process.hrtime\n getNanoSeconds = ->\n hr = hrtime()\n hr[0] * 1e9 + hr[1]\n moduleLoadTime = getNanoSeconds()\n upTime = process.uptime() * 1e9\n nodeLoadTime = moduleLoadTime - upTime\nelse if Date.now\n module.exports = -> Date.now() - loadTime\n loadTime = Date.now()\nelse\n module.exports = -> new Date().getTime() - loadTime\n loadTime = new Date().getTime()\n","var x=String;\nvar create=function() {return {isColorSupported:false,reset:x,bold:x,dim:x,italic:x,underline:x,inverse:x,hidden:x,strikethrough:x,black:x,red:x,green:x,yellow:x,blue:x,magenta:x,cyan:x,white:x,gray:x,bgBlack:x,bgRed:x,bgGreen:x,bgYellow:x,bgBlue:x,bgMagenta:x,bgCyan:x,bgWhite:x,blackBright:x,redBright:x,greenBright:x,yellowBright:x,blueBright:x,magentaBright:x,cyanBright:x,whiteBright:x,bgBlackBright:x,bgRedBright:x,bgGreenBright:x,bgYellowBright:x,bgBlueBright:x,bgMagentaBright:x,bgCyanBright:x,bgWhiteBright:x}};\nmodule.exports=create();\nmodule.exports.createColors = create;\n","var isarray = require('isarray')\n\n/**\n * Expose `pathToRegexp`.\n */\nmodule.exports = pathToRegexp\nmodule.exports.parse = parse\nmodule.exports.compile = compile\nmodule.exports.tokensToFunction = tokensToFunction\nmodule.exports.tokensToRegExp = tokensToRegExp\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n // Match escaped characters that would otherwise appear in future matches.\n // This allows the user to escape special characters that won't transform.\n '(\\\\\\\\.)',\n // Match Express-style parameters and un-named parameters with a prefix\n // and optional suffixes. Matches appear as:\n //\n // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n // \"/route(\\\\d+)\" => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n // \"/*\" => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n '([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))'\n].join('|'), 'g')\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n var tokens = []\n var key = 0\n var index = 0\n var path = ''\n var defaultDelimiter = options && options.delimiter || '/'\n var res\n\n while ((res = PATH_REGEXP.exec(str)) != null) {\n var m = res[0]\n var escaped = res[1]\n var offset = res.index\n path += str.slice(index, offset)\n index = offset + m.length\n\n // Ignore already escaped sequences.\n if (escaped) {\n path += escaped[1]\n continue\n }\n\n var next = str[index]\n var prefix = res[2]\n var name = res[3]\n var capture = res[4]\n var group = res[5]\n var modifier = res[6]\n var asterisk = res[7]\n\n // Push the current path onto the tokens.\n if (path) {\n tokens.push(path)\n path = ''\n }\n\n var partial = prefix != null && next != null && next !== prefix\n var repeat = modifier === '+' || modifier === '*'\n var optional = modifier === '?' || modifier === '*'\n var delimiter = prefix || defaultDelimiter\n var pattern = capture || group\n var prevText = prefix || (typeof tokens[tokens.length - 1] === 'string' ? tokens[tokens.length - 1] : '')\n\n tokens.push({\n name: name || key++,\n prefix: prefix || '',\n delimiter: delimiter,\n optional: optional,\n repeat: repeat,\n partial: partial,\n asterisk: !!asterisk,\n pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : restrictBacktrack(delimiter, prevText))\n })\n }\n\n // Match any characters still remaining.\n if (index < str.length) {\n path += str.substr(index)\n }\n\n // If the path exists, push it onto the end.\n if (path) {\n tokens.push(path)\n }\n\n return tokens\n}\n\nfunction restrictBacktrack(delimiter, prevText) {\n if (!prevText || prevText.indexOf(delimiter) > -1) {\n return '[^' + escapeString(delimiter) + ']+?'\n }\n\n return escapeString(prevText) + '|(?:(?!' + escapeString(prevText) + ')[^' + escapeString(delimiter) + '])+?'\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n return tokensToFunction(parse(str, options), options)\n}\n\n/**\n * Prettier encoding of URI path segments.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeURIComponentPretty (str) {\n return encodeURI(str).replace(/[\\/?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeAsterisk (str) {\n return encodeURI(str).replace(/[?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens, options) {\n // Compile all the tokens into regexps.\n var matches = new Array(tokens.length)\n\n // Compile all the patterns before compilation.\n for (var i = 0; i < tokens.length; i++) {\n if (typeof tokens[i] === 'object') {\n matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options))\n }\n }\n\n return function (obj, opts) {\n var path = ''\n var data = obj || {}\n var options = opts || {}\n var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (typeof token === 'string') {\n path += token\n\n continue\n }\n\n var value = data[token.name]\n var segment\n\n if (value == null) {\n if (token.optional) {\n // Prepend partial segment prefixes.\n if (token.partial) {\n path += token.prefix\n }\n\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to be defined')\n }\n }\n\n if (isarray(value)) {\n if (!token.repeat) {\n throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`')\n }\n\n if (value.length === 0) {\n if (token.optional) {\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n }\n }\n\n for (var j = 0; j < value.length; j++) {\n segment = encode(value[j])\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`')\n }\n\n path += (j === 0 ? token.prefix : token.delimiter) + segment\n }\n\n continue\n }\n\n segment = token.asterisk ? encodeAsterisk(value) : encode(value)\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n }\n\n path += token.prefix + segment\n }\n\n return path\n }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n return str.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n return group.replace(/([=!:$\\/()])/g, '\\\\$1')\n}\n\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param {!RegExp} re\n * @param {Array} keys\n * @return {!RegExp}\n */\nfunction attachKeys (re, keys) {\n re.keys = keys\n return re\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param {Object} options\n * @return {string}\n */\nfunction flags (options) {\n return options && options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param {!RegExp} path\n * @param {!Array} keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n // Use a negative lookahead to match only capturing groups.\n var groups = path.source.match(/\\((?!\\?)/g)\n\n if (groups) {\n for (var i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: null,\n delimiter: null,\n optional: false,\n repeat: false,\n partial: false,\n asterisk: false,\n pattern: null\n })\n }\n }\n\n return attachKeys(path, keys)\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param {!Array} path\n * @param {Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n var parts = []\n\n for (var i = 0; i < path.length; i++) {\n parts.push(pathToRegexp(path[i], keys, options).source)\n }\n\n var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options))\n\n return attachKeys(regexp, keys)\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param {string} path\n * @param {!Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param {!Array} tokens\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options)\n keys = []\n }\n\n options = options || {}\n\n var strict = options.strict\n var end = options.end !== false\n var route = ''\n\n // Iterate over the tokens and create our regexp string.\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (typeof token === 'string') {\n route += escapeString(token)\n } else {\n var prefix = escapeString(token.prefix)\n var capture = '(?:' + token.pattern + ')'\n\n keys.push(token)\n\n if (token.repeat) {\n capture += '(?:' + prefix + capture + ')*'\n }\n\n if (token.optional) {\n if (!token.partial) {\n capture = '(?:' + prefix + '(' + capture + '))?'\n } else {\n capture = prefix + '(' + capture + ')?'\n }\n } else {\n capture = prefix + '(' + capture + ')'\n }\n\n route += capture\n }\n }\n\n var delimiter = escapeString(options.delimiter || '/')\n var endsWithDelimiter = route.slice(-delimiter.length) === delimiter\n\n // In non-strict mode we allow a slash at the end of match. If the path to\n // match already ends with a slash, we remove it for consistency. The slash\n // is valid at the end of a path match, not in the middle. This is important\n // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n if (!strict) {\n route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?'\n }\n\n if (end) {\n route += '$'\n } else {\n // In non-ending mode, we need the capturing groups to match as much as\n // possible by using a positive lookahead to the end or next path segment.\n route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)'\n }\n\n return attachKeys(new RegExp('^' + route, flags(options)), keys)\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param {(string|RegExp|Array)} path\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options)\n keys = []\n }\n\n options = options || {}\n\n if (path instanceof RegExp) {\n return regexpToRegexp(path, /** @type {!Array} */ (keys))\n }\n\n if (isarray(path)) {\n return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)\n }\n\n return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)\n}\n"],"names":["define","input","isSpace","c","collectCharacters","regEx","chars","match","exec","substring","pos","length","url","descriptors","currentDescriptor","state","inputLength","regexLeadingSpaces","regexLeadingCommasOrSpaces","regexLeadingNotSpaces","regexTrailingCommas","regexNonNegativeInteger","regexFloatingPoint","candidates","slice","replace","parseDescriptors","tokenize","charAt","push","w","d","h","i","desc","lastChar","value","intVal","floatVal","pError","candidate","parseInt","parseFloat","test","console","log","module","exports","path","data","segment","_","command","args","type","toLowerCase","numbers","number","map","Number","parseValues","concat","splice","unshift","Error","a","l","m","q","s","t","v","z","Array","isArray","arr","Object","prototype","toString","call","getNanoSeconds","hrtime","loadTime","moduleLoadTime","nodeLoadTime","upTime","performance","now","process","hr","uptime","Date","getTime","x","String","create","isColorSupported","reset","bold","dim","italic","underline","inverse","hidden","strikethrough","black","red","green","yellow","blue","magenta","cyan","white","gray","bgBlack","bgRed","bgGreen","bgYellow","bgBlue","bgMagenta","bgCyan","bgWhite","blackBright","redBright","greenBright","yellowBright","blueBright","magentaBright","cyanBright","whiteBright","bgBlackBright","bgRedBright","bgGreenBright","bgYellowBright","bgBlueBright","bgMagentaBright","bgCyanBright","bgWhiteBright","createColors","isarray","require","pathToRegexp","parse","compile","str","options","tokensToFunction","tokensToRegExp","PATH_REGEXP","RegExp","join","res","tokens","key","index","defaultDelimiter","delimiter","escaped","offset","next","prefix","name","capture","group","modifier","asterisk","partial","repeat","optional","pattern","prevText","escapeGroup","restrictBacktrack","substr","indexOf","escapeString","encodeURIComponentPretty","encodeURI","charCodeAt","toUpperCase","matches","flags","obj","opts","encode","pretty","encodeURIComponent","token","TypeError","JSON","stringify","j","attachKeys","re","keys","sensitive","strict","end","route","endsWithDelimiter","groups","source","regexpToRegexp","parts","arrayToRegexp","stringToRegexp"],"sourceRoot":""}