buildDslProjectComponentReuseDecisionJson function

Map<String, dynamic> buildDslProjectComponentReuseDecisionJson(
  1. FFProject project, {
  2. required String query,
  3. DslReuseResolutionPolicy policy = DslReuseResolutionPolicy.closestMatch,
})

Builds a project-component reuse decision snapshot for one query.

Implementation

Map<String, dynamic> buildDslProjectComponentReuseDecisionJson(
  FFProject project, {
  required String query,
  DslReuseResolutionPolicy policy = DslReuseResolutionPolicy.closestMatch,
}) {
  final components = listComponents(project)
    ..sort((a, b) => a.name.compareTo(b.name));
  final exact =
      components.where((component) => component.name == query).firstOrNull;
  final suggestions = suggestNearMatches(query, [
    for (final component in components) component.name,
  ]);
  final chosen =
      exact != null
          ? exact.name
          : switch (policy) {
            DslReuseResolutionPolicy.closestMatch when suggestions.isNotEmpty =>
              suggestions.first,
            _ => null,
          };

  return <String, dynamic>{
    'kind': 'flash_dsl_project_component_reuse_decision',
    'query': query,
    'policy': policy.name,
    'exactMatch':
        exact == null
            ? null
            : <String, dynamic>{'name': exact.name, 'key': exact.key},
    'chosenComponent': chosen,
    'suggestions': suggestions,
    'availableComponents': [
      for (final component in components)
        <String, dynamic>{'name': component.name, 'key': component.key},
    ],
  };
}