2022-06-21 03:29:12 -04:00
|
|
|
use std::str::from_utf8_unchecked;
|
2021-08-07 04:51:22 -04:00
|
|
|
|
2021-08-06 02:17:45 -04:00
|
|
|
use crate::cfg::Cfg;
|
2021-08-10 03:35:14 -04:00
|
|
|
use crate::common::whitespace::trimmed;
|
2022-06-21 03:29:12 -04:00
|
|
|
use css_minify::optimizations::{Level, Minifier};
|
2021-08-06 02:17:45 -04:00
|
|
|
|
2021-08-07 04:51:22 -04:00
|
|
|
pub fn minify_css(cfg: &Cfg, out: &mut Vec<u8>, code: &[u8]) {
|
2022-06-21 03:29:12 -04:00
|
|
|
if cfg.minify_css {
|
2023-02-16 03:23:03 -05:00
|
|
|
let result = Minifier::default().minify(
|
|
|
|
unsafe { from_utf8_unchecked(code) },
|
|
|
|
if cfg.minify_css_level_1 {
|
|
|
|
Level::One
|
|
|
|
} else if cfg.minify_css_level_2 {
|
|
|
|
Level::Two
|
|
|
|
} else if cfg.minify_css_level_3 {
|
|
|
|
Level::Three
|
|
|
|
} else {
|
|
|
|
// Default to One, as other levels may perform dangerous optimisations.
|
|
|
|
Level::One
|
|
|
|
},
|
|
|
|
);
|
2022-06-21 03:29:12 -04:00
|
|
|
// TODO Collect error as warning.
|
|
|
|
if let Ok(min) = result {
|
|
|
|
if min.len() < code.len() {
|
|
|
|
out.extend_from_slice(min.as_bytes());
|
|
|
|
return;
|
|
|
|
};
|
|
|
|
};
|
2021-08-07 04:51:22 -04:00
|
|
|
}
|
2022-06-21 03:29:12 -04:00
|
|
|
out.extend_from_slice(trimmed(code));
|
2021-08-06 02:17:45 -04:00
|
|
|
}
|