A small and fast library for validating, parsing, and resolving URIs (RFC 3986) and IRIs (RFC 3987).
Designed for node.js (ES Modules, TypeScript) and browsers.
npm install @hyperjump/uri
import { resolveUri, parseUri, isUri, isIri } from "@hyperjump/uri"
const resolved = resolveUri("foo/bar", "http://example.com/aaa/bbb"); // https://example.com/aaa/foo/bar
const components = parseUri("https://jason@example.com:80/foo?bar#baz"); // {
// scheme: "https",
// authority: "jason@example.com:80",
// userinfo: "jason",
// host: "example.com",
// port: "80",
// path: "/foo",
// query: "bar",
// fragment: "baz"
// }
const a = isUri("http://examplé.org/rosé#"); // false
const a = isIri("http://examplé.org/rosé#"); // true
These functions resolve relative-references against a base URI/IRI. The base
URI/IRI must be absolute, meaning it must have a scheme (https
) and no
fragment (#foo
). The resolution process will normalize the
result.
These functions apply the following normalization rules.
/.
, /..
) in paths.A URI is not relative and may include a fragment.
toAbsoluteUri: (value: string) => string
Takes a URI and strips its fragment component if it exists.
A URI-reference may be relative.
An absolute-URI is not relative an does not include a fragment.
An IRI is not relative and may include a fragment.
toAbsoluteIri: (value: string) => string
Takes an IRI and strips its fragment component if it exists.
An IRI-reference may be relative.
An absolute-IRI is not relative an does not include a fragment.
Run the tests
npm test
Run the tests with a continuous test runner
npm test -- --watch