use std::path::{Path, PathBuf};
use std::process::Command;
fn main() {
if std::fs::metadata("./package.json").is_ok() {
println!("cargo:rerun-if-changed=js-src");
let current_dir = std::env::current_dir().unwrap();
update_bridge(¤t_dir);
} else {
println!("cargo:rerun-if-changed=build.rs");
}
let out_dir: PathBuf = std::env::var_os("OUT_DIR")
.expect("$OUT_DIR not set.")
.into();
create_snapshot(&out_dir);
}
fn update_bridge(current_dir: &Path) {
println!("cargo:warning=Updating router-bridge");
let npm = which::which("npm").expect("'npm' is not available");
if cfg!(debug_assertions) {
println!("cargo:warning=running `npm install`");
assert!(Command::new(&npm)
.current_dir(¤t_dir)
.args(&["install"])
.status()
.unwrap()
.success());
} else {
println!("cargo:warning=running `npm ci`");
assert!(Command::new(&npm)
.current_dir(¤t_dir)
.args(&["ci"])
.status()
.unwrap()
.success());
}
println!("cargo:warning=running `npm run format`");
assert!(Command::new(&npm)
.current_dir(¤t_dir)
.args(&["run", "format"])
.status()
.unwrap()
.success());
println!("cargo:warning=running `npm run build`");
assert!(Command::new(&npm)
.current_dir(¤t_dir)
.args(&["run", "build"])
.status()
.unwrap()
.success());
}
#[cfg(feature = "docs_rs")]
fn create_snapshot(out_dir: &Path) {
std::fs::write(out_dir.join("query_runtime.snap"), &[]).unwrap();
}
#[cfg(not(feature = "docs_rs"))]
fn create_snapshot(out_dir: &Path) {
use deno_core::{JsRuntime, RuntimeOptions};
use std::fs::{read_to_string, File};
use std::io::Write;
let options = RuntimeOptions {
will_snapshot: true,
..Default::default()
};
let mut runtime = JsRuntime::new(options);
let runtime_str = read_to_string("bundled/runtime.js").unwrap();
runtime
.execute_script("<init>", &runtime_str)
.expect("unable to initialize router bridge runtime environment");
let bridge_str = read_to_string("bundled/bridge.js").unwrap();
runtime
.execute_script("bridge.js", &bridge_str)
.expect("unable to evaluate bridge module");
let mut snap = File::create(out_dir.join("query_runtime.snap")).unwrap();
snap.write_all(&runtime.snapshot()).unwrap();
}