execute method
Implementation
Future<U> execute() async {
if (packageConfigURI != null && !(new File.fromUri(packageConfigURI!).existsSync())) {
throw new StateError("Package file '$packageConfigURI' not found. Run 'pub get' and retry.");
}
final scriptSource = Uri.encodeComponent(await generator.scriptSource);
var onErrorPort = new ReceivePort()
..listen((err) async {
if (err is List) {
final stack = new StackTrace.fromString(err.last.replaceAll(scriptSource, ""));
completer.completeError(new StateError(err.first), stack);
} else {
completer.completeError(err);
}
});
var controlPort = new 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}");
if (packageConfigURI != null) {
await Isolate.spawnUri(dataUri, [], message,
errorsAreFatal: true, onError: onErrorPort.sendPort, packageConfig: packageConfigURI);
} else {
await Isolate.spawnUri(dataUri, [], message,
errorsAreFatal: true, onError: onErrorPort.sendPort, automaticPackageResolution: true);
}
return await completer.future;
} finally {
onErrorPort.close();
controlPort.close();
_eventListener.close();
_logListener.close();
}
}