from aiohttp import web import mimetypes from ..config import Config mimetypes.add_type("application/javascript", ".js") mimetypes.add_type("application/javascript", ".jsx") mimetypes.add_type("text/javascript", ".js") mimetypes.add_type("text/javascript", ".jsx") class Static: def __init__(self, app: web.Application, config: Config): self._config = config app.router.add_get("/", self._serve_index) app.router.add_static("/static/", self._config.static_files, show_index=False) app.router.add_static("/assets/", self._config.static_files / "assets", show_index=False) app.router.add_get("/{path:.*}", self._serve_index) async def _serve_index(self, request: web.Request) -> web.Response: """Serve the React application HTML for any unmatched routes.""" index_path = self._config.static_files / "index.html" if not index_path.exists(): raise web.HTTPNotFound() with open(index_path, "r") as f: html_content = f.read() return web.Response( text=html_content, content_type="text/html" )