entry-server.tsx 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. // @refresh reload
  2. import { createHandler, StartServer } from "@solidjs/start/server"
  3. import { getRequestEvent } from "solid-js/web"
  4. import { dir, localeFromRequest, tag } from "./lib/language"
  5. const statsThemePreloadScript = `;(function () {
  6. var preference = "system"
  7. try {
  8. var stored = localStorage.getItem("opencode:stats-theme")
  9. if (stored === "dark" || stored === "light" || stored === "system") preference = stored
  10. } catch (_) {}
  11. document.documentElement.dataset.statsTheme = preference
  12. if (preference === "system") document.documentElement.style.removeProperty("color-scheme")
  13. else document.documentElement.style.setProperty("color-scheme", preference)
  14. })()`
  15. export default createHandler(
  16. () => (
  17. <StartServer
  18. document={({ assets, children, scripts }) => {
  19. const event = getRequestEvent()
  20. const locale = event ? localeFromRequest(event.request) : "en"
  21. return (
  22. <html lang={tag(locale)} dir={dir(locale)} data-locale={locale}>
  23. <head>
  24. <meta charset="utf-8" />
  25. <meta name="viewport" content="width=device-width, initial-scale=1" />
  26. <script id="stats-theme-preload-script">{statsThemePreloadScript}</script>
  27. {assets}
  28. </head>
  29. <body>
  30. <div id="app">{children}</div>
  31. {scripts}
  32. </body>
  33. </html>
  34. )
  35. }}
  36. />
  37. ),
  38. {
  39. mode: "async",
  40. },
  41. )