Skip to content

Commit 3a179b8

Browse files
Merge pull request #832 from preactjs/iso-rest-match
Add support for partial route matching via `/foo/*`
2 parents a2dae64 + 8ee76e9 commit 3a179b8

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

router.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ export const exec = (url, route, matches) => {
4242
val = url[i];
4343
// segment match:
4444
if (!m && param == val) continue;
45+
// /foo/* match
46+
if (!m && val && flag == '*') break;
4547
// segment mismatch / missing required field:
4648
if (!m || (!val && flag != '?' && flag != '*')) return;
4749
rest = flag == '+' || flag == '*';

test/match.test.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,25 @@ describe('match', () => {
2121
expect(inaccurateResult).toEqual(undefined);
2222
});
2323

24+
it('Param rest segment', () => {
25+
const accurateResult = execPath('/user/foo', '/user/*');
26+
expect(accurateResult).toEqual({ path: '/user/foo', params: {}, query: {} });
27+
28+
const inaccurateResult = execPath('/', '/user/:id/*');
29+
expect(inaccurateResult).toEqual(undefined);
30+
});
31+
32+
it('Param route with rest segment', () => {
33+
const accurateResult = execPath('/user/2/foo', '/user/:id/*');
34+
expect(accurateResult).toEqual({ path: '/user/2/foo', params: { id: '2' }, id: '2', query: {} });
35+
36+
const accurateResult2 = execPath('/user/2/foo/bar/bob', '/user/:id/*');
37+
expect(accurateResult2).toEqual({ path: '/user/2/foo/bar/bob', params: { id: '2' }, id: '2', query: {} });
38+
39+
const inaccurateResult = execPath('/', '/user/:id/*');
40+
expect(inaccurateResult).toEqual(undefined);
41+
});
42+
2443
it('Optional param route', () => {
2544
const accurateResult = execPath('/user', '/user/:id?');
2645
expect(accurateResult).toEqual({ path: '/user', params: { id: undefined }, id: undefined, query: {} });

0 commit comments

Comments
 (0)