UNPKG

one

Version:

One is a new React Framework that makes Vite serve both native and web.

50 lines (43 loc) 1.46 kB
import { CACHE_KEY } from './constants' import { getURL } from './getURL' let stale = false let polling: ReturnType<typeof setTimeout> | null = null export function isVersionStale() { if (stale) return true // also check window flag so external code can mark stale if (typeof window !== 'undefined' && (window as any).__oneVersionStale) return true return false } export function setupSkewProtection() { if (typeof window === 'undefined') return if (process.env.NODE_ENV === 'development') return if (process.env.ONE_SKEW_PROTECTION !== 'proactive') return const POLL_INTERVAL = 120_000 // 2 minutes const baseUrl = getURL() async function check() { try { const res = await fetch(`${baseUrl}/version.json`, { headers: { 'cache-control': 'no-cache', pragma: 'no-cache' }, }) if (!res.ok) { // transient error, keep polling polling = setTimeout(check, POLL_INTERVAL) return } const data = await res.json() if (data.version !== CACHE_KEY) { stale = true ;(window as any).__oneVersionStale = true window.dispatchEvent( new CustomEvent('one-version-update', { detail: { version: data.version } }) ) // stop polling once stale detected return } } catch { // network error, keep polling } polling = setTimeout(check, POLL_INTERVAL) } polling = setTimeout(check, POLL_INTERVAL) }