getName())); $this->capabilities[$key] = $capability; } public function getAll(): array { return array_values($this->capabilities); } public function getByPriority(): array { $capabilities = $this->getAll(); usort( $capabilities, static fn (CapabilityInterface $left, CapabilityInterface $right): int => $right->getPriority() <=> $left->getPriority() ); return $capabilities; } public function findByName(string $name): ?CapabilityInterface { $key = strtolower(trim($name)); return $this->capabilities[$key] ?? null; } public function getDeclarations(): array { $declarations = []; foreach ($this->getByPriority() as $capability) { $declarations[] = [ 'name' => $capability->getName(), 'supported_identifiers' => $capability->getSupportedIdentifiers(), 'supported_product_types' => $capability->getSupportedProductTypes(), 'priority' => $capability->getPriority(), 'providers' => $capability->getProviders(), 'configuration' => $capability->getConfiguration(), 'status' => $capability->getStatus(), ]; } return $declarations; } }