UNPKG

url-lib

Version:

A simple, lightweight string utility for Node and browsers that supports serializing and parsing URLs and query strings.

54 lines (38 loc) 2.57 kB
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } function _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } // Adapted from the Uize.Url module, a part of the UIZE JavaScript Framework. import parseQuery from './parseQuery'; import formatQuery from './formatQuery'; import { splitOnQuery } from './utils'; var IMMUTABLE_EMPTY_ARRAY = []; /** * Serializes the specified URL path with properties of a params object to produce a URL. * @param {string} [urlPath] - Base URL path * @param {NullableUrlParams} [urlParams] - Query params to combine with base URL * @returns {string} Serialized URL */ // eslint-disable-next-line func-style function formatUrl(urlPath, urlParams) { var formattedUrl = urlPath; var queryParams = urlParams; // if they passed an array as the first parameter, separate out the first // element (url) from the other elements (query params list) if (Array.isArray(formattedUrl)) { var _formattedUrl = formattedUrl, _formattedUrl2 = _toArray(_formattedUrl), url = _formattedUrl2[0], _urlParamsList = _formattedUrl2.slice(1); queryParams = _urlParamsList.concat(queryParams || IMMUTABLE_EMPTY_ARRAY); formattedUrl = url; } // Pull out any query params from the URL var parsedQueryParamsFromUrl = parseQuery(formattedUrl, false); // Convert the query params into an array (if it already isn't) var normalizedQueryParams = Array.isArray(queryParams) ? queryParams : [queryParams]; // Serialize the query params to a query string var queryString = formatQuery([parsedQueryParamsFromUrl].concat(_toConsumableArray(normalizedQueryParams))); // Finally build the URL by stripping out any query string from the URL and // appending the query string return splitOnQuery(formattedUrl).urlPath + (queryString ? '?' : '') + queryString; } export default formatUrl;