class 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

Expanded class hierarchy of ComposerMinimumStabilityValidator

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(PathLocator $pathLocator, 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.

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