getTarget function

String getTarget(
  1. String name,
  2. Config config, {
  3. ArgResults? aRes,
  4. Map<String, String>? env,
  5. String? source,
})

get target input, order: define -> env -> yaml -> argResults -> rest last

Implementation

String getTarget(
  String name,
  Config config, {
  ArgResults? aRes,
  Map<String, String>? env,
  String? source,
}) {
  final orgiName = name;
  String? target = config.optionalString(name);

  if (name.contains(dotDelimiter)) name = name.split(dotDelimiter).last;
  target ??= aRes?.option(name);
  target ??= aRes?.rest.lastOrNull;
  if (target == null || target.isEmpty) {
    throw UsageException('err: required $name', '');
  }
  if ((target == '.' || target == '..') && orgiName.startsWith('archive')) {
    target = p.basename(expandDotPath(target));
  }
  if (source != null && source == target) {
    throw UsageException('err: invalid $name', '');
  }

  if (target.trimLeft().startsWith('~')) {
    if (isWindows) target = target.replaceFirst('~', homePattern);
    target = expandTilde(target);
  }

  if (target.contains(varInputRegexp) && env != null) {
    target = expandVar(target, map: env);
  }

  if (target.contains(varInputRegexp)) {
    throw UsageException('err: undef.var. $target', '');
  }

  // if (target.startsWith('.')) target = expandDotPath(target);
  target = p.normalize(target);

  return target;
}