path-to-regexp
Advanced tools
Comparing version
@@ -96,4 +96,3 @@ /** | ||
var tokens = lexer(str); | ||
var _a = options.prefixes, prefixes = _a === void 0 ? "./" : _a; | ||
var defaultPattern = "[^".concat(escapeString(options.delimiter || "/#?"), "]+?"); | ||
var _a = options.prefixes, prefixes = _a === void 0 ? "./" : _a, _b = options.delimiter, delimiter = _b === void 0 ? "/#?" : _b; | ||
var result = []; | ||
@@ -122,2 +121,20 @@ var key = 0; | ||
}; | ||
var isSafe = function (value) { | ||
for (var _i = 0, delimiter_1 = delimiter; _i < delimiter_1.length; _i++) { | ||
var char = delimiter_1[_i]; | ||
if (value.indexOf(char) > -1) | ||
return true; | ||
} | ||
return false; | ||
}; | ||
var safePattern = function (prefix) { | ||
var prev = result[result.length - 1]; | ||
var prevText = prefix || (prev && typeof prev === "string" ? prev : ""); | ||
if (prev && !prevText) { | ||
throw new TypeError("Must have text between two parameters, missing text after \"".concat(prev.name, "\"")); | ||
} | ||
if (!prevText || isSafe(prevText)) | ||
return "[^".concat(escapeString(delimiter), "]+?"); | ||
return "(?:(?!".concat(escapeString(prevText), ")[^").concat(escapeString(delimiter), "])+?"); | ||
}; | ||
while (i < tokens.length) { | ||
@@ -141,3 +158,3 @@ var char = tryConsume("CHAR"); | ||
suffix: "", | ||
pattern: pattern || defaultPattern, | ||
pattern: pattern || safePattern(prefix), | ||
modifier: tryConsume("MODIFIER") || "", | ||
@@ -165,3 +182,3 @@ }); | ||
name: name_1 || (pattern_1 ? key++ : ""), | ||
pattern: name_1 && !pattern_1 ? defaultPattern : pattern_1, | ||
pattern: name_1 && !pattern_1 ? safePattern(prefix) : pattern_1, | ||
prefix: prefix, | ||
@@ -359,7 +376,5 @@ suffix: suffix, | ||
if (token.modifier === "+" || token.modifier === "*") { | ||
route += "((?:".concat(token.pattern, ")").concat(token.modifier, ")"); | ||
throw new TypeError("Can not repeat \"".concat(token.name, "\" without a prefix and suffix")); | ||
} | ||
else { | ||
route += "(".concat(token.pattern, ")").concat(token.modifier); | ||
} | ||
route += "(".concat(token.pattern, ")").concat(token.modifier); | ||
} | ||
@@ -366,0 +381,0 @@ } |
@@ -99,4 +99,3 @@ "use strict"; | ||
var tokens = lexer(str); | ||
var _a = options.prefixes, prefixes = _a === void 0 ? "./" : _a; | ||
var defaultPattern = "[^".concat(escapeString(options.delimiter || "/#?"), "]+?"); | ||
var _a = options.prefixes, prefixes = _a === void 0 ? "./" : _a, _b = options.delimiter, delimiter = _b === void 0 ? "/#?" : _b; | ||
var result = []; | ||
@@ -125,2 +124,20 @@ var key = 0; | ||
}; | ||
var isSafe = function (value) { | ||
for (var _i = 0, delimiter_1 = delimiter; _i < delimiter_1.length; _i++) { | ||
var char = delimiter_1[_i]; | ||
if (value.indexOf(char) > -1) | ||
return true; | ||
} | ||
return false; | ||
}; | ||
var safePattern = function (prefix) { | ||
var prev = result[result.length - 1]; | ||
var prevText = prefix || (prev && typeof prev === "string" ? prev : ""); | ||
if (prev && !prevText) { | ||
throw new TypeError("Must have text between two parameters, missing text after \"".concat(prev.name, "\"")); | ||
} | ||
if (!prevText || isSafe(prevText)) | ||
return "[^".concat(escapeString(delimiter), "]+?"); | ||
return "(?:(?!".concat(escapeString(prevText), ")[^").concat(escapeString(delimiter), "])+?"); | ||
}; | ||
while (i < tokens.length) { | ||
@@ -144,3 +161,3 @@ var char = tryConsume("CHAR"); | ||
suffix: "", | ||
pattern: pattern || defaultPattern, | ||
pattern: pattern || safePattern(prefix), | ||
modifier: tryConsume("MODIFIER") || "", | ||
@@ -168,3 +185,3 @@ }); | ||
name: name_1 || (pattern_1 ? key++ : ""), | ||
pattern: name_1 && !pattern_1 ? defaultPattern : pattern_1, | ||
pattern: name_1 && !pattern_1 ? safePattern(prefix) : pattern_1, | ||
prefix: prefix, | ||
@@ -367,7 +384,5 @@ suffix: suffix, | ||
if (token.modifier === "+" || token.modifier === "*") { | ||
route += "((?:".concat(token.pattern, ")").concat(token.modifier, ")"); | ||
throw new TypeError("Can not repeat \"".concat(token.name, "\" without a prefix and suffix")); | ||
} | ||
else { | ||
route += "(".concat(token.pattern, ")").concat(token.modifier); | ||
} | ||
route += "(".concat(token.pattern, ")").concat(token.modifier); | ||
} | ||
@@ -374,0 +389,0 @@ } |
{ | ||
"name": "path-to-regexp", | ||
"version": "6.2.2", | ||
"version": "6.3.0", | ||
"description": "Express style path to RegExp utility", | ||
@@ -39,2 +39,3 @@ "keywords": [ | ||
"@vitest/coverage-v8": "^1.4.0", | ||
"recheck": "^4.4.5", | ||
"semver": "^7.3.5", | ||
@@ -50,3 +51,3 @@ "size-limit": "^11.1.2", | ||
"path": "dist.es2015/index.js", | ||
"limit": "2 kB" | ||
"limit": "2.1 kB" | ||
} | ||
@@ -53,0 +54,0 @@ ], |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
112042
4.02%967
3.2%9
12.5%