UNPKG

axios

Version:

Promise based HTTP client for the browser and node.js

51 lines (44 loc) 1.61 kB
'use strict'; import AxiosError from './AxiosError.js'; import isAbsoluteURL from '../helpers/isAbsoluteURL.js'; import combineURLs from '../helpers/combineURLs.js'; const malformedHttpProtocol = /^https?:(?!\/\/)/i; const httpProtocolControlCharacters = /[\t\n\r]/g; function stripLeadingC0ControlOrSpace(url) { let i = 0; while (i < url.length && url.charCodeAt(i) <= 0x20) { i++; } return url.slice(i); } function normalizeURLForProtocolCheck(url) { return stripLeadingC0ControlOrSpace(url).replace(httpProtocolControlCharacters, ''); } function assertValidHttpProtocolURL(url, config) { if (typeof url === 'string' && malformedHttpProtocol.test(normalizeURLForProtocolCheck(url))) { throw new AxiosError( 'Invalid URL: missing "//" after protocol', AxiosError.ERR_INVALID_URL, config ); } } /** * Creates a new URL by combining the baseURL with the requestedURL, * only when the requestedURL is not already an absolute URL. * If the requestURL is absolute, this function returns the requestedURL untouched. * * @param {string} baseURL The base URL * @param {string} requestedURL Absolute or relative URL to combine * * @returns {string} The combined full path */ export default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls, config) { assertValidHttpProtocolURL(requestedURL, config); let isRelativeUrl = !isAbsoluteURL(requestedURL); if (baseURL && (isRelativeUrl || allowAbsoluteUrls === false)) { assertValidHttpProtocolURL(baseURL, config); return combineURLs(baseURL, requestedURL); } return requestedURL; }