Skip to content

Commit 26095b1

Browse files
Add support for partial route matching via /foo/*
1 parent a2dae64 commit 26095b1

File tree

2 files changed

+18
-0
lines changed

2 files changed

+18
-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 (val && flag == '*') continue;
4547
// segment mismatch / missing required field:
4648
if (!m || (!val && flag != '?' && flag != '*')) return;
4749
rest = flag == '+' || flag == '*';

test/match.test.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,22 @@ 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 inaccurateResult = execPath('/', '/user/:id/*');
37+
expect(inaccurateResult).toEqual(undefined);
38+
});
39+
2440
it('Optional param route', () => {
2541
const accurateResult = execPath('/user', '/user/:id?');
2642
expect(accurateResult).toEqual({ path: '/user', params: { id: undefined }, id: undefined, query: {} });

0 commit comments

Comments
 (0)