selectDartFiles method

List<String> selectDartFiles({
  1. required List<String> availableFiles,
  2. required List<String> requestedFiles,
})

Selects the Dart requestedFiles that belong to availableFiles.

availableFiles contains every Dart file discovered under lib/. Paths may be absolute or relative and are normalized before comparison. Duplicates are removed while preserving the order in which they were first requested.

Throws an InvalidFileSelectionException when a requested path does not exist, is not a .dart file, or is outside lib/.

Implementation

List<String> selectDartFiles({
  required List<String> availableFiles,
  required List<String> requestedFiles,
}) {
  if (requestedFiles.isEmpty) {
    return availableFiles;
  }

  final byNormalizedPath = <String, String>{};
  for (final filePath in availableFiles) {
    byNormalizedPath[_normalizePath(filePath)] = filePath;
  }

  final problems = <String>[];
  final selected = <String>[];
  final seen = <String>{};

  for (final requestedPath in requestedFiles) {
    final normalizedPath = _normalizePath(requestedPath);
    if (!seen.add(normalizedPath)) {
      continue;
    }

    if (!requestedPath.endsWith('.dart')) {
      problems.add('$requestedPath is not a Dart (.dart) file.');
      continue;
    }

    if (!File(requestedPath).existsSync()) {
      problems.add('$requestedPath does not exist.');
      continue;
    }

    final availablePath = byNormalizedPath[normalizedPath];
    if (availablePath == null) {
      problems.add('$requestedPath is outside lib/.');
      continue;
    }

    selected.add(availablePath);
  }

  if (problems.isNotEmpty) {
    throw InvalidFileSelectionException(problems);
  }

  return selected;
}