use std::path::{Path, PathBuf};
use oxc_resolver::{ResolveOptions, Resolver};
fn create_resolver() -> Resolver {
Resolver::new(ResolveOptions {
condition_names: vec!["types".into(), "import".into(), "node".into()],
extensions: vec![".d.ts".into(), ".ts".into()],
main_fields: vec!["types".into(), "typings".into()],
..ResolveOptions::default()
})
}
pub fn resolve_module(specifier: &str, base_dir: &Path) -> Option<PathBuf> {
let resolver = create_resolver();
let effective_specifier = if let Some(module_name) = specifier.strip_prefix("node:") {
format!("@types/node/{module_name}")
} else {
specifier.to_string()
};
match resolver.resolve(base_dir, &effective_specifier) {
Ok(resolution) => Some(resolution.into_path_buf()),
Err(_) => None,
}
}
pub fn resolve(specifier: &str, from_dir: &Path) -> Option<PathBuf> {
resolve_module(specifier, from_dir)
}