use std::collections::HashMap;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use super::{StringOrBool, deserialize_string_or_bool_opt};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default, JsonSchema)]
#[serde(rename_all = "kebab-case")]
pub enum NpmMode {
#[default]
OptionalDeps,
Postinstall,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default, JsonSchema)]
#[serde(rename_all = "kebab-case")]
pub enum NpmAuthMode {
#[default]
Auto,
Token,
Oidc,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(default, deny_unknown_fields)]
pub struct NpmConfig {
pub id: Option<String>,
pub ids: Option<Vec<String>>,
#[serde(default)]
pub mode: NpmMode,
pub scope: Option<String>,
pub metapackage: Option<String>,
pub bin: Option<String>,
#[serde(default = "default_libc_aware")]
pub libc_aware: bool,
pub name: Option<String>,
pub description: Option<String>,
pub homepage: Option<String>,
pub keywords: Option<Vec<String>>,
pub license: Option<String>,
pub author: Option<String>,
pub engines: Option<std::collections::BTreeMap<String, String>>,
pub files: Option<Vec<String>>,
pub provenance: Option<bool>,
pub repository: Option<String>,
pub bugs: Option<String>,
pub access: Option<String>,
pub tag: Option<String>,
pub format: Option<String>,
pub url_template: Option<String>,
pub extra_files: Option<Vec<String>>,
pub templated_extra_files: Option<Vec<NpmTemplatedExtraFile>>,
pub extra: Option<HashMap<String, serde_json::Value>>,
pub registry: Option<String>,
pub token: Option<String>,
#[serde(default)]
pub auth: NpmAuthMode,
#[serde(
default,
alias = "disable",
deserialize_with = "deserialize_string_or_bool_opt"
)]
pub skip: Option<StringOrBool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub required: Option<bool>,
#[serde(rename = "if")]
pub if_condition: Option<String>,
pub retain_on_rollback: Option<bool>,
}
fn default_libc_aware() -> bool {
true
}
impl Default for NpmConfig {
fn default() -> Self {
Self {
id: None,
ids: None,
mode: NpmMode::default(),
scope: None,
metapackage: None,
bin: None,
libc_aware: default_libc_aware(),
name: None,
description: None,
homepage: None,
keywords: None,
license: None,
author: None,
engines: None,
files: None,
provenance: None,
repository: None,
bugs: None,
access: None,
tag: None,
format: None,
url_template: None,
extra_files: None,
templated_extra_files: None,
extra: None,
registry: None,
token: None,
auth: NpmAuthMode::default(),
skip: None,
required: None,
if_condition: None,
retain_on_rollback: None,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, JsonSchema)]
#[serde(default, deny_unknown_fields)]
pub struct NpmTemplatedExtraFile {
pub src: String,
pub dst: String,
}