use devbox_build::{Build, Cmd, Resource};
pub fn main() {
let build = Build::new();
let webrs = build.out_dir().file("webapp.rs");
let websrc = build.manifest_dir().dir("webapp");
let webwrk = build.out_dir().dir("webapp_build");
let webwrk_pkg = webwrk.file("package.json");
let webwrk_pkl = webwrk.file("package-lock.json");
let webwrk_ndm = webwrk.dir("node_modules");
let webwrk_dst = webwrk.dir("dist");
for unit in websrc.content("*") {
unit.link_from_inside(&webwrk);
}
let npm = Cmd::new("npm").arg("--prefix").arg(webwrk.path());
webwrk_ndm.mk_from("Install WebApp node packages", &webwrk_pkg + &webwrk_pkl, ||{
npm.clone().arg("install").run();
webwrk_ndm.touch();
});
webwrk_dst.mk_from("Build WebApp using webpack", &webwrk.content("**"), || {
npm.clone().arg("run").arg("build").run();
webwrk_dst.touch();
});
webrs.mk_from("Embed WebApp build into binary", &webwrk_dst, || {
let mappings = webwrk_dst.files("**").into_iter().map(|file|
format!(r#""{}" => Some(include_bytes!("{}")),"#,
file.path().strip_prefix(&webwrk_dst.path()).unwrap().to_str().unwrap(),
file.path().to_str().unwrap())
).fold("".to_owned(), |result, ref s| result + s + "\n" );
webrs.rewrite(format!(r"
pub fn file(path: &str) -> Option<&'static [u8]> {{
match path {{
{}
&_ => None,
}}
}}
", mappings));
});
}