vitaminc-aead-napi 0.8.1

NAPI (Node-API) value bridge for the Vitamin-C AEAD encryption traits. Part of the Vitamin-C cryptographic suite.
Documentation
//! Exercise live N-API conversions, including in package-scoped mutation runs.
#[test]
fn node_value_conformance() {
    use std::{path::Path, process::Command};
    let package = Path::new(env!("CARGO_MANIFEST_DIR"));
    let workspace = package
        .parent()
        .expect("packages")
        .parent()
        .expect("workspace");
    let addon = package.join("tests/addon/Cargo.toml");
    let target = workspace.join("target/napi-test-addon");
    let build = Command::new(env!("CARGO"))
        .args(["build", "--locked", "--quiet", "--manifest-path"])
        .arg(addon)
        .arg("--target-dir")
        .arg(&target)
        .output()
        .expect("run Cargo for the test addon");
    assert!(
        build.status.success(),
        "addon build: {}",
        String::from_utf8_lossy(&build.stderr)
    );
    let library = target.join("debug").join(format!(
        "{}vitaminc_napi_test_addon{}",
        std::env::consts::DLL_PREFIX,
        std::env::consts::DLL_SUFFIX
    ));
    let module = target.join("addon.node");
    std::fs::copy(library, &module).expect("copy Node module");
    for suite in [
        "tests/value-conformance.cjs",
        "tests/object-safety.cjs",
        "tests/kind_inventory.cjs",
        "tests/encrypt.cjs",
    ] {
        let result = Command::new("node")
            .arg(package.join(suite))
            .arg(&module)
            .output()
            .expect("Node.js is required for binding tests");
        assert!(
            result.status.success(),
            "{suite}:\n{}\n{}",
            String::from_utf8_lossy(&result.stdout),
            String::from_utf8_lossy(&result.stderr)
        );
    }
}