From b4d420f8ae8188960a7dfc36be76d6983a103e0c Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Thu, 25 Nov 2021 09:26:45 -0500 Subject: [PATCH] ignore hrefs with a scheme - fixes #2909 --- packages/kit/src/utils/url.js | 3 +++ packages/kit/src/utils/url.spec.js | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/packages/kit/src/utils/url.js b/packages/kit/src/utils/url.js index 486742357d0c..a0acf2aedaf4 100644 --- a/packages/kit/src/utils/url.js +++ b/packages/kit/src/utils/url.js @@ -1,10 +1,13 @@ const absolute = /^([a-z]+:)?\/?\//; +const scheme = /^[a-z]+:/; /** * @param {string} base * @param {string} path */ export function resolve(base, path) { + if (scheme.test(path)) return path; + const base_match = absolute.exec(base); const path_match = absolute.exec(path); diff --git a/packages/kit/src/utils/url.spec.js b/packages/kit/src/utils/url.spec.js index 11df39fee009..3d15d17a2cd1 100644 --- a/packages/kit/src/utils/url.spec.js +++ b/packages/kit/src/utils/url.spec.js @@ -46,4 +46,8 @@ test('resolves an absolute path', () => { assert.equal(resolve('/a/b/c', 'https://example.com/foo'), 'https://example.com/foo'); }); +test('handles schemes like tel: and mailto:', () => { + assert.equal(resolve('/a/b/c', 'mailto:hello@svelte.dev'), 'mailto:hello@svelte.dev'); +}); + test.run();