From d6c16a445fd7f3a58bf66a61c58048de2062aef8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kat=20March=C3=A1n?= Date: Sat, 30 Sep 2023 08:27:17 -0700 Subject: [PATCH] fix(manifest): handle boolean bundledDependencies values Fixes: https://github.com/orogene/orogene/issues/284 --- crates/node-maintainer/src/lockfile.rs | 2 +- crates/oro-common/src/manifest.rs | 23 +++++++++++++++++++---- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/crates/node-maintainer/src/lockfile.rs b/crates/node-maintainer/src/lockfile.rs index 2cb7bbcc..191b1a66 100644 --- a/crates/node-maintainer/src/lockfile.rs +++ b/crates/node-maintainer/src/lockfile.rs @@ -151,7 +151,7 @@ impl From for CorgiManifest { dev_dependencies: value.dev_dependencies, peer_dependencies: value.peer_dependencies, optional_dependencies: value.optional_dependencies, - bundled_dependencies: Vec::new(), + bundled_dependencies: None, } } } diff --git a/crates/oro-common/src/manifest.rs b/crates/oro-common/src/manifest.rs index 8d73cb64..1ad35c3d 100644 --- a/crates/oro-common/src/manifest.rs +++ b/crates/oro-common/src/manifest.rs @@ -24,7 +24,7 @@ pub struct CorgiManifest { #[serde(default, skip_serializing_if = "IndexMap::is_empty")] pub peer_dependencies: IndexMap, #[serde(default, alias = "bundleDependencies", alias = "bundledDependencies")] - pub bundled_dependencies: Vec, + pub bundled_dependencies: Option, } #[derive(Builder, Default, Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] @@ -183,10 +183,10 @@ pub struct Manifest { default, alias = "bundleDependencies", alias = "bundledDependencies", - skip_serializing_if = "Vec::is_empty" + skip_serializing_if = "empty_bundled_dependencies" )] #[builder(default)] - pub bundled_dependencies: Vec, + pub bundled_dependencies: Option, #[serde(default, skip_serializing_if = "Vec::is_empty")] #[builder(default)] @@ -268,6 +268,21 @@ where Value(serde_json::Value), } +#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)] +#[serde(untagged)] +pub enum BundledDependencies { + All(bool), + Some(Vec), +} + +fn empty_bundled_dependencies(bundled: &Option) -> bool { + match bundled { + None => true, + Some(BundledDependencies::All(all)) => !all, + Some(BundledDependencies::Some(deps)) => deps.is_empty(), + } +} + #[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)] #[serde(untagged)] pub enum Bugs { @@ -423,7 +438,7 @@ mod tests { .files(Some(vec!["*.js".into()])) .os(vec!["windows".into(), "darwin".into()]) .cpu(vec!["x64".into()]) - .bundled_dependencies(vec!["mydep".into()]) + .bundled_dependencies(Some(BundledDependencies::Some(vec!["mydep".into()]))) .workspaces(vec!["packages/*".into()]) .build() .unwrap()