| ; | |
| const {constants: BufferConstants} = require('buffer'); | |
| const pump = require('pump'); | |
| const bufferStream = require('./buffer-stream'); | |
| class MaxBufferError extends Error { | |
| constructor() { | |
| super('maxBuffer exceeded'); | |
| this.name = 'MaxBufferError'; | |
| } | |
| } | |
| async function getStream(inputStream, options) { | |
| if (!inputStream) { | |
| return Promise.reject(new Error('Expected a stream')); | |
| } | |
| options = { | |
| maxBuffer: Infinity, | |
| ...options | |
| }; | |
| const {maxBuffer} = options; | |
| let stream; | |
| await new Promise((resolve, reject) => { | |
| const rejectPromise = error => { | |
| // Don't retrieve an oversized buffer. | |
| if (error && stream.getBufferedLength() <= BufferConstants.MAX_LENGTH) { | |
| error.bufferedData = stream.getBufferedValue(); | |
| } | |
| reject(error); | |
| }; | |
| stream = pump(inputStream, bufferStream(options), error => { | |
| if (error) { | |
| rejectPromise(error); | |
| return; | |
| } | |
| resolve(); | |
| }); | |
| stream.on('data', () => { | |
| if (stream.getBufferedLength() > maxBuffer) { | |
| rejectPromise(new MaxBufferError()); | |
| } | |
| }); | |
| }); | |
| return stream.getBufferedValue(); | |
| } | |
| module.exports = getStream; | |
| // TODO: Remove this for the next major release | |
| module.exports.default = getStream; | |
| module.exports.buffer = (stream, options) => getStream(stream, {...options, encoding: 'buffer'}); | |
| module.exports.array = (stream, options) => getStream(stream, {...options, array: true}); | |
| module.exports.MaxBufferError = MaxBufferError; | |
Xet Storage Details
- Size:
- 1.44 kB
- Xet hash:
- 0f38a6ad8b9994bf44fd01777125add30e8ccf4319bd42ddaed4b43054f412a7
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.