diff --git a/src/lib/kernel/RouteHelper.svelte.test.ts b/src/lib/kernel/RouteHelper.svelte.test.ts index a6cb69c..4e458f9 100644 --- a/src/lib/kernel/RouteHelper.svelte.test.ts +++ b/src/lib/kernel/RouteHelper.svelte.test.ts @@ -289,17 +289,17 @@ describe('RouteHelper', () => { test.each([ { pattern: '/files/*', - expectedRegex: '^\\/files(?\\/.*)$', + expectedRegex: '^\\/files(?(?:\\/.*|$))$', description: 'rest parameter' }, { pattern: '/api/v1/*', - expectedRegex: '^\\/api\\/v1(?\\/.*)$', + expectedRegex: '^\\/api\\/v1(?(?:\\/.*|$))$', description: 'rest parameter in nested path' }, { pattern: '/*', - expectedRegex: '^(?\\/.*)$', + expectedRegex: '^(?(?:\\/.*|$))$', description: 'root rest parameter' } ])('Should create correct regex for $description .', ({ pattern, expectedRegex }) => { @@ -543,35 +543,49 @@ describe('RouteHelper', () => { }, { testPath: '/files/docs/readme.txt', - regex: /^\/files(?\/.*)/, + regex: /^\/files(?(?:\/.*|$))/, expectedMatch: true, expectedParams: { rest: '/docs/readme.txt' }, description: 'rest parameter matching' }, + { + testPath: '/files', + regex: /^\/files(?(?:\/.*|$))/, + expectedMatch: true, + expectedParams: { rest: '' }, + description: 'empty rest parameter (#182)' + }, + { + testPath: '/files-archive', + regex: /^\/files(?(?:\/.*|$))/, + expectedMatch: false, + expectedParams: undefined, + description: 'empty rest param + similar text in path (#182)' + }, { testPath: 'files-v2/docs/readme.txt', - regex: /^\/files(?\/.*)/, + regex: /^\/files(?(?:\/.*|$))/, expectedMatch: false, expectedParams: undefined, description: 'rest param + similar text in path (#182)' }, { testPath: '/abc/def', - regex: /^(?\/.*)/, + regex: /^(?(?:\/.*|$))/, expectedMatch: true, expectedParams: { rest: '/abc/def' }, description: 'root path regex (#182)' }, { testPath: '/', - regex: /^(?\/.*)/, + regex: /^(?(?:\/.*|$))/, expectedMatch: true, expectedParams: { rest: '/' }, description: 'root path regex + root test path (#182)' }, { testPath: '/abc/def/ghi/jkl', - regex: /^\/abc(?\/.*)\/(?[^/]+)/, + regex: /^\/abc(?(?:\/.*|$))\/(?[^/]+)/, expectedMatch: true, expectedParams: { rest: '/def/ghi', last: 'jkl' }, description: 'rest parameter in middle of path' diff --git a/src/lib/kernel/RouteHelper.svelte.ts b/src/lib/kernel/RouteHelper.svelte.ts index bd40e7b..d1dcc28 100644 --- a/src/lib/kernel/RouteHelper.svelte.ts +++ b/src/lib/kernel/RouteHelper.svelte.ts @@ -81,7 +81,7 @@ export class RouteHelper { ); } ); - regexPattern = regexPattern.replace(restParamRegex, '(?\\/.*)'); + regexPattern = regexPattern.replace(restParamRegex, '(?(?:\\/.*|$))'); return { regex: new RegExp(`^${regexPattern}$`, routeInfo.caseSensitive ? undefined : 'i'), and: routeInfo.and,