Skip to main content

deft_build/
lib.rs

1use std::env;
2use std::fs::File;
3use std::io::Write;
4use std::path::PathBuf;
5use std::str::FromStr;
6
7pub fn auto_generate_loader() {
8    println!("cargo:rerun-if-env-changed=DEFT_JS_URL");
9    println!("cargo:rerun-if-env-changed=DEFT_JS_DIR");
10    let out_file = format!("{}/js_loader.code", env::var("OUT_DIR").unwrap());
11    if let Ok(js_dir) = env::var("DEFT_JS_DIR") {
12        generate_static_loader(js_dir.as_str(), out_file.as_str());
13    } else {
14        let js_url = env::var("DEFT_JS_URL").unwrap_or("http://localhost:7800".to_string());
15        generate_dev_loader(js_url.as_str(), out_file.as_str());
16    }
17}
18
19pub fn generate_dev_loader(url: &str, output_dir: &str) {
20    let code = format!("Box::new(deft::loader::DevModuleLoader::new(Some(\"{}\")))", url);
21    write_code(code.as_str(), output_dir);
22}
23
24pub fn generate_static_loader(js_dir: &str, output_dir: &str) {
25    let path = PathBuf::from_str(&js_dir).unwrap();
26    let canonical_path = path.canonicalize().unwrap();
27    let files = path.read_dir().unwrap();
28
29    let mut code = String::new();
30    code.push_str("{\n");
31    code.push_str("let mut loader = deft::loader::StaticModuleLoader::new();\n");
32    for f in files {
33        let file_name = f.unwrap().file_name();
34        let full_path = canonical_path.join(&file_name).to_string_lossy().to_string().replace("\\", "\\\\");
35        let name = file_name.to_str().unwrap();
36        code.push_str(&format!("loader.add_module(\"{}\".to_string(), include_str!(\"{}\").to_string());\n", name, full_path));
37    }
38    code.push_str("Box::new(loader)\n");
39    code.push_str("}");
40    write_code(code.as_str(), output_dir);
41}
42
43fn write_code(code: &str, output_dir: &str) {
44    let mut file = File::create(output_dir).unwrap();
45    file.write_all(code.as_bytes()).unwrap();
46}