env_nodejs.rs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // Copyright 2019-2024 Tauri Programme within The Commons Conservancy
  2. // SPDX-License-Identifier: Apache-2.0
  3. // SPDX-License-Identifier: MIT
  4. use super::{ActionResult, SectionItem, VersionMetadata};
  5. use colored::Colorize;
  6. use crate::helpers::cross_command;
  7. pub fn manager_version(package_manager: &str) -> Option<String> {
  8. cross_command(package_manager)
  9. .arg("-v")
  10. .output()
  11. .map(|o| {
  12. if o.status.success() {
  13. let v = String::from_utf8_lossy(o.stdout.as_slice()).to_string();
  14. Some(v.split('\n').next().unwrap().to_string())
  15. } else {
  16. None
  17. }
  18. })
  19. .ok()
  20. .unwrap_or_default()
  21. }
  22. pub fn items(metadata: &VersionMetadata) -> Vec<SectionItem> {
  23. let node_target_ver = metadata.js_cli.node.replace(">= ", "");
  24. vec![
  25. SectionItem::new().action(move || {
  26. cross_command("node")
  27. .arg("-v")
  28. .output()
  29. .map(|o| {
  30. if o.status.success() {
  31. let v = String::from_utf8_lossy(o.stdout.as_slice()).to_string();
  32. let v = v
  33. .split('\n')
  34. .next()
  35. .unwrap()
  36. .strip_prefix('v')
  37. .unwrap_or_default()
  38. .trim();
  39. ActionResult::Description(format!("node: {}{}", v, {
  40. let version = semver::Version::parse(v);
  41. let target_version = semver::Version::parse(node_target_ver.as_str());
  42. match (version, target_version) {
  43. (Ok(version), Ok(target_version)) if version < target_version => {
  44. format!(
  45. " ({}, latest: {})",
  46. "outdated".red(),
  47. target_version.to_string().green()
  48. )
  49. }
  50. _ => "".into(),
  51. }
  52. }))
  53. } else {
  54. ActionResult::None
  55. }
  56. })
  57. .ok()
  58. .unwrap_or_default()
  59. }),
  60. SectionItem::new().action(|| manager_version("pnpm").map(|v| format!("pnpm: {v}")).into()),
  61. SectionItem::new().action(|| manager_version("yarn").map(|v| format!("yarn: {v}")).into()),
  62. SectionItem::new().action(|| manager_version("npm").map(|v| format!("npm: {v}")).into()),
  63. SectionItem::new().action(|| manager_version("bun").map(|v| format!("bun: {v}")).into()),
  64. SectionItem::new().action(|| manager_version("deno").map(|v| format!("deno: {v}")).into()),
  65. ]
  66. }