/ src / main.jsx
main.jsx
 1  import './index.css';
 2  
 3  import './cloak-mode.css';
 4  
 5  import { render } from 'preact';
 6  import { HashRouter } from 'react-router-dom';
 7  
 8  import { App } from './app';
 9  import { Analytics } from '@vercel/analytics/react';
10  import "@storedotapp/pwa-install-dialog";
11  
12  
13  if (import.meta.env.DEV) {
14    import('preact/debug');
15  }
16  
17  // AbortSignal.timeout polyfill
18  // Temporary fix from https://github.com/mo/abortcontroller-polyfill/issues/73#issuecomment-1541180943
19  // Incorrect implementation, but should be good enough for now
20  if ('AbortSignal' in window) {
21    AbortSignal.timeout =
22      AbortSignal.timeout ||
23      ((duration) => {
24        const controller = new AbortController();
25        setTimeout(() => controller.abort(), duration);
26        return controller.signal;
27      });
28  }
29  
30  render(
31    <HashRouter>
32      <App />
33      <Analytics />
34    </HashRouter>,
35    document.getElementById('app'),
36  );
37  
38  // Storage cleanup
39  setTimeout(() => {
40    try {
41      // Clean up iconify localStorage
42      Object.keys(localStorage).forEach((key) => {
43        if (key.startsWith('iconify')) {
44          localStorage.removeItem(key);
45        }
46      });
47      Object.keys(sessionStorage).forEach((key) => {
48        if (key.startsWith('iconify')) {
49          sessionStorage.removeItem(key);
50        }
51      });
52  
53      // Clean up old settings key
54      localStorage.removeItem('settings:boostsCarousel');
55    } catch (e) {}
56  }, 5000);
57  
58  window.__CLOAK__ = () => {
59    document.body.classList.toggle('cloak');
60  };