aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--crates/mozart-metadata-minifier/src/lib.rs140
1 files changed, 4 insertions, 136 deletions
diff --git a/crates/mozart-metadata-minifier/src/lib.rs b/crates/mozart-metadata-minifier/src/lib.rs
index cf88138..7d0e803 100644
--- a/crates/mozart-metadata-minifier/src/lib.rs
+++ b/crates/mozart-metadata-minifier/src/lib.rs
@@ -6,6 +6,9 @@
//! library. It operates on raw JSON values (`serde_json::Value`) so that it
//! stays independent of any particular package struct definition.
//!
+//! MetadataMinifier::minify() is not ported because it is not used in Composer itself.
+//! The function is mainly for package repositories.
+//!
//! # Minified format
//!
//! A minified version list is a JSON array of objects where:
@@ -18,7 +21,7 @@
//! A response that uses this encoding contains a top-level key
//! `"minified": "composer/2.0"`.
-use serde_json::{Map, Value};
+use serde_json::Value;
/// The sentinel value used by Composer's metadata minifier to mark a deleted
/// field.
@@ -65,61 +68,6 @@ pub fn expand(versions: &[Value]) -> Vec<Value> {
expanded
}
-/// Minify a list of fully-expanded version objects into diff form.
-///
-/// The first entry is emitted in full. Each subsequent entry only contains
-/// fields that changed compared to the previous one plus `"__unset"` markers
-/// for fields that were removed.
-pub fn minify(versions: &[Value]) -> Vec<Value> {
- let mut minified: Vec<Value> = Vec::with_capacity(versions.len());
-
- let Some((first, rest)) = versions.split_first() else {
- return minified;
- };
-
- let Some(mut last_known) = first.as_object().cloned() else {
- minified.push(first.clone());
- return minified;
- };
-
- minified.push(Value::Object(last_known.clone()));
-
- for version in rest {
- let Some(current) = version.as_object() else {
- minified.push(version.clone());
- continue;
- };
-
- let mut diff = Map::new();
-
- // Add changed or new fields.
- for (key, val) in current {
- match last_known.get(key) {
- Some(prev) if prev == val => {} // unchanged — omit
- _ => {
- diff.insert(key.clone(), val.clone());
- last_known.insert(key.clone(), val.clone());
- }
- }
- }
-
- // Mark deleted fields.
- let removed: Vec<String> = last_known
- .keys()
- .filter(|k| !current.contains_key(k.as_str()))
- .cloned()
- .collect();
- for key in &removed {
- diff.insert(key.clone(), Value::String(UNSET_SENTINEL.to_string()));
- last_known.remove(key.as_str());
- }
-
- minified.push(Value::Object(diff));
- }
-
- minified
-}
-
#[cfg(test)]
mod tests {
use super::*;
@@ -179,96 +127,16 @@ mod tests {
assert!(expanded[2].get("scripts").is_none());
}
- /// Mirrors the canonical Composer MetadataMinifierTest.
- #[test]
- fn minify_matches_composer_test() {
- let full = vec![
- json!({
- "name": "foo/bar",
- "version": "2.0.0",
- "version_normalized": "2.0.0.0",
- "type": "library",
- "scripts": {"foo": ["bar"]},
- "license": ["MIT"]
- }),
- json!({
- "name": "foo/bar",
- "version": "1.2.0",
- "version_normalized": "1.2.0.0",
- "type": "library",
- "license": ["GPL"],
- "homepage": "https://example.org"
- }),
- json!({
- "name": "foo/bar",
- "version": "1.0.0",
- "version_normalized": "1.0.0.0",
- "type": "library",
- "license": ["GPL"]
- }),
- ];
-
- let minified = minify(&full);
- assert_eq!(minified.len(), 3);
-
- // First entry — unchanged.
- assert_eq!(minified[0], full[0]);
-
- // Second entry — only diffs.
- let diff1 = minified[1].as_object().unwrap();
- assert_eq!(diff1["version"], "1.2.0");
- assert_eq!(diff1["version_normalized"], "1.2.0.0");
- assert_eq!(diff1["license"], json!(["GPL"]));
- assert_eq!(diff1["homepage"], "https://example.org");
- assert_eq!(diff1["scripts"], "__unset");
- assert!(!diff1.contains_key("name"));
- assert!(!diff1.contains_key("type"));
-
- // Third entry — only diffs.
- let diff2 = minified[2].as_object().unwrap();
- assert_eq!(diff2["version"], "1.0.0");
- assert_eq!(diff2["version_normalized"], "1.0.0.0");
- assert_eq!(diff2["homepage"], "__unset");
- assert!(!diff2.contains_key("name"));
- assert!(!diff2.contains_key("type"));
- assert!(!diff2.contains_key("license"));
- }
-
- #[test]
- fn roundtrip_expand_minify() {
- let full = vec![
- json!({"name": "a/b", "version": "2.0.0", "require": {"php": ">=8.0"}}),
- json!({"name": "a/b", "version": "1.0.0", "require": {"php": ">=7.4"}}),
- ];
-
- let minified = minify(&full);
- let expanded = expand(&minified);
- assert_eq!(expanded, full);
- }
-
#[test]
fn expand_empty() {
assert!(expand(&[]).is_empty());
}
#[test]
- fn minify_empty() {
- assert!(minify(&[]).is_empty());
- }
-
- #[test]
fn expand_single_version() {
let versions = vec![json!({"name": "a/b", "version": "1.0.0"})];
let expanded = expand(&versions);
assert_eq!(expanded.len(), 1);
assert_eq!(expanded[0], versions[0]);
}
-
- #[test]
- fn minify_single_version() {
- let versions = vec![json!({"name": "a/b", "version": "1.0.0"})];
- let minified = minify(&versions);
- assert_eq!(minified.len(), 1);
- assert_eq!(minified[0], versions[0]);
- }
}