"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _urlToolkit = _interopRequireDefault(require("url-toolkit")); var _window = _interopRequireDefault(require("global/window")); var DEFAULT_LOCATION = 'http://example.com'; var resolveUrl = function resolveUrl(baseUrl, relativeUrl) { // return early if we don't need to resolve if (/^[a-z]+:/i.test(relativeUrl)) { return relativeUrl; } // if baseUrl is a data URI, ignore it and resolve everything relative to window.location if (/^data:/.test(baseUrl)) { baseUrl = _window.default.location && _window.default.location.href || ''; } // IE11 supports URL but not the URL constructor // feature detect the behavior we want var nativeURL = typeof _window.default.URL === 'function'; var protocolLess = /^\/\//.test(baseUrl); // remove location if window.location isn't available (i.e. we're in node) // and if baseUrl isn't an absolute url var removeLocation = !_window.default.location && !/\/\//i.test(baseUrl); // if the base URL is relative then combine with the current location if (nativeURL) { baseUrl = new _window.default.URL(baseUrl, _window.default.location || DEFAULT_LOCATION); } else if (!/\/\//i.test(baseUrl)) { baseUrl = _urlToolkit.default.buildAbsoluteURL(_window.default.location && _window.default.location.href || '', baseUrl); } if (nativeURL) { var newUrl = new URL(relativeUrl, baseUrl); // if we're a protocol-less url, remove the protocol // and if we're location-less, remove the location // otherwise, return the url unmodified if (removeLocation) { return newUrl.href.slice(DEFAULT_LOCATION.length); } else if (protocolLess) { return newUrl.href.slice(newUrl.protocol.length); } return newUrl.href; } return _urlToolkit.default.buildAbsoluteURL(baseUrl, relativeUrl); }; var _default = resolveUrl; exports.default = _default; module.exports = exports.default;