From 86c725b24a48c1b56adfabd9e0d5c4c58cb94613 Mon Sep 17 00:00:00 2001 From: Brandon Payton Date: Wed, 17 Jul 2024 21:52:39 -0400 Subject: [PATCH] Fix joinPaths root edge case --- packages/php-wasm/util/src/lib/paths.spec.ts | 1 + packages/php-wasm/util/src/lib/paths.ts | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/php-wasm/util/src/lib/paths.spec.ts b/packages/php-wasm/util/src/lib/paths.spec.ts index bc2f26e60d..6cdde73796 100644 --- a/packages/php-wasm/util/src/lib/paths.spec.ts +++ b/packages/php-wasm/util/src/lib/paths.spec.ts @@ -20,6 +20,7 @@ describe('joinPaths', () => { expect(joinPaths('wordpress', '..', '..', 'wp-content')).toEqual( '../wp-content' ); + expect(joinPaths('/', '/')).toEqual('/'); }); }); diff --git a/packages/php-wasm/util/src/lib/paths.ts b/packages/php-wasm/util/src/lib/paths.ts index 0f6c30c9cd..dd4b2f8bf3 100644 --- a/packages/php-wasm/util/src/lib/paths.ts +++ b/packages/php-wasm/util/src/lib/paths.ts @@ -28,14 +28,18 @@ * @returns A joined path */ export function joinPaths(...paths: string[]) { + function hasTrailingSlash(p: string) { + return p.substring(p.length - 1) === '/'; + } + let path = paths.join('/'); const isAbsolute = path[0] === '/'; - const trailingSlash = path.substring(path.length - 1) === '/'; + const trailingSlash = hasTrailingSlash(path); path = normalizePath(path); if (!path && !isAbsolute) { path = '.'; } - if (path && trailingSlash) { + if (path && trailingSlash && !hasTrailingSlash(path)) { path += '/'; } return path;