[ NodeKind::NAME => function (Node $node) use (&$queryFields) { $queryFields[$node->value] = $node->value; } ] ] ); if (isset($variables)) { $queryFields = array_merge($queryFields, $this->extractVariables($variables)); } } catch (\Exception $e) { // If a syntax error is encountered do not collect fields } if (isset($queryFields['IntrospectionQuery'])) { // It must be possible to query any fields during introspection query $queryFields = []; } $this->fieldsUsedInQuery = $queryFields; } /** * Get list of fields used in GraphQL query. * * This method is stateful and relies on the query being set with setQuery. * * @return string[] */ public function getFieldsUsedInQuery() { return $this->fieldsUsedInQuery; } /** * Extract and return list of all used fields in GraphQL query's variables * * @param array $variables * * @return string[] */ private function extractVariables(array $variables): array { $fields = []; foreach ($variables as $key => $value) { if (is_array($value)) { $fields = array_merge($fields, $this->extractVariables($value)); } $fields[$key] = $key; } return $fields; } }