feat(server): embed SPA via memory-serve behind embed-web feature
Adds `memory-serve` 2.1 as an optional workspace dependency, a `build.rs` that runs `load_directory` only when `CARGO_FEATURE_EMBED_WEB` is set, a `web_assets` module serving `web/dist` at `/` with SPA fallback (200 OK) for unknown client-side routes, and a feature-gated integration test. The default build (no feature) compiles and tests cleanly without `web/dist`. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
//! Serves the embedded SPA (built `web/dist`) at `/` with a client-side-routing
|
||||
//! fallback. Compiled only with the `embed-web` feature; in dev the SPA is served by
|
||||
//! Vite (which proxies `/api` to this server), so this module is absent.
|
||||
|
||||
use axum::{Router, http::StatusCode};
|
||||
|
||||
/// A router that serves the embedded `web/dist` assets, falling back to `index.html`
|
||||
/// for unknown paths so the SPA can own client-side routes.
|
||||
pub(crate) fn routes() -> Router {
|
||||
memory_serve::load!()
|
||||
.index_file(Some("/index.html"))
|
||||
.fallback(Some("/index.html"))
|
||||
.fallback_status(StatusCode::OK)
|
||||
.into_router()
|
||||
}
|
||||
Reference in New Issue
Block a user