configData = $data; $this->configElementFactory = $configElementFactory; $this->queryFields = $queryFields; } /** * @inheritdoc */ public function getConfigElement(string $configElementName) : ConfigElementInterface { $data = $this->configData->get($configElementName); if (!isset($data['type'])) { throw new \LogicException( sprintf('Config element "%s" is not declared in GraphQL schema', $configElementName) ); } $fieldsInQuery = $this->queryFields->getFieldsUsedInQuery(); if (isset($data['fields'])) { if (!empty($fieldsInQuery)) { foreach (array_keys($data['fields']) as $fieldName) { if (!isset($fieldsInQuery[$fieldName])) { unset($data['fields'][$fieldName]); } } } ksort($data['fields']); } return $this->configElementFactory->createFromConfigData($data); } /** * @inheritdoc */ public function getDeclaredTypes() : array { $types = []; foreach ($this->configData->get(null) as $item) { if (isset($item['type'])) { $types[] = [ 'name' => $item['name'], 'type' => $item['type'], ]; } } return $types; } }