use autumn_web::assets::{PluginAsset, PluginAssets};
use maud::Markup;
use crate::assets::{LEPTOS_ASSETS, LOADER_JS};
use crate::plugin::wasm_pairs;
#[must_use]
pub fn leptos_script() -> Markup {
LEPTOS_ASSETS.deferred_script_tag(LOADER_JS)
}
#[must_use]
pub fn leptos_bundle(bundle: &PluginAssets) -> Markup {
let has_ext = |asset: &PluginAsset, ext: &str| {
std::path::Path::new(asset.logical_path())
.extension()
.is_some_and(|e| e.eq_ignore_ascii_case(ext))
};
let css = bundle.iter().filter(|asset| has_ext(asset, "css"));
let pairs: Vec<_> = wasm_pairs(bundle).collect();
let snippets = bundle.iter().filter(|asset| {
has_ext(asset, "js") && !pairs.iter().any(|(glue, _)| std::ptr::eq(*glue, *asset))
});
maud::html! {
@for asset in css { (bundle.stylesheet_tag(asset.logical_path())) }
@for (glue, wasm) in &pairs {
link rel="modulepreload" href=(glue.url()) integrity=(glue.integrity())
crossorigin="anonymous" data-leptos-wasm=(wasm.url())
data-leptos-wasm-integrity=(wasm.integrity());
link rel="preload" href=(wasm.url()) as="fetch" type="application/wasm"
integrity=(wasm.integrity()) crossorigin="anonymous";
}
@for snippet in snippets {
link rel="modulepreload" href=(snippet.plain_url())
integrity=(snippet.integrity()) crossorigin="anonymous";
}
}
}