path-to-regexp 6.2.1 → 7.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Readme.md +114 -176
- package/dist/index.d.ts +79 -72
- package/dist/index.js +296 -302
- package/dist/index.js.map +1 -1
- package/package.json +29 -31
- package/dist.es2015/index.js +0 -400
- package/dist.es2015/index.js.map +0 -1
package/dist/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"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 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<P extends object = object>(\n str: string,\n options?: ParseOptions & TokensToFunctionOptions\n) {\n return tokensToFunction<P>(parse(str, options), options);\n}\n\nexport type PathFunction<P extends object = object> = (data?: P) => string;\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nexport function tokensToFunction<P extends object = object>(\n tokens: Token[],\n options: TokensToFunctionOptions = {}\n): PathFunction<P> {\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<string, any> | 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<P extends object = object> {\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<P extends object = object> = false | MatchResult<P>;\n\n/**\n * The match function takes a string and returns whether it matched the path.\n */\nexport type MatchFunction<P extends object = object> = (\n path: string\n) => Match<P>;\n\n/**\n * Create path match function from `path-to-regexp` spec.\n */\nexport function match<P extends object = object>(\n str: Path,\n options?: ParseOptions & TokensToRegexpOptions & RegexpToFunctionOptions\n) {\n const keys: Key[] = [];\n const re = pathToRegexp(str, keys, options);\n return regexpToFunction<P>(re, keys, options);\n}\n\n/**\n * Create a path match function from `path-to-regexp` output.\n */\nexport function regexpToFunction<P extends object = object>(\n re: RegExp,\n keys: Key[],\n options: RegexpToFunctionOptions = {}\n): MatchFunction<P> {\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 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 const groupsRegex = /\\((?:\\?<(.*?)>)?(?!\\?)/g;\n\n let index = 0;\n let execResult = groupsRegex.exec(path.source);\n while (execResult) {\n keys.push({\n // Use parenthesized substring match if available, index otherwise\n name: execResult[1] || index++,\n prefix: \"\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"\",\n });\n execResult = groupsRegex.exec(path.source);\n }\n\n return path;\n}\n\n/**\n * Transform an array into a regexp.\n */\nfunction arrayToRegexp(\n paths: Array<string | RegExp>,\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 won't allow 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 delimiter = \"/#?\",\n endsWith = \"\",\n } = options;\n const endsWithRe = `[${escapeString(endsWith)}]|$`;\n const delimiterRe = `[${escapeString(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 if (token.modifier === \"+\" || token.modifier === \"*\") {\n route += `((?:${token.pattern})${token.modifier})`;\n } else {\n route += `(${token.pattern})${token.modifier}`;\n }\n }\n } else {\n route += `(?:${prefix}${suffix})${token.modifier}`;\n }\n }\n }\n\n if (end) {\n if (!strict) route += `${delimiterRe}?`;\n\n route += !options.endsWith ? \"$\" : `(?=${endsWithRe})`;\n } else {\n const endToken = tokens[tokens.length - 1];\n const isEndDelimited =\n typeof endToken === \"string\"\n ? delimiterRe.indexOf(endToken[endToken.length - 1]) > -1\n : endToken === undefined;\n\n if (!strict) {\n route += `(?:${delimiterRe}(?=${endsWithRe}))?`;\n }\n\n if (!isEndDelimited) {\n route += `(?=${delimiterRe}|${endsWithRe})`;\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<string | RegExp>;\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"]}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["const DEFAULT_DELIMITER = \"/\";\nconst NOOP_VALUE = (value: string) => value;\nconst ID_CHAR = /^\\p{XID_Continue}$/u;\n\n/**\n * Encode a string into another string.\n */\nexport type Encode = (value: string) => string;\n\n/**\n * Decode a string into another string.\n */\nexport type Decode = (value: string) => string;\n\nexport interface ParseOptions {\n /**\n * Set the default delimiter for repeat parameters. (default: `'/'`)\n */\n delimiter?: string;\n /**\n * Function for encoding input strings for output into path.\n */\n encodePath?: Encode;\n}\n\nexport interface PathToRegexpOptions extends ParseOptions {\n /**\n * When `true` the regexp will be case sensitive. (default: `false`)\n */\n sensitive?: boolean;\n /**\n * Allow delimiter to be arbitrarily repeated. (default: `true`)\n */\n loose?: 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 * When `true` the regexp allows an optional trailing delimiter to match. (default: `true`)\n */\n trailing?: boolean;\n}\n\nexport interface MatchOptions extends PathToRegexpOptions {\n /**\n * Function for decoding strings for params, or `false` to disable entirely. (default: `decodeURIComponent`)\n */\n decode?: Decode | false;\n}\n\nexport interface CompileOptions extends ParseOptions {\n /**\n * When `true` the validation will be case sensitive. (default: `false`)\n */\n sensitive?: boolean;\n /**\n * Allow delimiter to be arbitrarily repeated. (default: `true`)\n */\n loose?: boolean;\n /**\n * When `false` the function can produce an invalid (unmatched) path. (default: `true`)\n */\n validate?: boolean;\n /**\n * Function for encoding input strings for output into the path, or `false` to disable entirely. (default: `encodeURIComponent`)\n */\n encode?: Encode | false;\n}\n\ntype TokenType =\n | \"{\"\n | \"}\"\n | \"*\"\n | \"+\"\n | \"?\"\n | \"NAME\"\n | \"PATTERN\"\n | \"CHAR\"\n | \"ESCAPED\"\n | \"END\"\n // Reserved for use.\n | \"!\"\n | \"@\"\n | \",\"\n | \";\";\n\n/**\n * Tokenizer results.\n */\ninterface LexToken {\n type: TokenType;\n index: number;\n value: string;\n}\n\nconst SIMPLE_TOKENS: Record<string, TokenType> = {\n \"!\": \"!\",\n \"@\": \"@\",\n \";\": \";\",\n \",\": \",\",\n \"*\": \"*\",\n \"+\": \"+\",\n \"?\": \"?\",\n \"{\": \"{\",\n \"}\": \"}\",\n};\n\n/**\n * Tokenize input string.\n */\nfunction lexer(str: string) {\n const chars = [...str];\n const tokens: LexToken[] = [];\n let i = 0;\n\n while (i < chars.length) {\n const value = chars[i];\n const type = SIMPLE_TOKENS[value];\n\n if (type) {\n tokens.push({ type, index: i++, value });\n continue;\n }\n\n if (value === \"\\\\\") {\n tokens.push({ type: \"ESCAPED\", index: i++, value: chars[i++] });\n continue;\n }\n\n if (value === \":\") {\n let name = \"\";\n\n while (ID_CHAR.test(chars[++i])) {\n name += chars[i];\n }\n\n if (!name) {\n throw new TypeError(`Missing parameter name at ${i}`);\n }\n\n tokens.push({ type: \"NAME\", index: i, value: name });\n continue;\n }\n\n if (value === \"(\") {\n const pos = i++;\n let count = 1;\n let pattern = \"\";\n\n if (chars[i] === \"?\") {\n throw new TypeError(`Pattern cannot start with \"?\" at ${i}`);\n }\n\n while (i < chars.length) {\n if (chars[i] === \"\\\\\") {\n pattern += chars[i++] + chars[i++];\n continue;\n }\n\n if (chars[i] === \")\") {\n count--;\n if (count === 0) {\n i++;\n break;\n }\n } else if (chars[i] === \"(\") {\n count++;\n if (chars[i + 1] !== \"?\") {\n throw new TypeError(`Capturing groups are not allowed at ${i}`);\n }\n }\n\n pattern += chars[i++];\n }\n\n if (count) throw new TypeError(`Unbalanced pattern at ${pos}`);\n if (!pattern) throw new TypeError(`Missing pattern at ${pos}`);\n\n tokens.push({ type: \"PATTERN\", index: i, value: pattern });\n continue;\n }\n\n tokens.push({ type: \"CHAR\", index: i, value: chars[i++] });\n }\n\n tokens.push({ type: \"END\", index: i, value: \"\" });\n\n return new Iter(tokens);\n}\n\nclass Iter {\n index = 0;\n\n constructor(private tokens: LexToken[]) {}\n\n peek(): LexToken {\n return this.tokens[this.index];\n }\n\n tryConsume(type: LexToken[\"type\"]): string | undefined {\n const token = this.peek();\n if (token.type !== type) return;\n this.index++;\n return token.value;\n }\n\n consume(type: LexToken[\"type\"]): string {\n const value = this.tryConsume(type);\n if (value !== undefined) return value;\n const { type: nextType, index } = this.peek();\n throw new TypeError(\n `Unexpected ${nextType} at ${index}, expected ${type}: https://git.new/pathToRegexpError`,\n );\n }\n\n text(): string {\n let result = \"\";\n let value: string | undefined;\n while ((value = this.tryConsume(\"CHAR\") || this.tryConsume(\"ESCAPED\"))) {\n result += value;\n }\n return result;\n }\n\n modifier(): string {\n return (\n this.tryConsume(\"?\") || this.tryConsume(\"*\") || this.tryConsume(\"+\") || \"\"\n );\n }\n}\n\n/**\n * Tokenized path instance. Can we passed around instead of string.\n */\nexport class TokenData {\n constructor(\n public readonly tokens: Token[],\n public readonly delimiter: string,\n ) {}\n}\n\n/**\n * Parse a string for the raw tokens.\n */\nexport function parse(str: string, options: ParseOptions = {}): TokenData {\n const { delimiter = DEFAULT_DELIMITER, encodePath = NOOP_VALUE } = options;\n const tokens: Token[] = [];\n const it = lexer(str);\n let key = 0;\n\n do {\n const path = it.text();\n if (path) tokens.push(encodePath(path));\n\n const name = it.tryConsume(\"NAME\");\n const pattern = it.tryConsume(\"PATTERN\");\n\n if (name || pattern) {\n tokens.push({\n name: name || String(key++),\n pattern,\n });\n\n const next = it.peek();\n if (next.type === \"*\") {\n throw new TypeError(\n `Unexpected * at ${next.index}, you probably want \\`/*\\` or \\`{/:foo}*\\`: https://git.new/pathToRegexpError`,\n );\n }\n\n continue;\n }\n\n const asterisk = it.tryConsume(\"*\");\n if (asterisk) {\n tokens.push({\n name: String(key++),\n pattern: `[^${escape(delimiter)}]*`,\n modifier: \"*\",\n separator: delimiter,\n });\n continue;\n }\n\n const open = it.tryConsume(\"{\");\n if (open) {\n const prefix = it.text();\n const name = it.tryConsume(\"NAME\");\n const pattern = it.tryConsume(\"PATTERN\");\n const suffix = it.text();\n const separator = it.tryConsume(\";\") ? it.text() : prefix + suffix;\n\n it.consume(\"}\");\n\n const modifier = it.modifier();\n\n tokens.push({\n name: name || (pattern ? String(key++) : \"\"),\n prefix: encodePath(prefix),\n suffix: encodePath(suffix),\n pattern,\n modifier,\n separator,\n });\n continue;\n }\n\n it.consume(\"END\");\n break;\n } while (true);\n\n return new TokenData(tokens, delimiter);\n}\n\n/**\n * Compile a string to a template function for the path.\n */\nexport function compile<P extends object = object>(\n path: Path,\n options: CompileOptions = {},\n) {\n const data = path instanceof TokenData ? path : parse(path, options);\n return compileTokens<P>(data, options);\n}\n\nexport type ParamData = Partial<Record<string, string | string[]>>;\nexport type PathFunction<P extends ParamData> = (data?: P) => string;\n\n/**\n * Convert a single token into a path building function.\n */\nfunction tokenToFunction(\n token: Token,\n encode: Encode | false,\n): (data: ParamData) => string {\n if (typeof token === \"string\") {\n return () => token;\n }\n\n const encodeValue = encode || NOOP_VALUE;\n const repeated = token.modifier === \"+\" || token.modifier === \"*\";\n const optional = token.modifier === \"?\" || token.modifier === \"*\";\n const { prefix = \"\", suffix = \"\", separator = \"\" } = token;\n\n if (encode && repeated) {\n const stringify = (value: string, index: number) => {\n if (typeof value !== \"string\") {\n throw new TypeError(`Expected \"${token.name}/${index}\" to be a string`);\n }\n return encodeValue(value);\n };\n\n const compile = (value: unknown) => {\n if (!Array.isArray(value)) {\n throw new TypeError(`Expected \"${token.name}\" to be an array`);\n }\n\n if (value.length === 0) return \"\";\n\n return prefix + value.map(stringify).join(separator) + suffix;\n };\n\n if (optional) {\n return (data): string => {\n const value = data[token.name];\n if (value == null) return \"\";\n return value.length ? compile(value) : \"\";\n };\n }\n\n return (data): string => {\n const value = data[token.name];\n return compile(value);\n };\n }\n\n const stringify = (value: unknown) => {\n if (typeof value !== \"string\") {\n throw new TypeError(`Expected \"${token.name}\" to be a string`);\n }\n return prefix + encodeValue(value) + suffix;\n };\n\n if (optional) {\n return (data): string => {\n const value = data[token.name];\n if (value == null) return \"\";\n return stringify(value);\n };\n }\n\n return (data): string => {\n const value = data[token.name];\n return stringify(value);\n };\n}\n\n/**\n * Transform tokens into a path building function.\n */\nfunction compileTokens<P extends ParamData>(\n data: TokenData,\n options: CompileOptions,\n): PathFunction<P> {\n const {\n encode = encodeURIComponent,\n loose = true,\n validate = true,\n } = options;\n const reFlags = flags(options);\n const stringify = toStringify(loose, data.delimiter);\n const keyToRegexp = toKeyRegexp(stringify, data.delimiter);\n\n // Compile all the tokens into regexps.\n const encoders: Array<(data: ParamData) => string> = data.tokens.map(\n (token) => {\n const fn = tokenToFunction(token, encode);\n if (!validate || typeof token === \"string\") return fn;\n\n const pattern = keyToRegexp(token);\n const validRe = new RegExp(`^${pattern}$`, reFlags);\n\n return (data) => {\n const value = fn(data);\n if (!validRe.test(value)) {\n throw new TypeError(\n `Invalid value for \"${token.name}\": ${JSON.stringify(value)}`,\n );\n }\n return value;\n };\n },\n );\n\n return function path(data: Record<string, any> = {}) {\n let path = \"\";\n for (const encoder of encoders) path += encoder(data);\n return path;\n };\n}\n\n/**\n * A match result contains data about the path match.\n */\nexport interface MatchResult<P extends ParamData> {\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<P extends ParamData> = false | MatchResult<P>;\n\n/**\n * The match function takes a string and returns whether it matched the path.\n */\nexport type MatchFunction<P extends ParamData> = (path: string) => Match<P>;\n\n/**\n * Create path match function from `path-to-regexp` spec.\n */\nexport function match<P extends ParamData>(\n path: Path,\n options: MatchOptions = {},\n): MatchFunction<P> {\n const { decode = decodeURIComponent, loose = true } = options;\n const data = path instanceof TokenData ? path : parse(path, options);\n const stringify = toStringify(loose, data.delimiter);\n const keys: Key[] = [];\n const re = tokensToRegexp(data, keys, options);\n\n const decoders = keys.map((key) => {\n if (decode && (key.modifier === \"+\" || key.modifier === \"*\")) {\n const re = new RegExp(stringify(key.separator || \"\"), \"g\");\n return (value: string) => value.split(re).map(decode);\n }\n\n return decode || NOOP_VALUE;\n });\n\n return function match(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 if (m[i] === undefined) continue;\n\n const key = keys[i - 1];\n const decoder = decoders[i - 1];\n params[key.name] = decoder(m[i]);\n }\n\n return { path, index, params };\n };\n}\n\n/**\n * Escape a regular expression string.\n */\nfunction escape(str: string) {\n return str.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, \"\\\\$1\");\n}\n\n/**\n * Escape and repeat loose characters for regular expressions.\n */\nfunction looseReplacer(value: string, loose: string) {\n return loose ? `${escape(value)}+` : escape(value);\n}\n\n/**\n * Encode all non-delimiter characters using the encode function.\n */\nfunction toStringify(loose: boolean, delimiter: string) {\n if (!loose) return escape;\n\n const re = new RegExp(`[^${escape(delimiter)}]+|(.)`, \"g\");\n return (value: string) => value.replace(re, looseReplacer);\n}\n\n/**\n * Get the flags for a regexp from the options.\n */\nfunction flags(options: { sensitive?: boolean }) {\n return options.sensitive ? \"\" : \"i\";\n}\n\n/**\n * A key is a capture group in the regex.\n */\nexport interface Key {\n name: string;\n prefix?: string;\n suffix?: string;\n pattern?: string;\n modifier?: string;\n separator?: 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 * Expose a function for taking tokens and returning a RegExp.\n */\nfunction tokensToRegexp(\n data: TokenData,\n keys: Key[],\n options: PathToRegexpOptions,\n): RegExp {\n const { trailing = true, start = true, end = true, loose = true } = options;\n const stringify = toStringify(loose, data.delimiter);\n const keyToRegexp = toKeyRegexp(stringify, data.delimiter);\n let pattern = start ? \"^\" : \"\";\n\n for (const token of data.tokens) {\n if (typeof token === \"string\") {\n pattern += stringify(token);\n } else {\n if (token.name) keys.push(token);\n pattern += keyToRegexp(token);\n }\n }\n\n if (trailing) pattern += `(?:${stringify(data.delimiter)})?`;\n pattern += end ? \"$\" : `(?=${escape(data.delimiter)}|$)`;\n\n return new RegExp(pattern, flags(options));\n}\n\n/**\n * Convert a token into a regexp string (re-used for path validation).\n */\nfunction toKeyRegexp(stringify: Encode, delimiter: string) {\n const segmentPattern = `[^${escape(delimiter)}]+?`;\n\n return (key: Key) => {\n const prefix = key.prefix ? stringify(key.prefix) : \"\";\n const suffix = key.suffix ? stringify(key.suffix) : \"\";\n const modifier = key.modifier || \"\";\n\n if (key.name) {\n const pattern = key.pattern || segmentPattern;\n if (key.modifier === \"+\" || key.modifier === \"*\") {\n const mod = key.modifier === \"*\" ? \"?\" : \"\";\n const split = key.separator ? stringify(key.separator) : \"\";\n return `(?:${prefix}((?:${pattern})(?:${split}(?:${pattern}))*)${suffix})${mod}`;\n }\n return `(?:${prefix}(${pattern})${suffix})${modifier}`;\n }\n\n return `(?:${prefix}${suffix})${modifier}`;\n };\n}\n\n/**\n * Repeated and simple input types.\n */\nexport type Path = string | TokenData;\n\nexport type PathRegExp = RegExp & { keys: Key[] };\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(path: Path, options: PathToRegexpOptions = {}) {\n const data = path instanceof TokenData ? path : parse(path, options);\n const keys: Key[] = [];\n const regexp = tokensToRegexp(data, keys, options);\n return Object.assign(regexp, { keys });\n}\n"]}
|
package/package.json
CHANGED
@@ -1,17 +1,24 @@
|
|
1
1
|
{
|
2
2
|
"name": "path-to-regexp",
|
3
|
-
"version": "
|
4
|
-
"publishConfig": {
|
5
|
-
"access": "public"
|
6
|
-
},
|
3
|
+
"version": "7.0.0",
|
7
4
|
"description": "Express style path to RegExp utility",
|
8
|
-
"
|
5
|
+
"keywords": [
|
6
|
+
"express",
|
7
|
+
"regexp",
|
8
|
+
"route",
|
9
|
+
"routing"
|
10
|
+
],
|
9
11
|
"repository": {
|
10
12
|
"type": "git",
|
11
13
|
"url": "https://github.com/pillarjs/path-to-regexp.git"
|
12
14
|
},
|
15
|
+
"license": "MIT",
|
16
|
+
"exports": "./dist/index.js",
|
13
17
|
"main": "dist/index.js",
|
14
|
-
"
|
18
|
+
"typings": "dist/index.d.ts",
|
19
|
+
"files": [
|
20
|
+
"dist/"
|
21
|
+
],
|
15
22
|
"scripts": {
|
16
23
|
"build": "ts-scripts build",
|
17
24
|
"format": "ts-scripts format",
|
@@ -21,42 +28,33 @@
|
|
21
28
|
"specs": "ts-scripts specs",
|
22
29
|
"test": "ts-scripts test && npm run size"
|
23
30
|
},
|
24
|
-
"files": [
|
25
|
-
"dist.es2015/",
|
26
|
-
"dist/"
|
27
|
-
],
|
28
|
-
"keywords": [
|
29
|
-
"express",
|
30
|
-
"regexp",
|
31
|
-
"route",
|
32
|
-
"routing"
|
33
|
-
],
|
34
31
|
"devDependencies": {
|
35
|
-
"@borderless/ts-scripts": "^0.
|
36
|
-
"@size-limit/preset-small-lib": "^
|
37
|
-
"@types/
|
38
|
-
"@types/node": "^17.0.17",
|
32
|
+
"@borderless/ts-scripts": "^0.15.0",
|
33
|
+
"@size-limit/preset-small-lib": "^11.1.2",
|
34
|
+
"@types/node": "^20.4.9",
|
39
35
|
"@types/semver": "^7.3.1",
|
40
|
-
"
|
41
|
-
"size-limit": "^
|
42
|
-
"typescript": "^
|
36
|
+
"@vitest/coverage-v8": "^1.4.0",
|
37
|
+
"size-limit": "^11.1.2",
|
38
|
+
"typescript": "^5.1.6"
|
39
|
+
},
|
40
|
+
"engines": {
|
41
|
+
"node": ">=16"
|
42
|
+
},
|
43
|
+
"publishConfig": {
|
44
|
+
"access": "public"
|
43
45
|
},
|
44
|
-
"typings": "dist/index.d.ts",
|
45
|
-
"sideEffects": false,
|
46
46
|
"size-limit": [
|
47
47
|
{
|
48
|
-
"path": "dist
|
49
|
-
"limit": "2.
|
48
|
+
"path": "dist/index.js",
|
49
|
+
"limit": "2.2 kB"
|
50
50
|
}
|
51
51
|
],
|
52
52
|
"ts-scripts": {
|
53
53
|
"dist": [
|
54
|
-
"dist"
|
55
|
-
"dist.es2015"
|
54
|
+
"dist"
|
56
55
|
],
|
57
56
|
"project": [
|
58
|
-
"tsconfig.build.json"
|
59
|
-
"tsconfig.es2015.json"
|
57
|
+
"tsconfig.build.json"
|
60
58
|
]
|
61
59
|
}
|
62
60
|
}
|
package/dist.es2015/index.js
DELETED
@@ -1,400 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* Tokenize input string.
|
3
|
-
*/
|
4
|
-
function lexer(str) {
|
5
|
-
var tokens = [];
|
6
|
-
var i = 0;
|
7
|
-
while (i < str.length) {
|
8
|
-
var char = str[i];
|
9
|
-
if (char === "*" || char === "+" || char === "?") {
|
10
|
-
tokens.push({ type: "MODIFIER", index: i, value: str[i++] });
|
11
|
-
continue;
|
12
|
-
}
|
13
|
-
if (char === "\\") {
|
14
|
-
tokens.push({ type: "ESCAPED_CHAR", index: i++, value: str[i++] });
|
15
|
-
continue;
|
16
|
-
}
|
17
|
-
if (char === "{") {
|
18
|
-
tokens.push({ type: "OPEN", index: i, value: str[i++] });
|
19
|
-
continue;
|
20
|
-
}
|
21
|
-
if (char === "}") {
|
22
|
-
tokens.push({ type: "CLOSE", index: i, value: str[i++] });
|
23
|
-
continue;
|
24
|
-
}
|
25
|
-
if (char === ":") {
|
26
|
-
var name = "";
|
27
|
-
var j = i + 1;
|
28
|
-
while (j < str.length) {
|
29
|
-
var code = str.charCodeAt(j);
|
30
|
-
if (
|
31
|
-
// `0-9`
|
32
|
-
(code >= 48 && code <= 57) ||
|
33
|
-
// `A-Z`
|
34
|
-
(code >= 65 && code <= 90) ||
|
35
|
-
// `a-z`
|
36
|
-
(code >= 97 && code <= 122) ||
|
37
|
-
// `_`
|
38
|
-
code === 95) {
|
39
|
-
name += str[j++];
|
40
|
-
continue;
|
41
|
-
}
|
42
|
-
break;
|
43
|
-
}
|
44
|
-
if (!name)
|
45
|
-
throw new TypeError("Missing parameter name at ".concat(i));
|
46
|
-
tokens.push({ type: "NAME", index: i, value: name });
|
47
|
-
i = j;
|
48
|
-
continue;
|
49
|
-
}
|
50
|
-
if (char === "(") {
|
51
|
-
var count = 1;
|
52
|
-
var pattern = "";
|
53
|
-
var j = i + 1;
|
54
|
-
if (str[j] === "?") {
|
55
|
-
throw new TypeError("Pattern cannot start with \"?\" at ".concat(j));
|
56
|
-
}
|
57
|
-
while (j < str.length) {
|
58
|
-
if (str[j] === "\\") {
|
59
|
-
pattern += str[j++] + str[j++];
|
60
|
-
continue;
|
61
|
-
}
|
62
|
-
if (str[j] === ")") {
|
63
|
-
count--;
|
64
|
-
if (count === 0) {
|
65
|
-
j++;
|
66
|
-
break;
|
67
|
-
}
|
68
|
-
}
|
69
|
-
else if (str[j] === "(") {
|
70
|
-
count++;
|
71
|
-
if (str[j + 1] !== "?") {
|
72
|
-
throw new TypeError("Capturing groups are not allowed at ".concat(j));
|
73
|
-
}
|
74
|
-
}
|
75
|
-
pattern += str[j++];
|
76
|
-
}
|
77
|
-
if (count)
|
78
|
-
throw new TypeError("Unbalanced pattern at ".concat(i));
|
79
|
-
if (!pattern)
|
80
|
-
throw new TypeError("Missing pattern at ".concat(i));
|
81
|
-
tokens.push({ type: "PATTERN", index: i, value: pattern });
|
82
|
-
i = j;
|
83
|
-
continue;
|
84
|
-
}
|
85
|
-
tokens.push({ type: "CHAR", index: i, value: str[i++] });
|
86
|
-
}
|
87
|
-
tokens.push({ type: "END", index: i, value: "" });
|
88
|
-
return tokens;
|
89
|
-
}
|
90
|
-
/**
|
91
|
-
* Parse a string for the raw tokens.
|
92
|
-
*/
|
93
|
-
export function parse(str, options) {
|
94
|
-
if (options === void 0) { options = {}; }
|
95
|
-
var tokens = lexer(str);
|
96
|
-
var _a = options.prefixes, prefixes = _a === void 0 ? "./" : _a;
|
97
|
-
var defaultPattern = "[^".concat(escapeString(options.delimiter || "/#?"), "]+?");
|
98
|
-
var result = [];
|
99
|
-
var key = 0;
|
100
|
-
var i = 0;
|
101
|
-
var path = "";
|
102
|
-
var tryConsume = function (type) {
|
103
|
-
if (i < tokens.length && tokens[i].type === type)
|
104
|
-
return tokens[i++].value;
|
105
|
-
};
|
106
|
-
var mustConsume = function (type) {
|
107
|
-
var value = tryConsume(type);
|
108
|
-
if (value !== undefined)
|
109
|
-
return value;
|
110
|
-
var _a = tokens[i], nextType = _a.type, index = _a.index;
|
111
|
-
throw new TypeError("Unexpected ".concat(nextType, " at ").concat(index, ", expected ").concat(type));
|
112
|
-
};
|
113
|
-
var consumeText = function () {
|
114
|
-
var result = "";
|
115
|
-
var value;
|
116
|
-
while ((value = tryConsume("CHAR") || tryConsume("ESCAPED_CHAR"))) {
|
117
|
-
result += value;
|
118
|
-
}
|
119
|
-
return result;
|
120
|
-
};
|
121
|
-
while (i < tokens.length) {
|
122
|
-
var char = tryConsume("CHAR");
|
123
|
-
var name = tryConsume("NAME");
|
124
|
-
var pattern = tryConsume("PATTERN");
|
125
|
-
if (name || pattern) {
|
126
|
-
var prefix = char || "";
|
127
|
-
if (prefixes.indexOf(prefix) === -1) {
|
128
|
-
path += prefix;
|
129
|
-
prefix = "";
|
130
|
-
}
|
131
|
-
if (path) {
|
132
|
-
result.push(path);
|
133
|
-
path = "";
|
134
|
-
}
|
135
|
-
result.push({
|
136
|
-
name: name || key++,
|
137
|
-
prefix: prefix,
|
138
|
-
suffix: "",
|
139
|
-
pattern: pattern || defaultPattern,
|
140
|
-
modifier: tryConsume("MODIFIER") || "",
|
141
|
-
});
|
142
|
-
continue;
|
143
|
-
}
|
144
|
-
var value = char || tryConsume("ESCAPED_CHAR");
|
145
|
-
if (value) {
|
146
|
-
path += value;
|
147
|
-
continue;
|
148
|
-
}
|
149
|
-
if (path) {
|
150
|
-
result.push(path);
|
151
|
-
path = "";
|
152
|
-
}
|
153
|
-
var open = tryConsume("OPEN");
|
154
|
-
if (open) {
|
155
|
-
var prefix = consumeText();
|
156
|
-
var name_1 = tryConsume("NAME") || "";
|
157
|
-
var pattern_1 = tryConsume("PATTERN") || "";
|
158
|
-
var suffix = consumeText();
|
159
|
-
mustConsume("CLOSE");
|
160
|
-
result.push({
|
161
|
-
name: name_1 || (pattern_1 ? key++ : ""),
|
162
|
-
pattern: name_1 && !pattern_1 ? defaultPattern : pattern_1,
|
163
|
-
prefix: prefix,
|
164
|
-
suffix: suffix,
|
165
|
-
modifier: tryConsume("MODIFIER") || "",
|
166
|
-
});
|
167
|
-
continue;
|
168
|
-
}
|
169
|
-
mustConsume("END");
|
170
|
-
}
|
171
|
-
return result;
|
172
|
-
}
|
173
|
-
/**
|
174
|
-
* Compile a string to a template function for the path.
|
175
|
-
*/
|
176
|
-
export function compile(str, options) {
|
177
|
-
return tokensToFunction(parse(str, options), options);
|
178
|
-
}
|
179
|
-
/**
|
180
|
-
* Expose a method for transforming tokens into the path function.
|
181
|
-
*/
|
182
|
-
export function tokensToFunction(tokens, options) {
|
183
|
-
if (options === void 0) { options = {}; }
|
184
|
-
var reFlags = flags(options);
|
185
|
-
var _a = options.encode, encode = _a === void 0 ? function (x) { return x; } : _a, _b = options.validate, validate = _b === void 0 ? true : _b;
|
186
|
-
// Compile all the tokens into regexps.
|
187
|
-
var matches = tokens.map(function (token) {
|
188
|
-
if (typeof token === "object") {
|
189
|
-
return new RegExp("^(?:".concat(token.pattern, ")$"), reFlags);
|
190
|
-
}
|
191
|
-
});
|
192
|
-
return function (data) {
|
193
|
-
var path = "";
|
194
|
-
for (var i = 0; i < tokens.length; i++) {
|
195
|
-
var token = tokens[i];
|
196
|
-
if (typeof token === "string") {
|
197
|
-
path += token;
|
198
|
-
continue;
|
199
|
-
}
|
200
|
-
var value = data ? data[token.name] : undefined;
|
201
|
-
var optional = token.modifier === "?" || token.modifier === "*";
|
202
|
-
var repeat = token.modifier === "*" || token.modifier === "+";
|
203
|
-
if (Array.isArray(value)) {
|
204
|
-
if (!repeat) {
|
205
|
-
throw new TypeError("Expected \"".concat(token.name, "\" to not repeat, but got an array"));
|
206
|
-
}
|
207
|
-
if (value.length === 0) {
|
208
|
-
if (optional)
|
209
|
-
continue;
|
210
|
-
throw new TypeError("Expected \"".concat(token.name, "\" to not be empty"));
|
211
|
-
}
|
212
|
-
for (var j = 0; j < value.length; j++) {
|
213
|
-
var segment = encode(value[j], token);
|
214
|
-
if (validate && !matches[i].test(segment)) {
|
215
|
-
throw new TypeError("Expected all \"".concat(token.name, "\" to match \"").concat(token.pattern, "\", but got \"").concat(segment, "\""));
|
216
|
-
}
|
217
|
-
path += token.prefix + segment + token.suffix;
|
218
|
-
}
|
219
|
-
continue;
|
220
|
-
}
|
221
|
-
if (typeof value === "string" || typeof value === "number") {
|
222
|
-
var segment = encode(String(value), token);
|
223
|
-
if (validate && !matches[i].test(segment)) {
|
224
|
-
throw new TypeError("Expected \"".concat(token.name, "\" to match \"").concat(token.pattern, "\", but got \"").concat(segment, "\""));
|
225
|
-
}
|
226
|
-
path += token.prefix + segment + token.suffix;
|
227
|
-
continue;
|
228
|
-
}
|
229
|
-
if (optional)
|
230
|
-
continue;
|
231
|
-
var typeOfMessage = repeat ? "an array" : "a string";
|
232
|
-
throw new TypeError("Expected \"".concat(token.name, "\" to be ").concat(typeOfMessage));
|
233
|
-
}
|
234
|
-
return path;
|
235
|
-
};
|
236
|
-
}
|
237
|
-
/**
|
238
|
-
* Create path match function from `path-to-regexp` spec.
|
239
|
-
*/
|
240
|
-
export function match(str, options) {
|
241
|
-
var keys = [];
|
242
|
-
var re = pathToRegexp(str, keys, options);
|
243
|
-
return regexpToFunction(re, keys, options);
|
244
|
-
}
|
245
|
-
/**
|
246
|
-
* Create a path match function from `path-to-regexp` output.
|
247
|
-
*/
|
248
|
-
export function regexpToFunction(re, keys, options) {
|
249
|
-
if (options === void 0) { options = {}; }
|
250
|
-
var _a = options.decode, decode = _a === void 0 ? function (x) { return x; } : _a;
|
251
|
-
return function (pathname) {
|
252
|
-
var m = re.exec(pathname);
|
253
|
-
if (!m)
|
254
|
-
return false;
|
255
|
-
var path = m[0], index = m.index;
|
256
|
-
var params = Object.create(null);
|
257
|
-
var _loop_1 = function (i) {
|
258
|
-
if (m[i] === undefined)
|
259
|
-
return "continue";
|
260
|
-
var key = keys[i - 1];
|
261
|
-
if (key.modifier === "*" || key.modifier === "+") {
|
262
|
-
params[key.name] = m[i].split(key.prefix + key.suffix).map(function (value) {
|
263
|
-
return decode(value, key);
|
264
|
-
});
|
265
|
-
}
|
266
|
-
else {
|
267
|
-
params[key.name] = decode(m[i], key);
|
268
|
-
}
|
269
|
-
};
|
270
|
-
for (var i = 1; i < m.length; i++) {
|
271
|
-
_loop_1(i);
|
272
|
-
}
|
273
|
-
return { path: path, index: index, params: params };
|
274
|
-
};
|
275
|
-
}
|
276
|
-
/**
|
277
|
-
* Escape a regular expression string.
|
278
|
-
*/
|
279
|
-
function escapeString(str) {
|
280
|
-
return str.replace(/([.+*?=^!:${}()[\]|/\\])/g, "\\$1");
|
281
|
-
}
|
282
|
-
/**
|
283
|
-
* Get the flags for a regexp from the options.
|
284
|
-
*/
|
285
|
-
function flags(options) {
|
286
|
-
return options && options.sensitive ? "" : "i";
|
287
|
-
}
|
288
|
-
/**
|
289
|
-
* Pull out keys from a regexp.
|
290
|
-
*/
|
291
|
-
function regexpToRegexp(path, keys) {
|
292
|
-
if (!keys)
|
293
|
-
return path;
|
294
|
-
var groupsRegex = /\((?:\?<(.*?)>)?(?!\?)/g;
|
295
|
-
var index = 0;
|
296
|
-
var execResult = groupsRegex.exec(path.source);
|
297
|
-
while (execResult) {
|
298
|
-
keys.push({
|
299
|
-
// Use parenthesized substring match if available, index otherwise
|
300
|
-
name: execResult[1] || index++,
|
301
|
-
prefix: "",
|
302
|
-
suffix: "",
|
303
|
-
modifier: "",
|
304
|
-
pattern: "",
|
305
|
-
});
|
306
|
-
execResult = groupsRegex.exec(path.source);
|
307
|
-
}
|
308
|
-
return path;
|
309
|
-
}
|
310
|
-
/**
|
311
|
-
* Transform an array into a regexp.
|
312
|
-
*/
|
313
|
-
function arrayToRegexp(paths, keys, options) {
|
314
|
-
var parts = paths.map(function (path) { return pathToRegexp(path, keys, options).source; });
|
315
|
-
return new RegExp("(?:".concat(parts.join("|"), ")"), flags(options));
|
316
|
-
}
|
317
|
-
/**
|
318
|
-
* Create a path regexp from string input.
|
319
|
-
*/
|
320
|
-
function stringToRegexp(path, keys, options) {
|
321
|
-
return tokensToRegexp(parse(path, options), keys, options);
|
322
|
-
}
|
323
|
-
/**
|
324
|
-
* Expose a function for taking tokens and returning a RegExp.
|
325
|
-
*/
|
326
|
-
export function tokensToRegexp(tokens, keys, options) {
|
327
|
-
if (options === void 0) { options = {}; }
|
328
|
-
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, _e = options.delimiter, delimiter = _e === void 0 ? "/#?" : _e, _f = options.endsWith, endsWith = _f === void 0 ? "" : _f;
|
329
|
-
var endsWithRe = "[".concat(escapeString(endsWith), "]|$");
|
330
|
-
var delimiterRe = "[".concat(escapeString(delimiter), "]");
|
331
|
-
var route = start ? "^" : "";
|
332
|
-
// Iterate over the tokens and create our regexp string.
|
333
|
-
for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {
|
334
|
-
var token = tokens_1[_i];
|
335
|
-
if (typeof token === "string") {
|
336
|
-
route += escapeString(encode(token));
|
337
|
-
}
|
338
|
-
else {
|
339
|
-
var prefix = escapeString(encode(token.prefix));
|
340
|
-
var suffix = escapeString(encode(token.suffix));
|
341
|
-
if (token.pattern) {
|
342
|
-
if (keys)
|
343
|
-
keys.push(token);
|
344
|
-
if (prefix || suffix) {
|
345
|
-
if (token.modifier === "+" || token.modifier === "*") {
|
346
|
-
var mod = token.modifier === "*" ? "?" : "";
|
347
|
-
route += "(?:".concat(prefix, "((?:").concat(token.pattern, ")(?:").concat(suffix).concat(prefix, "(?:").concat(token.pattern, "))*)").concat(suffix, ")").concat(mod);
|
348
|
-
}
|
349
|
-
else {
|
350
|
-
route += "(?:".concat(prefix, "(").concat(token.pattern, ")").concat(suffix, ")").concat(token.modifier);
|
351
|
-
}
|
352
|
-
}
|
353
|
-
else {
|
354
|
-
if (token.modifier === "+" || token.modifier === "*") {
|
355
|
-
route += "((?:".concat(token.pattern, ")").concat(token.modifier, ")");
|
356
|
-
}
|
357
|
-
else {
|
358
|
-
route += "(".concat(token.pattern, ")").concat(token.modifier);
|
359
|
-
}
|
360
|
-
}
|
361
|
-
}
|
362
|
-
else {
|
363
|
-
route += "(?:".concat(prefix).concat(suffix, ")").concat(token.modifier);
|
364
|
-
}
|
365
|
-
}
|
366
|
-
}
|
367
|
-
if (end) {
|
368
|
-
if (!strict)
|
369
|
-
route += "".concat(delimiterRe, "?");
|
370
|
-
route += !options.endsWith ? "$" : "(?=".concat(endsWithRe, ")");
|
371
|
-
}
|
372
|
-
else {
|
373
|
-
var endToken = tokens[tokens.length - 1];
|
374
|
-
var isEndDelimited = typeof endToken === "string"
|
375
|
-
? delimiterRe.indexOf(endToken[endToken.length - 1]) > -1
|
376
|
-
: endToken === undefined;
|
377
|
-
if (!strict) {
|
378
|
-
route += "(?:".concat(delimiterRe, "(?=").concat(endsWithRe, "))?");
|
379
|
-
}
|
380
|
-
if (!isEndDelimited) {
|
381
|
-
route += "(?=".concat(delimiterRe, "|").concat(endsWithRe, ")");
|
382
|
-
}
|
383
|
-
}
|
384
|
-
return new RegExp(route, flags(options));
|
385
|
-
}
|
386
|
-
/**
|
387
|
-
* Normalize the given path string, returning a regular expression.
|
388
|
-
*
|
389
|
-
* An empty array can be passed in for the keys, which will hold the
|
390
|
-
* placeholder key descriptions. For example, using `/user/:id`, `keys` will
|
391
|
-
* contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.
|
392
|
-
*/
|
393
|
-
export function pathToRegexp(path, keys, options) {
|
394
|
-
if (path instanceof RegExp)
|
395
|
-
return regexpToRegexp(path, keys);
|
396
|
-
if (Array.isArray(path))
|
397
|
-
return arrayToRegexp(path, keys, options);
|
398
|
-
return stringToRegexp(path, keys, options);
|
399
|
-
}
|
400
|
-
//# sourceMappingURL=index.js.map
|