// 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;
}
