Skip to main content

Mountain/ProcessManagement/NodeResolver/
ResolveUncached.rs

1
2//! First-hit-wins ladder over the manager-specific lookups. Falls back to
3//! `node` on PATH if every manager misses.
4
5use std::path::PathBuf;
6
7use tauri::{AppHandle, Runtime};
8
9use crate::{
10	ProcessManagement::NodeResolver::{
11		NodeSource,
12		ResolvedNode,
13		TryAsdf,
14		TryFnm,
15		TryHomebrew,
16		TryNvm,
17		TryOverride,
18		TryShipped,
19		TryVolta,
20	},
21	dev_log,
22};
23
24pub fn Fn<R:Runtime>(ApplicationHandle:&AppHandle<R>) -> ResolvedNode::Struct {
25	if let Some(Found) = TryOverride::Fn() {
26		return Found;
27	}
28
29	if let Some(Found) = TryShipped::Fn(ApplicationHandle) {
30		return Found;
31	}
32
33	if let Some(Found) = TryFnm::Fn() {
34		return Found;
35	}
36
37	if let Some(Found) = TryVolta::Fn() {
38		return Found;
39	}
40
41	if let Some(Found) = TryAsdf::Fn() {
42		return Found;
43	}
44
45	if let Some(Found) = TryNvm::Fn() {
46		return Found;
47	}
48
49	if let Some(Found) = TryHomebrew::Fn() {
50		return Found;
51	}
52
53	dev_log!(
54		"cocoon",
55		"[NodeResolver] No specific install found; falling back to `node` on PATH"
56	);
57
58	ResolvedNode::Struct { Path:PathBuf::from("node"), Source:NodeSource::Enum::Path }
59}