From eb15b42ab1d5b77188222d04398fbf23f9a5f704 Mon Sep 17 00:00:00 2001 From: Drew Ridley <47063089+DrewRidley@users.noreply.github.com> Date: Sat, 24 May 2025 17:26:24 -0500 Subject: [PATCH] Enable serve_dioxus_application for WASM targets (#4170) * optional asset serving * optional asset serving * Add serve_api_application for WASM environments * fix cfg * remove old placeholder --- packages/server/src/server.rs | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/packages/server/src/server.rs b/packages/server/src/server.rs index d400878a2..80a56323f 100644 --- a/packages/server/src/server.rs +++ b/packages/server/src/server.rs @@ -177,6 +177,27 @@ pub trait DioxusRouterFnExt { /// } /// ``` fn register_server_functions_with_context(self, context_providers: ContextProviders) -> Self; + + /// Serves a Dioxus application without static assets. + /// Sets up server function routes and rendering endpoints only. + /// + /// Useful for WebAssembly environments or when static assets + /// are served by another system. + /// + /// # Example + /// ```rust, no_run + /// # use dioxus_lib::prelude::*; + /// # use dioxus_fullstack::prelude::*; + /// #[tokio::main] + /// async fn main() { + /// let router = axum::Router::new() + /// .serve_api_application(ServeConfig::new().unwrap(), app) + /// .into_make_service(); + /// // ... + /// } + fn serve_api_application(self, cfg: ServeConfig, app: fn() -> Element) -> Self + where + Self: Sized; } impl DioxusRouterFnExt for Router @@ -192,6 +213,20 @@ where } self } + + fn serve_api_application(self, cfg: ServeConfig, app: fn() -> Element) -> Self + where + Self: Sized, + { + let server = self.register_server_functions_with_context(cfg.context_providers.clone()); + + let ssr_state = SSRState::new(&cfg); + + server.fallback( + get(render_handler) + .with_state(RenderHandleState::new(cfg, app).with_ssr_state(ssr_state)), + ) + } } pub fn register_server_fn_on_router(