| var util = require('util') |
| |
| var Promise = require('bluebird') |
| var split = require('split') |
| |
| function NoSuchLineError(message) { |
| Error.call(this, message) |
| this.name = 'NoSuchLineError' |
| Error.captureStackTrace(this, NoSuchLineError) |
| } |
| |
| util.inherits(NoSuchLineError, Error) |
| |
| module.exports.NoSuchLineError = NoSuchLineError |
| |
| module.exports.readAll = function(stream) { |
| var resolver = Promise.defer() |
| var collected = new Buffer(0) |
| |
| function errorListener(err) { |
| resolver.reject(err) |
| } |
| |
| function endListener() { |
| resolver.resolve(collected) |
| } |
| |
| function readableListener() { |
| var chunk |
| while ((chunk = stream.read())) { |
| collected = Buffer.concat([collected, chunk]) |
| } |
| } |
| |
| stream.on('error', errorListener) |
| stream.on('readable', readableListener) |
| stream.on('end', endListener) |
| |
| return resolver.promise.finally(function() { |
| stream.removeListener('error', errorListener) |
| stream.removeListener('readable', readableListener) |
| stream.removeListener('end', endListener) |
| }) |
| } |
| |
| module.exports.findLine = function(stream, re) { |
| var resolver = Promise.defer() |
| var piped = stream.pipe(split()) |
| |
| function errorListener(err) { |
| resolver.reject(err) |
| } |
| |
| function endListener() { |
| resolver.reject(new NoSuchLineError()) |
| } |
| |
| function lineListener(line) { |
| if (re.test(line)) { |
| resolver.resolve(line) |
| } |
| } |
| |
| piped.on('error', errorListener) |
| piped.on('data', lineListener) |
| piped.on('end', endListener) |
| |
| return resolver.promise.finally(function() { |
| piped.removeListener('error', errorListener) |
| piped.removeListener('data', lineListener) |
| piped.removeListener('end', endListener) |
| stream.unpipe(piped) |
| }) |
| } |
| |
| module.exports.talk = function(log, format, stream) { |
| stream.pipe(split()) |
| .on('data', function(chunk) { |
| var line = chunk.toString().trim() |
| if (line.length) { |
| log.info(format, line) |
| } |
| }) |
| } |