buildDslClosestResourceMatchJson function

Map<String, dynamic> buildDslClosestResourceMatchJson(
  1. FFProject project, {
  2. required String query,
  3. Map<String, FFProject> libraryProjects = const {},
})

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),
    },
  };
}