Skip to content

Commit 21437ea

Browse files
authored
Merge pull request #146 from trotzig/escaped-params
Escaped params
2 parents 4630d19 + 7f23584 commit 21437ea

File tree

2 files changed

+18
-0
lines changed

2 files changed

+18
-0
lines changed

src/index.js

+3
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ class Routes {
5252
if (result.route) return result
5353
const params = route.match(pathname)
5454
if (!params) return result
55+
Object.keys(params).forEach((key) => {
56+
params[key] = decodeURIComponent(params[key])
57+
})
5558
return {...result, route, params, query: {...query, ...params}}
5659
}, {query, parsedUrl})
5760
}

test/index.test.js

+15
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,13 @@ describe('Routes', () => {
6666
expect(query).not.toHaveProperty('a')
6767
})
6868

69+
test('match and merge escaped params', () => {
70+
const routes = nextRoutes().add('a', '/a/:b')
71+
const {query} = routes.match('/a/b%20%2F%20b')
72+
expect(query).toMatchObject({b: 'b / b'})
73+
expect(query).not.toHaveProperty('a')
74+
})
75+
6976
test('generate urls from params', () => {
7077
const {route} = setup('a', '/a/:b/:c+')
7178
const params = {b: 'b', c: [1, 2], d: 'd'}
@@ -74,6 +81,14 @@ describe('Routes', () => {
7481
expect(setup('a').route.getUrls()).toEqual({as: '/a', href: '/a?'})
7582
})
7683

84+
test('generate urls with params that need escaping', () => {
85+
const {route} = setup('a', '/a/:b')
86+
const params = {b: 'b b'}
87+
const expected = {as: '/a/b%20b', href: '/a?b=b%20b'}
88+
expect(route.getUrls(params)).toEqual(expected)
89+
expect(setup('a').route.getUrls()).toEqual({as: '/a', href: '/a?'})
90+
})
91+
7792
test('do not pass "null" for params that have null values', () => {
7893
const {route} = setup('a', '/a/:b/:c?')
7994
const params = {b: 'b', c: null, d: undefined}

0 commit comments

Comments
 (0)