Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. RootPackageLoader.php

function RootPackageLoader::extractStabilityFlags

@internal

@phpstan-param array<string, BasePackage::STABILITY_*> $stabilityFlags @phpstan-return array<string, BasePackage::STABILITY_*>

Parameters

array<string, string> $requires:

array<string, int> $stabilityFlags:

key-of<BasePackage::STABILITIES> $minimumStability:

Return value

array<string, int>

4 calls to RootPackageLoader::extractStabilityFlags()
RequireCommand::doUpdate in vendor/composer/composer/src/Composer/Command/RequireCommand.php
RequireCommand::updateRequirementsAfterResolution in vendor/composer/composer/src/Composer/Command/RequireCommand.php
RootPackageLoader::load in vendor/composer/composer/src/Composer/Package/Loader/RootPackageLoader.php
@inheritDoc
UpdateCommand::execute in vendor/composer/composer/src/Composer/Command/UpdateCommand.php
Executes the current command.

File

vendor/composer/composer/src/Composer/Package/Loader/RootPackageLoader.php, line 237

Class

RootPackageLoader
ArrayLoader built for the sole purpose of loading the root package

Namespace

Composer\Package\Loader

Code

public static function extractStabilityFlags(array $requires, string $minimumStability, array $stabilityFlags) : array {
    $stabilities = BasePackage::STABILITIES;
    $minimumStability = $stabilities[$minimumStability];
    foreach ($requires as $reqName => $reqVersion) {
        $constraints = [];
        // extract all sub-constraints in case it is an OR/AND multi-constraint
        $orSplit = Preg::split('{\\s*\\|\\|?\\s*}', trim($reqVersion));
        foreach ($orSplit as $orConstraint) {
            $andSplit = Preg::split('{(?<!^|as|[=>< ,]) *(?<!-)[, ](?!-) *(?!,|as|$)}', $orConstraint);
            foreach ($andSplit as $andConstraint) {
                $constraints[] = $andConstraint;
            }
        }
        // parse explicit stability flags to the most unstable
        $matched = false;
        foreach ($constraints as $constraint) {
            if (Preg::isMatchStrictGroups('{^[^@]*?@(' . implode('|', array_keys($stabilities)) . ')$}i', $constraint, $match)) {
                $name = strtolower($reqName);
                $stability = $stabilities[VersionParser::normalizeStability($match[1])];
                if (isset($stabilityFlags[$name]) && $stabilityFlags[$name] > $stability) {
                    continue;
                }
                $stabilityFlags[$name] = $stability;
                $matched = true;
            }
        }
        if ($matched) {
            continue;
        }
        foreach ($constraints as $constraint) {
            // infer flags for requirements that have an explicit -dev or -beta version specified but only
            // for those that are more unstable than the minimumStability or existing flags
            $reqVersion = Preg::replace('{^([^,\\s@]+) as .+$}', '$1', $constraint);
            if (Preg::isMatch('{^[^,\\s@]+$}', $reqVersion) && 'stable' !== ($stabilityName = VersionParser::parseStability($reqVersion))) {
                $name = strtolower($reqName);
                $stability = $stabilities[$stabilityName];
                if (isset($stabilityFlags[$name]) && $stabilityFlags[$name] > $stability || $minimumStability > $stability) {
                    continue;
                }
                $stabilityFlags[$name] = $stability;
            }
        }
    }
    return $stabilityFlags;
}

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal