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}