getOpitons function

List<String> getOpitons(
  1. String name,
  2. Config config, {
  3. bool isNotEmpty = false,
  4. List<String> defaults = const [],
  5. List<String> datalist = const [],
  6. ArgResults? gRes,
  7. ArgResults? aRes,
})

get options input, order: define -> env -> yaml -> globalResults -> argResults

Implementation

List<String> getOpitons(
  String name,
  Config config, {
  bool isNotEmpty = false,
  List<String> defaults = const [],
  List<String> datalist = const [],
  ArgResults? gRes,
  ArgResults? aRes,
}) {
  List<String>? values = config.optionalStringList(name);
  if (values != null) return values;

  if (name.contains(dotDelimiter)) name = name.split(dotDelimiter).last;
  values ??= gRes?.multiOption(name);
  values ??= aRes?.multiOption(name);
  values ??= defaults;

  if (isNotEmpty && values.isEmpty) {
    throw UsageException('err: $name empty', '');
  }

  if (datalist.isNotEmpty && values.isNotEmpty) {
    final notfound = values.firstWhere(
      (e) => !datalist.contains(e),
      orElse: () => '',
    );
    if (notfound.isNotEmpty) {
      throw UsageException('err: $notfound not in datalist', '');
    }
  }

  return values;
}