proxy_url_formatter.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. /**
  2. * DevExtreme (data/proxy_url_formatter.js)
  3. * Version: 19.1.16
  4. * Build date: Tue Oct 18 2022
  5. *
  6. * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED
  7. * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
  8. */
  9. "use strict";
  10. var each = require("../core/utils/iterator").each;
  11. var domAdapter = require("../core/dom_adapter");
  12. var window = require("../core/utils/window").getWindow();
  13. var callOnce = require("../core/utils/call_once");
  14. var DXPROXY_HOST = "dxproxy.devexpress.com:8000";
  15. var urlMapping = {};
  16. var getUrlParser = callOnce(function() {
  17. var a = domAdapter.createElement("a");
  18. var props = ["protocol", "hostname", "port", "pathname", "search", "hash"];
  19. var normalizePath = function(value) {
  20. if ("/" !== value.charAt(0)) {
  21. value = "/" + value
  22. }
  23. return value
  24. };
  25. return function(url) {
  26. a.href = url;
  27. var result = {};
  28. each(props, function() {
  29. result[this] = a[this]
  30. });
  31. result.pathname = normalizePath(result.pathname);
  32. return result
  33. }
  34. });
  35. var parseUrl = function(url) {
  36. var urlParser = getUrlParser();
  37. return urlParser(url)
  38. };
  39. var extractProxyAppId = function() {
  40. return window.location.pathname.split("/")[1]
  41. };
  42. module.exports = {
  43. parseUrl: parseUrl,
  44. isProxyUsed: function() {
  45. return window.location.host === DXPROXY_HOST
  46. },
  47. formatProxyUrl: function(localUrl) {
  48. var urlData = parseUrl(localUrl);
  49. if (!/^(localhost$|127\.)/i.test(urlData.hostname)) {
  50. return localUrl
  51. }
  52. var proxyUrlPart = DXPROXY_HOST + "/" + extractProxyAppId() + "_" + urlData.port;
  53. urlMapping[proxyUrlPart] = urlData.hostname + ":" + urlData.port;
  54. var resultUrl = "http://" + proxyUrlPart + urlData.pathname + urlData.search;
  55. return resultUrl
  56. },
  57. formatLocalUrl: function(proxyUrl) {
  58. if (proxyUrl.indexOf(DXPROXY_HOST) < 0) {
  59. return proxyUrl
  60. }
  61. var resultUrl = proxyUrl;
  62. for (var proxyUrlPart in urlMapping) {
  63. if (Object.prototype.hasOwnProperty.call(urlMapping, proxyUrlPart)) {
  64. if (proxyUrl.indexOf(proxyUrlPart) >= 0) {
  65. resultUrl = proxyUrl.replace(proxyUrlPart, urlMapping[proxyUrlPart]);
  66. break
  67. }
  68. }
  69. }
  70. return resultUrl
  71. }
  72. };