diff --git a/runtime/src/app/app.ts b/runtime/src/app/app.ts index f819ba1..88413b3 100644 --- a/runtime/src/app/app.ts +++ b/runtime/src/app/app.ts @@ -289,7 +289,7 @@ export async function hydrate_target(target: Target): Promise<{ const j = l++; const segment = segments[i]; - if (!session_dirty && current_branch[i] && current_branch[i].segment === segment) return current_branch[i]; + if (!session_dirty && current_branch[i] && current_branch[i].segment === segment && current_branch[i].part === part.i) return current_branch[i]; const { default: component, preload } = await load_component(components[part.i]); @@ -306,7 +306,7 @@ export async function hydrate_target(target: Target): Promise<{ preloaded = initial_data.preloaded[i + 1]; } - return (props[`level${j}`] = { component, props: preloaded, segment }); + return (props[`level${j}`] = { component, props: preloaded, segment, part: part.i }); })); } catch (error) { props.error = error; diff --git a/test/apps/basics/src/routes/dirs/bar/[a].svelte b/test/apps/basics/src/routes/dirs/bar/[a].svelte new file mode 100644 index 0000000..b31915f --- /dev/null +++ b/test/apps/basics/src/routes/dirs/bar/[a].svelte @@ -0,0 +1,3 @@ +

A page

+ +same segment diff --git a/test/apps/basics/src/routes/dirs/foo/[b].svelte b/test/apps/basics/src/routes/dirs/foo/[b].svelte new file mode 100644 index 0000000..f7a165f --- /dev/null +++ b/test/apps/basics/src/routes/dirs/foo/[b].svelte @@ -0,0 +1 @@ +

B page

diff --git a/test/apps/basics/test.ts b/test/apps/basics/test.ts index e1f16a2..2a105a1 100644 --- a/test/apps/basics/test.ts +++ b/test/apps/basics/test.ts @@ -282,6 +282,17 @@ describe('basics', function() { assert.equal(await title(), 'bar'); }); + it('navigates between dynamic routes with same segments', async () => { + await page.goto(`${base}/dirs/bar/xyz`); + await start(); + + assert.equal(await title(), 'A page'); + + await page.click('[href="dirs/foo/xyz"]'); + await wait(50); + assert.equal(await title(), 'B page'); + }); + it('runs server route handlers before page handlers, if they match', async () => { const json = await get(`${base}/middleware`, { headers: {