Initial commit
[yaffs-website] / node_modules / stdout-stream / index.js
1 var fs = require('fs');
2 var Writable = require('readable-stream/writable');
3
4 var exists = function(path) {
5         try {
6                 return fs.existsSync(path);
7         } catch (err) {
8                 return false;
9         }
10 };
11
12 module.exports = function() {
13         var s = new Writable({highWaterMark:0});
14
15         var cb;
16         var data;
17         var tries = 0;
18         var offset = 0;
19
20         var write = function() {
21                 fs.write(1, data, offset, data.length - offset, null, onwrite);
22         };
23
24         var onwrite = function(err, written) {
25                 if (err && err.code === 'EPIPE') return cb()
26                 if (err && err.code === 'EAGAIN' && tries++ < 30) return setTimeout(write, 10);
27                 if (err) return cb(err);
28
29                 tries = 0;
30                 if (offset + written >= data.length) return cb();
31
32                 offset += written;
33                 write();
34         };
35
36         s._write = function(_data, enc, _cb) {
37                 offset = 0;
38                 cb = _cb;
39                 data = _data;
40                 write();
41         };
42
43         s._isStdio = true;
44         s.isTTY = process.stdout.isTTY;
45
46         s.on('finish', function() {
47                 fs.close(1, function(err) {
48                         if (err) s.emit('error', err);
49                 });
50         });
51
52         return s;
53 }();