From 4917ba43b85babbb91bd945e6a6c608dc5a9167b Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Mon, 17 Jul 2023 11:05:18 -0700 Subject: [PATCH 1/3] make pnpm package resolution parsing unstructured --- crates/turborepo-lockfiles/src/pnpm/data.rs | 22 +++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/crates/turborepo-lockfiles/src/pnpm/data.rs b/crates/turborepo-lockfiles/src/pnpm/data.rs index 5b50e3f7ab110..2276ab027deb1 100644 --- a/crates/turborepo-lockfiles/src/pnpm/data.rs +++ b/crates/turborepo-lockfiles/src/pnpm/data.rs @@ -1,6 +1,7 @@ use std::borrow::Cow; use serde::{Deserialize, Serialize}; +use serde_json::Value; use super::{dep_path::DepPath, Error, LockfileVersion}; @@ -80,8 +81,9 @@ pub struct Dependency { #[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)] #[serde(rename_all = "camelCase")] pub struct PackageSnapshot { - // can we make this flow?/is it necessary? - resolution: PackageResolution, + // We don't use any fields in resolution in order to avoid losing data we parse it as a generic + // value + resolution: Value, #[serde(skip_serializing_if = "Option::is_none")] id: Option, @@ -792,4 +794,20 @@ mod tests { ], ); } + + #[test] + fn test_injected_package_round_trip() { + let original_contents = "file:packages/ui: + resolution: + directory: packages/ui, + type: directory, + name: ui + version: 0.0.0 + dev: false +"; + let original_parsed: Map = + serde_yaml::from_str(original_contents).unwrap(); + let contents = serde_yaml::to_string(&original_parsed).unwrap(); + assert_eq!(original_contents, &contents); + } } From ac9446b112d8b5ce0493d9411d12afcf582e3aba Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Mon, 17 Jul 2023 11:25:12 -0700 Subject: [PATCH 2/3] keep structure, but fixup misname --- crates/turborepo-lockfiles/src/pnpm/data.rs | 30 +++++++++++++++++---- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/crates/turborepo-lockfiles/src/pnpm/data.rs b/crates/turborepo-lockfiles/src/pnpm/data.rs index 2276ab027deb1..cbfb87513a0f0 100644 --- a/crates/turborepo-lockfiles/src/pnpm/data.rs +++ b/crates/turborepo-lockfiles/src/pnpm/data.rs @@ -1,7 +1,6 @@ use std::borrow::Cow; use serde::{Deserialize, Serialize}; -use serde_json::Value; use super::{dep_path::DepPath, Error, LockfileVersion}; @@ -83,7 +82,7 @@ pub struct Dependency { pub struct PackageSnapshot { // We don't use any fields in resolution in order to avoid losing data we parse it as a generic // value - resolution: Value, + resolution: PackageResolution, #[serde(skip_serializing_if = "Option::is_none")] id: Option, @@ -115,14 +114,21 @@ pub struct DependenciesMeta { #[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)] pub struct PackageResolution { + // Type field, cannot use serde(tag) due to tarball having an empty type field + // tarball -> none + // directory -> 'directory' + // git repository -> 'git' #[serde(rename = "type", skip_serializing_if = "Option::is_none")] type_field: Option, + // Tarball fields #[serde(skip_serializing_if = "Option::is_none")] integrity: Option, #[serde(skip_serializing_if = "Option::is_none")] tarball: Option, + // Directory fields #[serde(skip_serializing_if = "Option::is_none")] - dir: Option, + directory: Option, + // Git repository fields #[serde(skip_serializing_if = "Option::is_none")] repo: Option, #[serde(skip_serializing_if = "Option::is_none")] @@ -797,13 +803,27 @@ mod tests { #[test] fn test_injected_package_round_trip() { - let original_contents = "file:packages/ui: + let original_contents = "a: resolution: - directory: packages/ui, type: directory, + directory: packages/ui, name: ui version: 0.0.0 dev: false +b: + resolution: + integrity: deadbeef, + tarball: path/to/tarball.tar.gz, + name: tar + version: 0.0.0 + dev: false +c: + resolution: + repo: great-repo.git, + commit: greatcommit, + name: git + version: 0.0.0 + dev: false "; let original_parsed: Map = serde_yaml::from_str(original_contents).unwrap(); From d85eee32cd9faf1e8ad223e0d4ac4ae4b6e44d0a Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Tue, 18 Jul 2023 09:23:53 -0700 Subject: [PATCH 3/3] remove old comment --- crates/turborepo-lockfiles/src/pnpm/data.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/crates/turborepo-lockfiles/src/pnpm/data.rs b/crates/turborepo-lockfiles/src/pnpm/data.rs index cbfb87513a0f0..3364d76aa7db7 100644 --- a/crates/turborepo-lockfiles/src/pnpm/data.rs +++ b/crates/turborepo-lockfiles/src/pnpm/data.rs @@ -80,8 +80,6 @@ pub struct Dependency { #[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)] #[serde(rename_all = "camelCase")] pub struct PackageSnapshot { - // We don't use any fields in resolution in order to avoid losing data we parse it as a generic - // value resolution: PackageResolution, #[serde(skip_serializing_if = "Option::is_none")] id: Option,