pipe implementation
- Dominant language
- JavaScript
- Stars
- 7
- Forks
- 1
- PR merge metrics
- No merged PRs in 30d
Description
`pipe :: Reducible -> WritableStream -> Null`
`pipe` should move data from a Reducible into a WritableStream.
``` js
var reduce = require("reducible/reduce")
var end = require("reducible/end")
var isError = require("reducible/is-error")
var isReduced = require("reducible/is-reduced")
var reduced = require("reducible/reduced")
module.exports = pipe
function pipe(reducible, writableStream, options) {
var shouldEnd = !options || options.end !== false
var hasEnded = false
reduce(reducible, function (value) {
if (writableStream.writable === false || hasEnded) {
return reduced(null)
}
if (isError(value)) {
hasEnded = true
writableStream.destroy && writableStream.destroy()
writableStream.emit("error", value)
} else if (value === end) {
if (!writableStream._isStdio && shouldEnd) {
hasEnded = true
writableStream.end()
}
} else {
var hasDrained = writableStream.write(value)
}
})
writableStream.on("error", onerror)
writableStream.on("close", cleanup)
writableStream.on("end", cleanup)
writableStream.on("finish", cleanup)
function onerror(err) {
cleanup()
if (writableStream.listeners("error").length === 0) {
throw err // Unhandled stream error in pipe.
}
}
function cleanup() {
hasEnded = true
writableStream.removeListener("error", onerror)
writableStream.removeListener("close", cleanup)
writableStream.removeListener("end", cleanup)
writableStream.removeListener("finish", cleanup)
}
}
```
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.