*/ private array $integrations; /** @var list|null */ private ?array $abilities = null; public function __construct(Integration ...$integrations) { $this->integrations = array_values($integrations); } /** @return list */ public function available(): array { return array_values(array_filter( $this->integrations, static fn (Integration $integration): bool => $integration->isAvailable() )); } /** @return list */ public function abilities(): array { if ($this->abilities === null) { $abilities = []; foreach ($this->available() as $integration) { array_push($abilities, ...$integration->abilities()); } $this->abilities = $abilities; } return $this->abilities; } }