From c64b32b6a449084e47ba01dccd7f8cbb02b15bdb Mon Sep 17 00:00:00 2001 From: Erin Millard Date: Fri, 23 Apr 2021 11:15:11 +1000 Subject: [PATCH] Return absolute URLs unmodified when resolving --- src/url.js | 4 +++- test/suite/consumer/urls.spec.js | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/url.js b/src/url.js index a9d7790..3692804 100644 --- a/src/url.js +++ b/src/url.js @@ -47,11 +47,13 @@ export function resolveUrl (baseUrl, url) { if (typeof baseUrl !== 'string') throw new Error('Base URL must be a string') if (typeof url !== 'string') throw new Error('URL must be a string') + const urlParsed = urlParse(url) + if (urlParsed.host) return url + const baseUrlParsed = urlParse(baseUrl) if (baseUrlParsed.host) return urlParse(url, baseUrl).toString() - const urlParsed = urlParse(url) urlParsed.pathname = resolvePath(baseUrlParsed.pathname, urlParsed.pathname) return urlParsed.toString() diff --git a/test/suite/consumer/urls.spec.js b/test/suite/consumer/urls.spec.js index 28e9403..786b980 100644 --- a/test/suite/consumer/urls.spec.js +++ b/test/suite/consumer/urls.spec.js @@ -30,6 +30,7 @@ describe('Consumer URL methods', () => { expect(consumer.absoluteUrl('x/y')).toBe('https://iconduit.github.io/p/a/t/x/y') expect(consumer.absoluteUrl('x/y/')).toBe('https://iconduit.github.io/p/a/t/x/y/') expect(consumer.absoluteUrl('https://example.org/x/y')).toBe('https://example.org/x/y') + expect(consumer.absoluteUrl('iconduit://dashboard')).toBe('iconduit://dashboard') }) it('should be able to resolve relative URLs', () => {