diff --git a/src/lib/kernel/RouteHelper.svelte.test.ts b/src/lib/kernel/RouteHelper.svelte.test.ts index 6e410c4..a6cb69c 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,11 +543,39 @@ describe('RouteHelper', () => { }, { testPath: '/files/docs/readme.txt', - regex: /^\/files\/(?.*)$/, + regex: /^\/files(?\/.*)/, expectedMatch: true, - expectedParams: { rest: 'docs/readme.txt' }, + expectedParams: { rest: '/docs/readme.txt' }, description: 'rest parameter matching' }, + { + testPath: 'files-v2/docs/readme.txt', + regex: /^\/files(?\/.*)/, + expectedMatch: false, + expectedParams: undefined, + description: 'rest param + similar text in path (#182)' + }, + { + testPath: '/abc/def', + regex: /^(?\/.*)/, + expectedMatch: true, + expectedParams: { rest: '/abc/def' }, + description: 'root path regex (#182)' + }, + { + testPath: '/', + regex: /^(?\/.*)/, + expectedMatch: true, + expectedParams: { rest: '/' }, + description: 'root path regex + root test path (#182)' + }, + { + testPath: '/abc/def/ghi/jkl', + regex: /^\/abc(?\/.*)\/(?[^/]+)/, + expectedMatch: true, + expectedParams: { rest: '/def/ghi', last: 'jkl' }, + description: 'rest parameter in middle of path' + }, { testPath: '/different', regex: /^\/user\/(?\d+)$/, diff --git a/src/lib/kernel/RouteHelper.svelte.ts b/src/lib/kernel/RouteHelper.svelte.ts index a2f166b..bd40e7b 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,