parseMultiSelectInput static method

List<int> parseMultiSelectInput(
  1. String input,
  2. int optionCount,
  3. List<int> defaultIndices
)

Parses the simple prompt multi-select syntax.

Values are 1-based for users and 0-based in the returned list.

Implementation

static List<int> parseMultiSelectInput(
  String input,
  int optionCount,
  List<int> defaultIndices,
) {
  final String normalized = input.trim().toLowerCase();
  if (normalized.isEmpty) {
    return List<int>.from(defaultIndices);
  }
  if (normalized == 'all') {
    return List<int>.generate(optionCount, (int index) => index);
  }
  if (normalized == 'none') {
    return <int>[];
  }

  final List<int> selected = <int>[];
  final Set<int> seen = <int>{};
  final List<String> tokens = normalized
      .split(RegExp(r'[\s,]+'))
      .where((String token) => token.isNotEmpty)
      .toList();

  for (final String token in tokens) {
    final List<int> parsed = _parseSelectionToken(token, optionCount);
    for (final int index in parsed) {
      if (seen.add(index)) {
        selected.add(index);
      }
    }
  }

  return selected;
}