codify "platform" into resolution logic, server-fn/fullstack overhaul (#4596)

overhaul dioxus fullstack using a new implementation of server_fn

This PR is a complete rewrite of dioxus fullstack designed to improve compatibility with axum and to fix a number of compilation errors based on feature flag unification plumbing through macros.
This commit is contained in:
Jonathan Kelley authored and GitHub committed 2025-10-03 18:26:19 -07:00
1 parent 8421c3aef0
commit f2b1c6d97f
424 files changed
+17284 -6624

No files matched your search

+20 -14
View File
@@ -24,17 +24,17 @@ dioxus-signals = { workspace = true, optional = true }
dioxus-router = { workspace = true, optional = true }
dioxus-web = { workspace = true, default-features = false, optional = true }
dioxus-desktop = { workspace = true, default-features = true, optional = true }
dioxus-fullstack = { workspace = true, default-features = true, optional = true }
dioxus-liveview = { workspace = true, optional = true }
dioxus-server = { workspace = true, optional = true }
dioxus-ssr = { workspace = true, optional = true }
dioxus-native = { workspace = true, optional = true }
dioxus_server_macro = { workspace = true, optional = true }
dioxus-server = { workspace = true, default-features = true, optional = true }
dioxus-fullstack = { workspace = true, default-features = true, optional = true }
dioxus-fullstack-macro = { workspace = true, optional = true }
dioxus-asset-resolver = { workspace = true, optional = true }
manganis = { workspace = true, features = ["dioxus"], optional = true }
dioxus-logger = { workspace = true, optional = true }
warnings = { workspace = true, optional = true }
wasm-splitter = { workspace = true, package = "wasm-split", optional = true }
wasm-splitter = { workspace = true, optional = true }
subsecond = { workspace = true }
serde = { workspace = true, optional = true }
@@ -55,7 +55,6 @@ lib = [
"signals",
"hooks",
"mounted",
"file_engine",
"document",
"asset",
"warnings",
@@ -67,9 +66,8 @@ signals = ["dep:dioxus-signals", "dep:dioxus-stores"]
macro = ["dep:dioxus-core-macro"]
html = ["dep:dioxus-html"]
hooks = ["dep:dioxus-hooks"]
devtools = ["dep:dioxus-devtools", "dioxus-web?/devtools", "dioxus-fullstack?/devtools"]
devtools = ["dep:dioxus-devtools", "dioxus-web?/devtools"]
mounted = ["dioxus-web?/mounted"]
file_engine = ["dioxus-web?/file_engine"]
asset = ["dep:manganis", "dep:dioxus-asset-resolver"]
document = ["dioxus-web?/document", "dep:dioxus-document", "dep:dioxus-history"]
logger = ["dep:dioxus-logger"]
@@ -84,9 +82,19 @@ launch = ["dep:dioxus-config-macro"]
router = ["dep:dioxus-router"]
# Platforms
fullstack = ["dep:dioxus-fullstack", "dioxus-config-macro/fullstack", "dep:serde"]
desktop = ["dep:dioxus-desktop", "dioxus-fullstack?/desktop", "dioxus-config-macro/desktop"]
mobile = ["dep:dioxus-desktop", "dioxus-fullstack?/mobile", "dioxus-config-macro/mobile"]
fullstack = [
"dep:dioxus-fullstack",
"dioxus-config-macro/fullstack",
"dep:serde",
"dioxus-web?/document",
"dioxus-web?/hydrate",
"dioxus-server?/document",
"dioxus-web?/devtools",
"dioxus-web?/mounted",
"dioxus-web?/document"
]
desktop = ["dep:dioxus-desktop", "dioxus-config-macro/desktop"]
mobile = ["dep:dioxus-desktop", "dioxus-config-macro/mobile"]
web = [
"dep:dioxus-web",
"dioxus-fullstack?/web",
@@ -100,12 +108,10 @@ liveview = ["dep:dioxus-liveview", "dioxus-config-macro/liveview"]
native = ["dep:dioxus-native"] # todo(jon): decompose the desktop crate such that "webview" is the default and native is opt-in
server = [
"dep:dioxus-server",
"dep:dioxus_server_macro",
"dioxus_server_macro/server",
"dioxus_server_macro/axum",
"dioxus-fullstack?/server",
"dep:dioxus-fullstack-macro",
"ssr",
"dioxus-liveview?/axum",
"dioxus-fullstack?/server",
]
# This feature just disables the no-renderer-enabled warning
+6 -3
View File
@@ -40,9 +40,12 @@ use crate::prelude::*;
///
/// # Example
/// ```rust, no_run
/// # use dioxus::prelude::*;
/// use dioxus::prelude::*;
///
/// fn main() {
/// dioxus::launch(app);
/// }
///
/// dioxus::launch(app);
/// fn app() -> Element {
/// rsx! {
/// div { "Hello, world!" }
@@ -299,7 +302,7 @@ impl LaunchBuilder {
// Set any flags if we're running under fullstack
#[cfg(feature = "fullstack")]
{
use dioxus_fullstack::server_fn::client::{get_server_url, set_server_url};
use dioxus_fullstack::{get_server_url, set_server_url};
// Make sure to set the server_fn endpoint if the user specified the fullstack feature
// We only set this on native targets
+16 -8
View File
@@ -27,7 +27,7 @@
pub use dioxus_core;
#[doc(inline)]
pub use dioxus_core::{CapturedError, Ok, Result};
pub use dioxus_core::{CapturedError, Error, Ok, Result};
#[cfg(feature = "launch")]
#[cfg_attr(docsrs, doc(cfg(feature = "launch")))]
@@ -85,6 +85,9 @@ pub use dioxus_cli_config as cli_config;
#[cfg_attr(docsrs, doc(cfg(feature = "server")))]
pub use dioxus_server as server;
#[cfg(feature = "server")]
pub use dioxus_server::serve;
#[cfg(feature = "devtools")]
#[cfg_attr(docsrs, doc(cfg(feature = "devtools")))]
pub use dioxus_devtools as devtools;
@@ -158,7 +161,7 @@ pub mod prelude {
#[cfg(feature = "signals")]
#[cfg_attr(docsrs, doc(cfg(feature = "signals")))]
#[doc(inline)]
pub use dioxus_signals::*;
pub use dioxus_signals::{self, *};
#[cfg(feature = "signals")]
pub use dioxus_stores::{self, store, use_store, GlobalStore, ReadStore, Store, WriteStore};
@@ -200,14 +203,16 @@ pub mod prelude {
#[cfg_attr(docsrs, doc(cfg(feature = "fullstack")))]
#[doc(inline)]
pub use dioxus_fullstack::{
server, server_fn, use_server_cached, use_server_future, ServerFnError, ServerFnResult,
self as dioxus_fullstack, delete, get, patch, post, put, server, use_loader,
use_server_cached, use_server_future, HttpError, OrHttpError, ServerFnError,
ServerFnResult,
};
#[cfg(feature = "server")]
#[cfg_attr(docsrs, doc(cfg(feature = "server")))]
#[doc(inline)]
pub use dioxus_server::{
extract, DioxusRouterExt, DioxusRouterFnExt, FromContext, ServeConfig,
self, serve, DioxusRouterExt, DioxusRouterFnExt, ServeConfig, ServerFunction,
};
#[cfg(feature = "router")]
@@ -233,9 +238,12 @@ pub mod prelude {
#[doc(inline)]
pub use dioxus_core::{
consume_context, provide_context, spawn, suspend, try_consume_context, use_hook, Attribute,
Callback, Component, Context, Element, ErrorBoundary, ErrorContext, Event, EventHandler,
Fragment, HasAttributes, IntoDynNode, RenderError, ScopeId, SuspenseBoundary,
SuspenseContext, SuspenseExtension, VNode, VirtualDom,
consume_context, provide_context, spawn, suspend, try_consume_context, use_hook,
AnyhowContext, Attribute, Callback, Component, Element, ErrorBoundary, ErrorContext, Event,
EventHandler, Fragment, HasAttributes, IntoDynNode, RenderError, Result, ScopeId,
SuspenseBoundary, SuspenseContext, VNode, VirtualDom,
};
#[cfg(feature = "logger")]
pub use dioxus_logger::tracing::{debug, error, info, trace, warn};
}