Version 1
[yaffs-website] / node_modules / get-stream / index.js
1 'use strict';
2 var Promise = require('pinkie-promise');
3 var objectAssign = require('object-assign');
4 var bufferStream = require('./buffer-stream');
5
6 function getStream(inputStream, opts) {
7         if (!inputStream) {
8                 return Promise.reject(new Error('Expected a stream'));
9         }
10
11         opts = objectAssign({maxBuffer: Infinity}, opts);
12         var maxBuffer = opts.maxBuffer;
13         var stream;
14         var clean;
15
16         var p = new Promise(function (resolve, reject) {
17                 stream = bufferStream(opts);
18                 inputStream.once('error', error);
19                 inputStream.pipe(stream);
20
21                 stream.on('data', function () {
22                         if (stream.getBufferedLength() > maxBuffer) {
23                                 reject(new Error('maxBuffer exceeded'));
24                         }
25                 });
26                 stream.once('error', error);
27                 stream.on('end', resolve);
28
29                 clean = function () {
30                         // some streams doesn't implement the stream.Readable interface correctly
31                         if (inputStream.unpipe) {
32                                 inputStream.unpipe(stream);
33                         }
34                 };
35
36                 function error(err) {
37                         if (err) { // null check
38                                 err.bufferedData = stream.getBufferedValue();
39                         }
40                         reject(err);
41                 }
42         });
43
44         p.then(clean, clean);
45
46         return p.then(function () {
47                 return stream.getBufferedValue();
48         });
49 }
50
51 module.exports = getStream;
52
53 module.exports.buffer = function (stream, opts) {
54         return getStream(stream, objectAssign({}, opts, {encoding: 'buffer'}));
55 };
56
57 module.exports.array = function (stream, opts) {
58         return getStream(stream, objectAssign({}, opts, {array: true}));
59 };