>> $pipelines */ public function __construct(private array $pipelines) {} /** @return array> */ public function stepsFor(string $pipeline): array { if (! isset($this->pipelines[$pipeline])) { throw new InvalidArgumentException("Unknown pipeline [{$pipeline}]."); } return $this->pipelines[$pipeline]; } public function count(string $pipeline): int { return count($this->stepsFor($pipeline)); } public function resolve(string $pipeline, int $index): ProvisioningStep { $steps = $this->stepsFor($pipeline); if (! isset($steps[$index])) { throw new InvalidArgumentException("No step at index {$index} for pipeline [{$pipeline}]."); } return app($steps[$index]); } }