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.
3.1 KiB
Test harnesses
This folder contains a series of CLI harnesses that represent common structures of dioxus apps.
We test these projects as a form of smoke testing to ensure our argument resolution works properly.
These projects might not be functionally useful, but they do have interesting properties that the CLI tests.
The tests for the CLI are contained within the CLI itself.
This Folder
The items in this folder are procedurally generated by tests in the CLI crate. We will delete EVERYTHING that ends up here.
How platform resolution works
Determine which features, triple, profile, etc to pass to the build.
Most of the time, users should use dx serve --<platform> where the platform name directly
corresponds to the feature in their cargo.toml. So,
dx serve --webwill enable thewebfeaturedx serve --mobilewill enable themobilefeaturedx serve --desktopwill enable thedesktopfeature
In this case, we set default-features to false and then add back the default features that aren't renderers, and then add the feature for the given renderer (ie web/desktop/mobile). We call this "no-default-features-stripped."
There are a few cases where the user doesn't need to pass a platform.
- they selected one via
dioxus = { features = ["web"] } - they have a single platform in their default features
default = ["web"] - there is only a single non-server renderer as a feature
web = ["dioxus/web"], server = ["dioxus/server"] - they compose the super triple via triple + bundleformat + features
Note that we only use the names of the features to correspond with the platform. Platforms are "super triples", meaning they contain information about
- bundle format
- target triple
- how to serve
- enabled features
By default, the --platform presets correspond to:
- web: bundle(web), triple(wasm32), serve(http-serve), features("web")
- desktop: alias to mac/win/linux
- mac: bundle(mac), triple(host), serve(appbundle-open), features("desktop")
- windows: bundle(exefolder), triple(host), serve(run-exe), features("desktop")
- linux: bundle(appimage), triple(host), serve(run-exe), features("desktop")
- ios: bundle(ios), triple(arm64-apple-ios), serve(ios-simulator/xcrun), features("mobile")
- android: bundle(android), triple(arm64-apple-ios), serve(android-emulator/adb), features("mobile")
- server: bundle(server), triple(host), serve(run-exe), features("server")
- liveview: bundle(liveview), triple(host), serve(run-exe), features("liveview")
- unknown:
Fullstack usage is inferred from the presence of the fullstack feature or --fullstack.
List of harnesses (brainstorming)
- app that doesn't use dioxus
- simple app where the renderer is used as an explicit feature
- simple app, same as above, but with fullstack enabled
- since no
serverfeature is present, we don't run the server
- since no
- simple app, same as above, but with a
serverfeature- server should launch and take precedence over the client
- simple server-only app
- IE you're doing SSR with dioxus