Skip to content

Commit 646f879

Browse files
committed
fix: resolve_route prevent dropping a trailing slash of id
1 parent 6033acb commit 646f879

File tree

3 files changed

+39
-1
lines changed

3 files changed

+39
-1
lines changed

.changeset/every-kings-wink.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@sveltejs/kit': patch
3+
---
4+
5+
fix: resolve_route prevent dropping a trailing slash of id

packages/kit/src/utils/routing.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,8 @@ const basic_param_pattern = /\[(\[)?(\.\.\.)?(\w+?)(?:=(\w+))?\]\]?/g;
240240
*/
241241
export function resolve_route(id, params) {
242242
const segments = get_route_segments(id);
243+
const has_id_trailing_slash = id != '/' && id.endsWith('/');
244+
243245
return (
244246
'/' +
245247
segments
@@ -262,7 +264,8 @@ export function resolve_route(id, params) {
262264
})
263265
)
264266
.filter(Boolean)
265-
.join('/')
267+
.join('/') +
268+
(has_id_trailing_slash ? '/' : '')
266269
);
267270
}
268271

packages/kit/src/utils/routing.spec.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,30 +278,60 @@ describe('resolve_route', () => {
278278
params: { one: 'one', two: 'two' },
279279
expected: '/blog/one/two'
280280
},
281+
{
282+
route: '/blog/[one]/[two]/',
283+
params: { one: 'one', two: 'two' },
284+
expected: '/blog/one/two/'
285+
},
281286
{
282287
route: '/blog/[one=matcher]/[...two]',
283288
params: { one: 'one', two: 'two/three' },
284289
expected: '/blog/one/two/three'
285290
},
291+
{
292+
route: '/blog/[one=matcher]/[...two]/',
293+
params: { one: 'one', two: 'two/three' },
294+
expected: '/blog/one/two/three/'
295+
},
286296
{
287297
route: '/blog/[one=matcher]/[[two]]',
288298
params: { one: 'one' },
289299
expected: '/blog/one'
290300
},
301+
{
302+
route: '/blog/[one=matcher]/[[two]]/',
303+
params: { one: 'one' },
304+
expected: '/blog/one/'
305+
},
291306
{
292307
route: '/blog/[one]/[two]-and-[three]',
293308
params: { one: 'one', two: '2', three: '3' },
294309
expected: '/blog/one/2-and-3'
295310
},
311+
{
312+
route: '/blog/[one]/[two]-and-[three]/',
313+
params: { one: 'one', two: '2', three: '3' },
314+
expected: '/blog/one/2-and-3/'
315+
},
296316
{
297317
route: '/blog/[...one]',
298318
params: { one: '' },
299319
expected: '/blog'
300320
},
321+
{
322+
route: '/blog/[...one]/',
323+
params: { one: '' },
324+
expected: '/blog/'
325+
},
301326
{
302327
route: '/blog/[one]/[...two]-not-three',
303328
params: { one: 'one', two: 'two/2' },
304329
expected: '/blog/one/two/2-not-three'
330+
},
331+
{
332+
route: '/blog/[one]/[...two]-not-three/',
333+
params: { one: 'one', two: 'two/2' },
334+
expected: '/blog/one/two/2-not-three/'
305335
}
306336
];
307337

0 commit comments

Comments
 (0)