one
Version:
One is a new React Framework that makes Vite serve both native and web.
86 lines (85 loc) • 2.43 kB
JavaScript
import { CACHE_KEY } from "./constants.native.js";
import { getURL } from "./getURL.native.js";
import { handleSkewError } from "./utils/dynamicImport.native.js";
var stale = false;
var polling = null;
var inFlightCheck = null;
function isVersionStale() {
if (stale) return true;
if (typeof window !== "undefined" && window.__oneVersionStale) return true;
return false;
}
function markStale(version) {
stale = true;
if (typeof window !== "undefined") {
;
window.__oneVersionStale = true;
window.dispatchEvent(new CustomEvent("one-version-update", {
detail: {
version
}
}));
}
}
function checkSkewAndReload() {
if (typeof window === "undefined") return Promise.resolve(false);
if (process.env.ONE_SKEW_PROTECTION === "false") return Promise.resolve(false);
if (isVersionStale()) {
handleSkewError();
return Promise.resolve(true);
}
if (inFlightCheck) return inFlightCheck;
inFlightCheck = async function () {
try {
var res = await fetch(`${getURL()}/version.json`, {
headers: {
"cache-control": "no-cache",
pragma: "no-cache"
}
});
if (!res.ok) return false;
var data = await res.json();
if (data.version && data.version !== CACHE_KEY) {
markStale(data.version);
handleSkewError();
return true;
}
return false;
} catch (unused) {
return false;
} finally {
inFlightCheck = null;
}
}();
return inFlightCheck;
}
function setupSkewProtection() {
if (typeof window === "undefined") return;
if (process.env.NODE_ENV === "development") return;
if (process.env.ONE_SKEW_PROTECTION !== "proactive") return;
var POLL_INTERVAL = 12e4;
var baseUrl = getURL();
async function check() {
try {
var res = await fetch(`${baseUrl}/version.json`, {
headers: {
"cache-control": "no-cache",
pragma: "no-cache"
}
});
if (!res.ok) {
polling = setTimeout(check, POLL_INTERVAL);
return;
}
var data = await res.json();
if (data.version !== CACHE_KEY) {
markStale(data.version);
return;
}
} catch (unused) {}
polling = setTimeout(check, POLL_INTERVAL);
}
polling = setTimeout(check, POLL_INTERVAL);
}
export { checkSkewAndReload, isVersionStale, setupSkewProtection };
//# sourceMappingURL=skewProtection.native.js.map