oxc_resolver 11.19.1

ESM / CJS module resolution
Documentation
use std::{env, fs};

use rayon::prelude::*;

use crate::Resolver;

#[test]
fn test_parallel_resolve_with_clear_cache() {
    let target_dir = env::current_dir().unwrap().join("./target");
    let test_dir = target_dir.join("test_clear_cache");
    let node_modules = test_dir.join("node_modules");

    let _ = fs::remove_dir_all(&test_dir);
    fs::create_dir_all(&node_modules).unwrap();

    let packages: Vec<String> = (1..=100).map(|i| format!("package_{i}")).collect();
    for package in &packages {
        let package_dir = node_modules.join(package);
        fs::create_dir_all(&package_dir).unwrap();
        let package_json = format!(r#"{{"name": "{package}", "main": "index.js"}}"#);
        fs::write(package_dir.join("package.json"), package_json).unwrap();
        fs::write(package_dir.join("index.js"), "").unwrap();
    }

    let resolver = Resolver::default();
    for _ in 1..100 {
        packages.par_iter().enumerate().for_each(|(i, package)| {
            if i % 10 == 0 && i > 0 {
                resolver.clear_cache();
            }
            let result = resolver.resolve(&test_dir, package);
            assert!(result.is_ok(), "Failed to resolve {package}: {result:?}");
        });
    }

    let _ = fs::remove_dir_all(&test_dir);
}