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
30	if let Some(Found) = TryShipped::Fn(ApplicationHandle) {
31		return Found;
32	}
33
34	if let Some(Found) = TryFnm::Fn() {
35		return Found;
36	}
37
38	if let Some(Found) = TryVolta::Fn() {
39		return Found;
40	}
41
42	if let Some(Found) = TryAsdf::Fn() {
43		return Found;
44	}
45
46	if let Some(Found) = TryNvm::Fn() {
47		return Found;
48	}
49
50	if let Some(Found) = TryHomebrew::Fn() {
51		return Found;
52	}
53
54	dev_log!(
55		"cocoon",
56		"[NodeResolver] No specific install found; falling back to `node` on PATH"
57	);
58
59	ResolvedNode::Struct { Path:PathBuf::from("node"), Source:NodeSource::Enum::Path }
60}