39 lines
953 B
JavaScript
39 lines
953 B
JavaScript
|
"use strict";
|
||
|
|
||
|
/* eslint-disable */
|
||
|
|
||
|
/**
|
||
|
* @param {string[]} pathComponents
|
||
|
* @returns {string}
|
||
|
*/
|
||
|
function normalizeUrl(pathComponents) {
|
||
|
return pathComponents.reduce(function (accumulator, item) {
|
||
|
switch (item) {
|
||
|
case "..":
|
||
|
accumulator.pop();
|
||
|
break;
|
||
|
case ".":
|
||
|
break;
|
||
|
default:
|
||
|
accumulator.push(item);
|
||
|
}
|
||
|
return accumulator;
|
||
|
}, /** @type {string[]} */[]).join("/");
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param {string} urlString
|
||
|
* @returns {string}
|
||
|
*/
|
||
|
module.exports = function (urlString) {
|
||
|
urlString = urlString.trim();
|
||
|
if (/^data:/i.test(urlString)) {
|
||
|
return urlString;
|
||
|
}
|
||
|
var protocol = urlString.indexOf("//") !== -1 ? urlString.split("//")[0] + "//" : "";
|
||
|
var components = urlString.replace(new RegExp(protocol, "i"), "").split("/");
|
||
|
var host = components[0].toLowerCase().replace(/\.$/, "");
|
||
|
components[0] = "";
|
||
|
var path = normalizeUrl(components);
|
||
|
return protocol + host + path;
|
||
|
};
|