![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/webonyx/graphql-php/src/Language/AST/ |
<?php declare(strict_types=1); namespace GraphQL\Language\AST; use GraphQL\Error\InvariantViolation; use GraphQL\Utils\AST; /** * @template T of Node * * @phpstan-implements \ArrayAccess<array-key, T> * @phpstan-implements \IteratorAggregate<array-key, T> */ class NodeList implements \ArrayAccess, \IteratorAggregate, \Countable { /** * @var array<Node|array> * * @phpstan-var array<T|array<string, mixed>> */ private array $nodes; /** * @param array<Node|array> $nodes * * @phpstan-param array<T|array<string, mixed>> $nodes */ public function __construct(array $nodes) { $this->nodes = $nodes; } /** @param int|string $offset */ #[\ReturnTypeWillChange] public function offsetExists($offset): bool { return isset($this->nodes[$offset]); } /** * @param int|string $offset * * @phpstan-return T */ #[\ReturnTypeWillChange] public function offsetGet($offset): Node { $item = $this->nodes[$offset]; if (\is_array($item)) { // @phpstan-ignore-next-line not really possible to express the correctness of this in PHP return $this->nodes[$offset] = AST::fromArray($item); } return $item; } /** * @param int|string|null $offset * @param Node|array<string, mixed> $value * * @phpstan-param T|array<string, mixed> $value * * @throws \JsonException * @throws InvariantViolation */ #[\ReturnTypeWillChange] public function offsetSet($offset, $value): void { if (\is_array($value)) { /** @phpstan-var T $value */ $value = AST::fromArray($value); } // Happens when a Node is pushed via []= if ($offset === null) { $this->nodes[] = $value; return; } $this->nodes[$offset] = $value; } /** @param int|string $offset */ #[\ReturnTypeWillChange] public function offsetUnset($offset): void { unset($this->nodes[$offset]); } public function getIterator(): \Traversable { foreach ($this->nodes as $key => $_) { yield $key => $this->offsetGet($key); } } public function count(): int { return \count($this->nodes); } /** * Remove a portion of the NodeList and replace it with something else. * * @param T|array<T>|null $replacement * * @phpstan-return NodeList<T> the NodeList with the extracted elements */ public function splice(int $offset, int $length, $replacement = null): NodeList { return new NodeList( \array_splice($this->nodes, $offset, $length, $replacement) ); } /** * @phpstan-param iterable<array-key, T> $list * * @phpstan-return NodeList<T> */ public function merge(iterable $list): NodeList { if (! \is_array($list)) { $list = \iterator_to_array($list); } return new NodeList(\array_merge($this->nodes, $list)); } /** Resets the keys of the stored nodes to contiguous numeric indexes. */ public function reindex(): void { $this->nodes = array_values($this->nodes); } /** * Returns a clone of this instance and all its children, except Location $loc. * * @throws \JsonException * @throws InvariantViolation * * @return static<T> */ public function cloneDeep(): self { /** @var static<T> $cloned */ $cloned = new static([]); foreach ($this->getIterator() as $key => $node) { $cloned[$key] = $node->cloneDeep(); } return $cloned; } }