code: private function parseThemeInfo(array $info)
      {
          $themeInfo = new ThemeInfo();
  
          $required = ['name', 'author', 'directory'];
          foreach ($required as $key) {
              if (!array_key_exists($key, $info)) {
                  throw new ThemeInfoAttributeException($key);
              }
          }
  
          $themeInfo->setName($info['name']);
          $themeInfo->setAuthor($info['author']);
          $themeInfo->setDirectory(strtolower($info['directory']));
  
          if (isset($info['description'])) {
              $themeInfo->setDescription($info['description']);
          }
          if (isset($info['version'])) {
              $themeInfo->setVersion($info['version']);
          }
          if (isset($info['parent'])) {
              $themeInfo->setParent($info['parent']);
          }
  
          $themeInfo->setPath($this->findPath($info['directory']));
  
          return $themeInfo;
      }
docs: Parse theme json file
  
  @param array $info
  @return ThemeInfoInterface
  @throws ThemeInfoAttributeException