43 lines
1.6 KiB
Rust
43 lines
1.6 KiB
Rust
mod utils;
|
|
|
|
use js_sys::Reflect;
|
|
use wasm_bindgen::prelude::*;
|
|
|
|
// When the `wee_alloc` feature is enabled, use `wee_alloc` as the global
|
|
// allocator.
|
|
#[cfg(feature = "wee_alloc")]
|
|
#[global_allocator]
|
|
static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT;
|
|
|
|
macro_rules! get_prop {
|
|
($cfg:expr, $x:literal) => {
|
|
Reflect::get($cfg, &JsValue::from_str($x))
|
|
.ok()
|
|
.and_then(|p| p.as_bool())
|
|
.unwrap_or(false)
|
|
};
|
|
}
|
|
|
|
#[wasm_bindgen]
|
|
pub fn minify(code: &[u8], cfg: &JsValue) -> Vec<u8> {
|
|
let cfg = minify_html::Cfg {
|
|
do_not_minify_doctype: get_prop!(cfg, "do_not_minify_doctype"),
|
|
ensure_spec_compliant_unquoted_attribute_values: get_prop!(
|
|
cfg,
|
|
"ensure_spec_compliant_unquoted_attribute_values"
|
|
),
|
|
keep_closing_tags: get_prop!(cfg, "keep_closing_tags"),
|
|
keep_html_and_head_opening_tags: get_prop!(cfg, "keep_html_and_head_opening_tags"),
|
|
keep_spaces_between_attributes: get_prop!(cfg, "keep_spaces_between_attributes"),
|
|
keep_comments: get_prop!(cfg, "keep_comments"),
|
|
minify_css: get_prop!(cfg, "minify_css"),
|
|
minify_css_level_1: get_prop!(cfg, "minify_css_level_1"),
|
|
minify_css_level_2: get_prop!(cfg, "minify_css_level_2"),
|
|
minify_css_level_3: get_prop!(cfg, "minify_css_level_3"),
|
|
minify_js: get_prop!(cfg, "minify_js"),
|
|
remove_bangs: get_prop!(cfg, "remove_bangs"),
|
|
remove_processing_instructions: get_prop!(cfg, "remove_processing_instructions"),
|
|
};
|
|
minify_html::minify(code, &cfg)
|
|
}
|