12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- 'use strict';
- const bufferStream = require('./buffer-stream');
-
- function getStream(inputStream, opts) {
- if (!inputStream) {
- return Promise.reject(new Error('Expected a stream'));
- }
-
- opts = Object.assign({maxBuffer: Infinity}, opts);
-
- const maxBuffer = opts.maxBuffer;
- let stream;
- let clean;
-
- const p = new Promise((resolve, reject) => {
- const error = err => {
- if (err) { // null check
- err.bufferedData = stream.getBufferedValue();
- }
-
- reject(err);
- };
-
- stream = bufferStream(opts);
- inputStream.once('error', error);
- inputStream.pipe(stream);
-
- stream.on('data', () => {
- if (stream.getBufferedLength() > maxBuffer) {
- reject(new Error('maxBuffer exceeded'));
- }
- });
- stream.once('error', error);
- stream.on('end', resolve);
-
- clean = () => {
- // some streams doesn't implement the `stream.Readable` interface correctly
- if (inputStream.unpipe) {
- inputStream.unpipe(stream);
- }
- };
- });
-
- p.then(clean, clean);
-
- return p.then(() => stream.getBufferedValue());
- }
-
- module.exports = getStream;
- module.exports.buffer = (stream, opts) => getStream(stream, Object.assign({}, opts, {encoding: 'buffer'}));
- module.exports.array = (stream, opts) => getStream(stream, Object.assign({}, opts, {array: true}));
|