function normalizeUrl(pathComponents){ return pathComponents.reduce(function (accumulator, item){ switch (item){ case "..": accumulator.pop(); break ; case ".": break ; default : { accumulator.push(item); } } return accumulator; } , ([] )).join("/"); } module.exports = function (urlString){ urlString = urlString.trim(); if (/^data:/i.test(urlString)) { return urlString; } var protocol = urlString.indexOf("//") !== -1? urlString.split("//")[0] + "//": ""; var components = _AN_Call_replace("replace", urlString, new RegExp(protocol, "i"), "").split("/"); var host = _AN_Call_replace("replace", components[0].toLowerCase(), /\.$/, ""); components[0] = ""; var path = normalizeUrl(components); return protocol + host + path; } ;