From a83963231930a5fb8f6c17551a2f05d64404e322 Mon Sep 17 00:00:00 2001 From: eps1lon Date: Fri, 2 Aug 2024 22:27:46 +0200 Subject: [PATCH] ncc path-to-regexp instead that way old-style import still works and package.json is present. otherwise we may need to rewrite to `.../path-to-regexp/dist` and also make an exclusion to not gitignore path-to-regexp/dist. It's also the only vendored library not passed through ncc which is sus. --- .../next/src/compiled/path-to-regexp/LICENSE | 21 + .../next/src/compiled/path-to-regexp/index.js | 407 +-- .../src/compiled/path-to-regexp/index.js.map | 1 - .../src/compiled/path-to-regexp/index.spec.js | 2737 ----------------- .../compiled/path-to-regexp/index.spec.js.map | 1 - .../src/compiled/path-to-regexp/package.json | 87 +- packages/next/taskfile.js | 21 +- 7 files changed, 28 insertions(+), 3247 deletions(-) create mode 100644 packages/next/src/compiled/path-to-regexp/LICENSE delete mode 100644 packages/next/src/compiled/path-to-regexp/index.js.map delete mode 100644 packages/next/src/compiled/path-to-regexp/index.spec.js delete mode 100644 packages/next/src/compiled/path-to-regexp/index.spec.js.map diff --git a/packages/next/src/compiled/path-to-regexp/LICENSE b/packages/next/src/compiled/path-to-regexp/LICENSE new file mode 100644 index 0000000000000..983fbe8aec3f4 --- /dev/null +++ b/packages/next/src/compiled/path-to-regexp/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/packages/next/src/compiled/path-to-regexp/index.js b/packages/next/src/compiled/path-to-regexp/index.js index 8b9a4edb552bd..e553477289d9a 100644 --- a/packages/next/src/compiled/path-to-regexp/index.js +++ b/packages/next/src/compiled/path-to-regexp/index.js @@ -1,406 +1 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -/** - * Tokenize input string. - */ -function lexer(str) { - var tokens = []; - var i = 0; - while (i < str.length) { - var char = str[i]; - if (char === "*" || char === "+" || char === "?") { - tokens.push({ type: "MODIFIER", index: i, value: str[i++] }); - continue; - } - if (char === "\\") { - tokens.push({ type: "ESCAPED_CHAR", index: i++, value: str[i++] }); - continue; - } - if (char === "{") { - tokens.push({ type: "OPEN", index: i, value: str[i++] }); - continue; - } - if (char === "}") { - tokens.push({ type: "CLOSE", index: i, value: str[i++] }); - continue; - } - if (char === ":") { - var name = ""; - var j = i + 1; - while (j < str.length) { - var code = str.charCodeAt(j); - if ( - // `0-9` - (code >= 48 && code <= 57) || - // `A-Z` - (code >= 65 && code <= 90) || - // `a-z` - (code >= 97 && code <= 122) || - // `_` - code === 95) { - name += str[j++]; - continue; - } - break; - } - if (!name) - throw new TypeError("Missing parameter name at " + i); - tokens.push({ type: "NAME", index: i, value: name }); - i = j; - continue; - } - if (char === "(") { - var count = 1; - var pattern = ""; - var j = i + 1; - if (str[j] === "?") { - throw new TypeError("Pattern cannot start with \"?\" at " + j); - } - while (j < str.length) { - if (str[j] === "\\") { - pattern += str[j++] + str[j++]; - continue; - } - if (str[j] === ")") { - count--; - if (count === 0) { - j++; - break; - } - } - else if (str[j] === "(") { - count++; - if (str[j + 1] !== "?") { - throw new TypeError("Capturing groups are not allowed at " + j); - } - } - pattern += str[j++]; - } - if (count) - throw new TypeError("Unbalanced pattern at " + i); - if (!pattern) - throw new TypeError("Missing pattern at " + i); - tokens.push({ type: "PATTERN", index: i, value: pattern }); - i = j; - continue; - } - tokens.push({ type: "CHAR", index: i, value: str[i++] }); - } - tokens.push({ type: "END", index: i, value: "" }); - return tokens; -} -/** - * Parse a string for the raw tokens. - */ -function parse(str, options) { - if (options === void 0) { options = {}; } - var tokens = lexer(str); - var _a = options.prefixes, prefixes = _a === void 0 ? "./" : _a; - var defaultPattern = "[^" + escapeString(options.delimiter || "/#?") + "]+?"; - var result = []; - var key = 0; - var i = 0; - var path = ""; - var tryConsume = function (type) { - if (i < tokens.length && tokens[i].type === type) - return tokens[i++].value; - }; - var mustConsume = function (type) { - var value = tryConsume(type); - if (value !== undefined) - return value; - var _a = tokens[i], nextType = _a.type, index = _a.index; - throw new TypeError("Unexpected " + nextType + " at " + index + ", expected " + type); - }; - var consumeText = function () { - var result = ""; - var value; - // tslint:disable-next-line - while ((value = tryConsume("CHAR") || tryConsume("ESCAPED_CHAR"))) { - result += value; - } - return result; - }; - while (i < tokens.length) { - var char = tryConsume("CHAR"); - var name = tryConsume("NAME"); - var pattern = tryConsume("PATTERN"); - if (name || pattern) { - var prefix = char || ""; - if (prefixes.indexOf(prefix) === -1) { - path += prefix; - prefix = ""; - } - if (path) { - result.push(path); - path = ""; - } - result.push({ - name: name || key++, - prefix: prefix, - suffix: "", - pattern: pattern || defaultPattern, - modifier: tryConsume("MODIFIER") || "" - }); - continue; - } - var value = char || tryConsume("ESCAPED_CHAR"); - if (value) { - path += value; - continue; - } - if (path) { - result.push(path); - path = ""; - } - var open = tryConsume("OPEN"); - if (open) { - var prefix = consumeText(); - var name_1 = tryConsume("NAME") || ""; - var pattern_1 = tryConsume("PATTERN") || ""; - var suffix = consumeText(); - mustConsume("CLOSE"); - result.push({ - name: name_1 || (pattern_1 ? key++ : ""), - pattern: name_1 && !pattern_1 ? defaultPattern : pattern_1, - prefix: prefix, - suffix: suffix, - modifier: tryConsume("MODIFIER") || "" - }); - continue; - } - mustConsume("END"); - } - return result; -} -exports.parse = parse; -/** - * Compile a string to a template function for the path. - */ -function compile(str, options) { - return tokensToFunction(parse(str, options), options); -} -exports.compile = compile; -/** - * Expose a method for transforming tokens into the path function. - */ -function tokensToFunction(tokens, options) { - if (options === void 0) { options = {}; } - var reFlags = flags(options); - var _a = options.encode, encode = _a === void 0 ? function (x) { return x; } : _a, _b = options.validate, validate = _b === void 0 ? true : _b; - // Compile all the tokens into regexps. - var matches = tokens.map(function (token) { - if (typeof token === "object") { - return new RegExp("^(?:" + token.pattern + ")$", reFlags); - } - }); - return function (data) { - var path = ""; - for (var i = 0; i < tokens.length; i++) { - var token = tokens[i]; - if (typeof token === "string") { - path += token; - continue; - } - var value = data ? data[token.name] : undefined; - var optional = token.modifier === "?" || token.modifier === "*"; - var repeat = token.modifier === "*" || token.modifier === "+"; - if (Array.isArray(value)) { - if (!repeat) { - throw new TypeError("Expected \"" + token.name + "\" to not repeat, but got an array"); - } - if (value.length === 0) { - if (optional) - continue; - throw new TypeError("Expected \"" + token.name + "\" to not be empty"); - } - for (var j = 0; j < value.length; j++) { - var segment = encode(value[j], token); - if (validate && !matches[i].test(segment)) { - throw new TypeError("Expected all \"" + token.name + "\" to match \"" + token.pattern + "\", but got \"" + segment + "\""); - } - path += token.prefix + segment + token.suffix; - } - continue; - } - if (typeof value === "string" || typeof value === "number") { - var segment = encode(String(value), token); - if (validate && !matches[i].test(segment)) { - throw new TypeError("Expected \"" + token.name + "\" to match \"" + token.pattern + "\", but got \"" + segment + "\""); - } - path += token.prefix + segment + token.suffix; - continue; - } - if (optional) - continue; - var typeOfMessage = repeat ? "an array" : "a string"; - throw new TypeError("Expected \"" + token.name + "\" to be " + typeOfMessage); - } - return path; - }; -} -exports.tokensToFunction = tokensToFunction; -/** - * Create path match function from `path-to-regexp` spec. - */ -function match(str, options) { - var keys = []; - var re = pathToRegexp(str, keys, options); - return regexpToFunction(re, keys, options); -} -exports.match = match; -/** - * Create a path match function from `path-to-regexp` output. - */ -function regexpToFunction(re, keys, options) { - if (options === void 0) { options = {}; } - var _a = options.decode, decode = _a === void 0 ? function (x) { return x; } : _a; - return function (pathname) { - var m = re.exec(pathname); - if (!m) - return false; - var path = m[0], index = m.index; - var params = Object.create(null); - var _loop_1 = function (i) { - // tslint:disable-next-line - if (m[i] === undefined) - return "continue"; - var key = keys[i - 1]; - if (key.modifier === "*" || key.modifier === "+") { - params[key.name] = m[i].split(key.prefix + key.suffix).map(function (value) { - return decode(value, key); - }); - } - else { - params[key.name] = decode(m[i], key); - } - }; - for (var i = 1; i < m.length; i++) { - _loop_1(i); - } - return { path: path, index: index, params: params }; - }; -} -exports.regexpToFunction = regexpToFunction; -/** - * Escape a regular expression string. - */ -function escapeString(str) { - return str.replace(/([.+*?=^!:${}()[\]|/\\])/g, "\\$1"); -} -/** - * Get the flags for a regexp from the options. - */ -function flags(options) { - return options && options.sensitive ? "" : "i"; -} -/** - * Pull out keys from a regexp. - */ -function regexpToRegexp(path, keys) { - if (!keys) - return path; - // Use a negative lookahead to match only capturing groups. - var groups = path.source.match(/\((?!\?)/g); - if (groups) { - for (var i = 0; i < groups.length; i++) { - keys.push({ - name: i, - prefix: "", - suffix: "", - modifier: "", - pattern: "" - }); - } - } - return path; -} -/** - * Transform an array into a regexp. - */ -function arrayToRegexp(paths, keys, options) { - var parts = paths.map(function (path) { return pathToRegexp(path, keys, options).source; }); - return new RegExp("(?:" + parts.join("|") + ")", flags(options)); -} -/** - * Create a path regexp from string input. - */ -function stringToRegexp(path, keys, options) { - return tokensToRegexp(parse(path, options), keys, options); -} -/** - * Expose a function for taking tokens and returning a RegExp. - */ -function tokensToRegexp(tokens, keys, options) { - if (options === void 0) { options = {}; } - var _a = options.strict, strict = _a === void 0 ? false : _a, _b = options.start, start = _b === void 0 ? true : _b, _c = options.end, end = _c === void 0 ? true : _c, _d = options.encode, encode = _d === void 0 ? function (x) { return x; } : _d; - var endsWith = "[" + escapeString(options.endsWith || "") + "]|$"; - var delimiter = "[" + escapeString(options.delimiter || "/#?") + "]"; - var route = start ? "^" : ""; - // Iterate over the tokens and create our regexp string. - for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) { - var token = tokens_1[_i]; - if (typeof token === "string") { - route += escapeString(encode(token)); - } - else { - var prefix = escapeString(encode(token.prefix)); - var suffix = escapeString(encode(token.suffix)); - if (token.pattern) { - if (keys) - keys.push(token); - if (prefix || suffix) { - if (token.modifier === "+" || token.modifier === "*") { - var mod = token.modifier === "*" ? "?" : ""; - route += "(?:" + prefix + "((?:" + token.pattern + ")(?:" + suffix + prefix + "(?:" + token.pattern + "))*)" + suffix + ")" + mod; - } - else { - route += "(?:" + prefix + "(" + token.pattern + ")" + suffix + ")" + token.modifier; - } - } - else { - route += "(" + token.pattern + ")" + token.modifier; - } - } - else { - route += "(?:" + prefix + suffix + ")" + token.modifier; - } - } - } - if (end) { - if (!strict) - route += delimiter + "?"; - route += !options.endsWith ? "$" : "(?=" + endsWith + ")"; - } - else { - var endToken = tokens[tokens.length - 1]; - var isEndDelimited = typeof endToken === "string" - ? delimiter.indexOf(endToken[endToken.length - 1]) > -1 - : // tslint:disable-next-line - endToken === undefined; - if (!strict) { - route += "(?:" + delimiter + "(?=" + endsWith + "))?"; - } - if (!isEndDelimited) { - route += "(?=" + delimiter + "|" + endsWith + ")"; - } - } - return new RegExp(route, flags(options)); -} -exports.tokensToRegexp = tokensToRegexp; -/** - * Normalize the given path string, returning a regular expression. - * - * An empty array can be passed in for the keys, which will hold the - * placeholder key descriptions. For example, using `/user/:id`, `keys` will - * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`. - */ -function pathToRegexp(path, keys, options) { - if (path instanceof RegExp) - return regexpToRegexp(path, keys); - if (Array.isArray(path)) - return arrayToRegexp(path, keys, options); - return stringToRegexp(path, keys, options); -} -exports.pathToRegexp = pathToRegexp; -//# sourceMappingURL=index.js.map \ No newline at end of file +(()=>{"use strict";if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var e={};(()=>{var r=e;Object.defineProperty(r,"__esModule",{value:true});function lexer(e){var r=[];var n=0;while(n=48&&o<=57||o>=65&&o<=90||o>=97&&o<=122||o===95){i+=e[a++];continue}break}if(!i)throw new TypeError("Missing parameter name at "+n);r.push({type:"NAME",index:n,value:i});n=a;continue}if(t==="("){var f=1;var u="";var a=n+1;if(e[a]==="?"){throw new TypeError('Pattern cannot start with "?" at '+a)}while(a-1:T===undefined;if(!i){d+="(?:"+s+"(?="+c+"))?"}if(!y){d+="(?="+s+"|"+c+")"}}return new RegExp(d,flags(n))}r.tokensToRegexp=tokensToRegexp;function pathToRegexp(e,r,n){if(e instanceof RegExp)return regexpToRegexp(e,r);if(Array.isArray(e))return arrayToRegexp(e,r,n);return stringToRegexp(e,r,n)}r.pathToRegexp=pathToRegexp})();module.exports=e})(); \ No newline at end of file diff --git a/packages/next/src/compiled/path-to-regexp/index.js.map b/packages/next/src/compiled/path-to-regexp/index.js.map deleted file mode 100644 index d5f148ed3ed9c..0000000000000 --- a/packages/next/src/compiled/path-to-regexp/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Tokenizer results.\n */\ninterface LexToken {\n type:\n | \"OPEN\"\n | \"CLOSE\"\n | \"PATTERN\"\n | \"NAME\"\n | \"CHAR\"\n | \"ESCAPED_CHAR\"\n | \"MODIFIER\"\n | \"END\";\n index: number;\n value: string;\n}\n\n/**\n * Tokenize input string.\n */\nfunction lexer(str: string): LexToken[] {\n const tokens: LexToken[] = [];\n let i = 0;\n\n while (i < str.length) {\n const char = str[i];\n\n if (char === \"*\" || char === \"+\" || char === \"?\") {\n tokens.push({ type: \"MODIFIER\", index: i, value: str[i++] });\n continue;\n }\n\n if (char === \"\\\\\") {\n tokens.push({ type: \"ESCAPED_CHAR\", index: i++, value: str[i++] });\n continue;\n }\n\n if (char === \"{\") {\n tokens.push({ type: \"OPEN\", index: i, value: str[i++] });\n continue;\n }\n\n if (char === \"}\") {\n tokens.push({ type: \"CLOSE\", index: i, value: str[i++] });\n continue;\n }\n\n if (char === \":\") {\n let name = \"\";\n let j = i + 1;\n\n while (j < str.length) {\n const code = str.charCodeAt(j);\n\n if (\n // `0-9`\n (code >= 48 && code <= 57) ||\n // `A-Z`\n (code >= 65 && code <= 90) ||\n // `a-z`\n (code >= 97 && code <= 122) ||\n // `_`\n code === 95\n ) {\n name += str[j++];\n continue;\n }\n\n break;\n }\n\n if (!name) throw new TypeError(`Missing parameter name at ${i}`);\n\n tokens.push({ type: \"NAME\", index: i, value: name });\n i = j;\n continue;\n }\n\n if (char === \"(\") {\n let count = 1;\n let pattern = \"\";\n let j = i + 1;\n\n if (str[j] === \"?\") {\n throw new TypeError(`Pattern cannot start with \"?\" at ${j}`);\n }\n\n while (j < str.length) {\n if (str[j] === \"\\\\\") {\n pattern += str[j++] + str[j++];\n continue;\n }\n\n if (str[j] === \")\") {\n count--;\n if (count === 0) {\n j++;\n break;\n }\n } else if (str[j] === \"(\") {\n count++;\n if (str[j + 1] !== \"?\") {\n throw new TypeError(`Capturing groups are not allowed at ${j}`);\n }\n }\n\n pattern += str[j++];\n }\n\n if (count) throw new TypeError(`Unbalanced pattern at ${i}`);\n if (!pattern) throw new TypeError(`Missing pattern at ${i}`);\n\n tokens.push({ type: \"PATTERN\", index: i, value: pattern });\n i = j;\n continue;\n }\n\n tokens.push({ type: \"CHAR\", index: i, value: str[i++] });\n }\n\n tokens.push({ type: \"END\", index: i, value: \"\" });\n\n return tokens;\n}\n\nexport interface ParseOptions {\n /**\n * Set the default delimiter for repeat parameters. (default: `'/'`)\n */\n delimiter?: string;\n /**\n * List of characters to automatically consider prefixes when parsing.\n */\n prefixes?: string;\n}\n\n/**\n * Parse a string for the raw tokens.\n */\nexport function parse(str: string, options: ParseOptions = {}): Token[] {\n const tokens = lexer(str);\n const { prefixes = \"./\" } = options;\n const defaultPattern = `[^${escapeString(options.delimiter || \"/#?\")}]+?`;\n const result: Token[] = [];\n let key = 0;\n let i = 0;\n let path = \"\";\n\n const tryConsume = (type: LexToken[\"type\"]): string | undefined => {\n if (i < tokens.length && tokens[i].type === type) return tokens[i++].value;\n };\n\n const mustConsume = (type: LexToken[\"type\"]): string => {\n const value = tryConsume(type);\n if (value !== undefined) return value;\n const { type: nextType, index } = tokens[i];\n throw new TypeError(`Unexpected ${nextType} at ${index}, expected ${type}`);\n };\n\n const consumeText = (): string => {\n let result = \"\";\n let value: string | undefined;\n // tslint:disable-next-line\n while ((value = tryConsume(\"CHAR\") || tryConsume(\"ESCAPED_CHAR\"))) {\n result += value;\n }\n return result;\n };\n\n while (i < tokens.length) {\n const char = tryConsume(\"CHAR\");\n const name = tryConsume(\"NAME\");\n const pattern = tryConsume(\"PATTERN\");\n\n if (name || pattern) {\n let prefix = char || \"\";\n\n if (prefixes.indexOf(prefix) === -1) {\n path += prefix;\n prefix = \"\";\n }\n\n if (path) {\n result.push(path);\n path = \"\";\n }\n\n result.push({\n name: name || key++,\n prefix,\n suffix: \"\",\n pattern: pattern || defaultPattern,\n modifier: tryConsume(\"MODIFIER\") || \"\"\n });\n continue;\n }\n\n const value = char || tryConsume(\"ESCAPED_CHAR\");\n if (value) {\n path += value;\n continue;\n }\n\n if (path) {\n result.push(path);\n path = \"\";\n }\n\n const open = tryConsume(\"OPEN\");\n if (open) {\n const prefix = consumeText();\n const name = tryConsume(\"NAME\") || \"\";\n const pattern = tryConsume(\"PATTERN\") || \"\";\n const suffix = consumeText();\n\n mustConsume(\"CLOSE\");\n\n result.push({\n name: name || (pattern ? key++ : \"\"),\n pattern: name && !pattern ? defaultPattern : pattern,\n prefix,\n suffix,\n modifier: tryConsume(\"MODIFIER\") || \"\"\n });\n continue;\n }\n\n mustConsume(\"END\");\n }\n\n return result;\n}\n\nexport interface TokensToFunctionOptions {\n /**\n * When `true` the regexp will be case sensitive. (default: `false`)\n */\n sensitive?: boolean;\n /**\n * Function for encoding input strings for output.\n */\n encode?: (value: string, token: Key) => string;\n /**\n * When `false` the function can produce an invalid (unmatched) path. (default: `true`)\n */\n validate?: boolean;\n}\n\n/**\n * Compile a string to a template function for the path.\n */\nexport function compile

(\n str: string,\n options?: ParseOptions & TokensToFunctionOptions\n) {\n return tokensToFunction

(parse(str, options), options);\n}\n\nexport type PathFunction

= (data?: P) => string;\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nexport function tokensToFunction

(\n tokens: Token[],\n options: TokensToFunctionOptions = {}\n): PathFunction

{\n const reFlags = flags(options);\n const { encode = (x: string) => x, validate = true } = options;\n\n // Compile all the tokens into regexps.\n const matches = tokens.map(token => {\n if (typeof token === \"object\") {\n return new RegExp(`^(?:${token.pattern})$`, reFlags);\n }\n });\n\n return (data: Record | null | undefined) => {\n let path = \"\";\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n if (typeof token === \"string\") {\n path += token;\n continue;\n }\n\n const value = data ? data[token.name] : undefined;\n const optional = token.modifier === \"?\" || token.modifier === \"*\";\n const repeat = token.modifier === \"*\" || token.modifier === \"+\";\n\n if (Array.isArray(value)) {\n if (!repeat) {\n throw new TypeError(\n `Expected \"${token.name}\" to not repeat, but got an array`\n );\n }\n\n if (value.length === 0) {\n if (optional) continue;\n\n throw new TypeError(`Expected \"${token.name}\" to not be empty`);\n }\n\n for (let j = 0; j < value.length; j++) {\n const segment = encode(value[j], token);\n\n if (validate && !(matches[i] as RegExp).test(segment)) {\n throw new TypeError(\n `Expected all \"${token.name}\" to match \"${token.pattern}\", but got \"${segment}\"`\n );\n }\n\n path += token.prefix + segment + token.suffix;\n }\n\n continue;\n }\n\n if (typeof value === \"string\" || typeof value === \"number\") {\n const segment = encode(String(value), token);\n\n if (validate && !(matches[i] as RegExp).test(segment)) {\n throw new TypeError(\n `Expected \"${token.name}\" to match \"${token.pattern}\", but got \"${segment}\"`\n );\n }\n\n path += token.prefix + segment + token.suffix;\n continue;\n }\n\n if (optional) continue;\n\n const typeOfMessage = repeat ? \"an array\" : \"a string\";\n throw new TypeError(`Expected \"${token.name}\" to be ${typeOfMessage}`);\n }\n\n return path;\n };\n}\n\nexport interface RegexpToFunctionOptions {\n /**\n * Function for decoding strings for params.\n */\n decode?: (value: string, token: Key) => string;\n}\n\n/**\n * A match result contains data about the path match.\n */\nexport interface MatchResult

{\n path: string;\n index: number;\n params: P;\n}\n\n/**\n * A match is either `false` (no match) or a match result.\n */\nexport type Match

= false | MatchResult

;\n\n/**\n * The match function takes a string and returns whether it matched the path.\n */\nexport type MatchFunction

= (\n path: string\n) => Match

;\n\n/**\n * Create path match function from `path-to-regexp` spec.\n */\nexport function match

(\n str: Path,\n options?: ParseOptions & TokensToRegexpOptions & RegexpToFunctionOptions\n) {\n const keys: Key[] = [];\n const re = pathToRegexp(str, keys, options);\n return regexpToFunction

(re, keys, options);\n}\n\n/**\n * Create a path match function from `path-to-regexp` output.\n */\nexport function regexpToFunction

(\n re: RegExp,\n keys: Key[],\n options: RegexpToFunctionOptions = {}\n): MatchFunction

{\n const { decode = (x: string) => x } = options;\n\n return function(pathname: string) {\n const m = re.exec(pathname);\n if (!m) return false;\n\n const { 0: path, index } = m;\n const params = Object.create(null);\n\n for (let i = 1; i < m.length; i++) {\n // tslint:disable-next-line\n if (m[i] === undefined) continue;\n\n const key = keys[i - 1];\n\n if (key.modifier === \"*\" || key.modifier === \"+\") {\n params[key.name] = m[i].split(key.prefix + key.suffix).map(value => {\n return decode(value, key);\n });\n } else {\n params[key.name] = decode(m[i], key);\n }\n }\n\n return { path, index, params };\n };\n}\n\n/**\n * Escape a regular expression string.\n */\nfunction escapeString(str: string) {\n return str.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, \"\\\\$1\");\n}\n\n/**\n * Get the flags for a regexp from the options.\n */\nfunction flags(options?: { sensitive?: boolean }) {\n return options && options.sensitive ? \"\" : \"i\";\n}\n\n/**\n * Metadata about a key.\n */\nexport interface Key {\n name: string | number;\n prefix: string;\n suffix: string;\n pattern: string;\n modifier: string;\n}\n\n/**\n * A token is a string (nothing special) or key metadata (capture group).\n */\nexport type Token = string | Key;\n\n/**\n * Pull out keys from a regexp.\n */\nfunction regexpToRegexp(path: RegExp, keys?: Key[]): RegExp {\n if (!keys) return path;\n\n // Use a negative lookahead to match only capturing groups.\n const groups = path.source.match(/\\((?!\\?)/g);\n\n if (groups) {\n for (let i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: \"\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"\"\n });\n }\n }\n\n return path;\n}\n\n/**\n * Transform an array into a regexp.\n */\nfunction arrayToRegexp(\n paths: Array,\n keys?: Key[],\n options?: TokensToRegexpOptions & ParseOptions\n): RegExp {\n const parts = paths.map(path => pathToRegexp(path, keys, options).source);\n return new RegExp(`(?:${parts.join(\"|\")})`, flags(options));\n}\n\n/**\n * Create a path regexp from string input.\n */\nfunction stringToRegexp(\n path: string,\n keys?: Key[],\n options?: TokensToRegexpOptions & ParseOptions\n) {\n return tokensToRegexp(parse(path, options), keys, options);\n}\n\nexport interface TokensToRegexpOptions {\n /**\n * When `true` the regexp will be case sensitive. (default: `false`)\n */\n sensitive?: boolean;\n /**\n * When `true` the regexp allows an optional trailing delimiter to match. (default: `false`)\n */\n strict?: boolean;\n /**\n * When `true` the regexp will match to the end of the string. (default: `true`)\n */\n end?: boolean;\n /**\n * When `true` the regexp will match from the beginning of the string. (default: `true`)\n */\n start?: boolean;\n /**\n * Sets the final character for non-ending optimistic matches. (default: `/`)\n */\n delimiter?: string;\n /**\n * List of characters that can also be \"end\" characters.\n */\n endsWith?: string;\n /**\n * Encode path tokens for use in the `RegExp`.\n */\n encode?: (value: string) => string;\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n */\nexport function tokensToRegexp(\n tokens: Token[],\n keys?: Key[],\n options: TokensToRegexpOptions = {}\n) {\n const {\n strict = false,\n start = true,\n end = true,\n encode = (x: string) => x\n } = options;\n const endsWith = `[${escapeString(options.endsWith || \"\")}]|$`;\n const delimiter = `[${escapeString(options.delimiter || \"/#?\")}]`;\n let route = start ? \"^\" : \"\";\n\n // Iterate over the tokens and create our regexp string.\n for (const token of tokens) {\n if (typeof token === \"string\") {\n route += escapeString(encode(token));\n } else {\n const prefix = escapeString(encode(token.prefix));\n const suffix = escapeString(encode(token.suffix));\n\n if (token.pattern) {\n if (keys) keys.push(token);\n\n if (prefix || suffix) {\n if (token.modifier === \"+\" || token.modifier === \"*\") {\n const mod = token.modifier === \"*\" ? \"?\" : \"\";\n route += `(?:${prefix}((?:${token.pattern})(?:${suffix}${prefix}(?:${token.pattern}))*)${suffix})${mod}`;\n } else {\n route += `(?:${prefix}(${token.pattern})${suffix})${token.modifier}`;\n }\n } else {\n route += `(${token.pattern})${token.modifier}`;\n }\n } else {\n route += `(?:${prefix}${suffix})${token.modifier}`;\n }\n }\n }\n\n if (end) {\n if (!strict) route += `${delimiter}?`;\n\n route += !options.endsWith ? \"$\" : `(?=${endsWith})`;\n } else {\n const endToken = tokens[tokens.length - 1];\n const isEndDelimited =\n typeof endToken === \"string\"\n ? delimiter.indexOf(endToken[endToken.length - 1]) > -1\n : // tslint:disable-next-line\n endToken === undefined;\n\n if (!strict) {\n route += `(?:${delimiter}(?=${endsWith}))?`;\n }\n\n if (!isEndDelimited) {\n route += `(?=${delimiter}|${endsWith})`;\n }\n }\n\n return new RegExp(route, flags(options));\n}\n\n/**\n * Supported `path-to-regexp` input types.\n */\nexport type Path = string | RegExp | Array;\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 */\nexport function pathToRegexp(\n path: Path,\n keys?: Key[],\n options?: TokensToRegexpOptions & ParseOptions\n) {\n if (path instanceof RegExp) return regexpToRegexp(path, keys);\n if (Array.isArray(path)) return arrayToRegexp(path, keys, options);\n return stringToRegexp(path, keys, options);\n}\n"]} \ No newline at end of file diff --git a/packages/next/src/compiled/path-to-regexp/index.spec.js b/packages/next/src/compiled/path-to-regexp/index.spec.js deleted file mode 100644 index 698c2d6e62558..0000000000000 --- a/packages/next/src/compiled/path-to-regexp/index.spec.js +++ /dev/null @@ -1,2737 +0,0 @@ -"use strict"; -var __assign = (this && this.__assign) || function () { - __assign = Object.assign || function(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) - t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var util = require("util"); -var pathToRegexp = require("./index"); -/** - * An array of test cases with expected inputs and outputs. - */ -var TESTS = [ - /** - * Simple paths. - */ - [ - "/", - undefined, - ["/"], - [ - ["/", ["/"], { path: "/", index: 0, params: {} }], - ["/route", null, false] - ], - [ - [null, "/"], - [{}, "/"], - [{ id: 123 }, "/"] - ] - ], - [ - "/test", - undefined, - ["/test"], - [ - ["/test", ["/test"], { path: "/test", index: 0, params: {} }], - ["/route", null, false], - ["/test/route", null, false], - ["/test/", ["/test/"], { path: "/test/", index: 0, params: {} }] - ], - [ - [null, "/test"], - [{}, "/test"] - ] - ], - [ - "/test/", - undefined, - ["/test/"], - [ - ["/test", null], - ["/test/", ["/test/"]], - ["/test//", ["/test//"]] - ], - [[null, "/test/"]] - ], - /** - * Case-sensitive paths. - */ - [ - "/test", - { - sensitive: true - }, - ["/test"], - [ - ["/test", ["/test"]], - ["/TEST", null] - ], - [[null, "/test"]] - ], - [ - "/TEST", - { - sensitive: true - }, - ["/TEST"], - [ - ["/test", null], - ["/TEST", ["/TEST"]] - ], - [[null, "/TEST"]] - ], - /** - * Strict mode. - */ - [ - "/test", - { - strict: true - }, - ["/test"], - [ - ["/test", ["/test"]], - ["/test/", null], - ["/TEST", ["/TEST"]] - ], - [[null, "/test"]] - ], - [ - "/test/", - { - strict: true - }, - ["/test/"], - [ - ["/test", null], - ["/test/", ["/test/"]], - ["/test//", null] - ], - [[null, "/test/"]] - ], - /** - * Non-ending mode. - */ - [ - "/test", - { - end: false - }, - ["/test"], - [ - ["/test", ["/test"]], - ["/test/", ["/test/"]], - ["/test/route", ["/test"]], - ["/route", null] - ], - [[null, "/test"]] - ], - [ - "/test/", - { - end: false - }, - ["/test/"], - [ - ["/test", null], - ["/test/route", ["/test/"]], - ["/test//", ["/test//"]], - ["/test//route", ["/test/"]] - ], - [[null, "/test/"]] - ], - [ - "/:test", - { - end: false - }, - [ - { - name: "test", - prefix: "/", - suffix: "", - modifier: "", - pattern: "[^\\/#\\?]+?" - } - ], - [ - [ - "/route", - ["/route", "route"], - { path: "/route", index: 0, params: { test: "route" } } - ], - [ - "/caf%C3%A9", - ["/caf%C3%A9", "caf%C3%A9"], - { path: "/caf%C3%A9", index: 0, params: { test: "caf%C3%A9" } } - ], - [ - "/caf%C3%A9", - ["/caf%C3%A9", "caf%C3%A9"], - { path: "/caf%C3%A9", index: 0, params: { test: "café" } }, - { decode: decodeURIComponent } - ] - ], - [ - [{}, null], - [{ test: "abc" }, "/abc"], - [{ test: "a+b" }, "/a+b"], - [{ test: "a+b" }, "/test", { encode: function (_, token) { return String(token.name); } }], - [{ test: "a+b" }, "/a%2Bb", { encode: encodeURIComponent }] - ] - ], - [ - "/:test/", - { - end: false - }, - [ - { - name: "test", - prefix: "/", - suffix: "", - modifier: "", - pattern: "[^\\/#\\?]+?" - }, - "/" - ], - [ - ["/route", null], - ["/route/", ["/route/", "route"]] - ], - [[{ test: "abc" }, "/abc/"]] - ], - [ - "", - { - end: false - }, - [], - [ - ["", [""]], - ["/", ["/"]], - ["route", [""]], - ["/route", [""]], - ["/route/", [""]] - ], - [[null, ""]] - ], - /** - * Non-starting mode. - */ - [ - "/test", - { - start: false - }, - ["/test"], - [ - ["/test", ["/test"]], - ["/test/", ["/test/"]], - ["/route/test", ["/test"]], - ["/test/route", null], - ["/route/test/deep", null], - ["/route", null] - ], - [[null, "/test"]] - ], - [ - "/test/", - { - start: false - }, - ["/test/"], - [ - ["/test", null], - ["/test/route", null], - ["/test//route", null], - ["/test//", ["/test//"]], - ["/route/test/", ["/test/"]] - ], - [[null, "/test/"]] - ], - [ - "/:test", - { - start: false - }, - [ - { - name: "test", - prefix: "/", - suffix: "", - modifier: "", - pattern: "[^\\/#\\?]+?" - } - ], - [["/route", ["/route", "route"]]], - [ - [{}, null], - [{ test: "abc" }, "/abc"], - [{ test: "a+b" }, "/a+b"], - [{ test: "a+b" }, "/test", { encode: function (_, token) { return String(token.name); } }], - [{ test: "a+b" }, "/a%2Bb", { encode: encodeURIComponent }] - ] - ], - [ - "/:test/", - { - start: false - }, - [ - { - name: "test", - prefix: "/", - suffix: "", - modifier: "", - pattern: "[^\\/#\\?]+?" - }, - "/" - ], - [ - ["/route", null], - ["/route/", ["/route/", "route"]] - ], - [[{ test: "abc" }, "/abc/"]] - ], - [ - "", - { - start: false - }, - [], - [ - ["", [""]], - ["/", ["/"]], - ["route", [""]], - ["/route", [""]], - ["/route/", ["/"]] - ], - [[null, ""]] - ], - /** - * Combine modes. - */ - [ - "/test", - { - end: false, - strict: true - }, - ["/test"], - [ - ["/test", ["/test"]], - ["/test/", ["/test"]], - ["/test/route", ["/test"]] - ], - [[null, "/test"]] - ], - [ - "/test/", - { - end: false, - strict: true - }, - ["/test/"], - [ - ["/test", null], - ["/test/", ["/test/"]], - ["/test//", ["/test/"]], - ["/test/route", ["/test/"]] - ], - [[null, "/test/"]] - ], - [ - "/test.json", - { - end: false, - strict: true - }, - ["/test.json"], - [ - ["/test.json", ["/test.json"]], - ["/test.json.hbs", null], - ["/test.json/route", ["/test.json"]] - ], - [[null, "/test.json"]] - ], - [ - "/:test", - { - end: false, - strict: true - }, - [ - { - name: "test", - prefix: "/", - suffix: "", - modifier: "", - pattern: "[^\\/#\\?]+?" - } - ], - [ - ["/route", ["/route", "route"]], - ["/route/", ["/route", "route"]] - ], - [ - [{}, null], - [{ test: "abc" }, "/abc"] - ] - ], - [ - "/:test/", - { - end: false, - strict: true - }, - [ - { - name: "test", - prefix: "/", - suffix: "", - modifier: "", - pattern: "[^\\/#\\?]+?" - }, - "/" - ], - [ - ["/route", null], - ["/route/", ["/route/", "route"]] - ], - [[{ test: "foobar" }, "/foobar/"]] - ], - [ - "/test", - { - start: false, - end: false - }, - ["/test"], - [ - ["/test", ["/test"]], - ["/test/", ["/test/"]], - ["/test/route", ["/test"]], - ["/route/test/deep", ["/test"]] - ], - [[null, "/test"]] - ], - [ - "/test/", - { - start: false, - end: false - }, - ["/test/"], - [ - ["/test", null], - ["/test/", ["/test/"]], - ["/test//", ["/test//"]], - ["/test/route", ["/test/"]], - ["/route/test/deep", ["/test/"]] - ], - [[null, "/test/"]] - ], - [ - "/test.json", - { - start: false, - end: false - }, - ["/test.json"], - [ - ["/test.json", ["/test.json"]], - ["/test.json.hbs", null], - ["/test.json/route", ["/test.json"]], - ["/route/test.json/deep", ["/test.json"]] - ], - [[null, "/test.json"]] - ], - [ - "/:test", - { - start: false, - end: false - }, - [ - { - name: "test", - prefix: "/", - suffix: "", - modifier: "", - pattern: "[^\\/#\\?]+?" - } - ], - [ - ["/route", ["/route", "route"]], - ["/route/", ["/route/", "route"]] - ], - [ - [{}, null], - [{ test: "abc" }, "/abc"] - ] - ], - [ - "/:test/", - { - end: false, - strict: true - }, - [ - { - name: "test", - prefix: "/", - suffix: "", - modifier: "", - pattern: "[^\\/#\\?]+?" - }, - "/" - ], - [ - ["/route", null], - ["/route/", ["/route/", "route"]] - ], - [[{ test: "foobar" }, "/foobar/"]] - ], - /** - * Arrays of simple paths. - */ - [ - ["/one", "/two"], - undefined, - [], - [ - ["/one", ["/one"]], - ["/two", ["/two"]], - ["/three", null], - ["/one/two", null] - ], - [] - ], - /** - * Non-ending simple path. - */ - [ - "/test", - { - end: false - }, - ["/test"], - [["/test/route", ["/test"]]], - [[null, "/test"]] - ], - /** - * Single named parameter. - */ - [ - "/:test", - undefined, - [ - { - name: "test", - prefix: "/", - suffix: "", - modifier: "", - pattern: "[^\\/#\\?]+?" - } - ], - [ - ["/route", ["/route", "route"]], - ["/another", ["/another", "another"]], - ["/something/else", null], - ["/route.json", ["/route.json", "route.json"]], - ["/something%2Felse", ["/something%2Felse", "something%2Felse"]], - [ - "/something%2Felse%2Fmore", - ["/something%2Felse%2Fmore", "something%2Felse%2Fmore"] - ], - ["/;,:@&=+$-_.!~*()", ["/;,:@&=+$-_.!~*()", ";,:@&=+$-_.!~*()"]] - ], - [ - [{ test: "route" }, "/route"], - [ - { test: "something/else" }, - "/something%2Felse", - { encode: encodeURIComponent } - ], - [ - { test: "something/else/more" }, - "/something%2Felse%2Fmore", - { encode: encodeURIComponent } - ] - ] - ], - [ - "/:test", - { - strict: true - }, - [ - { - name: "test", - prefix: "/", - suffix: "", - modifier: "", - pattern: "[^\\/#\\?]+?" - } - ], - [ - ["/route", ["/route", "route"]], - ["/route/", null] - ], - [[{ test: "route" }, "/route"]] - ], - [ - "/:test/", - { - strict: true - }, - [ - { - name: "test", - prefix: "/", - suffix: "", - modifier: "", - pattern: "[^\\/#\\?]+?" - }, - "/" - ], - [ - ["/route/", ["/route/", "route"]], - ["/route//", null] - ], - [[{ test: "route" }, "/route/"]] - ], - [ - "/:test", - { - end: false - }, - [ - { - name: "test", - prefix: "/", - suffix: "", - modifier: "", - pattern: "[^\\/#\\?]+?" - } - ], - [ - ["/route.json", ["/route.json", "route.json"]], - ["/route//", ["/route", "route"]] - ], - [[{ test: "route" }, "/route"]] - ], - /** - * Optional named parameter. - */ - [ - "/:test?", - undefined, - [ - { - name: "test", - prefix: "/", - suffix: "", - modifier: "?", - pattern: "[^\\/#\\?]+?" - } - ], - [ - [ - "/route", - ["/route", "route"], - { path: "/route", index: 0, params: { test: "route" } } - ], - ["/route/nested", null, false], - ["/", ["/", undefined], { path: "/", index: 0, params: {} }], - ["//", null] - ], - [ - [null, ""], - [{ test: "foobar" }, "/foobar"] - ] - ], - [ - "/:test?", - { - strict: true - }, - [ - { - name: "test", - prefix: "/", - suffix: "", - modifier: "?", - pattern: "[^\\/#\\?]+?" - } - ], - [ - ["/route", ["/route", "route"]], - ["/", null], - ["//", null] - ], - [ - [null, ""], - [{ test: "foobar" }, "/foobar"] - ] - ], - [ - "/:test?/", - { - strict: true - }, - [ - { - name: "test", - prefix: "/", - suffix: "", - modifier: "?", - pattern: "[^\\/#\\?]+?" - }, - "/" - ], - [ - ["/route", null], - ["/route/", ["/route/", "route"]], - ["/", ["/", undefined]], - ["//", null] - ], - [ - [null, "/"], - [{ test: "foobar" }, "/foobar/"] - ] - ], - [ - "/:test?/bar", - undefined, - [ - { - name: "test", - prefix: "/", - suffix: "", - modifier: "?", - pattern: "[^\\/#\\?]+?" - }, - "/bar" - ], - [ - ["/bar", ["/bar", undefined]], - ["/foo/bar", ["/foo/bar", "foo"]] - ], - [ - [null, "/bar"], - [{ test: "foo" }, "/foo/bar"] - ] - ], - [ - "/:test?-bar", - undefined, - [ - { - name: "test", - prefix: "/", - suffix: "", - modifier: "?", - pattern: "[^\\/#\\?]+?" - }, - "-bar" - ], - [ - ["-bar", ["-bar", undefined]], - ["/-bar", null], - ["/foo-bar", ["/foo-bar", "foo"]] - ], - [ - [undefined, "-bar"], - [{ test: "foo" }, "/foo-bar"] - ] - ], - [ - "/:test*-bar", - undefined, - [ - { - name: "test", - prefix: "/", - suffix: "", - modifier: "*", - pattern: "[^\\/#\\?]+?" - }, - "-bar" - ], - [ - ["-bar", ["-bar", undefined]], - ["/-bar", null], - ["/foo-bar", ["/foo-bar", "foo"]], - ["/foo/baz-bar", ["/foo/baz-bar", "foo/baz"]] - ], - [[{ test: "foo" }, "/foo-bar"]] - ], - /** - * Repeated one or more times parameters. - */ - [ - "/:test+", - undefined, - [ - { - name: "test", - prefix: "/", - suffix: "", - modifier: "+", - pattern: "[^\\/#\\?]+?" - } - ], - [ - ["/", null, false], - [ - "/route", - ["/route", "route"], - { path: "/route", index: 0, params: { test: ["route"] } } - ], - [ - "/some/basic/route", - ["/some/basic/route", "some/basic/route"], - { - path: "/some/basic/route", - index: 0, - params: { test: ["some", "basic", "route"] } - } - ], - ["//", null, false] - ], - [ - [{}, null], - [{ test: "foobar" }, "/foobar"], - [{ test: ["a", "b", "c"] }, "/a/b/c"] - ] - ], - [ - "/:test(\\d+)+", - undefined, - [ - { - name: "test", - prefix: "/", - suffix: "", - modifier: "+", - pattern: "\\d+" - } - ], - [ - ["/abc/456/789", null], - ["/123/456/789", ["/123/456/789", "123/456/789"]] - ], - [ - [{ test: "abc" }, null], - [{ test: 123 }, "/123"], - [{ test: [1, 2, 3] }, "/1/2/3"] - ] - ], - [ - "/route.:ext(json|xml)+", - undefined, - [ - "/route", - { - name: "ext", - prefix: ".", - suffix: "", - modifier: "+", - pattern: "json|xml" - } - ], - [ - ["/route", null], - ["/route.json", ["/route.json", "json"]], - ["/route.xml.json", ["/route.xml.json", "xml.json"]], - ["/route.html", null] - ], - [ - [{ ext: "foobar" }, null], - [{ ext: "xml" }, "/route.xml"], - [{ ext: ["xml", "json"] }, "/route.xml.json"] - ] - ], - [ - "/route.:ext(\\w+)/test", - undefined, - [ - "/route", - { - name: "ext", - prefix: ".", - suffix: "", - modifier: "", - pattern: "\\w+" - }, - "/test" - ], - [ - ["/route", null], - ["/route.json", null], - ["/route.xml/test", ["/route.xml/test", "xml"]], - ["/route.json.gz/test", null] - ], - [[{ ext: "xml" }, "/route.xml/test"]] - ], - /** - * Repeated zero or more times parameters. - */ - [ - "/:test*", - undefined, - [ - { - name: "test", - prefix: "/", - suffix: "", - modifier: "*", - pattern: "[^\\/#\\?]+?" - } - ], - [ - ["/", ["/", undefined], { path: "/", index: 0, params: {} }], - ["//", null, false], - [ - "/route", - ["/route", "route"], - { path: "/route", index: 0, params: { test: ["route"] } } - ], - [ - "/some/basic/route", - ["/some/basic/route", "some/basic/route"], - { - path: "/some/basic/route", - index: 0, - params: { test: ["some", "basic", "route"] } - } - ] - ], - [ - [{}, ""], - [{ test: [] }, ""], - [{ test: "foobar" }, "/foobar"], - [{ test: ["foo", "bar"] }, "/foo/bar"] - ] - ], - [ - "/route.:ext([a-z]+)*", - undefined, - [ - "/route", - { - name: "ext", - prefix: ".", - suffix: "", - modifier: "*", - pattern: "[a-z]+" - } - ], - [ - ["/route", ["/route", undefined]], - ["/route.json", ["/route.json", "json"]], - ["/route.json.xml", ["/route.json.xml", "json.xml"]], - ["/route.123", null] - ], - [ - [{}, "/route"], - [{ ext: [] }, "/route"], - [{ ext: "123" }, null], - [{ ext: "foobar" }, "/route.foobar"], - [{ ext: ["foo", "bar"] }, "/route.foo.bar"] - ] - ], - /** - * Custom named parameters. - */ - [ - "/:test(\\d+)", - undefined, - [ - { - name: "test", - prefix: "/", - suffix: "", - modifier: "", - pattern: "\\d+" - } - ], - [ - ["/123", ["/123", "123"]], - ["/abc", null], - ["/123/abc", null] - ], - [ - [{ test: "abc" }, null], - [{ test: "abc" }, "/abc", { validate: false }], - [{ test: "123" }, "/123"] - ] - ], - [ - "/:test(\\d+)", - { - end: false - }, - [ - { - name: "test", - prefix: "/", - suffix: "", - modifier: "", - pattern: "\\d+" - } - ], - [ - ["/123", ["/123", "123"]], - ["/abc", null], - ["/123/abc", ["/123", "123"]] - ], - [[{ test: "123" }, "/123"]] - ], - [ - "/:test(.*)", - undefined, - [ - { - name: "test", - prefix: "/", - suffix: "", - modifier: "", - pattern: ".*" - } - ], - [ - ["/anything/goes/here", ["/anything/goes/here", "anything/goes/here"]], - ["/;,:@&=/+$-_.!/~*()", ["/;,:@&=/+$-_.!/~*()", ";,:@&=/+$-_.!/~*()"]] - ], - [ - [{ test: "" }, "/"], - [{ test: "abc" }, "/abc"], - [{ test: "abc/123" }, "/abc%2F123", { encode: encodeURIComponent }], - [ - { test: "abc/123/456" }, - "/abc%2F123%2F456", - { encode: encodeURIComponent } - ] - ] - ], - [ - "/:route([a-z]+)", - undefined, - [ - { - name: "route", - prefix: "/", - suffix: "", - modifier: "", - pattern: "[a-z]+" - } - ], - [ - ["/abcde", ["/abcde", "abcde"]], - ["/12345", null] - ], - [ - [{ route: "" }, null], - [{ route: "" }, "/", { validate: false }], - [{ route: "123" }, null], - [{ route: "123" }, "/123", { validate: false }], - [{ route: "abc" }, "/abc"] - ] - ], - [ - "/:route(this|that)", - undefined, - [ - { - name: "route", - prefix: "/", - suffix: "", - modifier: "", - pattern: "this|that" - } - ], - [ - ["/this", ["/this", "this"]], - ["/that", ["/that", "that"]], - ["/foo", null] - ], - [ - [{ route: "this" }, "/this"], - [{ route: "foo" }, null], - [{ route: "foo" }, "/foo", { validate: false }], - [{ route: "that" }, "/that"] - ] - ], - [ - "/:path(abc|xyz)*", - undefined, - [ - { - name: "path", - prefix: "/", - suffix: "", - modifier: "*", - pattern: "abc|xyz" - } - ], - [ - ["/abc", ["/abc", "abc"]], - ["/abc/abc", ["/abc/abc", "abc/abc"]], - ["/xyz/xyz", ["/xyz/xyz", "xyz/xyz"]], - ["/abc/xyz", ["/abc/xyz", "abc/xyz"]], - ["/abc/xyz/abc/xyz", ["/abc/xyz/abc/xyz", "abc/xyz/abc/xyz"]], - ["/xyzxyz", null] - ], - [ - [{ path: "abc" }, "/abc"], - [{ path: ["abc", "xyz"] }, "/abc/xyz"], - [{ path: ["xyz", "abc", "xyz"] }, "/xyz/abc/xyz"], - [{ path: "abc123" }, null], - [{ path: "abc123" }, "/abc123", { validate: false }], - [{ path: "abcxyz" }, null], - [{ path: "abcxyz" }, "/abcxyz", { validate: false }] - ] - ], - /** - * Prefixed slashes could be omitted. - */ - [ - "test", - undefined, - ["test"], - [ - ["test", ["test"]], - ["/test", null] - ], - [[null, "test"]] - ], - [ - ":test", - undefined, - [ - { - name: "test", - prefix: "", - suffix: "", - modifier: "", - pattern: "[^\\/#\\?]+?" - } - ], - [ - ["route", ["route", "route"]], - ["/route", null], - ["route/", ["route/", "route"]] - ], - [ - [{ test: "" }, null], - [{}, null], - [{ test: null }, null], - [{ test: "route" }, "route"] - ] - ], - [ - ":test", - { - strict: true - }, - [ - { - name: "test", - prefix: "", - suffix: "", - modifier: "", - pattern: "[^\\/#\\?]+?" - } - ], - [ - ["route", ["route", "route"]], - ["/route", null], - ["route/", null] - ], - [[{ test: "route" }, "route"]] - ], - [ - ":test", - { - end: false - }, - [ - { - name: "test", - prefix: "", - suffix: "", - modifier: "", - pattern: "[^\\/#\\?]+?" - } - ], - [ - ["route", ["route", "route"]], - ["/route", null], - ["route/", ["route/", "route"]], - ["route/foobar", ["route", "route"]] - ], - [[{ test: "route" }, "route"]] - ], - [ - ":test?", - undefined, - [ - { - name: "test", - prefix: "", - suffix: "", - modifier: "?", - pattern: "[^\\/#\\?]+?" - } - ], - [ - ["route", ["route", "route"]], - ["/route", null], - ["", ["", undefined]], - ["route/foobar", null] - ], - [ - [{}, ""], - [{ test: "" }, null], - [{ test: "route" }, "route"] - ] - ], - [ - "{:test/}+", - undefined, - [ - { - name: "test", - prefix: "", - suffix: "/", - modifier: "+", - pattern: "[^\\/#\\?]+?" - } - ], - [ - ["route/", ["route/", "route"]], - ["/route", null], - ["", null], - ["foo/bar/", ["foo/bar/", "foo/bar"]] - ], - [ - [{}, null], - [{ test: "" }, null], - [{ test: ["route"] }, "route/"], - [{ test: ["foo", "bar"] }, "foo/bar/"] - ] - ], - /** - * Formats. - */ - [ - "/test.json", - undefined, - ["/test.json"], - [ - ["/test.json", ["/test.json"]], - ["/route.json", null] - ], - [[{}, "/test.json"]] - ], - [ - "/:test.json", - undefined, - [ - { - name: "test", - prefix: "/", - suffix: "", - modifier: "", - pattern: "[^\\/#\\?]+?" - }, - ".json" - ], - [ - ["/.json", null], - ["/test.json", ["/test.json", "test"]], - ["/route.json", ["/route.json", "route"]], - ["/route.json.json", ["/route.json.json", "route.json"]] - ], - [ - [{ test: "" }, null], - [{ test: "foo" }, "/foo.json"] - ] - ], - /** - * Format params. - */ - [ - "/test.:format(\\w+)", - undefined, - [ - "/test", - { - name: "format", - prefix: ".", - suffix: "", - modifier: "", - pattern: "\\w+" - } - ], - [ - ["/test.html", ["/test.html", "html"]], - ["/test.hbs.html", null] - ], - [ - [{}, null], - [{ format: "" }, null], - [{ format: "foo" }, "/test.foo"] - ] - ], - [ - "/test.:format(\\w+).:format(\\w+)", - undefined, - [ - "/test", - { - name: "format", - prefix: ".", - suffix: "", - modifier: "", - pattern: "\\w+" - }, - { - name: "format", - prefix: ".", - suffix: "", - modifier: "", - pattern: "\\w+" - } - ], - [ - ["/test.html", null], - ["/test.hbs.html", ["/test.hbs.html", "hbs", "html"]] - ], - [ - [{ format: "foo.bar" }, null], - [{ format: "foo" }, "/test.foo.foo"] - ] - ], - [ - "/test{.:format}+", - undefined, - [ - "/test", - { - name: "format", - prefix: ".", - suffix: "", - modifier: "+", - pattern: "[^\\/#\\?]+?" - } - ], - [ - ["/test.html", ["/test.html", "html"]], - ["/test.hbs.html", ["/test.hbs.html", "hbs.html"]] - ], - [ - [{ format: [] }, null], - [{ format: "foo" }, "/test.foo"], - [{ format: ["foo", "bar"] }, "/test.foo.bar"] - ] - ], - [ - "/test.:format(\\w+)", - { - end: false - }, - [ - "/test", - { - name: "format", - prefix: ".", - suffix: "", - modifier: "", - pattern: "\\w+" - } - ], - [ - ["/test.html", ["/test.html", "html"]], - ["/test.hbs.html", null] - ], - [[{ format: "foo" }, "/test.foo"]] - ], - [ - "/test.:format.", - undefined, - [ - "/test", - { - name: "format", - prefix: ".", - suffix: "", - modifier: "", - pattern: "[^\\/#\\?]+?" - }, - "." - ], - [ - ["/test.html.", ["/test.html.", "html"]], - ["/test.hbs.html", null] - ], - [ - [{ format: "" }, null], - [{ format: "foo" }, "/test.foo."] - ] - ], - /** - * Format and path params. - */ - [ - "/:test.:format", - undefined, - [ - { - name: "test", - prefix: "/", - suffix: "", - modifier: "", - pattern: "[^\\/#\\?]+?" - }, - { - name: "format", - prefix: ".", - suffix: "", - modifier: "", - pattern: "[^\\/#\\?]+?" - } - ], - [ - ["/route.html", ["/route.html", "route", "html"]], - ["/route", null], - ["/route.html.json", ["/route.html.json", "route", "html.json"]] - ], - [ - [{}, null], - [{ test: "route", format: "foo" }, "/route.foo"] - ] - ], - [ - "/:test{.:format}?", - undefined, - [ - { - name: "test", - prefix: "/", - suffix: "", - modifier: "", - pattern: "[^\\/#\\?]+?" - }, - { - name: "format", - prefix: ".", - suffix: "", - modifier: "?", - pattern: "[^\\/#\\?]+?" - } - ], - [ - ["/route", ["/route", "route", undefined]], - ["/route.json", ["/route.json", "route", "json"]], - ["/route.json.html", ["/route.json.html", "route", "json.html"]] - ], - [ - [{ test: "route" }, "/route"], - [{ test: "route", format: "" }, null], - [{ test: "route", format: "foo" }, "/route.foo"] - ] - ], - [ - "/:test.:format?", - { - end: false - }, - [ - { - name: "test", - prefix: "/", - suffix: "", - modifier: "", - pattern: "[^\\/#\\?]+?" - }, - { - name: "format", - prefix: ".", - suffix: "", - modifier: "?", - pattern: "[^\\/#\\?]+?" - } - ], - [ - ["/route", ["/route", "route", undefined]], - ["/route.json", ["/route.json", "route", "json"]], - ["/route.json.html", ["/route.json.html", "route", "json.html"]] - ], - [ - [{ test: "route" }, "/route"], - [{ test: "route", format: undefined }, "/route"], - [{ test: "route", format: "" }, null], - [{ test: "route", format: "foo" }, "/route.foo"] - ] - ], - [ - "/test.:format(.*)z", - { - end: false - }, - [ - "/test", - { - name: "format", - prefix: ".", - suffix: "", - modifier: "", - pattern: ".*" - }, - "z" - ], - [ - ["/test.abc", null], - ["/test.z", ["/test.z", ""]], - ["/test.abcz", ["/test.abcz", "abc"]] - ], - [ - [{}, null], - [{ format: "" }, "/test.z"], - [{ format: "foo" }, "/test.fooz"] - ] - ], - /** - * Unnamed params. - */ - [ - "/(\\d+)", - undefined, - [ - { - name: 0, - prefix: "/", - suffix: "", - modifier: "", - pattern: "\\d+" - } - ], - [ - ["/123", ["/123", "123"]], - ["/abc", null], - ["/123/abc", null] - ], - [ - [{}, null], - [{ "0": "123" }, "/123"] - ] - ], - [ - "/(\\d+)", - { - end: false - }, - [ - { - name: 0, - prefix: "/", - suffix: "", - modifier: "", - pattern: "\\d+" - } - ], - [ - ["/123", ["/123", "123"]], - ["/abc", null], - ["/123/abc", ["/123", "123"]], - ["/123/", ["/123/", "123"]] - ], - [[{ "0": "123" }, "/123"]] - ], - [ - "/(\\d+)?", - undefined, - [ - { - name: 0, - prefix: "/", - suffix: "", - modifier: "?", - pattern: "\\d+" - } - ], - [ - ["/", ["/", undefined]], - ["/123", ["/123", "123"]] - ], - [ - [{}, ""], - [{ "0": "123" }, "/123"] - ] - ], - [ - "/(.*)", - undefined, - [ - { - name: 0, - prefix: "/", - suffix: "", - modifier: "", - pattern: ".*" - } - ], - [ - ["/", ["/", ""]], - ["/route", ["/route", "route"]], - ["/route/nested", ["/route/nested", "route/nested"]] - ], - [ - [{ "0": "" }, "/"], - [{ "0": "123" }, "/123"] - ] - ], - [ - "/route\\(\\\\(\\d+\\\\)\\)", - undefined, - [ - "/route(\\", - { - name: 0, - prefix: "", - suffix: "", - modifier: "", - pattern: "\\d+\\\\" - }, - ")" - ], - [["/route(\\123\\)", ["/route(\\123\\)", "123\\"]]], - [] - ], - [ - "{/login}?", - undefined, - [ - { - name: "", - prefix: "/login", - suffix: "", - modifier: "?", - pattern: "" - } - ], - [ - ["/", ["/"]], - ["/login", ["/login"]] - ], - [ - [null, ""], - [{ "": "" }, "/login"] - ] - ], - [ - "{/login}", - undefined, - [ - { - name: "", - prefix: "/login", - suffix: "", - modifier: "", - pattern: "" - } - ], - [ - ["/", null], - ["/login", ["/login"]] - ], - [[{ "": "" }, "/login"]] - ], - [ - "{/(.*)}", - undefined, - [ - { - name: 0, - prefix: "/", - suffix: "", - modifier: "", - pattern: ".*" - } - ], - [ - ["/", ["/", ""]], - ["/login", ["/login", "login"]] - ], - [[{ 0: "test" }, "/test"]] - ], - /** - * Regexps. - */ - [/.*/, undefined, [], [["/match/anything", ["/match/anything"]]], []], - [ - /(.*)/, - undefined, - [ - { - name: 0, - prefix: "", - suffix: "", - modifier: "", - pattern: "" - } - ], - [["/match/anything", ["/match/anything", "/match/anything"]]], - [] - ], - [ - /\/(\d+)/, - undefined, - [ - { - name: 0, - prefix: "", - suffix: "", - modifier: "", - pattern: "" - } - ], - [ - ["/abc", null], - ["/123", ["/123", "123"]] - ], - [] - ], - /** - * Mixed arrays. - */ - [ - ["/test", /\/(\d+)/], - undefined, - [ - { - name: 0, - prefix: "", - suffix: "", - modifier: "", - pattern: "" - } - ], - [["/test", ["/test", undefined]]], - [] - ], - [ - ["/:test(\\d+)", /(.*)/], - undefined, - [ - { - name: "test", - prefix: "/", - suffix: "", - modifier: "", - pattern: "\\d+" - }, - { - name: 0, - prefix: "", - suffix: "", - modifier: "", - pattern: "" - } - ], - [ - ["/123", ["/123", "123", undefined]], - ["/abc", ["/abc", undefined, "/abc"]] - ], - [] - ], - /** - * Correct names and indexes. - */ - [ - ["/:test", "/route/:test"], - undefined, - [ - { - name: "test", - prefix: "/", - suffix: "", - modifier: "", - pattern: "[^\\/#\\?]+?" - }, - { - name: "test", - prefix: "/", - suffix: "", - modifier: "", - pattern: "[^\\/#\\?]+?" - } - ], - [ - ["/test", ["/test", "test", undefined]], - ["/route/test", ["/route/test", undefined, "test"]] - ], - [] - ], - [ - [/^\/([^\/]+)$/, /^\/route\/([^\/]+)$/], - undefined, - [ - { - name: 0, - prefix: "", - suffix: "", - modifier: "", - pattern: "" - }, - { - name: 0, - prefix: "", - suffix: "", - modifier: "", - pattern: "" - } - ], - [ - ["/test", ["/test", "test", undefined]], - ["/route/test", ["/route/test", undefined, "test"]] - ], - [] - ], - /** - * Ignore non-matching groups in regexps. - */ - [ - /(?:.*)/, - undefined, - [], - [["/anything/you/want", ["/anything/you/want"]]], - [] - ], - /** - * Respect escaped characters. - */ - [ - "/\\(testing\\)", - undefined, - ["/(testing)"], - [ - ["/testing", null], - ["/(testing)", ["/(testing)"]] - ], - [[null, "/(testing)"]] - ], - [ - "/.\\+\\*\\?\\{\\}=^!\\:$[]|", - undefined, - ["/.+*?{}=^!:$[]|"], - [["/.+*?{}=^!:$[]|", ["/.+*?{}=^!:$[]|"]]], - [[null, "/.+*?{}=^!:$[]|"]] - ], - [ - "/test\\/:uid(u\\d+)?:cid(c\\d+)?", - undefined, - [ - "/test/", - { - name: "uid", - prefix: "", - suffix: "", - modifier: "?", - pattern: "u\\d+" - }, - { - name: "cid", - prefix: "", - suffix: "", - modifier: "?", - pattern: "c\\d+" - } - ], - [ - ["/test", null], - ["/test/", ["/test/", undefined, undefined]], - ["/test/u123", ["/test/u123", "u123", undefined]], - ["/test/c123", ["/test/c123", undefined, "c123"]] - ], - [ - [{ uid: "u123" }, "/test/u123"], - [{ cid: "c123" }, "/test/c123"], - [{ cid: "u123" }, null] - ] - ], - /** - * Unnamed group prefix. - */ - [ - "/{apple-}?icon-:res(\\d+).png", - undefined, - [ - "/", - { - name: "", - prefix: "apple-", - suffix: "", - modifier: "?", - pattern: "" - }, - "icon-", - { - name: "res", - prefix: "", - suffix: "", - modifier: "", - pattern: "\\d+" - }, - ".png" - ], - [ - ["/icon-240.png", ["/icon-240.png", "240"]], - ["/apple-icon-240.png", ["/apple-icon-240.png", "240"]] - ], - [] - ], - /** - * Random examples. - */ - [ - "/:foo/:bar", - undefined, - [ - { - name: "foo", - prefix: "/", - suffix: "", - modifier: "", - pattern: "[^\\/#\\?]+?" - }, - { - name: "bar", - prefix: "/", - suffix: "", - modifier: "", - pattern: "[^\\/#\\?]+?" - } - ], - [["/match/route", ["/match/route", "match", "route"]]], - [[{ foo: "a", bar: "b" }, "/a/b"]] - ], - [ - "/:foo\\(test\\)/bar", - undefined, - [ - { - name: "foo", - prefix: "/", - suffix: "", - modifier: "", - pattern: "[^\\/#\\?]+?" - }, - "(test)/bar" - ], - [], - [] - ], - [ - "/:remote([\\w-.]+)/:user([\\w-]+)", - undefined, - [ - { - name: "remote", - prefix: "/", - suffix: "", - modifier: "", - pattern: "[\\w-.]+" - }, - { - name: "user", - prefix: "/", - suffix: "", - modifier: "", - pattern: "[\\w-]+" - } - ], - [ - ["/endpoint/user", ["/endpoint/user", "endpoint", "user"]], - ["/endpoint/user-name", ["/endpoint/user-name", "endpoint", "user-name"]], - ["/foo.bar/user-name", ["/foo.bar/user-name", "foo.bar", "user-name"]] - ], - [ - [{ remote: "foo", user: "bar" }, "/foo/bar"], - [{ remote: "foo.bar", user: "uno" }, "/foo.bar/uno"] - ] - ], - [ - "/:foo\\?", - undefined, - [ - { - name: "foo", - prefix: "/", - suffix: "", - modifier: "", - pattern: "[^\\/#\\?]+?" - }, - "?" - ], - [["/route?", ["/route?", "route"]]], - [[{ foo: "bar" }, "/bar?"]] - ], - [ - "/:foo+baz", - undefined, - [ - { - name: "foo", - prefix: "/", - suffix: "", - modifier: "+", - pattern: "[^\\/#\\?]+?" - }, - "baz" - ], - [ - ["/foobaz", ["/foobaz", "foo"]], - ["/foo/barbaz", ["/foo/barbaz", "foo/bar"]], - ["/baz", null] - ], - [ - [{ foo: "foo" }, "/foobaz"], - [{ foo: "foo/bar" }, "/foo%2Fbarbaz", { encode: encodeURIComponent }], - [{ foo: ["foo", "bar"] }, "/foo/barbaz"] - ] - ], - [ - "\\/:pre?baz", - undefined, - [ - "/", - { - name: "pre", - prefix: "", - suffix: "", - modifier: "?", - pattern: "[^\\/#\\?]+?" - }, - "baz" - ], - [ - ["/foobaz", ["/foobaz", "foo"]], - ["/baz", ["/baz", undefined]] - ], - [ - [{}, "/baz"], - [{ pre: "foo" }, "/foobaz"] - ] - ], - [ - "/:foo\\(:bar?\\)", - undefined, - [ - { - name: "foo", - prefix: "/", - suffix: "", - modifier: "", - pattern: "[^\\/#\\?]+?" - }, - "(", - { - name: "bar", - prefix: "", - suffix: "", - modifier: "?", - pattern: "[^\\/#\\?]+?" - }, - ")" - ], - [ - ["/hello(world)", ["/hello(world)", "hello", "world"]], - ["/hello()", ["/hello()", "hello", undefined]] - ], - [ - [{ foo: "hello", bar: "world" }, "/hello(world)"], - [{ foo: "hello" }, "/hello()"] - ] - ], - [ - "/:postType(video|audio|text)(\\+.+)?", - undefined, - [ - { - name: "postType", - prefix: "/", - suffix: "", - modifier: "", - pattern: "video|audio|text" - }, - { - name: 0, - prefix: "", - suffix: "", - modifier: "?", - pattern: "\\+.+" - } - ], - [ - ["/video", ["/video", "video", undefined]], - ["/video+test", ["/video+test", "video", "+test"]], - ["/video+", null] - ], - [ - [{ postType: "video" }, "/video"], - [{ postType: "random" }, null] - ] - ], - [ - "/:foo?/:bar?-ext", - undefined, - [ - { - name: "foo", - prefix: "/", - suffix: "", - modifier: "?", - pattern: "[^\\/#\\?]+?" - }, - { - name: "bar", - prefix: "/", - suffix: "", - modifier: "?", - pattern: "[^\\/#\\?]+?" - }, - "-ext" - ], - [ - ["/-ext", null], - ["-ext", ["-ext", undefined, undefined]], - ["/foo-ext", ["/foo-ext", "foo", undefined]], - ["/foo/bar-ext", ["/foo/bar-ext", "foo", "bar"]], - ["/foo/-ext", null] - ], - [ - [{}, "-ext"], - [{ foo: "foo" }, "/foo-ext"], - [{ bar: "bar" }, "/bar-ext"], - [{ foo: "foo", bar: "bar" }, "/foo/bar-ext"] - ] - ], - [ - "/:required/:optional?-ext", - undefined, - [ - { - name: "required", - prefix: "/", - suffix: "", - modifier: "", - pattern: "[^\\/#\\?]+?" - }, - { - name: "optional", - prefix: "/", - suffix: "", - modifier: "?", - pattern: "[^\\/#\\?]+?" - }, - "-ext" - ], - [ - ["/foo-ext", ["/foo-ext", "foo", undefined]], - ["/foo/bar-ext", ["/foo/bar-ext", "foo", "bar"]], - ["/foo/-ext", null] - ], - [[{ required: "foo" }, "/foo-ext"]] - ], - /** - * Unicode characters. - */ - [ - "/:foo", - undefined, - [ - { - name: "foo", - prefix: "/", - suffix: "", - modifier: "", - pattern: "[^\\/#\\?]+?" - } - ], - [["/café", ["/café", "café"]]], - [ - [{ foo: "café" }, "/café"], - [{ foo: "café" }, "/caf%C3%A9", { encode: encodeURIComponent }] - ] - ], - ["/café", undefined, ["/café"], [["/café", ["/café"]]], [[null, "/café"]]], - [ - "/café", - { encode: encodeURI }, - ["/café"], - [["/caf%C3%A9", ["/caf%C3%A9"]]], - [[null, "/café"]] - ], - [ - "packages/", - undefined, - ["packages/"], - [ - ["packages", null], - ["packages/", ["packages/"]] - ], - [[null, "packages/"]] - ], - /** - * Hostnames. - */ - [ - ":domain.com", - { - delimiter: "." - }, - [ - { - name: "domain", - prefix: "", - suffix: "", - modifier: "", - pattern: "[^\\.]+?" - }, - ".com" - ], - [ - ["example.com", ["example.com", "example"]], - ["github.com", ["github.com", "github"]] - ], - [ - [{ domain: "example" }, "example.com"], - [{ domain: "github" }, "github.com"] - ] - ], - [ - "mail.:domain.com", - { - delimiter: "." - }, - [ - "mail", - { - name: "domain", - prefix: ".", - suffix: "", - modifier: "", - pattern: "[^\\.]+?" - }, - ".com" - ], - [ - ["mail.example.com", ["mail.example.com", "example"]], - ["mail.github.com", ["mail.github.com", "github"]] - ], - [ - [{ domain: "example" }, "mail.example.com"], - [{ domain: "github" }, "mail.github.com"] - ] - ], - [ - "example.:ext", - {}, - [ - "example", - { - name: "ext", - prefix: ".", - suffix: "", - modifier: "", - pattern: "[^\\/#\\?]+?" - } - ], - [ - ["example.com", ["example.com", "com"]], - ["example.org", ["example.org", "org"]] - ], - [ - [{ ext: "com" }, "example.com"], - [{ ext: "org" }, "example.org"] - ] - ], - [ - "this is", - { - delimiter: " ", - end: false - }, - ["this is"], - [ - ["this is a test", ["this is"]], - ["this isn't", null] - ], - [[null, "this is"]] - ], - /** - * Ends with. - */ - [ - "/test", - { - endsWith: "?" - }, - ["/test"], - [ - ["/test", ["/test"]], - ["/test?query=string", ["/test"]], - ["/test/?query=string", ["/test/"]], - ["/testx", null] - ], - [[null, "/test"]] - ], - [ - "/test", - { - endsWith: "?", - strict: true - }, - ["/test"], - [ - ["/test?query=string", ["/test"]], - ["/test/?query=string", null] - ], - [[null, "/test"]] - ], - /** - * Custom prefixes. - */ - [ - "{$:foo}{$:bar}?", - {}, - [ - { - name: "foo", - pattern: "[^\\/#\\?]+?", - prefix: "$", - suffix: "", - modifier: "" - }, - { - name: "bar", - pattern: "[^\\/#\\?]+?", - prefix: "$", - suffix: "", - modifier: "?" - } - ], - [ - ["$x", ["$x", "x", undefined]], - ["$x$y", ["$x$y", "x", "y"]] - ], - [ - [{ foo: "foo" }, "$foo"], - [{ foo: "foo", bar: "bar" }, "$foo$bar"] - ] - ], - [ - "name/:attr1?{-:attr2}?{-:attr3}?", - {}, - [ - "name", - { - name: "attr1", - pattern: "[^\\/#\\?]+?", - prefix: "/", - suffix: "", - modifier: "?" - }, - { - name: "attr2", - pattern: "[^\\/#\\?]+?", - prefix: "-", - suffix: "", - modifier: "?" - }, - { - name: "attr3", - pattern: "[^\\/#\\?]+?", - prefix: "-", - suffix: "", - modifier: "?" - } - ], - [ - ["name/test", ["name/test", "test", undefined, undefined]], - ["name/1", ["name/1", "1", undefined, undefined]], - ["name/1-2", ["name/1-2", "1", "2", undefined]], - ["name/1-2-3", ["name/1-2-3", "1", "2", "3"]], - ["name/foo-bar/route", null], - ["name/test/route", null] - ], - [ - [{}, "name"], - [{ attr1: "test" }, "name/test"], - [{ attr2: "attr" }, "name-attr"] - ] - ], - /** - * Case-sensitive compile tokensToFunction params. - */ - [ - "/:test(abc)", - { - sensitive: true - }, - [ - { - name: "test", - prefix: "/", - suffix: "", - modifier: "", - pattern: "abc" - } - ], - [ - ["/abc", ["/abc", "abc"]], - ["/ABC", null] - ], - [ - [{ test: "abc" }, "/abc"], - [{ test: "ABC" }, null] - ] - ], - [ - "/:test(abc)", - {}, - [ - { - name: "test", - prefix: "/", - suffix: "", - modifier: "", - pattern: "abc" - } - ], - [ - ["/abc", ["/abc", "abc"]], - ["/ABC", ["/ABC", "ABC"]] - ], - [ - [{ test: "abc" }, "/abc"], - [{ test: "ABC" }, "/ABC"] - ] - ], - /** - * Nested parentheses. - */ - [ - "/:test(\\d+(?:\\.\\d+)?)", - undefined, - [ - { - name: "test", - prefix: "/", - suffix: "", - modifier: "", - pattern: "\\d+(?:\\.\\d+)?" - } - ], - [ - ["/123", ["/123", "123"]], - ["/abc", null], - ["/123/abc", null], - ["/123.123", ["/123.123", "123.123"]], - ["/123.abc", null] - ], - [ - [{ test: 123 }, "/123"], - [{ test: 123.123 }, "/123.123"], - [{ test: "abc" }, null], - [{ test: "123" }, "/123"], - [{ test: "123.123" }, "/123.123"], - [{ test: "123.abc" }, null] - ] - ], - [ - "/:test((?!login)[^/]+)", - undefined, - [ - { - name: "test", - prefix: "/", - suffix: "", - modifier: "", - pattern: "(?!login)[^/]+" - } - ], - [ - ["/route", ["/route", "route"]], - ["/login", null] - ], - [ - [{ test: "route" }, "/route"], - [{ test: "login" }, null] - ] - ], - /** - * https://github.com/pillarjs/path-to-regexp/issues/206 - */ - [ - "/user(s)?/:user", - undefined, - [ - "/user", - { - name: 0, - prefix: "", - suffix: "", - modifier: "?", - pattern: "s" - }, - { - name: "user", - prefix: "/", - suffix: "", - modifier: "", - pattern: "[^\\/#\\?]+?" - } - ], - [ - ["/user/123", ["/user/123", undefined, "123"]], - ["/users/123", ["/users/123", "s", "123"]] - ], - [[{ user: "123" }, "/user/123"]] - ], - /** - * https://github.com/pillarjs/path-to-regexp/issues/209 - */ - [ - "/whatever/:foo\\?query=str", - undefined, - [ - "/whatever", - { - name: "foo", - prefix: "/", - suffix: "", - modifier: "", - pattern: "[^\\/#\\?]+?" - }, - "?query=str" - ], - [["/whatever/123?query=str", ["/whatever/123?query=str", "123"]]], - [[{ foo: "123" }, "/whatever/123?query=str"]] - ], - [ - "/whatever/:foo", - { - end: false - }, - [ - "/whatever", - { - name: "foo", - prefix: "/", - suffix: "", - modifier: "", - pattern: "[^\\/#\\?]+?" - } - ], - [ - ["/whatever/123", ["/whatever/123", "123"]], - ["/whatever/123/path", ["/whatever/123", "123"]], - ["/whatever/123#fragment", ["/whatever/123", "123"]], - ["/whatever/123?query=str", ["/whatever/123", "123"]] - ], - [ - [{ foo: "123" }, "/whatever/123"], - [{ foo: "#" }, null] - ] - ] -]; -/** - * Dynamically generate the entire test suite. - */ -describe("path-to-regexp", function () { - var TEST_PATH = "/user/:id"; - var TEST_PARAM = { - name: "id", - prefix: "/", - suffix: "", - modifier: "", - pattern: "[^\\/#\\?]+?" - }; - describe("arguments", function () { - it("should work without different call combinations", function () { - pathToRegexp.pathToRegexp("/test"); - pathToRegexp.pathToRegexp("/test", []); - pathToRegexp.pathToRegexp("/test", undefined, {}); - pathToRegexp.pathToRegexp(/^\/test/); - pathToRegexp.pathToRegexp(/^\/test/, []); - pathToRegexp.pathToRegexp(/^\/test/, undefined, {}); - pathToRegexp.pathToRegexp(["/a", "/b"]); - pathToRegexp.pathToRegexp(["/a", "/b"], []); - pathToRegexp.pathToRegexp(["/a", "/b"], undefined, {}); - }); - it("should accept an array of keys as the second argument", function () { - var keys = []; - var re = pathToRegexp.pathToRegexp(TEST_PATH, keys, { end: false }); - expect(keys).toEqual([TEST_PARAM]); - expect(exec(re, "/user/123/show")).toEqual(["/user/123", "123"]); - }); - it("should throw on non-capturing pattern", function () { - expect(function () { - pathToRegexp.pathToRegexp("/:foo(?:\\d+(\\.\\d+)?)"); - }).toThrow(new TypeError('Pattern cannot start with "?" at 6')); - }); - it("should throw on nested capturing group", function () { - expect(function () { - pathToRegexp.pathToRegexp("/:foo(\\d+(\\.\\d+)?)"); - }).toThrow(new TypeError("Capturing groups are not allowed at 9")); - }); - it("should throw on unbalanced pattern", function () { - expect(function () { - pathToRegexp.pathToRegexp("/:foo(abc"); - }).toThrow(new TypeError("Unbalanced pattern at 5")); - }); - it("should throw on missing pattern", function () { - expect(function () { - pathToRegexp.pathToRegexp("/:foo()"); - }).toThrow(new TypeError("Missing pattern at 5")); - }); - it("should throw on missing name", function () { - expect(function () { - pathToRegexp.pathToRegexp("/:(test)"); - }).toThrow(new TypeError("Missing parameter name at 1")); - }); - it("should throw on nested groups", function () { - expect(function () { - pathToRegexp.pathToRegexp("/{a{b:foo}}"); - }).toThrow(new TypeError("Unexpected OPEN at 3, expected CLOSE")); - }); - it("should throw on misplaced modifier", function () { - expect(function () { - pathToRegexp.pathToRegexp("/foo?"); - }).toThrow(new TypeError("Unexpected MODIFIER at 4, expected END")); - }); - }); - describe("tokens", function () { - var tokens = pathToRegexp.parse(TEST_PATH); - it("should expose method to compile tokens to regexp", function () { - var re = pathToRegexp.tokensToRegexp(tokens); - expect(exec(re, "/user/123")).toEqual(["/user/123", "123"]); - }); - it("should expose method to compile tokens to a path function", function () { - var fn = pathToRegexp.tokensToFunction(tokens); - expect(fn({ id: 123 })).toEqual("/user/123"); - }); - }); - describe("rules", function () { - TESTS.forEach(function (test) { - var path = test[0], opts = test[1], tokens = test[2], matchCases = test[3], compileCases = test[4]; - describe(util.inspect(path), function () { - var keys = []; - var re = pathToRegexp.pathToRegexp(path, keys, opts); - // Parsing and compiling is only supported with string input. - if (typeof path === "string") { - it("should parse", function () { - expect(pathToRegexp.parse(path, opts)).toEqual(tokens); - }); - describe("compile", function () { - compileCases.forEach(function (io) { - var params = io[0], result = io[1], options = io[2]; - var toPath = pathToRegexp.compile(path, __assign(__assign({}, opts), options)); - if (result !== null) { - it("should compile using " + util.inspect(params), function () { - expect(toPath(params)).toEqual(result); - }); - } - else { - it("should not compile using " + util.inspect(params), function () { - expect(function () { - toPath(params); - }).toThrow(TypeError); - }); - } - }); - }); - } - else { - it("should parse keys", function () { - expect(keys).toEqual(tokens.filter(function (token) { - return typeof token !== "string"; - })); - }); - } - describe("match" + (opts ? " using " + util.inspect(opts) : ""), function () { - matchCases.forEach(function (io) { - var pathname = io[0], matches = io[1], params = io[2], options = io[3]; - var message = "should " + (matches ? "" : "not ") + "match " + util.inspect(pathname); - it(message, function () { - expect(exec(re, pathname)).toEqual(matches); - }); - if (typeof path === "string" && params !== undefined) { - var match_1 = pathToRegexp.match(path, options); - it(message + " params", function () { - expect(match_1(pathname)).toEqual(params); - }); - } - }); - }); - }); - }); - }); - describe("compile errors", function () { - it("should throw when a required param is undefined", function () { - var toPath = pathToRegexp.compile("/a/:b/c"); - expect(function () { - toPath(); - }).toThrow(new TypeError('Expected "b" to be a string')); - }); - it("should throw when it does not match the pattern", function () { - var toPath = pathToRegexp.compile("/:foo(\\d+)"); - expect(function () { - toPath({ foo: "abc" }); - }).toThrow(new TypeError('Expected "foo" to match "\\d+", but got "abc"')); - }); - it("should throw when expecting a repeated value", function () { - var toPath = pathToRegexp.compile("/:foo+"); - expect(function () { - toPath({ foo: [] }); - }).toThrow(new TypeError('Expected "foo" to not be empty')); - }); - it("should throw when not expecting a repeated value", function () { - var toPath = pathToRegexp.compile("/:foo"); - expect(function () { - toPath({ foo: [] }); - }).toThrow(new TypeError('Expected "foo" to not repeat, but got an array')); - }); - it("should throw when repeated value does not match", function () { - var toPath = pathToRegexp.compile("/:foo(\\d+)+"); - expect(function () { - toPath({ foo: [1, 2, 3, "a"] }); - }).toThrow(new TypeError('Expected all "foo" to match "\\d+", but got "a"')); - }); - }); -}); -/** - * Execute a regular expression and return a flat array for comparison. - * - * @param {RegExp} re - * @param {String} str - * @return {Array} - */ -function exec(re, str) { - var match = re.exec(str); - return match && Array.prototype.slice.call(match); -} -//# sourceMappingURL=index.spec.js.map \ No newline at end of file diff --git a/packages/next/src/compiled/path-to-regexp/index.spec.js.map b/packages/next/src/compiled/path-to-regexp/index.spec.js.map deleted file mode 100644 index 78d8e93a0060a..0000000000000 --- a/packages/next/src/compiled/path-to-regexp/index.spec.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.spec.js","sourceRoot":"","sources":["../src/index.spec.ts"],"names":[],"mappings":"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","sourcesContent":["import * as util from \"util\";\nimport * as pathToRegexp from \"./index\";\n\ntype Test = [\n pathToRegexp.Path,\n (pathToRegexp.TokensToRegexpOptions & pathToRegexp.ParseOptions) | undefined,\n pathToRegexp.Token[],\n Array<\n [\n string,\n (string | undefined)[] | null,\n pathToRegexp.Match?,\n pathToRegexp.RegexpToFunctionOptions?\n ]\n >,\n Array<[any, string | null, pathToRegexp.TokensToFunctionOptions?]>\n];\n\n/**\n * An array of test cases with expected inputs and outputs.\n */\nconst TESTS: Test[] = [\n /**\n * Simple paths.\n */\n [\n \"/\",\n undefined,\n [\"/\"],\n [\n [\"/\", [\"/\"], { path: \"/\", index: 0, params: {} }],\n [\"/route\", null, false]\n ],\n [\n [null, \"/\"],\n [{}, \"/\"],\n [{ id: 123 }, \"/\"]\n ]\n ],\n [\n \"/test\",\n undefined,\n [\"/test\"],\n [\n [\"/test\", [\"/test\"], { path: \"/test\", index: 0, params: {} }],\n [\"/route\", null, false],\n [\"/test/route\", null, false],\n [\"/test/\", [\"/test/\"], { path: \"/test/\", index: 0, params: {} }]\n ],\n [\n [null, \"/test\"],\n [{}, \"/test\"]\n ]\n ],\n [\n \"/test/\",\n undefined,\n [\"/test/\"],\n [\n [\"/test\", null],\n [\"/test/\", [\"/test/\"]],\n [\"/test//\", [\"/test//\"]]\n ],\n [[null, \"/test/\"]]\n ],\n\n /**\n * Case-sensitive paths.\n */\n [\n \"/test\",\n {\n sensitive: true\n },\n [\"/test\"],\n [\n [\"/test\", [\"/test\"]],\n [\"/TEST\", null]\n ],\n [[null, \"/test\"]]\n ],\n [\n \"/TEST\",\n {\n sensitive: true\n },\n [\"/TEST\"],\n [\n [\"/test\", null],\n [\"/TEST\", [\"/TEST\"]]\n ],\n [[null, \"/TEST\"]]\n ],\n\n /**\n * Strict mode.\n */\n [\n \"/test\",\n {\n strict: true\n },\n [\"/test\"],\n [\n [\"/test\", [\"/test\"]],\n [\"/test/\", null],\n [\"/TEST\", [\"/TEST\"]]\n ],\n [[null, \"/test\"]]\n ],\n [\n \"/test/\",\n {\n strict: true\n },\n [\"/test/\"],\n [\n [\"/test\", null],\n [\"/test/\", [\"/test/\"]],\n [\"/test//\", null]\n ],\n [[null, \"/test/\"]]\n ],\n\n /**\n * Non-ending mode.\n */\n [\n \"/test\",\n {\n end: false\n },\n [\"/test\"],\n [\n [\"/test\", [\"/test\"]],\n [\"/test/\", [\"/test/\"]],\n [\"/test/route\", [\"/test\"]],\n [\"/route\", null]\n ],\n [[null, \"/test\"]]\n ],\n [\n \"/test/\",\n {\n end: false\n },\n [\"/test/\"],\n [\n [\"/test\", null],\n [\"/test/route\", [\"/test/\"]],\n [\"/test//\", [\"/test//\"]],\n [\"/test//route\", [\"/test/\"]]\n ],\n [[null, \"/test/\"]]\n ],\n [\n \"/:test\",\n {\n end: false\n },\n [\n {\n name: \"test\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n }\n ],\n [\n [\n \"/route\",\n [\"/route\", \"route\"],\n { path: \"/route\", index: 0, params: { test: \"route\" } }\n ],\n [\n \"/caf%C3%A9\",\n [\"/caf%C3%A9\", \"caf%C3%A9\"],\n { path: \"/caf%C3%A9\", index: 0, params: { test: \"caf%C3%A9\" } }\n ],\n [\n \"/caf%C3%A9\",\n [\"/caf%C3%A9\", \"caf%C3%A9\"],\n { path: \"/caf%C3%A9\", index: 0, params: { test: \"café\" } },\n { decode: decodeURIComponent }\n ]\n ],\n [\n [{}, null],\n [{ test: \"abc\" }, \"/abc\"],\n [{ test: \"a+b\" }, \"/a+b\"],\n [{ test: \"a+b\" }, \"/test\", { encode: (_, token) => String(token.name) }],\n [{ test: \"a+b\" }, \"/a%2Bb\", { encode: encodeURIComponent }]\n ]\n ],\n [\n \"/:test/\",\n {\n end: false\n },\n [\n {\n name: \"test\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n },\n \"/\"\n ],\n [\n [\"/route\", null],\n [\"/route/\", [\"/route/\", \"route\"]]\n ],\n [[{ test: \"abc\" }, \"/abc/\"]]\n ],\n [\n \"\",\n {\n end: false\n },\n [],\n [\n [\"\", [\"\"]],\n [\"/\", [\"/\"]],\n [\"route\", [\"\"]],\n [\"/route\", [\"\"]],\n [\"/route/\", [\"\"]]\n ],\n [[null, \"\"]]\n ],\n\n /**\n * Non-starting mode.\n */\n [\n \"/test\",\n {\n start: false\n },\n [\"/test\"],\n [\n [\"/test\", [\"/test\"]],\n [\"/test/\", [\"/test/\"]],\n [\"/route/test\", [\"/test\"]],\n [\"/test/route\", null],\n [\"/route/test/deep\", null],\n [\"/route\", null]\n ],\n [[null, \"/test\"]]\n ],\n [\n \"/test/\",\n {\n start: false\n },\n [\"/test/\"],\n [\n [\"/test\", null],\n [\"/test/route\", null],\n [\"/test//route\", null],\n [\"/test//\", [\"/test//\"]],\n [\"/route/test/\", [\"/test/\"]]\n ],\n [[null, \"/test/\"]]\n ],\n [\n \"/:test\",\n {\n start: false\n },\n [\n {\n name: \"test\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n }\n ],\n [[\"/route\", [\"/route\", \"route\"]]],\n [\n [{}, null],\n [{ test: \"abc\" }, \"/abc\"],\n [{ test: \"a+b\" }, \"/a+b\"],\n [{ test: \"a+b\" }, \"/test\", { encode: (_, token) => String(token.name) }],\n [{ test: \"a+b\" }, \"/a%2Bb\", { encode: encodeURIComponent }]\n ]\n ],\n [\n \"/:test/\",\n {\n start: false\n },\n [\n {\n name: \"test\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n },\n \"/\"\n ],\n [\n [\"/route\", null],\n [\"/route/\", [\"/route/\", \"route\"]]\n ],\n [[{ test: \"abc\" }, \"/abc/\"]]\n ],\n [\n \"\",\n {\n start: false\n },\n [],\n [\n [\"\", [\"\"]],\n [\"/\", [\"/\"]],\n [\"route\", [\"\"]],\n [\"/route\", [\"\"]],\n [\"/route/\", [\"/\"]]\n ],\n [[null, \"\"]]\n ],\n\n /**\n * Combine modes.\n */\n [\n \"/test\",\n {\n end: false,\n strict: true\n },\n [\"/test\"],\n [\n [\"/test\", [\"/test\"]],\n [\"/test/\", [\"/test\"]],\n [\"/test/route\", [\"/test\"]]\n ],\n [[null, \"/test\"]]\n ],\n [\n \"/test/\",\n {\n end: false,\n strict: true\n },\n [\"/test/\"],\n [\n [\"/test\", null],\n [\"/test/\", [\"/test/\"]],\n [\"/test//\", [\"/test/\"]],\n [\"/test/route\", [\"/test/\"]]\n ],\n [[null, \"/test/\"]]\n ],\n [\n \"/test.json\",\n {\n end: false,\n strict: true\n },\n [\"/test.json\"],\n [\n [\"/test.json\", [\"/test.json\"]],\n [\"/test.json.hbs\", null],\n [\"/test.json/route\", [\"/test.json\"]]\n ],\n [[null, \"/test.json\"]]\n ],\n [\n \"/:test\",\n {\n end: false,\n strict: true\n },\n [\n {\n name: \"test\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n }\n ],\n [\n [\"/route\", [\"/route\", \"route\"]],\n [\"/route/\", [\"/route\", \"route\"]]\n ],\n [\n [{}, null],\n [{ test: \"abc\" }, \"/abc\"]\n ]\n ],\n [\n \"/:test/\",\n {\n end: false,\n strict: true\n },\n [\n {\n name: \"test\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n },\n \"/\"\n ],\n [\n [\"/route\", null],\n [\"/route/\", [\"/route/\", \"route\"]]\n ],\n [[{ test: \"foobar\" }, \"/foobar/\"]]\n ],\n [\n \"/test\",\n {\n start: false,\n end: false\n },\n [\"/test\"],\n [\n [\"/test\", [\"/test\"]],\n [\"/test/\", [\"/test/\"]],\n [\"/test/route\", [\"/test\"]],\n [\"/route/test/deep\", [\"/test\"]]\n ],\n [[null, \"/test\"]]\n ],\n [\n \"/test/\",\n {\n start: false,\n end: false\n },\n [\"/test/\"],\n [\n [\"/test\", null],\n [\"/test/\", [\"/test/\"]],\n [\"/test//\", [\"/test//\"]],\n [\"/test/route\", [\"/test/\"]],\n [\"/route/test/deep\", [\"/test/\"]]\n ],\n [[null, \"/test/\"]]\n ],\n [\n \"/test.json\",\n {\n start: false,\n end: false\n },\n [\"/test.json\"],\n [\n [\"/test.json\", [\"/test.json\"]],\n [\"/test.json.hbs\", null],\n [\"/test.json/route\", [\"/test.json\"]],\n [\"/route/test.json/deep\", [\"/test.json\"]]\n ],\n [[null, \"/test.json\"]]\n ],\n [\n \"/:test\",\n {\n start: false,\n end: false\n },\n [\n {\n name: \"test\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n }\n ],\n [\n [\"/route\", [\"/route\", \"route\"]],\n [\"/route/\", [\"/route/\", \"route\"]]\n ],\n [\n [{}, null],\n [{ test: \"abc\" }, \"/abc\"]\n ]\n ],\n [\n \"/:test/\",\n {\n end: false,\n strict: true\n },\n [\n {\n name: \"test\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n },\n \"/\"\n ],\n [\n [\"/route\", null],\n [\"/route/\", [\"/route/\", \"route\"]]\n ],\n [[{ test: \"foobar\" }, \"/foobar/\"]]\n ],\n\n /**\n * Arrays of simple paths.\n */\n [\n [\"/one\", \"/two\"],\n undefined,\n [],\n [\n [\"/one\", [\"/one\"]],\n [\"/two\", [\"/two\"]],\n [\"/three\", null],\n [\"/one/two\", null]\n ],\n []\n ],\n\n /**\n * Non-ending simple path.\n */\n [\n \"/test\",\n {\n end: false\n },\n [\"/test\"],\n [[\"/test/route\", [\"/test\"]]],\n [[null, \"/test\"]]\n ],\n\n /**\n * Single named parameter.\n */\n [\n \"/:test\",\n undefined,\n [\n {\n name: \"test\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n }\n ],\n [\n [\"/route\", [\"/route\", \"route\"]],\n [\"/another\", [\"/another\", \"another\"]],\n [\"/something/else\", null],\n [\"/route.json\", [\"/route.json\", \"route.json\"]],\n [\"/something%2Felse\", [\"/something%2Felse\", \"something%2Felse\"]],\n [\n \"/something%2Felse%2Fmore\",\n [\"/something%2Felse%2Fmore\", \"something%2Felse%2Fmore\"]\n ],\n [\"/;,:@&=+$-_.!~*()\", [\"/;,:@&=+$-_.!~*()\", \";,:@&=+$-_.!~*()\"]]\n ],\n [\n [{ test: \"route\" }, \"/route\"],\n [\n { test: \"something/else\" },\n \"/something%2Felse\",\n { encode: encodeURIComponent }\n ],\n [\n { test: \"something/else/more\" },\n \"/something%2Felse%2Fmore\",\n { encode: encodeURIComponent }\n ]\n ]\n ],\n [\n \"/:test\",\n {\n strict: true\n },\n [\n {\n name: \"test\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n }\n ],\n [\n [\"/route\", [\"/route\", \"route\"]],\n [\"/route/\", null]\n ],\n [[{ test: \"route\" }, \"/route\"]]\n ],\n [\n \"/:test/\",\n {\n strict: true\n },\n [\n {\n name: \"test\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n },\n \"/\"\n ],\n [\n [\"/route/\", [\"/route/\", \"route\"]],\n [\"/route//\", null]\n ],\n [[{ test: \"route\" }, \"/route/\"]]\n ],\n [\n \"/:test\",\n {\n end: false\n },\n [\n {\n name: \"test\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n }\n ],\n [\n [\"/route.json\", [\"/route.json\", \"route.json\"]],\n [\"/route//\", [\"/route\", \"route\"]]\n ],\n [[{ test: \"route\" }, \"/route\"]]\n ],\n\n /**\n * Optional named parameter.\n */\n [\n \"/:test?\",\n undefined,\n [\n {\n name: \"test\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"?\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n }\n ],\n [\n [\n \"/route\",\n [\"/route\", \"route\"],\n { path: \"/route\", index: 0, params: { test: \"route\" } }\n ],\n [\"/route/nested\", null, false],\n [\"/\", [\"/\", undefined], { path: \"/\", index: 0, params: {} }],\n [\"//\", null]\n ],\n [\n [null, \"\"],\n [{ test: \"foobar\" }, \"/foobar\"]\n ]\n ],\n [\n \"/:test?\",\n {\n strict: true\n },\n [\n {\n name: \"test\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"?\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n }\n ],\n [\n [\"/route\", [\"/route\", \"route\"]],\n [\"/\", null], // Questionable behaviour.\n [\"//\", null]\n ],\n [\n [null, \"\"],\n [{ test: \"foobar\" }, \"/foobar\"]\n ]\n ],\n [\n \"/:test?/\",\n {\n strict: true\n },\n [\n {\n name: \"test\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"?\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n },\n \"/\"\n ],\n [\n [\"/route\", null],\n [\"/route/\", [\"/route/\", \"route\"]],\n [\"/\", [\"/\", undefined]],\n [\"//\", null]\n ],\n [\n [null, \"/\"],\n [{ test: \"foobar\" }, \"/foobar/\"]\n ]\n ],\n [\n \"/:test?/bar\",\n undefined,\n [\n {\n name: \"test\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"?\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n },\n \"/bar\"\n ],\n [\n [\"/bar\", [\"/bar\", undefined]],\n [\"/foo/bar\", [\"/foo/bar\", \"foo\"]]\n ],\n [\n [null, \"/bar\"],\n [{ test: \"foo\" }, \"/foo/bar\"]\n ]\n ],\n [\n \"/:test?-bar\",\n undefined,\n [\n {\n name: \"test\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"?\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n },\n \"-bar\"\n ],\n [\n [\"-bar\", [\"-bar\", undefined]],\n [\"/-bar\", null],\n [\"/foo-bar\", [\"/foo-bar\", \"foo\"]]\n ],\n [\n [undefined, \"-bar\"],\n [{ test: \"foo\" }, \"/foo-bar\"]\n ]\n ],\n [\n \"/:test*-bar\",\n undefined,\n [\n {\n name: \"test\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"*\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n },\n \"-bar\"\n ],\n [\n [\"-bar\", [\"-bar\", undefined]],\n [\"/-bar\", null],\n [\"/foo-bar\", [\"/foo-bar\", \"foo\"]],\n [\"/foo/baz-bar\", [\"/foo/baz-bar\", \"foo/baz\"]]\n ],\n [[{ test: \"foo\" }, \"/foo-bar\"]]\n ],\n\n /**\n * Repeated one or more times parameters.\n */\n [\n \"/:test+\",\n undefined,\n [\n {\n name: \"test\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"+\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n }\n ],\n [\n [\"/\", null, false],\n [\n \"/route\",\n [\"/route\", \"route\"],\n { path: \"/route\", index: 0, params: { test: [\"route\"] } }\n ],\n [\n \"/some/basic/route\",\n [\"/some/basic/route\", \"some/basic/route\"],\n {\n path: \"/some/basic/route\",\n index: 0,\n params: { test: [\"some\", \"basic\", \"route\"] }\n }\n ],\n [\"//\", null, false]\n ],\n [\n [{}, null],\n [{ test: \"foobar\" }, \"/foobar\"],\n [{ test: [\"a\", \"b\", \"c\"] }, \"/a/b/c\"]\n ]\n ],\n [\n \"/:test(\\\\d+)+\",\n undefined,\n [\n {\n name: \"test\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"+\",\n pattern: \"\\\\d+\"\n }\n ],\n [\n [\"/abc/456/789\", null],\n [\"/123/456/789\", [\"/123/456/789\", \"123/456/789\"]]\n ],\n [\n [{ test: \"abc\" }, null],\n [{ test: 123 }, \"/123\"],\n [{ test: [1, 2, 3] }, \"/1/2/3\"]\n ]\n ],\n [\n \"/route.:ext(json|xml)+\",\n undefined,\n [\n \"/route\",\n {\n name: \"ext\",\n prefix: \".\",\n suffix: \"\",\n modifier: \"+\",\n pattern: \"json|xml\"\n }\n ],\n [\n [\"/route\", null],\n [\"/route.json\", [\"/route.json\", \"json\"]],\n [\"/route.xml.json\", [\"/route.xml.json\", \"xml.json\"]],\n [\"/route.html\", null]\n ],\n [\n [{ ext: \"foobar\" }, null],\n [{ ext: \"xml\" }, \"/route.xml\"],\n [{ ext: [\"xml\", \"json\"] }, \"/route.xml.json\"]\n ]\n ],\n [\n \"/route.:ext(\\\\w+)/test\",\n undefined,\n [\n \"/route\",\n {\n name: \"ext\",\n prefix: \".\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"\\\\w+\"\n },\n \"/test\"\n ],\n [\n [\"/route\", null],\n [\"/route.json\", null],\n [\"/route.xml/test\", [\"/route.xml/test\", \"xml\"]],\n [\"/route.json.gz/test\", null]\n ],\n [[{ ext: \"xml\" }, \"/route.xml/test\"]]\n ],\n\n /**\n * Repeated zero or more times parameters.\n */\n [\n \"/:test*\",\n undefined,\n [\n {\n name: \"test\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"*\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n }\n ],\n [\n [\"/\", [\"/\", undefined], { path: \"/\", index: 0, params: {} }],\n [\"//\", null, false],\n [\n \"/route\",\n [\"/route\", \"route\"],\n { path: \"/route\", index: 0, params: { test: [\"route\"] } }\n ],\n [\n \"/some/basic/route\",\n [\"/some/basic/route\", \"some/basic/route\"],\n {\n path: \"/some/basic/route\",\n index: 0,\n params: { test: [\"some\", \"basic\", \"route\"] }\n }\n ]\n ],\n [\n [{}, \"\"],\n [{ test: [] }, \"\"],\n [{ test: \"foobar\" }, \"/foobar\"],\n [{ test: [\"foo\", \"bar\"] }, \"/foo/bar\"]\n ]\n ],\n [\n \"/route.:ext([a-z]+)*\",\n undefined,\n [\n \"/route\",\n {\n name: \"ext\",\n prefix: \".\",\n suffix: \"\",\n modifier: \"*\",\n pattern: \"[a-z]+\"\n }\n ],\n [\n [\"/route\", [\"/route\", undefined]],\n [\"/route.json\", [\"/route.json\", \"json\"]],\n [\"/route.json.xml\", [\"/route.json.xml\", \"json.xml\"]],\n [\"/route.123\", null]\n ],\n [\n [{}, \"/route\"],\n [{ ext: [] }, \"/route\"],\n [{ ext: \"123\" }, null],\n [{ ext: \"foobar\" }, \"/route.foobar\"],\n [{ ext: [\"foo\", \"bar\"] }, \"/route.foo.bar\"]\n ]\n ],\n\n /**\n * Custom named parameters.\n */\n [\n \"/:test(\\\\d+)\",\n undefined,\n [\n {\n name: \"test\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"\\\\d+\"\n }\n ],\n [\n [\"/123\", [\"/123\", \"123\"]],\n [\"/abc\", null],\n [\"/123/abc\", null]\n ],\n [\n [{ test: \"abc\" }, null],\n [{ test: \"abc\" }, \"/abc\", { validate: false }],\n [{ test: \"123\" }, \"/123\"]\n ]\n ],\n [\n \"/:test(\\\\d+)\",\n {\n end: false\n },\n [\n {\n name: \"test\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"\\\\d+\"\n }\n ],\n [\n [\"/123\", [\"/123\", \"123\"]],\n [\"/abc\", null],\n [\"/123/abc\", [\"/123\", \"123\"]]\n ],\n [[{ test: \"123\" }, \"/123\"]]\n ],\n [\n \"/:test(.*)\",\n undefined,\n [\n {\n name: \"test\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \".*\"\n }\n ],\n [\n [\"/anything/goes/here\", [\"/anything/goes/here\", \"anything/goes/here\"]],\n [\"/;,:@&=/+$-_.!/~*()\", [\"/;,:@&=/+$-_.!/~*()\", \";,:@&=/+$-_.!/~*()\"]]\n ],\n [\n [{ test: \"\" }, \"/\"],\n [{ test: \"abc\" }, \"/abc\"],\n [{ test: \"abc/123\" }, \"/abc%2F123\", { encode: encodeURIComponent }],\n [\n { test: \"abc/123/456\" },\n \"/abc%2F123%2F456\",\n { encode: encodeURIComponent }\n ]\n ]\n ],\n [\n \"/:route([a-z]+)\",\n undefined,\n [\n {\n name: \"route\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[a-z]+\"\n }\n ],\n [\n [\"/abcde\", [\"/abcde\", \"abcde\"]],\n [\"/12345\", null]\n ],\n [\n [{ route: \"\" }, null],\n [{ route: \"\" }, \"/\", { validate: false }],\n [{ route: \"123\" }, null],\n [{ route: \"123\" }, \"/123\", { validate: false }],\n [{ route: \"abc\" }, \"/abc\"]\n ]\n ],\n [\n \"/:route(this|that)\",\n undefined,\n [\n {\n name: \"route\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"this|that\"\n }\n ],\n [\n [\"/this\", [\"/this\", \"this\"]],\n [\"/that\", [\"/that\", \"that\"]],\n [\"/foo\", null]\n ],\n [\n [{ route: \"this\" }, \"/this\"],\n [{ route: \"foo\" }, null],\n [{ route: \"foo\" }, \"/foo\", { validate: false }],\n [{ route: \"that\" }, \"/that\"]\n ]\n ],\n [\n \"/:path(abc|xyz)*\",\n undefined,\n [\n {\n name: \"path\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"*\",\n pattern: \"abc|xyz\"\n }\n ],\n [\n [\"/abc\", [\"/abc\", \"abc\"]],\n [\"/abc/abc\", [\"/abc/abc\", \"abc/abc\"]],\n [\"/xyz/xyz\", [\"/xyz/xyz\", \"xyz/xyz\"]],\n [\"/abc/xyz\", [\"/abc/xyz\", \"abc/xyz\"]],\n [\"/abc/xyz/abc/xyz\", [\"/abc/xyz/abc/xyz\", \"abc/xyz/abc/xyz\"]],\n [\"/xyzxyz\", null]\n ],\n [\n [{ path: \"abc\" }, \"/abc\"],\n [{ path: [\"abc\", \"xyz\"] }, \"/abc/xyz\"],\n [{ path: [\"xyz\", \"abc\", \"xyz\"] }, \"/xyz/abc/xyz\"],\n [{ path: \"abc123\" }, null],\n [{ path: \"abc123\" }, \"/abc123\", { validate: false }],\n [{ path: \"abcxyz\" }, null],\n [{ path: \"abcxyz\" }, \"/abcxyz\", { validate: false }]\n ]\n ],\n\n /**\n * Prefixed slashes could be omitted.\n */\n [\n \"test\",\n undefined,\n [\"test\"],\n [\n [\"test\", [\"test\"]],\n [\"/test\", null]\n ],\n [[null, \"test\"]]\n ],\n [\n \":test\",\n undefined,\n [\n {\n name: \"test\",\n prefix: \"\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n }\n ],\n [\n [\"route\", [\"route\", \"route\"]],\n [\"/route\", null],\n [\"route/\", [\"route/\", \"route\"]]\n ],\n [\n [{ test: \"\" }, null],\n [{}, null],\n [{ test: null }, null],\n [{ test: \"route\" }, \"route\"]\n ]\n ],\n [\n \":test\",\n {\n strict: true\n },\n [\n {\n name: \"test\",\n prefix: \"\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n }\n ],\n [\n [\"route\", [\"route\", \"route\"]],\n [\"/route\", null],\n [\"route/\", null]\n ],\n [[{ test: \"route\" }, \"route\"]]\n ],\n [\n \":test\",\n {\n end: false\n },\n [\n {\n name: \"test\",\n prefix: \"\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n }\n ],\n [\n [\"route\", [\"route\", \"route\"]],\n [\"/route\", null],\n [\"route/\", [\"route/\", \"route\"]],\n [\"route/foobar\", [\"route\", \"route\"]]\n ],\n [[{ test: \"route\" }, \"route\"]]\n ],\n [\n \":test?\",\n undefined,\n [\n {\n name: \"test\",\n prefix: \"\",\n suffix: \"\",\n modifier: \"?\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n }\n ],\n [\n [\"route\", [\"route\", \"route\"]],\n [\"/route\", null],\n [\"\", [\"\", undefined]],\n [\"route/foobar\", null]\n ],\n [\n [{}, \"\"],\n [{ test: \"\" }, null],\n [{ test: \"route\" }, \"route\"]\n ]\n ],\n [\n \"{:test/}+\",\n undefined,\n [\n {\n name: \"test\",\n prefix: \"\",\n suffix: \"/\",\n modifier: \"+\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n }\n ],\n [\n [\"route/\", [\"route/\", \"route\"]],\n [\"/route\", null],\n [\"\", null],\n [\"foo/bar/\", [\"foo/bar/\", \"foo/bar\"]]\n ],\n [\n [{}, null],\n [{ test: \"\" }, null],\n [{ test: [\"route\"] }, \"route/\"],\n [{ test: [\"foo\", \"bar\"] }, \"foo/bar/\"]\n ]\n ],\n\n /**\n * Formats.\n */\n [\n \"/test.json\",\n undefined,\n [\"/test.json\"],\n [\n [\"/test.json\", [\"/test.json\"]],\n [\"/route.json\", null]\n ],\n [[{}, \"/test.json\"]]\n ],\n [\n \"/:test.json\",\n undefined,\n [\n {\n name: \"test\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n },\n \".json\"\n ],\n [\n [\"/.json\", null],\n [\"/test.json\", [\"/test.json\", \"test\"]],\n [\"/route.json\", [\"/route.json\", \"route\"]],\n [\"/route.json.json\", [\"/route.json.json\", \"route.json\"]]\n ],\n [\n [{ test: \"\" }, null],\n [{ test: \"foo\" }, \"/foo.json\"]\n ]\n ],\n\n /**\n * Format params.\n */\n [\n \"/test.:format(\\\\w+)\",\n undefined,\n [\n \"/test\",\n {\n name: \"format\",\n prefix: \".\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"\\\\w+\"\n }\n ],\n [\n [\"/test.html\", [\"/test.html\", \"html\"]],\n [\"/test.hbs.html\", null]\n ],\n [\n [{}, null],\n [{ format: \"\" }, null],\n [{ format: \"foo\" }, \"/test.foo\"]\n ]\n ],\n [\n \"/test.:format(\\\\w+).:format(\\\\w+)\",\n undefined,\n [\n \"/test\",\n {\n name: \"format\",\n prefix: \".\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"\\\\w+\"\n },\n {\n name: \"format\",\n prefix: \".\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"\\\\w+\"\n }\n ],\n [\n [\"/test.html\", null],\n [\"/test.hbs.html\", [\"/test.hbs.html\", \"hbs\", \"html\"]]\n ],\n [\n [{ format: \"foo.bar\" }, null],\n [{ format: \"foo\" }, \"/test.foo.foo\"]\n ]\n ],\n [\n \"/test{.:format}+\",\n undefined,\n [\n \"/test\",\n {\n name: \"format\",\n prefix: \".\",\n suffix: \"\",\n modifier: \"+\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n }\n ],\n [\n [\"/test.html\", [\"/test.html\", \"html\"]],\n [\"/test.hbs.html\", [\"/test.hbs.html\", \"hbs.html\"]]\n ],\n [\n [{ format: [] }, null],\n [{ format: \"foo\" }, \"/test.foo\"],\n [{ format: [\"foo\", \"bar\"] }, \"/test.foo.bar\"]\n ]\n ],\n [\n \"/test.:format(\\\\w+)\",\n {\n end: false\n },\n [\n \"/test\",\n {\n name: \"format\",\n prefix: \".\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"\\\\w+\"\n }\n ],\n [\n [\"/test.html\", [\"/test.html\", \"html\"]],\n [\"/test.hbs.html\", null]\n ],\n [[{ format: \"foo\" }, \"/test.foo\"]]\n ],\n [\n \"/test.:format.\",\n undefined,\n [\n \"/test\",\n {\n name: \"format\",\n prefix: \".\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n },\n \".\"\n ],\n [\n [\"/test.html.\", [\"/test.html.\", \"html\"]],\n [\"/test.hbs.html\", null]\n ],\n [\n [{ format: \"\" }, null],\n [{ format: \"foo\" }, \"/test.foo.\"]\n ]\n ],\n\n /**\n * Format and path params.\n */\n [\n \"/:test.:format\",\n undefined,\n [\n {\n name: \"test\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n },\n {\n name: \"format\",\n prefix: \".\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n }\n ],\n [\n [\"/route.html\", [\"/route.html\", \"route\", \"html\"]],\n [\"/route\", null],\n [\"/route.html.json\", [\"/route.html.json\", \"route\", \"html.json\"]]\n ],\n [\n [{}, null],\n [{ test: \"route\", format: \"foo\" }, \"/route.foo\"]\n ]\n ],\n [\n \"/:test{.:format}?\",\n undefined,\n [\n {\n name: \"test\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n },\n {\n name: \"format\",\n prefix: \".\",\n suffix: \"\",\n modifier: \"?\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n }\n ],\n [\n [\"/route\", [\"/route\", \"route\", undefined]],\n [\"/route.json\", [\"/route.json\", \"route\", \"json\"]],\n [\"/route.json.html\", [\"/route.json.html\", \"route\", \"json.html\"]]\n ],\n [\n [{ test: \"route\" }, \"/route\"],\n [{ test: \"route\", format: \"\" }, null],\n [{ test: \"route\", format: \"foo\" }, \"/route.foo\"]\n ]\n ],\n [\n \"/:test.:format?\",\n {\n end: false\n },\n [\n {\n name: \"test\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n },\n {\n name: \"format\",\n prefix: \".\",\n suffix: \"\",\n modifier: \"?\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n }\n ],\n [\n [\"/route\", [\"/route\", \"route\", undefined]],\n [\"/route.json\", [\"/route.json\", \"route\", \"json\"]],\n [\"/route.json.html\", [\"/route.json.html\", \"route\", \"json.html\"]]\n ],\n [\n [{ test: \"route\" }, \"/route\"],\n [{ test: \"route\", format: undefined }, \"/route\"],\n [{ test: \"route\", format: \"\" }, null],\n [{ test: \"route\", format: \"foo\" }, \"/route.foo\"]\n ]\n ],\n [\n \"/test.:format(.*)z\",\n {\n end: false\n },\n [\n \"/test\",\n {\n name: \"format\",\n prefix: \".\",\n suffix: \"\",\n modifier: \"\",\n pattern: \".*\"\n },\n \"z\"\n ],\n [\n [\"/test.abc\", null],\n [\"/test.z\", [\"/test.z\", \"\"]],\n [\"/test.abcz\", [\"/test.abcz\", \"abc\"]]\n ],\n [\n [{}, null],\n [{ format: \"\" }, \"/test.z\"],\n [{ format: \"foo\" }, \"/test.fooz\"]\n ]\n ],\n\n /**\n * Unnamed params.\n */\n [\n \"/(\\\\d+)\",\n undefined,\n [\n {\n name: 0,\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"\\\\d+\"\n }\n ],\n [\n [\"/123\", [\"/123\", \"123\"]],\n [\"/abc\", null],\n [\"/123/abc\", null]\n ],\n [\n [{}, null],\n [{ \"0\": \"123\" }, \"/123\"]\n ]\n ],\n [\n \"/(\\\\d+)\",\n {\n end: false\n },\n [\n {\n name: 0,\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"\\\\d+\"\n }\n ],\n [\n [\"/123\", [\"/123\", \"123\"]],\n [\"/abc\", null],\n [\"/123/abc\", [\"/123\", \"123\"]],\n [\"/123/\", [\"/123/\", \"123\"]]\n ],\n [[{ \"0\": \"123\" }, \"/123\"]]\n ],\n [\n \"/(\\\\d+)?\",\n undefined,\n [\n {\n name: 0,\n prefix: \"/\",\n suffix: \"\",\n modifier: \"?\",\n pattern: \"\\\\d+\"\n }\n ],\n [\n [\"/\", [\"/\", undefined]],\n [\"/123\", [\"/123\", \"123\"]]\n ],\n [\n [{}, \"\"],\n [{ \"0\": \"123\" }, \"/123\"]\n ]\n ],\n [\n \"/(.*)\",\n undefined,\n [\n {\n name: 0,\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \".*\"\n }\n ],\n [\n [\"/\", [\"/\", \"\"]],\n [\"/route\", [\"/route\", \"route\"]],\n [\"/route/nested\", [\"/route/nested\", \"route/nested\"]]\n ],\n [\n [{ \"0\": \"\" }, \"/\"],\n [{ \"0\": \"123\" }, \"/123\"]\n ]\n ],\n [\n \"/route\\\\(\\\\\\\\(\\\\d+\\\\\\\\)\\\\)\",\n undefined,\n [\n \"/route(\\\\\",\n {\n name: 0,\n prefix: \"\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"\\\\d+\\\\\\\\\"\n },\n \")\"\n ],\n [[\"/route(\\\\123\\\\)\", [\"/route(\\\\123\\\\)\", \"123\\\\\"]]],\n []\n ],\n [\n \"{/login}?\",\n undefined,\n [\n {\n name: \"\",\n prefix: \"/login\",\n suffix: \"\",\n modifier: \"?\",\n pattern: \"\"\n }\n ],\n [\n [\"/\", [\"/\"]],\n [\"/login\", [\"/login\"]]\n ],\n [\n [null, \"\"],\n [{ \"\": \"\" }, \"/login\"]\n ]\n ],\n [\n \"{/login}\",\n undefined,\n [\n {\n name: \"\",\n prefix: \"/login\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"\"\n }\n ],\n [\n [\"/\", null],\n [\"/login\", [\"/login\"]]\n ],\n [[{ \"\": \"\" }, \"/login\"]]\n ],\n [\n \"{/(.*)}\",\n undefined,\n [\n {\n name: 0,\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \".*\"\n }\n ],\n [\n [\"/\", [\"/\", \"\"]],\n [\"/login\", [\"/login\", \"login\"]]\n ],\n [[{ 0: \"test\" }, \"/test\"]]\n ],\n\n /**\n * Regexps.\n */\n [/.*/, undefined, [], [[\"/match/anything\", [\"/match/anything\"]]], []],\n [\n /(.*)/,\n undefined,\n [\n {\n name: 0,\n prefix: \"\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"\"\n }\n ],\n [[\"/match/anything\", [\"/match/anything\", \"/match/anything\"]]],\n []\n ],\n [\n /\\/(\\d+)/,\n undefined,\n [\n {\n name: 0,\n prefix: \"\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"\"\n }\n ],\n [\n [\"/abc\", null],\n [\"/123\", [\"/123\", \"123\"]]\n ],\n []\n ],\n\n /**\n * Mixed arrays.\n */\n [\n [\"/test\", /\\/(\\d+)/],\n undefined,\n [\n {\n name: 0,\n prefix: \"\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"\"\n }\n ],\n [[\"/test\", [\"/test\", undefined]]],\n []\n ],\n [\n [\"/:test(\\\\d+)\", /(.*)/],\n undefined,\n [\n {\n name: \"test\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"\\\\d+\"\n },\n {\n name: 0,\n prefix: \"\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"\"\n }\n ],\n [\n [\"/123\", [\"/123\", \"123\", undefined]],\n [\"/abc\", [\"/abc\", undefined, \"/abc\"]]\n ],\n []\n ],\n\n /**\n * Correct names and indexes.\n */\n [\n [\"/:test\", \"/route/:test\"],\n undefined,\n [\n {\n name: \"test\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n },\n {\n name: \"test\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n }\n ],\n [\n [\"/test\", [\"/test\", \"test\", undefined]],\n [\"/route/test\", [\"/route/test\", undefined, \"test\"]]\n ],\n []\n ],\n [\n [/^\\/([^\\/]+)$/, /^\\/route\\/([^\\/]+)$/],\n undefined,\n [\n {\n name: 0,\n prefix: \"\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"\"\n },\n {\n name: 0,\n prefix: \"\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"\"\n }\n ],\n [\n [\"/test\", [\"/test\", \"test\", undefined]],\n [\"/route/test\", [\"/route/test\", undefined, \"test\"]]\n ],\n []\n ],\n\n /**\n * Ignore non-matching groups in regexps.\n */\n [\n /(?:.*)/,\n undefined,\n [],\n [[\"/anything/you/want\", [\"/anything/you/want\"]]],\n []\n ],\n\n /**\n * Respect escaped characters.\n */\n [\n \"/\\\\(testing\\\\)\",\n undefined,\n [\"/(testing)\"],\n [\n [\"/testing\", null],\n [\"/(testing)\", [\"/(testing)\"]]\n ],\n [[null, \"/(testing)\"]]\n ],\n [\n \"/.\\\\+\\\\*\\\\?\\\\{\\\\}=^!\\\\:$[]|\",\n undefined,\n [\"/.+*?{}=^!:$[]|\"],\n [[\"/.+*?{}=^!:$[]|\", [\"/.+*?{}=^!:$[]|\"]]],\n [[null, \"/.+*?{}=^!:$[]|\"]]\n ],\n [\n \"/test\\\\/:uid(u\\\\d+)?:cid(c\\\\d+)?\",\n undefined,\n [\n \"/test/\",\n {\n name: \"uid\",\n prefix: \"\",\n suffix: \"\",\n modifier: \"?\",\n pattern: \"u\\\\d+\"\n },\n {\n name: \"cid\",\n prefix: \"\",\n suffix: \"\",\n modifier: \"?\",\n pattern: \"c\\\\d+\"\n }\n ],\n [\n [\"/test\", null],\n [\"/test/\", [\"/test/\", undefined, undefined]],\n [\"/test/u123\", [\"/test/u123\", \"u123\", undefined]],\n [\"/test/c123\", [\"/test/c123\", undefined, \"c123\"]]\n ],\n [\n [{ uid: \"u123\" }, \"/test/u123\"],\n [{ cid: \"c123\" }, \"/test/c123\"],\n [{ cid: \"u123\" }, null]\n ]\n ],\n\n /**\n * Unnamed group prefix.\n */\n [\n \"/{apple-}?icon-:res(\\\\d+).png\",\n undefined,\n [\n \"/\",\n {\n name: \"\",\n prefix: \"apple-\",\n suffix: \"\",\n modifier: \"?\",\n pattern: \"\"\n },\n \"icon-\",\n {\n name: \"res\",\n prefix: \"\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"\\\\d+\"\n },\n \".png\"\n ],\n [\n [\"/icon-240.png\", [\"/icon-240.png\", \"240\"]],\n [\"/apple-icon-240.png\", [\"/apple-icon-240.png\", \"240\"]]\n ],\n []\n ],\n\n /**\n * Random examples.\n */\n [\n \"/:foo/:bar\",\n undefined,\n [\n {\n name: \"foo\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n },\n {\n name: \"bar\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n }\n ],\n [[\"/match/route\", [\"/match/route\", \"match\", \"route\"]]],\n [[{ foo: \"a\", bar: \"b\" }, \"/a/b\"]]\n ],\n [\n \"/:foo\\\\(test\\\\)/bar\",\n undefined,\n [\n {\n name: \"foo\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n },\n \"(test)/bar\"\n ],\n [],\n []\n ],\n [\n \"/:remote([\\\\w-.]+)/:user([\\\\w-]+)\",\n undefined,\n [\n {\n name: \"remote\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[\\\\w-.]+\"\n },\n {\n name: \"user\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[\\\\w-]+\"\n }\n ],\n [\n [\"/endpoint/user\", [\"/endpoint/user\", \"endpoint\", \"user\"]],\n [\"/endpoint/user-name\", [\"/endpoint/user-name\", \"endpoint\", \"user-name\"]],\n [\"/foo.bar/user-name\", [\"/foo.bar/user-name\", \"foo.bar\", \"user-name\"]]\n ],\n [\n [{ remote: \"foo\", user: \"bar\" }, \"/foo/bar\"],\n [{ remote: \"foo.bar\", user: \"uno\" }, \"/foo.bar/uno\"]\n ]\n ],\n [\n \"/:foo\\\\?\",\n undefined,\n [\n {\n name: \"foo\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n },\n \"?\"\n ],\n [[\"/route?\", [\"/route?\", \"route\"]]],\n [[{ foo: \"bar\" }, \"/bar?\"]]\n ],\n [\n \"/:foo+baz\",\n undefined,\n [\n {\n name: \"foo\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"+\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n },\n \"baz\"\n ],\n [\n [\"/foobaz\", [\"/foobaz\", \"foo\"]],\n [\"/foo/barbaz\", [\"/foo/barbaz\", \"foo/bar\"]],\n [\"/baz\", null]\n ],\n [\n [{ foo: \"foo\" }, \"/foobaz\"],\n [{ foo: \"foo/bar\" }, \"/foo%2Fbarbaz\", { encode: encodeURIComponent }],\n [{ foo: [\"foo\", \"bar\"] }, \"/foo/barbaz\"]\n ]\n ],\n [\n \"\\\\/:pre?baz\",\n undefined,\n [\n \"/\",\n {\n name: \"pre\",\n prefix: \"\",\n suffix: \"\",\n modifier: \"?\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n },\n \"baz\"\n ],\n [\n [\"/foobaz\", [\"/foobaz\", \"foo\"]],\n [\"/baz\", [\"/baz\", undefined]]\n ],\n [\n [{}, \"/baz\"],\n [{ pre: \"foo\" }, \"/foobaz\"]\n ]\n ],\n [\n \"/:foo\\\\(:bar?\\\\)\",\n undefined,\n [\n {\n name: \"foo\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n },\n \"(\",\n {\n name: \"bar\",\n prefix: \"\",\n suffix: \"\",\n modifier: \"?\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n },\n \")\"\n ],\n [\n [\"/hello(world)\", [\"/hello(world)\", \"hello\", \"world\"]],\n [\"/hello()\", [\"/hello()\", \"hello\", undefined]]\n ],\n [\n [{ foo: \"hello\", bar: \"world\" }, \"/hello(world)\"],\n [{ foo: \"hello\" }, \"/hello()\"]\n ]\n ],\n [\n \"/:postType(video|audio|text)(\\\\+.+)?\",\n undefined,\n [\n {\n name: \"postType\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"video|audio|text\"\n },\n {\n name: 0,\n prefix: \"\",\n suffix: \"\",\n modifier: \"?\",\n pattern: \"\\\\+.+\"\n }\n ],\n [\n [\"/video\", [\"/video\", \"video\", undefined]],\n [\"/video+test\", [\"/video+test\", \"video\", \"+test\"]],\n [\"/video+\", null]\n ],\n [\n [{ postType: \"video\" }, \"/video\"],\n [{ postType: \"random\" }, null]\n ]\n ],\n [\n \"/:foo?/:bar?-ext\",\n undefined,\n [\n {\n name: \"foo\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"?\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n },\n {\n name: \"bar\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"?\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n },\n \"-ext\"\n ],\n [\n [\"/-ext\", null],\n [\"-ext\", [\"-ext\", undefined, undefined]],\n [\"/foo-ext\", [\"/foo-ext\", \"foo\", undefined]],\n [\"/foo/bar-ext\", [\"/foo/bar-ext\", \"foo\", \"bar\"]],\n [\"/foo/-ext\", null]\n ],\n [\n [{}, \"-ext\"],\n [{ foo: \"foo\" }, \"/foo-ext\"],\n [{ bar: \"bar\" }, \"/bar-ext\"],\n [{ foo: \"foo\", bar: \"bar\" }, \"/foo/bar-ext\"]\n ]\n ],\n [\n \"/:required/:optional?-ext\",\n undefined,\n [\n {\n name: \"required\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n },\n {\n name: \"optional\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"?\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n },\n \"-ext\"\n ],\n [\n [\"/foo-ext\", [\"/foo-ext\", \"foo\", undefined]],\n [\"/foo/bar-ext\", [\"/foo/bar-ext\", \"foo\", \"bar\"]],\n [\"/foo/-ext\", null]\n ],\n [[{ required: \"foo\" }, \"/foo-ext\"]]\n ],\n\n /**\n * Unicode characters.\n */\n [\n \"/:foo\",\n undefined,\n [\n {\n name: \"foo\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n }\n ],\n [[\"/café\", [\"/café\", \"café\"]]],\n [\n [{ foo: \"café\" }, \"/café\"],\n [{ foo: \"café\" }, \"/caf%C3%A9\", { encode: encodeURIComponent }]\n ]\n ],\n [\"/café\", undefined, [\"/café\"], [[\"/café\", [\"/café\"]]], [[null, \"/café\"]]],\n [\n \"/café\",\n { encode: encodeURI },\n [\"/café\"],\n [[\"/caf%C3%A9\", [\"/caf%C3%A9\"]]],\n [[null, \"/café\"]]\n ],\n [\n \"packages/\",\n undefined,\n [\"packages/\"],\n [\n [\"packages\", null],\n [\"packages/\", [\"packages/\"]]\n ],\n [[null, \"packages/\"]]\n ],\n\n /**\n * Hostnames.\n */\n [\n \":domain.com\",\n {\n delimiter: \".\"\n },\n [\n {\n name: \"domain\",\n prefix: \"\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\.]+?\"\n },\n \".com\"\n ],\n [\n [\"example.com\", [\"example.com\", \"example\"]],\n [\"github.com\", [\"github.com\", \"github\"]]\n ],\n [\n [{ domain: \"example\" }, \"example.com\"],\n [{ domain: \"github\" }, \"github.com\"]\n ]\n ],\n [\n \"mail.:domain.com\",\n {\n delimiter: \".\"\n },\n [\n \"mail\",\n {\n name: \"domain\",\n prefix: \".\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\.]+?\"\n },\n \".com\"\n ],\n [\n [\"mail.example.com\", [\"mail.example.com\", \"example\"]],\n [\"mail.github.com\", [\"mail.github.com\", \"github\"]]\n ],\n [\n [{ domain: \"example\" }, \"mail.example.com\"],\n [{ domain: \"github\" }, \"mail.github.com\"]\n ]\n ],\n [\n \"example.:ext\",\n {},\n [\n \"example\",\n {\n name: \"ext\",\n prefix: \".\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n }\n ],\n [\n [\"example.com\", [\"example.com\", \"com\"]],\n [\"example.org\", [\"example.org\", \"org\"]]\n ],\n [\n [{ ext: \"com\" }, \"example.com\"],\n [{ ext: \"org\" }, \"example.org\"]\n ]\n ],\n [\n \"this is\",\n {\n delimiter: \" \",\n end: false\n },\n [\"this is\"],\n [\n [\"this is a test\", [\"this is\"]],\n [\"this isn't\", null]\n ],\n [[null, \"this is\"]]\n ],\n\n /**\n * Ends with.\n */\n [\n \"/test\",\n {\n endsWith: \"?\"\n },\n [\"/test\"],\n [\n [\"/test\", [\"/test\"]],\n [\"/test?query=string\", [\"/test\"]],\n [\"/test/?query=string\", [\"/test/\"]],\n [\"/testx\", null]\n ],\n [[null, \"/test\"]]\n ],\n [\n \"/test\",\n {\n endsWith: \"?\",\n strict: true\n },\n [\"/test\"],\n [\n [\"/test?query=string\", [\"/test\"]],\n [\"/test/?query=string\", null]\n ],\n [[null, \"/test\"]]\n ],\n\n /**\n * Custom prefixes.\n */\n [\n \"{$:foo}{$:bar}?\",\n {},\n [\n {\n name: \"foo\",\n pattern: \"[^\\\\/#\\\\?]+?\",\n prefix: \"$\",\n suffix: \"\",\n modifier: \"\"\n },\n {\n name: \"bar\",\n pattern: \"[^\\\\/#\\\\?]+?\",\n prefix: \"$\",\n suffix: \"\",\n modifier: \"?\"\n }\n ],\n [\n [\"$x\", [\"$x\", \"x\", undefined]],\n [\"$x$y\", [\"$x$y\", \"x\", \"y\"]]\n ],\n [\n [{ foo: \"foo\" }, \"$foo\"],\n [{ foo: \"foo\", bar: \"bar\" }, \"$foo$bar\"]\n ]\n ],\n [\n \"name/:attr1?{-:attr2}?{-:attr3}?\",\n {},\n [\n \"name\",\n {\n name: \"attr1\",\n pattern: \"[^\\\\/#\\\\?]+?\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"?\"\n },\n {\n name: \"attr2\",\n pattern: \"[^\\\\/#\\\\?]+?\",\n prefix: \"-\",\n suffix: \"\",\n modifier: \"?\"\n },\n {\n name: \"attr3\",\n pattern: \"[^\\\\/#\\\\?]+?\",\n prefix: \"-\",\n suffix: \"\",\n modifier: \"?\"\n }\n ],\n [\n [\"name/test\", [\"name/test\", \"test\", undefined, undefined]],\n [\"name/1\", [\"name/1\", \"1\", undefined, undefined]],\n [\"name/1-2\", [\"name/1-2\", \"1\", \"2\", undefined]],\n [\"name/1-2-3\", [\"name/1-2-3\", \"1\", \"2\", \"3\"]],\n [\"name/foo-bar/route\", null],\n [\"name/test/route\", null]\n ],\n [\n [{}, \"name\"],\n [{ attr1: \"test\" }, \"name/test\"],\n [{ attr2: \"attr\" }, \"name-attr\"]\n ]\n ],\n\n /**\n * Case-sensitive compile tokensToFunction params.\n */\n [\n \"/:test(abc)\",\n {\n sensitive: true\n },\n [\n {\n name: \"test\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"abc\"\n }\n ],\n [\n [\"/abc\", [\"/abc\", \"abc\"]],\n [\"/ABC\", null]\n ],\n [\n [{ test: \"abc\" }, \"/abc\"],\n [{ test: \"ABC\" }, null]\n ]\n ],\n [\n \"/:test(abc)\",\n {},\n [\n {\n name: \"test\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"abc\"\n }\n ],\n [\n [\"/abc\", [\"/abc\", \"abc\"]],\n [\"/ABC\", [\"/ABC\", \"ABC\"]]\n ],\n [\n [{ test: \"abc\" }, \"/abc\"],\n [{ test: \"ABC\" }, \"/ABC\"]\n ]\n ],\n\n /**\n * Nested parentheses.\n */\n [\n \"/:test(\\\\d+(?:\\\\.\\\\d+)?)\",\n undefined,\n [\n {\n name: \"test\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"\\\\d+(?:\\\\.\\\\d+)?\"\n }\n ],\n [\n [\"/123\", [\"/123\", \"123\"]],\n [\"/abc\", null],\n [\"/123/abc\", null],\n [\"/123.123\", [\"/123.123\", \"123.123\"]],\n [\"/123.abc\", null]\n ],\n [\n [{ test: 123 }, \"/123\"],\n [{ test: 123.123 }, \"/123.123\"],\n [{ test: \"abc\" }, null],\n [{ test: \"123\" }, \"/123\"],\n [{ test: \"123.123\" }, \"/123.123\"],\n [{ test: \"123.abc\" }, null]\n ]\n ],\n [\n \"/:test((?!login)[^/]+)\",\n undefined,\n [\n {\n name: \"test\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"(?!login)[^/]+\"\n }\n ],\n [\n [\"/route\", [\"/route\", \"route\"]],\n [\"/login\", null]\n ],\n [\n [{ test: \"route\" }, \"/route\"],\n [{ test: \"login\" }, null]\n ]\n ],\n\n /**\n * https://github.com/pillarjs/path-to-regexp/issues/206\n */\n [\n \"/user(s)?/:user\",\n undefined,\n [\n \"/user\",\n {\n name: 0,\n prefix: \"\",\n suffix: \"\",\n modifier: \"?\",\n pattern: \"s\"\n },\n {\n name: \"user\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n }\n ],\n [\n [\"/user/123\", [\"/user/123\", undefined, \"123\"]],\n [\"/users/123\", [\"/users/123\", \"s\", \"123\"]]\n ],\n [[{ user: \"123\" }, \"/user/123\"]]\n ],\n\n /**\n * https://github.com/pillarjs/path-to-regexp/issues/209\n */\n [\n \"/whatever/:foo\\\\?query=str\",\n undefined,\n [\n \"/whatever\",\n {\n name: \"foo\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n },\n \"?query=str\"\n ],\n [[\"/whatever/123?query=str\", [\"/whatever/123?query=str\", \"123\"]]],\n [[{ foo: \"123\" }, \"/whatever/123?query=str\"]]\n ],\n [\n \"/whatever/:foo\",\n {\n end: false\n },\n [\n \"/whatever\",\n {\n name: \"foo\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n }\n ],\n [\n [\"/whatever/123\", [\"/whatever/123\", \"123\"]],\n [\"/whatever/123/path\", [\"/whatever/123\", \"123\"]],\n [\"/whatever/123#fragment\", [\"/whatever/123\", \"123\"]],\n [\"/whatever/123?query=str\", [\"/whatever/123\", \"123\"]]\n ],\n [\n [{ foo: \"123\" }, \"/whatever/123\"],\n [{ foo: \"#\" }, null]\n ]\n ]\n];\n\n/**\n * Dynamically generate the entire test suite.\n */\ndescribe(\"path-to-regexp\", function() {\n const TEST_PATH = \"/user/:id\";\n\n const TEST_PARAM = {\n name: \"id\",\n prefix: \"/\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"[^\\\\/#\\\\?]+?\"\n };\n\n describe(\"arguments\", function() {\n it(\"should work without different call combinations\", function() {\n pathToRegexp.pathToRegexp(\"/test\");\n pathToRegexp.pathToRegexp(\"/test\", []);\n pathToRegexp.pathToRegexp(\"/test\", undefined, {});\n\n pathToRegexp.pathToRegexp(/^\\/test/);\n pathToRegexp.pathToRegexp(/^\\/test/, []);\n pathToRegexp.pathToRegexp(/^\\/test/, undefined, {});\n\n pathToRegexp.pathToRegexp([\"/a\", \"/b\"]);\n pathToRegexp.pathToRegexp([\"/a\", \"/b\"], []);\n pathToRegexp.pathToRegexp([\"/a\", \"/b\"], undefined, {});\n });\n\n it(\"should accept an array of keys as the second argument\", function() {\n const keys: pathToRegexp.Key[] = [];\n const re = pathToRegexp.pathToRegexp(TEST_PATH, keys, { end: false });\n\n expect(keys).toEqual([TEST_PARAM]);\n expect(exec(re, \"/user/123/show\")).toEqual([\"/user/123\", \"123\"]);\n });\n\n it(\"should throw on non-capturing pattern\", function() {\n expect(function() {\n pathToRegexp.pathToRegexp(\"/:foo(?:\\\\d+(\\\\.\\\\d+)?)\");\n }).toThrow(new TypeError('Pattern cannot start with \"?\" at 6'));\n });\n\n it(\"should throw on nested capturing group\", function() {\n expect(function() {\n pathToRegexp.pathToRegexp(\"/:foo(\\\\d+(\\\\.\\\\d+)?)\");\n }).toThrow(new TypeError(\"Capturing groups are not allowed at 9\"));\n });\n\n it(\"should throw on unbalanced pattern\", function() {\n expect(function() {\n pathToRegexp.pathToRegexp(\"/:foo(abc\");\n }).toThrow(new TypeError(\"Unbalanced pattern at 5\"));\n });\n\n it(\"should throw on missing pattern\", function() {\n expect(function() {\n pathToRegexp.pathToRegexp(\"/:foo()\");\n }).toThrow(new TypeError(\"Missing pattern at 5\"));\n });\n\n it(\"should throw on missing name\", function() {\n expect(function() {\n pathToRegexp.pathToRegexp(\"/:(test)\");\n }).toThrow(new TypeError(\"Missing parameter name at 1\"));\n });\n\n it(\"should throw on nested groups\", function() {\n expect(function() {\n pathToRegexp.pathToRegexp(\"/{a{b:foo}}\");\n }).toThrow(new TypeError(\"Unexpected OPEN at 3, expected CLOSE\"));\n });\n\n it(\"should throw on misplaced modifier\", function() {\n expect(function() {\n pathToRegexp.pathToRegexp(\"/foo?\");\n }).toThrow(new TypeError(\"Unexpected MODIFIER at 4, expected END\"));\n });\n });\n\n describe(\"tokens\", function() {\n const tokens = pathToRegexp.parse(TEST_PATH);\n\n it(\"should expose method to compile tokens to regexp\", function() {\n const re = pathToRegexp.tokensToRegexp(tokens);\n\n expect(exec(re, \"/user/123\")).toEqual([\"/user/123\", \"123\"]);\n });\n\n it(\"should expose method to compile tokens to a path function\", function() {\n const fn = pathToRegexp.tokensToFunction(tokens);\n\n expect(fn({ id: 123 })).toEqual(\"/user/123\");\n });\n });\n\n describe(\"rules\", function() {\n TESTS.forEach(function(test) {\n const [path, opts, tokens, matchCases, compileCases] = test;\n\n describe(util.inspect(path), function() {\n const keys: pathToRegexp.Key[] = [];\n const re = pathToRegexp.pathToRegexp(path, keys, opts);\n\n // Parsing and compiling is only supported with string input.\n if (typeof path === \"string\") {\n it(\"should parse\", function() {\n expect(pathToRegexp.parse(path, opts)).toEqual(tokens);\n });\n\n describe(\"compile\", function() {\n compileCases.forEach(function(io) {\n const [params, result, options] = io;\n const toPath = pathToRegexp.compile(path, {\n ...opts,\n ...options\n });\n\n if (result !== null) {\n it(\"should compile using \" + util.inspect(params), function() {\n expect(toPath(params)).toEqual(result);\n });\n } else {\n it(\n \"should not compile using \" + util.inspect(params),\n function() {\n expect(function() {\n toPath(params);\n }).toThrow(TypeError);\n }\n );\n }\n });\n });\n } else {\n it(\"should parse keys\", function() {\n expect(keys).toEqual(\n tokens.filter(function(token) {\n return typeof token !== \"string\";\n })\n );\n });\n }\n\n describe(\n \"match\" + (opts ? \" using \" + util.inspect(opts) : \"\"),\n function() {\n matchCases.forEach(function(io) {\n const [pathname, matches, params, options] = io;\n const message = `should ${\n matches ? \"\" : \"not \"\n }match ${util.inspect(pathname)}`;\n\n it(message, function() {\n expect(exec(re, pathname)).toEqual(matches);\n });\n\n if (typeof path === \"string\" && params !== undefined) {\n const match = pathToRegexp.match(path, options);\n\n it(message + \" params\", function() {\n expect(match(pathname)).toEqual(params);\n });\n }\n });\n }\n );\n });\n });\n });\n\n describe(\"compile errors\", function() {\n it(\"should throw when a required param is undefined\", function() {\n const toPath = pathToRegexp.compile(\"/a/:b/c\");\n\n expect(function() {\n toPath();\n }).toThrow(new TypeError('Expected \"b\" to be a string'));\n });\n\n it(\"should throw when it does not match the pattern\", function() {\n const toPath = pathToRegexp.compile(\"/:foo(\\\\d+)\");\n\n expect(function() {\n toPath({ foo: \"abc\" });\n }).toThrow(\n new TypeError('Expected \"foo\" to match \"\\\\d+\", but got \"abc\"')\n );\n });\n\n it(\"should throw when expecting a repeated value\", function() {\n const toPath = pathToRegexp.compile(\"/:foo+\");\n\n expect(function() {\n toPath({ foo: [] });\n }).toThrow(new TypeError('Expected \"foo\" to not be empty'));\n });\n\n it(\"should throw when not expecting a repeated value\", function() {\n const toPath = pathToRegexp.compile(\"/:foo\");\n\n expect(function() {\n toPath({ foo: [] });\n }).toThrow(\n new TypeError('Expected \"foo\" to not repeat, but got an array')\n );\n });\n\n it(\"should throw when repeated value does not match\", function() {\n const toPath = pathToRegexp.compile(\"/:foo(\\\\d+)+\");\n\n expect(function() {\n toPath({ foo: [1, 2, 3, \"a\"] });\n }).toThrow(\n new TypeError('Expected all \"foo\" to match \"\\\\d+\", but got \"a\"')\n );\n });\n });\n});\n\n/**\n * Execute a regular expression and return a flat array for comparison.\n *\n * @param {RegExp} re\n * @param {String} str\n * @return {Array}\n */\nfunction exec(re: RegExp, str: string) {\n const match = re.exec(str);\n\n return match && Array.prototype.slice.call(match);\n}\n"]} \ No newline at end of file diff --git a/packages/next/src/compiled/path-to-regexp/package.json b/packages/next/src/compiled/path-to-regexp/package.json index c5376135ab189..b6236252d1c81 100644 --- a/packages/next/src/compiled/path-to-regexp/package.json +++ b/packages/next/src/compiled/path-to-regexp/package.json @@ -1,86 +1 @@ -{ - "name": "path-to-regexp", - "description": "Express style path to RegExp utility", - "version": "6.1.0", - "main": "dist/index.js", - "typings": "dist/index.d.ts", - "module": "dist.es2015/index.js", - "sideEffects": false, - "files": [ - "dist/", - "dist.es2015/" - ], - "scripts": { - "prettier": "prettier --write", - "lint": "tslint \"src/**/*\" --project tsconfig.json", - "format": "npm run prettier -- \"{.,src/**}/*.{js,jsx,ts,tsx,json,md,yml,yaml}\"", - "build": "rimraf dist/ dist.es2015/ && tsc && tsc -P tsconfig.es2015.json", - "specs": "jest --coverage", - "test": "npm run build && npm run lint && npm run specs && npm run size", - "size": "size-limit", - "prepare": "npm run build" - }, - "keywords": [ - "express", - "regexp", - "route", - "routing" - ], - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/pillarjs/path-to-regexp.git" - }, - "size-limit": [ - { - "path": "dist/index.js", - "limit": "2 kB" - } - ], - "jest": { - "roots": [ - "/src/" - ], - "transform": { - "\\.tsx?$": "ts-jest" - }, - "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(tsx?|jsx?)$", - "moduleFileExtensions": [ - "ts", - "tsx", - "js", - "jsx", - "json", - "node" - ] - }, - "husky": { - "hooks": { - "pre-commit": "lint-staged" - } - }, - "lint-staged": { - "*.{js,jsx,ts,tsx,json,md,yml,yaml}": [ - "npm run prettier", - "git add" - ] - }, - "publishConfig": { - "access": "public" - }, - "devDependencies": { - "@size-limit/preset-small-lib": "^2.1.6", - "@types/jest": "^24.0.22", - "@types/node": "^12.12.7", - "husky": "^3.0.9", - "jest": "^24.9.0", - "lint-staged": "^9.4.2", - "prettier": "^1.19.1", - "rimraf": "^3.0.0", - "ts-jest": "^24.1.0", - "tslint": "^5.20.1", - "tslint-config-prettier": "^1.18.0", - "tslint-config-standard": "^9.0.0", - "typescript": "^3.7.2" - } -} +{"name":"path-to-regexp","main":"index.js","license":"MIT"} diff --git a/packages/next/taskfile.js b/packages/next/taskfile.js index a3dd22d83971a..7317d51be2550 100644 --- a/packages/next/taskfile.js +++ b/packages/next/taskfile.js @@ -2127,17 +2127,10 @@ export async function ncc_ws(task, opts) { } externals['path-to-regexp'] = 'next/dist/compiled/path-to-regexp' -export async function path_to_regexp(task, opts) { +export async function ncc_path_to_regexp(task, opts) { await task - .source(relative(__dirname, require.resolve('path-to-regexp/package.json'))) - .target('src/compiled/path-to-regexp') - await task - .source( - join( - dirname(relative(__dirname, require.resolve('path-to-regexp'))), - '*.{js,map}' - ) - ) + .source(relative(__dirname, require.resolve('path-to-regexp'))) + .ncc({ packageName: 'path-to-regexp', externals }) .target('src/compiled/path-to-regexp') } @@ -2172,12 +2165,7 @@ export async function ncc_https_proxy_agent(task, opts) { export async function precompile(task, opts) { await task.parallel( - [ - 'browser_polyfills', - 'path_to_regexp', - 'copy_ncced', - 'copy_styled_jsx_assets', - ], + ['browser_polyfills', 'copy_ncced', 'copy_styled_jsx_assets'], opts ) } @@ -2267,6 +2255,7 @@ export async function ncc(task, opts) { 'ncc_native_url', 'ncc_neo_async', 'ncc_ora', + 'ncc_path_to_regexp', 'ncc_postcss_safe_parser', 'ncc_postcss_flexbugs_fixes', 'ncc_postcss_preset_env',