JezK
Edit File: HasFieldsTypeImplementation.php
<?php declare(strict_types=1); namespace Automattic\WooCommerce\Vendor\GraphQL\Type\Definition; use Automattic\WooCommerce\Vendor\GraphQL\Error\InvariantViolation; /** * @see HasFieldsType */ trait HasFieldsTypeImplementation { /** * Lazily initialized. * * @var array<string, FieldDefinition|UnresolvedFieldDefinition> */ private array $fields; /** @throws InvariantViolation */ private function initializeFields(): void { if (isset($this->fields)) { return; } $this->fields = FieldDefinition::defineFieldMap($this, $this->config['fields']); } /** @throws InvariantViolation */ public function getField(string $name): FieldDefinition { $field = $this->findField($name); if ($field === null) { throw new InvariantViolation("Field \"{$name}\" is not defined for type \"{$this->name}\""); } return $field; } /** @throws InvariantViolation */ public function findField(string $name): ?FieldDefinition { $this->initializeFields(); if (! isset($this->fields[$name])) { return null; } $field = $this->fields[$name]; if ($field instanceof UnresolvedFieldDefinition) { return $this->fields[$name] = $field->resolve(); } return $field; } /** @throws InvariantViolation */ public function hasField(string $name): bool { $this->initializeFields(); return isset($this->fields[$name]); } /** * @throws InvariantViolation * * @return array<string, FieldDefinition> */ public function getFields(): array { $this->initializeFields(); foreach ($this->fields as $name => $field) { if ($field instanceof UnresolvedFieldDefinition) { $this->fields[$name] = $field->resolve(); } } // @phpstan-ignore-next-line all field definitions are now resolved return $this->fields; } /** @return array<string, FieldDefinition> */ public function getVisibleFields(): array { return array_filter( $this->getFields(), fn (FieldDefinition $fieldDefinition): bool => $fieldDefinition->isVisible() ); } /** @throws InvariantViolation */ public function getFieldNames(): array { $this->initializeFields(); $visibleFieldNames = array_map( fn (FieldDefinition $fieldDefinition): string => $fieldDefinition->getName(), $this->getVisibleFields() ); return array_values($visibleFieldNames); } }