url-lib
Version:
A simple, lightweight string utility for Node and browsers that supports serializing and parsing URLs and query strings.
37 lines (29 loc) • 1.34 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
// Adapted from the Uize.Url module, a part of the UIZE JavaScript Framework.
// eslint-disable-next-line no-useless-escape
var URL_REG_EXP = /^(([^:\\\/]+:)\/\/(([^:\\\/]*)(:(\d+))?)?)?(([^\?#]*[\\\/])?(([^\\\/\?#]*?)(\.([^\.\?#]+))?))(\?([^#]*))?(#(.*))?$/; // See docs for explanation of each segment
var URL_SEGMENTS = ['href', 'fullDomain', 'protocol', 'host', 'hostname', '', 'port', 'pathname', 'folderPath', 'file', 'fileName', 'extension', 'fileType', 'search', 'query', 'hash', 'anchor'];
/**
* Parses the specified URL string into an object containing properties for the various logical segments.
* @param {string | null} [url] URL to parse
* @returns {ParsedUrl} Parsed URL as url segments object
*/
var parseUrl = function parseUrl(url) {
var urlSegmentsMatch = url && url.match(URL_REG_EXP);
var getUrlSegment = function getUrlSegment(segmentNo) {
return urlSegmentsMatch ? urlSegmentsMatch[segmentNo] || '' : '';
};
return URL_SEGMENTS.reduce(function (prevParsedUrl, segmentName, segmentNo) {
var parsedUrl = prevParsedUrl;
if (segmentName) {
parsedUrl[segmentName] = getUrlSegment(segmentNo);
}
return parsedUrl;
}, {});
};
var _default = parseUrl;
exports.default = _default;