diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-05-03 11:23:03 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-05-03 11:23:03 +0900 |
| commit | 30ae6c869adc7f3cb87a4d63edd6d0cda89d571d (patch) | |
| tree | 44914e0d8d6afc01f3344c1b4d21209477ba592f /crates/mozart-registry | |
| parent | 489d00ca3f096f69f3b05f9564b23bb70a2475c7 (diff) | |
| download | php-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.rs | 22 |
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 |
