…y uri.path() and uri.pathname().
Clearly the relative path from"/a/b/c/" to "/a/b/c/" is the empty relative path "", and not "/".
Equivalently, URI("").path() should return the empty string "", but in fact returns "/".
The empty relative path is serialized correctly by .toString(), but incorrectly by .path() and .pathname().
If the URI includes an authority component, then the path is always absolute. Otherwise, the path may be relative and we should not coerce an empty relative path to the empty absolute path.
We check for the presence of a hostname as a proxy for checking for an authority component, because in our implementation the presence of a hostname determines the presence of an authority component.
There was previously a check to see if the URI was a URN, but that is now redundant since a URN cannot include an authority component.