You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
860 B
36 lines
860 B
'use strict'; |
|
const PassThrough = require('stream').PassThrough; |
|
const zlib = require('zlib'); |
|
|
|
module.exports = res => { |
|
// TODO: use Array#includes when targeting Node.js 6 |
|
if (['gzip', 'deflate'].indexOf(res.headers['content-encoding']) === -1) { |
|
return res; |
|
} |
|
|
|
const unzip = zlib.createUnzip(); |
|
const stream = new PassThrough(); |
|
|
|
stream.httpVersion = res.httpVersion; |
|
stream.headers = res.headers; |
|
stream.rawHeaders = res.rawHeaders; |
|
stream.trailers = res.trailers; |
|
stream.rawTrailers = res.rawTrailers; |
|
stream.setTimeout = res.setTimeout.bind(res); |
|
stream.statusCode = res.statusCode; |
|
stream.statusMessage = res.statusMessage; |
|
stream.socket = res.socket; |
|
|
|
unzip.on('error', err => { |
|
if (err.code === 'Z_BUF_ERROR') { |
|
stream.end(); |
|
return; |
|
} |
|
|
|
stream.emit('error', err); |
|
}); |
|
|
|
res.pipe(unzip).pipe(stream); |
|
|
|
return stream; |
|
};
|
|
|