const transform = (parserOpts = {}) => observable => { // XXX: the parser wants to add a newline to everything we push to it for // some reason. likely "user error" const parser = new AsyncParser( {...parserOpts, eol: '', flatten: true}, { objectMode: true } ); return observable.pipe( finalize(() => { parser.input.push(null); }), tap(row => { parser.input.push(row); }), concatMapTo(fromEvent(parser.processor, 'data')), takeUntil(fromEvent(parser.processor, 'end')), filter(Boolean), map(_.pipe(_.trim, stripAnsi)) ); }