composerJson = $composerJson; $this->composerLock = $composerLock; } /** * This method will return a {@link Status} instance, * you can use {@link Status::isGood()} to simply determine that * the composer-installed dependencies are up-to-date. * @return Status */ public function check(): Status { $status = Status::newGood(); $requiredButOld = []; $requiredButMissing = []; $installed = $this->composerLock->getInstalledDependencies(); foreach ( $this->composerJson->getRequiredDependencies() as $name => $version ) { // Not installed at all. if ( !isset( $installed[$name] ) ) { $requiredButMissing[] = [ 'name' => $name, 'wantedVersion' => $version ]; continue; } // Installed; need to check it's the right version if ( !SemVer::satisfies( $installed[$name]['version'], $version ) ) { $requiredButOld[] = [ 'name' => $name, 'wantedVersion' => $version, 'suppliedVersion' => $installed[$name]['version'] ]; } // We're happy; loop to the next dependency. } if ( count( $requiredButOld ) === 0 && count( $requiredButMissing ) === 0 ) { // We couldn't find any out-of-date or missing dependencies, so assume everything is ok! return $status; } foreach ( $requiredButOld as [ "name" => $name, "suppliedVersion" => $suppliedVersion, "wantedVersion" => $wantedVersion ] ) { $status->error( 'composer-deps-outdated', $name, $suppliedVersion, $wantedVersion ); } foreach ( $requiredButMissing as [ "name" => $name, "wantedVersion" => $wantedVersion ] ) { $status->error( 'composer-deps-notinstalled', $name, $wantedVersion ); } return $status; } }