malvin 0.2.5

Non-interactive research and coding agent
use std::fs;
use std::path::Path;

use super::copy::copy_dir_recursive;

pub(super) fn sync_bridge_payload(src: &Path, dest: &Path, dir_name: &str) {
    fs::create_dir_all(dest).unwrap_or_else(|e| {
        panic!("mkdir {}: {e}", dest.display());
    });
    for name in ["package.json", "package-lock.json"] {
        let from = src.join(name);
        let to = dest.join(name);
        fs::copy(&from, &to).unwrap_or_else(|e| {
            panic!("copy {} -> {}: {e}", from.display(), to.display());
        });
    }
    let src_dist = src.join("dist");
    if src_dist.is_dir() {
        copy_dir_recursive(&src_dist, &dest.join("dist")).unwrap_or_else(|e| {
            panic!("copy dist for {dir_name}: {e}");
        });
        return;
    }
    copy_build_sources(src, dest, dir_name);
}

fn copy_build_sources(src: &Path, dest: &Path, dir_name: &str) {
    for name in ["tsconfig.json", "src"] {
        let from = src.join(name);
        let to = dest.join(name);
        if from.is_dir() {
            copy_dir_recursive(&from, &to).unwrap_or_else(|e| {
                panic!("copy {name} for {dir_name}: {e}");
            });
        } else if from.is_file() {
            fs::copy(&from, &to).unwrap_or_else(|e| {
                panic!("copy {} -> {}: {e}", from.display(), to.display());
            });
        }
    }
}