fromYamlMap static method

CategoryConfiguration fromYamlMap(
  1. YamlMap yamlMap,
  2. String canonicalYamlPath,
  3. ResourceProvider resourceProvider
)

Implementation

static CategoryConfiguration fromYamlMap(YamlMap yamlMap,
    String canonicalYamlPath, ResourceProvider resourceProvider) {
  var newCategoryDefinitions = <String, CategoryDefinition>{};
  for (var MapEntry(:key, value: categoryMap) in yamlMap.entries) {
    var name = key.toString();
    if (categoryMap is Map) {
      var displayName = categoryMap['displayName']?.toString();
      var documentationMarkdown = categoryMap['markdown']?.toString();
      if (documentationMarkdown != null) {
        documentationMarkdown = resourceProvider.pathContext.canonicalize(
            resourceProvider.pathContext
                .join(canonicalYamlPath, documentationMarkdown));
        if (!resourceProvider.getFile(documentationMarkdown).exists) {
          throw DartdocFileMissing(
              'In categories definition for $name, "markdown" resolves to '
              'the missing file $documentationMarkdown');
        }
      }
      final externalItems = <ExternalItem>[];
      var items = categoryMap['external'] as List?;
      if (items != null) {
        for (var item in items) {
          if (item is! Map) {
            throw DartdocOptionError("'external' field should be a map");
          } else {
            final itemName = item['name'] as String?;
            if (itemName == null) {
              throw DartdocOptionError(
                  "'external' item missing required field 'name'");
            }

            final itemUrl = item['url'] as String?;
            if (itemUrl == null) {
              throw DartdocOptionError(
                  "'external' item missing required field 'url'");
            }

            externalItems.add(ExternalItem(
              name: itemName,
              url: itemUrl,
              docs: item['docs'] as String?,
            ));
          }
        }
      }
      newCategoryDefinitions[name] = CategoryDefinition(
        name,
        displayName,
        documentationMarkdown,
        externalItems: externalItems,
      );
    }
  }
  return CategoryConfiguration._(newCategoryDefinitions);
}