execute method Null safety

Future<U> execute()

Implementation

Future<U> execute() async {
  if (packageConfigURI != null &&
      !File.fromUri(packageConfigURI!).existsSync()) {
    throw StateError(
      "Package file '$packageConfigURI' not found. Run 'pub get' and retry.",
    );
  }

  final scriptSource = Uri.encodeComponent(await generator.scriptSource);

  final onErrorPort = ReceivePort()
    ..listen((err) async {
      if (err is List) {
        final stack =
            StackTrace.fromString(err.last.replaceAll(scriptSource, ""));

        completer.completeError(StateError(err.first), stack);
      } else {
        completer.completeError(err);
      }
    });

  final controlPort = ReceivePort()
    ..listen((results) {
      if (results is Map && results.length == 1) {
        if (results.containsKey("_result")) {
          completer.complete(results['_result']);
          return;
        } else if (results.containsKey("_line_")) {
          _logListener.add(results["_line_"]);
          return;
        }
      }
      _eventListener.add(results);
    });
  try {
    message["_sendPort"] = controlPort.sendPort;

    final dataUri = Uri.parse(
      "data:application/dart;charset=utf-8,$scriptSource",
    );

    await Isolate.spawnUri(
      dataUri,
      [],
      message,
      onError: onErrorPort.sendPort,
      packageConfig: packageConfigURI,
      automaticPackageResolution: packageConfigURI == null,
    );
    return await completer.future;
  } finally {
    onErrorPort.close();
    controlPort.close();
    _eventListener.close();
    _logListener.close();
  }
}