objectManager = $objectManager; $this->argumentFactory = $argumentFactory; $this->fieldFactory = $fieldFactory; } /** * Instantiate an object representing 'interface' GraphQL config element. */ public function createFromConfigData(array $data): ConfigElementInterface { $fields = []; foreach ($data['fields'] as $field) { $arguments = []; foreach ($field['arguments'] as $argument) { $arguments[$argument['name']] = $this->argumentFactory->createFromConfigData($argument); } $fields[$field['name']] = $this->fieldFactory->createFromConfigData($field, $arguments); } return $this->create($data, $fields); } /** * Create interface object based off array of configured GraphQL Output/InputInterface. * * Interface data must contain name, type resolver, and field definitions. The type resolver should point to an * implementation of the TypeResolverInterface that decides what concrete GraphQL type to output. Description is * the only optional field. * * @param array $interfaceData * @param array $fields * @return InterfaceType */ public function create( array $interfaceData, array $fields ) : InterfaceType { return $this->objectManager->create( InterfaceType::class, [ 'name' => $interfaceData['name'], 'typeResolver' => $interfaceData['typeResolver'], 'fields' => $fields, 'description' => isset($interfaceData['description']) ? $interfaceData['description'] : '' ] ); } }