From 16a7b8f37f8b88f1785b68efca57e55ae96904e2 Mon Sep 17 00:00:00 2001 From: HanBinKim <37659866+hanbin9775@users.noreply.github.com> Date: Mon, 12 Dec 2022 23:18:54 +0900 Subject: [PATCH] Fix encoding of `fragmentIdentifier` (#355) --- index.js | 4 +++- test/stringify-url.js | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/index.js b/index.js index d45e67d9..129ea269 100644 --- a/index.js +++ b/index.js @@ -455,7 +455,9 @@ exports.stringifyUrl = (object, options) => { let hash = getHash(object.url); if (object.fragmentIdentifier) { - hash = `#${options[encodeFragmentIdentifier] ? encode(object.fragmentIdentifier, options) : object.fragmentIdentifier}`; + const urlObjectForFragmentEncode = new URL(url); + urlObjectForFragmentEncode.hash = object.fragmentIdentifier; + hash = options[encodeFragmentIdentifier] ? urlObjectForFragmentEncode.hash : `#${object.fragmentIdentifier}`; } return `${url}${queryString}${hash}`; diff --git a/test/stringify-url.js b/test/stringify-url.js index 2b3c3728..9b6ff43e 100644 --- a/test/stringify-url.js +++ b/test/stringify-url.js @@ -26,6 +26,7 @@ test('stringify URL with fragment identifier', t => { t.deepEqual(queryString.stringifyUrl({url: 'https://foo.bar/#abc', query: {}, fragmentIdentifier: 'top'}), 'https://foo.bar/#top'); t.deepEqual(queryString.stringifyUrl({url: 'https://foo.bar', query: {}}), 'https://foo.bar'); t.deepEqual(queryString.stringifyUrl({url: 'https://foo.bar', query: {}, fragmentIdentifier: 'foo bar'}), 'https://foo.bar#foo%20bar'); + t.deepEqual(queryString.stringifyUrl({url: 'https://foo.bar/', query: {}, fragmentIdentifier: '/foo/bar'}), 'https://foo.bar/#/foo/bar'); }); test('skipEmptyString:: stringify URL with a query string', t => {