Skip to main content

Mountain/ProcessManagement/NodeResolver/
TryShipped.rs

1#![allow(non_snake_case)]
2
3//! Bundled Node lookup. Production: Tauri ships Node under
4//! `Resources/Node/bin/node` (`Resources/Node/node.exe` on Windows). Dev:
5//! same layout next to the executable so the dev build dogfoods the same
6//! resolution path.
7
8use std::path::PathBuf;
9
10use tauri::{AppHandle, Manager, Runtime, path::BaseDirectory};
11
12use crate::ProcessManagement::NodeResolver::{NodeSource, ResolvedNode};
13
14pub fn Fn<R:Runtime>(ApplicationHandle:&AppHandle<R>) -> Option<ResolvedNode::Struct> {
15	let RelativeToResource = if cfg!(target_os = "windows") { "Node/node.exe" } else { "Node/bin/node" };
16
17	if let Ok(Resolved) = ApplicationHandle.path().resolve(RelativeToResource, BaseDirectory::Resource) {
18		if Resolved.exists() {
19			return Some(ResolvedNode::Struct { Path:Resolved, Source:NodeSource::Enum::Shipped });
20		}
21	}
22
23	let ExecutablePath = std::env::current_exe().ok()?;
24	let ExecutableDirectory = ExecutablePath.parent()?;
25	let SiblingNode = ExecutableDirectory.join(RelativeToResource);
26	if SiblingNode.exists() {
27		return Some(ResolvedNode::Struct { Path:SiblingNode, Source:NodeSource::Enum::Shipped });
28	}
29
30	let _ = PathBuf::new();
31	None
32}