Script.fromByteTransformer constructor
Creates a Script from a StreamTransformer on byte streams.
This script transforms all its stdin with transformer
and emits it via
stdout. It exits once the transformed stream closes. Any error events
emitted by transformer
are treated as errors in the script.
Script.kill returns true
if the stream was interrupted and the script
exits with Script.exitCode 143
, or false
if the stream was already
closed.
Implementation
factory Script.fromByteTransformer(
StreamTransformer<List<int>, List<int>> transformer,
{String? name}) {
_checkCapture();
var controller = StreamController<List<int>>();
var exitCodeCompleter = Completer<int>.sync();
var signalCloser = StreamCloser<List<int>>();
return Script._(
name ?? transformer.toString(),
controller.sink,
controller.stream.transform(signalCloser).transform(transformer).onDone(
() => exitCodeCompleter.complete(signalCloser.isClosed ? 143 : 0)),
Stream.empty(),
exitCodeCompleter.future,
(_) {
signalCloser.close();
return true;
},
);
}