normalize-url.js 953 B

123456789101112131415161718192021222324252627282930313233343536373839
  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. }, /** @type {string[]} */[]).join("/");
  20. }
  21. /**
  22. * @param {string} urlString
  23. * @returns {string}
  24. */
  25. module.exports = function (urlString) {
  26. urlString = urlString.trim();
  27. if (/^data:/i.test(urlString)) {
  28. return urlString;
  29. }
  30. var protocol = urlString.indexOf("//") !== -1 ? urlString.split("//")[0] + "//" : "";
  31. var components = urlString.replace(new RegExp(protocol, "i"), "").split("/");
  32. var host = components[0].toLowerCase().replace(/\.$/, "");
  33. components[0] = "";
  34. var path = normalizeUrl(components);
  35. return protocol + host + path;
  36. };