Skip to content

Commit 951f8ae

Browse files
committed
feat: add support for arrays in query parameters (path-parser 0.4.x)
1 parent a86b9a0 commit 951f8ae

3 files changed

Lines changed: 14 additions & 12 deletions

File tree

modules/RouteNode.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ export default class RouteNode {
193193
let searchPart = !searchParams.length ? null : searchParams
194194
.reduce((queryParams, params) => queryParams.concat(params))
195195
.filter(p => Object.keys(params).indexOf(p) !== -1)
196-
.map(p => p + '=' + params[p])
196+
.map(p => Path.serialise(p, params[p]))
197197
.join('&')
198198

199199
return segments.map(segment => segment.parser.build(params, {ignoreSearch: true})).join('') + (searchPart ? '?' + searchPart : '')

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,6 @@
3838
"vinyl-source-stream2": "^0.1.1"
3939
},
4040
"dependencies": {
41-
"path-parser": "~0.3.2"
41+
"path-parser": "~0.4.2"
4242
}
4343
}

test/main.js

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -125,31 +125,33 @@ describe('RouteNode', function () {
125125

126126
it('should match build build paths with nested query parameters', function () {
127127
var node = new RouteNode('', '', [
128-
new RouteNode('grandParent', '/grand-parent?nickame', [
128+
new RouteNode('grandParent', '/grand-parent?nickname', [
129129
new RouteNode('parent', '/parent?name', [
130130
new RouteNode('child', '/child?age')
131131
])
132132
])
133133
]);
134134

135135
// Building
136-
node.buildPath('grandParent', {nickame: 'gran'}).should.equal('/grand-parent?nickame=gran');
137-
node.buildPath('grandParent.parent', {nickame: 'gran', name: 'maman'}).should.equal('/grand-parent/parent?nickame=gran&name=maman');
138-
node.buildPath('grandParent.parent', {nickame: 'gran'}).should.equal('/grand-parent/parent?nickame=gran');
136+
node.buildPath('grandParent', {nickname: 'gran'}).should.equal('/grand-parent?nickname=gran');
137+
node.buildPath('grandParent.parent', {nickname: 'gran', name: 'maman'}).should.equal('/grand-parent/parent?nickname=gran&name=maman');
138+
node.buildPath('grandParent.parent', {nickname: 'gran'}).should.equal('/grand-parent/parent?nickname=gran');
139139
node.buildPath('grandParent.parent', {name: 'maman'}).should.equal('/grand-parent/parent?name=maman');
140140
node.buildPath('grandParent.parent.child', {name: 'maman', age: 3}).should.equal('/grand-parent/parent/child?name=maman&age=3');
141141
node.buildPath('grandParent.parent.child', {}).should.equal('/grand-parent/parent/child');
142+
node.buildPath('grandParent.parent.child', {nickname: ['gran', 'granny']}).should.equal('/grand-parent/parent/child?nickname=gran&nickname=granny');
142143

143144
// Matching
144145
node.matchPath('/grand-parent').should.eql({name: 'grandParent', params: {}});
145-
node.matchPath('/grand-parent?nickame=gran').should.eql({name: 'grandParent', params: {nickame: 'gran'}});
146-
node.matchPath('/grand-parent/parent?nickame=gran&name=maman').should.eql({name: 'grandParent.parent', params: {nickame: 'gran', name: 'maman'}});
147-
node.matchPath('/grand-parent/parent/child?nickame=gran&name=maman').should.eql({name: 'grandParent.parent.child', params: {nickame: 'gran', name: 'maman'}});
148-
node.matchPath('/grand-parent/parent/child?nickame=gran&name=maman&age=3').should.eql({name: 'grandParent.parent.child', params: {nickame: 'gran', name: 'maman', age: '3'}});
146+
node.matchPath('/grand-parent?nickname=gran').should.eql({name: 'grandParent', params: {nickname: 'gran'}});
147+
node.matchPath('/grand-parent/parent?nickname=gran&name=maman').should.eql({name: 'grandParent.parent', params: {nickname: 'gran', name: 'maman'}});
148+
node.matchPath('/grand-parent/parent/child?nickname=gran&name=maman').should.eql({name: 'grandParent.parent.child', params: {nickname: 'gran', name: 'maman'}});
149+
node.matchPath('/grand-parent/parent/child?nickname=gran&name=maman&age=3').should.eql({name: 'grandParent.parent.child', params: {nickname: 'gran', name: 'maman', age: '3'}});
150+
node.matchPath('/grand-parent/parent/child?nickname=gran&nickname=granny&name=maman&age=3').should.eql({name: 'grandParent.parent.child', params: {nickname: ['gran', 'granny'], name: 'maman', age: '3'}});
149151

150152
// Unsuccessful matching
151-
should.not.exist(node.matchPath('/grand-parent?nickame=gran&name=papa'));
152-
should.not.exist(node.matchPath('/grand-parent/parent/child?nickame=gran&names=papa-maman'));
153+
should.not.exist(node.matchPath('/grand-parent?nickname=gran&name=papa'));
154+
should.not.exist(node.matchPath('/grand-parent/parent/child?nickname=gran&names=papa-maman'));
153155
});
154156

155157
it('should find a nested route by matching a path with a splat', function () {

0 commit comments

Comments
 (0)