proto_node/depman/
mod.rs

1mod detect;
2mod download;
3mod execute;
4mod install;
5mod resolve;
6mod shim;
7mod verify;
8
9use once_cell::sync::OnceCell;
10use proto_core::{impl_tool, Describable, Manifest, Proto, ProtoError, Tool};
11// use resolve::NDMVersionDist;
12use std::{
13    any::Any,
14    path::{Path, PathBuf},
15};
16
17#[derive(Debug)]
18pub enum NodeDependencyManagerType {
19    Npm,
20    Pnpm,
21    Yarn,
22}
23
24impl NodeDependencyManagerType {
25    pub fn get_package_name(&self) -> String {
26        match self {
27            NodeDependencyManagerType::Npm => "npm".into(),
28            NodeDependencyManagerType::Pnpm => "pnpm".into(),
29            NodeDependencyManagerType::Yarn => "yarn".into(),
30        }
31    }
32}
33
34#[derive(Debug)]
35pub struct NodeDependencyManager {
36    pub base_dir: PathBuf,
37    pub bin_path: Option<PathBuf>,
38    // pub dist: Option<NDMVersionDist>,
39    pub package_name: String,
40    pub shim_path: Option<PathBuf>,
41    pub temp_dir: PathBuf,
42    pub type_of: NodeDependencyManagerType,
43    pub version: Option<String>,
44
45    manifest: OnceCell<Manifest>,
46}
47
48impl NodeDependencyManager {
49    pub fn new<P: AsRef<Proto>>(proto: P, type_of: NodeDependencyManagerType) -> Self {
50        let proto = proto.as_ref();
51        let package_name = type_of.get_package_name();
52
53        NodeDependencyManager {
54            base_dir: proto.tools_dir.join(&package_name),
55            bin_path: None,
56            // dist: None,
57            manifest: OnceCell::new(),
58            shim_path: None,
59            temp_dir: proto.temp_dir.join(&package_name),
60            type_of,
61            version: None,
62            package_name,
63        }
64    }
65
66    // pub fn get_dist(&self) -> &NDMVersionDist {
67    //     self.dist
68    //         .as_ref()
69    //         .expect("Distribution info not defined for node dependency manager!")
70    // }
71}
72
73impl Describable<'_> for NodeDependencyManager {
74    fn get_id(&self) -> &str {
75        &self.package_name
76    }
77
78    fn get_name(&self) -> String {
79        self.type_of.get_package_name()
80    }
81}
82
83impl_tool!(NodeDependencyManager);