40 lines
946 B
JavaScript
40 lines
946 B
JavaScript
'use strict'
|
|
|
|
var toArray = require('stream-to-array')
|
|
var Promise = require('any-promise')
|
|
var onEnd = require('end-of-stream')
|
|
|
|
module.exports = streamToPromise
|
|
|
|
function streamToPromise (stream) {
|
|
if (stream.readable) return fromReadable(stream)
|
|
if (stream.writable) return fromWritable(stream)
|
|
return Promise.resolve()
|
|
}
|
|
|
|
function fromReadable (stream) {
|
|
var promise = toArray(stream)
|
|
|
|
// Ensure stream is in flowing mode
|
|
if (stream.resume) stream.resume()
|
|
|
|
return promise
|
|
.then(function concat (parts) {
|
|
if (stream._readableState && stream._readableState.objectMode) {
|
|
return parts
|
|
}
|
|
return Buffer.concat(parts.map(bufferize))
|
|
})
|
|
}
|
|
|
|
function fromWritable (stream) {
|
|
return new Promise(function (resolve, reject) {
|
|
onEnd(stream, function (err) {
|
|
(err ? reject : resolve)(err)
|
|
})
|
|
})
|
|
}
|
|
|
|
function bufferize (chunk) {
|
|
return Buffer.isBuffer(chunk) ? chunk : new Buffer(chunk)
|
|
}
|