From a7c90a277235fa825f9cfa137aa281da3c0e9acd Mon Sep 17 00:00:00 2001 From: nsfisis Date: Wed, 24 Jun 2026 01:20:46 +0900 Subject: refactor(crates): split metadata-minifier and spdx-licenses into own crates Move MetadataMinifier and SpdxLicenses out of shirabe-external-packages into dedicated shirabe-metadata-minifier and shirabe-spdx-licenses crates, updating all import sites accordingly. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../src/metadata_minifier.rs | 38 ++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 crates/shirabe-metadata-minifier/src/metadata_minifier.rs (limited to 'crates/shirabe-metadata-minifier/src/metadata_minifier.rs') diff --git a/crates/shirabe-metadata-minifier/src/metadata_minifier.rs b/crates/shirabe-metadata-minifier/src/metadata_minifier.rs new file mode 100644 index 0000000..3f1a4fc --- /dev/null +++ b/crates/shirabe-metadata-minifier/src/metadata_minifier.rs @@ -0,0 +1,38 @@ +//! ref: composer/vendor/composer/metadata-minifier/src/MetadataMinifier.php + +use indexmap::IndexMap; +use shirabe_php_shim::PhpMixed; + +#[derive(Debug)] +pub struct MetadataMinifier; + +impl MetadataMinifier { + pub fn expand(versions: Vec>) -> Vec> { + let mut expanded: Vec> = Vec::new(); + let mut expanded_version: Option> = None; + for version_data in versions { + if expanded_version.as_ref().is_none_or(|ev| ev.is_empty()) { + expanded.push(version_data.clone()); + expanded_version = Some(version_data); + continue; + } + + // add any changes from the previous version to the expanded one + let ev = expanded_version.as_mut().unwrap(); + for (key, val) in version_data { + if matches!(&val, PhpMixed::String(s) if s == "__unset") { + ev.shift_remove(&key); + } else { + ev.insert(key, val); + } + } + + expanded.push(ev.clone()); + } + + expanded + } + + // MetadataMinifier::minify() is not ported because it is not used in Composer itself. + // The function is mainly for package repositories. +} -- cgit v1.3.1