import { createRoot } from "react-dom/client"; import { setupBrowserNotifications } from "mastodon/actions/notifications"; import Mastodon from "mastodon/containers/mastodon"; import { me } from "mastodon/initial_state"; import * as perf from "mastodon/performance"; import ready from "mastodon/ready"; import { store } from "mastodon/store"; /** * @returns {Promise} */ function main() { perf.start("main()"); return ready(async () => { const mountNode = document.getElementById("mastodon"); const props = JSON.parse(mountNode.getAttribute("data-props")); const root = createRoot(mountNode); root.render(); store.dispatch(setupBrowserNotifications()); if (process.env.NODE_ENV === "production" && me && "serviceWorker" in navigator) { const { Workbox } = await import("workbox-window"); const wb = new Workbox("/sw.js"); /** @type {ServiceWorkerRegistration} */ let registration; try { registration = await wb.register(); } catch (err) { console.error(err); } if (registration && "Notification" in window && Notification.permission === "granted") { const registerPushNotifications = await import("mastodon/actions/push_notifications"); store.dispatch(registerPushNotifications.register()); } } perf.stop("main()"); }); } export default main;