From 4739e5359ed0e2fef89759cc48ab809003cdba0b Mon Sep 17 00:00:00 2001 From: Jacob Baker-Kretzmar Date: Fri, 15 Sep 2023 12:22:48 -0400 Subject: [PATCH 1/3] Add test --- tests/js/route.test.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/js/route.test.js b/tests/js/route.test.js index d89db677..92738cde 100644 --- a/tests/js/route.test.js +++ b/tests/js/route.test.js @@ -376,6 +376,10 @@ describe('route()', () => { same(route('home'), 'https://ziggy.dev'); }); + test('can generate a relative URL to a root path', () => { + same(route('home', undefined, false), '/'); + }); + // @todo duplicate test('can ignore an optional parameter', () => { same(route('optional', { id: 123 }), 'https://ziggy.dev/optional/123'); From aada9068168d632472b260a4b6a44ee9962b7804 Mon Sep 17 00:00:00 2001 From: Jacob Baker-Kretzmar Date: Fri, 15 Sep 2023 12:23:00 -0400 Subject: [PATCH 2/3] Fix regex --- src/js/Route.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/Route.js b/src/js/Route.js index 7fd6a347..cba10c3b 100644 --- a/src/js/Route.js +++ b/src/js/Route.js @@ -26,7 +26,7 @@ export default class Route { * @return {String} Route template. */ get template() { - return `${this.origin}/${this.definition.uri}`.replace(/\/+$/, ''); + return `${this.origin}/${this.definition.uri}`.replace(/(?<=.)\/+$/, ''); } /** From 224eca72958f46238613c1f7226c9da781ec54f3 Mon Sep 17 00:00:00 2001 From: Jacob Baker-Kretzmar Date: Fri, 15 Sep 2023 13:02:16 -0400 Subject: [PATCH 3/3] Remove lookbehind (only supported in Safari since March 2023) --- src/js/Route.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/js/Route.js b/src/js/Route.js index cba10c3b..4b76be62 100644 --- a/src/js/Route.js +++ b/src/js/Route.js @@ -26,7 +26,9 @@ export default class Route { * @return {String} Route template. */ get template() { - return `${this.origin}/${this.definition.uri}`.replace(/(?<=.)\/+$/, ''); + const template = `${this.origin}/${this.definition.uri}`.replace(/\/+$/, ''); + + return template === '' ? '/' : template; } /**