71 lines
2.0 KiB
JavaScript
71 lines
2.0 KiB
JavaScript
(function () {
|
|
"use strict";
|
|
|
|
const DEFAULT_DEV_BACKEND = "http://127.0.0.1:8000";
|
|
|
|
function isLocalHost(hostname) {
|
|
return hostname === "localhost" || hostname === "127.0.0.1" || hostname === "::1";
|
|
}
|
|
|
|
function hasOwn(object, property) {
|
|
return Object.prototype.hasOwnProperty.call(object || {}, property);
|
|
}
|
|
|
|
function resolveConfiguredBackendBaseUrl() {
|
|
const explicitConfig = window.HLL_FRONTEND_CONFIG || {};
|
|
if (hasOwn(explicitConfig, "backendBaseUrl")) {
|
|
return String(explicitConfig.backendBaseUrl || "");
|
|
}
|
|
|
|
const body = document.body;
|
|
if (body && body.dataset && hasOwn(body.dataset, "backendBaseUrl")) {
|
|
const bodyValue = body.dataset.backendBaseUrl;
|
|
if (bodyValue === DEFAULT_DEV_BACKEND && !isLocalHost(window.location.hostname)) {
|
|
return "";
|
|
}
|
|
return String(bodyValue || "");
|
|
}
|
|
|
|
return isLocalHost(window.location.hostname) ? DEFAULT_DEV_BACKEND : "";
|
|
}
|
|
|
|
function rewriteUrl(input) {
|
|
const configuredBaseUrl = resolveConfiguredBackendBaseUrl();
|
|
if (typeof input !== "string") {
|
|
return input;
|
|
}
|
|
|
|
if (configuredBaseUrl === "") {
|
|
if (input.startsWith(`${DEFAULT_DEV_BACKEND}/`)) {
|
|
return input.slice(DEFAULT_DEV_BACKEND.length);
|
|
}
|
|
return input;
|
|
}
|
|
|
|
if (input.startsWith(`${DEFAULT_DEV_BACKEND}/`)) {
|
|
return `${configuredBaseUrl}${input.slice(DEFAULT_DEV_BACKEND.length)}`;
|
|
}
|
|
|
|
return input;
|
|
}
|
|
|
|
const nativeFetch = window.fetch.bind(window);
|
|
window.fetch = function hllConfiguredFetch(input, init) {
|
|
if (typeof input === "string") {
|
|
return nativeFetch(rewriteUrl(input), init);
|
|
}
|
|
if (input instanceof Request) {
|
|
const rewrittenUrl = rewriteUrl(input.url);
|
|
if (rewrittenUrl !== input.url) {
|
|
return nativeFetch(new Request(rewrittenUrl, input), init);
|
|
}
|
|
}
|
|
return nativeFetch(input, init);
|
|
};
|
|
|
|
window.HLL_FRONTEND_CONFIG = Object.freeze({
|
|
...window.HLL_FRONTEND_CONFIG,
|
|
backendBaseUrl: resolveConfiguredBackendBaseUrl(),
|
|
});
|
|
})();
|