buildDocsManifest function

Map<String, Object?> buildDocsManifest(
  1. List<Library> libraries, {
  2. String packageName = 'lualike',
  3. String? packageVersion,
})

Builds a stable JSON-serializable manifest for editor tooling.

The manifest intentionally mirrors the documentation data exposed by Library.getDocs so IDEs, language servers, and generators can discover the same library surface that the shared HTML UI displays.

Implementation

Map<String, Object?> buildDocsManifest(
  List<Library> libraries, {
  String packageName = 'lualike',
  String? packageVersion,
}) {
  final documentedLibraries = <Map<String, Object?>>[];
  for (final lib in libraries) {
    final docs = lib.getDocs();
    final valueDocs = lib.getValueDocs();
    if (docs.isEmpty &&
        valueDocs.isEmpty &&
        lib.getTableDocs().isEmpty &&
        lib.getAliasDocs().isEmpty &&
        lib.getEnumDocs().isEmpty) {
      continue;
    }
    final libraryName = _libraryDocName(lib, docs);
    final libraryEntry = <String, Object?>{
      'name': libraryName,
      'description': lib.description,
      'functions': [
        for (final entry in docs.entries)
          _functionManifestEntry(
            name: entry.key,
            libraryName: libraryName,
            doc: entry.value,
          ),
      ],
    };

    if (valueDocs.isNotEmpty) {
      libraryEntry['values'] = [
        for (final entry in valueDocs.entries)
          _valueManifestEntry(entry.key, entry.value),
      ];
    }

    final aliases = lib.getAliasDocs();
    if (aliases.isNotEmpty) {
      libraryEntry['aliases'] = [
        for (final entry in aliases.entries) _aliasManifestEntry(entry.value),
      ];
    }

    final enums = lib.getEnumDocs();
    if (enums.isNotEmpty) {
      libraryEntry['enums'] = [
        for (final entry in enums.entries) _enumManifestEntry(entry.value),
      ];
    }

    final tableDocs = lib.getTableDocs();
    if (tableDocs.isNotEmpty) {
      libraryEntry['tables'] = [
        for (final entry in tableDocs.entries)
          _tableDocManifestEntry(entry.key, entry.value),
      ];
    }

    documentedLibraries.add(libraryEntry);
  }

  final manifest = <String, Object?>{
    'schemaVersion': 2,
    'generator': 'lualike.docs',
    'package': packageName,
  };
  if (packageVersion != null) {
    manifest['packageVersion'] = packageVersion;
  }
  manifest['libraries'] = documentedLibraries;
  return manifest;
}