normalize-url.js 964 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. "use strict";
  2. /* eslint-disable */
  3. /**
  4. * @param {string[]} pathComponents
  5. * @returns {string}
  6. */
  7. function normalizeUrl(pathComponents) {
  8. return pathComponents.reduce(function (accumulator, item) {
  9. switch (item) {
  10. case "..":
  11. accumulator.pop();
  12. break;
  13. case ".":
  14. break;
  15. default:
  16. accumulator.push(item);
  17. }
  18. return accumulator;
  19. },
  20. /** @type {string[]} */
  21. []).join("/");
  22. }
  23. /**
  24. * @param {string} urlString
  25. * @returns {string}
  26. */
  27. module.exports = function (urlString) {
  28. urlString = urlString.trim();
  29. if (/^data:/i.test(urlString)) {
  30. return urlString;
  31. }
  32. var protocol = urlString.indexOf("//") !== -1 ? urlString.split("//")[0] + "//" : "";
  33. var components = urlString.replace(new RegExp(protocol, "i"), "").split("/");
  34. var host = components[0].toLowerCase().replace(/\.$/, "");
  35. components[0] = "";
  36. var path = normalizeUrl(components);
  37. return protocol + host + path;
  38. };