graphile_worker_admin_ui 0.2.1

Embedded Leptos admin UI for graphile_worker
Documentation
use std::env;
use std::fs;
use std::path::Path;
use std::process::Command;

use super::commands::{clear_clippy_env, run_with_hint};

const ADMIN_UI_BUILD_HINT: &str = "Admin UI asset builds require npm, wasm-bindgen, and the wasm32-unknown-unknown Rust target. Install the Rust tooling with `rustup target add wasm32-unknown-unknown` and `cargo install wasm-bindgen-cli --version 0.2.121 --locked`.";

pub(super) fn build_wasm_client(client_dir: &Path, out_dir: &Path) {
    let cargo = env::var_os("CARGO").unwrap_or_else(|| "cargo".into());
    let target_dir = out_dir.join("wasm-target");
    let mut cargo = Command::new(cargo);
    cargo
        .arg("build")
        .arg("--manifest-path")
        .arg(client_dir.join("Cargo.toml"))
        .arg("--lib")
        .arg("--target")
        .arg("wasm32-unknown-unknown")
        .arg("--release")
        .arg("--target-dir")
        .arg(&target_dir);
    clear_clippy_env(&mut cargo);

    run_with_hint(
        &mut cargo,
        "build admin UI Leptos WASM client",
        Some(ADMIN_UI_BUILD_HINT),
    );

    let wasm = target_dir
        .join("wasm32-unknown-unknown")
        .join("release")
        .join("graphile_worker_admin_ui_client.wasm");
    run_with_hint(
        Command::new("wasm-bindgen")
            .arg(&wasm)
            .arg("--target")
            .arg("web")
            .arg("--out-dir")
            .arg(out_dir)
            .arg("--out-name")
            .arg("admin_ui"),
        "run wasm-bindgen for admin UI client",
        Some(ADMIN_UI_BUILD_HINT),
    );

    let _ = fs::remove_file(out_dir.join("admin_ui.d.ts"));
    let _ = fs::remove_file(out_dir.join("admin_ui_bg.wasm.d.ts"));
}