Skip to main content

Mountain/ProcessManagement/NodeResolver/
ResolveUncached.rs

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