123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- '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}));
|