synopkg 14.0.0

Consistent dependency versions in large JavaScript Monorepos
use {serde::Deserialize, thiserror::Error};

#[derive(Debug, Deserialize)]
#[serde(tag = "_tag")]
pub enum NodeJsResult {
  #[serde(rename = "Ok")]
  Success { value: String },
  #[serde(rename = "Err")]
  Error {
    #[serde(rename = "importError")]
    import_error: String,
    #[serde(rename = "requireError")]
    require_error: String,
  },
}

#[derive(Debug, Error)]
pub enum RcfileError {
  #[error("Failed to read config file")]
  FileReadFailed(#[from] std::io::Error),
  #[error("Failed to run Node.js/npx/tsx to retrieve JS/TS config file")]
  NodeJsExecutionFailed(#[source] std::io::Error),
  #[error("Node.js/npx/tsx process failed with stderr: {stderr}")]
  ProcessFailed { stderr: String },
  #[error("Config file contains invalid UTF-8")]
  InvalidUtf8(#[from] std::string::FromUtf8Error),
  #[error("Config file failed validation")]
  InvalidConfig(#[from] serde_json::Error),
  #[error("Failed to import or require config file: {import_error} {require_error}")]
  JavaScriptImportFailed { import_error: String, require_error: String },
  #[error("Failed to parse JSON in config file")]
  JsonParseFailed(#[source] serde_json::Error),
  #[error("Failed to parse YAML in config file")]
  YamlParseFailed(#[from] serde_yaml::Error),
  #[error("Config defined as a property in package.json failed validation")]
  PackageJsonConfigInvalid(#[source] serde_json::Error),
}