From 8f111b285bf6f51b80d35defbfb85e10cb327a50 Mon Sep 17 00:00:00 2001 From: Peder Bergan Date: Sat, 26 Sep 2026 11:07:10 +0200 Subject: [PATCH] Make configuration macros optional in dioxus --- packages/dioxus/Cargo.toml | 8 +++++--- packages/dioxus/src/lib.rs | 3 +++ packages/dioxus/tests/config_macros.rs | 24 ++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 packages/dioxus/tests/config_macros.rs diff --git a/packages/dioxus/Cargo.toml b/packages/dioxus/Cargo.toml index 40aa964977..2332d46931 100644 --- a/packages/dioxus/Cargo.toml +++ b/packages/dioxus/Cargo.toml @@ -12,7 +12,7 @@ rust-version = "1.85.0" [dependencies] dioxus-core = { workspace = true } -dioxus-config-macros = { workspace = true } +dioxus-config-macros = { workspace = true, optional = true } dioxus-html = { workspace = true, optional = true } dioxus-document = { workspace = true, optional = true } dioxus-history = { workspace = true, optional = true } @@ -63,7 +63,8 @@ lib = [ # The minimal set of features required to use dioxus renderers for minimal binary size minimal = ["macro", "html", "signals", "hooks", "launch"] signals = ["dep:dioxus-signals", "dep:dioxus-stores"] -macro = ["dep:dioxus-core-macro"] +macro = ["dep:dioxus-core-macro", "config-macros"] +config-macros = ["dep:dioxus-config-macros"] html = ["dep:dioxus-html"] hooks = ["dep:dioxus-hooks"] devtools = ["dep:dioxus-devtools", "dioxus-web?/devtools"] @@ -74,12 +75,13 @@ logger = ["dep:dioxus-logger"] cli-config = ["dep:dioxus-cli-config"] warnings = ["dep:warnings"] wasm-split = [ + "config-macros", "dep:wasm-splitter", "dioxus-config-macros/wasm-split", ] # note: to turn on the router splitter, you need to manually enable wasm-split on the router launch = ["dep:dioxus-config-macro"] -router = ["dep:dioxus-router"] +router = ["dep:dioxus-router", "config-macros"] # Platforms fullstack = [ diff --git a/packages/dioxus/src/lib.rs b/packages/dioxus/src/lib.rs index 2b5e54c26a..0f4a388d66 100644 --- a/packages/dioxus/src/lib.rs +++ b/packages/dioxus/src/lib.rs @@ -6,6 +6,7 @@ //! //! - `signals`: (default) re-exports `dioxus-signals` //! - `macro`: (default) re-exports `dioxus-macro` +//! - `config-macros`: (default) re-exports internal configuration macros; also enabled by `macro`, `router`, and `wasm-split` //! - `html`: (default) exports `dioxus-html` as the default elements to use in rsx //! - `hooks`: (default) re-exports `dioxus-hooks` //! - `hot-reload`: (default) enables hot rsx reloading in all renderers that support it @@ -128,6 +129,8 @@ pub use dioxus_ssr as ssr; #[cfg_attr(docsrs, doc(cfg(feature = "warnings")))] pub use warnings; +#[cfg(feature = "config-macros")] +#[cfg_attr(docsrs, doc(cfg(feature = "config-macros")))] pub use dioxus_config_macros as config_macros; #[cfg(feature = "wasm-split")] diff --git a/packages/dioxus/tests/config_macros.rs b/packages/dioxus/tests/config_macros.rs new file mode 100644 index 0000000000..41e8244251 --- /dev/null +++ b/packages/dioxus/tests/config_macros.rs @@ -0,0 +1,24 @@ +#[cfg(feature = "config-macros")] +#[test] +fn config_macro_selects_the_target_branch() { + let split = dioxus::config_macros::maybe_wasm_split! { + if wasm_split { { true } } else { { false } } + }; + assert_eq!( + split, + cfg!(all(feature = "wasm-split", target_arch = "wasm32")) + ); +} + +#[cfg(all(feature = "macro", not(target_arch = "wasm32")))] +#[test] +fn lazy_component_works_without_wasm_splitting() { + use dioxus::prelude::*; + + #[component(lazy)] + fn LazyComponent() -> Element { + VNode::empty() + } + + assert!(LazyComponent(()).is_ok()); +}