compile method

Future<List<String>?> compile(
  1. Iterable<({String executablePath, Future<ProcessResult> process})> executablesToCompile,
  2. void fail(
    1. String
    )
)

Implementation

Future<List<String>?> compile(
  Iterable<({String executablePath, Future<ProcessResult> process})>
      executablesToCompile,
  void Function(String) fail,
) async {
  final (paths: executables, processes: toCompile) = executablesToCompile
      .fold((paths: <String>[], processes: <Future<ProcessResult>>[]),
          (acc, e) {
    return acc
      ..paths.add(e.executablePath)
      ..processes.add(e.process);
  });

  final results = await Future.wait(toCompile);

  for (final result in results) {
    if (result.exitCode != 0) {
      fail('Failed to compile ${result.stderr}');
      return null;
    }
  }

  return executables;
}