Spaces:
Sleeping
Sleeping
| from __future__ import annotations | |
| import mimetypes | |
| import os | |
| from http.server import SimpleHTTPRequestHandler, ThreadingHTTPServer | |
| from pathlib import Path | |
| ROOT = Path(__file__).resolve().parent | |
| DIST = ROOT / "dist" | |
| PORT = int(os.environ.get("PORT", "7860")) | |
| mimetypes.add_type("application/javascript", ".js") | |
| mimetypes.add_type("text/css", ".css") | |
| mimetypes.add_type("application/wasm", ".wasm") | |
| class Handler(SimpleHTTPRequestHandler): | |
| def __init__(self, *args, **kwargs): | |
| super().__init__(*args, directory=str(DIST), **kwargs) | |
| def end_headers(self): | |
| self.send_header("Cross-Origin-Embedder-Policy", "require-corp") | |
| self.send_header("Cross-Origin-Opener-Policy", "same-origin") | |
| self.send_header("Cross-Origin-Resource-Policy", "cross-origin") | |
| self.send_header("Access-Control-Allow-Origin", "*") | |
| super().end_headers() | |
| def translate_path(self, path): | |
| resolved = Path(super().translate_path(path)) | |
| if resolved.is_dir(): | |
| return str(DIST / "index.html") | |
| if not resolved.exists() and not path.startswith("/assets/"): | |
| return str(DIST / "index.html") | |
| return str(resolved) | |
| def log_message(self, format, *args): | |
| print(f"{self.address_string()} - {format % args}", flush=True) | |
| if __name__ == "__main__": | |
| if not (DIST / "index.html").exists(): | |
| raise SystemExit("dist/index.html is missing. Run `npm run build` before deploying.") | |
| server = ThreadingHTTPServer(("0.0.0.0", PORT), Handler) | |
| print(f"Serving {DIST} on 0.0.0.0:{PORT}", flush=True) | |
| server.serve_forever() | |