59 lines
1.8 KiB
Rust
59 lines
1.8 KiB
Rust
fn main() {
|
|
#[cfg(feature = "debug_server")]
|
|
pack_debug_page().unwrap();
|
|
|
|
println!("cargo:rerun-if-changed=web/main.js");
|
|
println!("cargo:rerun-if-changed=web/index.html");
|
|
println!("cargo:rerun-if-changed=web/main.css");
|
|
println!("cargo:rerun-if-changed=web/connected.svg");
|
|
}
|
|
|
|
#[cfg(feature = "debug_server")]
|
|
fn pack_debug_page() -> Result<(), Box<dyn std::error::Error>> {
|
|
use flate2::{write::GzEncoder, Compression};
|
|
use std::io::Write;
|
|
|
|
use css_minify::optimizations::{Level, Minifier};
|
|
|
|
let js = std::fs::read_to_string("web/main.js").unwrap();
|
|
let html = std::fs::read_to_string("web/index.html").unwrap();
|
|
let css = std::fs::read_to_string("web/main.css").unwrap();
|
|
let svg = std::fs::read_to_string("web/connected.svg").unwrap();
|
|
|
|
let mut out = Vec::new();
|
|
minify_js::minify(
|
|
&minify_js::Session::new(),
|
|
minify_js::TopLevelMode::Global,
|
|
js.as_bytes(),
|
|
&mut out,
|
|
)
|
|
.unwrap();
|
|
let js = std::str::from_utf8(&out)?;
|
|
|
|
let css = Minifier::default().minify(&css, Level::Three).unwrap();
|
|
|
|
let (start, end) = html
|
|
.split_once("<!--INSERT SVG HERE-->")
|
|
.expect("did not find svg split point in html");
|
|
|
|
let html = format!("{start}{svg}{end}");
|
|
|
|
let (head, body) = html
|
|
.split_once("<!--INSERT HEAD CONTENT HERE-->")
|
|
.expect("did not find head split point in html");
|
|
|
|
let html = minify_html::minify(
|
|
format!("{head}<style>{css}</style><script>{js}</script>{body}").as_bytes(),
|
|
&minify_html::Cfg::spec_compliant(),
|
|
);
|
|
|
|
let mut encoder = GzEncoder::new(
|
|
std::fs::File::create(std::env::var("OUT_DIR").unwrap() + "/minified.html.gz")?,
|
|
Compression::best(),
|
|
);
|
|
|
|
encoder.write_all(&html)?;
|
|
|
|
Ok(())
|
|
}
|