From fba689d7c67572ab50f54479f58e0215d814bbed Mon Sep 17 00:00:00 2001 From: Daniel Diekmeier Date: Fri, 15 Sep 2023 12:12:49 +0200 Subject: [PATCH 1/2] fix: allow optional param in middle of route --- packages/kit/src/utils/routing.js | 10 ++++++++++ packages/kit/src/utils/routing.spec.js | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/packages/kit/src/utils/routing.js b/packages/kit/src/utils/routing.js index e6c90f3bf062..f55c0762b10c 100644 --- a/packages/kit/src/utils/routing.js +++ b/packages/kit/src/utils/routing.js @@ -136,6 +136,7 @@ export function exec(match, params, matchers) { const result = {}; const values = match.slice(1); + const values_needing_match = values.filter((value) => value !== undefined); let buffered = 0; @@ -170,6 +171,15 @@ export function exec(match, params, matchers) { if (next_param && !next_param.rest && next_param.optional && next_value && param.chained) { buffered = 0; } + + // There are no more params and no more values, but all non-empty values have been matched + if ( + !next_param && + !next_value && + Object.keys(result).length === values_needing_match.length + ) { + buffered = 0; + } continue; } diff --git a/packages/kit/src/utils/routing.spec.js b/packages/kit/src/utils/routing.spec.js index 6c5c5fee12bf..4b8dc6fcda47 100644 --- a/packages/kit/src/utils/routing.spec.js +++ b/packages/kit/src/utils/routing.spec.js @@ -197,6 +197,16 @@ const exec_tests = [ path: '/b/constant/c', expected: { slug2: 'b', slug3: 'c' } }, + { + route: '/[[slug1=doesntmatch]]/[[slug2=matches]]/[[slug3=matches]]', + path: '/b/c', + expected: { slug2: 'b', slug3: 'c' } + }, + { + route: '/[slug1]/[[lang=doesntmatch]]/[[page=matches]]', + path: '/a/2', + expected: { slug1: 'a', lang: undefined, page: '2' } + }, { route: '/[[slug1=doesntmatch]]/[slug2=matches]/[slug3]', path: '/a/b/c', From fba6ab3da61066b4f027872060217b3f7b91ff71 Mon Sep 17 00:00:00 2001 From: Daniel Diekmeier Date: Fri, 15 Sep 2023 12:14:17 +0200 Subject: [PATCH 2/2] add changeset --- .changeset/tricky-geckos-poke.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/tricky-geckos-poke.md diff --git a/.changeset/tricky-geckos-poke.md b/.changeset/tricky-geckos-poke.md new file mode 100644 index 000000000000..b6b2b253ff71 --- /dev/null +++ b/.changeset/tricky-geckos-poke.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +fix: allow optional param in middle of route