Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down
12 changes: 11 additions & 1 deletion lib/resolve-reference.test.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { describe, expect, test } from "vitest";
import { resolveIri } from "./index.js";
import { normalizeUri, resolveIri } from "./index.js";


const resolveTests = [
Expand Down Expand Up @@ -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);
});
});