class ComposerMinimumStabilityValidator

Same name and namespace in other branches
  1. main core/modules/package_manager/src/Validator/ComposerMinimumStabilityValidator.php \Drupal\package_manager\Validator\ComposerMinimumStabilityValidator

Checks that the packages to install meet the minimum stability.

@internal This is an internal part of Package Manager and may be changed or removed at any time without warning. External code should not interact with this class.

Hierarchy

  • class \Drupal\package_manager\Validator\ComposerMinimumStabilityValidator implements \Symfony\Component\EventDispatcher\EventSubscriberInterface uses \Drupal\Core\StringTranslation\StringTranslationTrait

Expanded class hierarchy of ComposerMinimumStabilityValidator

1 file declares its use of ComposerMinimumStabilityValidator
ComposerMinimumStabilityValidatorTest.php in core/modules/package_manager/tests/src/Kernel/ComposerMinimumStabilityValidatorTest.php

File

core/modules/package_manager/src/Validator/ComposerMinimumStabilityValidator.php, line 23

Namespace

Drupal\package_manager\Validator
View source
final class ComposerMinimumStabilityValidator implements EventSubscriberInterface {
  use StringTranslationTrait;
  public function __construct(private readonly PathLocator $pathLocator, private readonly ComposerInspector $inspector) {
  }
  
  /**
   * Validates composer minimum stability.
   *
   * @param \Drupal\package_manager\Event\PreRequireEvent $event
   *   The stage event.
   */
  public function validate(PreRequireEvent $event) : void {
    $dir = $this->pathLocator
      ->getProjectRoot();
    $minimum_stability = $this->inspector
      ->getConfig('minimum-stability', $dir);
    $requested_packages = array_merge($event->getDevPackages(), $event->getRuntimePackages());
    foreach ($requested_packages as $package_name => $version) {
      // In the root composer.json, a stability flag can also be specified. They
      // take the form `constraint@stability`. A stability flag
      // allows the project owner to deviate from the minimum-stability setting.
      // @see https://getcomposer.org/doc/04-schema.md#package-links
      // @see \Composer\Package\Loader\RootPackageLoader::extractStabilityFlags()
      if (str_contains($version, '@')) {
        continue;
      }
      $stability = VersionParser::parseStability($version);
      // Because drupal/core prefers to not depend on composer/composer we need
      // to compare two versions that are identical except for stability to
      // determine if the package stability is less that the minimum stability.
      if (Semver::satisfies("1.0.0-{$stability}", "< 1.0.0-{$minimum_stability}")) {
        $event->addError([
          $this->t("<code>@package_name</code>'s requested version @package_version is less stable (@package_stability) than the minimum stability (@minimum_stability) required in @file.", [
            '@package_name' => $package_name,
            '@package_version' => $version,
            '@package_stability' => $stability,
            '@minimum_stability' => $minimum_stability,
            '@file' => $this->pathLocator
              ->getProjectRoot() . '/composer.json',
          ]),
        ]);
      }
    }
  }
  
  /**
   * {@inheritdoc}
   */
  public static function getSubscribedEvents() : array {
    return [
      PreRequireEvent::class => 'validate',
    ];
  }

}

Members

Title Sort descending Modifiers Object type Summary Overrides
ComposerMinimumStabilityValidator::getSubscribedEvents public static function
ComposerMinimumStabilityValidator::validate public function Validates composer minimum stability.
ComposerMinimumStabilityValidator::__construct public function
StringTranslationTrait::$stringTranslation protected property The string translation service. 3
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language. 1

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.