Skip to content

Commit 37165bd

Browse files
committed
feat: improve matching by sorting routes by path length
Issue router/router5#8
1 parent 53a5bcc commit 37165bd

5 files changed

Lines changed: 15 additions & 4 deletions

File tree

dist/amd/route-node.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ define(['exports', 'module', 'path-parser'], function (exports, module, _pathPar
7171
if (!b.parser.hasSpatParam && a.parser.hasSpatParam) return 1;
7272
if (!a.parser.hasUrlParams && b.parser.hasUrlParams) return -1;
7373
if (!b.parser.hasUrlParams && a.parser.hasUrlParams) return 1;
74-
return 0;
74+
return a.path.length < b.path.length;
7575
});
7676
} else {
7777
// Locate parent node

dist/commonjs/route-node.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ var RouteNode = (function () {
7676
if (!b.parser.hasSpatParam && a.parser.hasSpatParam) return 1;
7777
if (!a.parser.hasUrlParams && b.parser.hasUrlParams) return -1;
7878
if (!b.parser.hasUrlParams && a.parser.hasUrlParams) return 1;
79-
return 0;
79+
return a.path.length < b.path.length;
8080
});
8181
} else {
8282
// Locate parent node

dist/umd/route-node.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@
8383
if (!b.parser.hasSpatParam && a.parser.hasSpatParam) return 1;
8484
if (!a.parser.hasUrlParams && b.parser.hasUrlParams) return -1;
8585
if (!b.parser.hasUrlParams && a.parser.hasUrlParams) return 1;
86-
return 0;
86+
return a.path.length < b.path.length;
8787
});
8888
} else {
8989
// Locate parent node

modules/RouteNode.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export default class RouteNode {
4646
if (!b.parser.hasSpatParam && a.parser.hasSpatParam) return 1
4747
if (!a.parser.hasUrlParams && b.parser.hasUrlParams) return -1
4848
if (!b.parser.hasUrlParams && a.parser.hasUrlParams) return 1
49-
return 0;
49+
return a.path && b.path ? a.path.length < b.path.length : 0;
5050
})
5151
} else {
5252
// Locate parent node

test/main.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,17 @@ describe('RouteNode', function () {
150150
rootNode.buildPath('users.view', {id: 1}).should.equal('/users/view/1');
151151
rootNode.buildPath('users.list', {id: 1}).should.equal('/users/list');
152152
});
153+
154+
it('should sort paths by length', function () {
155+
var rootNode = new RouteNode('', '')
156+
.addNode('index', '/')
157+
.addNode('abo', '/abo')
158+
.addNode('about', '/about');
159+
160+
rootNode.matchPath('/').should.eql({name: 'index', params: {}});
161+
rootNode.matchPath('/abo').should.eql({name: 'abo', params: {}});
162+
rootNode.matchPath('/about').should.eql({name: 'about', params: {}});
163+
});
153164
});
154165

155166

0 commit comments

Comments
 (0)