Skip to content

rubensworks/relative-to-absolute-iri.js

Repository files navigation

Relative to Absolute IRI

Build status Coverage Status npm version

Resolve relative IRIs to absolute IRIs given a base IRI, conforming to RFC3986.

Installation

$ yarn install relative-to-absolute-iri

This package also works out-of-the-box in browsers via tools such as webpack and browserify.

Require

import {resolve} from "relative-to-absolute-iri";

or

const resolve = require("relative-to-absolute-iri").resolve;

Usage

Parameters

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'

Relative IRIs

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/'

Hashes

Fragments/hashes in relative IRIs are also taken into account.

resolve('#abc', 'http://base.org/'); // Outputs 'http://base.org/#abc'

Invalid base IRI

Invalid base IRIs cause an error to be thrown.

resolve('abc', 'def'); // Error

Relative to scheme

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'

Absolute relative IRIs

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/'

Collapsing of dots

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'

License

This software is written by Ruben Taelman.

This code is released under the MIT license.