use std::path::PathBuf;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum EntryMode {
#[default]
Shared,
Isolated,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct CodeSplittingConfig {
pub min_size: u32,
pub min_imports: u32,
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
pub enum ExternalConfig {
#[default]
None,
List(Vec<String>),
FromManifest(std::path::PathBuf),
}
impl CodeSplittingConfig {
#[inline]
pub fn new(min_size: u32, min_imports: u32) -> Self {
Self {
min_size,
min_imports,
}
}
pub(crate) fn to_rolldown_options(&self) -> rolldown::AdvancedChunksOptions {
rolldown::AdvancedChunksOptions {
min_size: Some(self.min_size as f64),
min_share_count: Some(self.min_imports),
max_size: None,
min_module_size: None,
max_module_size: None,
include_dependencies_recursively: None,
groups: Some(vec![]),
}
}
}
impl Default for CodeSplittingConfig {
fn default() -> Self {
Self {
min_size: 20_000,
min_imports: 2,
}
}
}
impl std::fmt::Display for EntryMode {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
EntryMode::Shared => write!(f, "shared"),
EntryMode::Isolated => write!(f, "isolated"),
}
}
}
impl std::fmt::Display for CodeSplittingConfig {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(
f,
"code_splitting(min_size={}, min_imports={})",
self.min_size, self.min_imports
)
}
}
impl std::fmt::Display for ExternalConfig {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
ExternalConfig::None => write!(f, "none"),
ExternalConfig::List(packages) => {
write!(f, "list({})", packages.join(", "))
}
ExternalConfig::FromManifest(path) => {
write!(f, "from_manifest({})", path.display())
}
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct IncrementalConfig {
pub cache_dir: PathBuf,
}
impl IncrementalConfig {
pub fn new(cache_dir: impl Into<PathBuf>) -> Self {
Self {
cache_dir: cache_dir.into(),
}
}
}
impl Default for IncrementalConfig {
fn default() -> Self {
Self::new(".fob-cache")
}
}
impl std::fmt::Display for IncrementalConfig {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "incremental({})", self.cache_dir.display())
}
}