/*!
|
|
* destroy
|
|
* Copyright(c) 2014 Jonathan Ong
|
|
* MIT Licensed
|
|
*/
|
|
|
|
'use strict'
|
|
|
|
/**
|
|
* Module dependencies.
|
|
* @private
|
|
*/
|
|
|
|
var ReadStream = require('fs').ReadStream
|
|
var Stream = require('stream')
|
|
|
|
/**
|
|
* Module exports.
|
|
* @public
|
|
*/
|
|
|
|
module.exports = destroy
|
|
|
|
/**
|
|
* Destroy a stream.
|
|
*
|
|
* @param {object} stream
|
|
* @public
|
|
*/
|
|
|
|
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
|
|
}
|
|
|
|
/**
|
|
* Destroy a ReadStream.
|
|
*
|
|
* @param {object} stream
|
|
* @private
|
|
*/
|
|
|
|
function destroyReadStream(stream) {
|
|
stream.destroy()
|
|
|
|
if (typeof stream.close === 'function') {
|
|
// node.js core bug work-around
|
|
stream.on('open', onOpenClose)
|
|
}
|
|
|
|
return stream
|
|
}
|
|
|
|
/**
|
|
* On open handler to close stream.
|
|
* @private
|
|
*/
|
|
|
|
function onOpenClose() {
|
|
if (typeof this.fd === 'number') {
|
|
// actually close down the fd
|
|
this.close()
|
|
}
|
|
}
|