use super::*;
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case")]
pub struct NpmInstallerLayer {
#[serde(flatten)]
pub common: CommonInstallerLayer,
#[serde(skip_serializing_if = "Option::is_none")]
pub package: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub scope: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub shrinkwrap: Option<bool>,
}
#[derive(Debug, Default, Clone)]
pub struct NpmInstallerConfig {
pub common: CommonInstallerConfig,
pub package: String,
pub scope: Option<String>,
pub shrinkwrap: bool,
}
impl NpmInstallerConfig {
pub fn defaults_for_package(
workspaces: &WorkspaceGraph,
pkg_idx: PackageIdx,
common: &CommonInstallerConfig,
) -> Self {
let pkg = workspaces.package(pkg_idx);
Self {
common: common.clone(),
package: pkg.name.clone(),
scope: pkg.npm_scope.clone(),
shrinkwrap: true,
}
}
}
impl ApplyLayer for NpmInstallerConfig {
type Layer = NpmInstallerLayer;
fn apply_layer(
&mut self,
Self::Layer {
common,
scope,
package,
shrinkwrap,
}: Self::Layer,
) {
self.common.apply_layer(common);
self.scope.apply_opt(scope);
self.package.apply_val(package);
self.shrinkwrap.apply_val(shrinkwrap);
}
}
impl ApplyLayer for NpmInstallerLayer {
type Layer = NpmInstallerLayer;
fn apply_layer(
&mut self,
Self::Layer {
common,
scope,
package,
shrinkwrap,
}: Self::Layer,
) {
self.common.apply_layer(common);
self.scope.apply_opt(scope);
self.package.apply_opt(package);
self.shrinkwrap.apply_opt(shrinkwrap);
}
}
impl std::ops::Deref for NpmInstallerConfig {
type Target = CommonInstallerConfig;
fn deref(&self) -> &Self::Target {
&self.common
}
}