From 4f43347b509446c93f6e6255a863775d35ed7a13 Mon Sep 17 00:00:00 2001 From: Giedrius Grabauskas Date: Wed, 8 Jan 2020 10:30:23 +0200 Subject: [PATCH] fix: updated combine url fix method (#1647) * test: added more combineBaseUrl tests * fix: optimized and updated combineBaseUrl method logic --- src/lib/utils.ts | 15 +++++++++++---- test/unit/modules/utils/utils.spec.ts | 3 +++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/lib/utils.ts b/src/lib/utils.ts index db05ebd3b..d49eaf3f4 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -141,12 +141,19 @@ export function validateMetadata(object: Package, name: string): Package { * @return {String} base registry url */ export function combineBaseUrl(protocol: string, host: string | void, prefix?: string | void): string { - let result = `${protocol}://${host}`; + const result = `${protocol}://${host}`; - if (prefix) { - prefix = prefix.replace(/\/$/, ''); + const prefixOnlySlash = prefix === '/'; + if (prefix && !prefixOnlySlash) { + if (prefix.endsWith('/')) { + prefix = prefix.slice(0, -1); + } - result = prefix.indexOf('/') === 0 ? `${result}${prefix}` : prefix; + if (prefix.startsWith('/')) { + return `${result}${prefix}`; + } + + return prefix; } return result; diff --git a/test/unit/modules/utils/utils.spec.ts b/test/unit/modules/utils/utils.spec.ts index e1b3fccd8..46a8c0f5f 100644 --- a/test/unit/modules/utils/utils.spec.ts +++ b/test/unit/modules/utils/utils.spec.ts @@ -212,7 +212,10 @@ describe('Utilities', () => { }); test('should create a base url for registry', () => { + expect(combineBaseUrl("http", 'domain', '')).toEqual('http://domain'); + expect(combineBaseUrl("http", 'domain', '/')).toEqual('http://domain'); expect(combineBaseUrl("http", 'domain', '/prefix/')).toEqual('http://domain/prefix'); + expect(combineBaseUrl("http", 'domain', '/prefix/deep')).toEqual('http://domain/prefix/deep'); expect(combineBaseUrl("http", 'domain', 'only-prefix')).toEqual('only-prefix'); });