use crate::config::MinifyOptions;
use crate::{MinifyResult, MinifyStats};
use anyhow::{Context, Result};
use lightningcss::stylesheet::{
MinifyOptions as LightningMinifyOptions, ParserOptions, PrinterOptions, StyleSheet,
};
use std::time::Instant;
pub fn minify(source: &str, _options: &MinifyOptions) -> Result<MinifyResult> {
let start = Instant::now();
let original_size = source.len();
let mut stylesheet = StyleSheet::parse(source, ParserOptions::default())
.map_err(|e| anyhow::anyhow!("Failed to parse CSS: {e:?}"))?;
stylesheet
.minify(LightningMinifyOptions::default())
.map_err(|e| anyhow::anyhow!("Failed to minify CSS: {e:?}"))?;
let minified_code = stylesheet
.to_css(PrinterOptions {
minify: true,
..Default::default()
})
.context("Failed to generate minified CSS")?;
let minified_size = minified_code.code.len();
let elapsed = start.elapsed();
let stats =
MinifyStats::with_sizes(original_size, minified_size).with_time(elapsed.as_millis());
Ok(MinifyResult {
code: minified_code.code,
map: None, stats,
})
}