// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

/// A library for utility functions for dealing with isolates.
import 'dart:async';
import 'dart:io';
import 'dart:isolate';

/// Like [Isolate.spanwUri], except that this only returns once the Isolate has
/// exited.
///
/// If the isolate produces an unhandled exception, it's printed to stderr and
/// the [exitCode] variable is set to 255.
///
/// If [buffered] is `true`, this uses [spawnBufferedUri] to spawn the isolate.
Future<int> runUri(
  Uri url,
  List<String> args,
  Object message, {
  bool buffered = false,
  bool? enableAsserts,
  bool automaticPackageResolution = false,
  Uri? packageConfig,
}) async {
  var errorPort = ReceivePort();
  var exitPort = ReceivePort();

  await Isolate.spawnUri(
    url,
    args,
    message,
    checked: enableAsserts,
    automaticPackageResolution: automaticPackageResolution,
    packageConfig: packageConfig,
    onError: errorPort.sendPort,
    onExit: exitPort.sendPort,
  );

  final subscription = errorPort.listen((list) {
    stderr.writeln('Unhandled exception:');
    stderr.writeln(list[0]);
    stderr.write(list[1]);
    exitCode = 255;
  });
  try {
    await exitPort.first;
  } finally {
    await subscription.cancel();
  }
  return exitCode;
}
