diff options
Diffstat (limited to 'node_modules/decompress-response/index.js')
| -rw-r--r-- | node_modules/decompress-response/index.js | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/node_modules/decompress-response/index.js b/node_modules/decompress-response/index.js new file mode 100644 index 0000000..0379dc5 --- /dev/null +++ b/node_modules/decompress-response/index.js @@ -0,0 +1,40 @@ +'use strict'; +const {PassThrough: PassThroughStream} = require('stream'); +const zlib = require('zlib'); +const mimicResponse = require('mimic-response'); + +const decompressResponse = response => { + const contentEncoding = (response.headers['content-encoding'] || '').toLowerCase(); + + if (!['gzip', 'deflate', 'br'].includes(contentEncoding)) { + return response; + } + + const isBrotli = contentEncoding === 'br'; + if (isBrotli && typeof zlib.createBrotliDecompress !== 'function') { + return response; + } + + const decompress = isBrotli ? zlib.createBrotliDecompress() : zlib.createUnzip(); + const stream = new PassThroughStream(); + + mimicResponse(response, stream); + + decompress.on('error', error => { + // Ignore empty response + if (error.code === 'Z_BUF_ERROR') { + stream.end(); + return; + } + + stream.emit('error', error); + }); + + response.pipe(decompress).pipe(stream); + + return stream; +}; + +module.exports = decompressResponse; +// TODO: remove this in the next major version +module.exports.default = decompressResponse; |