Resolve relative IRIs to absolute IRIs given a base IRI, conforming to RFC3986.
$ yarn install relative-to-absolute-iri
This package also works out-of-the-box in browsers via tools such as webpack and browserify.
import {resolve} from "relative-to-absolute-iri";
or
const resolve = require("relative-to-absolute-iri").resolve;
This library exposes a single resolve
function
that must be called with a relative IRI (string) as first argument,
and an optional base IRI (string) as second argument.
It will output an absolute IRI (string).
resolve('relative', 'http://base.org/'); // Outputs 'http://base.org/relative'
IRIs that are already relative will remain relative:
resolve('http://example.org/'); // Outputs 'http://example.org/'
resolve('http://example.org/', 'http://base.org/'); // Outputs 'http://example.org/'
Fragments/hashes in relative IRIs are also taken into account.
resolve('#abc', 'http://base.org/'); // Outputs 'http://base.org/#abc'
Invalid base IRIs cause an error to be thrown.
resolve('abc', 'def'); // Error
When a relative IRI starts with a //
, then the scheme of the base IRI will be used.
resolve('//abc', 'http://base.org/'); // Outputs 'http://abc'
Relative IRIs that starts with a /
erase the path of the base IRI.
resolve('/abc/def/', 'http://base.org/123/456/'); // Outputs 'http://base.org/abc/def/'
Relative IRIs that point to the current directory (.
)
or parent directory (..
) are collapsed.
resolve('xyz', 'http://aa/parent/parent/../../a'); // Outputs 'http://aa/xyz'
resolve('xyz', 'http://aa/././a'); // Outputs 'http://aa/xyz'
This software is written by Ruben Taelman.
This code is released under the MIT license.