From 05560532ecbca5be1ecb77acdf771aec487b9738 Mon Sep 17 00:00:00 2001 From: Diya Date: Fri, 20 Feb 2026 12:10:55 +0530 Subject: [PATCH 1/3] fix authority normalization --- lib/index.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/index.js b/lib/index.js index d8be3a0..ebad920 100644 --- a/lib/index.js +++ b/lib/index.js @@ -88,6 +88,9 @@ const resolveReference = (strategy) => (reference, base) => { if (resolvedComponents.authority === undefined) { resolvedComponents.authority = baseComponents.authority; + resolvedComponents.userinfo = baseComponents.userinfo; + resolvedComponents.host = baseComponents.host; + resolvedComponents.port = baseComponents.port; if (resolvedComponents.path === "") { resolvedComponents.path = baseComponents.path; @@ -165,7 +168,10 @@ const getSegment = (path) => { /** @type (strategy: Strategy, components: API.IdentifierComponents) => string */ const composeIdentifier = (strategy, components) => { let resolved = components.scheme.toLowerCase() + ":"; - resolved += components.authority === undefined ? "" : "//" + components.authority.toLowerCase(); + resolved += components.authority === undefined ? "" : "//" + + (components.userinfo === undefined ? "" : components.userinfo + "@") + + components.host.toLowerCase() + + (components.port === undefined ? "" : ":" + components.port); resolved += strategy.normalizePath(components.path); resolved += components.query === undefined ? "" : "?" + strategy.normalizeQuery(components.query); resolved += components.fragment === undefined ? "" : "#" + strategy.normalizeFragment(components.fragment); From 5ab60c5ca9ed6b6217c47a391420dcd3e48960f4 Mon Sep 17 00:00:00 2001 From: Diya Date: Sat, 21 Feb 2026 03:36:51 +0530 Subject: [PATCH 2/3] add normalize userinfo test case --- lib/resolve-reference.test.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/resolve-reference.test.js b/lib/resolve-reference.test.js index 283e1ba..3bf5f7c 100644 --- a/lib/resolve-reference.test.js +++ b/lib/resolve-reference.test.js @@ -1,5 +1,5 @@ import { describe, expect, test } from "vitest"; -import { resolveIri } from "./index.js"; +import { normalizeUri, resolveIri } from "./index.js"; const resolveTests = [ @@ -65,3 +65,13 @@ describe("resolveReference", () => { }); }); }); + +describe("normalizeUri", () => { + test("normalize userinfo", () => { + const input = "Https://JDesrosiers@Example.com"; + const expected = "https://JDesrosiers@example.com"; + const actual = normalizeUri(input); + + expect(actual).to.equal(expected); + }); +}); From e771a3e45403e2b5e68b34cb98033f2309863f33 Mon Sep 17 00:00:00 2001 From: Diya Date: Sat, 21 Feb 2026 04:18:34 +0530 Subject: [PATCH 3/3] add test to resolveTests array --- lib/resolve-reference.test.js | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/lib/resolve-reference.test.js b/lib/resolve-reference.test.js index 3bf5f7c..7111ef7 100644 --- a/lib/resolve-reference.test.js +++ b/lib/resolve-reference.test.js @@ -1,5 +1,5 @@ import { describe, expect, test } from "vitest"; -import { normalizeUri, resolveIri } from "./index.js"; +import { resolveIri } from "./index.js"; const resolveTests = [ @@ -54,7 +54,8 @@ const resolveTests = [ ["http://example.com/b%2Fc/d/e", "", "http://example.com/b%2Fc/d/e"], // Necessary encoding segment ["http://example.com/b%2fc/d/e", "", "http://example.com/b%2Fc/d/e"], // Case normalization of encoding segment ["http://example.com/b?c%2Fd%3Fe", "", "http://example.com/b?c/d?e"], // Unnecessary encoding query - ["http://example.com/b", "#c%2Fd%3Fe", "http://example.com/b#c/d?e"] // Unnecessary encoding fragment + ["http://example.com/b", "#c%2Fd%3Fe", "http://example.com/b#c/d?e"], // Unnecessary encoding fragment + ["Https://JDesrosiers@Example.com", "", "https://JDesrosiers@example.com"] // Case normalization of authority ]; describe("resolveReference", () => { @@ -65,13 +66,3 @@ describe("resolveReference", () => { }); }); }); - -describe("normalizeUri", () => { - test("normalize userinfo", () => { - const input = "Https://JDesrosiers@Example.com"; - const expected = "https://JDesrosiers@example.com"; - const actual = normalizeUri(input); - - expect(actual).to.equal(expected); - }); -});