import './index.css'; import './cloak-mode.css'; import './polyfills'; import { i18n } from '@lingui/core'; import { I18nProvider } from '@lingui/react'; // Polyfill needed for Firefox < 122 // https://bugzilla.mozilla.org/show_bug.cgi?id=1423593 // import '@formatjs/intl-segmenter/polyfill'; import { render } from 'preact'; import { HashRouter } from 'react-router-dom'; import { App } from './app'; import { initActivateLang } from './utils/lang'; initActivateLang(); if (import.meta.env.DEV) { import('preact/debug'); } render( , document.getElementById('app'), ); // Storage cleanup setTimeout(() => { try { // Clean up iconify localStorage Object.keys(localStorage).forEach((key) => { if (key.startsWith('iconify')) { localStorage.removeItem(key); } }); Object.keys(sessionStorage).forEach((key) => { if (key.startsWith('iconify')) { sessionStorage.removeItem(key); } }); // Clean up old settings key localStorage.removeItem('settings:boostsCarousel'); } catch (e) {} }, 5000); // Service worker cache cleanup if ('serviceWorker' in navigator && typeof caches !== 'undefined') { const MAX_SW_CACHE_SIZE = 300; let swInterval = setInterval(() => { if (window.__IDLE__) { clearInterval(swInterval); (async () => { const keys = await caches.keys(); for (const key of keys) { const cache = await caches.open(key); const _keys = await cache.keys(); if (_keys.length > MAX_SW_CACHE_SIZE) { console.warn('Cleaning cache', key, _keys.length); const deleteKeys = _keys.slice(MAX_SW_CACHE_SIZE); for (const deleteKey of deleteKeys) { await cache.delete(deleteKey); } } } })(); } }, 15_000); } window.__CLOAK__ = () => { document.body.classList.toggle('cloak'); };