diff options
Diffstat (limited to 'node_modules/stdout-stream/index.js')
-rw-r--r-- | node_modules/stdout-stream/index.js | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/node_modules/stdout-stream/index.js b/node_modules/stdout-stream/index.js new file mode 100644 index 0000000..a8ab752 --- /dev/null +++ b/node_modules/stdout-stream/index.js @@ -0,0 +1,53 @@ +var fs = require('fs'); +var Writable = require('readable-stream/writable'); + +var exists = function(path) { + try { + return fs.existsSync(path); + } catch (err) { + return false; + } +}; + +module.exports = function() { + var s = new Writable({highWaterMark:0}); + + var cb; + var data; + var tries = 0; + var offset = 0; + + var write = function() { + fs.write(1, data, offset, data.length - offset, null, onwrite); + }; + + var onwrite = function(err, written) { + if (err && err.code === 'EPIPE') return cb() + if (err && err.code === 'EAGAIN' && tries++ < 30) return setTimeout(write, 10); + if (err) return cb(err); + + tries = 0; + if (offset + written >= data.length) return cb(); + + offset += written; + write(); + }; + + s._write = function(_data, enc, _cb) { + offset = 0; + cb = _cb; + data = _data; + write(); + }; + + s._isStdio = true; + s.isTTY = process.stdout.isTTY; + + s.on('finish', function() { + fs.close(1, function(err) { + if (err) s.emit('error', err); + }); + }); + + return s; +}(); |