Resolving Urls

Resolve URLs to absolute URI/IRI.


This library resolves relative IRIs to absolute IRIs given a base IRI, conforming to RFC3986. The code was borrowed from relative-to-absolute-iri . ~There is an open issue to make the library compatible with IE11: Issue #5~



npm install @availity/resolve-url


yarn add @availity/resolve-url



  • relative: Relative url to be converted to full url
  • base (optional): Base url used to convert the relative url. If base URL is not provided it is calculated from window.location.href.


import resolveUrl from '@availity/resolve-url';
resolveUrl({ relative: '/a/b', base: '' });
// Outputs


When base option is not provided, this package will calculate the base from window.location.href. The example below returns server relative url if hostname was

import resolveUrl from '@availity/resolve-url';
resolveUrl({ relative: '/a/b' });
// Outputs

The following examples were adapted from relative-to-absolute-iri


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

resolve('#abc', ''); // Outputs ''

Invalid base URI#

Invalid base URIs cause an error to be thrown.

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

Protocol Relative#

When a relative IRI starts with a //, then the scheme of the base IRI will be used.

resolve('//abc', ''); // Outputs 'http://abc'


Relative URIs that starts with a / erase the path of the base IRI.

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

Relative Directory Traversal#

Relative URIs 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'


  • URI - Uniform Resource Identifier allows ASCII characters
  • IRI - Internationalized Resource Identifier allows Unicode typeset