aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/mozart-registry
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-05-03 11:23:03 +0900
committernsfisis <nsfisis@gmail.com>2026-05-03 11:23:03 +0900
commit30ae6c869adc7f3cb87a4d63edd6d0cda89d571d (patch)
tree44914e0d8d6afc01f3344c1b4d21209477ba592f /crates/mozart-registry
parent489d00ca3f096f69f3b05f9564b23bb70a2475c7 (diff)
downloadphp-mozart-30ae6c869adc7f3cb87a4d63edd6d0cda89d571d.tar.gz
php-mozart-30ae6c869adc7f3cb87a4d63edd6d0cda89d571d.tar.zst
php-mozart-30ae6c869adc7f3cb87a4d63edd6d0cda89d571d.zip
feat(resolver): apply config.platform overrides on top of detected platform
Mirrors `Composer\Repository\PlatformRepository`'s `$overrides` handling: each override either replaces a detected platform package version or adds a virtual one (e.g. ext-dummy), and `false` disables the package. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/mozart-registry')
-rw-r--r--crates/mozart-registry/src/resolver.rs22
1 files changed, 22 insertions, 0 deletions
diff --git a/crates/mozart-registry/src/resolver.rs b/crates/mozart-registry/src/resolver.rs
index da2f444..6499130 100644
--- a/crates/mozart-registry/src/resolver.rs
+++ b/crates/mozart-registry/src/resolver.rs
@@ -295,6 +295,28 @@ impl PlatformConfig {
Self { packages }
}
+ /// Apply `config.platform` overrides on top of the detected packages.
+ ///
+ /// Mirrors `Composer\Repository\PlatformRepository::__construct`'s
+ /// `$overrides` handling: each override either replaces a detected
+ /// package version or adds a virtual one (e.g. `ext-dummy`). A `false`
+ /// value disables the package, removing it from the platform.
+ pub fn apply_overrides(&mut self, overrides: &serde_json::Value) {
+ let Some(obj) = overrides.as_object() else {
+ return;
+ };
+ for (name, value) in obj {
+ let key = name.to_lowercase();
+ if value.as_bool() == Some(false) {
+ self.packages.remove(&key);
+ continue;
+ }
+ if let Some(s) = value.as_str() {
+ self.packages.insert(key, s.to_string());
+ }
+ }
+ }
+
/// Parse platform packages into `Version` values.
pub fn to_versions(&self) -> HashMap<String, Version> {
self.packages