buildDslClosestResourceMatchJson function
Finds the closest reusable resource names for a fuzzy query.
Implementation
Map<String, dynamic> buildDslClosestResourceMatchJson(
FFProject project, {
required String query,
Map<String, FFProject> libraryProjects = const {},
}) {
final componentNames = [for (final item in listComponents(project)) item.name]
..sort();
final libraryComponentNames = <String>[
for (final dep in listLibraryDependencies(project))
if (libraryProjects[dep.projectId] case final libraryProject?) ...[
for (final component in listLibraryComponents(
libraryProject,
libraryProjectId: dep.projectId,
libraryName: dep.name,
))
component.name,
],
]..sort();
final spacingNames = [
for (final token in listSpacingTokens(project)) token.name,
]..sort();
final radiusNames = [
for (final token in listRadiusTokens(project)) token.name,
]..sort();
final shadowNames = [
for (final token in listShadowTokens(project)) token.name,
]..sort();
final colorSlotNames = _themeColorSlotNames(project)..sort();
final textStyleNames = _themeTextStyleNames(project)..sort();
return <String, dynamic>{
'kind': 'flash_dsl_resource_match',
'query': query,
'components': <String, dynamic>{
'project': suggestNearMatches(query, componentNames),
'libraries': suggestNearMatches(query, libraryComponentNames),
},
'themeTokens': <String, dynamic>{
'spacing': suggestNearMatches(query, spacingNames),
'radius': suggestNearMatches(query, radiusNames),
'shadow': suggestNearMatches(query, shadowNames),
'colors': suggestNearMatches(query, colorSlotNames),
'textStyles': suggestNearMatches(query, textStyleNames),
},
};
}