| /*! |
| * 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() |
| } |
| } |