d9be72fdb393 | atagen | 2026-10-26 09:23 UTC | 1 | import { writable } from 'svelte/store'; |
d9be72fdb393 | atagen | 2026-10-26 09:23 UTC | 2 | import { mayAutoReload } from './engine-build'; |
d9be72fdb393 | atagen | 2026-10-26 09:23 UTC | 3 | |
d9be72fdb393 | atagen | 2026-10-26 09:23 UTC | 4 | const ENGINE_RELOAD_GUARD = 'malice-engine-reload'; |
d9be72fdb393 | atagen | 2026-10-26 09:23 UTC | 5 | |
d9be72fdb393 | atagen | 2026-10-26 09:23 UTC | 6 | export const engineStale = writable(false); |
d9be72fdb393 | atagen | 2026-10-26 09:23 UTC | 7 | export const engineRecovered = writable(0); |
d9be72fdb393 | atagen | 2026-10-26 09:23 UTC | 8 | |
d9be72fdb393 | atagen | 2026-10-26 09:23 UTC | 9 | function reloadWhenHidden(): void { |
d9be72fdb393 | atagen | 2026-10-26 09:23 UTC | 10 | if (document.visibilityState !== 'hidden') return; |
d9be72fdb393 | atagen | 2026-10-26 09:23 UTC | 11 | const last = Number(sessionStorage.getItem(ENGINE_RELOAD_GUARD)) || null; |
d9be72fdb393 | atagen | 2026-10-26 09:23 UTC | 12 | const now = Date.now(); |
d9be72fdb393 | atagen | 2026-10-26 09:23 UTC | 13 | if (!mayAutoReload(now, last)) return; |
d9be72fdb393 | atagen | 2026-10-26 09:23 UTC | 14 | sessionStorage.setItem(ENGINE_RELOAD_GUARD, String(now)); |
d9be72fdb393 | atagen | 2026-10-26 09:23 UTC | 15 | window.location.reload(); |
d9be72fdb393 | atagen | 2026-10-26 09:23 UTC | 16 | } |
d9be72fdb393 | atagen | 2026-10-26 09:23 UTC | 17 | |
d9be72fdb393 | atagen | 2026-10-26 09:23 UTC | 18 | export function markEngineStale(): void { |
d9be72fdb393 | atagen | 2026-10-26 09:23 UTC | 19 | engineStale.set(true); |
d9be72fdb393 | atagen | 2026-10-26 09:23 UTC | 20 | document.addEventListener('visibilitychange', reloadWhenHidden); |
d9be72fdb393 | atagen | 2026-10-26 09:23 UTC | 21 | reloadWhenHidden(); |
d9be72fdb393 | atagen | 2026-10-26 09:23 UTC | 22 | } |