getCommands method

(ExitCode?, List<String>?, Script?) getCommands(
  1. List<String> keys,
  2. ArgResults argResults
)

Implementation

(ExitCode?, List<String>? commands, Script?) getCommands(
  List<String> keys,
  ArgResults argResults,
) {
  final flagStartAt = keys.indexWhere((e) => e.startsWith('-'));
  final scriptKeys = keys.sublist(0, flagStartAt == -1 ? null : flagStartAt);

  if (scriptKeys.isEmpty) {
    logger.err('No script specified');
    return (ExitCode.config, null, null);
  }

  final content = scriptsYaml.scripts();
  if (content == null) {
    logger.err('No ${ScriptsYaml.fileName} file found');
    return (ExitCode.noInput, null, null);
  }

  final scriptConfig = ScriptsConfig.fromJson(content);

  final script = scriptConfig.find(scriptKeys);

  if (script == null) {
    logger.err('No script found for ${scriptKeys.join(' ')}');
    return (ExitCode.config, null, null);
  }

  if (argResults['list'] as bool? ?? false) {
    _listOutScript(script);

    return (ExitCode.success, null, null);
  }

  if (script.commands.isEmpty) {
    logger
      ..warn('There are no commands to run for "${scriptKeys.join(' ')}"')
      ..warn('Here are the available scripts:');

    _listOutScript(script);

    return (ExitCode.config, null, null);
  }

  final resolvedCommands = variables.replace(
    script,
    scriptConfig,
    flags: optionalFlags(keys),
  );

  return (null, resolvedCommands, script);
}