buildDslResourceInventoryJson function
Builds the full machine-readable resource inventory for one project.
Include libraryProjects when you want linked library pages/components to be
expanded instead of reported as unavailable placeholders.
Implementation
Map<String, dynamic> buildDslResourceInventoryJson(
FFProject project, {
Map<String, FFProject> libraryProjects = const {},
}) {
final localPages = listPages(project);
final localComponents = listComponents(project);
final componentNames = [for (final item in localComponents) item.name];
final themeTokenNames = <String>[
for (final token in listSpacingTokens(project)) token.name,
for (final token in listRadiusTokens(project)) token.name,
for (final token in listShadowTokens(project)) token.name,
..._themeColorSlotNames(project),
..._themeTextStyleNames(project),
]..sort();
final libraries = [
for (final dep in listLibraryDependencies(project))
_libraryInventoryEntry(dep, libraryProjects[dep.projectId]),
]..sort((a, b) => (a['name'] as String).compareTo(b['name'] as String));
return <String, dynamic>{
'kind': 'flash_dsl_resource_inventory',
'project': <String, dynamic>{
'name': project.name,
'pageCount': localPages.length,
'componentCount': localComponents.length,
'pages': [
for (final page in _sortedByName(localPages, (item) => item.name))
<String, dynamic>{
'name': page.name,
'key': page.key,
'route': page.route,
},
],
'components': [
for (final component in _sortedByName(
localComponents,
(item) => item.name,
))
<String, dynamic>{'name': component.name, 'key': component.key},
],
},
'theme': _themeInventory(project),
'libraries': libraries,
'repeatedPatternCandidates': _findRepeatedPatternCandidates(project),
'repeatedStyleCandidates': _findRepeatedStyleCandidates(project),
'resourceMatchers': <String, dynamic>{
'componentNames': componentNames..sort(),
'themeTokenNames': themeTokenNames,
},
};
}