Skip to content

Commit 5bcd30b

Browse files
authored
Allow backtrack handling to match itself (#427)
1 parent 9f9c6c5 commit 5bcd30b

File tree

2 files changed

+29
-13
lines changed

2 files changed

+29
-13
lines changed

src/cases.spec.ts

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1664,7 +1664,7 @@ export const MATCH_TESTS: MatchTestSet[] = [
16641664
input: "/123abcabc",
16651665
expected: {
16661666
path: "/123abcabc",
1667-
params: { foo: "123abcabc" },
1667+
params: { foo: "123", bar: "abc" },
16681668
},
16691669
},
16701670
],
@@ -1689,7 +1689,10 @@ export const MATCH_TESTS: MatchTestSet[] = [
16891689
},
16901690
{
16911691
input: "/123abcabc",
1692-
expected: false,
1692+
expected: {
1693+
path: "/123abcabc",
1694+
params: { foo: "123", bar: "abc" },
1695+
},
16931696
},
16941697
],
16951698
},
@@ -2170,6 +2173,18 @@ export const MATCH_TESTS: MatchTestSet[] = [
21702173
},
21712174
],
21722175
},
2176+
{
2177+
path: "/:a-:b^*c@*d%:e",
2178+
tests: [
2179+
{
2180+
input: "/a-b^c@d%e",
2181+
expected: {
2182+
path: "/a-b^c@d%e",
2183+
params: { a: "a", b: "b", c: ["c"], d: ["d"], e: "e" },
2184+
},
2185+
},
2186+
],
2187+
},
21732188

21742189
/**
21752190
* Multi character delimiters.

src/index.ts

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -614,11 +614,14 @@ function toRegExpSource(
614614

615615
if (token.type === "param") {
616616
result.push({
617-
source: hasSegmentCapture // Seen param/wildcard in segment.
618-
? `(${negate(delimiter, backtrack)}+?)`
619-
: hasInSegment(index, "wildcard") // See wildcard later in segment.
620-
? `(${negate(delimiter, peekText(index))}+?)`
621-
: `(${negate(delimiter, "")}+?)`,
617+
source:
618+
hasSegmentCapture & 2 // Seen wildcard in segment.
619+
? `(${negate(delimiter, backtrack)}+)`
620+
: hasInSegment(index, "wildcard") // See wildcard later in segment.
621+
? `(${negate(delimiter, peekText(index))}+)`
622+
: hasSegmentCapture & 1 // Seen parameter in segment.
623+
? `(${negate(delimiter, backtrack)}+|${escape(backtrack)})`
624+
: `(${negate(delimiter, "")}+?)`,
622625
key: token,
623626
});
624627

@@ -627,12 +630,10 @@ function toRegExpSource(
627630
result.push({
628631
source:
629632
hasSegmentCapture & 2 // Seen wildcard in segment.
630-
? `(${negate(backtrack, "")}+?)`
631-
: hasSegmentCapture & 1 // Seen param in segment.
632-
? `(${negate(wildcardBacktrack, "")}+?)`
633-
: wildcardBacktrack // No capture in segment, seen wildcard in path.
634-
? `(${negate(wildcardBacktrack, "")}+?|${negate(delimiter, "")}+?)`
635-
: `([^]+?)`,
633+
? `(${negate(backtrack, "")}+)`
634+
: wildcardBacktrack // No capture in segment, seen wildcard in path.
635+
? `(${negate(wildcardBacktrack, "")}+|${negate(delimiter, "")}+)`
636+
: `([^]+?)`,
636637
key: token,
637638
});
638639

0 commit comments

Comments
 (0)