cmux/node_modules/stream-to-promise/index.js
2026-01-29 17:36:26 -08:00

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)
}