use std::path::PathBuf;
#[derive(Debug, Clone)]
pub struct PageBuild {
pub crate_name: String,
pub bundle_key: String,
pub css_sources: Vec<String>,
}
impl PageBuild {
pub fn short_name(&self) -> &str {
self.crate_name
.strip_prefix("page-")
.unwrap_or(&self.crate_name)
}
pub fn underscore_name(&self) -> String {
self.crate_name.replace('-', "_")
}
}
#[derive(Debug, Clone)]
pub struct RuntimeBuild {
pub package: String,
pub nav: bool,
}
impl Default for RuntimeBuild {
fn default() -> Self {
Self {
package: "islands-runtime".to_owned(),
nav: true,
}
}
}
#[derive(Debug, Clone)]
pub struct CssConfig {
pub base_css: PathBuf,
pub assets_css_dir: PathBuf,
pub theme_reference: String,
pub basecoat: bool,
}
#[derive(Debug, Clone)]
pub struct BuildPlan {
pub workspace_root: PathBuf,
pub out_dir: PathBuf,
pub release: bool,
pub runtime: RuntimeBuild,
pub pages: Vec<PageBuild>,
pub css: Option<CssConfig>,
pub manifest: bool,
}
impl BuildPlan {
pub(crate) fn wasm_artifact_dir(&self) -> PathBuf {
let profile = if self.release { "release" } else { "debug" };
self.workspace_root
.join("target")
.join("wasm32-unknown-unknown")
.join(profile)
}
pub(crate) fn runtime_out_dir(&self) -> PathBuf {
self.out_dir.join("islands-core")
}
pub(crate) fn page_out_dir(&self, page: &PageBuild) -> PathBuf {
self.out_dir.join(&page.bundle_key)
}
}