37 lines
664 B
JavaScript
37 lines
664 B
JavaScript
|
var ReadStream = require('fs').ReadStream
|
||
|
var Stream = require('stream')
|
||
|
|
||
|
module.exports = function destroy(stream) {
|
||
|
if (stream instanceof ReadStream) {
|
||
|
return destroyReadStream(stream)
|
||
|
}
|
||
|
|
||
|
if (!(stream instanceof Stream)) {
|
||
|
return stream
|
||
|
}
|
||
|
|
||
|
if (typeof stream.destroy === 'function') {
|
||
|
stream.destroy()
|
||
|
}
|
||
|
|
||
|
return stream
|
||
|
}
|
||
|
|
||
|
function destroyReadStream(stream) {
|
||
|
stream.destroy()
|
||
|
|
||
|
if (typeof stream.close === 'function') {
|
||
|
// node.js core bug work-around
|
||
|
stream.on('open', onopenClose)
|
||
|
}
|
||
|
|
||
|
return stream
|
||
|
}
|
||
|
|
||
|
function onopenClose() {
|
||
|
if (typeof this.fd === 'number') {
|
||
|
// actually close down the fd
|
||
|
this.close()
|
||
|
}
|
||
|
}
|