Script.fromByteTransformer constructor

Script.fromByteTransformer(
  1. StreamTransformer<List<int>, List<int>> transformer, {
  2. String? name,
})

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;
    },
  );
}